/* ==========================================================================
   JETCO /beta — 교육센터 (교육과정 · 과정 상세 · 교육일정 · 회차 상세)
   prefix: ed-   ·   site.css 토큰 기반 (paper / ink / night / brand / tape / signal)
   상태 색 체계 (캘린더 · 타임라인 · 배지 공통)
     모집중(예정) = 브랜드 인디고  ·  진행중 = 테이프 옐로우(잉크 글자)  ·  마감 = 흐린 회색
   ========================================================================== */

/* ---------- 0. Shared bits ---------- */
#ed-curriculum, #ed-cal, #ed-up, #ed-tl, #ed-sessions {
    scroll-margin-top: calc(var(--header-h) + var(--subnav-h) + 20px);
}
.ed-dim { color: var(--muted); font-weight: 400; }
.ed-layer { position: relative; z-index: 1; }

/* 키네틱 아웃라인 타입 (섹션 제목 뒤 · 스크롤에 따라 가로 이동 = data-scrub-x) */
.ed-kinetic {
    position: absolute; left: 0; right: 0; top: clamp(28px, 4.4vw, 68px); z-index: 0;
    overflow: hidden; pointer-events: none; user-select: none; white-space: nowrap; line-height: 1;
}
.ed-kinetic > span {
    display: inline-block; padding-left: 7vw;
    font-size: clamp(84px, 14vw, 230px); font-weight: 800; letter-spacing: -0.06em; line-height: 1;
    color: transparent; -webkit-text-stroke: 1.5px rgba(46, 48, 146, .11);
}
.ed-kinetic--cal { top: clamp(18px, 3vw, 44px); }
.ed-kinetic--file { top: clamp(18px, 3vw, 44px); }
.c-section--dark .ed-kinetic > span, [data-theme="dark"] .ed-kinetic > span { -webkit-text-stroke-color: rgba(236, 238, 255, .07); }

/* 마스크 상승 (부모 [data-reveal] 이 is-in 이 되면 글자가 아래에서 올라온다) */
.ed-rise { display: block; overflow: hidden; }
html.c-ready [data-reveal] .ed-rise > * { display: inline-block; transform: translate3d(0, 108%, 0); transition: transform 1.15s var(--ease) calc(var(--d, 0ms) + 260ms); }
html.c-ready [data-reveal] .ed-rise--2 > * { transition-delay: calc(var(--d, 0ms) + 400ms); }
html.c-ready [data-reveal].is-in .ed-rise > * { transform: none; }

/* 난이도 미터 (막대 3칸) */
.ed-meter { display: inline-flex; align-items: center; gap: 2px; flex: none; }
.ed-meter i { display: block; width: 9px; height: 9px; border-radius: 1.5px; background: var(--line-2); }
.ed-meter[data-lv="1"] i:nth-child(-n+1),
.ed-meter[data-lv="2"] i:nth-child(-n+2),
.ed-meter[data-lv="3"] i:nth-child(-n+3) { background: var(--ink); }
.ed-meter[data-lv="3"] i:nth-child(3) { background: var(--brand); }
.ed-meter--dark i { background: var(--night-line-2); }
.ed-meter--dark[data-lv="1"] i:nth-child(-n+1),
.ed-meter--dark[data-lv="2"] i:nth-child(-n+2),
.ed-meter--dark[data-lv="3"] i:nth-child(-n+3) { background: #fff; }
.ed-meter--dark[data-lv="3"] i:nth-child(3) { background: var(--tape); }

/* 난이도 배지 (관리자 지정 색상은 --lv 로 점에만 사용) */
.ed-lv { --lv: var(--ink-3); gap: 8px; text-transform: none; letter-spacing: .02em; font-family: var(--font-sans); font-size: 12px; font-weight: 600; }
.ed-lv__dot { display: block; width: 8px; height: 8px; border-radius: 2px; background: var(--lv); }

/* 상태 배지 — NEW · 진행중 */
.ed-badge-new { background: var(--signal); color: var(--on-signal); }
.c-badge.ed-badge-now { background: var(--tape); color: var(--ink); }
.c-badge.ed-badge-now::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--ink); animation: c-pulse 1.6s ease-in-out infinite; }

/* 상세 히어로 — 라틴 과정명은 에디토리얼 세리프 */
.c-subhero__title .ed-latin { font-family: var(--font-sans); font-style: normal; font-weight: 400; letter-spacing: -0.02em; }

/* 상태 견본 (범례) */
.ed-sdot { display: inline-block; width: 18px; height: 10px; border-radius: 3px; vertical-align: middle; }
.ed-sdot--s0 { background: var(--brand); box-shadow: inset 3px 0 0 var(--tape); }
.ed-sdot--s1 { background: var(--tape); }
.ed-sdot--s2 { background: var(--paper-2); box-shadow: inset 0 0 0 1px var(--line-2); }

/* 프레임 모서리 표식 */
.ed-corner { position: absolute; z-index: 3; width: 22px; height: 22px; pointer-events: none; border: 0 solid var(--signal); }
.ed-corner--tl { left: 14px; top: 14px; border-left-width: 2px; border-top-width: 2px; }
.ed-corner--tr { right: 14px; top: 14px; border-right-width: 2px; border-top-width: 2px; }
.ed-corner--bl { left: 14px; bottom: 14px; border-left-width: 2px; border-bottom-width: 2px; }
.ed-corner--br { right: 14px; bottom: 14px; border-right-width: 2px; border-bottom-width: 2px; }

.ed-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: clamp(40px, 5vw, 64px); }
.ed-actions--center { justify-content: center; margin-top: 18px; }

/* 빈 상태 — JETCO 심볼 */
.ed-empty__mark { width: 52px; height: 52px; opacity: .28; filter: grayscale(1); }

/* 줄바꿈 다듬기 — 짧은 마지막 줄(고아 단어) 방지 */
.ed-nw { display: inline-block; max-width: 100%; }   /* 히어로 설명의 "트랙 · 난이도 · 기간" 항목 단위 줄바꿈 */
.ed-keep { white-space: nowrap; }                     /* "수료증(영문)이" 처럼 괄호 뒤 조사가 떨어지지 않도록 */
.c-page-education .c-subhero__desc,
.c-page-education .c-lead,
.c-page-education .c-sechead__desc,
.ed-course__desc, .ed-info__text, .ed-facts dd, .ed-sess__more > span, .ed-ticket__note, .ed-more__text, .ed-cal__none, .ed-tl__note > span, .ed-legend > span { text-wrap: pretty; }
.c-page-education .c-empty__title, .c-page-education .c-empty p, .ed-more__title { text-wrap: balance; }

/* ==========================================================================
   1. 교육과정 — 공인 교육센터 인트로
   ========================================================================== */
.ed-intro__grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: clamp(48px, 6.5vw, 120px); align-items: center; }
.ed-intro__copy { display: flex; flex-direction: column; align-items: flex-start; gap: 26px; min-width: 0; }
.ed-intro__copy .c-lead { max-width: 540px; }

.ed-certs { align-self: stretch; margin-top: 10px; border-top: 1.5px solid var(--ink); }
.ed-cert {
    position: relative; display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; align-items: center; gap: 16px;
    padding: 17px 4px; border-bottom: 1px solid var(--line-2);
}
.ed-cert::after { content: ""; position: absolute; left: 0; bottom: -1px; height: 1.5px; width: 100%; background: var(--brand); transform: scaleX(0); transform-origin: 0 50%; transition: transform .7s var(--ease); }
.ed-cert:hover::after { transform: scaleX(1); }
.ed-cert__icon { width: 28px; height: 28px; fill: none; stroke: var(--signal); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; transition: fill .4s var(--ease); }
.ed-cert:hover .ed-cert__icon { fill: rgba(var(--signal-rgb), .08); }
.ed-cert__name { font-size: clamp(16.5px, 1.3vw, 19px); font-weight: 650; letter-spacing: -0.022em; }
.ed-cert__en { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); text-align: right; }

.ed-intro__fig { position: relative; margin: 0; padding: 0 0 72px 56px; }
.ed-intro__frame {
    --lx: 50%; --ly: 50%;
    position: relative; isolation: isolate; overflow: hidden; aspect-ratio: 16 / 11;
    border-radius: var(--r-lg); background: var(--night);
    box-shadow: var(--shadow-2);
}
.ed-intro__media { position: absolute; left: 0; right: 0; top: -8%; bottom: -8%; }
.ed-intro__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 60% 50%; }
/* 바탕 = 흑백 + 브랜드 인디고 색조 · 렌즈 안 = 원본 색 */
.ed-intro__base { z-index: 0; filter: grayscale(1) contrast(1.16) brightness(.8); }
.ed-intro__media::before { content: ""; position: absolute; inset: 0; z-index: 1; background: var(--brand); mix-blend-mode: color; opacity: .62; pointer-events: none; }
.ed-intro__loupe {
    z-index: 2; filter: contrast(1.08) saturate(1.15);
    -webkit-mask-image: radial-gradient(circle 120px at var(--lx) var(--ly), #000 98%, transparent 100%);
    mask-image: radial-gradient(circle 120px at var(--lx) var(--ly), #000 98%, transparent 100%);
    opacity: 0; transition: opacity .45s var(--ease);
}
.ed-intro__frame.is-lens .ed-intro__loupe { opacity: 1; }
.ed-intro__ring {
    position: absolute; z-index: 2; left: var(--lx); top: var(--ly); width: 240px; height: 240px; margin: -120px 0 0 -120px;
    border-radius: 50%; box-shadow: inset 0 0 0 1.5px rgba(var(--signal-rgb), .95), 0 0 0 9999px rgba(11, 13, 38, .12);
    opacity: 0; transform: scale(.7); transition: opacity .45s var(--ease), transform .6s var(--ease); pointer-events: none;
}
.ed-intro__frame.is-lens .ed-intro__ring { opacity: 1; transform: scale(1); }
.ed-intro__frame::before {
    content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
    background:
        linear-gradient(180deg, rgba(11, 13, 38, 0) 45%, rgba(11, 13, 38, .74)),
        linear-gradient(rgba(255, 255, 255, .06) 1px, transparent 1px) 0 0 / 100% 44px;
}
/* left: 인장(.ed-seal)이 프레임 왼쪽 아래를 약 100px 덮으므로 그 오른쪽에서 시작 */
.ed-intro__cap { position: absolute; z-index: 3; left: 128px; right: 28px; bottom: 22px; display: flex; justify-content: space-between; gap: 12px; font-size: 13px; font-weight: 500; letter-spacing: -0.01em; color: rgba(255, 255, 255, .82); pointer-events: none; }

.ed-seal {
    position: absolute; z-index: 4; left: 8px; bottom: 30px; width: 148px; height: 148px; border-radius: 50%;
    display: grid; place-items: center; background: var(--brand); color: #fff;
    box-shadow: 0 0 0 8px var(--paper), inset 0 0 0 1px rgba(255, 210, 31, .35);
}
.ed-seal svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; animation: c-spin 26s linear infinite; }
.ed-seal text { font-family: var(--font-mono); font-size: 10.5px; font-weight: 600; letter-spacing: .1em; fill: #fff; }
.ed-seal__core { display: flex; flex-direction: column; align-items: center; gap: 4px; line-height: 1; }
.ed-seal__core b { font-size: 34px; font-weight: 800; letter-spacing: -0.05em; color: var(--signal); }
.ed-seal__core span { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .26em; padding-left: .26em; }

.ed-stats { margin-top: clamp(72px, 9vw, 132px); }
.ed-stats .c-stat { position: relative; }
.ed-stats .c-stat::before { content: ""; position: absolute; left: 0; top: -1px; height: 2px; width: 100%; background: var(--brand); transform: scaleX(0); transform-origin: 0 50%; transition: transform 1.4s var(--ease) calc(var(--d, 0ms) + 200ms); }
.ed-stats .c-stat.is-in::before { transform: scaleX(.32); }
.ed-stats .c-stat__num sup { font-size: .3em; letter-spacing: -0.01em; }

/* ==========================================================================
   2. 교육과정 — 카탈로그
   ========================================================================== */
.ed-sechead__side { display: flex; flex-direction: column; align-items: flex-start; gap: 18px; max-width: 520px; }
.ed-toolbar { align-items: center; }
.ed-toolbar__side { display: flex; align-items: center; flex-wrap: wrap; gap: 14px 28px; }
.ed-legend-lv { display: inline-flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: var(--muted); }
.ed-legend-lv > span { display: inline-flex; align-items: center; gap: 7px; }
.ed-legend-lv .ed-meter i { width: 7px; height: 7px; }

.ed-catalog { display: flex; flex-direction: column; gap: clamp(72px, 8vw, 128px); }
.ed-track { position: relative; }
.ed-track__head {
    position: relative; overflow: hidden; display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: wrap; gap: 16px 32px;
    padding-top: clamp(40px, 5vw, 72px); padding-bottom: 22px; margin-bottom: clamp(22px, 2.4vw, 32px); border-bottom: 1.5px solid var(--ink);
}
/* 트랙 머리글 뒤 공급사 이름 — 외곽선 글자가 스크롤에 따라 흐른다 */
.ed-track__ghost {
    position: absolute; left: 0; right: 0; top: -0.06em; z-index: 0; overflow: hidden; pointer-events: none; user-select: none; white-space: nowrap;
    font-size: clamp(64px, 10vw, 168px); font-weight: 800; line-height: 1; letter-spacing: -0.06em;
    color: transparent; -webkit-text-stroke: 1px rgba(46, 48, 146, .16);
}
.ed-track__ghost > span { display: inline-block; padding-left: 34%; }
.ed-track__title { position: relative; z-index: 1; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.ed-track__no { display: inline-flex; align-items: center; gap: 10px; font-size: 12px; letter-spacing: .14em; color: var(--muted); }
.ed-track__no::before { content: ""; width: 8px; height: 8px; border-radius: 1px; background: var(--signal); box-shadow: 0 0 0 3px var(--signal-soft); }
.ed-track__count {
    --tc: var(--brand);
    position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 10px; height: 34px; padding: 0 14px;
    border-radius: var(--r-pill); background: var(--paper); box-shadow: inset 0 0 0 1px var(--line-2);
    font-size: 13.5px; font-weight: 600; color: var(--ink-2); white-space: nowrap;
}
.ed-track__count i { width: 8px; height: 8px; border-radius: 2px; background: var(--tc); }

.ed-courses { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 1.8vw, 24px); }

.ed-course { color: var(--ink); }
.ed-course::before {
    content: ""; position: absolute; left: 0; right: 0; top: 0; z-index: 4; height: 3px; background: var(--brand);
    transform: scaleX(0); transform-origin: 0 50%; transition: transform .8s var(--ease);
}
a.ed-course:hover::before, a.ed-course:focus-visible::before { transform: scaleX(1); }
.ed-course__in {
    position: relative; display: flex; flex-direction: column; flex: 1; padding: 24px 26px 22px;
}
.ed-course__in::after {
    /* 우상단 도트 그리드 */
    content: ""; position: absolute; right: 18px; top: 64px; width: 96px; height: 60px; pointer-events: none;
    background: radial-gradient(circle at 1px 1px, rgba(46, 48, 146, .2) 1px, transparent 0) 0 0 / 10px 10px;
    -webkit-mask-image: linear-gradient(225deg, #000, transparent 75%); mask-image: linear-gradient(225deg, #000, transparent 75%);
}
.ed-course__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 26px; }
.ed-course__no { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-mono); font-size: 12px; letter-spacing: .08em; color: var(--muted); white-space: nowrap; }
.ed-course__no::before { content: ""; width: 6px; height: 6px; background: var(--ink); transition: background .4s, transform .5s var(--ease); }
a.ed-course:hover .ed-course__no::before { background: var(--brand); transform: rotate(45deg); }
.ed-course__badges { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
/* 과정 코드 — 카드가 나타나면 마스크 안에서 올라온 뒤 디코드(data-scramble) */
.ed-course__code {
    position: relative; overflow: hidden; margin-top: clamp(24px, 2.6vw, 38px); padding: .08em 0 .04em;
    font-size: clamp(46px, 4.3vw, 66px); font-weight: 760; line-height: .96; letter-spacing: -0.05em;
    font-variant-numeric: tabular-nums; white-space: nowrap; transition: color .5s var(--ease);
}
html.c-ready .ed-course[data-reveal] .ed-course__code > span { display: inline-block; transform: translate3d(0, 112%, 0); transition: transform 1.1s var(--ease) calc(var(--d, 0ms) + 220ms); }
html.c-ready .ed-course[data-reveal].is-in .ed-course__code > span { transform: none; }
a.ed-course:hover .ed-course__code { color: var(--brand); }
.ed-course__name { margin-top: 10px; font-family: var(--font-sans); font-style: normal; font-weight: 400; font-size: clamp(20px, 1.6vw, 24px); line-height: 1.22; letter-spacing: -0.01em; color: var(--ink-2); }
.ed-course__desc { margin-top: 16px; font-size: 15px; line-height: 1.7; color: var(--ink-3); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.ed-course__meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: auto; padding-top: 28px; }
.ed-course__meta > div { position: relative; display: flex; flex-direction: column; gap: 5px; padding: 14px 10px 0 0; min-width: 0; }
.ed-course__meta > div::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px; background: var(--line-2); transform-origin: 0 50%; }
html.c-ready .ed-course[data-reveal] .ed-course__meta > div::before { transform: scaleX(0); transition: transform 1.2s var(--ease) calc(var(--d, 0ms) + 380ms); }
html.c-ready .ed-course[data-reveal].is-in .ed-course__meta > div::before { transform: none; }
.ed-course__meta > div + div { padding-left: 12px; border-left: 1px solid var(--line); }
.ed-course__meta dt { font-size: 11.5px; font-weight: 500; letter-spacing: -0.005em; color: var(--muted); white-space: nowrap; }
.ed-course__meta dd { font-family: var(--font-mono); font-size: 13px; font-weight: 500; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ed-course__meta dd .ed-dim { font-family: var(--font-sans); }
.ed-course__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 22px; font-size: 14.5px; font-weight: 650; }
.ed-course__foot .c-arrow { width: 42px; height: 42px; }

/* 마지막 줄 빈 칸 채움 타일 (점선 · 빗금 · 조준선)
   data-d = 데스크톱(3열) 빈 칸 수, data-t = 태블릿(2열) 빈 칸 수. 모바일(1열)에서는 숨김 */
.ed-more {
    position: relative; isolation: isolate; display: none; flex-direction: column; min-width: 0;
    padding: 24px 26px 22px; border-radius: var(--r-lg); overflow: hidden; color: var(--ink);
    border: 1.5px dashed var(--line-2);
    background: repeating-linear-gradient(-45deg, transparent 0 14px, rgba(16, 18, 46, .03) 14px 15px);
    transition: border-color .5s var(--ease), background-color .5s var(--ease);
}
.ed-more:hover, .ed-more:focus-visible { border-color: var(--brand); background-color: rgba(255, 255, 255, .55); }
.ed-more__mark {
    position: absolute; z-index: -1; right: 22px; top: 20px; width: 92px; height: 92px; pointer-events: none;
    fill: none; stroke: var(--line-2); stroke-width: 1.2;
    transition: stroke .6s var(--ease), rotate 1.4s var(--ease);
}
.ed-more:hover .ed-more__mark { stroke: var(--brand); rotate: 90deg; }
.ed-more__k { display: inline-flex; align-items: center; gap: 8px; min-height: 26px; font-size: 12.5px; font-weight: 600; color: var(--muted); }
.ed-more__k::before { content: ""; width: 7px; height: 7px; box-shadow: inset 0 0 0 1.5px var(--signal); }
.ed-more__title { margin-top: clamp(30px, 3vw, 44px); font-size: clamp(26px, 2.2vw, 34px); font-weight: 720; line-height: 1.24; letter-spacing: -0.04em; }
.ed-more__text { margin-top: 14px; max-width: 30em; font-size: 15px; line-height: 1.7; color: var(--ink-3); }
.ed-more__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: auto; padding-top: 28px; font-size: 14.5px; font-weight: 650; }
.ed-more__foot .c-arrow { width: 42px; height: 42px; }
@media (min-width: 1025px) {
    .ed-more[data-d="1"], .ed-more[data-d="2"] { display: flex; }
    .ed-related:not([data-fill-d="0"]) .ed-related__all { display: none; }   /* 타일이 같은 링크를 대신한다 */
    /* 두 칸을 차지할 때: 조준선을 크게, 문구는 왼쪽 열에 */
    .ed-more[data-d="2"] { grid-column: span 2; }
    .ed-more[data-d="2"] .ed-more__mark { right: 9%; top: 50%; width: 220px; height: 220px; margin-top: -110px; }
    .ed-more[data-d="2"] .ed-more__title, .ed-more[data-d="2"] .ed-more__text { max-width: 52%; }
}
@media (min-width: 761px) and (max-width: 1024px) {
    .ed-more[data-t="1"] { display: flex; }
    .ed-related[data-fill-t="1"] .ed-related__all { display: none; }
}

/* ==========================================================================
   3. 교육과정 — 교육장 시설 (어두운 패널 확장 + 가로 핀 스크롤)
   ========================================================================== */
.ed-fac { position: relative; isolation: isolate; }
.ed-fac .c-hs__sticky { isolation: isolate; }
.ed-fac.is-pinned { padding: 0; }
.ed-fac.is-pinned .c-hs__sticky { padding: calc(var(--header-h) + 8px) 0 40px; }
.ed-fac__field { position: absolute; inset: 0; z-index: -1; width: 100%; height: 100%; opacity: .22; -webkit-mask-image: linear-gradient(180deg, transparent, #000 30%, #000 70%, transparent); mask-image: linear-gradient(180deg, transparent, #000 30%, #000 70%, transparent); }
.ed-fac__head { margin-bottom: clamp(28px, 3.4vw, 48px); }
.ed-fac__side { display: flex; flex-direction: column; gap: 22px; max-width: 520px; width: 100%; }
.ed-fac__bar { position: relative; height: 1px; background: var(--night-line-2); }
.ed-fac__bar i { position: absolute; left: 0; right: 0; top: -1px; height: 3px; background: var(--signal); transform-origin: 0 50%; transform: scaleX(var(--hs-p, 0)); }
.c-hs:not(.is-pinned) .ed-fac__bar { display: none; }

.ed-fac__track { --fh: clamp(220px, 34vh, 330px); gap: clamp(16px, 1.8vw, 26px); }
.ed-fig { margin: 0; display: flex; flex-direction: column; gap: 14px; width: calc(var(--fh) * 1.5); }
.ed-fig--tall { width: calc(var(--fh) * .75); }
.ed-fig__frame { position: relative; isolation: isolate; height: var(--fh); overflow: hidden; border-radius: var(--r); background: var(--night-3); box-shadow: inset 0 0 0 1px var(--night-line); }
.ed-fig__frame img { width: 100%; height: 100%; object-fit: cover; filter: none; }
html.js .ed-fig .ed-fig__frame img { transition: transform 1.8s var(--ease) var(--d, 0ms), filter .9s var(--ease), scale 1.4s var(--ease); }
.ed-fig:hover .ed-fig__frame img { filter: grayscale(0) contrast(1) brightness(1); scale: 1.06; }
/* 브랜드 인디고 색조 (호버 시 걷힘) */
.ed-fig__frame::before { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: var(--brand); mix-blend-mode: color; opacity: 0; transition: opacity .8s var(--ease); }
.ed-fig__frame::after { content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; border-radius: inherit; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .08); background: linear-gradient(180deg, transparent 60%, rgba(11, 13, 38, .5)); transition: opacity .6s; }
.ed-fig:hover .ed-fig__frame::before { opacity: 0; }
.ed-fig:hover .ed-fig__frame::after { opacity: .3; }
.ed-fig figcaption { display: flex; align-items: baseline; gap: 12px; font-size: 14.5px; color: var(--fog); }
.ed-fig figcaption .c-mono { font-size: 11px; letter-spacing: .14em; color: var(--signal); }

/* ==========================================================================
   4. 교육과정 — 교육 안내
   ========================================================================== */
.ed-info { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1.5px solid var(--ink); }
.ed-info__item { position: relative; display: flex; flex-direction: column; gap: 14px; padding: 30px 26px 34px; border-right: 1px solid var(--line-2); min-width: 0; }
.ed-info__item:first-child { padding-left: 0; }
.ed-info__item:last-child { border-right: 0; padding-right: 0; }
.ed-info__icon { width: 44px; height: 44px; margin-bottom: 6px; fill: none; stroke: var(--signal); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.ed-info__title { font-size: 20px; font-weight: 650; letter-spacing: -0.024em; }
.ed-info__text { font-size: 15.5px; line-height: 1.75; color: var(--ink-3); }
.ed-info__text a { color: var(--ink); font-weight: 600; background: linear-gradient(var(--signal), var(--signal)) 0 100% / 100% 1.5px no-repeat; transition: color .3s; }
.ed-info__text a:hover { color: var(--signal); }

/* ==========================================================================
   5. 과정 상세 (read)
   ========================================================================== */
.ed-file { display: grid; grid-template-columns: minmax(0, 4.3fr) minmax(0, 7.7fr); gap: clamp(36px, 5.5vw, 96px); align-items: start; }
.ed-dossier {
    position: sticky; top: calc(var(--header-h) + var(--subnav-h) + 24px);
    isolation: isolate; overflow: hidden; border-radius: var(--r-lg); background: var(--night); color: #fff; padding: 28px 30px 30px;
    box-shadow: var(--shadow-2);
}
.ed-dossier::before {
    content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
    background-image: linear-gradient(var(--night-line) 1px, transparent 1px), linear-gradient(90deg, var(--night-line) 1px, transparent 1px);
    background-size: 32px 32px; -webkit-mask-image: radial-gradient(ellipse 90% 60% at 100% 0, #000, transparent 70%); mask-image: radial-gradient(ellipse 90% 60% at 100% 0, #000, transparent 70%);
}
.ed-dossier__head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px 12px; }
.ed-dossier__track { font-size: 13.5px; font-weight: 600; color: var(--fog); }
.ed-dossier__seal { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 11px 0 9px; border-radius: var(--r-pill); background: var(--signal); color: var(--on-signal); font-size: 12px; font-weight: 700; white-space: nowrap; }
.ed-dossier__seal svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.ed-dossier__code { margin-top: 30px; font-size: clamp(52px, 5vw, 82px); font-weight: 780; line-height: .92; letter-spacing: -0.055em; white-space: nowrap; }
.ed-dossier__name { margin-top: 12px; font-family: var(--font-sans); font-style: normal; font-size: clamp(21px, 1.8vw, 26px); line-height: 1.25; color: var(--fog); }
.ed-dossier__badges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 20px; }
.ed-dossier__badges:empty { display: none; }
.ed-dossier__badges .c-badge--line { box-shadow: inset 0 0 0 1px var(--night-line-2); color: #fff; }
.ed-dossier__kv { margin-top: 26px; border-top: 1px solid var(--night-line-2); }
.ed-dossier__kv > div { display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 12px; padding: 13px 0; border-bottom: 1px solid var(--night-line); }
.ed-dossier__kv dt { font-size: 12.5px; font-weight: 500; color: var(--fog-2); padding-top: 2px; }
.ed-dossier__kv dd { font-size: 14.5px; line-height: 1.6; color: #fff; display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.ed-dossier__actions { display: flex; flex-direction: column; gap: 10px; margin-top: 26px; }

.ed-block + .ed-block { margin-top: clamp(64px, 7vw, 104px); }
.ed-block__title { font-size: clamp(24px, 2.2vw, 32px); font-weight: 700; letter-spacing: -0.034em; line-height: 1.3; margin-bottom: 26px; }
.ed-block .c-prose { max-width: 760px; }
.ed-lead-quote { position: relative; padding-left: 26px; font-size: clamp(19px, 1.6vw, 23px); line-height: 1.65; font-weight: 550; letter-spacing: -0.024em; color: var(--ink); }
.ed-lead-quote::before { content: ""; position: absolute; left: 0; top: .35em; bottom: .35em; width: 3px; background: var(--brand); transform-origin: 50% 0; }
html.c-ready .ed-lead-quote[data-reveal]::before { transform: scaleY(0); transition: transform 1.2s var(--ease) .3s; }
html.c-ready .ed-lead-quote[data-reveal].is-in::before { transform: none; }

.ed-sess { border-top: 1.5px solid var(--ink); }
.ed-sess__item {
    /* 마지막 열(상태 배지) 폭을 고정해 행마다 시간 열이 같은 x 에 정렬되도록 */
    position: relative; display: grid; grid-template-columns: 62px minmax(0, 1fr) auto 84px; align-items: center; gap: 10px 24px;
    padding: 20px 8px; border-bottom: 1px solid var(--line);
    transition: background .4s var(--ease);
}
.ed-sess__item:hover { background: var(--white); }
a.ed-sess__item:hover .ed-sess__range { color: var(--brand); }
.ed-sess__item.is-past { color: var(--muted); }
.ed-sess__item.is-next { background: var(--white); box-shadow: inset 3px 0 0 var(--brand); }
.ed-sess__no { font-size: 13px; font-weight: 600; color: var(--muted); white-space: nowrap; }
.ed-sess__when { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.ed-sess__range { font-family: var(--font-mono); font-size: 16px; font-weight: 500; color: inherit; transition: color .3s; }
.ed-sess__item:not(.is-past) .ed-sess__range { color: var(--ink); }
.ed-sess__dow { font-size: 12.5px; color: var(--muted); }
.ed-sess__time { font-family: var(--font-mono); font-size: 12.5px; color: var(--muted); white-space: nowrap; }
.ed-sess__item > .c-badge { justify-self: end; }
.ed-sess__flag { position: absolute; left: 8px; top: -10px; height: 20px; padding: 0 8px; border-radius: 4px; background: var(--brand); color: #fff; font-size: 11px; font-weight: 700; line-height: 20px; white-space: nowrap; }
.ed-sess__more { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; margin-top: 22px; font-size: 14px; color: var(--muted); }

.ed-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; border-top: 1.5px solid var(--ink); }
.ed-facts > div { display: flex; flex-direction: column; gap: 8px; padding: 22px 22px 24px 0; border-bottom: 1px solid var(--line-2); }
.ed-facts > div:nth-child(2n) { padding-left: 22px; border-left: 1px solid var(--line-2); }
.ed-facts dt { font-size: 13px; font-weight: 600; color: var(--muted); }
.ed-facts dd { font-size: 15.5px; line-height: 1.7; color: var(--ink-2); }
.ed-facts dd a { font-weight: 600; color: var(--ink); background: linear-gradient(var(--signal), var(--signal)) 0 100% / 100% 1.5px no-repeat; }

.ed-related { margin-top: clamp(80px, 9vw, 140px); }
.ed-related .ed-courses { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ed-related .ed-course__code { font-size: clamp(40px, 3.4vw, 52px); margin-top: 24px; }
.ed-related .ed-course__foot { margin-top: auto; padding-top: 22px; }   /* 메타 행이 없는 카드 — 푸터를 카드 바닥에 맞춘다 */

.ed-postnav small { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-sans); font-size: 13px; font-weight: 600; letter-spacing: 0; }
.ed-postnav small svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: transform .5s var(--ease); }
.ed-postnav a:hover small svg { transform: translateX(-4px); }
.ed-postnav a.c-postnav__next:hover small svg { transform: translateX(4px); }

.ed-404 { max-width: 760px; margin: 0 auto; }
.ed-404 .c-empty__title { font-size: 22px; }

/* ==========================================================================
   6. 교육일정 — 월간 캘린더
   ========================================================================== */
.ed-calhead { display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: wrap; gap: 28px 40px; margin-bottom: clamp(24px, 3vw, 36px); }
.ed-calhead__main { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
.ed-calhead__title { display: flex; align-items: baseline; flex-wrap: wrap; gap: 6px 22px; }
.ed-calhead__ym { margin: 0; font-size: clamp(60px, 8vw, 128px); font-weight: 760; line-height: .9; letter-spacing: -0.06em; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ed-calhead__ym span { color: var(--muted); font-weight: 600; }
.ed-calhead__en { font-family: var(--font-sans); font-style: normal; font-size: clamp(28px, 2.8vw, 44px); line-height: 1; color: var(--brand); }
.ed-calhead__sum { display: flex; flex-wrap: wrap; gap: 6px 22px; font-size: 13.5px; color: var(--muted); }
.ed-calhead__sum b { font-family: var(--font-mono); color: var(--ink); font-weight: 600; }
.ed-calhead__sum a { font-family: var(--font-mono); color: var(--ink); background: linear-gradient(var(--signal), var(--signal)) 0 100% / 100% 1px no-repeat; transition: color .3s; }
.ed-calhead__sum a:hover { color: var(--signal); }

.ed-calnav { display: flex; align-items: center; gap: 8px; }
.ed-calnav__btn { display: grid; place-items: center; width: 54px; height: 54px; border-radius: 50%; box-shadow: inset 0 0 0 1px var(--line-2); transition: background .35s var(--ease), color .35s, box-shadow .35s; }
.ed-calnav__btn svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; transition: transform .45s var(--ease); }
a.ed-calnav__btn:hover { background: var(--ink); color: var(--paper); box-shadow: inset 0 0 0 1px var(--ink); }
a.ed-calnav__prev:hover svg { transform: translateX(-3px); }
a.ed-calnav__next:hover svg { transform: translateX(3px); }
.ed-calnav__btn.is-disabled { opacity: .3; }
.ed-calnav__today { display: inline-flex; align-items: center; gap: 8px; height: 54px; padding: 0 20px; border-radius: var(--r-pill); box-shadow: inset 0 0 0 1px var(--line-2); font-size: 13.5px; font-weight: 600; transition: background .35s var(--ease), color .35s, box-shadow .35s; }
.ed-calnav__today::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--signal); }
a.ed-calnav__today:hover { background: var(--signal); color: var(--on-signal); box-shadow: inset 0 0 0 1px var(--signal); }
a.ed-calnav__today:hover::before { background: var(--on-signal); }
.ed-calnav__today.is-here { opacity: .45; pointer-events: none; }

/* 연간 월 스크러버 */
.ed-months { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); margin-bottom: clamp(22px, 2.6vw, 32px); border-top: 1px solid var(--line-2); border-bottom: 1px solid var(--line-2); }
.ed-months a { position: relative; display: flex; flex-direction: column; gap: 9px; padding: 13px 12px 12px; border-left: 1px solid var(--line); transition: background .35s var(--ease), color .35s; }
.ed-months a:first-child { border-left: 0; }
.ed-months a:hover { background: var(--white); }
.ed-months__m { display: flex; align-items: baseline; gap: 6px; font-family: var(--font-mono); font-size: 11px; letter-spacing: .1em; color: var(--muted); }
.ed-months__m b { font-size: 13px; font-weight: 600; color: var(--ink); letter-spacing: 0; }
.ed-months__dots { display: flex; flex-wrap: wrap; gap: 3px; min-height: 6px; }
.ed-months__dots i { width: 6px; height: 6px; border-radius: 1px; background: var(--brand); }
.ed-months__dots em { font-family: var(--font-mono); font-size: 10px; line-height: 6px; color: var(--muted); }
.ed-months a.is-current { background: var(--brand); color: #fff; }
.ed-months a.is-current .ed-months__m, .ed-months a.is-current .ed-months__m b { color: #fff; }
.ed-months a.is-current .ed-months__dots i { background: var(--tape); }
.ed-months a.is-current .ed-months__dots em { color: rgba(255, 255, 255, .7); }
.ed-months a.is-today::before { content: ""; position: absolute; left: 0; right: 0; top: -1px; height: 3px; background: var(--ink); }
.ed-months a.is-today.is-current::before { background: var(--tape); }

/* 캘린더 그리드 */
.ed-cal { position: relative; overflow: hidden; border-radius: var(--r-lg); background: var(--white); box-shadow: inset 0 0 0 1px var(--line), var(--shadow-1); }
.ed-cal__dow { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); background: var(--paper-2); border-bottom: 1px solid var(--line-2); }
.ed-cal__dow span { display: flex; align-items: baseline; gap: 8px; padding: 13px 14px; font-family: var(--font-mono); font-size: 11px; letter-spacing: .14em; color: var(--muted); }
.ed-cal__dow span b { font-family: var(--font-sans); font-size: 12px; font-weight: 600; letter-spacing: 0; color: var(--ink-3); }
.ed-cal__week { position: relative; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); min-height: 124px; }
.ed-cal__week + .ed-cal__week { border-top: 1px solid var(--line); }
/* 주 단위로 차례로 올라오고, 일정 막대는 왼쪽부터 그려진다 */
html.c-ready .ed-cal[data-reveal] .ed-cal__week { opacity: 0; transform: translate3d(0, 16px, 0); transition: opacity .8s var(--ease) calc(var(--wi, 0) * 80ms + 80ms), transform 1s var(--ease) calc(var(--wi, 0) * 80ms + 80ms); }
html.c-ready .ed-cal[data-reveal].is-in .ed-cal__week { opacity: 1; transform: none; }
.ed-cal__day { position: relative; grid-row: 1 / -1; padding: 9px 10px; border-left: 1px solid var(--line); min-width: 0; }
.ed-cal__day.is-c1 { border-left: 0; }
.ed-cal__day.is-out { background: repeating-linear-gradient(-45deg, transparent 0 9px, rgba(16, 18, 46, .028) 9px 10px); }
.ed-cal__num { display: inline-grid; place-items: center; min-width: 30px; height: 30px; padding: 0 4px; border-radius: 50%; font-family: var(--font-mono); font-size: 13px; color: var(--ink-2); }
.ed-cal__day.is-out .ed-cal__num { color: var(--muted); opacity: .55; }
.ed-cal__day.is-wknd:not(.is-out) .ed-cal__num { color: var(--muted); }
.ed-cal__day.is-today { background: rgba(var(--signal-rgb), .06); }
.ed-cal__day.is-today .ed-cal__num { background: var(--signal); color: var(--on-signal); font-weight: 600; box-shadow: 0 0 0 4px var(--signal-soft); }
.ed-cal__tag { position: absolute; right: 10px; top: 14px; font-size: 11px; font-weight: 700; color: var(--signal); }

.ed-cal__bar {
    --bd: 0ms;
    position: relative; z-index: 2; align-self: center; display: flex; align-items: center; gap: 8px; min-width: 0;
    height: 26px; margin: 0 6px; padding: 0 10px; border-radius: 6px; overflow: hidden; white-space: nowrap;
    font-size: 12.5px; font-weight: 600; letter-spacing: -0.01em;
    transition: clip-path 1.1s var(--ease) calc(var(--bd) + 300ms), transform .4s var(--ease), box-shadow .4s var(--ease), opacity .35s;
}
.ed-cal__bar b { flex: none; font-family: var(--font-mono); font-size: 11.5px; font-weight: 600; letter-spacing: .02em; }
.ed-cal__bar > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-weight: 500; opacity: .85; }
.ed-cal__bar.is-s0 { background: var(--brand); color: #fff; box-shadow: inset 3px 0 0 var(--tape); }
.ed-cal__bar.is-s1 { background: var(--tape); color: var(--ink); }
.ed-cal__bar.is-s2 { background: var(--paper-2); color: var(--muted); box-shadow: inset 0 0 0 1px var(--line); }
.ed-cal__bar.is-cl { margin-left: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; }
.ed-cal__bar.is-s0.is-cl { box-shadow: none; }
.ed-cal__bar.is-cr { margin-right: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; }
.ed-cal__bar.is-cr::after { content: ""; position: absolute; right: 0; top: 0; bottom: 0; width: 18px; background: linear-gradient(90deg, transparent, currentColor); opacity: .14; }
.ed-cal.has-hl .ed-cal__bar:not(.is-hl) { opacity: .28; }
.ed-cal__bar.is-hl { transform: translateY(-1px); }
.ed-cal__bar.is-s0.is-hl { box-shadow: inset 3px 0 0 var(--tape), 0 10px 20px -12px rgba(16, 18, 46, .7); }
.ed-cal__bar.is-s0.is-cl.is-hl { box-shadow: 0 10px 20px -12px rgba(16, 18, 46, .7); }
html.c-ready .ed-cal[data-reveal] .ed-cal__bar { clip-path: inset(0 100% 0 0); }
html.c-ready .ed-cal[data-reveal].is-in .ed-cal__bar { clip-path: inset(0 0 0 0); }

.ed-cal__none {
    display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 8px 18px; padding: 18px 20px;
    border-top: 1px solid var(--line); background: var(--paper); font-size: 14.5px; color: var(--ink-3); text-align: center;
}

.ed-legend { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 28px; margin-top: 20px; font-size: 13px; color: var(--muted); }
.ed-legend__keys { display: flex; flex-wrap: wrap; gap: 8px 22px; }
.ed-legend__keys span { display: inline-flex; align-items: center; gap: 9px; }

/* 모바일 아젠다 (캘린더 대체) */
.ed-agenda { display: none; }
.ed-agenda__list { border-top: 1.5px solid var(--ink); }
.ed-agenda__item { border-bottom: 1px solid var(--line); }
.ed-agenda__link { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 4px 16px; padding: 18px 2px; }
.ed-agenda__date { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; height: 64px; border-radius: var(--r-sm); background: var(--white); box-shadow: inset 0 0 0 1px var(--line); }
.ed-agenda__date b { font-size: 26px; font-weight: 720; line-height: 1; letter-spacing: -0.04em; font-variant-numeric: tabular-nums; }
.ed-agenda__date span { font-size: 11px; font-weight: 600; color: var(--muted); }
.ed-agenda__item.is-s0 .ed-agenda__date { background: var(--brand); box-shadow: none; color: #fff; }
.ed-agenda__item.is-s0 .ed-agenda__date span { color: rgba(255, 255, 255, .75); }
.ed-agenda__item.is-s1 .ed-agenda__date { background: var(--tape); box-shadow: none; color: var(--ink); }
.ed-agenda__item.is-s1 .ed-agenda__date span { color: var(--ink); }
.ed-agenda__item.is-s2 .ed-agenda__date { background: transparent; }
.ed-agenda__item.is-s2 .ed-agenda__date b { color: var(--muted); }
.ed-agenda__main { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ed-agenda__row { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.ed-agenda__range { font-family: var(--font-mono); font-size: 12px; color: var(--muted); }
.ed-agenda__title { font-size: 16.5px; font-weight: 650; line-height: 1.4; letter-spacing: -0.02em; }
.ed-agenda__title b { font-family: var(--font-mono); font-size: 14px; margin-right: 6px; }
.ed-agenda__meta { font-size: 13px; color: var(--muted); }

/* ==========================================================================
   7. 교육일정 — 다가오는 개강
   ========================================================================== */
.ed-up { border-top: 1.5px solid var(--ink); }
.ed-up__item { border-bottom: 1px solid var(--line); }
.ed-up__link {
    position: relative; isolation: isolate; display: grid;
    grid-template-columns: minmax(200px, 230px) minmax(0, 1fr) minmax(150px, 210px) auto auto; align-items: center; gap: 14px 32px;
    padding: 26px 10px; transition: padding .6s var(--ease);
}
.ed-up__link::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--white); transform: scaleY(0); transform-origin: 50% 100%; transition: transform .55s var(--ease); }
.ed-up__link::after { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--brand); transform: scaleY(0); transform-origin: 50% 0; transition: transform .55s var(--ease); }
a.ed-up__link:hover { padding-left: 24px; padding-right: 20px; }
a.ed-up__link:hover::before, a.ed-up__link:hover::after { transform: scaleY(1); }
.ed-up__when { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.ed-up__dday { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 4px; background: var(--brand); color: #fff; font-family: var(--font-mono); font-size: 11px; font-weight: 600; letter-spacing: .04em; }
.ed-up__item.is-s1 .ed-up__dday { background: var(--tape); color: var(--ink); font-family: var(--font-sans); font-weight: 700; }
.ed-up__range { font-family: var(--font-mono); font-size: 15.5px; font-weight: 500; color: var(--ink); }
.ed-up__dow { font-size: 12px; color: var(--muted); }
.ed-up__main { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.ed-up__track { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; font-size: 13px; color: var(--muted); }
.ed-up__title { font-size: clamp(18px, 1.5vw, 22px); font-weight: 650; line-height: 1.4; letter-spacing: -0.024em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ed-up__title b { font-family: var(--font-mono); font-weight: 600; margin-right: 10px; letter-spacing: -0.01em; }
.ed-up__title em { font-family: var(--font-sans); font-style: normal; font-weight: 400; font-size: 1.12em; letter-spacing: -0.005em; }
.ed-up__info { display: flex; flex-direction: column; gap: 4px; font-family: var(--font-mono); font-size: 12px; line-height: 1.55; color: var(--muted); min-width: 0; }
.ed-up__info span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 장소(한글 주소)는 모노 폭으로 늘어지지 않게 본문 서체 + 두 줄까지 */
.ed-up__info .ed-up__venue {
    font-family: var(--font-sans); font-size: 13px; line-height: 1.5; white-space: normal; text-overflow: clip; text-wrap: balance;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
}

/* ==========================================================================
   8. 교육일정 — 연간 타임라인 (dark · 데스크톱은 핀 고정 후 스윕)
   ========================================================================== */
.ed-tlsec { overflow: hidden; isolation: isolate; }
.ed-tlsec__field { position: absolute; inset: 0; z-index: -1; width: 100%; height: 100%; opacity: .18; -webkit-mask-image: radial-gradient(ellipse 70% 80% at 85% 20%, #000, transparent 70%); mask-image: radial-gradient(ellipse 70% 80% at 85% 20%, #000, transparent 70%); }
.ed-tlnav { display: flex; align-items: center; gap: 10px; }
.ed-tlnav a, .ed-tlnav span { display: inline-flex; align-items: center; gap: 8px; height: 44px; padding: 0 16px; border-radius: var(--r-pill); box-shadow: inset 0 0 0 1px var(--night-line-2); font-family: var(--font-mono); font-size: 12.5px; color: var(--fog); transition: background .35s, color .35s; }
.ed-tlnav a:hover { background: #fff; color: var(--ink); }
.ed-tlnav span { color: var(--fog-2); opacity: .5; }
.ed-tlnav svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

.ed-tlwrap { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; scrollbar-color: var(--night-line-2) transparent; padding-top: 40px; margin-top: -16px; }
.ed-tl { --lw: 230px; position: relative; min-width: 880px; }
.ed-tl__head, .ed-tl__row { display: grid; grid-template-columns: var(--lw) minmax(0, 1fr); }
.ed-tl__head { border-bottom: 1px solid var(--night-line-2); }
.ed-tl__corner { display: flex; align-items: flex-end; padding: 0 0 12px; font-size: 12px; font-weight: 600; color: var(--fog-2); }
.ed-tl__months { position: relative; display: flex; }
.ed-tl__months a { position: relative; z-index: 2; flex: none; display: flex; flex-direction: column; gap: 2px; padding: 0 8px 12px; border-left: 1px solid var(--night-line); font-family: var(--font-mono); font-size: 11px; letter-spacing: .1em; color: var(--fog-2); transition: color .3s; }
.ed-tl__months a b { font-size: 13px; font-weight: 600; color: var(--fog); letter-spacing: 0; transition: color .3s; }
.ed-tl__months a:hover, .ed-tl__months a:hover b { color: #fff; }
.ed-tl__months a.is-current b, .ed-tl__months a.is-current { color: var(--signal); }
.ed-tl__row { align-items: center; min-height: 64px; border-bottom: 1px solid var(--night-line); transition: background .35s; }
.ed-tl__row:hover { background: rgba(236, 238, 255, .03); }
.ed-tl__label { display: flex; flex-direction: column; gap: 2px; padding: 10px 18px 10px 0; min-width: 0; }
.ed-tl__label b { display: flex; align-items: baseline; gap: 10px; font-size: 16px; font-weight: 700; letter-spacing: -0.02em; color: #fff; }
.ed-tl__label b small { font-size: 11.5px; font-weight: 500; color: var(--fog-2); }
.ed-tl__label span { font-family: var(--font-sans); font-style: normal; font-size: 15px; color: var(--fog-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ed-tl__label a { transition: color .3s; }
.ed-tl__label a:hover b { color: var(--signal); }
.ed-tl__track { position: relative; height: 64px; }
.ed-tl__empty { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); font-size: 12.5px; color: var(--fog-2); opacity: .7; }
.ed-tl__bar {
    --bd: 0ms;
    position: absolute; top: 50%; z-index: 2; height: 16px; margin-top: -8px; min-width: 7px; border-radius: 3px;
    transform-origin: 0 50%;
    transition: transform 1.1s var(--ease) var(--bd), box-shadow .35s, background .35s;
}
.ed-tl__bar.is-s0 { background: var(--brand-2); box-shadow: inset 0 0 0 1px rgba(236, 238, 255, .22); }
.ed-tl__bar.is-s1 { background: var(--tape); box-shadow: 0 0 0 3px rgba(255, 210, 31, .22); }
.ed-tl__bar.is-s2 { background: rgba(236, 238, 255, .32); }
.ed-tl__bar:hover, .ed-tl__bar:focus-visible { z-index: 5; box-shadow: 0 0 0 2px #fff; outline: none; }
.ed-tl__bar::after {
    content: attr(data-tip); position: absolute; left: 50%; bottom: calc(100% + 10px); z-index: 6;
    padding: 6px 9px; border-radius: 6px; background: #fff; color: var(--ink); white-space: nowrap; pointer-events: none;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: .02em; line-height: 1.3;
    opacity: 0; transform: translate(-50%, 4px); transition: opacity .25s, transform .35s var(--ease);
}
.ed-tl__bar:hover::after, .ed-tl__bar:focus-visible::after { opacity: 1; transform: translate(-50%, 0); }
html.c-ready .ed-tlwrap[data-reveal] .ed-tl__bar { transform: scaleX(0); }
html.c-ready .ed-tlwrap[data-reveal].is-in .ed-tl__bar { transform: scaleX(1); }
.ed-tl__overlay { position: absolute; top: 0; bottom: 0; left: var(--lw); right: 0; pointer-events: none; z-index: 1; }
.ed-tl__overlay > i { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--night-line); }
/* 오늘 선: 칩(위 30px) → 월 머리글(약 55px)을 지날 때는 흐리게(라벨 가독성) → 과정 행에서 다시 선명 */
.ed-tl__today {
    position: absolute; top: -30px; bottom: 0; width: 1.5px; margin-left: -.75px; z-index: 3;
    background: linear-gradient(180deg, var(--signal) 0 30px, rgba(var(--signal-rgb), .28) 30px 85px, var(--signal) 85px);
}
.ed-tl__today span { position: absolute; left: 50%; top: 0; transform: translateX(-50%); height: 20px; padding: 0 7px; border-radius: 3px; background: var(--signal); color: var(--on-signal); font-size: 11px; font-weight: 700; line-height: 20px; white-space: nowrap; }
/* 스윕 헤드 (데스크톱 핀 구간에서만 · JS 가 .is-scrub 를 붙인다) */
.ed-tl__sweep { display: none; }
.ed-tlwrap.is-scrub .ed-tl__sweep { display: block; position: absolute; top: -8px; bottom: 0; left: 0; z-index: 4; width: 1.5px; margin-left: -.75px; background: rgba(236, 238, 255, .9); }
.ed-tlwrap.is-scrub .ed-tl__sweep::before { content: ""; position: absolute; left: 50%; top: 0; width: 9px; height: 9px; margin: -4px 0 0 -4.5px; background: #fff; transform: rotate(45deg); }
.ed-tlwrap.is-scrub .ed-tl__bar { transition: box-shadow .35s, background .35s; }
.ed-tlwrap.is-scrub .ed-tl__months a b { color: var(--fog-2); }
.ed-tlwrap.is-scrub .ed-tl__months a.is-swept b { color: #fff; }
.ed-tlwrap.is-scrub .ed-tl__months a.is-current.is-swept b { color: var(--signal); }
.ed-tl__note { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px 24px; margin-top: 22px; font-size: 13px; color: var(--fog-2); }
.ed-tl__note .ed-legend__keys span { color: var(--fog); }
.ed-tl__note .ed-sdot--s0 { background: var(--brand-2); box-shadow: inset 0 0 0 1px rgba(236, 238, 255, .22); }
.ed-tl__note .ed-sdot--s1 { background: var(--tape); box-shadow: none; }
.ed-tl__note .ed-sdot--s2 { background: rgba(236, 238, 255, .32); box-shadow: none; }
.ed-tl__hint { display: none; align-items: center; gap: 8px; font-size: 12.5px; color: var(--fog-2); margin: 0; }
.ed-tl__hint svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

/* ==========================================================================
   9. 교육일정 — 문의 밴드
   ========================================================================== */
.ed-ask { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(40px, 6vw, 110px); align-items: start; }
.ed-ask__copy { display: flex; flex-direction: column; align-items: flex-start; gap: 24px; }
.ed-ask__list { border-top: 1.5px solid var(--ink); }
.ed-ask__row { border-bottom: 1px solid var(--line-2); }
.ed-ask__link, .ed-ask__static { position: relative; isolation: isolate; display: grid; grid-template-columns: 130px minmax(0, 1fr) auto; align-items: center; gap: 12px 24px; padding: 26px 6px; transition: padding .55s var(--ease); }
.ed-ask__link::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--white); transform: scaleY(0); transform-origin: 50% 100%; transition: transform .5s var(--ease); }
.ed-ask__link:hover { padding-left: 18px; padding-right: 14px; }
.ed-ask__link:hover::before { transform: scaleY(1); }
.ed-ask__k { display: inline-flex; align-items: center; gap: 10px; font-size: 13.5px; font-weight: 600; color: var(--muted); }
.ed-ask__k svg { width: 22px; height: 22px; flex: none; fill: none; stroke: var(--signal); stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.ed-ask__v { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.ed-ask__v strong { font-size: clamp(20px, 2vw, 28px); font-weight: 680; letter-spacing: -0.03em; line-height: 1.3; overflow-wrap: anywhere; }
.ed-ask__v small { font-size: 13.5px; color: var(--muted); }

/* ==========================================================================
   9-b. 회차 상세 — 개강 회차 카드 (티켓)
   ========================================================================== */
.ed-ticket {
    position: relative; isolation: isolate; display: grid; grid-template-columns: minmax(0, 1fr) 210px;
    border-radius: var(--r-lg); background: var(--night); color: #fff; box-shadow: var(--shadow-2);
}
.ed-ticket::before {
    content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none; border-radius: inherit;
    background-image: linear-gradient(var(--night-line) 1px, transparent 1px), linear-gradient(90deg, var(--night-line) 1px, transparent 1px);
    background-size: 36px 36px; -webkit-mask-image: radial-gradient(ellipse 70% 90% at 0 0, #000, transparent 70%); mask-image: radial-gradient(ellipse 70% 90% at 0 0, #000, transparent 70%);
}
.ed-ticket__main { display: flex; flex-direction: column; gap: 34px; padding: clamp(28px, 3.4vw, 44px); min-width: 0; }
.ed-ticket__dates { display: flex; align-items: flex-end; flex-wrap: wrap; gap: 18px 30px; }
.ed-ticket__date { display: flex; flex-direction: column; gap: 8px; }
.ed-ticket__k { font-size: 12.5px; font-weight: 600; color: var(--fog-2); }
.ed-ticket__date .ed-rise { font-size: clamp(48px, 5.4vw, 80px); line-height: .84; padding: .1em 0 .03em; margin: -.1em 0 -.03em; }
.ed-ticket__date b { font-weight: 780; letter-spacing: -0.015em; font-variant-numeric: tabular-nums; }
.ed-ticket__md { font-family: var(--font-mono); font-size: 12.5px; letter-spacing: .02em; color: var(--fog); }
.ed-ticket__time { display: flex; flex: 0 0 100%; min-width: 0; flex-direction: row; align-items: baseline; gap: 14px; margin-left: 0; padding: 16px 0 0; border-left: 0; border-top: 0; }
.ed-ticket__tv { font-family: var(--font-mono); font-size: clamp(18px, 1.6vw, 22px); font-weight: 500; letter-spacing: -0.01em; color: #fff; white-space: normal; overflow-wrap: anywhere; }
.ed-ticket__arrow { padding-bottom: 38px; }
.ed-ticket__arrow svg { width: 44px; height: 44px; fill: none; stroke: var(--signal); stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.ed-ticket__course { display: flex; flex-direction: column; gap: 8px; padding-top: 24px; border-top: 1px solid var(--night-line-2); min-width: 0; }
.ed-ticket__code { font-family: var(--font-mono); font-size: clamp(24px, 2.4vw, 32px); font-weight: 600; letter-spacing: -0.01em; color: var(--signal); }
.ed-ticket__name { font-family: var(--font-sans); font-style: normal; font-size: clamp(22px, 2vw, 28px); line-height: 1.25; color: #fff; }
.ed-ticket__track { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 14px; color: var(--fog-2); }
.ed-ticket__track .ed-meter i { background: var(--night-line-2); }
.ed-ticket__track .ed-meter[data-lv="1"] i:nth-child(-n+1), .ed-ticket__track .ed-meter[data-lv="2"] i:nth-child(-n+2), .ed-ticket__track .ed-meter[data-lv="3"] i:nth-child(-n+3) { background: #fff; }
.ed-ticket__track .ed-meter[data-lv="3"] i:nth-child(3) { background: var(--tape); }
.ed-ticket__stub {
    position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 16px;
    padding: clamp(28px, 3.4vw, 44px) 26px; border-left: 2px dashed rgba(236, 238, 255, .2);
    background: var(--night-2); border-radius: 0 var(--r-lg) var(--r-lg) 0;
}
.ed-ticket__stub::before, .ed-ticket__stub::after { content: ""; position: absolute; left: -13px; width: 24px; height: 24px; border-radius: 50%; background: var(--paper); }
.ed-ticket__stub::before { top: -12px; }
.ed-ticket__stub::after { bottom: -12px; }
/* 등장: 본권이 올라온 뒤 절취부가 옆에서 붙는다 */
html.c-ready .ed-ticket[data-reveal] .ed-ticket__stub { opacity: 0; transform: translate3d(38px, 0, 0) rotate(2.5deg); transform-origin: 0 0; transition: opacity .8s var(--ease) .5s, transform 1.3s var(--ease) .5s; }
html.c-ready .ed-ticket[data-reveal].is-in .ed-ticket__stub { opacity: 1; transform: none; }
.ed-ticket__dday { display: inline-flex; align-items: center; height: 28px; padding: 0 10px; border-radius: 4px; background: var(--signal); color: var(--on-signal); font-family: var(--font-mono); font-size: 12.5px; font-weight: 600; letter-spacing: .04em; }
.ed-ticket.is-s1 .ed-ticket__dday, .ed-ticket.is-s2 .ed-ticket__dday { font-family: var(--font-sans); font-weight: 700; letter-spacing: 0; }
.ed-ticket.is-s2 .ed-ticket__dday { background: var(--night-3); color: var(--fog-2); }
.ed-ticket__stub .c-badge--off { background: var(--night-3); color: var(--fog-2); }
/* 어두운 바탕 위 "모집중" — 기본 짙은 초록 글자는 대비가 낮아 토큰 --ok 로 밝힌다 */
.ed-ticket__stub .c-badge--ok, .ed-sibs__item.is-me .c-badge--ok { background: rgba(23, 160, 107, .18); color: var(--ok); }
.ed-ticket__cal { width: 44px; height: 44px; margin-top: auto; fill: none; stroke: var(--signal); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; opacity: .9; }
.ed-ticket__days { display: flex; align-items: baseline; gap: 3px; font-size: 13px; font-weight: 600; color: var(--fog-2); }
.ed-ticket__days b { font-family: var(--font-sans); font-size: 52px; font-weight: 760; letter-spacing: -0.05em; line-height: 1; color: #fff; }
.ed-ticket__facts { margin-top: clamp(40px, 5vw, 64px); }
.ed-ticket__note { margin-top: 36px; font-size: 13.5px; color: var(--muted); }

.ed-sibs { margin-top: clamp(64px, 7vw, 96px); }
.ed-sibs__list { display: grid; grid-template-columns: repeat(var(--cols, 4), minmax(0, 1fr)); gap: 10px; }   /* --cols: 서버가 마지막 줄 빈 칸이 적은 열 수로 지정 */
.ed-sibs__item {
    display: flex; flex-direction: column; align-items: flex-start; gap: 8px; height: 100%; padding: 16px 18px;
    border-radius: var(--r); background: var(--white); box-shadow: inset 0 0 0 1px var(--line);
    transition: box-shadow .35s var(--ease), transform .5s var(--ease), background .35s, color .35s;
}
.ed-sibs__item:hover { box-shadow: inset 0 0 0 1px var(--brand); transform: translateY(-3px); }
.ed-sibs__item.is-me { background: var(--brand); color: #fff; box-shadow: none; }
.ed-sibs__no { font-size: 12.5px; font-weight: 600; color: var(--muted); }
.ed-sibs__item.is-me .ed-sibs__no { color: var(--tape); }
.ed-sibs__range { font-family: var(--font-mono); font-size: 14.5px; font-weight: 500; }
.ed-sibs__item.is-s2:not(.is-me) .ed-sibs__range { color: var(--muted); }

/* ==========================================================================
   10. Responsive
   ========================================================================== */
@media (max-width: 1180px) {
    .ed-up__link { grid-template-columns: minmax(180px, 210px) minmax(0, 1fr) auto auto; }
    .ed-up__info { display: none; }
}
@media (max-width: 1024px) {
    .ed-intro__grid { grid-template-columns: 1fr; }
    .ed-intro__fig { max-width: 720px; }
    .ed-courses, .ed-related .ed-courses { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ed-info { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ed-info__item { padding: 28px 24px 30px; border-bottom: 1px solid var(--line-2); }
    .ed-info__item:nth-child(2n+1) { padding-left: 0; }
    .ed-info__item:nth-child(2n) { border-right: 0; padding-right: 0; }
    .ed-file { grid-template-columns: 1fr; row-gap: clamp(56px, 9vw, 80px); }   /* 요약 카드 ↔ 본문 블록 간격을 블록 사이 간격과 맞춘다 */
    .ed-dossier { position: relative; top: auto; }
    .ed-ask { grid-template-columns: 1fr; }
    .ed-cal__bar > span { display: none; }
    .ed-cal__dow span b { display: none; }
    .ed-months a { padding: 12px 8px; }
    .ed-months__m { flex-direction: column; gap: 2px; }
    .ed-tl { --lw: 170px; }
}
@media (max-width: 760px) {
    .ed-br-pc { display: none; }   /* 히어로 설명의 데스크톱용 강제 줄바꿈 — 모바일은 자연 줄바꿈 */
    .ed-actions { flex-direction: column; align-items: stretch; align-self: stretch; }
    .ed-actions .c-btn { width: 100%; }
    .ed-404 .ed-actions { align-self: stretch; }
    .ed-agenda__item.is-s2 .ed-agenda__title { color: var(--ink-3); }
    .ed-kinetic > span { font-size: clamp(72px, 24vw, 110px); padding-left: 4vw; }

    .ed-intro__fig { padding: 0 0 56px 26px; }
    .ed-seal { left: 6px; bottom: 24px; width: 112px; height: 112px; box-shadow: 0 0 0 6px var(--paper), inset 0 0 0 1px rgba(255, 210, 31, .35); }
    .ed-seal text { font-size: 10.5px; }
    .ed-seal__core b { font-size: 26px; }
    .ed-seal__core span { font-size: 8px; }
    .ed-intro__cap { left: 110px; right: 18px; bottom: 14px; font-size: 11.5px; }   /* 인장이 프레임을 약 92px 덮는다 */
    .ed-intro__cap span:last-child { display: none; }
    .ed-corner { width: 16px; height: 16px; }
    .ed-cert { grid-template-columns: 28px minmax(0, 1fr); gap: 14px; }
    .ed-cert__icon { width: 26px; height: 26px; }
    .ed-cert__en { grid-column: 2; text-align: left; margin-top: -8px; }
    .ed-stats.c-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 16px; }
    .ed-stats .c-stat__num { font-size: clamp(40px, 12vw, 56px); }

    .ed-toolbar { align-items: stretch; flex-wrap: nowrap; }   /* column + wrap 이면 줄 폭이 칩 목록 max-content 로 커져 가로 스크롤 발생 */
    .ed-toolbar > * { min-width: 0; }
    .ed-toolbar__side { width: 100%; justify-content: space-between; gap: 10px 18px; }
    .ed-legend-lv { gap: 6px 12px; }
    .ed-courses, .ed-related .ed-courses { grid-template-columns: 1fr; }
    .ed-track__head { padding-top: 40px; }
    .ed-track__ghost { font-size: 76px; top: -0.04em; }
    .ed-track__ghost > span { padding-left: 18%; }
    .ed-course__in { padding: 22px 20px 20px; }
    .ed-course__meta dd { font-size: 12.5px; }
    .ed-course__meta dt { font-size: 11px; }

    .ed-fac__track { --fh: 210px; margin: 0 calc(var(--gutter) * -1); padding: 0 var(--gutter) 8px; scroll-padding-left: var(--gutter); }
    .ed-info { grid-template-columns: 1fr; }
    .ed-info__item, .ed-info__item:nth-child(2n), .ed-info__item:nth-child(2n+1) { padding: 24px 0 26px; border-right: 0; }
    .ed-info__icon { width: 38px; height: 38px; }

    .ed-ticket { grid-template-columns: 1fr; }
    .ed-ticket__stub { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 12px 16px; padding: 24px 22px; border-left: 0; border-top: 2px dashed rgba(236, 238, 255, .2); border-radius: 0 0 var(--r-lg) var(--r-lg); }
    .ed-ticket__stub::before { top: -13px; left: -12px; }
    .ed-ticket__stub::after { top: -13px; bottom: auto; left: auto; right: -12px; }
    html.c-ready .ed-ticket[data-reveal] .ed-ticket__stub { transform: translate3d(0, 26px, 0); }
    html.c-ready .ed-ticket[data-reveal].is-in .ed-ticket__stub { transform: none; }
    .ed-ticket__cal { display: none; }
    .ed-ticket__days { margin-left: auto; }
    .ed-ticket__days b { font-size: 38px; }
    .ed-ticket__arrow { padding-bottom: 30px; }
    .ed-ticket__arrow svg { width: 30px; height: 30px; }
    /* 개강 → 종료를 한 줄에, 교육 시간은 그 아래 한 줄 (KEY  값) */
    .ed-ticket__dates { gap: 14px 16px; }
    .ed-ticket__date .ed-rise { font-size: clamp(32px, 9vw, 44px); }
    .ed-ticket__time { flex: 1 0 100%; flex-direction: row; align-items: baseline; gap: 14px; margin-left: 0; padding: 0; border-left: 0; }
    .ed-ticket__tv { font-size: 16px; }
    .ed-dossier { padding: 24px 22px 26px; }
    .ed-dossier__kv > div { grid-template-columns: 76px minmax(0, 1fr); }
    .ed-sess__item { grid-template-columns: 48px minmax(0, 1fr) auto; padding: 18px 4px; }
    .ed-sess__time { grid-column: 2; grid-row: 2; margin-top: -4px; }
    .ed-sess__item .c-badge { grid-column: 3; grid-row: 1 / 3; }
    .ed-sibs__list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .ed-sibs__item { padding: 14px 14px; }
    .ed-sibs__range { font-size: 13.5px; }
    .ed-facts { grid-template-columns: 1fr; }
    .ed-facts > div, .ed-facts > div:nth-child(2n) { padding: 20px 0 22px; border-left: 0; }

    .ed-calhead { align-items: flex-start; }
    .ed-calnav { width: 100%; justify-content: space-between; }
    .ed-calnav__btn, .ed-calnav__today { height: 48px; }
    .ed-calnav__btn { width: 48px; }
    .ed-months { display: flex; overflow-x: auto; scrollbar-width: none; margin-left: calc(var(--gutter) * -1); margin-right: calc(var(--gutter) * -1); padding: 0 var(--gutter); border: 0; gap: 6px; }
    .ed-months::-webkit-scrollbar { display: none; }
    .ed-months a { flex: none; min-width: 62px; border: 0; border-radius: var(--r-sm); box-shadow: inset 0 0 0 1px var(--line-2); }
    .ed-months a.is-today::before { left: 10px; right: 10px; top: 0; }
    .ed-cal, .ed-legend { display: none; }
    .ed-agenda { display: block; }

    .ed-up__link { grid-template-columns: minmax(0, 1fr) auto; gap: 10px 14px; padding: 22px 4px; }
    .ed-up__when { grid-column: 1 / -1; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
    .ed-up__main { grid-column: 1; }
    .ed-up__link > .c-badge { grid-column: 2; grid-row: 2; align-self: start; }
    .ed-up__link > .c-arrow { display: none; }
    .ed-up__title { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
    a.ed-up__link:hover { padding-left: 10px; padding-right: 6px; }

    .ed-tl { --lw: calc(108px + var(--gutter)); min-width: 780px; }
    .ed-tl__label b { font-size: 14px; }
    .ed-tl__label span { display: none; }
    .ed-tlwrap { margin: 0 calc(var(--gutter) * -1); padding-left: 0; padding-right: var(--gutter); }
    .ed-tl__corner, .ed-tl__label { position: sticky; left: 0; z-index: 4; background: var(--night); box-shadow: 10px 0 14px -10px rgba(0, 0, 0, .9); padding-left: var(--gutter); }
    .ed-tl__label { align-self: stretch; justify-content: center; }
    .ed-tl__hint { display: flex; }
    .ed-tlnav { width: 100%; justify-content: space-between; }

    .ed-ask__link, .ed-ask__static { grid-template-columns: minmax(0, 1fr) auto; gap: 6px 14px; padding: 22px 4px; }
    .ed-ask__k { grid-column: 1 / -1; }
    .ed-ask__link:hover { padding-left: 10px; padding-right: 6px; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
    .ed-seal svg { animation: none !important; }
    html.c-ready [data-reveal] .ed-rise > *, html.c-ready .ed-course[data-reveal] .ed-course__code > span { transform: none !important; }
    html.c-ready .ed-cal[data-reveal] .ed-cal__bar { clip-path: none !important; }
    html.c-ready .ed-cal[data-reveal] .ed-cal__week { opacity: 1 !important; transform: none !important; }
    html.c-ready .ed-tlwrap[data-reveal] .ed-tl__bar { transform: none !important; }
    html.c-ready .ed-ticket[data-reveal] .ed-ticket__stub { opacity: 1 !important; transform: none !important; }
    html.c-ready .ed-course[data-reveal] .ed-course__meta > div::before { transform: none !important; }
}
