Files
edu/css/intro.css
T

868 lines
18 KiB
CSS

@charset "UTF-8";
:root {
/* text - 텍스트 색상 */
--text-intro-base: #1b1810;
--text-base: #131313;
--text-revers: #fff;
--text-primary: #3c3321;
--text-secondary: #747474;
--text-accent: #ff5c00;
--text-myclass: #ffdf60;
--text-main-primary: #4a4040;
--text-main-secondary: #3a200d;
--text-title-accent: #f5651d;
--text-pick: #2b5045;
--text-keyword-base: #c4c2c0;
--text-keyword-primary: #fff;
--text-keyword-secondary: #999999;
--text-video-primary: #b6d5a7;
--text-video-secondary: #ddd;
--text-cate-primary: #edd8c2;
--text-cate-secondary: #b6d5a7;
--text-cate-tertiary: #e8cfe4;
--text-comment-primary: #fff;
--text-comment-secondary: #8d8d8d;
--text-learning-base: #8d8888;
--text-learning-primary: #ff5c00;
--text-learning-secondary: #008c49;
--text-card-category: #252525;
--text-card-title-active: #ff7d33;
--text-card-title-complete: #66ba92;
--text-card-author: #d1cfcf;
/* 배경 */
--bg-base: #e4ddcf;
--bg-primary: #ece3d2;
--bg-secondary:
radial-gradient(93.89% 93.89% at 49.32% 6.11%,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.11) 86.06%,
rgba(134, 114, 77, 0.2) 88.94%),
linear-gradient(180deg, #f9f6f0 0%, #e6ddcc 100%);
--bg-main-card: rgba(255, 255, 255, 0.6);
--bg-intro-mask: #1b1810;
--bg-intro: linear-gradient(180deg,
#f9f5f2 0%,
#fff 18.77%,
#fff 41.8%,
#ece8e4 100%);
--bg-main:
linear-gradient(90deg,
#0f3025 0%,
#194335 38%,
#0b221b 87.51%,
#0d231c 100%) top / 100% 114px no-repeat,
#ece3d2;
--bg-video: #1b1b1b;
--bg-comment: #2a2a2a;
--bg-nav: linear-gradient(90deg,
#0f3025 0%,
#194335 38%,
#0b221b 87.51%,
#0d231c 100%);
--bg-nav-depth: #fff;
--bg-nav-alerts: #ff2200;
--bg-nav-alerts-hover: #188f6b;
--bg-cate-primary: #ded7cf;
--bg-cate-secondary: #d4decf;
--bg-cate-tertiary: #e8cfe4;
--bg-pick: linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, #d5ede6 100%);
--bg-gauge-base: #b4b4b4;
--bg-gauge-primary: #ff5c00;
--bg-search: #e4dbc9;
--bg-keyword-base: rgba(230, 205, 177, 0.3);
--bg-keyword-primary: #e47703;
--bg-keyword-primary-hover: #e6cdb1;
--bg-keyword-secondary: #786c60;
--bg-keyword-secondary-hover: #dcd3c9;
--bg-lecture-state: linear-gradient(270deg, #00ab66 0%, #058bb0 100%);
--bg-lecture-progress-primary: rgba(3, 9, 7, 0.3);
--bg-lecture-progress-secondary: #07855c;
--bg-btn-base: #000;
--bg-btn-primary: #ff5c00;
--bg-btn-secondary: #1f1f1f;
--bg-card: rgba(255, 255, 255, 0.6);
--bg-card-hover-start: #ff6600;
--bg-card-hover-end: rgba(255, 132, 0, 0.7);
--bg-card-thumb-overlay: rgba(255, 255, 255, 0.3);
--bg-card-shadow: rgba(217, 202, 190, 0.5);
--bg-card-hover-shadow: rgba(198, 187, 177, 0.5);
--bg-card-shadow-inner: rgba(0, 0, 0, 1);
--bg-pick-shadow: rgba(166, 154, 97, 0.25);
--bg-modal: rgba(0, 0, 0, 0.8);
--bg-modal-content: #f6f1e9;
--bg-modal-close-hover: #e00400;
--bg-scrollbar-thumb: #D0D0D0;
--bg-scrollbar-thumb-dark: #383838;
--bg-scrollbar-track: #F3F3F3;
--bg-scrollbar-thumb-light: rgba(255, 255, 255, 0.2);
--bg-scrollbar-thumb-light-hover: rgba(255, 255, 255, 0.3);
--bg-scrollbar-track-light: rgba(255, 255, 255, 0.05);
--bg-video-gauge: #171717;
--bg-video-gauge-fill: #ff6c19;
--bg-video-gauge-border: rgba(0, 0, 0, 0.4);
--bg-learning-line: #c6c3c3;
--bg-learning-dot: #8d8888;
--bg-learning-active: rgba(255, 92, 0, 0.2);
--bg-learning-active-line: #ffad7f;
--bg-learning-active-dot: #ff5c00;
--bg-learning-complete: rgba(0, 140, 73, 0.2);
--bg-learning-complete-line: #7fc5a4;
--bg-learning-complete-dot: #008c49;
--bg-chapter-current: #146b51;
--bg-chapter-completed: #ba9a85;
--bg-card-base: #7e7e7e;
--bg-card-current: #1d9b75;
--bg-card-current-border: #1f9b76;
--bg-card-current-bg: #dbefe9;
--bg-card-completed: #ab3d00;
--bg-gauge-fill: #e25e00;
--bg-shadow: #8a7d64;
--bg-puzzle-family: #7ed29b;
--bg-puzzle-hanmac: #ffccca;
--bg-puzzle-value: #87a7d6;
--bg-puzzle-company: #b49a65;
--bg-piece-1: #1d375d;
--bg-piece-2: #662a0d;
--bg-piece-3: #5b4822;
--bg-piece-4: #2a5338;
--bg-circle-border: #a7790f;
--bg-circle-start: rgba(127, 47, 0, 0.1);
--bg-circle-end: rgba(167, 121, 15, 0.5);
--bg-circle-dot: rgba(221, 144, 0, 0.6);
--bg-circle-dot-hover: rgba(221, 144, 0, 0.8);
--bg-circle-dot-stroke: rgba(221, 144, 0, 0.2);
--bg-gradient-start: #ece3d2;
--bg-gradient-end: #fff;
--bg-learning-line-color: #edba8a;
--bg-modal-header: #f04400;
--bg-textarea: #2a2a2a;
--bg-textarea-placeholder: rgba(255, 255, 255, 0.5);
/* border */
--border-base: rgba(0, 0, 0, 0.05);
--border-primary: #fff;
--border-keyword-base: rgba(0, 0, 0, 0.05);
--border-keyword-primary: rgba(255, 255, 255, 0.4);
--border-keyword-primary-hover: rgba(0, 0, 0, 0.05);
--border-keyword-secondary: rgba(255, 255, 255, 0.4);
--border-keyword-secondary-hover: rgba(0, 0, 0, 0.1);
--border-pick: rgba(255, 255, 255, 0.5);
--border-video: rgba(255, 255, 255, 0.1);
--border-btn: rgba(255, 255, 255, 0.2);
--border-card: rgba(255, 255, 255, 0.8);
--border-modal: #888;
--border-comment-resizer: rgba(230, 227, 225, 0.1);
/* drop */
--text-shadow:
-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
--text-stroke: drop-shadow(0 0 0.5px #000);
/* shadow */
--shadow-pagination: rgba(0, 0, 0, 0.4);
--shadow-modal: rgba(0, 0, 0, 0.25);
--shadow-card-drop: 0 4px 8px rgba(0, 0, 0, 0.2);
--shadow-card-drop-small: 0 4px 2px rgba(0, 0, 0, 0.05);
--shadow-gauge-inset: rgba(0, 0, 0, 0.3);
--shadow-comment: 0 8px 22px 22px rgba(0, 0, 0, 0.8);
}
/* 페이드 전환 */
.fade-out {
opacity: 0;
transition: opacity 0.4s ease;
}
.fade-in {
opacity: 1;
transition: opacity 0.4s ease;
}
@keyframes fadeInUp {
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes arrow-next {
0%,
100% {
right: 72px;
}
50% {
right: 50px;
}
}
@keyframes bounce {
0%,
100% {
transform: translateX(-50%) translateY(0);
}
50% {
transform: translateX(-50%) translateY(-12px);
}
}
@keyframes slideUp {
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes scroll-down {
0% {
transform-origin: 50% 100%;
transform: scaleY(1);
}
50% {
transform-origin: 50% 100%;
transform: scaleY(0);
}
50.1% {
transform-origin: 50% 0;
transform: scaleY(0);
}
to {
transform-origin: 50% 0;
transform: scaleY(1);
}
}
@keyframes pulse {
0%,
100% {
opacity: 0.2;
}
50% {
opacity: 0.4;
}
}
@keyframes borderFadeIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes borderPulse {
0%,
100% {
border-color: #fff;
box-shadow: 0 0 20px rgba(255, 255, 255, 0.4);
}
50% {
border-color: #fff;
box-shadow: 0 0 30px rgba(255, 255, 255, 0.6);
}
}
@font-face {
font-family: "YeogiOttaeJalnan";
src: url("https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_four@1.2/JalnanOTF00.woff") format("woff");
font-weight: normal;
font-display: swap;
}
.intro {
background: var(--bg-intro);
background-attachment: fixed;
overflow: auto;
}
.intro .container {
position: relative;
top: 0;
height: var(--window-inner-height);
margin-top: 0;
padding: 0;
overflow: hidden;
border: none;
border-radius: 0;
clip-path: none;
background: var(--bg-intro);
color: var(--text-intro-base);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.intro .text-ani {
display: none;
}
.intro .text-ani:has(.welcome span.show),
.intro .text-ani:has(.update-line span.show),
.intro .text-ani:has(.card.show),
.intro .text-ani.animating {
display: block;
}
@media only screen and (max-width: 991px) {
.intro .text-ani:has(.card.show) {
display: flex;
flex-direction: column;
flex: 1 1 0;
min-height: 0;
width: 100%;
}
}
.intro .text-area {
min-height: 160px;
margin-bottom: 34px;
text-align: center;
}
.intro .text-area:has(.greeting.hidden, .update-text.hidden) {
min-height: 0;
margin-bottom: 0;
}
.intro .greeting {
font-size: 36px;
font-weight: 300;
line-height: 1.2;
}
@media only screen and (min-width: 1024px) {
.intro .greeting {
height: 656px;
}
}
@media only screen and (max-width: 1023px) {
.intro .greeting {
font-size: 2.8rem;
min-height: 15.8rem;
}
.intro .greeting p.welcome>*:nth-child(5) {
display: block;
line-height: 0;
}
}
.intro .name {
font-weight: 500;
}
.intro .welcome span {
display: inline-block;
opacity: 0;
transform: translateY(20px);
}
.intro .welcome span.show {
animation: fadeInUp 0.4s forwards;
}
.intro .welcome em {
font-weight: 500;
}
@media only screen and (max-width: 1023px) {
.intro .welcome {
margin-top: 2rem;
}
}
.intro .update-text {
text-align: center;
}
.intro .update-line {
overflow: hidden;
font-size: 36px;
}
@media only screen and (max-width: 1023px) {
.intro .update-line {
font-size: 2.8rem;
}
}
@media only screen and (max-width: 1023px) {
.intro .update-line:last-child {
margin-top: 2rem;
}
}
.intro .update-line.bold,
.intro .update-line em {
font-weight: 500;
}
.intro .update-line>span {
display: inline-block;
opacity: 0;
transform: translateY(100%);
}
.intro .update-line>span.show {
animation: slideUp 0.6s forwards;
}
.intro .cta-text {
position: relative;
width: 100vw;
height: var(--window-inner-height);
font-size: 42px;
font-weight: 300;
line-height: 1.2;
text-align: center;
}
@media only screen and (max-width: 1023px) {
.intro .cta-text {
font-size: 2.8rem;
}
}
.intro .cta-text>div {
width: 100vw;
height: var(--window-inner-height);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.intro .cta-text>div:not(.mask) {
position: relative;
z-index: 1;
cursor: default;
}
.intro .cta-text>div:not(.mask) .text-section {
opacity: 0;
transform: translateY(20px);
}
.intro .cta-text>div:not(.mask) .text-section:has(.show) {
background-image: url(../images/intro/promise.svg);
background-position: bottom;
background-size: 586px auto;
background-repeat: no-repeat;
animation: fadeInUp 0.5s forwards;
}
@media only screen and (max-width: 1023px) {
.intro .cta-text>div:not(.mask) .text-section:has(.show) {
background-size: 120% auto;
}
}
.intro .cta-text>div:not(.mask) p {
opacity: 0;
transform: translateY(20px);
}
.intro .cta-text>div:not(.mask) p.show {
animation: fadeInUp 0.5s forwards;
}
.intro .cta-text .text-section {
height: 260px;
translate: 0 -35%;
opacity: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
@media only screen and (max-width: 1023px) {
.intro .cta-text .text-section {
width: calc(100% - 32px);
max-width: 452px;
height: 18rem;
translate: 0 -40%;
}
}
.intro .cta-text .text-section.show {
animation: opacity 0.5s forwards;
}
.intro .cta-text em {
font-weight: 500;
}
.intro .cta-btn {
position: absolute;
top: 50%;
left: 50%;
z-index: 99;
width: calc(100% - 32px);
max-width: 483px;
height: 116px;
padding: 22px 0;
border: none;
border-radius: 24px;
background: radial-gradient(117.51% 77.94% at 48.87% 100%, rgba(255, 255, 255, 0.6) 0%, rgba(255, 255, 255, 0.3) 24.58%, rgba(255, 255, 255, 0) 100%), #ff8200;
color: white;
font-size: 36px;
font-weight: bold;
text-align: center;
text-shadow: 0 2px 2px rgba(201, 121, 38, 0.5);
opacity: 0;
transform: translate(-50%, 25%) translateY(50px);
transition: all 0.3s;
}
@media only screen and (max-width: 1023px) {
.intro .cta-btn {
width: calc(100% - 32px);
height: 68px;
padding: 0;
font-size: 28px;
}
}
@media only screen and (min-width: 992px) {
.intro .cta-btn {
box-shadow: 0 -4px 4px 0 #e18d36 inset, 4px 4px 12px -4px rgba(220, 196, 172, 0.85);
}
}
.intro .cta-btn.show {
opacity: 1;
transform: translate(-50%, 25%) translateY(0);
transition: all 0.3s linear;
}
.intro .cta-btn::after {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 2px;
box-sizing: border-box;
background: linear-gradient(65deg, rgba(255, 255, 255, 0.6) 0%, transparent 100%) #ff8200;
content: "";
display: block;
position: absolute;
inset: 0;
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
border-radius: inherit;
}
.intro .cta-btn .ico-arrow {
position: absolute;
top: 50%;
right: 72px;
display: inline-block;
width: 24px;
height: 32px;
background-image: url(../images/ico/ico_arrow_next_dashed.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
filter: drop-shadow(0 2px 2px rgba(201, 121, 38, 0.5));
transform: translateY(-50%);
animation: arrow-next 3s infinite ease-in-out;
}
.intro .mask {
position: absolute;
top: 0;
left: 0;
z-index: 10;
width: 100%;
height: 100%;
min-height: 100%;
background-color: var(--bg-intro-mask);
color: rgba(0, 0, 0, 0.2);
pointer-events: none;
--size: 0px;
--x: 50vw;
--y: 50vh;
-webkit-mask-image: url(../images/cursor.svg);
-webkit-mask-origin: content-box;
-webkit-mask-position: calc(var(--x) - var(--size) / 2) calc(var(--y) - var(--size) / 2), center;
-webkit-mask-repeat: no-repeat;
-webkit-mask-size: var(--size), contain;
mask-image: url(../images/cursor.svg);
mask-origin: content-box;
mask-position: calc(var(--x) - var(--size) / 2) calc(var(--y) - var(--size) / 2), center;
mask-repeat: no-repeat;
mask-size: var(--size), contain;
transition: -webkit-mask-size 0.2s linear;
transition: mask-size 0.2s linear;
transition: mask-size 0.2s linear, -webkit-mask-size 0.2s linear;
}
@media only screen and (max-width: 991px) {
.intro .mask {
-webkit-mask-image: none;
mask-image: none;
clip-path: circle(0% at 50% 50%);
transition: clip-path 3.5s ease-out;
}
.intro .mask.expand {
clip-path: circle(300% at 50% 50%);
}
}
.intro .mask .text-section {
background-image: url(../images/intro/promise_b.svg);
background-position: bottom;
background-size: auto;
background-repeat: no-repeat;
}
@media only screen and (max-width: 1023px) {
.intro .mask .text-section {
background-size: 95% auto;
}
}
.intro .mask .mask-text {
color: #fff;
}
.intro .mask .mask-text em {
font-style: normal;
}
.intro .content-area {
margin-top: 34px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
@media only screen and (max-width: 991px) {
.intro .content-area {
flex: 1 1 0;
min-height: 0;
margin-top: 0;
align-items: stretch;
}
}
.intro .card {
opacity: 0;
transform: translateY(60px);
transition: all 0.6s ease;
background: white;
border: 2px solid rgba(255, 255, 255, 0.8);
border-radius: 0 0 12px 12px;
box-shadow: 0 24px 24px 0 rgba(215, 209, 204, 0.5);
text-align: center;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
@media only screen and (min-width: 992px) {
.intro .card {
flex: 0 0 calc(50% - 12px);
padding: 60px 32px 48px;
}
}
@media only screen and (min-width: 1200px) {
.intro .card {
flex: 1 1 0;
width: 340px;
padding: 86px 22px 68px;
}
}
@media only screen and (max-width: 991px) {
.intro .card {
flex: 1 1 0;
min-height: 0;
width: calc(100vw - 32px);
padding: 0 24px;
z-index: 9;
transition-duration: 0.9s;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
box-shadow: 0 4px 12px rgba(215, 209, 204, 0.5);
border-radius: 12px;
}
}
.intro .card.show {
opacity: 1;
transform: translateY(0);
}
.intro .card-list {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 20px;
}
@media only screen and (min-width: 1200px) {
.intro .card-list {
flex-wrap: nowrap;
}
}
@media only screen and (max-width: 1023px) {
.intro .card-list {
gap: 2.4rem;
}
}
@media only screen and (max-width: 991px) {
.intro .card-list {
flex-direction: column;
flex-wrap: nowrap;
flex: 1 1 0;
min-height: var(--window-inner-height);
gap: 8px;
padding: 8px 16px;
align-items: stretch;
}
}
.intro .card-num {
font-family: YeogiOttaeJalnan;
font-size: 120px;
font-weight: 400;
line-height: 1;
color: transparent;
opacity: 0.1;
background: linear-gradient(180deg, transparent 30%, #ffffff 80%) #1b1810;
-webkit-background-clip: text;
background-clip: text;
}
@media only screen and (max-width: 1023px) {
.intro .card-num {
font-size: 6rem;
}
}
.intro .card-title {
margin-top: -46px;
margin-bottom: 42px;
font-size: 32px;
font-weight: 300;
line-height: 1.2;
}
@media only screen and (max-width: 1023px) {
.intro .card-title {
font-size: 2.4rem;
}
}
@media only screen and (max-width: 991px) {
.intro .card-title {
margin-top: -32px;
margin-bottom: 0;
}
}
.intro .card-desc {
font-size: 24px;
}
@media only screen and (max-width: 1023px) {
.intro .card-desc {
font-size: 1.6rem;
}
}
@media only screen and (max-width: 991px) {
.intro .card-desc {
display: none;
}
}
.intro .card em {
font-weight: 700;
}
.typing {
opacity: 0;
}
.cursor {
display: inline-block;
width: 2px;
height: 1.2em;
margin-left: 2px;
vertical-align: text-bottom;
animation: blink 0.7s infinite;
}
.scroll-indicator {
position: absolute;
bottom: 0;
left: 50%;
display: flex;
flex-direction: column;
align-items: center;
gap: 24px;
transform: translateX(-50%);
}
.scroll-indicator.hidden {
opacity: 0;
pointer-events: none;
}
.scroll-indicator.sec2 .bar {
height: 60px;
}
.scroll-indicator span {
font-size: 16px;
color: var(--text-intro-base);
opacity: 0.8;
}
.scroll-indicator .bar {
width: 2px;
height: 110px;
overflow: hidden;
background-color: rgba(0, 0, 0, 0.3);
transition: height 0.5s linear;
}
.scroll-indicator .bar::before {
content: " ";
display: block;
width: 100%;
height: 100%;
border-radius: 0 0 4px 4px;
background-color: #111;
animation: scroll-down 2s infinite ease-in-out;
}