
/* gofesta.css — 자동 생성(scripts/build-tokens.mjs). 원본: tokens/gofesta.tokens.json. 손으로 고치지 않는다. */
/* 3층: --p-* primitive(값) · --* semantic(역할) · 스포크 호환 alias. 테마는 [data-theme="..."]로 semantic만 재지정. */
:root{
  --p-color-white:#ffffff;
  --p-color-paper-warm:#fbf9f6;
  --p-color-sand-100:#f3f0ea;
  --p-color-sand-200:#e9e4db;
  --p-color-sand-300:#e6e2da;
  --p-color-sand-400:#d9d3c8;
  --p-color-sand-600:#8e867a;
  --p-color-ink-600:#6b655d;
  --p-color-ink-700:#57514a;
  --p-color-ink-900:#2b2723;
  --p-color-ink-950:#12100f;
  --p-color-rose-50:#f6ece9;
  --p-color-rose-100:#f0dcd6;
  --p-color-rose-500:#ff385c;
  --p-color-rose-600:#d91447;
  --p-color-rose-700:#b80f3b;
  --p-color-red-700:#b3261e;
  --p-color-green-500:#30a46c;
  --p-color-green-700:#2e6b4a;
  --p-color-tone-now-ink:#a8321f;
  --p-color-tone-now-mid:#f09a86;
  --p-color-tone-now-tint:#fde8e2;
  --p-color-tone-soon-ink:#7d5209;
  --p-color-tone-soon-mid:#ddb366;
  --p-color-tone-soon-tint:#f8edd3;
  --p-color-tone-upcoming-ink:#2c4a6b;
  --p-color-tone-upcoming-mid:#8fa9c4;
  --p-color-tone-upcoming-tint:#e4ebf2;
  --p-color-tone-events-ink:#6a3f63;
  --p-color-tone-events-mid:#bf9bb8;
  --p-color-tone-events-tint:#f1e6ee;
  --p-color-tone-world-ink:#46602f;
  --p-color-tone-world-mid:#a3b889;
  --p-color-tone-world-tint:#e9efde;
  --p-color-tone-picks-ink:#6e4a38;
  --p-color-tone-picks-mid:#c9a48f;
  --p-color-tone-picks-tint:#f3e8e0;
  --p-font-sans:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic","Noto Sans KR",system-ui,sans-serif;
  --p-type-size-caption:.8125rem;
  --p-type-size-small:.9375rem;
  --p-type-size-body:1.0625rem;
  --p-type-size-lead:1.1875rem;
  --p-type-size-h3:1.25rem;
  --p-type-size-h2:1.5rem;
  --p-type-size-h1:clamp(1.875rem,1.3rem + 2.4vw,2.75rem);
  --p-type-floor:12px;
  --p-radius-sm:10px;
  --p-radius-md:14px;
  --p-radius-lg:20px;
  --p-radius-pill:999px;
  --p-shadow-card:0 1px 2px rgb(43 39 35 / .05),0 8px 24px rgb(43 39 35 / .06);
  --p-motion-ease:cubic-bezier(.2,0,0,1);
  --p-target-min:44px;
  --p-target-floor:24px;

  --paper:#ffffff;
  --surface:#ffffff;
  --sunken:#ffffff;
  --ink:#2b2723;
  --ink2:#57514a;
  --ink3:#6b655d;
  --line:#e9e4db;
  --field:#8e867a;
  --point:#ff385c;
  --point-deep:#d91447;
  --point-press:#b80f3b;
  --point-ink:#d91447;
  --point-ink-on-tint:#b80f3b;
  --on-point:#ffffff;
  --danger:#b3261e;
  --ok:#2e6b4a;
  --ok-fill:#2e6b4a;
  --on-ok:#ffffff;
  --fill:var(--point-deep);
  --fill-press:var(--point-press);
  --soft:#f6ece9;
  --soft-press:#f0dcd6;
  --map-land:#e6e2da;
  --map-land-hover:#d9d3c8;
  --shadow-card:0 1px 2px rgb(43 39 35 / .05),0 8px 24px rgb(43 39 35 / .06);
  --sans:"Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic","Noto Sans KR",system-ui,sans-serif;
  --ease:cubic-bezier(.2,0,0,1);
  --fs-caption:.8125rem;
  --fs-small:.9375rem;
  --fs-body:1.0625rem;
  --fs-lead:1.1875rem;
  --fs-h3:1.25rem;
  --fs-h2:1.5rem;
  --fs-h1:clamp(1.875rem,1.3rem + 2.4vw,2.75rem);
  --r-sm:10px;
  --r-md:14px;
  --r-lg:20px;
  --tone:#2c4a6b;
  --tone-mid:#8fa9c4;
  --tone-tint:#e4ebf2;
  --ad-surface:#f3f0ea;
  --ad-line:#d9d3c8;
  --warn-ink:#7d5209;
  --info-ink:#2c4a6b;
}
@supports (color:color-mix(in oklch,red,blue)){:root:not([data-theme]){--accent-ink:color-mix(in oklch,var(--accent),black 25%);--accent-wash:color-mix(in oklch,var(--accent) 12%,transparent);--primary-wash:color-mix(in oklch,var(--primary) 6%,transparent)}}
@media (prefers-reduced-motion:reduce){:root{--p-motion-duration-fast:0ms;--p-motion-duration-base:0ms;--p-motion-duration-slow:0ms;--p-motion-duration-reveal:0ms;--p-motion-stagger:0ms}}

/* 섹션 톤: now=salmon · soon=tastes(치자) · upcoming=places(쪽) · events=contents(가지) · world=orgs(이끼) · picks=people(흙) */
.tone-now{--tone:#a8321f;--tone-mid:#f09a86;--tone-tint:#fde8e2}.tone-soon{--tone:#7d5209;--tone-mid:#ddb366;--tone-tint:#f8edd3}.tone-upcoming{--tone:#2c4a6b;--tone-mid:#8fa9c4;--tone-tint:#e4ebf2}
.tone-events{--tone:#6a3f63;--tone-mid:#bf9bb8;--tone-tint:#f1e6ee}.tone-world{--tone:#46602f;--tone-mid:#a3b889;--tone-tint:#e9efde}.tone-picks{--tone:#6e4a38;--tone-mid:#c9a48f;--tone-tint:#f3e8e0}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{font-size:16px}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);line-height:1.65;word-break:keep-all;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
a:focus-visible,button:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:8px}
.mono{font-size:.8125rem;line-height:1.5;letter-spacing:.01em;color:var(--ink3);text-transform:none;font-weight:500}
.wrap{max-width:74rem;margin:0 auto;padding:0 1rem}
@media(min-width:640px){.wrap{padding:0 1.5rem}}@media(min-width:1024px){.wrap{padding:0 2rem}}
main.wrap{padding-top:1.5rem;padding-bottom:5rem}
@media(min-width:640px){main.wrap{padding-top:2.5rem}}
.top{background:var(--paper);border-bottom:1px solid var(--line);padding:.625rem 0 .75rem}
@media(min-width:64rem){.top{padding:.875rem 0}}
.top .wrap{display:flex;align-items:center;justify-content:flex-start;gap:1rem;flex-wrap:wrap}
.navwrap{margin-left:auto}
@media(min-width:641px){.aux{margin-left:.25rem}}
.brand{display:inline-flex;line-height:1.15}
.brand::before{content:"";display:none}
.brand .festa{color:var(--point-deep)}
.brand{font-size:1.5rem;font-weight:800;letter-spacing:-.02em;color:var(--ink)}
.brand picture{display:block;line-height:0}.brand-logo{display:block;height:1.6em;width:auto}@media(max-width:640px){.top .brand-logo{height:1.36em}}@media(max-width:399px){.top .brand-logo{height:1.19em;margin-right:4px}}   /* 회장 2026-10-09 로고 이미지 교체 · 글자 크기 규칙(반응형)이 그대로 로고 높이를 정한다 */
.home{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:12px;color:var(--ink2);background:var(--surface);box-shadow:var(--shadow-card);margin-right:.25rem;flex:0 0 auto;transition:transform .13s var(--ease)}
.home:active{transform:scale(.97)}
.home[aria-current="page"]{color:var(--point-deep)}
.navwrap{display:flex;align-items:center;gap:.5rem;min-width:0}
.nav{display:flex;align-items:center;gap:.25rem;background:var(--sunken);border-radius:14px;padding:3px;overflow-x:auto;scrollbar-width:none;max-width:100%}
.nav::-webkit-scrollbar{display:none}
.nav a{flex:0 0 auto;padding:.6rem .875rem .6rem .75rem;border-radius:11px;font-size:.9375rem;font-weight:600;color:var(--ink2);min-height:44px;display:inline-flex;align-items:center;gap:.4375rem;white-space:nowrap;transition:transform .13s var(--ease)}
.nav a svg{width:18px;height:18px;flex:0 0 auto;color:var(--ink3)}
.nav a[aria-current="page"] svg{color:var(--point-deep)}
.nav a:active{transform:scale(.97)}
.nav a[aria-current="page"]{background:var(--surface);color:var(--point-deep);box-shadow:var(--shadow-card)}
.aux a[aria-current="page"]{color:var(--point-deep)}
.nav a:active,.aux a:active,.home:active{color:var(--point-deep)}
.aux{display:flex;gap:.25rem}.aux a{padding:.5rem .625rem;border-radius:10px;font-size:.875rem;font-weight:600;color:var(--ink3);display:inline-flex;align-items:center;gap:.3rem;white-space:nowrap}.aux a svg{width:16px;height:16px;flex:0 0 auto}.aux a:active{transform:scale(.97)}
@media(max-width:640px){.aux{width:100%;justify-content:flex-end}.navwrap{width:100%;justify-content:flex-end}.nav{flex:1 1 auto}.nav a{flex:1 1 0;flex-direction:column;justify-content:center;gap:.15rem;padding:.35rem .125rem;font-size:.6875rem;min-height:50px;letter-spacing:-.01em}.nav a svg{width:20px;height:20px}}
.searchbar{background:var(--sunken);border-bottom:1px solid var(--line);padding:.625rem 0}
.sbrow{display:flex;align-items:center;gap:1rem}.sbrow .search{flex:1 1 auto}
.visitc{flex:0 0 auto;font-size:.875rem;font-weight:600;color:var(--ink2);white-space:nowrap}.visitc b{color:var(--point-deep);font-weight:800;font-variant-numeric:tabular-nums}
@media(max-width:640px){.sbrow{gap:.5rem}.visitc{font-size:.75rem}}
.search{display:flex;align-items:center;gap:.625rem;background:var(--surface);box-shadow:var(--shadow-card);border-radius:12px;padding:.625rem 1rem;min-height:48px;max-width:40rem;margin:0 auto}
.search .mono{color:var(--ink3);font-size:.75rem}
.search input{border:0;outline:0;background:transparent;color:var(--ink);width:100%;flex:1 1 auto;min-width:8rem;font-size:.9375rem;font-family:inherit}
.search .mono:empty{display:none}
.search input::placeholder{color:var(--ink3)}
.search .qbtn{appearance:none;border:0;background:var(--ink);color:#fff;border-radius:8px;padding:.45rem .8rem;font:inherit;font-size:.8125rem;font-weight:700;cursor:pointer;flex:0 0 auto}
#qn{white-space:nowrap}
.hero{display:grid;grid-template-columns:1fr;gap:1.5rem;align-items:center;margin-bottom:1rem}
@media(min-width:64rem){.hero{grid-template-columns:5fr 7fr;gap:3rem}}
.hero>div:first-child{background:transparent;border:0;padding:0;display:flex;flex-direction:column;justify-content:center}
.hero>div:first-child::before{content:"";display:block;width:1.5rem;height:2px;background:var(--point);margin-bottom:.875rem}
.hero h1{font-size:clamp(1.75rem,1.2rem + 2.4vw,2.625rem);line-height:1.28;letter-spacing:-.025em;margin:.25rem 0 .75rem;font-weight:700;text-wrap:balance}
.hero h1 em{font-style:normal;color:var(--point-ink);font-weight:800;font-variant-numeric:tabular-nums}
.cover{text-align:center;max-width:44rem;margin:-.25rem auto 1.5rem;font-size:.875rem;line-height:1.65;color:var(--ink3)}.cover b{color:var(--ink2);font-weight:700;font-variant-numeric:tabular-nums}
.hero .lead{font-size:1.0625rem;color:var(--ink2);margin:0 0 1.125rem;max-width:30rem}
.stats{display:flex;gap:1.5rem;flex-wrap:wrap;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:.875rem 0}
.stat{display:flex;flex-direction:column}
.stat b{font-size:1.5rem;font-weight:800;color:var(--ink);line-height:1.1;font-variant-numeric:tabular-nums}
.stat .mono{font-size:.75rem}
.mapbox{background:var(--surface);border:0;border-radius:24px;box-shadow:var(--shadow-card);padding:1.25rem 1.25rem .75rem;position:relative}
.mapbox .corner{display:none}
.mapbox .cap{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.375rem}
.mapbox .cap .sel{font-weight:800;font-size:1.0625rem}
.mapbox svg,html body .mapbox svg{width:100%;height:auto;display:block;max-height:34rem}   /* 지역 이름이 실제 12px 이상 되게(지도 폭 ≈ 높이×0.59 · 2026-11-02 허브 지적 5.5px) */
.mapbox path{fill:var(--sunken);stroke:var(--surface);stroke-width:1.4;cursor:pointer;transition:fill .13s var(--ease)}
.mapbox path:hover{fill:#e4ebf2}
.mapbox path[aria-pressed="true"]{fill:var(--point);stroke:var(--point-deep)}
.mapbox text,html body .mapbox svg text{font-family:var(--sans);font-size:23px;font-weight:700;fill:var(--ink);pointer-events:none;paint-order:stroke;stroke:var(--surface);stroke-width:4px;stroke-linejoin:round}   /* viewBox 600 기준 23 = 화면 12~13px · 흰 테두리로 지도 위 대비(2026-11-02) */
.mapbox text.n{display:none}   /* 지역별 숫자는 아래 지역 칩·지도 툴팁에 있다 — 글자를 키우면 지도 위에서 겹쳐 숨김(2026-11-02) */
.index{display:flex;flex-wrap:wrap;gap:.5rem;margin:1.25rem 0 .25rem;padding:.5rem;background:var(--sunken);border-radius:16px}
.index[hidden]{display:none}.index.sub{margin-top:.25rem;background:transparent;padding:.25rem .5rem}
.index button{appearance:none;border:0;background:var(--surface);color:var(--ink2);border-radius:999px;padding:.5rem .95rem;font-family:inherit;font-size:.875rem;font-weight:600;letter-spacing:-.01em;display:inline-flex;gap:.4rem;align-items:baseline;cursor:pointer;min-height:38px;box-shadow:0 1px 2px rgb(43 39 35 / .06);transition:transform .13s var(--ease),box-shadow .13s var(--ease),background .13s var(--ease)}
.index button .n{font-size:.6875rem;font-weight:700;color:var(--ink3);font-variant-numeric:tabular-nums;background:var(--sunken);border-radius:999px;padding:.05rem .4rem}
.index button:hover{box-shadow:0 2px 6px rgb(43 39 35 / .1)}
.index button:active{transform:scale(.96)}
.index button[aria-pressed="true"]{background:var(--ink);color:#fff;box-shadow:0 4px 12px -4px rgb(43 39 35 / .45)}
.index button[aria-pressed="true"] .n{background:rgba(255,255,255,.18);color:#fff}
#dchips{background:transparent;padding:0;margin-bottom:0}
#dchips button{background:transparent;box-shadow:inset 0 0 0 1.5px var(--line);color:var(--ink2)}
#dchips button[aria-pressed="true"]{background:var(--point-deep);box-shadow:none;color:#fff}
@media(max-width:640px){.index{flex-wrap:nowrap;overflow-x:auto;margin:1rem -1rem 0;padding:.5rem 1rem;border-radius:0;scrollbar-width:none}.index::-webkit-scrollbar{display:none}.index button{flex:0 0 auto}.index::after{content:"";flex:0 0 .75rem}}
section{padding:0;margin:3.5rem 0 0}
@media(min-width:640px){section{margin-top:5rem}}
.sh{display:flex;align-items:baseline;gap:.75rem;margin:0 0 1rem}
.sh .no{display:none}
.sh::before{content:"";width:1.5rem;height:2px;background:var(--tone);align-self:center}
.sh h2{font-size:1.375rem;line-height:1.35;font-weight:700;margin:0;letter-spacing:-.02em}
.sh .n{margin-left:auto;font-size:.8125rem;color:var(--ink3);font-variant-numeric:tabular-nums}
.sh.hsh{align-items:center;gap:.5rem;justify-content:flex-start}
.sh.hsh::before{display:none}
.sh.hsh h2{flex:1 1 auto;min-width:0}   /* 「모두 보기」가 없는 머리도 제목은 왼쪽(space-between 상속 때문에 오른쪽으로 밀리던 것 · 회장 2026-10-10) */
.sh.hsh>svg{width:26px;height:26px;flex:0 0 auto;color:var(--tone,var(--point-deep))}
.sh.hsh .all{margin-left:auto;font-size:var(--fs-small);font-weight:700;color:var(--ink2);text-decoration:none;min-height:44px;display:inline-flex;align-items:center;white-space:nowrap}
.sh.hsh .all:hover{color:var(--ink)}
@media(max-width:640px){html.cjs body .htabs>section[id]>.sh.hsh>svg{display:none}html.cjs body .htabs>section[id]>.sh.hsh{justify-content:flex-end}}
.feature{display:grid;grid-template-columns:1fr;gap:0;background:var(--surface);border:0;border-radius:24px;overflow:hidden;margin-bottom:1.25rem;box-shadow:var(--shadow-card);transition:transform .13s var(--ease)}
@media(min-width:640px){.feature{grid-template-columns:.62fr 1fr}}
.feature:active{transform:scale(.985)}
.feature .media{position:relative;aspect-ratio:1/1.414;overflow:hidden;background:var(--tone-tint)}
.feature .media img{width:100%;height:100%;object-fit:contain;display:block}
.feature .media::after{content:none}
.feature .txt{padding:1.25rem 1.5rem;display:flex;flex-direction:column;gap:.5rem}
.feature .txt h3{font-size:clamp(1.625rem,1.3rem + 1.4vw,2.25rem);line-height:1.3;margin:0;font-weight:700;letter-spacing:-.025em}
.feature .txt p{margin:0;color:var(--ink2);font-size:.9375rem;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.feature .txt .go{margin-top:auto;font-size:.9375rem;color:var(--ink);font-weight:600;align-self:flex-start;box-shadow:inset 0 0 0 1px var(--ink);border-radius:12px;padding:.6rem 1.125rem}
.grid{display:grid;grid-template-columns:1fr;gap:1rem;background:transparent;border:0}
@media(min-width:640px){.grid{grid-template-columns:repeat(2,1fr);gap:1.25rem}}
.card{--pw:9.5rem;display:grid;grid-template-columns:var(--pw) 1fr;gap:.75rem;align-items:stretch;background:transparent;border:0;padding:0;box-shadow:none;overflow:visible}
.card>.media-link,.card>.namecard{align-self:start}   /* 같은 줄 카드 본문 높이를 맞추고 포스터는 위에 고정(회장 2026-09-30 높이 일관성) */
@media(max-width:420px){.card{--pw:7rem}}
.card .media,.card .ph{width:var(--pw);height:calc(var(--pw) * 1.414);aspect-ratio:auto;border-radius:16px;overflow:hidden;background:var(--tone-tint);box-shadow:var(--shadow-card);display:flex;align-items:center;justify-content:center;transition:transform .13s var(--ease)}
.card .media:active,.card .ph:active{transform:scale(.985)}
.card .media img{width:100%;height:100%;object-fit:contain;display:block}
.card .media{position:relative}   /* 지난 연도 포스터 표시(.pyear) 자리 — 2026-10-08 */
.pyear .pls{display:none}
@media(max-width:479px){.card .media .pyear{font-size:.625rem;padding:.1rem .35rem;left:.25rem;bottom:.25rem;white-space:nowrap}.card .media .pyear .pl{display:none}.card .media .pyear .pls{display:inline}}
.card .ph{font-size:2rem;font-weight:800;color:var(--tone-mid)}
.card.lite>.namecard{width:var(--pw);height:calc(var(--pw) * 1.414);border-radius:16px;box-shadow:var(--shadow-card)}
.card .litenote{margin:.375rem 0 0;font-size:.75rem;color:var(--ink3)}
.card .t .ext{font-size:.8125rem;color:var(--ink3)}
/* 페이지 나누기(회장 2026-09-28: 20개씩 · 아래 번호) */
[data-pgoff]{display:none!important}
.pager{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:.375rem;margin:1.75rem 0 .5rem}
.pager button{appearance:none;border:0;min-width:44px;height:44px;padding:0 .75rem;border-radius:12px;background:var(--surface);box-shadow:var(--shadow-card);font:inherit;font-size:.9375rem;font-weight:700;color:var(--ink2);cursor:pointer;font-variant-numeric:tabular-nums}
.pager button[aria-current="page"]{background:var(--ink);color:#fff;box-shadow:none}
.pager button:disabled{opacity:.35;cursor:default}
.pager .gap{color:var(--ink3);padding:0 .25rem}
.pager .info{flex-basis:100%;text-align:center;font-size:.8125rem;color:var(--ink3);margin-top:.25rem}
.card .body{min-height:calc(var(--pw) * 1.414);background:var(--surface);border-radius:16px;box-shadow:var(--shadow-card);padding:.875rem 1rem;display:flex;flex-direction:column;gap:.5rem;min-width:0}
.card .info{display:flex;flex-direction:column;gap:.2rem;min-width:0;flex:0 0 auto}
.card .meta{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;padding:0}
.card .meta .mono{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card .t{font-weight:700;font-size:1.0625rem;line-height:1.35;letter-spacing:-.015em}
.card .sub{font-size:.8125rem;color:var(--ink3);display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.card .facts{margin:.5rem 0 0;padding:.375rem 0 0;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:.125rem}
.card .facts div{display:grid;grid-template-columns:2.25rem 1fr;gap:.5rem;align-items:baseline;padding:.2rem 0;border-bottom:1px solid var(--line)}
.card .facts div:last-child{border-bottom:0}
.card .facts dt{font-size:.6875rem;font-weight:700;letter-spacing:.04em;color:var(--ink3);text-transform:uppercase}
.card .facts dd{margin:0;font-size:.8125rem;color:var(--ink2);line-height:1.45;overflow-wrap:anywhere}
.evbox{margin:0;background:var(--tone-tint);border-radius:12px;padding:.5rem .625rem;display:flex;flex-direction:column}
.evbox .h{font-size:.75rem;font-weight:700;color:var(--tone);margin-bottom:.125rem;display:flex;justify-content:space-between;flex:0 0 auto}
.evbox .h a{color:var(--ink3);font-weight:600}
.evbox ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.125rem}
.evbox li a{display:grid;grid-template-columns:auto 1fr;gap:.5rem;align-items:baseline;font-size:.8125rem;line-height:1.4;padding:.2rem .25rem;border-radius:8px;min-width:0}
.evbox li .row{display:block;font-size:.8125rem;line-height:1.4;padding:.25rem .25rem;border-radius:8px;min-width:0;color:inherit;text-decoration:none}
.evbox li .row b,.evbox li .row .s{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.evbox li+li .row{border-top:1px solid color-mix(in srgb,var(--tone) 12%,transparent)}
.evbox li a:active{background:var(--surface)}
.evbox li a.more-ev{color:var(--tone);font-weight:700}
.evbox li .dot{width:6px;height:6px;border-radius:50%;background:var(--tone);align-self:center}
.evbox li b{font-weight:700;display:block}
.evbox li span{min-width:0}
.evbox li span.s{color:var(--ink3);display:block;font-size:.75rem}
.tag{font-size:.75rem;padding:.1875rem .625rem;border-radius:999px;border:0;background:var(--sunken);color:var(--ink2);letter-spacing:0;text-transform:none;font-weight:600}
.tag.live{color:#fff;background:var(--point-deep)}
.tag.ok{color:var(--ok);background:#e5efe8}
.tag.chk{color:#7d5209;background:#f8edd3}.tag.warn{color:#8a2a1a;background:#f9e3de}.rb .src{font-size:.72rem;color:var(--ink3);margin-top:.15rem}.stat.warn{border-color:#e0a89e}.tag.end{color:var(--ink3)}
.dday{font-size:.8125rem;font-weight:800;color:var(--point-ink);font-variant-numeric:tabular-nums}
.list{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--line)}
.month{font-size:.8125rem;font-weight:700;letter-spacing:.01em;color:var(--tone);padding:1.125rem 0 .25rem}
.row{display:grid;grid-template-columns:3.25rem 1fr auto;gap:1rem;align-items:center;padding:1.125rem 0;background:transparent;border:0;border-bottom:1px solid var(--line);min-height:44px;transition:transform .13s var(--ease)}
.row:active{transform:scale(.985)}
.row .d{font-size:.8125rem;color:var(--ink3);font-variant-numeric:tabular-nums;display:flex;flex-direction:column;align-items:center;background:var(--surface);border-radius:8px;box-shadow:var(--shadow-card);overflow:hidden;width:3.25rem;padding:0 0 .25rem}
.row .d::before{content:attr(data-m);display:block;width:100%;background:var(--tone);color:#fff;font-size:.6875rem;font-weight:700;text-align:center;padding:.125rem 0}
.row .d span.dd{font-size:1.25rem;font-weight:800;color:var(--ink);line-height:1.2}
.row .t{font-weight:600;font-size:1.0625rem}
.row .m{font-size:.9375rem;color:var(--ink2);margin-left:.5rem}
.empty{color:var(--ink3);padding:1rem 0;font-size:.9375rem}
.picks{display:grid;grid-template-columns:1fr;gap:1rem;background:transparent;border:0}
@media(min-width:640px){.picks{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem}}@media(min-width:1024px){.picks{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem}}   /* 테마 5개(2026-09-29): 3열(3+2) · 칸이 내용에 밀려 넘치지 않게 minmax(0,…) */
.pick ol li>span{min-width:0;overflow-wrap:anywhere}
.picks.home10 .pick{height:100%}
.picks.home10 .pick .head{min-height:2.75rem;align-items:flex-start}
.picks.home10 .pick ol{flex:1 1 auto;min-height:calc(5 * 2.5rem)}
.picks.home10 .pick ol li{height:2.5rem;padding:0;align-items:center}
.picks.home10 .pick ol li>span{overflow:hidden}
.picks.home10 .pick ol li .nm{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.picks.home10 .pick .more{margin-top:auto}
.pick{background:var(--surface);border:0;border-radius:16px;padding:1.25rem;display:flex;flex-direction:column;gap:.5rem;box-shadow:var(--shadow-card);min-width:0}
.pick .head{display:flex;justify-content:space-between;align-items:baseline}
.pick .head .mono{color:var(--tone);font-weight:700}
.pick h3,.pick h2.pk{font-size:1.0625rem;margin:0;font-weight:700;letter-spacing:-.015em;line-height:1.4}   /* hub-b-2026-10-07 · hub-b2-2026-10-07 */
.pick p{margin:0;font-size:.875rem;color:var(--ink2);line-height:1.6}
.pick ol{margin:.375rem 0 0;padding:0;list-style:none}
.pick ol li{display:grid;grid-template-columns:1.75rem 1fr;gap:.5rem;padding:.5rem 0;border-top:1px solid var(--line);align-items:baseline}
.pick ol li .rk{font-size:.8125rem;font-weight:800;color:var(--point-ink);font-variant-numeric:tabular-nums}
.pick ol li .rk.dt{font-size:.75rem;font-weight:700;white-space:nowrap}
.pick ol:has(.rk.dt) li{grid-template-columns:4.25rem 1fr}
.pick ol li .nm{font-weight:600;font-size:.9375rem;color:var(--ink)}
.pick ol li .why{display:block;font-size:.8125rem;color:var(--ink3);margin-top:.125rem}
.pick .more{margin-top:.5rem;font-size:.8125rem;color:var(--ink);font-weight:600;align-self:center;box-shadow:inset 0 0 0 1px var(--ink);border-radius:12px;padding:.5rem .875rem}   /* 가운데 정렬·글자 축소(회장 2026-09-29) */
.links{display:flex;gap:.625rem;flex-wrap:wrap;margin:2.25rem 0 0}
.links a{min-height:48px;display:inline-flex;align-items:center;padding:0 1.375rem;border-radius:12px;box-shadow:inset 0 0 0 1px var(--ink);background:var(--surface);font-size:.9375rem;font-weight:600;transition:transform .13s var(--ease)}
.links a:active{transform:scale(.97)}
footer{margin:3.5rem -1rem 0;padding:1.5rem 1rem 2.5rem;background:var(--sunken);color:var(--ink3);font-size:.8125rem;line-height:1.7;display:grid;grid-template-columns:1fr auto;gap:1rem}
footer.ft{display:block;text-align:center}.ft .ftn{margin:0 0 .625rem}.ft .ftl{margin:0 0 .5rem}.ft .ftl a,.ft .ftc a{color:var(--ink2);text-decoration:none;margin:0 .3rem;white-space:nowrap}.ft .ftl a:hover,.ft .ftc a:hover{text-decoration:underline}
.ft .ftc{line-height:1.9}.ft .ftc .cp{display:block;margin-top:.375rem;color:var(--ink3)}
@media(min-width:640px){footer{margin:5rem -1.5rem 0;padding:1.5rem 1.5rem 2.5rem}}@media(min-width:1024px){footer{margin:5rem -2rem 0;padding:1.5rem 2rem 2.5rem}}
@media(max-width:640px){.hero h1{font-size:1.75rem}.row{grid-template-columns:3.25rem 1fr;gap:.75rem}.row .tagwrap{grid-column:2}footer{grid-template-columns:1fr}.nav{width:100%}.search{max-width:none;flex-wrap:wrap}.search input{flex:1 1 0;min-width:0}.search .mono{order:3;flex:1 0 100%;padding:0 0 .5rem}}   /* 검색 안내 문구가 입력칸을 찌그러뜨리지 않게 아랫줄로(2026-10-08 긴급) */
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
/* 포스터 없음 자리표시(전 페이지 공통) */
.namecard{display:flex;align-items:center;justify-content:center;text-align:center;background:linear-gradient(160deg,var(--tone-tint,#f3f0ea),var(--sunken));color:var(--tone,#2b2723);padding:.5rem;word-break:keep-all;overflow-wrap:anywhere}
.namecard span{font-weight:800;letter-spacing:-.02em;line-height:1.25;font-size:1rem;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.namecard.initial span{display:block;font-weight:800;line-height:1;letter-spacing:-.02em;-webkit-line-clamp:unset;overflow:visible;font-size:clamp(2.5rem,6vw,4.5rem)}
.dtop .poster .namecard.initial span{font-size:clamp(4rem,9vw,6.5rem)}
.namecard.typo{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;text-align:left;gap:.375rem;padding:1rem .875rem .875rem;
 background:linear-gradient(165deg,hsl(var(--th) 70% 93%) 0%,hsl(var(--th) 62% 84%) 58%,hsl(var(--th) 55% 74%) 100%);color:hsl(var(--th) 45% 20%)}
.namecard.typo::before{content:"";position:absolute;right:-22%;top:-12%;width:78%;aspect-ratio:1;border-radius:50%;background:hsl(var(--th) 80% 97% / .55)}
.namecard.typo::after{content:"";position:absolute;left:.875rem;right:.875rem;top:.875rem;height:3px;border-radius:2px;background:hsl(var(--th) 55% 45% / .55)}
.namecard.typo span,.namecard.typo b{position:relative;display:block;-webkit-line-clamp:unset;overflow:visible}
.namecard.typo .tp-k{font-size:.75rem;font-weight:700;letter-spacing:.04em;opacity:.8;margin-bottom:auto;padding-top:.5rem}
.namecard.typo .tp-n{font-size:clamp(1.125rem,2.1vw,1.5rem);font-weight:800;line-height:1.25;letter-spacing:-.02em;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;word-break:keep-all}
.namecard.typo .tp-d{font-size:.8125rem;font-weight:600;opacity:.85}
.namecard.typo .tp-m{font-size:.75rem;font-weight:800;letter-spacing:.06em;opacity:.55}
.feature .media.namecard.initial span{font-size:clamp(3.5rem,7vw,5.5rem)}
.pickpage .item .media.namecard.initial{display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,var(--tone-tint,#f3f0ea),var(--sunken))}
.pickpage .item .media.namecard.initial span{font-size:2.5rem}
.bcard .ph.namecard.initial span,.mrow .namecard.initial span,.crow .ph.namecard.initial span{font-size:1.625rem}
.crow .ph.namecard.initial{display:flex}

.search input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;display:none}
.search{position:relative}.search .qx{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:0;border-radius:999px;background:var(--sunken);color:var(--ink2);cursor:pointer}
.search .qx[hidden]{display:none}.search .qx svg{width:12px;height:12px}.search .qx:hover{background:var(--line);color:var(--ink)}.search .qx:focus-visible{outline:2px solid var(--point);outline-offset:2px}
.qsug{position:absolute;left:0;right:0;top:calc(100% + .375rem);z-index:40;text-align:left;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow-card);overflow:hidden}
.qsug ul{list-style:none;margin:0;padding:0}.qsug li+li{border-top:1px solid var(--line)}
.qsug li a{display:flex;align-items:center;min-height:var(--p-target-min);padding:.5rem .875rem;color:var(--ink);text-decoration:none;font-size:var(--fs-body);line-height:1.35;word-break:keep-all;overflow-wrap:anywhere}
.qsug li a:hover,.qsug li a:focus-visible,.qsug li a.on{background:color-mix(in srgb,var(--point) 12%,var(--surface))}   /* 고른 칸 전체 색(회장 2026-11-14 · 띠 대신) */.qsug li b{font-weight:800;color:var(--point-ink)}
.qsug .qnone{margin:0;padding:.75rem .875rem;font-size:var(--fs-small);color:var(--ink2)}

.prereg{margin:.5rem 0 0;font-size:var(--fs-small);line-height:1.6;color:var(--ink2)}.prereg a{font-weight:700;color:var(--point-ink);white-space:nowrap}   /* 사전등록 안내(회장 2026-11-01) */
.care{margin:1.25rem 0;padding:1rem 1.125rem;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--point);border-radius:var(--r-md);box-shadow:var(--shadow-card)}
.care h2{font-size:var(--fs-h3);margin:0 0 .25rem}.care .lead{margin:0 0 .75rem;color:var(--ink2);font-size:var(--fs-small)}
.care ul{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.care li{display:flex;gap:.625rem;align-items:flex-start;line-height:1.55}
.care li b{flex:0 0 3.5rem;color:var(--point-deep);font-size:var(--fs-small)}.care .note{margin:.75rem 0 0;color:var(--ink3);font-size:var(--fs-caption)}
.fb.page{flex-wrap:wrap}.fb.page .fix{flex:1 0 100%;margin-top:.5rem;text-align:center;color:var(--ink2);font-size:var(--fs-small)}
.fixlog{margin:.5rem 0 1rem;padding:.5rem .75rem;border:1px dashed var(--line);border-radius:var(--r-sm);color:var(--ink3);font-size:var(--fs-caption);line-height:1.5}
.fixlog b{color:var(--ink2);font-weight:600}.fixlog ul{list-style:none;margin:.25rem 0 0;padding:0}
.vc-alert{display:block;margin:.25rem 0 .5rem;padding:.625rem .75rem;border-radius:.625rem;background:color-mix(in srgb,#e5484d 12%,var(--surface));color:#b4232a;font-weight:800;font-size:.9375rem;text-decoration:none;border:1px solid color-mix(in srgb,#e5484d 35%,transparent)}
.vc-alert.rain{background:color-mix(in srgb,#2f6fc0 11%,var(--surface));color:#1f4f8f;border-color:color-mix(in srgb,#2f6fc0 35%,transparent)}.vc-alert.rain small{display:block;margin-top:.125rem;font-size:.8125rem;font-weight:700;color:#2f5f9f}
.wx .wet .wetfact{display:block;margin-top:.25rem;font-weight:600;color:var(--ink2)}.wx .wet .wetfact a{color:#1f4f8f;text-decoration:underline;text-underline-offset:2px}
.vcard.rain .vt{color:#1f4f8f}.vcard.rain.warn{border-color:color-mix(in srgb,#2f6fc0 35%,transparent)}
.journey li.jrain .jtips{margin:.375rem 0 .25rem;padding-left:1.125rem;font-size:.8438rem;line-height:1.55;color:var(--ink2)}.journey li.jrain .jtips li{margin:.125rem 0;list-style:disc}
.rainplan{margin:.625rem 0 0;padding:.625rem .75rem;border-radius:.625rem;background:color-mix(in srgb,#2f6fc0 7%,var(--surface));border:1px solid color-mix(in srgb,#2f6fc0 22%,transparent);font-size:.8125rem}
.rainplan>b{display:block;color:#1f4f8f;margin-bottom:.25rem}.rainplan p{margin:.25rem 0}.rainplan strong{color:#1f4f8f}
.indoor{list-style:none;margin:.25rem 0;padding:0;display:flex;flex-wrap:wrap;gap:.375rem}
.indoor li{display:flex;gap:.375rem;align-items:baseline;padding:.25rem .5rem;border-radius:999px;background:var(--surface);border:1px solid var(--line);font-size:.8125rem}
.indoor li a{color:var(--ink);font-weight:700;text-decoration:none}.indoor li span{font-size:.75rem;color:var(--ink3)}
.wx ul.indoor{display:flex;flex-wrap:wrap;gap:.375rem;margin:.25rem 0}.wx ul.indoor li,.wx ul.indoor li:first-child{display:flex;grid-template-columns:none;padding:.25rem .5rem;border:1px solid var(--line);border-radius:999px}
.journey li.jrain .jin{margin:.375rem 0 0;font-size:.75rem;font-weight:700;color:var(--ink3)}
.two>.main{min-width:0}
.precheck .vgrid,.jvc .vgrid{display:grid;grid-template-columns:1fr;gap:.75rem}
@media(min-width:760px){.precheck .vgrid,.jvc .vgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.jvc{margin:.625rem 0 .25rem}
.journey .jgd{margin:.5rem 0 0;padding:.625rem .875rem;border-radius:.75rem;background:color-mix(in srgb,var(--point) 5%,var(--surface));border:1px solid color-mix(in srgb,var(--point) 18%,transparent)}
.sec.journey .jgd p{margin:0;font-size:.875rem;line-height:1.55;color:var(--ink2)}.sec.journey .jgd p b{margin-right:.375rem;font-size:.8125rem;color:var(--point-ink-on-tint)}
.journey .jgd .src{margin-top:.25rem;font-size:.75rem;color:var(--ink3)}.journey .jgd .src a{color:var(--ink2);text-decoration:underline;text-underline-offset:2px}.vcard[id]{scroll-margin-top:5rem}
.vcard{padding:.875rem 1rem;border-radius:.875rem;background:var(--surface);border:1px solid var(--line);min-width:0}
.vcard.bad{border-color:color-mix(in srgb,#e5484d 45%,transparent);background:color-mix(in srgb,#e5484d 6%,var(--surface))}
.vcard .vt{font-weight:800;font-size:.9375rem;margin-bottom:.5rem;display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.vcard .vh{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.375rem}
.vcard p{margin:.375rem 0;font-size:.9063rem;line-height:1.5}
.precheck .vcard p.vsub,.jvc .vcard p.vsub{font-size:.75rem;font-weight:800;color:var(--ink3);margin:.625rem 0 .25rem;letter-spacing:.04em}
.vcard ul{margin:0;padding-left:1.1rem;font-size:.9063rem;line-height:1.5}
.vcard ul li span{display:block;color:var(--ink3);font-size:.8438rem}
.vcard ul li span.vtag{display:inline-block;color:inherit;font-size:.75rem}.vcard ul li span.vtag.ok,.vcard ul li span.vtag.bad{color:#fff}
.vcard ul.vtk{list-style:none;padding:0}
.vcard ul.vtk li{padding:.375rem 0;border-top:1px solid var(--line)}
.vcard ul.vtk li:first-child{border-top:0}
.vcard ul.vtk li b{margin-left:.375rem}
.vtag{display:inline-block;padding:.125rem .5rem;border-radius:999px;font-size:.75rem;font-weight:800;background:var(--line);color:var(--ink)}
.vtag.bad{background:#e5484d;color:#fff}.vtag.warn{background:#f5a524;color:#1a1a1a}.vtag.ok{background:#30a46c;color:#fff}
.vbtn{display:inline-block;padding:.375rem .75rem;border-radius:.5rem;background:var(--point);color:#fff;font-weight:800;text-decoration:none}
/* 여정 체크리스트 — 조건 칩으로 항목을 걸러 본다 */
.journey .jchips{display:flex;flex-wrap:wrap;gap:.375rem .5rem;margin:0 0 .75rem}
.journey .jchips .jg{display:flex;flex-wrap:wrap;gap:.375rem;align-items:center;padding:.25rem .5rem;border-radius:.75rem;background:var(--surface2,var(--surface));border:1px solid var(--line)}
.journey .jchips .jg>span{font-size:.75rem;font-weight:800;color:var(--ink3);margin-right:.125rem}
.journey .jchips button{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:999px;padding:.25rem .75rem;font-size:.8438rem;font-weight:700;cursor:pointer;min-height:32px}
.journey .jchips button[aria-pressed="true"]{background:var(--point);border-color:var(--point);color:#fff}
.journey .jtodo{margin:0 0 .875rem;padding:.75rem 1rem;border-radius:.875rem;background:color-mix(in srgb,var(--point) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--point) 35%,transparent)}
.journey .jtodo b{display:inline-block;font-size:.9375rem;margin:0 .5rem .375rem 0}
.journey .jtodo .jwhen{font-size:.75rem;font-weight:700;color:var(--ink3)}
.jteaser{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .625rem;margin:.75rem 0 0;padding:.75rem 1rem;border-radius:.875rem;text-decoration:none;color:var(--ink);background:color-mix(in srgb,var(--point) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--point) 35%,transparent)}
.jteaser b{font-size:.9375rem}.jteaser span{font-size:.875rem;color:var(--ink2)}.jteaser em{margin-left:auto;font-style:normal;font-weight:800;font-size:.8125rem;color:var(--point-ink)}
.journey .jearly{font-size:.6875rem;font-weight:800;color:#fff;background:var(--point);border-radius:999px;padding:.05rem .45rem}
.journey .jmore{margin-top:.5rem;border:0;background:none;color:var(--point-ink);font-weight:800;font-size:.8125rem;cursor:pointer;padding:.25rem 0}
.journey ol.jst{list-style:none;margin:0;padding:0;counter-reset:js}
.journey ol.jst>li{position:relative;padding:.625rem 0 .625rem 2.125rem;border-top:1px solid var(--line)}
.journey ol.jst>li:first-child{border-top:0}
.journey ol.jst>li::before{counter-increment:js;content:counter(js);position:absolute;left:0;top:.75rem;width:1.5rem;height:1.5rem;border-radius:50%;background:var(--line);color:var(--ink);font-size:.75rem;font-weight:800;display:flex;align-items:center;justify-content:center}
.journey ol.jst>li>b{display:block;font-size:.9375rem;margin-bottom:.25rem}
.journey ul.ji{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}
.journey ul.ji li{display:flex;flex-wrap:wrap;gap:.25rem .5rem;align-items:baseline;font-size:.9063rem;line-height:1.5}
.journey ul.ji li[hidden]{display:none}
.journey .jm{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-width:4.25rem;padding:.0625rem .5rem;border-radius:999px;font-size:.75rem;font-weight:800;line-height:1.5;white-space:nowrap}
.journey .jm.ok{background:var(--ok-fill);color:var(--on-ok)}.journey .jm.q{background:var(--p-color-tone-soon-tint);color:var(--warn-ink);box-shadow:inset 0 0 0 1px var(--p-color-tone-soon-mid)}.journey .jm.i{background:var(--sunken);color:var(--ink2)}
.journey ul.ji>li{display:grid;grid-template-columns:auto 1fr;column-gap:.625rem;row-gap:.125rem;align-items:baseline;padding:.375rem 0;border-top:1px dashed var(--line)}
.journey ul.ji>li:first-child{border-top:0}
.journey ul.ji>li>.jq{font-weight:700;color:var(--ink)}.journey ul.ji>li>.ja{grid-column:2;color:var(--ink2);font-size:.875rem}
.journey ul.ji>li>.jtips,.journey ul.ji>li>.jc,.journey ul.ji>li>.jin,.journey ul.ji>li>ul{grid-column:2}
.journey .jq .jk{margin-left:.375rem;vertical-align:.0625rem}
.journey .jgo{display:inline-flex;align-items:center;min-height:1.75rem;color:var(--point-ink);font-weight:700;text-decoration:none}.journey .jgo:hover{text-decoration:underline}
.journey ol.jst>li>b .jsh{margin-left:.5rem;font-size:.8125rem;font-weight:600;color:var(--ink3)}
@media(max-width:640px){.journey ol.jst>li>b .jsh{display:none}}
.journey .jc{color:var(--ink3);font-size:.8438rem}
.journey .jk{font-size:.6875rem;font-weight:800;color:var(--ink3);border:1px solid var(--line);border-radius:999px;padding:0 .375rem}
.journey .jsum{margin:.75rem 0 0;font-size:.8438rem;color:var(--ink3)}
.journey .jline{position:relative;margin:.375rem 0 0;padding-left:.875rem;font-size:.875rem;color:var(--ink)}.journey .jline::before{content:"";position:absolute;left:0;top:.6em;width:.375rem;height:.375rem;border-radius:50%;background:var(--point)}
.vsrc{display:inline-block;margin:.5rem .75rem 0 0;font-size:.75rem;color:var(--ink3)}
.vsplit{font-size:.75rem;font-weight:800;padding:.125rem .5rem;border-radius:999px;background:color-mix(in srgb,var(--point) 15%,transparent);color:var(--point-deep)}
.vcard.sched{margin-top:.75rem}
.vtw{overflow-x:auto;-webkit-overflow-scrolling:touch}
.vtab{width:100%;border-collapse:collapse;font-size:.875rem}
.vtab th{text-align:left;font-size:.75rem;color:var(--ink3);font-weight:800;padding:.375rem .5rem;border-bottom:1px solid var(--line)}
.vtab td{padding:.5rem;border-bottom:1px solid var(--line);vertical-align:top}
.vtab td.d{white-space:nowrap;font-weight:700}.vtab td.t{white-space:nowrap;color:var(--ink3)}
.vtab .pl{display:inline-block;padding:.0625rem .5rem;border-radius:.375rem;font-size:.8125rem;font-weight:700}
.pl.p0{background:#e6f0ff;color:#1e4fb5}.pl.p1{background:#e8f7ee;color:#1d7a46}.pl.p2{background:#fff1e0;color:#a85a00}.pl.p3{background:#f6e8ff;color:#7a2fb5}.pl.p4{background:#ffe8ec;color:#b42a45}.pl.p5{background:#e8f6f7;color:#1b7078}
@media(max-width:600px){.vtab thead{display:none}.vtab,.vtab tbody,.vtab tr,.vtab td{display:block;width:auto}.vtab tr{padding:.5rem 0;border-bottom:1px solid var(--line)}.vtab td{border:0;padding:.125rem 0}.vtab td.d,.vtab td.t{display:inline-block;margin-right:.5rem}.vtab td.t:empty{display:none}}
.glance{margin:0 0 1rem;padding:1rem 1.125rem;border-radius:1rem;background:var(--surface);box-shadow:var(--shadow-card)}
.glance .ch{font-size:.75rem;font-weight:800;letter-spacing:.06em;color:var(--point-deep);margin-bottom:.375rem}
.glance ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr;gap:0}
@media(min-width:760px){.glance ul{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1.5rem}}
.glance li{display:grid;grid-template-columns:4.25rem 1fr;gap:.5rem;align-items:baseline;padding:.5rem 0;border-top:1px solid var(--line);min-width:0}
.glance li b{font-size:.8125rem;color:var(--ink3);font-weight:700}
.glance li a,.glance li span{font-size:.9375rem;line-height:1.45;color:var(--ink);min-width:0;overflow-wrap:anywhere}
.glance li a{text-decoration:none;border-bottom:1px dashed color-mix(in srgb,var(--point) 45%,transparent)}
.dnav{position:sticky;top:0;z-index:20;display:flex;gap:.375rem;overflow-x:auto;scrollbar-width:none;padding:.5rem 0;margin:0 0 1rem;background:var(--bg,#fff);border-bottom:1px solid var(--line)}
.dnav::-webkit-scrollbar{display:none}
.dnav a{flex:0 0 auto;font-size:.875rem;font-weight:700;padding:.4rem .85rem;border-radius:999px;background:var(--sunken);color:var(--ink2);text-decoration:none;white-space:nowrap}
.dnav a.on{background:var(--point);color:#fff}
main .sec,main details.sec,.wx{scroll-margin-top:3.75rem}
.morebtn{margin:.5rem 0 0;border:0;background:var(--sunken);color:var(--ink2);font-weight:700;font-size:.8125rem;padding:.45rem .9rem;border-radius:999px;cursor:pointer}
.totop{position:fixed;right:1rem;bottom:1rem;z-index:30;width:2.75rem;height:2.75rem;border-radius:50%;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;text-decoration:none;opacity:0;pointer-events:none;transition:opacity .2s;box-shadow:0 6px 18px rgb(0 0 0 / .2)}
.totop.show{opacity:.85;pointer-events:auto}
.pyear{position:absolute;left:.5rem;bottom:.5rem;z-index:2;background:rgb(20 18 16 / .78);color:#fff;font-size:.75rem;font-weight:700;padding:.2rem .6rem;border-radius:999px;letter-spacing:.01em}
.crumb{padding:0 0 .75rem}
.fb{display:flex;gap:.5rem;margin:.375rem 0 .25rem}
.fb button{appearance:none;border:0;background:var(--sunken);color:var(--ink2);border-radius:999px;padding:.35rem .75rem;font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;min-height:36px}
.fb button:active{transform:scale(.97)}
.fbthanks{font-size:.8125rem;color:var(--ok)}
button.btn{cursor:pointer;font-family:inherit}
.dhead{display:grid;grid-template-columns:1fr;gap:1.5rem;align-items:start;margin-bottom:1rem}
@media(min-width:64rem){.dhead{grid-template-columns:7fr 5fr;gap:3rem}}
.dhead>div:first-child{background:transparent;border:0;padding:0}
.dhead>div:first-child::before{content:"";display:block;width:1.5rem;height:2px;background:var(--point);margin-bottom:.875rem}
.dhead h1{font-size:clamp(1.75rem,1.2rem + 2.4vw,2.625rem);line-height:1.28;letter-spacing:-.025em;margin:.25rem 0 .75rem;font-weight:700;text-wrap:balance}
.dhead .lead{color:var(--ink2);margin:0 0 .875rem;font-size:1.0625rem}
.band{position:relative;aspect-ratio:21/9;overflow:hidden;background:var(--sunken);border:0;border-radius:24px;margin:1rem 0;box-shadow:var(--shadow-card)}
.band img{width:100%;height:100%;object-fit:cover;display:block}
.band .ph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:3rem;font-weight:800;color:var(--ink3)}
.posterrow{display:grid;grid-template-columns:1fr;gap:1rem;margin:1rem 0}
@media(min-width:640px){.posterrow{grid-template-columns:minmax(220px,300px) 1fr}}
.posterrow .poster{aspect-ratio:1/1.414;overflow:hidden;background:var(--sunken);border:0;border-radius:16px;box-shadow:var(--shadow-card)}
.posterrow .poster img{width:100%;height:100%;object-fit:contain;display:block}
.posterrow .photo{overflow:hidden;background:var(--sunken);border:0;border-radius:24px;min-height:200px;box-shadow:var(--shadow-card)}
.posterrow .photo img{width:100%;height:100%;object-fit:cover;display:block}
@media(max-width:640px){.posterrow .photo{display:none}}
.facts{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;background:transparent;border:0;margin:0}
.fact{background:var(--surface);border:0;border-radius:12px;padding:.75rem .875rem;box-shadow:var(--shadow-card)}
.fact .k{font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3)}
.fact .v{margin-top:.25rem;font-weight:600;overflow-wrap:anywhere;font-size:.9375rem}
.actions{display:flex;gap:.625rem;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;min-height:48px;padding:0 1.375rem;border-radius:12px;box-shadow:inset 0 0 0 1px var(--ink);background:var(--surface);font-size:.9375rem;font-weight:600;color:var(--ink);transition:transform .13s var(--ease)}
.btn:active{transform:scale(.97)}
.btn.primary{background:var(--point-deep);color:#fff;box-shadow:none}
.btn.primary:active{background:var(--point-press)}
.notice{background:var(--ink);color:#fff;border:0;border-radius:12px;padding:.75rem 1rem;font-size:.9375rem;margin:.875rem 0}
.notice.end{background:var(--sunken);color:var(--ink2)}
.alert{background:#fde8e2;border:0;border-radius:12px;padding:.75rem 1rem;margin:.625rem 0;font-size:.9375rem}
.alert .d{font-size:.6875rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#a8321f;margin-right:.625rem}
.alert a{color:#a8321f;font-weight:600;text-decoration:underline}
.two{display:grid;grid-template-columns:1fr;gap:1.5rem;align-items:start}
@media(min-width:64rem){.two{grid-template-columns:1fr 20rem;gap:3rem}}
.desc{font-size:1.0625rem;line-height:1.75;margin:0 0 .5rem;color:var(--ink);max-width:40rem}
.side{background:var(--surface);border:0;border-radius:16px;padding:1.125rem 1.25rem;font-size:.875rem;color:var(--ink2);position:sticky;top:1rem;box-shadow:var(--shadow-card)}
.side .k{font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);margin:.75rem 0 .25rem}
.side .k:first-child{margin-top:0}
.side a{color:var(--ink);font-weight:500}
.gsec{display:grid;grid-template-columns:1fr;gap:.375rem;padding:1rem 1.125rem;background:var(--surface);border:0;border-radius:12px;margin:.5rem 0;box-shadow:var(--shadow-card)}
@media(min-width:640px){.gsec{grid-template-columns:7rem 1fr;gap:1rem}}
.gsec .no{font-size:.75rem;font-weight:800;color:var(--point-ink);font-variant-numeric:tabular-nums}
.gsec .no b{display:block;font-size:1rem;color:var(--ink);margin-top:.125rem;font-weight:700}
.gsec p{margin:0;font-size:.9375rem;line-height:1.7}
.ev{font-size:.75rem;color:var(--ink3);margin-top:.5rem}
.ev a{color:var(--ink2);text-decoration:underline}
.evlist{display:grid;grid-template-columns:1fr;gap:.5rem;margin:.375rem 0;padding:0}
@media(min-width:640px){.evlist{grid-template-columns:repeat(2,1fr)}}
.evlist li{list-style:none;background:var(--surface);border:0;border-radius:12px;padding:.75rem .875rem;font-size:.9375rem;box-shadow:var(--shadow-card)}
.evlist li a{text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}
ul.program{columns:2;column-gap:1.75rem;padding-left:1.1em;margin:.5rem 0;font-size:.9375rem;color:var(--ink2)}
ul.program li{break-inside:avoid;margin:.2em 0}
.pickpage .item{display:grid;grid-template-columns:2.75rem 1fr;gap:1rem;padding:1rem 1.125rem;background:var(--surface);border:0;border-radius:16px;margin:.625rem 0;align-items:start;box-shadow:var(--shadow-card)}
@media(min-width:760px){.pickpage .item{grid-template-columns:3.5rem 1fr 13rem}}
.pickpage .item .rk{font-size:2rem;font-weight:800;color:var(--point-ink);line-height:1;font-variant-numeric:tabular-nums}
.pickpage .item .rk.dt{font-size:1rem;white-space:nowrap}
.pickpage .item h3{font-size:1.25rem;margin:.25rem 0 .375rem;font-weight:700}
.pickpage .item p{margin:0;color:var(--ink2);font-size:.9375rem}
.pickpage .item .media{aspect-ratio:1/1.414;overflow:hidden;background:var(--sunken);border-radius:12px;display:block}
@media(max-width:760px){.pickpage .item .media{grid-column:2}}
.pickpage .item .media img{width:100%;height:100%;object-fit:contain;display:block}
@media(max-width:640px){ul.program{columns:1}.facts{grid-template-columns:1fr}.dhead h1{font-size:1.75rem}}

.hhead{font-size:clamp(1.625rem,1.1rem + 1.8vw,2.375rem);line-height:1.3;letter-spacing:-.025em;font-weight:700;margin:.25rem 0 .5rem;white-space:nowrap}
.hlead{margin:0 0 1.5rem}
.hhead::before{content:"";display:block;width:1.5rem;height:2px;background:var(--point);margin-bottom:.875rem}
.hhead em{font-style:normal;color:var(--point-ink);font-weight:800;font-variant-numeric:tabular-nums}
.hero-swap>div:first-child{justify-content:flex-start}
@media(max-width:64rem){.hhead{white-space:normal;text-wrap:balance}}
.hero-swap>div:first-child::before{display:none}
.hero-swap{align-items:stretch}
.hhead,.hlead{text-align:center}@media(min-width:1024px){.hsub{display:flex;justify-content:center;align-items:baseline;gap:.625rem;margin:.75rem 0 1.25rem}.hsub .hpre,.hsub .hslogan{margin:0}}.hpre{text-align:center;margin:.75rem 0 0;font-size:var(--fs-body);font-weight:500;line-height:1.4;color:var(--ink2)}.hslogan{text-align:center;margin:.125rem 0 1.25rem;font-size:var(--fs-h3);font-weight:800;line-height:1.3;letter-spacing:-.01em;color:var(--point-ink)}.match .scope .visitc{display:none}
.hhead::before{margin-left:auto;margin-right:auto}
@media(min-width:64rem){.hero-swap>div:first-child{display:flex;flex-direction:column}.hero-swap .match{flex:1;justify-content:space-between;gap:.5rem}}
.mhead{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:1.25rem;row-gap:.25rem}
.mhead h1{margin:0}
.mhead .lead{margin:0}
.match{display:flex;flex-direction:column;gap:.875rem;margin:0;padding:1.125rem 1.25rem 1.25rem;background:var(--surface);border-radius:16px;box-shadow:var(--shadow-card)}
.match .grp,html body .match .grp{margin:0}
.match .grp{position:relative;display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding-left:3rem;min-height:40px}
.match .grp .gl{position:absolute;left:0;top:0;height:40px;display:inline-flex;align-items:center;width:3rem;font-size:.8125rem;font-weight:700;color:var(--ink3);letter-spacing:.02em}
.match .need,.match .sel{min-height:40px;padding:0 .9rem;border-radius:999px;font-size:.875rem;font-weight:600;color:var(--ink2);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);display:inline-flex;align-items:center;cursor:pointer;transition:background .13s var(--ease),color .13s var(--ease),box-shadow .13s var(--ease)}
.match .need:hover,.match .sel:hover{box-shadow:inset 0 0 0 1px var(--field)}
.match .need:has(input:checked){background:var(--ink);color:#fff;box-shadow:none}
.match .sel{position:relative;min-width:11.5rem;padding:0 3rem 0 1.5rem;border-radius:999px;background:var(--sunken);box-shadow:none;color:var(--ink);font-weight:700}
.match .sel:hover{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line),var(--shadow-card)}
.match .sel::after{content:"";position:absolute;right:.4rem;top:50%;width:28px;height:28px;border-radius:50%;background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%232b2723' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/14px no-repeat;box-shadow:0 1px 2px rgba(43,39,35,.12);transform:translateY(-50%);pointer-events:none}
.match .sel select{appearance:none;-webkit-appearance:none;border:0;background:transparent;font:inherit;color:inherit;padding:0 0 0 .25rem;margin:0;text-indent:0;min-height:0;width:100%;box-shadow:none;cursor:pointer;outline:0;text-overflow:ellipsis}
.match .sel:focus-within{outline:2px solid var(--ink);outline-offset:2px}
@media(max-width:640px){.match .sel{min-width:0;width:100%}}
.match .act{margin-top:.25rem;padding-top:1rem;border-top:1px solid var(--line);min-height:0}
.match .act .gl{display:none}
.match .act{padding-left:0;justify-content:center}
.match .act .row1{justify-content:center}
#matchn:empty{display:none}
.mmore{justify-content:center;margin-top:1.25rem}
.mmore .mbtn{appearance:none;border:0;cursor:pointer;font:inherit;min-height:48px;display:inline-flex;align-items:center;padding:0 1.375rem;border-radius:12px;box-shadow:inset 0 0 0 1px var(--ink);background:var(--surface);color:var(--ink);font-size:.9375rem;font-weight:600}
.match .row1{display:flex;gap:.875rem;flex-wrap:wrap;align-items:center;width:100%}
.match .mbtn{appearance:none;border:0;cursor:pointer;font:inherit;min-height:48px;display:inline-flex;align-items:center;padding:0 1.375rem;border-radius:12px;box-shadow:inset 0 0 0 1px var(--ink);background:var(--surface);color:var(--ink);font-size:.9375rem;font-weight:600;transition:transform .13s var(--ease)}
.match .mbtn:active{transform:scale(.97)}
.match .mbtn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
@media(max-width:640px){.match{padding:1rem}.match .grp{padding-left:2.75rem}.match .grp .gl{width:2.75rem}.match .act{padding-left:0}.match .mbtn{width:100%;justify-content:center}}
.grp{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.grp .gl{font-size:.75rem;font-weight:700;color:var(--ink3);width:2.25rem}
.needs{display:flex;flex-wrap:wrap;gap:.5rem}
.need{background:var(--surface);box-shadow:0 1px 2px rgb(43 39 35 / .06);border-radius:999px;padding:.4rem .8rem;font-size:.8125rem;font-weight:600;cursor:pointer;min-height:36px;display:inline-flex;align-items:center;color:var(--ink2)}
.need:has(input:checked){background:var(--ink);color:#fff}
.need:focus-within{outline:2px solid var(--ink);outline-offset:2px}
.need input{appearance:none;width:1px;height:1px;margin:0;opacity:0;position:absolute}
.need{position:relative}
.mrow .ok{font-size:.75rem;color:var(--ok)}.mrow .miss{font-size:.75rem;color:var(--danger)}.mrow .rate{font-size:.75rem;font-weight:800;color:var(--point-deep);margin-left:.5rem}
.drop1{margin:.75rem 0;display:flex;flex-wrap:wrap;gap:.5rem}.drop1 button{font:inherit;font-size:.8125rem;border:0;background:var(--sunken);border-radius:999px;padding:.4rem .8rem;cursor:pointer}
.need input{accent-color:var(--point-deep);margin:0 .25rem 0 0}
.mrow{display:grid;grid-template-columns:3.5rem 1fr auto;gap:1rem;align-items:center;padding:.875rem 0;border-bottom:1px solid var(--line)}
.mrow .pos{font-size:1.5rem;font-weight:800;color:var(--point-ink);font-variant-numeric:tabular-nums}
.mrow .t{font-weight:700;font-size:1.0625rem}.mrow .m{font-size:.875rem;color:var(--ink2);margin-top:.125rem}
.mrow .why{font-size:.8125rem;color:var(--ink3);margin-top:.25rem}
.mrow img{width:3.25rem;height:4.6rem;object-fit:contain;background:var(--sunken);border-radius:8px}
.board{display:flex;flex-direction:column;gap:.625rem}
.bcol{display:grid;grid-template-columns:1fr;gap:.5rem;background:var(--tone-tint);border-radius:16px;padding:.625rem .75rem;min-width:0;align-items:center}
@media(min-width:480px){.bcol{grid-template-columns:6.5rem 1fr 1fr}}
@media(max-width:479px){.bcol{grid-template-columns:1fr 1fr;gap:.375rem}.bh{grid-column:1/3;flex-direction:row;align-items:baseline;gap:.5rem}.bcard{grid-template-columns:2.25rem 1fr;padding:.375rem .5rem;gap:.375rem}.bcard img,.bcard .ph{width:2.25rem;height:3.2rem}.bcard .t{font-size:.8125rem}.bcard .m,.bcard .why{font-size:.6875rem}}
.bh{display:flex;flex-direction:column;gap:.1rem;padding:.25rem .25rem;border:0}
.bh b{font-size:1rem;font-weight:800;letter-spacing:-.02em;color:var(--tone)}.bh .mono{font-size:.6875rem;color:var(--ink3);line-height:1.3}
.bcard{display:grid;grid-template-columns:2.75rem 1fr;gap:.5rem;align-items:center;background:var(--surface);border-radius:12px;padding:.5rem .625rem;box-shadow:var(--shadow-card);min-width:0;transition:transform .13s var(--ease)}
.bcard:active{transform:scale(.985)}
.bh .bk{display:inline-block;margin-left:.4rem;padding:.05rem .4rem;border-radius:999px;font-size:.625rem;font-weight:800;letter-spacing:.02em;vertical-align:middle;background:var(--ink);color:var(--paper)}
.bcol[data-kind="campaign"]{background:var(--ad-surface,var(--sunken))}.bcol .ad-board{grid-column:1/-1;margin:0}.bcol .ad-board .ad-card{margin:0}
@media(min-width:480px){.bcol[data-kind="poll"] .bh,.bcol[data-kind="intake"] .bh{grid-row:1/3}}   /* 보기 3~4개는 머리 옆 2×2 */
.bcol .bvote{font:inherit;text-align:left;border:0;cursor:pointer;color:inherit}.bcol .bvote.on{outline:2px solid var(--point);outline-offset:-2px}.bcol .bvote[disabled]:not(.on){opacity:.55;cursor:default}
.bcard img,.bcard .ph{width:2.75rem;height:3.9rem;object-fit:contain;background:var(--sunken);border-radius:8px;display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--ink3)}
.bcard .tx{min-width:0;display:flex;flex-direction:column;gap:.1rem}
.bcard .t{font-weight:700;font-size:.9375rem;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bcard .m{font-size:.75rem;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bcard .why{font-size:.75rem;color:var(--tone);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(min-width:64rem){.hero-swap{grid-template-columns:5fr 7fr}.hero-swap>div:first-child{order:1}.hero-swap>div:last-child{order:2}}
.entries{display:grid;grid-template-columns:1fr;gap:1rem}
@media(min-width:640px){.entries{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem}}@media(min-width:1024px){.entries{grid-template-columns:repeat(5,minmax(0,1fr));gap:1rem}}
.entry{display:block;background:var(--tone-tint);border-radius:16px;padding:1.125rem 1.125rem 1rem;box-shadow:var(--shadow-card);transition:transform .13s var(--ease);min-width:0}
.entry .eh,.entry ol a{display:block;color:inherit;text-decoration:none}
.entry .eh:active,.entry ol a:active{opacity:.7}
.entry .mono{color:var(--tone);font-weight:600}
.entry h3{font-size:1.25rem;margin:.25rem 0 .5rem;font-weight:800;letter-spacing:-.02em}
.entry h3 .n{font-size:.875rem;color:var(--tone);font-weight:700;margin-left:.25rem}
.entry ol{list-style:none;margin:0;padding:0}
.entry ol li{border-top:1px solid rgba(43,39,35,.08);font-size:.875rem}
.entry ol li a{display:grid;grid-template-columns:1.5rem 1fr;gap:.375rem;padding:.375rem .25rem;margin:0 -.25rem;min-height:2.75rem;align-items:baseline;border-radius:8px}
@media(hover:hover){.entry ol li a:hover{background:color-mix(in srgb,var(--tone) 6%,var(--surface))}.entry ol li a:hover b{text-decoration:underline}.entry .eh:hover h3,.entry .more:hover{text-decoration:underline}}
.entry ol li .rk{font-weight:800;color:var(--tone);font-variant-numeric:tabular-nums}
.entry ol li .why{display:block;font-size:.75rem;color:var(--ink3)}
.entry .more{display:block;text-align:center;margin-top:.5rem;font-size:.8125rem;font-weight:700;color:var(--tone)}   /* 가운데 정렬·글자 축소(회장 2026-09-29) */
.namecard{display:flex;align-items:center;justify-content:center;text-align:center;background:linear-gradient(160deg,var(--tone-tint,#f3f0ea),var(--sunken));color:var(--tone,#2b2723);padding:.5rem;word-break:keep-all;overflow-wrap:anywhere}
.namecard span{font-weight:800;letter-spacing:-.02em;line-height:1.25;font-size:1rem;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.card .media.namecard{aspect-ratio:auto;height:calc(var(--pw) * 1.414)}
.feature .media.namecard span{font-size:clamp(1.25rem,2.5vw,2rem);-webkit-line-clamp:5}
.bcard .ph.namecard span{font-size:.5625rem;-webkit-line-clamp:3;line-height:1.2}
.crow .ph.namecard span,.mrow .namecard span{font-size:.5625rem;-webkit-line-clamp:3;line-height:1.2}
.crow .ph.initial{background:linear-gradient(160deg,var(--tone-tint,#f3f0ea),var(--sunken));color:var(--tone,#2b2723)}
.crow .ph.initial span{font-size:1.75rem;font-weight:800;line-height:1;letter-spacing:-.02em}
.mrow .namecard{width:3.25rem;height:4.6rem;border-radius:8px}
.posterrow .poster.namecard span{font-size:clamp(1.25rem,2.4vw,1.75rem);-webkit-line-clamp:5}
.pickpage .item .media.namecard span{font-size:.9375rem;-webkit-line-clamp:4}
/* 포스터 없음 = 포스터 크기 칸 + 첫 글자(전 페이지 공통) */
.namecard.initial span{display:block;font-weight:800;line-height:1;letter-spacing:-.02em;-webkit-line-clamp:unset;overflow:visible;font-size:clamp(2.5rem,6vw,4.5rem)}
.dtop .poster .namecard.initial span{font-size:clamp(4rem,9vw,6.5rem)}
.namecard.typo{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;text-align:left;gap:.375rem;padding:1rem .875rem .875rem;
 background:linear-gradient(165deg,hsl(var(--th) 70% 93%) 0%,hsl(var(--th) 62% 84%) 58%,hsl(var(--th) 55% 74%) 100%);color:hsl(var(--th) 45% 20%)}
.namecard.typo::before{content:"";position:absolute;right:-22%;top:-12%;width:78%;aspect-ratio:1;border-radius:50%;background:hsl(var(--th) 80% 97% / .55)}
.namecard.typo::after{content:"";position:absolute;left:.875rem;right:.875rem;top:.875rem;height:3px;border-radius:2px;background:hsl(var(--th) 55% 45% / .55)}
.namecard.typo span,.namecard.typo b{position:relative;display:block;-webkit-line-clamp:unset;overflow:visible}
.namecard.typo .tp-k{font-size:.75rem;font-weight:700;letter-spacing:.04em;opacity:.8;margin-bottom:auto;padding-top:.5rem}
.namecard.typo .tp-n{font-size:clamp(1.125rem,2.1vw,1.5rem);font-weight:800;line-height:1.25;letter-spacing:-.02em;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;word-break:keep-all}
.namecard.typo .tp-d{font-size:.8125rem;font-weight:600;opacity:.85}
.namecard.typo .tp-m{font-size:.75rem;font-weight:800;letter-spacing:.06em;opacity:.55}
.feature .media.namecard.initial span{font-size:clamp(3.5rem,7vw,5.5rem)}
.pickpage .item .media.namecard.initial{display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,var(--tone-tint,#f3f0ea),var(--sunken))}
.pickpage .item .media.namecard.initial span{font-size:2.5rem}
.bcard .ph.namecard.initial span,.mrow .namecard.initial span,.crow .ph.namecard.initial span{font-size:1.625rem}
.crow .ph.namecard.initial{display:flex}
/* ---- 카드 타이포 체계(모든 페이지 공통, 뒤에 두어 우선) ----
   제목 1.0625/700 ink · 메타 .8125/500 ink3 · 순위 .8125/800 point · 이유 .875/500 ink2 · 항목 라벨 .6875/700 ink3 · 항목 값 .8125/400 ink2
   이벤트 제목 .8125/600 ink · 이벤트 부제 .75/400 ink3 · 불릿은 6px 점(tone) 하나만 · 태그 .75/600 */
.card .t{font-size:1.0625rem;font-weight:700;color:var(--ink);letter-spacing:-.015em;line-height:1.35}.info>a.t{display:inline-block;padding:.25rem 0;margin:-.25rem 0}
.card .meta{font-size:.8125rem;font-weight:500;color:var(--ink3)}
.card .meta .mono{font-size:.8125rem;font-weight:500;color:var(--ink3);letter-spacing:0;text-transform:none}
.card .meta .pos{font-size:.8125rem;font-weight:800;color:var(--point-ink);margin-right:.25rem}
.card .dday{font-size:.75rem;font-weight:700;color:var(--point-ink)}
.card .sub{font-size:.8125rem;font-weight:500;color:var(--ink3);gap:.5rem}
.card .why{font-size:.875rem;font-weight:500;color:var(--ink2);line-height:1.5;margin-top:.25rem}
.rankcard .why{font-size:.875rem;font-weight:500;color:var(--ink2)}
.card .facts dt{font-size:.6875rem;font-weight:700;letter-spacing:.04em;color:var(--ink3);text-transform:uppercase}
.card .facts dd{font-size:.8125rem;font-weight:400;color:var(--ink2);line-height:1.45}
.card .evbox .h{font-size:.75rem;font-weight:700;color:var(--tone);letter-spacing:0;text-transform:none}
.card .evbox .h a{font-size:.75rem;font-weight:600;color:var(--ink3)}
.card .evbox li a,.card .evbox li .row{font-size:.8125rem;line-height:1.45;padding:.25rem .375rem}
.card .evbox li b{font-size:.8125rem;font-weight:600;color:var(--ink)}
.card .evbox li span.s{font-size:.75rem;font-weight:400;color:var(--ink3);margin-top:.05rem}
.card .evbox li a.more-ev{font-size:.75rem;font-weight:700;color:var(--tone)}
.card .evbox li .dot{width:6px;height:6px;background:var(--tone)}
.card .tag{font-size:.75rem;font-weight:600}
.card .tag.live{font-weight:700}
.rankcard .why{font-size:.8125rem;color:var(--ink2);margin-top:.125rem}
/* ---- 메뉴 목록 밀도(회장 2026-10-14 「같은 내용, 포스터·레이아웃을 줄여 밀도 있게」) — 데스크톱(641px↑)만. 모바일(≤640)은 허브 mobile_d.css 한 줄 목록 그대로.
   포스터 9.5rem → 6rem(비율 유지 · 무잘림 원칙) · 본문 최소 높이(포스터 높이 강제) 해제 · 이벤트 줄은 제목+보조 한 줄 · 64rem↑ 3열. 색은 토큰만. 내용은 그대로. */
@media(min-width:641px){
.mrows .grid{gap:.75rem 1rem;grid-auto-rows:1fr}   /* 모든 줄 같은 높이 — 제목 2줄·꼬리표 있는 카드가 섞여도 목록 카드 높이 통일(회장 2026-10-15) */
.mrows .grid .rankcard{--pw:6rem;gap:.625rem;align-items:start}
.mrows .grid .rankcard .media,.mrows .grid .rankcard .ph,.mrows .grid .rankcard .media.namecard,.mrows .grid .rankcard>.namecard,.mrows .grid .rankcard .media-link>.namecard{width:var(--pw);height:calc(var(--pw) * 1.414);border-radius:var(--r-sm)}
.mrows .grid .rankcard .body{min-height:0;padding:.625rem .75rem;gap:.375rem;border-radius:var(--r-md)}
.mrows .grid .rankcard .info{gap:.125rem}
.mrows .grid .rankcard .t{font-size:var(--fs-small);line-height:1.3}
.mrows .grid .rankcard .meta,.mrows .grid .rankcard .meta .mono,.mrows .grid .rankcard .meta .pos,.mrows .grid .rankcard .sub,.mrows .grid .rankcard .dday{font-size:.75rem}
.mrows .grid .rankcard .why{font-size:.75rem;line-height:1.4;margin-top:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.mrows .grid .rankcard .why{min-height:2.8em}.mrows .grid .rankcard .body{align-self:stretch}.mrows .grid .rankcard .evbox{margin-top:auto}.rankcard .evbox li.pad{visibility:hidden}   /* 이유 2줄·미리보기 3줄 자리를 늘 잡아 목록 카드 높이를 같게(회장 2026-10-15) */
.mrows .grid .rankcard .facts{margin:.25rem 0 0;padding:.25rem 0 0;gap:0}
.mrows .grid .rankcard .facts div{padding:.0625rem 0;border-bottom:0}
.mrows .grid .rankcard .facts dd{font-size:.75rem;line-height:1.35}
.mrows .grid .rankcard .evbox{padding:.375rem .5rem;border-radius:var(--r-sm)}
.mrows .grid .rankcard .evbox .h,.mrows .grid .rankcard .evbox .h a{font-size:.6875rem;margin-bottom:0}
.mrows .grid .rankcard .evbox ul{gap:0}
.mrows .grid .rankcard .evbox li a,.mrows .grid .rankcard .evbox li .row{display:flex;gap:.375rem;align-items:baseline;padding:.1875rem .25rem;font-size:.75rem;line-height:1.35;min-width:0;min-height:30px}   /* 기본 .row 의 44px 탭 높이(모바일 기준)를 마우스 화면에서는 30px 로 — 한 줄 */
.mrows .grid .rankcard .evbox li b,.mrows .grid .rankcard .evbox li .row b{flex:1 1 auto;min-width:0;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.75rem}
.mrows .grid .rankcard .evbox li span.s,.mrows .grid .rankcard .evbox li .row .s{flex:0 0 auto;max-width:45%;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.6875rem;margin-top:0}
.mrows .grid .rankcard .evbox li+li .row{border-top:0}
.mrows .grid .rankcard .evbox li .dot{display:none}
}
@media(min-width:64rem){.mrows .grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
/* gofesta 디자인 체계 v1 (2026-09-28 · 회장 지시: 저시력자 글자 크기 · 애플 수석디자이너 관점의 일관성 · 내용·구성은 불변)
   모든 페이지 CSS 뒤에 붙어 표현만 덮어쓴다. 원칙: 글자 최소 13px · 본문 17px · 버튼 3등급(채움·연한 채움·텍스트)만 · 테두리 버튼 없음
   · 모서리 토큰 3단(10/14/20) · 그림자 1종 · 강조색 1개 · 8px 격자 · 브라우저 기본 폼 스타일 제거. */

/* ---- 토큰: 허브 site/design_tokens.css 가 정본(hub-a-2026-10-07) ---- */
body{background:var(--surface)}
.nav{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.match .sel,.match .need,.fb button,.tag.end{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.match{background:var(--surface)}
.mapbox path,.wmap path{fill:var(--map-land);stroke:var(--surface)}   /* 지도 면은 토큰과 무관하게 연회색 고정 — 흰 배경 전환으로 지도가 사라졌던 문제(2026-09-29) */
.mapbox path:hover{fill:var(--map-land-hover)}.wmap path.has{fill:#a3b889}.wmap path.has:hover{fill:#46602f}
.mapbox path[aria-pressed="true"],.wmap path[aria-pressed="true"]{fill:var(--point);stroke:var(--point-deep)}
.coverrow .visitc{font-size:var(--fs-body);font-weight:400;color:var(--ink3)}
.coverrow .cover b,.coverrow .visitc b{color:var(--point-deep);font-weight:800;font-variant-numeric:tabular-nums}
.top,.secnav{background:var(--surface)}
.searchbar{background:var(--surface);border-bottom:1px solid var(--line)}

html{font-size:17px}
body{line-height:1.6}

/* ---- 글자 위계: 12px 이하 금지 · 캡션은 13px ---- */
.mono,.hint,.card .sub,.card .facts dt,.card .facts dd,.rb .src,.tag,.tile .l,.tile .ch .hint,.tiles .ch .hint,.check .stat,.stat .mono,.fh-meta,
.fh-line .vdate,.owner .mono,.side .k,.side .v,.intro .ch,.check .ch,.sessions .ch,.corner li span,.evbox li span.s,.evbox .h,.dday,.stat .mono,
.pick .mono,.pick ol li .why,.pick ol li .rk,.row .m,.crow .m,.sres .m,.sfilter button,.index button .n,.adlabel,.adnote,.litenote,.fact .k,.gsec .no,.ev,
.entry .mono,.rankcard .why,.mapbox text,.cal .day .n,.pager .info,.month,.stat .mono,.fb button,.fbthanks,.cform label .opt,.cform .agree,.cmsg,.wintro li,.wprep,
.visitc,.search .mono,.card .litenote,.row .d::before,.alert .d,.grp .gl,.mrow .ok,.mrow .miss,.mrow .rate,.bcard .m,.bcard .why,.bh .mono,.entry ol li .why,.card .dday,.card .evbox .h,.card .evbox .h a,.card .evbox li span.s,.card .evbox li a.more-ev,.card .tag,.rows li .kd,.lk a,.ext,.wsel,.crow .tg .mono{font-size:var(--fs-caption)}
.card .t,.rankcard .t,.row .t,.crow .t,.sres .t,.evbox li b,.pick ol li .nm,.tile b,.corner li b{font-size:var(--fs-body)}
.card .facts dd,.card .facts div,.rb .bd,.rb .hd,.rows li,.main .sec p,.intro p,.check dd,.gsec p,.evlist li,.desc,.lead,.hero .lead,.dhead .lead,.cover,.sessions li,.side{font-size:var(--fs-body)}
.intro p.lead,.main .sec p.lead{font-size:var(--fs-lead)}
.hero h1,.dhead h1,.fh h1{font-size:var(--fs-h1);font-weight:800;letter-spacing:-.03em;line-height:1.2}
.sh h2,.main .sec h2,details.fold summary h2,.corner .ch,.tiles .ch{font-size:var(--fs-h2);letter-spacing:-.02em}
.tiles .ch{font-size:var(--fs-h3);text-transform:none;letter-spacing:-.01em;color:var(--ink)}
.intro .ch,.check .ch,.sessions .ch,.side .k,.fact .k{font-size:var(--fs-caption);letter-spacing:.02em;text-transform:none;font-weight:700;color:var(--ink3)}
.card .facts dt{text-transform:none;letter-spacing:0}
.card .facts dd{font-size:var(--fs-caption)}   /* 회장 2026-09-29: 카드 안 장소·요금·시간·문의 내용은 항목명과 같은 크기 */
.nav a{font-size:var(--fs-small)}
@media(max-width:640px){.nav a{font-size:.75rem}}   /* 하단 5탭은 아이콘 위 라벨 — iOS 탭바 관례(12.75px) */
.aux a{font-size:var(--fs-small)}
.search input{font-size:var(--fs-body)}
.search .qbtn{font-size:var(--fs-small);min-height:40px;padding:0 1rem}

/* ---- 버튼 체계: 채움(주) · 연한 채움(보조) · 텍스트(3순위). 테두리 없음 · 높이 50 · 모서리 14 ---- */
button,input,select,textarea{font:inherit;color:inherit}
button{appearance:none;-webkit-appearance:none;border:0;background:none;padding:0;margin:0;cursor:pointer}
.btn,button.btn,a.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:50px;padding:0 1.25rem;border:0;border-radius:var(--r-md);
  font-size:var(--fs-body);font-weight:700;letter-spacing:-.01em;box-shadow:none;background:var(--soft);color:var(--ink);transition:transform .12s var(--ease),background .12s var(--ease)}
.btn:active{transform:scale(.97);background:var(--soft-press)}
.btn.primary{background:var(--fill);color:var(--on-point)}.btn.primary:active{background:var(--fill-press)}
.btn.share{background:var(--soft);color:var(--ink)}
.btn.share::before{content:"";width:18px;height:18px;flex:0 0 auto;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12v7a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-7'/%3E%3Cpath d='M16 6l-4-4-4 4'/%3E%3Cpath d='M12 2v13'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12v7a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-7'/%3E%3Cpath d='M16 6l-4-4-4 4'/%3E%3Cpath d='M12 2v13'/%3E%3C/svg%3E") center/contain no-repeat}
.actions{gap:.5rem}
@media(max-width:640px){.actions{display:grid;grid-template-columns:1fr 1fr}.actions .btn{padding:0 .625rem;font-size:var(--fs-small);white-space:nowrap}.actions .btn.share::before{display:none}}
.links a,.more,.feature .txt .go,.pick .more,.cform button[type=submit],button.go{min-height:50px;border:0;border-radius:var(--r-md);box-shadow:none;background:var(--soft);color:var(--ink);font-size:var(--fs-body);font-weight:700;padding:0 1.25rem;display:inline-flex;align-items:center;justify-content:center}
.cform button[type=submit],button.go{background:var(--fill);color:var(--on-point)}
.fb button{background:var(--sunken);color:var(--ink2);border-radius:999px;padding:.4rem .9rem;min-height:40px;font-weight:600}
.pager button{border:0;box-shadow:none;background:var(--surface);color:var(--ink2);font-size:var(--fs-small);min-width:46px;height:46px;border-radius:var(--r-sm)}
.pager button[aria-current="page"]{background:var(--ink);color:var(--on-point)}
.index button,.sfilter button{border:0;box-shadow:none;background:var(--surface);color:var(--ink2);font-size:var(--fs-small);min-height:42px;border-radius:999px}
.index button[aria-pressed="true"],.sfilter button[aria-pressed="true"]{background:var(--ink);color:var(--on-point)}
#dchips button{background:transparent;box-shadow:inset 0 0 0 1.5px var(--line)}
#dchips button[aria-pressed="true"]{background:var(--fill);box-shadow:none;color:var(--on-point)}
.cform .kind span{box-shadow:none;background:var(--surface);border:1.5px solid var(--line);min-height:46px;font-size:var(--fs-small)}
.cform .kind input:checked+span{background:var(--ink);border-color:var(--ink);color:var(--on-point)}
.cform input[type=text],.cform input[type=email],.cform input[type=tel],.cform textarea,input[type=password]{border:1.5px solid var(--line);box-shadow:none;border-radius:var(--r-md);min-height:50px;font-size:var(--fs-body)}
.cform input:focus,.cform textarea:focus{border-color:var(--ink);box-shadow:none;outline:0}

/* ---- 태그·배지: 한 모양 ---- */
.tag{font-size:var(--fs-caption);font-weight:700;padding:.25rem .7rem;border-radius:999px;border:0;line-height:1.3}
.tag.live{background:var(--fill);color:var(--on-point)}.tag.ok{background:#e5efe8;color:var(--ok)}.tag.chk{background:#f8edd3;color:#7d5209}.tag.warn{background:#f9e3de;color:#8a2a1a}.tag.end{background:var(--sunken);color:var(--ink3)}
.dday{font-weight:800}

/* ---- 카드·박스: 모서리·그림자 토큰 ---- */
.card .body,.card .media,.card .ph,.intro,.check,.sessions,.tile,details.fold,.corner li a,.side,.owner,.pick,.crow,.sres a,.entry,.feature,.mapbox,.cal,.wintro,.gsec,.evlist li,.fact,.main .sec,.ad-card a,.ad-top a{border-radius:var(--r-lg);box-shadow:var(--shadow-card)}
.card .media,.card .ph,.card .body{border-radius:var(--r-md)}
.tile{border-radius:var(--r-md)}
.corner{border-radius:var(--r-lg)}.corner li a{border-radius:var(--r-sm);box-shadow:none}
.evbox,.check .stat,.notice,.alert,.house,.sharemsg{border-radius:var(--r-sm)}
.tile .n{font-size:var(--fs-caption);min-width:1.75rem;height:1.75rem}
.tile svg{width:26px;height:26px}
.tile{padding:1rem 1rem .875rem;min-height:7.25rem;gap:.2rem}
details.fold summary{padding:1.125rem 0;min-height:60px}
details.fold{padding:0 1.25rem}
.main .sec,.intro,.check{padding:1.25rem 1.375rem}
.fh-line{gap:.75rem}
.fh-line .per{font-size:var(--fs-lead);font-weight:700}
.rows li{padding:.75rem 0}
.rows li .kd{font-size:var(--fs-caption)}

/* ---- 상단 바 ---- */
.brand{font-size:1.625rem}
.nav .home,a.home{width:46px;height:46px}
.nav a{min-height:46px}

/* ---- 저시력: 대비·포커스·터치 ---- */
.mono,.hint,.card .sub,.tile .l,.card .facts dt{color:var(--ink3)}

a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--fill);outline-offset:3px;border-radius:var(--r-sm)}

/* 주제별 박스(회장 2026-09-29 · 참고 g81 「김해를 ○○다」): 5색 면(16px) 위에 항목마다 흰 미니 카드(12px·옅은 그림자) · 제목 앞 상단 메뉴 아이콘 */
.entry{background:var(--tone-tint);border:0;border-radius:16px;padding:1.125rem 1rem 1rem;box-shadow:none}
.entry>.eh>.mono{color:var(--tone);font-weight:600}
.entry>.eh>h3{display:flex;align-items:center;gap:.5rem;margin:.25rem 0 .75rem}
.entry>.eh>h3 svg{width:22px;height:22px;flex:0 0 auto;color:var(--tone)}
.entry ol{display:flex;flex-direction:column;gap:.5rem;padding:0}
.entry ol li{background:var(--surface);border-radius:12px;box-shadow:0 1px 2px rgb(43 39 35 / .04),0 6px 20px rgb(43 39 35 / .05);padding:0;border-top:0}
.entry ol li a{padding:.625rem .75rem;margin:0;border-radius:12px;min-height:2.75rem}
.entry .more{display:flex;justify-content:center;margin:.75rem 0 0;background:transparent;box-shadow:none;padding-left:0;color:var(--tone);font-size:var(--fs-small)}   /* 가운데 정렬·글자 축소(회장 2026-09-29) */   /* 「순위 전체」는 박스 배경색과 같게(회장 2026-09-29) — 항목 카드와 구분은 얇은 선으로 */
/* TOP 10: 머리(주차·제목)는 진한 고급 회색 면 · 「이번 주 가볼 만한 국내」(첫 박스)는 전체를 그 회색으로 */
/* TOP 10(회장 2026-09-29): 타이틀 회색 박스 철회 — 흰 카드 안에 제목만, 강조는 글자로 */
.pick .head .mono{color:var(--tone);font-weight:700}
.pick .more{align-self:center;background:transparent;box-shadow:none;border:0;padding-left:0;padding-right:0;color:var(--point-deep);font-size:var(--fs-small)}   /* 가운데 정렬·글자 축소(회장 2026-09-29) */   /* 회장 2026-09-29: TOP 10 「자세히 보기 →」 외곽선·배경 없음 */
.pick h3{font-weight:800}
/* 홈 검색창: 제목·규모 문장 아래 */
/* 홈 상단: 제목 위 「—」 장식 삭제(회장) · 검색창은 일반 블록 흐름 + 아래 여백으로 히어로와 절대 겹치지 않게 */
.hhead::before{display:none}
.hhead{margin-top:0}
.searchbar.home{background:transparent!important;border:0!important;box-shadow:none!important;padding:0;width:100%;height:auto!important;margin:.25rem 0 .875rem;position:static;display:block}
.searchbar.home .wrap{background:transparent}
.searchbar.home .search{margin:0 auto}
body[data-page="home"] .hero.hero-swap{margin-top:1.75rem!important;clear:both}
.searchbar.home .wrap{padding:0;width:100%}
.searchbar.home .search{background:var(--surface);border:1.5px solid var(--line);box-shadow:none;max-width:40rem}
.coverrow{display:flex;justify-content:center;align-items:baseline;gap:.4rem;flex-wrap:wrap;margin:0 0 .5rem}   /* 회장 2026-09-29: [누적방문자]와 문장 사이 간격 좁게 */
.coverrow .cover{margin:0}
.coverrow .cover,.coverrow .visitc{font-size:var(--fs-small)}   /* 회장 2026-09-29: 규모 문장 줄은 1~2pt 작게(17→15px) */
/* 조건검색 박스 머리의 규모 한 줄(회장 2026-09-29) */
.match .scope{display:flex;flex-wrap:wrap;justify-content:center;text-align:center;align-items:baseline;gap:.4rem;margin:-.25rem 0 .125rem;padding:0 0 .625rem;border-bottom:1px solid var(--line);font-size:var(--fs-caption);color:var(--ink3)}
.match .scope .cover,.match .scope .visitc{font-size:var(--fs-caption);font-weight:400;color:var(--ink3);margin:0;max-width:none;text-align:left;line-height:1.5}
.match .scope b{color:var(--point-deep);font-weight:800;font-variant-numeric:tabular-nums}

/* 기간·지역 선택 패널 v2(회장 2026-10-01 「상단 메뉴 아래 기간·지역 선택 영역을 고급스럽게」) — 이름표 + 세그먼트(기간) + 격자(지역) */
.fpanel{margin:1.25rem 0 1.75rem;background:var(--surface);border:1px solid var(--line);border-radius:22px;padding:.25rem 1.25rem;box-shadow:0 1px 2px rgb(43 39 35 / .04),0 12px 32px -20px rgb(43 39 35 / .22)}
.frow{display:grid;grid-template-columns:4rem minmax(0,1fr);align-items:center;gap:1.25rem;padding:.875rem 0}
.frow+.frow{border-top:1px solid var(--line)}
.flab{font-size:.6875rem;font-weight:800;letter-spacing:.16em;color:var(--ink3);display:flex;align-items:center;gap:.5rem}
.flab::before{content:"";width:.375rem;height:.375rem;border-radius:50%;background:var(--point)}
.fpanel .index{margin:0;padding:0;background:none;border-radius:0;box-shadow:none}
.fpanel .index button{box-shadow:none;transition:background .15s ease,color .15s ease,box-shadow .15s ease}
.fpanel #dchips{display:inline-flex;flex-wrap:nowrap;gap:2px;padding:4px;background:color-mix(in srgb,var(--ink) 7%,var(--surface));border-radius:14px;justify-self:start;max-width:100%}
.fpanel #dchips button{flex:0 0 auto;justify-content:center;align-items:center;background:transparent;box-shadow:none;border-radius:10px;min-height:38px;padding:.45rem 1.125rem;color:var(--ink2);font-weight:600;font-size:.875rem}
.fpanel #dchips button:hover{color:var(--ink)}
.fpanel #dchips button[aria-pressed="true"]{background:var(--surface);color:var(--ink);font-weight:800;box-shadow:0 1px 2px rgb(43 39 35 / .08),0 6px 14px -6px rgb(43 39 35 / .28)}
/* 지역 한 줄(회장 2026-10-02 「지역이 두 줄로 공간을 고정 차지하는 건 낭비 — PC 에서 한 줄로」): 격자(칸 최소 5.5rem → 한 줄 11개) 대신 글자 크기 칩을 한 줄로 · 남는 폭은 고르게 나눔 · 좁은 PC 는 꺾지 않고 가로 밀기 */
.fpanel #chips{display:flex;flex-wrap:nowrap;gap:2px;overflow-x:auto;scrollbar-width:thin}
.fpanel #chips button{flex:1 0 auto;display:flex;justify-content:center;align-items:baseline;gap:.25rem;white-space:nowrap;background:transparent;border-radius:10px;min-height:38px;padding:.4rem .3rem;color:var(--ink);font-weight:600;font-size:.8125rem}
.fpanel #chips button:hover{background:color-mix(in srgb,var(--ink) 6%,var(--surface))}
.fpanel #chips button .n{background:none;padding:0;font-size:.6875rem;font-weight:600;color:var(--ink3);font-variant-numeric:tabular-nums}
.fpanel #chips button[aria-pressed="true"]{background:var(--ink);color:var(--on-point)}
.fpanel #chips button[aria-pressed="true"] .n{background:none;color:rgb(255 255 255 / .72)}
.fpanel #chips button:first-child{font-weight:800}
@media(max-width:640px){
.fpanel{margin:1rem 0 1.25rem;padding:.25rem 0;border-radius:18px}
.frow{grid-template-columns:1fr;gap:.625rem;padding:.75rem 0}
.flab{padding:0 1rem}
.fpanel #dchips{display:flex;margin:0 1rem;justify-self:stretch}
.fpanel #dchips button{flex:1 1 0;padding:.45rem .25rem;font-size:.8125rem;white-space:nowrap}
.fpanel #chips{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:.375rem;padding:0 1rem;margin:0;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent)}
.fpanel #chips::-webkit-scrollbar{display:none}
.fpanel #chips button{flex:0 0 auto;background:color-mix(in srgb,var(--ink) 6%,var(--surface))}
}

/* 테마 축제 박스 통일(회장 2026-10-01 「첫 줄이 1줄·2줄로 달라 레이아웃이 어긋난다」): 머리 기준 1줄 · 축제 줄 = 이름 1줄 + 설명 1줄 고정 높이 */
.pick .head{min-width:0}
.pick .head .mono{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.picks:not(.home10) .pick ol li{align-items:start}
.picks:not(.home10) .pick ol li .rk{line-height:1.5rem}
.picks:not(.home10) .pick ol li .nm{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.5rem}
.picks:not(.home10) .pick ol li .why{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25rem;height:1.25rem}
.picks.home10 .pick .head{min-height:0}   /* 머리 기준이 한 줄이 되어 두 줄 자리 확보 불필요(2026-10-01) */
/* 테마 박스 머리 두 줄 고정(회장 2026-10-01 「진행 중이거나 30일 안… / 곧 열리는 순은 다음 줄로」): 1줄 기준 · 2줄 순서, 각 줄은 넘치면 말줄임 */
.pick .head{display:flex;flex-direction:column;align-items:stretch;gap:.125rem}
.pick .head .mono.ord{font-weight:500;color:var(--ink3)}
.pick .head .mono.ord:empty::before{content:"\00a0"}
/* 이름표 제거(회장 2026-10-01): 행은 버튼만 */
.frow{grid-template-columns:minmax(0,1fr)}
@media(max-width:640px){.fpanel #dchips{margin:0 1rem}}

/* ---- 결함 수정 B5~B8 (hub-b-2026-10-07, 근거 허브 ---- */
/* B5 가로 스크롤: 달력 그리드 칸의 min-width:auto 가 지도 상자를 밀어냈다 · 긴 축제명(keep-all)이 카드 밖으로 나갔다 */
.calwrap>div{min-width:0}
.card .t{overflow-wrap:anywhere}
/* B6 글자 바닥 12px: 실측 11.69px(.6875rem) 였던 라벨·배지 → 12.75px */
.lcard .tx .m .tag,.spot .tp b,.spot .cw b,.spot .ss,.dtop .poster .cap,.fpanel #chips button .n,.index button .n,.flab,.card .facts dt,.row .d::before,.crow .d::before,.fact .k,.side .k,.alert .d,.rows .kd,.bcard .m,.bcard .why,.bh .mono,.journey .jearly,.journey .jk{font-size:.75rem}
/* B7 탭 타깃 24px: 이벤트 상자 링크(22px)·갱신 기준 링크(21px) */
.evbox .h a{display:inline-flex;align-items:center;min-height:24px}
.check .stat a.upd{display:inline-block;min-height:24px;line-height:24px}
/* B8 포커스 표시: outline:0 이던 검색 입력·선택 상자. 비활성 페이지 버튼은 투명도 대신 색으로(대비 1.77:1 → 6.4:1) */
.search input:focus-visible{outline:2px solid var(--fill);outline-offset:2px;border-radius:4px}
.match .sel select:focus-visible{outline:2px solid var(--fill);outline-offset:2px}
.pager button:disabled{opacity:1;color:var(--ink3)}

/* ── 모바일 시안 C (디자인 허브 hub-c-2026-10-07 · 회장 확정 2026-10-07) ──────────────────────
   폭 640px 이하만 바뀐다. PC 에서는 줄바꿈·탭 줄·접기 버튼을 숨기는 규칙만 작동한다.
   선택자 앞 `html body` = 이 층이 ds 뒤에 오는 페이지별 <style> 에도 이기게(교훈 2026-10-07).
   색·크기는 토큰만(하드코딩 색 0). 원본: 허브 */
.mbr,.hseg,.needtg{display:none}
.hempty{margin:0;color:var(--ink3);font-size:var(--fs-small)}
.hempty a{color:var(--point-ink);font-weight:600}
@media(max-width:640px){
  /* 1 머리말(모든 페이지): 1줄 로고+일정·테마·버킷은 흘러가고, 2줄 주제 메뉴 5칸만 고정 */
  html body{--navh:57px;--row1h:52px}
  html body .top{position:sticky;top:calc(-1 * var(--row1h));z-index:30;padding:0;background:var(--surface);border-bottom:1px solid var(--line)}
  html body .top .wrap{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"brand aux" "nav nav";align-items:center;column-gap:10px;row-gap:0;padding:0 16px}
  html body .top .brand{grid-area:brand;height:var(--row1h);align-items:center;white-space:nowrap;flex:none}
  html body .top .navwrap{display:contents}
  html body .top .home{display:none}
  html body .top .aux{grid-area:aux;width:auto;min-width:0;justify-self:end;justify-content:flex-end;flex-wrap:nowrap;gap:0;margin:0}
  html body .top .aux a{flex:none;white-space:nowrap;padding:0 .5rem;min-height:44px;font-size:var(--fs-caption);color:var(--ink2)}
  html body .top .nav{grid-area:nav;display:grid;grid-template-columns:repeat(5,minmax(0,64px));justify-content:center;column-gap:6px;height:var(--navh);background:transparent;box-shadow:none;border-radius:0;padding:0;margin:0;overflow:visible;max-width:none;width:100%}
  html body .top .nav a{flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:44px;height:100%;padding:0;border-radius:0;background:transparent;box-shadow:none;font-size:.75rem;font-weight:600;color:var(--ink2);letter-spacing:-.01em;white-space:nowrap;min-width:0}
  html body .top .nav a svg{width:22px;height:22px;color:var(--ink2)}
  html body .top .nav a[aria-current="page"],html body .top .nav a[aria-current="page"] svg{color:var(--point-deep);background:transparent;box-shadow:none}
  /* 좁은 폰: 로고와 일정·테마·버킷이 한 줄에 들어가게 단계적으로 줄인다(줄바꿈·넘침 0 — 회장 2026-10-08) */
  @media(max-width:399px){html body .top .aux a{padding:0 .3125rem;gap:.1875rem}html body .top .aux a svg{width:14px;height:14px}html body .top .brand{font-size:1.375rem}html body .top .wrap{column-gap:6px}}
  @media(max-width:359px){html body .top .aux a svg{display:none}html body .top .aux a{padding:0 .375rem}html body .top .brand{font-size:1.25rem}html body .top .nav{column-gap:2px}}
  @media(max-width:329px){html body .top .aux a{padding:0 .25rem;font-size:.75rem}html body .top .brand{font-size:1.125rem}}
  /* 다른 페이지에서 화면 위에 붙던 바는 메뉴 줄 밑으로 */
  html body .dnav,html body .secnav,html body .bk-nav{top:var(--navh)}

  /* 2 홈 첫 화면 */
  html body .mbr{display:inline}
  html body .hhead{white-space:normal;text-align:center;font-size:var(--fs-h2);line-height:1.35;margin:1.25rem 0 .375rem}
  html body .hlead{text-align:center;white-space:nowrap;font-size:var(--fs-small);color:var(--ink2);margin:0 0 1.25rem}
  @media(max-width:359px){html body .hlead{font-size:.875rem}}
  @media(max-width:329px){html body .hlead{white-space:normal}}
  html body .searchbar.home{margin:0 0 .75rem}
  html body .searchbar.home .search{border:1.5px solid var(--ink);border-radius:var(--r-md);min-height:52px;padding:0 .375rem 0 1rem}
  html body .searchbar.home .search input{font-size:var(--fs-body)}
  html body .searchbar.home .search .qbtn{min-height:40px;padding:0 1rem;border-radius:var(--r-sm);font-size:var(--fs-small)}
  html body .hero-swap .board{display:none}
  html body .match{display:grid;grid-template-columns:1fr 1fr;gap:.875rem .5rem;padding:1rem;border-radius:var(--r-lg);background:var(--paper-warm,var(--surface));box-shadow:inset 0 0 0 1px var(--line)}
  html body .match>*{grid-column:1/-1}
  html body .match>.grp:has(.sel){grid-column:auto;padding:0;min-height:0;flex-direction:column;align-items:stretch;gap:0}
  html body .match>.grp:has(.sel) .gl{position:static;height:auto;width:auto;font-size:.75rem;padding:0 0 .25rem .25rem}
  html body .match .sel{min-height:56px;padding:0 2.5rem 0 .875rem;border-radius:var(--r-md);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line2,var(--line));font-size:var(--fs-body)}
  html body .match .grp{padding-left:2.75rem}
  html body .match .need{min-height:36px;padding:0 .75rem;font-size:var(--fs-caption)}
  html body .needtg{display:none}
  html.cjs body .needtg{display:flex;align-items:center;gap:.375rem;width:100%;min-height:44px;padding:0;border:0;background:transparent;font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--ink2);cursor:pointer;text-align:left}
  html.cjs body .needtg::after{content:"";margin-left:auto;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .2s var(--ease)}
  html.cjs body .needtg[aria-expanded="true"]::after{transform:rotate(-135deg) translateY(-2px)}
  html.cjs body .needtg .n{font-size:.75rem;color:var(--ink3);box-shadow:inset 0 0 0 1px var(--line);border-radius:999px;padding:0 .4375rem;background:var(--surface)}
  html.cjs body .needg:not(.open){display:none}
  html body .match .grp.act{margin-top:0;padding-top:0;padding-left:0;border-top:0}
  html body .match .mbtn{min-height:52px;background:var(--fill);color:var(--on-point);box-shadow:none;font-weight:700;font-size:var(--fs-body);border-radius:var(--r-md)}

  /* 3 탭: 오늘의 축제 / NOW 이벤트 / 테마 축제 (자바스크립트가 있을 때만) */
  html body .htabs{display:flex;flex-direction:column}
  html body .htabs>.hentries{display:none}
  html.cjs body .hseg{display:flex;justify-content:space-between;align-items:stretch;gap:0;position:sticky;top:var(--navh);z-index:20;order:0;margin:2rem -16px 1rem;padding:0 16px;background:var(--surface);border-bottom:1px solid var(--line)}
  html.cjs body .hseg button{min-height:44px;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;background:transparent;font:inherit;font-size:var(--fs-caption);font-weight:600;color:var(--ink3);cursor:pointer;white-space:nowrap;padding:0 .125rem;min-width:0;flex:0 0 auto}
  @media(max-width:359px){html.cjs body .hseg button{font-size:.75rem;letter-spacing:-.02em}}
  html.cjs body .hseg button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--ink);font-weight:800}
  html.cjs body .htabs>#now{order:1}
  html.cjs body .htabs>#events{order:2}
  html.cjs body .htabs>#trend{order:3}
  html.cjs body .htabs>#picks{order:4}
  html.cjs body .htabs>.adsec,html.cjs body .htabs>aside{order:4}
  html.cjs body .htabs>section[id]{margin-top:0}
  html.cjs body .htabs[data-active="now"]>#events,html.cjs body .htabs[data-active="now"]>#trend,html.cjs body .htabs[data-active="now"]>#picks,
  html.cjs body .htabs[data-active="events"]>#now,html.cjs body .htabs[data-active="events"]>#trend,html.cjs body .htabs[data-active="events"]>#picks,
  html.cjs body .htabs[data-active="trend"]>#now,html.cjs body .htabs[data-active="trend"]>#events,html.cjs body .htabs[data-active="trend"]>#picks,
  html.cjs body .htabs[data-active="picks"]>#now,html.cjs body .htabs[data-active="picks"]>#events,html.cjs body .htabs[data-active="picks"]>#trend{display:none}
  /* 트렌드 패널(hub-col-2026-10-09): 탭 안에서는 머리 제목이 숨으므로 서명 한 줄만 남는다 · 카드 4장은 2×2(column.css .home4) */
  html.cjs body .htabs>#trend>.sh .n{display:block;color:var(--ink3);font-size:var(--fs-caption);margin:0 0 .5rem}
  html.cjs body .htabs>section[id]>.sh h2,html.cjs body .htabs>section[id]>.sh::before{display:none}
  html.cjs body .htabs>section[id]>.sh{margin:0 0 .25rem}
  html.cjs body .htabs>section[id]>.sh .n{margin-left:0}

  /* 3-1 오늘의 축제 · NOW 이벤트: 첫 1곳(오늘)은 크게, 나머지는 한 줄 */
  html body .htabs .grid{display:block}
  html body .htabs .grid .card{--pw:64px;display:grid;grid-template-columns:64px minmax(0,1fr);gap:.875rem;padding:.875rem 0;border-top:1px solid var(--line)}
  html body .htabs .grid .card:first-child{border-top:0}
  html body .htabs .grid .card .media,html body .htabs .grid .card .ph,html body .htabs .grid .card .namecard{width:64px;height:64px;border-radius:var(--r-md);box-shadow:none}
  html body .htabs .grid .card .media img{object-fit:cover;object-position:top}
  html body .htabs .grid .card .body{background:transparent;box-shadow:none;padding:0;border-radius:0}
  html body .htabs .grid .card .info{display:grid;gap:1px;padding:0}
  html body .htabs .grid .card .meta{display:flex;justify-content:space-between;gap:.5rem;order:2}
  html body .htabs .grid .card .t{order:1;font-size:var(--fs-body);line-height:1.4;font-weight:700}
  html body .htabs .grid .card .sub{order:3}
  html body .htabs .grid .card .facts{order:4;display:block;margin:.125rem 0 0;padding:0;border:0;font-size:var(--fs-caption);line-height:1.5}
  html body .htabs .grid .card .facts div,html body .htabs .grid .card .facts dd{display:inline;padding:0;border:0;margin:0}
  html body .htabs .grid .card .facts [data-k="시간"]::before{content:" · ";color:var(--ink3)}
  html body .htabs .grid .card .facts dt{display:none}
  html body .htabs .grid .card .facts dd{margin:0;color:var(--ink2)}
  html body .htabs .grid .card .facts [data-k="장소"],html body .htabs .grid .card .facts [data-k="문의"],html body .htabs .grid .card .facts [data-k="출처"]{display:none}
  html body .htabs .grid .card .litenote,html body .htabs .grid .card .evbox{display:none}
  html body .htabs #events .grid .card .why{order:4;font-size:var(--fs-caption);color:var(--tone);font-weight:600}
  html body .htabs #events .grid .card .facts{display:none}
  /* 오늘의 축제 첫 카드: 크게 */
  html body .htabs #now .grid .card:first-child{display:block;padding:0 0 .5rem;border-radius:var(--r-lg);box-shadow:inset 0 0 0 1px var(--line);overflow:hidden;margin-bottom:.25rem}
  html body .htabs #now .grid .card:first-child .media,html body .htabs #now .grid .card:first-child .ph,html body .htabs #now .grid .card:first-child .namecard{width:100%;height:auto;aspect-ratio:4/3;border-radius:0}
  html body .htabs #now .grid .card:first-child .body{padding:.875rem 1rem .5rem}
  html body .htabs #now .grid .card:first-child .t{font-size:var(--fs-h3)}
  html body .htabs #now .grid .card:first-child .facts div{display:grid;gap:0}
  html body .htabs #now .grid .card:first-child .facts dd{display:block}
  html body .htabs #now .grid .card:first-child .facts{display:grid;grid-template-columns:1fr 1fr;gap:.5rem .75rem;margin-top:.5rem}
  html body .htabs #now .grid .card:first-child .facts dt{display:block;font-size:.75rem}
  html body .htabs #now .grid .card:first-child .facts [data-k="시간"]::before{content:none}
  html body .htabs #now .grid .card:first-child .facts dd{font-size:var(--fs-small);font-weight:600;color:var(--ink)}
  html body .htabs #now .grid .card:first-child .facts [data-k="장소"]{display:block;grid-column:1/-1}
  html body .htabs .more{margin-top:1rem}

  /* 3-2 테마 축제: 접는 목록(첫 목록만 펼침) · 목록당 6곳 */
  html body .htabs #picks .picks{display:block}
  html body .htabs #picks .pick{background:transparent;box-shadow:none;border-radius:0;padding:0;border-bottom:1px solid var(--line)}
  html.cjs body .htabs #picks .pick h3{position:relative;margin:0;padding:1rem 2rem .25rem 0;cursor:pointer;font-size:var(--fs-body)}
  html.cjs body .htabs #picks .pick h3::after{content:"";position:absolute;right:.5rem;top:1.375rem;width:8px;height:8px;border-right:1.5px solid var(--ink3);border-bottom:1.5px solid var(--ink3);transform:rotate(45deg)}
  html.cjs body .htabs #picks .pick.open h3::after{transform:rotate(-135deg);top:1.625rem}
  html body .htabs #picks .pick .head{order:2}
  html body .htabs #picks .pick{display:flex;flex-direction:column;padding-bottom:.75rem}
  html body .htabs #picks .pick h3{order:1}
  html body .htabs #picks .pick ol{order:3}
  html body .htabs #picks .pick .more{order:4}
  html body .htabs #picks .pick ol li:nth-child(n+7){display:none}
  html.cjs body .htabs #picks .pick:not(.open) ol,html.cjs body .htabs #picks .pick:not(.open) .more{display:none}
  html.cjs body .htabs #picks .pick .head .ord{display:none}
  html body .htabs #picks>.more{display:none}

  /* 4 버킷 축제 2×2: 포스터 + 나라·도시 + 축제명 */
  html body #world .lgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem .75rem}
  html body #world .lgrid>.lcard:not([hidden]):nth-child(n+5){display:none}
  html body #world .lcard .media{aspect-ratio:3/4}
  html body #world .lcard .media img{object-fit:cover;object-position:top}
  html body #world .lcard .hk,html body #world .lcard .m{display:none}
  html body #world .lcard b{font-size:var(--fs-small);line-height:1.4}
  html body #world>.sh .n{display:none}
}

/* ── 모바일 홈 외 페이지 1차 P5·P6·P8 (디자인 허브 hub-d-2026-10-08 · 회장 「권장순서 1번 진행해」 2026-10-08) ──
   폭 640px 이하만. P5 메뉴 5종·오늘의 축제 = 시안 C 한 줄 목록 · P6 축제 찾기 20곳씩·코드 숨김 · P8 테마·버킷 머리 설명 2줄·잘림 없앰.
   색·크기는 토큰만. 원본: 허브 */
.leadmore,.smore{display:none}
@media(max-width:640px){
  /* P5 한 줄 목록(메뉴 5종 · /now/) */
  html body .mrows .grid{display:block}
  html body .mrows .grid .card{--pw:64px;display:grid;grid-template-columns:64px minmax(0,1fr);gap:.875rem;padding:.875rem 0;border-top:1px solid var(--line)}
  html body .mrows .grid .card:first-child{border-top:0}
  html body .mrows .grid .card .media,html body .mrows .grid .card .ph,html body .mrows .grid .card>.namecard,html body .mrows .grid .card .media-link>.namecard{width:64px;height:64px;border-radius:var(--r-md);box-shadow:none;overflow:hidden}
  html body .mrows .grid .card .namecard{font-size:.75rem}
  html body .mrows .grid .card .media img{object-fit:cover;object-position:top}
  html body .mrows .grid .card .body{background:transparent;box-shadow:none;padding:0;border-radius:0;display:grid;grid-template-columns:minmax(0,1fr);gap:.375rem;min-width:0}
  html body .mrows .grid .card .evbox li .s{white-space:normal;overflow:visible;text-overflow:clip;color:var(--ink3)}
  html body .mrows .grid .card .info{display:grid;gap:1px;padding:0}
  html body .mrows .grid .card .meta{display:flex;justify-content:space-between;gap:.5rem;order:2}
  html body .mrows .grid .card .t{order:1;font-size:var(--fs-body);line-height:1.4;font-weight:700}
  html body .mrows .grid .card .sub{order:3}
  html body .mrows .grid .card .why{order:4;font-size:var(--fs-caption);color:var(--tone);font-weight:600}
  html body .mrows .grid .card .facts{order:5;display:block;margin:.125rem 0 0;padding:0;border:0;font-size:var(--fs-caption);line-height:1.5}
  html body .mrows .grid .card .facts div,html body .mrows .grid .card .facts dd{display:inline;padding:0;border:0;margin:0}
  html body .mrows .grid .card .facts dt{display:none}
  html body .mrows .grid .card .facts dd{color:var(--ink2)}
  html body .mrows .grid .card .facts [data-k="시간"]::before{content:" · ";color:var(--ink3)}
  html body .mrows .grid .card .facts [data-k="장소"],html body .mrows .grid .card .facts [data-k="문의"],html body .mrows .grid .card .facts [data-k="출처"]{display:none}
  html body .mrows .grid .rankcard .facts{display:none}
  html body .mrows .grid .card .litenote{display:none}
  /* 포스터 없는 축제의 글자 포스터: 64px 칸에서는 이름만 */
  html body :is(.mrows,.htabs) .grid .card:not(:first-child) .typo,html body .mrows .grid .card .typo{display:flex;align-items:center;justify-content:center;padding:.25rem;text-align:center}
  html body :is(.mrows,.htabs) .grid .card .typo::before,html body :is(.mrows,.htabs) .grid .card .typo::after{display:none}
  html body :is(.mrows,.htabs) .grid .card .typo .tp-k,html body :is(.mrows,.htabs) .grid .card .typo .tp-d,html body :is(.mrows,.htabs) .grid .card .typo .tp-m{display:none}
  html body :is(.mrows,.htabs) .grid .card .typo .tp-n{position:static;font-size:.75rem;line-height:1.25;font-weight:700;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin:0;word-break:keep-all}
  /* 이벤트·안내 상자는 첫 1개만, 상자 없이 한 줄 */
  html body .mrows .grid .card .evbox{background:transparent;box-shadow:none;border:0;padding:0;margin:0;border-radius:0}
  html body .mrows .grid .card .evbox .h{display:none}
  html body .mrows .grid .card .evbox ul{margin:0;padding:0}
  html body .mrows .grid .card .evbox li{border:0;padding:0;margin:0}
  html body .mrows .grid .card .evbox li:nth-child(n+2){display:none}
  html body .mrows .grid .card .evbox li a,html body .mrows .grid .card .evbox li .row{display:flex;gap:.375rem;align-items:center;padding:0;min-height:32px;background:transparent;box-shadow:none;font-size:var(--fs-caption);color:var(--ink2)}
  html body .mrows .grid .card .evbox li b{font-size:var(--fs-caption);font-weight:600;white-space:normal;overflow:visible;text-overflow:clip}
  html body .mrows .grid .card .evbox li .dot{display:none}

  /* P6 축제 찾기: 내부 코드 숨김(회장 2026-10-03 「고객에게 불필요」) · 20곳씩 */
  html body .sres .fc{display:none}
  html body .smore{display:flex;align-items:center;justify-content:center;width:100%;min-height:48px;margin:.75rem 0 0;border:0;border-radius:var(--r-md);background:var(--soft);color:var(--ink);font:inherit;font-size:var(--fs-small);font-weight:600;cursor:pointer}
  html body .smore[hidden]{display:none}

  /* P8 테마·버킷: 머리 설명 2줄 + 더 읽기 · 목록 설명·축제명 자르지 않음 */
  html body .dhead .lead.clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  html body .leadmore{display:inline-flex;align-items:center;min-height:44px;padding:0;border:0;background:transparent;font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--point-ink);cursor:pointer}
  html body .leadmore[hidden]{display:none}
  html body .picks:not(.home10) .pick ol li .why,html body .picks:not(.home10) .pick ol li .nm{white-space:normal;overflow:visible;text-overflow:clip;height:auto}
  html body .pick .head .mono{white-space:normal;overflow:visible;text-overflow:clip}
  html body .lcard .tx b{white-space:normal;overflow:visible;text-overflow:clip}
}

/* ── 모바일 축제 상세 시안 A 정돈형 (디자인 허브 hub-e-2026-10-08 · 회장 「A안이 좋아」 2026-10-08) ──
   폭 640px 이하 · 모든 상세(실험 표본 14곳 포함 — 회장 2026-10-08 hub-g). 「한눈에 보기」가 없는 표본은 「출발 전 확인」 표를 남긴다. 내용 HTML 은 지우지 않고 숨기거나 접기만.
   원본: 허브 */
.fthumb,.emore,.dmore{display:none}
@media(max-width:640px){
  /* P2 포스터: 제목 옆 작은 그림, 아래 큰 포스터는 숨김 */
  html body[data-page="festival"] .fh:has(.fthumb){display:grid;grid-template-columns:88px minmax(0,1fr);column-gap:14px;align-items:start}
  html body[data-page="festival"] .fh:has(.fthumb)>*{grid-column:2;min-width:0}
  html body[data-page="festival"] .fh .fthumb{display:block;grid-column:1;grid-row:1/span 4;width:88px;height:124px;object-fit:cover;object-position:top;border-radius:var(--r-md);box-shadow:0 0 0 1px var(--line);margin-top:2px}
  html body[data-page="festival"] .fh:has(.fthumb)>.actions,html body[data-page="festival"] .fh:has(.fthumb)>.sharemsg,html body[data-page="festival"] .fh:has(.fthumb)>.house{grid-column:1/-1}
  html body[data-page="festival"] .fh h1{font-size:var(--fs-h2);line-height:1.3}
  html body[data-page="festival"] .fh:has(.fthumb)~.dtop .poster{display:none}

  /* P1 같은 정보 한 번만: 한눈에 보기(표) 하나 + 비 예보 알림 + 일정 확인 상태 */
  html body[data-page="festival"]:has(.glance) .check>.ch,html body[data-page="festival"]:has(.glance) .check>dl{display:none}
  html body[data-page="festival"]:has(.glance) .check{padding-top:.75rem;padding-bottom:.75rem}
  html body[data-page="festival"] .check .stat{margin:0}
  html body[data-page="festival"] .glance>dl>dd>.cl.clamp4,html body[data-page="festival"] .check>dl dd>.cl.clamp4{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  html body[data-page="festival"] .emore{display:inline-flex;align-items:center;min-height:44px;padding:0;border:0;background:none;font:inherit;font-size:var(--fs-caption);font-weight:600;color:var(--point-ink);cursor:pointer}

  /* 날씨: 10일 가로 넘김 */
  html body[data-page="festival"] #weather>ul{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:4px 16px 6px;scroll-snap-type:x proximity}
  html body[data-page="festival"] #weather>ul::-webkit-scrollbar{display:none}
  html body[data-page="festival"] #weather>ul>li{flex:0 0 108px;display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:10px;border:0;border-radius:var(--r-md);background:var(--sunken,var(--surface));box-shadow:inset 0 0 0 1px var(--line);scroll-snap-align:start;font-size:var(--fs-caption)}
  html body[data-page="festival"] #weather>ul>li .half{display:flex;flex-wrap:wrap;gap:0 4px;align-items:baseline;width:100%}
  html body[data-page="festival"] #weather>ul>li .half i{font-style:normal;color:var(--ink3);font-size:.75rem}

  /* P3 여정 체크리스트: 단계는 접고 제목 옆에 확인 수 */
  html body[data-page="festival"] ol.jst>li.jcol>:not(b){display:none}
  html body[data-page="festival"] ol.jst>li>b[role="button"]{display:flex;align-items:center;gap:8px;min-height:44px;cursor:pointer}
  html body[data-page="festival"] ol.jst>li>b[role="button"]::after{content:"";margin-left:auto;width:8px;height:8px;border-right:1.5px solid var(--ink3);border-bottom:1.5px solid var(--ink3);transform:rotate(45deg) translateY(-2px)}
  html body[data-page="festival"] ol.jst>li:not(.jcol)>b[role="button"]::after{transform:rotate(-135deg) translateY(-2px)}
  html body[data-page="festival"] ol.jst .jcnt{font-size:.75rem;font-weight:600;color:var(--ink3)}
  html body[data-page="festival"] ol.jst .jcnt .q{color:var(--point-ink)}

  /* P4 목록 3개씩 + 더 보기 */
  html body[data-page="festival"] .sec ul.rows>li[data-hm]{display:none}
  html body[data-page="festival"] .dmore{display:flex;align-items:center;justify-content:center;width:100%;min-height:44px;margin:6px 0 0;border:0;border-radius:var(--r-md);background:var(--soft);font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--ink);cursor:pointer}
  html body[data-page="festival"] .sec ul.rows li .rb{min-width:0}
  html body[data-page="festival"] .sec ul.rows li .hd a,html body[data-page="festival"] .sec ul.rows li .bd{overflow-wrap:anywhere}

  /* 목록 줄: 이름표(kd)는 제목 위 칩으로, 글은 전체 폭 */
  html body[data-page="festival"] .sec ul.rows>li{display:block}
  html body[data-page="festival"] .sec ul.rows>li>.kd{display:inline-block;max-width:100%;white-space:normal;margin:0 0 4px;line-height:1.35}
  html body[data-page="festival"] .sec ul.rows>li>.rb{width:100%}
  /* 포스터 없는 축제의 큰 글자 카드는 숨김 */
  html body[data-page="festival"] .dtop .poster:has(.namecard){display:none}
  /* 소개(표본): 첫 문단만 + 더 읽기 */
  html body[data-page="festival"] #intro.icol>p:not(:first-of-type){display:none}
  html body[data-page="festival"] .imore{display:inline-flex;align-items:center;min-height:44px;padding:0;border:0;background:none;font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--point-ink);cursor:pointer}
  /* 즐기는 법: 항목 접기 */
  html body[data-page="festival"] ol.guide>li.gcol>:not(.gh){display:none}
  html body[data-page="festival"] ol.guide>li>.gh[role="button"]{display:flex;align-items:center;gap:8px;min-height:44px;cursor:pointer}
  html body[data-page="festival"] ol.guide>li>.gh[role="button"]::after{content:"";margin-left:auto;width:8px;height:8px;border-right:1.5px solid var(--ink3);border-bottom:1.5px solid var(--ink3);transform:rotate(45deg) translateY(-2px)}
  html body[data-page="festival"] ol.guide>li:not(.gcol)>.gh[role="button"]::after{transform:rotate(-135deg) translateY(-2px)}
}

/* ── 모바일 2차 P7·P9·P10 + 광고 가로 스크롤 0 (디자인 허브 hub-f-2026-10-08 · 회장 「순서대로 진행해. 광고 배너는 좌우로 스크롤 없이」) ──
   광고 칸 세로 쌓기는 폭 900px 이하(지금 가로 넘김이 생기는 범위 그대로), 나머지는 640px 이하만.
   원본: 허브 */
.maptg{display:none}
/* 광고: 홈 가운데 3칸 — 좌우 넘김 없이 세로로 쌓는다(세 칸 모두 보임 · 노출 집계 그대로) */
@media(max-width:900px){
  html body .ad-trio:not(.ad-side){grid-template-columns:minmax(0,1fr);grid-auto-flow:row;grid-auto-columns:auto;overflow:visible;scroll-snap-type:none;gap:.5rem;padding-bottom:0}
}
@media(max-width:640px){
  html body .ad-trio:not(.ad-side) a{height:auto;min-height:88px;padding:.625rem 2.75rem .625rem .875rem}
  html body .ad-trio:not(.ad-side) a.tv0 .tthumb{height:68px}
  html body .ad-trio:not(.ad-side) a.tv2 .adt{align-items:flex-start}
  html body .ad-trio:not(.ad-side) a.tv2 .chips{justify-content:flex-start}
  html body .ad-trio:not(.ad-side) a.tv2 .chips i.more{display:block;min-height:0;margin:0;padding:.12rem .25rem;border-radius:0;font-size:.75rem;font-weight:600}
  html body section.adsec{margin-top:1.5rem}

  /* P9 상단 광고 띠(홈 외): 얇게 — 포스터 작게, 제목·일정 두 줄, 버튼은 작은 원 */
  html body:not([data-page="home"]) .ad-top a{min-height:0;gap:.625rem;padding:.5rem 2.75rem .5rem .625rem;border-radius:var(--r-md)}
  html body:not([data-page="home"]) .ad-top .thumb{height:56px}
  html body:not([data-page="home"]) .ad-top .adt{gap:0}
  html body:not([data-page="home"]) .ad-top .adt b{font-size:var(--fs-small);white-space:normal;line-height:1.35}
  html body:not([data-page="home"]) .ad-top .adt span{font-size:.75rem;line-height:1.4}
  html body:not([data-page="home"]) .ad-top .adt .s{display:none}
  html body:not([data-page="home"]) .ad-top .adlabel{top:.375rem;right:.5rem;font-size:.75rem;padding:0 .375rem}
  html body:not([data-page="home"]) .ad-top .adcta{position:absolute;right:.5rem;bottom:.5rem;width:30px;height:30px;padding:0;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.875rem}
  html body:not([data-page="home"]) .ad-top .adcta .w{display:none}
  html body:not([data-page="home"]) main.wrap>aside.ad-top{margin-bottom:1rem}

  /* P7 축제 일정: 달력 칸이 좁은 폭에서 넘치지 않게 · 지도는 접기(아래 지역 칩으로 같은 선택) */
  html body .cal{padding:.75rem .625rem .875rem}
  html body .cal .days{gap:3px}
  html body .cal .day{min-height:0}
  html body[data-page="calendar"] .calwrap>div:first-child:has(.mapbox):not(.mapopen){display:none}
  html body[data-page="calendar"] .maptg{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:44px;margin:0 0 .75rem;padding:0 1rem;border:0;border-radius:var(--r-md);background:var(--soft);font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--ink);cursor:pointer}
  html body[data-page="calendar"] .maptg::after{content:"";width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px)}
  html body[data-page="calendar"] .maptg[aria-expanded="true"]::after{transform:rotate(-135deg) translateY(-2px)}

  /* P10 바닥글: 여백 줄이고 모음 링크는 작은 칩으로(줄바꿈, 가로 넘김 없음) */
  html body footer{margin-top:2.5rem;padding:1.25rem 1rem 2rem;gap:.5rem;line-height:1.6}
  html body footer .links{gap:6px;margin:.375rem 0 0!important}
  html body footer .links a{min-height:36px;padding:0 .75rem;border-radius:999px;font-size:var(--fs-caption);font-weight:600}
}

/* ── 디자인 허브 hub-g-2026-10-08 (회장 「1번부터 4번까지 진행」) ──────────────────────────
   1 태블릿(641~1023px) 상단 광고: 출연진 칸이 27~82px 로 좁아져 세로로 쌓이며 173~237px 이 되던 것 → 출연진 숨김(PC 1024px 이상 그대로)
   3 누르는 칸 44px: 축제 일정 날짜 칸 · 바닥글 모음 링크(모바일)
   4 광고 버튼 「공식 홈페이지」: 브랜드 주황 바탕 그대로, 글자를 큰 글자 기준(19px 굵게)으로 — APCA Lc 53.3 ≥ 큰 글자 45(본문 15px 은 60 필요)
   원본: 허브 */
@media(min-width:641px) and (max-width:1023px){
  html body .ad-top .lineup{display:none}
}
@media(min-width:641px){
  html body .ad-top .adcta{font-size:1.1875rem;font-weight:800}
}
@media(max-width:640px){
  html body .cal .day{min-height:44px}
  html body footer .links a{min-height:44px}
}

/* ── 축제 상세 개편 CSS 층 (디자인 허브 hub-h-2026-10-09 · 회장 「오늘 마무리」 2026-10-09) ──────────────────
   모든 폭. render.py 가 ds 층 끝(hub_g.css 뒤)에 붙인다(apply-h.py). `html body` 접두 = 페이지별 <style> 보다 뒤에서 이긴다.
   토큰만(hex 0). 각 절 머리의 R번호 = audits/gofesta/2026-10-09/detail-ux/REPORT.md 개편안.
   새 토큰 --warn-ink·--info-ink·--ad-surface·--ad-line 은 허브에서 추가·빌드(2026-10-09) → sync-spoke 로 site/design_tokens.css 갱신 뒤 적용. */

/* R12 탭 타깃·작은 글자·대비 회귀 */
html body .rows .hd a{display:inline-block;min-height:24px;padding:.125rem 0;line-height:1.35}
html body a.vsrc,html body .vsrc{display:inline-flex;align-items:center;min-height:24px;font-size:var(--fs-caption)}
html body .rows .hd .ext,html body .rows .lk a .ext,html body .ext{font-size:.75rem}
html body .wx .w.sun{color:var(--warn-ink)}
html body .wx .w.rain,html body .wx .w.snow{color:var(--info-ink)}
html body .journey .jk,html body .journey .jearly,html body .fact .k,html body .alert .d{font-size:.75rem}
html body .indoor li a,html body .wx ul.indoor li a{display:inline-flex;align-items:center;min-height:24px}   /* 비 오는 날 실내 명소 칩 링크 22px → 24px */

/* R1 첫 화면 요약 카드 — 고정 5행(갈 수 있나·어떻게 가나·뭘 하나·조심·문의) · 행마다 섹션 점프 · 없는 정보는 「확인 중」 */
html body .gnotice{display:flex;gap:.5rem;align-items:baseline;margin:0 0 .5rem;padding:.5rem .75rem;border-radius:var(--r-sm);background:var(--soft);color:var(--ink);font-size:var(--fs-caption);line-height:1.45}
html body .gnotice b{flex:0 0 auto;color:var(--point-ink-on-tint)}
html body .gnotice a{color:inherit;text-decoration:underline;text-underline-offset:2px;min-height:24px;display:inline-block}
html body .glance ul.g5{display:grid;grid-template-columns:1fr;gap:0}
html body .glance ul.g5 li{display:grid;grid-template-columns:5.25rem minmax(0,1fr);gap:.5rem;align-items:start;padding:.5rem 0;border-top:1px solid var(--line);min-width:0;min-height:44px}
html body .glance ul.g5 li:first-child{border-top:0}
html body .glance ul.g5 li>b{display:flex;align-items:center;gap:.375rem;font-size:var(--fs-caption);font-weight:800;color:var(--ink2);padding-top:.1rem}
html body .glance ul.g5 li>b svg{width:16px;height:16px;flex:0 0 auto;color:var(--point-deep)}
html body .glance ul.g5 .gv{display:flex;flex-wrap:wrap;align-items:baseline;gap:.2rem .5rem;min-width:0;font-size:var(--fs-small);line-height:1.45;color:var(--ink)}
html body .glance ul.g5 .gv>a{color:var(--ink);text-decoration:none;border-bottom:1px dashed color-mix(in srgb,var(--point) 45%,transparent);min-height:24px;display:inline;overflow-wrap:anywhere}
html body .glance ul.g5 .gv>a.go{display:inline-flex;align-items:center;min-height:24px;font-weight:700;color:var(--point-ink);border:0;white-space:nowrap}
html body .glance ul.g5 .gv .chk{color:var(--ink3);font-weight:600}
html body .glance ul.g5 .gv .tag{font-size:.75rem;padding:.15rem .55rem;line-height:1.25}
html body .glance ul.g5 .gsub{flex-basis:100%;font-size:var(--fs-caption);color:var(--ink3);line-height:1.45;margin-top:.125rem}
html body .glance ul.g5 .gsub a{color:var(--ink2);text-decoration:underline;text-underline-offset:2px;display:inline-block;min-height:24px}
html body .glance ul.g5 .gsub.ok{color:var(--ok)}html body .glance ul.g5 .gsub.warn{color:var(--warn-ink)}
html body .glance .cond{display:flex;flex-wrap:wrap;gap:.25rem .375rem}
html body .glance .cond a,html body .glance .cond span{display:inline-flex;align-items:center;gap:.25rem;min-height:28px;padding:0 .55rem;border-radius:999px;font-size:.75rem;font-weight:700;text-decoration:none;color:var(--ink2);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
html body .glance .cond .ok{color:var(--ok);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ok) 45%,transparent)}
html body .glance .cond .ok::before{content:"✓";font-weight:900}
html body .glance .cond .q{color:var(--ink3)}
html body .glance .cond .q::before{content:"?";font-weight:900}
html body .glance .stat{margin:.625rem 0 0;font-size:var(--fs-caption);color:var(--ink2);line-height:1.55;padding:.5rem .75rem;border-radius:var(--r-sm);background:var(--soft)}
html body .glance .stat.ok{color:var(--ok)}html body .glance .stat.warn{color:var(--warn-ink)}html body .glance .stat.end{color:var(--ink3)}
html body .glance .stat.alert{color:var(--danger)}html body .glance .stat.alert b{margin-right:.375rem}
html body .glance .stat a{color:inherit;text-decoration:underline;text-underline-offset:2px;display:inline-block;min-height:24px}
@media(min-width:760px){html body .glance ul.g5{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1.5rem}html body .glance ul.g5 li:nth-child(2){border-top:0}html body .glance ul.g5 li:last-child{grid-column:1/-1}}
html body .jteaser{display:none}   /* R9 「지금 할 일」 티저는 요약 ④행 보조문으로 */

/* R3 「내 조건」 칩 — 요약 아래 한 줄(가로 넘김) · 선택 → 해당 항목 강조·앞 정렬 · 비해당은 제목만 · 정보 없으면 「확인 중」 */
html body .cond-bar{display:flex;gap:.375rem;overflow-x:auto;scrollbar-width:none;margin:0 -16px .75rem;padding:.125rem 16px .25rem;-webkit-overflow-scrolling:touch}
html body .cond-bar::-webkit-scrollbar{display:none}
html body .cond-bar .jg{display:contents}
html body .cond-bar .jg>span{display:none}
html body .cond-bar button{flex:0 0 auto;display:inline-flex;align-items:center;gap:.25rem;min-height:36px;padding:0 .75rem;border-radius:999px;border:0;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);font:inherit;font-size:var(--fs-caption);font-weight:700;color:var(--ink2);cursor:pointer;white-space:nowrap}
html body .cond-bar button[aria-pressed="true"]{background:var(--ink);color:var(--on-point);box-shadow:none}
html body .cond-bar button.nodata[aria-pressed="true"]::after{content:"· 아직 몰라요";font-weight:600;opacity:.8;font-size:.75rem}
html body .cond-hint{margin:0 0 .375rem;font-size:var(--fs-caption);line-height:1.5;color:var(--ink2)}
html body .cond-bar .cl{flex:0 0 auto;display:inline-flex;align-items:center;font-size:var(--fs-caption);font-weight:800;color:var(--ink3);margin-right:.125rem}
@media(min-width:641px){html body .cond-bar{margin-left:0;margin-right:0;padding-left:0;padding-right:0;flex-wrap:wrap}}
html body .rows li.con{background:var(--soft);margin:0 -.5rem;padding-left:.5rem;padding-right:.5rem;border-radius:var(--r-sm);border-top-color:transparent}
html body .rows li.con+li{border-top-color:transparent}
html body .rows li.dim .bd,html body .rows li.dim .lk{display:none}
html body .rows li.dim{opacity:.7}

/* R4 목차 띠 — 요약 카드 바로 아래 · 묶음 4개 + 「더」 · 왼쪽 「↑요약」 · 모바일은 아이콘+짧은 글자 */
html body .dnav{display:flex;gap:.25rem;overflow-x:auto;scrollbar-width:none;padding:.375rem 0;margin:0 0 1rem;background:var(--surface);border-bottom:1px solid var(--line)}
html body .dnav a{flex:0 0 auto;display:inline-flex;align-items:center;gap:.3rem;min-height:40px;padding:0 .8rem;border-radius:999px;font-size:var(--fs-caption);font-weight:700;background:var(--surface);color:var(--ink2);box-shadow:inset 0 0 0 1px var(--line);text-decoration:none;white-space:nowrap}
html body .dnav a svg{width:16px;height:16px;flex:0 0 auto}
html body .dnav a .s{display:none}
html body .dnav a.on{background:var(--ink);color:var(--on-point);box-shadow:none}
html body .dnav a.up{background:transparent;box-shadow:none;color:var(--ink3);padding-left:.25rem}
html body .dnav a.up::before{content:"↑";font-weight:900;margin-right:.1rem}
@media(max-width:640px){
  html body .dnav{margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px;gap:.2rem}
  html body .dnav a{padding:0 .6rem;min-height:44px}
  html body .dnav a .l{display:none}html body .dnav a .s{display:inline}
  html body .dnav a.up .s{display:inline}
}
html body main .grp{scroll-margin-top:7.25rem}
html body main .sec,html body main details.sec,html body .wx{scroll-margin-top:7.25rem}
@media(max-width:640px){html body main .grp,html body main .sec,html body main details.sec,html body .wx{scroll-margin-top:7.5rem}}

/* R2 묶음 4개(가는 길·할 것·조심할 것·머무름) 펼침 · 소개·문의·즐기는 법·개최일·프로그램 접힘(제목+첫 줄) · 목록은 3개 + 더 보기(DETAIL_UX_JS) */
html body .grp{margin:0 0 1.5rem}
html body .grp>.grph{display:flex;align-items:center;gap:.5rem;margin:0 0 .625rem;padding:0 .125rem;font-size:var(--fs-h3);font-weight:800;letter-spacing:-.02em;color:var(--ink)}
html body .grp>.grph svg{width:22px;height:22px;color:var(--point-deep);flex:0 0 auto}
html body .grp>.grph .q{font-size:var(--fs-caption);font-weight:600;color:var(--ink3);letter-spacing:0;margin-left:.25rem}
html body .grp>.sec:last-child,html body .grp>details.sec:last-child{margin-bottom:0}
html body .grp#more>.grph{font-size:var(--fs-small);color:var(--ink3)}
html body details.fold summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;column-gap:.625rem;padding:.875rem 0;min-height:52px}
html body details.fold summary::-webkit-details-marker{display:none}
html body details.fold summary h2{margin:0;font-size:var(--fs-body);display:flex;align-items:baseline;gap:.5rem}
html body details.fold summary .pv{font-size:var(--fs-caption);color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
html body details.fold[open] summary .pv{display:none}
html body details.fold .chev{width:10px;height:10px;border-right:2px solid var(--ink3);border-bottom:2px solid var(--ink3);transform:rotate(45deg) translateY(-2px);transition:transform .15s var(--ease)}
html body details.fold[open] .chev{transform:rotate(-135deg) translateY(2px)}
html body details.fold{padding:0 1.25rem;margin:0 0 .75rem}
html body details.fold[open]{padding-bottom:1rem}
@media(max-width:640px){html body details.fold summary{grid-template-columns:minmax(0,1fr) auto}html body details.fold summary .pv{grid-column:1;grid-row:2}html body details.fold summary .chev{grid-row:1/span 2}}
html body .morebtn,html body .dmore{display:flex;align-items:center;justify-content:center;width:100%;min-height:44px;margin:.5rem 0 0;border:0;border-radius:var(--r-md);background:var(--soft);font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--ink);cursor:pointer}
html body .rows>li.srcsum{display:block;grid-template-columns:none;padding:.5rem 0 0;margin-top:.25rem;border-top:1px dashed var(--line);font-size:var(--fs-caption);color:var(--ink3);line-height:1.5}
html body .rows>li.srcsum a{color:inherit;text-decoration:underline;text-underline-offset:2px;display:inline-block;min-height:24px}

/* R9 개최일(「더」 묶음 안 접힘) 목록 */
html body ul.sesslist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.375rem}
html body ul.sesslist li{display:flex;gap:.625rem;align-items:center;flex-wrap:wrap;font-size:var(--fs-small)}html body ul.sesslist li.past{color:var(--ink3)}html body ul.sesslist li span{color:var(--ink2);font-size:var(--fs-caption)}

/* R6 「할 것」 하위 탭(즐길거리·전후 들를 곳·걷기) — DETAIL_UX_JS 가 h3.subh 를 탭으로 바꾼다(자바스크립트 없으면 h3 그대로) */
html body #program .subtabs{display:flex;gap:.25rem;overflow-x:auto;scrollbar-width:none;margin:0 0 .5rem;border-bottom:1px solid var(--line)}
html body #program .subtabs button{flex:0 0 auto;min-height:44px;padding:0 .75rem;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;background:transparent;font:inherit;font-size:var(--fs-small);font-weight:600;color:var(--ink3);cursor:pointer;white-space:nowrap}
html body #program .subtabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--ink);font-weight:800}
html body #program .subtabs button .n{font-size:.75rem;color:var(--ink3);margin-left:.25rem}
html body #program [data-subpanel][hidden]{display:none}
html body #program [data-subpanel] h3.subh{display:none}
html body #program [data-subpanel] p.hint{margin:0 0 .5rem}
/* R6 선정 이유 배지(제목 옆 「고페스타 선정」 + 팝오버 1줄) — 배지 문구에 편집 기준 미노출 */
html body .fh .pickb{position:relative;display:inline-flex;align-items:center;min-height:28px;padding:0 .6rem;border-radius:999px;background:var(--soft);color:var(--point-ink-on-tint);font-size:.75rem;font-weight:800;border:0;cursor:pointer;font-family:inherit}
html body .fh .pickb .pop{display:none;position:absolute;left:0;top:calc(100% + 6px);z-index:5;min-width:14rem;max-width:min(80vw,22rem);padding:.5rem .75rem;border-radius:var(--r-sm);background:var(--ink);color:var(--on-point);font-size:var(--fs-caption);font-weight:500;line-height:1.45;text-align:left;white-space:normal}
html body .fh .pickb[aria-expanded="true"] .pop,html body .fh .pickb:hover .pop{display:block}

/* R8 출처·메타 축소 — 항목 ↗만 · 섹션 끝 1줄 집계(위 .srcsum) · 제목 줄 배지 1개 + 툴팁 · 피드백은 섹션 끝 작은 글자 1개 + 페이지 끝 1곳 */
html body .rows .rb .src{display:none}
html body .fh-line .vdate.one{display:inline-flex;align-items:center;min-height:24px;gap:.25rem;border-bottom:1px dotted var(--ink3);cursor:help}
html body .fb.mini{justify-content:flex-end;margin:.25rem 0 0}
html body .fb.mini button{min-height:32px;padding:0 .5rem;background:transparent;box-shadow:none;color:var(--ink3);font-size:.75rem;font-weight:600;text-decoration:underline;text-underline-offset:2px}
html body .fb.page{justify-content:center;gap:.75rem;margin:1.5rem 0 .5rem}
html body .fb.page .q{flex-basis:100%;text-align:center;font-size:var(--fs-caption);color:var(--ink3);margin-bottom:.125rem}

/* R10 빈 섹션·저정보 — 포스터 없으면 96px 이니셜 · 「확인되지 않았습니다」 소제목 대신 섹션 끝 1줄 */
@media(min-width:640px){html body .dtop:has(.poster .namecard){grid-template-columns:96px minmax(0,1fr);gap:1rem}}
html body .dtop .poster:has(.namecard){aspect-ratio:1;width:96px;height:96px;border-radius:var(--r-md)}
html body .dtop .poster:has(.namecard) .namecard span{font-size:1.5rem;-webkit-line-clamp:2}
html body .sec p.chkline{margin:.625rem 0 0;padding:.5rem .75rem;border-radius:var(--r-sm);background:var(--soft);font-size:var(--fs-caption);color:var(--ink2);line-height:1.5}
html body .sec p.chkline b{color:var(--ink3);font-weight:700;margin-right:.375rem}

/* R13 여정 체크리스트 — D-day 기준 「지금 단계」 1개만 펼침 · 접힌 단계는 첫 항목 1줄 미리보기 · 칩은 R3 으로 이동 */
html body .journey .jchips{display:none}
html body .journey ol.jst[data-staged]>li>b{display:flex;align-items:center;gap:.5rem;min-height:44px;margin:0;cursor:pointer;padding-right:1.25rem;position:relative}
html body .journey ol.jst[data-staged]>li>b::after{content:"";position:absolute;right:.25rem;top:50%;width:8px;height:8px;border-right:1.5px solid var(--ink3);border-bottom:1.5px solid var(--ink3);transform:translateY(-70%) rotate(45deg)}
html body .journey ol.jst[data-staged]>li.open>b::after{transform:translateY(-30%) rotate(-135deg)}
html body .journey ol.jst[data-staged]>li>b .jnowtag{font-size:.75rem;font-weight:800;color:var(--on-point);background:var(--fill);border-radius:999px;padding:.05rem .5rem}
html body .journey ol.jst[data-staged]>li:not(.open)>*:not(b):not(.jpv){display:none}
html body .journey ol.jst[data-staged]>li>.jpv{display:block;font-size:var(--fs-caption);color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0 0 .25rem}
html body .journey ol.jst[data-staged]>li.open>.jpv{display:none}
html body .journey ol.jst[data-staged]>li.open{background:var(--soft);margin:0 -.75rem;padding-left:2.875rem;padding-right:.75rem;border-radius:var(--r-sm);border-top-color:transparent}
html body .journey ol.jst[data-staged]>li.open::before{left:.75rem}
html body .journey ol.jst[data-staged]>li.open+li{border-top-color:transparent}
html body .journey .jsum{font-size:var(--fs-caption)}

/* ── 모바일 축제 상세 하단 바 + 헤더 로고 줄만 고정 (디자인 허브 hub-h-2026-10-09 · R7·R4 · 회장 확정 조건 2026-10-09) ──
   폭 640px 이하 · 상세(data-page="festival") 만. 토큰만(hex 0). 원본: 허브
   R7: 하단 고정 바 52px + safe-area · 버튼 3개(가는 길·일정 알림·공유 — 공식 사이트는 「가는 길」 안) · 스크롤 300px 뒤 표시 · 입력 포커스·광고가 보일 때 숨김
       · 흰 바탕·얇은 윗선 · 바 안에 「광고」 요소 없음 · 첫 화면 버튼 2행(.fh .actions)·본문 끝 공식 홈페이지 상자(.sidebox)·「↑」(.totop) 는 모바일에서 숨김(↑요약은 목차 띠 안).
   R4: 상단 메뉴 헤더는 로고 줄(52px)만 고정 — 메뉴 줄은 페이지 위에 겹쳐 있다가 스크롤하면 사라진다(자리 이동 없음). 고정 영역 110+55=165 → 52+56=108px. */
.mbar,.mbar-pop,.mbar-msg{display:none}
@media(max-width:640px){
  /* R4 헤더: 로고 줄만 고정 */
  html body[data-page="festival"] .top{top:0;overflow:visible}
  html body[data-page="festival"] .top .wrap{grid-template-areas:"brand aux";grid-template-rows:var(--row1h)}
  html body[data-page="festival"] .top .nav{position:absolute;left:0;right:0;top:var(--row1h);padding:0 16px;background:var(--surface);border-bottom:1px solid var(--line);transition:opacity .15s var(--ease),transform .15s var(--ease)}
  html body[data-page="festival"] .top.scrolled .nav{opacity:0;pointer-events:none;transform:translateY(-6px)}
  html body[data-page="festival"] .top+main.wrap{margin-top:var(--navh)}
  html body[data-page="festival"] .dnav{top:var(--row1h)}
  /* R7 첫 화면 버튼 2행·본문 끝 상자·↑ 숨김 */
  html body[data-page="festival"] .fh .actions,html body[data-page="festival"] .sidebox,html body[data-page="festival"] .totop{display:none}
  html body[data-page="festival"] .fh:has(.fthumb)>.sharemsg{grid-column:1/-1}
  html body[data-page="festival"].mbar-on{padding-bottom:calc(52px + env(safe-area-inset-bottom,0px))}
  html body[data-page="festival"] .mbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:0 0 env(safe-area-inset-bottom,0px);background:var(--surface);border-top:1px solid var(--line);transform:translateY(110%);transition:transform .2s var(--ease)}
  html body[data-page="festival"] .mbar.show{transform:none}
  html body[data-page="festival"] .mbar>button,html body[data-page="festival"] .mbar>a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;height:52px;min-height:52px;border:0;background:transparent;font:inherit;font-size:.75rem;font-weight:700;color:var(--ink2);text-decoration:none;cursor:pointer;min-width:0}
  html body[data-page="festival"] .mbar>button svg,html body[data-page="festival"] .mbar>a svg{width:22px;height:22px;color:var(--ink)}
  html body[data-page="festival"] .mbar>button[aria-expanded="true"]{color:var(--point-ink)}
  html body[data-page="festival"] .mbar>button[aria-expanded="true"] svg{color:var(--point-deep)}
  html body[data-page="festival"] .mbar-pop{position:fixed;left:12px;right:12px;bottom:calc(60px + env(safe-area-inset-bottom,0px));z-index:41;display:none;flex-direction:column;gap:.25rem;padding:.5rem;border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow-card),0 0 0 1px var(--line)}
  html body[data-page="festival"] .mbar-pop.show{display:flex}
  html body[data-page="festival"] .mbar-pop a{display:flex;align-items:center;gap:.625rem;min-height:48px;padding:0 .75rem;border-radius:var(--r-sm);font-size:var(--fs-small);font-weight:700;color:var(--ink);text-decoration:none;background:var(--soft)}
  html body[data-page="festival"] .mbar-pop a svg{width:20px;height:20px;color:var(--point-deep);flex:0 0 auto}
  html body[data-page="festival"] .mbar-pop a span{font-size:var(--fs-caption);font-weight:500;color:var(--ink3);margin-left:auto;white-space:nowrap}
  html body[data-page="festival"] .mbar-msg{position:fixed;left:12px;right:12px;bottom:calc(60px + env(safe-area-inset-bottom,0px));z-index:41;display:none;padding:.625rem .875rem;border-radius:var(--r-sm);background:var(--ink);color:var(--on-point);font-size:var(--fs-caption);font-weight:600;line-height:1.4}
  html body[data-page="festival"] .mbar-msg.show{display:block}
}

/* ── 축제 상세 2차 개편 CSS 층 (디자인 허브 hub-i-2026-10-29 · 회장 「위 내용 모두를 수정하자」 2026-10-29) ─────────────
   모든 폭. render.py 가 ds 층 맨 끝(mobile_g.css 뒤)에 붙인다(apply-i.py). 토큰만(hex 0). 근거·전후 = audits/gofesta/2026-10-29/detail-ux2/REPORT.md
   글자 체계(F1~F4): 크기 4단 = 제목(fs-h2·fs-h3) · 항목 제목 fs-body · 본문 fs-small · 보조 fs-caption(이보다 작은 글자 없음)
                     회색 2단 = 본문·제목 --ink · 보조 --ink2 (--ink3 글자 없앰) · 굵기 3단 = 400 · 700 · 800(제목만)
   `body[...]:not(#_)` = ID 한 단 무게 — 층마다 쌓인 `.main .sec h3.subh .hint`·`#program .rows.plist2 .pm` 같은 규칙을 한 번에 이기게(!important 없이). */

/* F1 보조 글자 = fs-caption(13.8px) · --ink2 — 12.75px·11.7px 글자를 없앤다 */
html body[data-page="festival"]:not(#_) main :is(.ch,.hint,.srcsum,.src,.src a,.src span,.fb button,.lk a,.pwho,.jm,.jnowtag,.jwhen,.pickb,.vdate,.fh-meta,.gsub,.tag,.jk,.jpv,.cap,.half i,.half .rn,.note,.grph .q,.cl){font-size:var(--fs-caption);letter-spacing:0}
html body[data-page="festival"]:not(#_) main :is(.hint,.srcsum,.src,.jsum,.note,.grph .q,.fh-meta,.jpv,.fb button,.half i,.half .rn){color:var(--ink2);font-weight:400}
html body[data-page="festival"]:not(#_) main .ch{color:var(--ink2);font-weight:700}
html body[data-page="festival"]:not(#_) main :is(.glance,.focus,.wx)>.ch{color:var(--point-ink);font-weight:800}
html body[data-page="festival"]:not(#_) main .rows li .kd{font-size:var(--fs-caption);font-weight:700}
html body[data-page="festival"]:not(#_) .gfcrumb .sep{font-size:var(--fs-caption)}

/* F2 본문 = fs-small(15.9px) · --ink · 400 · 줄 간격 1.65 — 체크리스트 답(14.9px)·목록 설명(18px)·소개(18px)를 한 크기로 */
html body[data-page="festival"]:not(#_) main :is(.intro p,.rb .bd,.ja,.jgd p,.jline,.care li span,.care .lead,.verdict span,.chkline,.ptips p,.jaskbox p,.cond-hint,.morestay){font-size:var(--fs-small);line-height:1.65;color:var(--ink);font-weight:400}
html body[data-page="festival"]:not(#_) main .rb .pm{font-size:var(--fs-small);font-weight:700;color:var(--ink2)}
html body[data-page="festival"]:not(#_) main .gv{font-size:var(--fs-small)}
html body[data-page="festival"]:not(#_) main .gv .chk{font-size:var(--fs-caption);font-weight:400;color:var(--ink2)}

/* F3 항목 제목 = fs-body(18px) · 700 · --ink — 체크리스트 질문(15.4px)·단계 이름(15.9px)·목록 제목(18px 600)을 한 단으로 */
html body[data-page="festival"]:not(#_) main :is(.rb .hd,.rb .hd a,.rb .hd span,ol.jst>li>b,.jtodo>b,.focus li b,.side-sum .nm){font-size:var(--fs-body);font-weight:700;line-height:1.45;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .journey .jq{font-size:var(--fs-small);font-weight:700;line-height:1.5;color:var(--ink)}   /* 체크리스트 질문 = 본문 굵게(질문·답이 한 쌍 · 18px 이면 줄이 넘쳐 길어진다) */
html body[data-page="festival"]:not(#_) main .care li b{font-size:var(--fs-small);font-weight:800}
html body[data-page="festival"]:not(#_) main .sec h3.subh,html body[data-page="festival"]:not(#_) main h3.subh2{font-size:var(--fs-body);font-weight:800;color:var(--ink);line-height:1.4}
html body[data-page="festival"]:not(#_) main .sec h3.subh .hint{display:block;margin-top:.125rem}

/* F4 제목 = 묶음 fs-h2 > 안쪽 fs-h3 (뒤집혀 있던 21.25 < 25.5 바로잡기) · h1 은 fs-h1 */
html body[data-page="festival"]:not(#_) main .fh h1{font-size:var(--fs-h1);font-weight:800;line-height:1.2}
html body[data-page="festival"]:not(#_) main .grp>h2.grph{font-size:var(--fs-h2);font-weight:800;line-height:1.3;display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .5rem}
html body[data-page="festival"]:not(#_) main .grp>h2.grph .n{font-size:var(--fs-small);font-weight:700;color:var(--ink2)}
html body[data-page="festival"]:not(#_) main .grp>h2.grph .q{flex-basis:100%}
html body[data-page="festival"]:not(#_) main .grp .sec>h2,html body[data-page="festival"]:not(#_) main .care>h2{font-size:var(--fs-h3);font-weight:800;line-height:1.35}
html body[data-page="festival"]:not(#_) main .grp .sec>h2 .n{font-size:var(--fs-small);color:var(--ink2)}

/* 6 「내 조건」(고르는 칩)과 목차 띠(이동)를 다르게: 목차는 밑줄 탭 */
html body .dnav a{border-radius:0;box-shadow:none;background:transparent;color:var(--ink2);border-bottom:2px solid transparent;min-height:var(--p-target-min)}
html body .dnav a.on{background:transparent;color:var(--ink);border-bottom-color:var(--point-ink);box-shadow:none}
html body .dnav a.up{min-height:var(--p-target-min)}
html body .cond-bar button{box-shadow:inset 0 0 0 1.5px var(--ink2);color:var(--ink);min-height:var(--p-target-min)}
html body .cond-hint{font-weight:700}

/* 7 요약 카드 「누구와 가나요」 = 누르는 버튼 */
html body .glance .cond button{display:inline-flex;align-items:center;gap:.25rem;min-height:36px;padding:0 .7rem;border:0;border-radius:999px;font:inherit;font-size:var(--fs-caption);font-weight:700;cursor:pointer;background:var(--surface);color:var(--ink2);box-shadow:inset 0 0 0 1px var(--line)}
html body .glance .cond button.ok{color:var(--ok);box-shadow:inset 0 0 0 1px var(--ok)}
html body .glance .cond button.ok::before{content:"✓";font-weight:900}
html body .glance .cond button.q::before{content:"?";font-weight:900}
html body .glance .cond button:hover{background:var(--soft)}

/* 3 「아직 모르는 것」 물어볼 곳 상자 */
html body .jaskbox{margin:0 0 1rem;padding:.875rem 1rem;border-radius:var(--r-md);background:var(--soft)}
html body .jaskbox p{margin:0 0 .625rem}
html body .jabs{display:flex;flex-wrap:wrap;gap:.5rem}
html body .jab{display:inline-flex;align-items:center;min-height:var(--p-target-min);padding:0 1rem;border-radius:999px;background:var(--surface);color:var(--ink);font-weight:700;text-decoration:none;box-shadow:inset 0 0 0 1px var(--line)}
html body .jab.tel{background:var(--ink);color:var(--on-point);box-shadow:none}

/* 9 「다녀온 사람들이 많이 궁금해한 것」 = 바로가기 줄 */
html body .focus ol{list-style:none;margin:.5rem 0 .25rem;padding:0;display:grid;gap:.5rem}
html body .focus li a{display:flex;align-items:center;gap:.5rem;min-height:var(--p-target-min);padding:.5rem .875rem;border-radius:var(--r-md);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);text-decoration:none;color:var(--ink)}
html body .focus li a span{flex:1 1 auto;font-size:var(--fs-caption);color:var(--ink2)}
html body .focus li a i{font-style:normal;font-weight:800;color:var(--point-ink)}

/* 2 휴대폰 첫 화면 「공식 사이트」 버튼 · PC 는 버튼 줄이 있어 숨김 */
html body .mofficial{display:none}
@media(max-width:640px){html body .mofficial{display:inline-flex;align-items:center;justify-content:center;min-height:var(--p-target-min);margin:.5rem 0 0;padding:0 1.25rem;border-radius:999px;background:var(--point-ink);color:var(--on-point);font-weight:800;text-decoration:none}}

/* 15 숙소 더 찾기 · 11 이벤트 참여 방법 */
html body .morestay{margin:.5rem 0 0}
html body .morestay a,html body main .rb .lk a{display:inline-flex;align-items:center;min-height:var(--p-target-min);font-weight:700}

/* 12 손가락으로 누르는 곳 44px — 독립 버튼은 높이, 글 속 출처 링크는 누르는 영역만 넓힌다 */
html body[data-page="festival"]:not(#_) main :is(.fb button,.morebtn,.subtabs button,.jgo,.gv a){min-height:var(--p-target-min)}
html body[data-page="festival"]:not(#_) main .fb button{padding:0 .875rem}
html body[data-page="festival"]:not(#_) main :is(.src a,.srcsum a,.gsub a){display:inline-block;padding:.75rem 0;margin:-.75rem 0}
html body[data-page="festival"]:not(#_) main .gv a,html body[data-page="festival"]:not(#_) main .jgo{display:inline-flex;align-items:center}

/* 1 휴대폰: 제목 → 광고 → 한눈에 보기 → 내 조건 → 목차 → 소개(전부) → 본문 (소개는 줄이지 않고 자리만 · 회장 2026-10-28 「소개 전부」 유지) */
@media(max-width:640px){
  html body[data-page="festival"]:not(#_) main.wrap{display:flex;flex-direction:column}
  html body[data-page="festival"]:not(#_) main.wrap>.dtop,html body[data-page="festival"]:not(#_) main.wrap>.dtop>.dmain{display:contents}
  html body[data-page="festival"]:not(#_) main.wrap>aside.ad-top{order:1;margin-top:.75rem}
  html body[data-page="festival"]:not(#_) main.wrap>.dtop~*{order:2}
  html body[data-page="festival"]:not(#_) main.wrap>.dtop .intro,html body[data-page="festival"]:not(#_) main.wrap>.ad-moved{order:3}
  html body[data-page="festival"]:not(#_) main.wrap>.two,html body[data-page="festival"]:not(#_) main.wrap>.two~*{order:4}
  html body[data-page="festival"]:not(#_) main.wrap>.dtop .intro{margin:1rem 0}
}

/* 16 PC 옆 칸: 광고 아래 따라 내려오는 요약 */
html body .side-sum{display:none}
@media(min-width:1024px){
  html body .side-sum{display:block;position:sticky;top:calc(var(--navh,64px) + 1rem);margin-top:1rem;padding:1rem 1.125rem;border-radius:var(--r-lg);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
  html body .side-sum dl{display:grid;grid-template-columns:auto 1fr;gap:.375rem .75rem;margin:.625rem 0 .75rem;font-size:var(--fs-small)}
  html body .side-sum dt{color:var(--ink2);font-weight:700}
  html body .side-sum dd{margin:0;color:var(--ink)}
  html body .side-sum .up{font-size:var(--fs-caption);font-weight:700;color:var(--point-ink);text-decoration:none}
}

/* F 보정 — 즐길거리(#program) 칸의 ID 규칙·남은 흐린 회색(--ink3)·500/600 굵기 */
html body[data-page="festival"]:not(#_) #program .rows.plist2 :is(.pm,.bd,.bd.px){font-size:var(--fs-small);font-weight:400;color:var(--ink)}
html body[data-page="festival"]:not(#_) #program .rows.plist2 .pm{font-weight:700;color:var(--ink2)}
html body[data-page="festival"]:not(#_) #program .rows.plist2 .pwho{font-size:var(--fs-caption)}
html body[data-page="festival"]:not(#_) main :is(.jgd b,.ta,.ptips b,.care li b){font-size:var(--fs-small)}
html body[data-page="festival"]:not(#_) main :is(.jab,.mofficial){font-size:var(--fs-small)}
html body[data-page="festival"]:not(#_) main h3.subh{font-size:var(--fs-body);font-weight:800;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .sec p:not([class]){font-size:var(--fs-small);line-height:1.65}
html body[data-page="festival"]:not(#_) main :is(.chk,.gv .chk,.fb .q,.cond button.q,.chkline b,.cl,.jwhen,.vdate,.subtabs button,.gv .tag:not(.live),.src a,.gsub,.dnav .s,.half i,.ext){color:var(--ink2)}
html body[data-page="festival"]:not(#_) .gfcrumb .cur{color:var(--ink2)}
html body[data-page="festival"]:not(#_) main :is(.vdate,.chk,.gv .chk){font-weight:400}
html body[data-page="festival"]:not(#_) main :is(.subtabs button,.morebtn){font-weight:700}
html body[data-page="festival"]:not(#_) main :is(.gv .tag,.jnowtag,.lk .ext){font-size:var(--fs-caption)}
html body[data-page="festival"]:not(#_) main :is(.wx li>b,#program .subtabs button .n){font-size:var(--fs-small)}
html body[data-page="festival"]:not(#_) main #program .subtabs button .n{font-size:var(--fs-caption)}
html body[data-page="festival"]:not(#_) main .fh-line .tag{color:var(--ink2)}
html body[data-page="festival"] .gfcrumb a{display:inline-flex;align-items:center;min-width:var(--p-target-floor);min-height:var(--p-target-floor);padding:.25rem .125rem}
html body .side-sum dd a{display:inline-flex;align-items:center;min-height:var(--p-target-floor)}

/* 3-2 체크리스트 한 줄 = 질문(줄 전체) + 답 줄(앞에 작은 꼬리표) — 꼬리표 칸(약 105px)이 화면 반을 비우던 2칸 격자를 없앤다(회장 2026-10-29 휴대폰 화면) */
html body[data-page="festival"]:not(#_) main .journey ul.ji>li{display:block;padding:.625rem 0}
html body[data-page="festival"]:not(#_) main .journey ul.ji>li>.jq{display:block}
html body[data-page="festival"]:not(#_) main .journey ul.ji>li>.ja{display:block;margin-top:.25rem;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .journey ul.ji>li>.ja>.jm{display:inline-flex;align-items:center;vertical-align:.0625rem;margin-right:.375rem;padding:.0625rem .5rem;min-height:0;line-height:1.4;font-size:var(--fs-caption);white-space:nowrap}
html body[data-page="festival"]:not(#_) main .journey ul.ji>li.jrain>.ja{margin-bottom:.25rem}
html body[data-page="festival"]:not(#_) main .journey ul.ji>li>.ja .jgo{display:inline;min-height:0;padding:.75rem 0;margin:-.75rem 0}
/* 3-3 휴대폰: 단계 번호만큼(약 50px) 안쪽 글 전체를 들여 쓰던 것 → 번호는 제목 줄에만, 질문·답·안내 상자는 단계 폭 전체 */
@media(max-width:640px){
  html body[data-page="festival"]:not(#_) main .journey ol.jst[data-staged]>li.open{padding-left:.75rem}
  html body[data-page="festival"]:not(#_) main .journey ol.jst[data-staged]>li>b{padding-left:2.125rem}
  html body[data-page="festival"]:not(#_) main .journey ol.jst[data-staged]>li.open::before{left:.75rem;top:1.125rem}
}
/* 3-4 「알아 두면 좋아요」(비 오는 날) 줄: 요령 목록·실내 명소·안내도 글자 체계로(13.5px 흐린 회색 → 본문) · 들여쓰기 최소 */
html body[data-page="festival"]:not(#_) main .journey li.jrain .jtips{padding-left:1.125rem;margin:.375rem 0 .25rem;font-size:var(--fs-small);line-height:1.65;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .journey li.jrain :is(.jin,.jc){display:block;font-size:var(--fs-caption);color:var(--ink2)}
html body[data-page="festival"]:not(#_) main .journey li.jrain .jin{font-weight:700;margin-top:.5rem}
html body[data-page="festival"]:not(#_) main .journey li.jrain .jtips>li{list-style:disc;margin:.25rem 0}
html body[data-page="festival"]:not(#_) main .journey li.jrain .jtips>li::marker{color:var(--ink2)}
/* hub-j-2026-10-31 · 축제 상세 「미리 알면 덜 고생해요」·방문객 반응 버튼·다녀온 뒤 단계 고르기 (blueprint/44 F·H)
   방향: clean-minimal-beige-light-mode — 따뜻한 모래색 겹 · 얇은 선 · 절제된 강조색 · 진한 그림자 없음. 색·반경·그림자는 토큰(var)만. 아이콘 Lucide(ISC). */
html body[data-page="festival"]:not(#_) main .tipsbox{display:grid;gap:.875rem;padding:0;background:none;border:0;box-shadow:none}
html body[data-page="festival"]:not(#_) main .tb-card{background:var(--p-color-paper-warm);border:1px solid var(--line);border-radius:var(--r-lg);padding:1.25rem 1.125rem 1rem;position:relative;overflow:hidden}
html body[data-page="festival"]:not(#_) main .tb-card::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--point);opacity:.85}
html body[data-page="festival"]:not(#_) main .tb-good{background:var(--soft)}html body[data-page="festival"]:not(#_) main .tb-good::before{background:var(--ok)}
html body[data-page="festival"]:not(#_) main .tb-eye{margin:0 0 .25rem;font-size:var(--fs-caption);font-weight:600;letter-spacing:.02em;color:var(--ink3)}
html body[data-page="festival"]:not(#_) main .tb-h{margin:0 0 .875rem;font-size:var(--fs-h3);font-weight:700;line-height:1.35;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .tb-list{list-style:none;margin:0;padding:0;display:grid;gap:.75rem;counter-reset:tb}
html body[data-page="festival"]:not(#_) main .tb-item{position:relative;padding:.875rem .875rem .75rem;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md)}
html body[data-page="festival"]:not(#_) main .tb-tag{display:inline-flex;align-items:center;height:1.5rem;padding:0 .625rem;margin-bottom:.5rem;border-radius:var(--p-radius-pill);background:var(--p-color-sand-200);color:var(--ink2);font-size:var(--fs-caption);font-weight:600}
html body[data-page="festival"]:not(#_) main .tb-scene{margin:0;font-size:var(--fs-body);font-weight:600;line-height:1.6;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .tb-fix{display:grid;grid-template-columns:auto 1fr;gap:.5rem;align-items:baseline;margin-top:.625rem;padding:.625rem .75rem;background:var(--p-color-sand-100);border-radius:var(--r-sm);border-left:3px solid var(--ok)}
html body[data-page="festival"]:not(#_) main .tb-fixl{font-size:var(--fs-caption);font-weight:700;color:var(--ok);white-space:nowrap}
html body[data-page="festival"]:not(#_) main .tb-fix p{margin:0;font-size:var(--fs-small);line-height:1.55;color:var(--ink2)}
html body[data-page="festival"]:not(#_) main .tb-meta{display:flex;align-items:center;gap:.375rem;margin:.5rem 0 0;font-size:var(--fs-caption);color:var(--ink3)}
html body[data-page="festival"]:not(#_) main .tb-dot{width:.375rem;height:.375rem;border-radius:50%;background:var(--ink3);opacity:.6}
html body[data-page="festival"]:not(#_) main .tb-good .tb-list{gap:.5rem}
html body[data-page="festival"]:not(#_) main .tb-good-item{padding:.25rem 0 .25rem .875rem;border-left:2px solid var(--line)}
html body[data-page="festival"]:not(#_) main .tb-good-item .tb-scene{font-weight:500;font-size:var(--fs-lead)}
html body[data-page="festival"]:not(#_) main .tb-note{margin:0 .25rem;font-size:var(--fs-caption);color:var(--ink3)}
/* 방문객 반응(질문마다) — 답 아래 작은 글자 버튼 · 아이콘 = 글자 크기(1em) · 묻는 문장 없음(회장 2026-10-31 「공간을 효율적으로」) */
html body[data-page="festival"]:not(#_) main .qfb{display:flex;flex-wrap:wrap;gap:.375rem;margin-top:.375rem}
html body[data-page="festival"]:not(#_) main .qfb-b{display:inline-flex;align-items:center;gap:.25rem;min-height:1.75rem;padding:0 .5rem;border:1px solid var(--line);border-radius:var(--p-radius-pill);background:var(--surface);color:var(--ink3);font:inherit;font-size:var(--fs-caption);line-height:1;cursor:pointer;transition:color var(--p-motion-duration-fast) var(--ease),border-color var(--p-motion-duration-fast) var(--ease),background var(--p-motion-duration-fast) var(--ease)}
html body[data-page="festival"]:not(#_) main .qfb-b svg{width:1em;height:1em;flex:none}
html body[data-page="festival"]:not(#_) main .qfb-b.up:hover,html body[data-page="festival"]:not(#_) main .qfb-b.up:focus-visible{color:var(--ok);border-color:var(--ok)}
html body[data-page="festival"]:not(#_) main .qfb-b.down:hover,html body[data-page="festival"]:not(#_) main .qfb-b.down:focus-visible{color:var(--ink);border-color:var(--ink3)}
/* 두 번째부터: 손 아이콘만 · 답 오른쪽 한 줄(꼬리표 · 답 · 아이콘) · 아이콘 = 글자 크기 */
html body[data-page="festival"]:not(#_) main .journey ul.ji>li>.ja.jq-inline{display:flex;align-items:flex-start;gap:.375rem}
html body[data-page="festival"]:not(#_) main .ja.jq-inline>.jm{flex:none}
html body[data-page="festival"]:not(#_) main .ja.jq-inline>.jat{flex:1;min-width:0}
html body[data-page="festival"]:not(#_) main .qfb.mini{display:inline-flex;flex:none;gap:.125rem;margin:0 0 0 auto}
html body[data-page="festival"]:not(#_) main .qfb-i{display:inline-grid;place-items:center;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:var(--p-radius-pill);background:none;color:var(--ink3);font-size:var(--fs-small);cursor:pointer;transition:color var(--p-motion-duration-fast) var(--ease),background var(--p-motion-duration-fast) var(--ease)}
html body[data-page="festival"]:not(#_) main .qfb-i svg{width:1em;height:1em}
html body[data-page="festival"]:not(#_) main .qfb-i{position:relative}html body[data-page="festival"]:not(#_) main .qfb-i::before{content:"";position:absolute;inset:-.4375rem -.125rem}   /* 보이는 크기는 글자만 · 누르는 자리는 44px(손가락) */
html body[data-page="festival"]:not(#_) main .qfb-i.up:hover,html body[data-page="festival"]:not(#_) main .qfb-i.up:focus-visible{color:var(--ok);background:var(--p-color-sand-100)}
html body[data-page="festival"]:not(#_) main .qfb-i.down:hover,html body[data-page="festival"]:not(#_) main .qfb-i.down:focus-visible{color:var(--ink);background:var(--p-color-sand-100)}
html body[data-page="festival"]:not(#_) main .qfb.mini .fbthanks{font-size:var(--fs-caption);color:var(--ok);white-space:nowrap}
html body[data-page="festival"]:not(#_) main .qfb .fbthanks{font-size:var(--fs-caption);color:var(--ok)}
/* 다녀온 뒤 — 가장 힘들었던 일 하나 고르기(문장 버튼 · 중학생 수준) */
html body[data-page="festival"]:not(#_) main .jafter{margin-top:1rem;padding:1rem 1rem .875rem;background:var(--p-color-paper-warm);border:1px solid var(--line);border-radius:var(--r-lg)}
html body[data-page="festival"]:not(#_) main .ja-eye{margin:0;font-size:var(--fs-caption);font-weight:600;color:var(--ink3)}
html body[data-page="festival"]:not(#_) main .ja-q{margin:.125rem 0 .75rem;font-size:var(--fs-body);font-weight:700;color:var(--ink)}
html body[data-page="festival"]:not(#_) main .ja-grid{display:grid;grid-template-columns:1fr;gap:.375rem}
html body[data-page="festival"]:not(#_) main .ja-grid button{min-height:var(--p-target-min);padding:.375rem .75rem;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);color:var(--ink);font:inherit;font-size:var(--fs-small);text-align:left;cursor:pointer}
html body[data-page="festival"]:not(#_) main .ja-grid button:last-child{color:var(--ink2)}
html body[data-page="festival"]:not(#_) main .ja-grid button:hover,html body[data-page="festival"]:not(#_) main .ja-grid button:focus-visible{border-color:var(--point);background:var(--soft)}
html body[data-page="festival"]:not(#_) main .ja-f{margin:.625rem 0 0;font-size:var(--fs-caption);color:var(--ink3)}
@media (min-width:768px){html body[data-page="festival"]:not(#_) main .ja-grid{grid-template-columns:repeat(2,minmax(0,1fr))}html body[data-page="festival"]:not(#_) main .tipsbox{grid-template-columns:3fr 2fr;align-items:start}html body[data-page="festival"]:not(#_) main .tb-note{grid-column:1/-1}}
@media (prefers-reduced-motion:reduce){html body[data-page="festival"]:not(#_) main :is(.qfb-b,.qfb-i){transition:none}}
/* 회장 2026-10-31 「박스 한쪽 테두리 색선은 촌스럽다」 — 카드 위 색 띠 · 피하는 법 왼쪽 선 · 좋아한 것 왼쪽 선 제거 */
html body[data-page="festival"]:not(#_) main .tb-card::before{display:none}
html body[data-page="festival"]:not(#_) main .tb-fix{border-left:0}
html body[data-page="festival"]:not(#_) main .tb-good-item{border-left:0;padding-left:0}
/* 회장 2026-10-31: 첫 질문 글자 버튼도 아이콘과 같은 자리(답 오른쪽) · 칸별 「정보가 맞아요 / 정보가 달라요」(모든 칸 글자) · 페이지 끝 「알려 주기」 한 줄 */
html body[data-page="festival"]:not(#_) main .qfb.mini.lab{gap:.25rem}
html body[data-page="festival"]:not(#_) main .qfb.mini.lab .qfb-i{width:auto;padding:0 .5rem;gap:.25rem;display:inline-flex;align-items:center;border:1px solid var(--line);background:var(--surface);font-size:var(--fs-caption);color:var(--ink3);white-space:nowrap}
html body[data-page="festival"]:not(#_) main .qfb.mini.lab .qfb-i svg{width:1em;height:1em;font-size:var(--fs-small)}
html body[data-page="festival"]:not(#_) main .sfb{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.375rem;margin-top:.75rem}
html body[data-page="festival"]:not(#_) main .sfb-b{display:inline-flex;align-items:center;gap:.25rem;min-height:1.75rem;padding:0 .625rem;border:1px solid var(--line);border-radius:var(--p-radius-pill);background:var(--surface);color:var(--ink3);font:inherit;font-size:var(--fs-caption);line-height:1;cursor:pointer;position:relative;transition:color var(--p-motion-duration-fast) var(--ease),border-color var(--p-motion-duration-fast) var(--ease)}
html body[data-page="festival"]:not(#_) main .sfb-b::before{content:"";position:absolute;inset:-.5rem 0}
html body[data-page="festival"]:not(#_) main .sfb-b svg{width:1em;height:1em;flex:none}
html body[data-page="festival"]:not(#_) main .sfb-b.up:hover,html body[data-page="festival"]:not(#_) main .sfb-b.up:focus-visible{color:var(--ok);border-color:var(--ok)}
html body[data-page="festival"]:not(#_) main .sfb-b.down:hover,html body[data-page="festival"]:not(#_) main .sfb-b.down:focus-visible{color:var(--ink);border-color:var(--ink3)}
html body[data-page="festival"]:not(#_) main .sfb .fbthanks{font-size:var(--fs-caption);color:var(--ok)}
@media (min-width:768px){html body[data-page="festival"]:not(#_) main section.sec:has(>.sfb){position:relative}html body[data-page="festival"]:not(#_) main section.sec>.sfb{position:absolute;top:1rem;right:1rem;margin:0}html body[data-page="festival"]:not(#_) main section.sec:has(>.sfb)>h2{padding-right:16rem}}
html body[data-page="festival"]:not(#_) main .fixask{margin:1.5rem 0 .5rem;font-size:var(--fs-small);color:var(--ink2);text-align:center}
html body[data-page="festival"]:not(#_) main .fixask a{font-weight:600;color:var(--ink);text-decoration:underline;text-underline-offset:.2em}
html body[data-page="festival"]:not(#_) main .journey ul.ji>li>.ja.jq-inline:has(.qfb.lab){flex-wrap:wrap}
html body[data-page="festival"]:not(#_) main .ja.jq-inline:has(.qfb.lab)>.jat{flex:1 1 7rem}
html body[data-page="festival"]:not(#_) main .qfb.mini.lab{margin-left:auto}
/* 메뉴 쪽 B안 「잡지 표지 + 이번 호 목차 + 번호 목록」 — hub-menu-b-2026-10-31 (회장 「B안으로 가자」 2026-10-31).
   원형: 디자인 허브 audits/gofesta/2026-10-31/menu-cards (시안 B · 방향 image-first-grid-layout — 표지만 포스터 무대).
   카드 문법 1종(mk): 메뉴마다 다른 것은 --kt(메뉴 톤 잉크) · --kt-mid · --kt-tint 와 숫자 칩 내용뿐. 허브 토큰 var() 만 · 하드코딩 색 0. */
.ms{margin:.25rem 0 2rem}
.ms .mono{font-variant-numeric:tabular-nums}

/* 판 띠(가칭 「○월 ○일 판 · 새 카드 · 바뀐 소식」) */
.ms-iss{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.25rem 1.25rem;align-self:flex-start;padding:.375rem .875rem;border-radius:var(--r-md);border:1px solid color-mix(in srgb,var(--paper) 35%,transparent);font-size:var(--fs-small)}
.ms-iss b{font-weight:800}
.ms-iss-d b{font-size:var(--fs-body)}
.ms-iss-n b{margin-left:.25rem;color:var(--kt-mid);font-size:var(--fs-body)}

/* 표지 */
.ms-cover{position:relative;overflow:hidden;isolation:isolate;border-radius:var(--r-lg);background:var(--p-color-ink-950);color:var(--paper)}
.ms-cv-bg{position:absolute;inset:-48px;z-index:-2;background:center/cover no-repeat;filter:blur(32px) saturate(1.2);opacity:.55}
.ms-cover::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,color-mix(in srgb,var(--p-color-ink-950) 88%,transparent) 0,color-mix(in srgb,var(--p-color-ink-950) 40%,transparent) 100%)}
.ms-cv-in{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:1.5rem;align-items:end;min-height:440px;padding:1.5rem;
  background:linear-gradient(color-mix(in srgb,var(--paper) 18%,transparent),color-mix(in srgb,var(--paper) 18%,transparent)) 58.33% 0/1px 100% no-repeat}
.ms-cv-txt{display:flex;flex-direction:column;gap:.875rem;min-width:0}
.ms-cv-k{margin:0;font-size:var(--fs-small);font-weight:800;color:var(--kt-mid)}
.ms-cover h2{margin:0;font-size:clamp(2.125rem,1.4rem + 3.2vw,3.5rem);line-height:1.08;letter-spacing:-.04em;font-weight:900;color:var(--paper);word-break:keep-all;text-wrap:balance}
.ms-cv-s{margin:-.25rem 0 0;font-size:var(--fs-small);color:color-mix(in srgb,var(--paper) 85%,var(--p-color-ink-950));word-break:keep-all}
.ms-cv-card{display:grid;gap:.375rem;padding:1rem 1.125rem;border-radius:var(--r-md);background:color-mix(in srgb,var(--paper) 10%,transparent);border:1px solid color-mix(in srgb,var(--paper) 28%,transparent);color:var(--paper);text-decoration:none}
.ms-cv-card:hover .ms-cv-h,.ms-cv-card:focus-visible .ms-cv-h{text-decoration:underline;text-underline-offset:3px}
.ms-cv-card:focus-visible{outline:3px solid var(--kt-mid);outline-offset:2px}
.ms-cv-l{font-size:var(--fs-caption);font-weight:800;color:var(--kt-mid)}
.ms-cv-h{font-size:var(--fs-h2);line-height:1.25;letter-spacing:-.02em;word-break:keep-all}
.ms-cv-num{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:.125rem .5rem;justify-self:start;padding:.25rem .75rem;border-radius:var(--r-sm);background:var(--kt-mid);color:var(--p-color-ink-950);font-size:var(--fs-caption);font-weight:700}
.ms-cv-num b{font-size:var(--fs-lead);font-weight:900}
.ms-cv-f{font-size:var(--fs-small);color:color-mix(in srgb,var(--paper) 85%,var(--p-color-ink-950))}
.ms-cover .mono{color:inherit;font-size:inherit}
.ms-cv-img img{display:block;width:100%;height:auto;max-height:400px;object-fit:contain;border-radius:var(--r-sm)}

/* 이번 호 목차 — 다섯 메뉴 관통 */
.ms-idx{margin:1.25rem 0 .5rem}
.ms-idx-k{margin:0 0 .5rem;font-size:var(--fs-small);font-weight:800;color:var(--ink)}
.ms-toc{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.5rem}
.ms-t-a{display:flex;flex-direction:column;gap:.125rem;height:100%;box-sizing:border-box;padding:.625rem .75rem;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line);color:var(--ink);text-decoration:none;min-height:var(--p-target-min)}
.ms-t-no{font-size:.75rem;font-weight:800;color:var(--ink3)}
.ms-t-m{font-size:var(--fs-caption);font-weight:800;color:var(--kt)}
.ms-t-h{font-size:var(--fs-small);font-weight:700;line-height:1.35;word-break:keep-all}
.ms-t-f{font-size:.75rem;color:var(--ink3)}
.ms-t-here{margin-top:.25rem;font-size:.75rem;font-weight:800;color:var(--kt)}
.ms-t-i.on .ms-t-a{background:var(--kt-tint);border-color:var(--kt);box-shadow:inset 0 0 0 1px var(--kt)}

/* 장(章) */
.ms-ch{margin-top:2rem;padding-top:1rem;border-top:2px solid var(--ink)}
.ms-ch-h{margin-bottom:1rem}
.ms-ch-k{display:flex;align-items:center;gap:.625rem;margin:0;font-size:var(--fs-small);font-weight:800;color:var(--ink2)}
.ms-ch-no{font-size:2.25rem;font-weight:900;line-height:1;color:var(--kt);letter-spacing:-.04em}
.ms-ch h2{margin:.375rem 0 0;font-size:var(--fs-h2);line-height:1.25;letter-spacing:-.03em;word-break:keep-all}
.ms-ch-s{margin:.375rem 0 0;font-size:var(--fs-small);color:var(--ink2);word-break:keep-all}
.ms-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}

/* 카드(mk) — 번호 · 포스터 작은 칸 · 글 · 펼치는 이야기 */
.mk{position:relative;display:grid;grid-template-columns:2.75rem 120px minmax(0,1fr);grid-template-areas:"no media body" "no media rest" "act act act";column-gap:.875rem;padding:1rem 1rem 0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);min-width:0;box-shadow:var(--shadow-card)}
.mk-link{display:contents;color:inherit;text-decoration:none}
.mk-no{grid-area:no;font-size:1.75rem;font-weight:900;line-height:1;color:var(--kt);letter-spacing:-.04em}
.mk-media{grid-area:media;position:relative;height:160px;overflow:hidden;border-radius:var(--r-sm);background:var(--kt-tint)}
.mk-blur{position:absolute;inset:-24px;background:center/cover no-repeat;filter:blur(20px) saturate(1.15);opacity:.6}
.mk-media img{position:relative;display:block;width:100%;height:100%;object-fit:contain}
.mk-typo{display:flex;align-items:flex-end;padding:.5rem}
.mk-typo span{font-size:var(--fs-small);font-weight:900;line-height:1.25;letter-spacing:-.02em;color:var(--kt);word-break:keep-all;overflow-wrap:anywhere}
.mk-body{grid-area:body;display:flex;flex-direction:column;gap:.5rem;min-width:0}
.mk-tag{margin:0;display:flex;flex-wrap:wrap;gap:.25rem .375rem;align-items:center;font-size:var(--fs-caption);font-weight:800}
.mk-menu{color:var(--kt)}
.mk-story{color:var(--ink2);font-weight:700}
.mk-story::before{content:"·";margin-right:.375rem;color:var(--ink3)}
.mk-new{margin-left:auto;padding:.125rem .5rem;border-radius:var(--p-radius-pill);background:var(--kt);color:var(--paper);font-size:.75rem;font-weight:800}
.mk h3{margin:0;font-size:var(--fs-body);line-height:1.35;letter-spacing:-.02em;color:var(--ink);word-break:keep-all;text-wrap:balance}
.mk-link:hover h3,.mk-link:focus-visible h3{text-decoration:underline;text-underline-offset:3px}
.mk-num{margin:0;display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:.125rem .5rem;align-self:flex-start;padding:.375rem .75rem;border-radius:var(--r-sm);background:var(--kt-tint);color:var(--kt)}
.mk-num b{font-size:var(--fs-lead);font-weight:900;letter-spacing:-.02em}
.mk-num span{font-size:var(--fs-caption);font-weight:700}
.mk-rest{grid-area:rest;display:flex;flex-direction:column;gap:.5rem;padding:.625rem 0 0;min-width:0}
.mk-more summary{display:flex;align-items:center;min-height:var(--p-target-min);font-size:var(--fs-small);font-weight:800;color:var(--kt);cursor:pointer;list-style-position:inside}
.mk-more[open] summary{min-height:2rem;margin-bottom:.25rem}
.mk-st{margin:0;font-size:var(--fs-small);line-height:1.65;color:var(--ink2);word-break:keep-all}
.mk-tip,.mk-rs,.mk-cw{margin:.5rem 0 0;font-size:var(--fs-caption);line-height:1.55;color:var(--ink2);word-break:keep-all}
.mk-tip b,.mk-rs b,.mk-cw b{margin-right:.375rem;color:var(--kt);font-weight:800}
.mk-fx{padding-top:.625rem;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.125rem .625rem;align-items:baseline;font-size:var(--fs-caption);color:var(--ink3)}
.mk-fx b{flex-basis:100%;font-size:var(--fs-small);color:var(--ink)}
.mk-fx .mono{font-size:inherit}
.mk-fx .dday:not(:empty){font-weight:800;color:var(--kt)}
.mk-ok{margin:0;display:flex;align-items:center;gap:.25rem;font-size:var(--fs-caption);font-weight:700;color:var(--ok)}
.mk-ok svg{width:1rem;height:1rem;flex:0 0 auto}
.mk-act{grid-area:act;display:flex;gap:.5rem;padding:.75rem 0 1rem}
.mk-go,.mk-share{display:inline-flex;align-items:center;min-height:var(--p-target-min);padding:0 1rem;border-radius:var(--r-sm);font:inherit;font-size:var(--fs-small);font-weight:800;text-decoration:none;cursor:pointer}
.mk-go{background:var(--kt);color:var(--paper)}
.mk-share{margin-left:auto;background:var(--surface);color:var(--ink);border:1px solid var(--line)}
.mk-go:focus-visible,.mk-share:focus-visible,.mk-link:focus-visible,.ms-t-a:focus-visible,.ms-next:focus-visible{outline:3px solid var(--kt);outline-offset:2px}

/* 바뀐 소식(가칭) — 같은 문법의 변형 */
.mk.mk-chg{display:block;padding:1rem;border:2px dashed var(--kt-mid);box-shadow:none}
.mk-chg h3{font-size:var(--fs-h3)}
.mk-alert{padding:.125rem .5rem;border-radius:var(--p-radius-pill);background:var(--kt);color:var(--paper)}
.mk-chg ul{list-style:none;margin:.75rem 0 0;padding:0;display:grid;gap:.625rem}
.mk-chg li a{display:grid;gap:.125rem;padding:.625rem .75rem;border-radius:var(--r-sm);background:var(--kt-tint);color:var(--ink);text-decoration:none;min-height:var(--p-target-min)}
.mk-chg li b{font-size:var(--fs-small)}
.mk-chg li span{font-size:var(--fs-caption);color:var(--ink2);word-break:keep-all}
.mk-chg li .mono{color:var(--kt);font-weight:800}

/* 다음 장 */
.ms-next{display:grid;gap:.125rem;margin-top:1rem;padding:1rem 1.25rem;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line);color:var(--ink);text-decoration:none}   /* 한쪽 굵은 선 없음(회장 2026-11-01) */
.ms-n-l{font-size:var(--fs-caption);font-weight:800;color:var(--kt)}
.ms-n-h{font-size:var(--fs-h3);font-weight:800;letter-spacing:-.02em;word-break:keep-all}
.ms-n-f{font-size:var(--fs-small);color:var(--ink2)}

/* 지난 카드 돌아보기 — 같은 카드 문법 · 도장 · 단추 없음 */
.mk.past{grid-template-areas:"no media body" "no media rest"}
.mk-pst{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:.25rem .5rem;margin:-1rem -1rem .75rem;padding:.5rem 1rem;border-radius:var(--r-lg) var(--r-lg) 0 0;font-size:.75rem;font-weight:700;color:var(--ink2);background:var(--sunken);border-bottom:1px solid var(--line)}
.mk-pst b{color:var(--ink)}
.mk.past .mk-rest{padding-bottom:1rem}

@media(max-width:52rem){
  .ms-cv-in{grid-template-columns:1fr;min-height:0;padding:1.25rem;gap:1rem;background:none}
  .ms-cv-img{order:-1}
  .ms-cv-img img{max-height:280px;margin:0 auto;width:auto;max-width:100%}
  .ms-toc{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:.5rem;margin:0 -16px;padding:0 16px .25rem;scroll-padding-inline:16px;scrollbar-width:none}
  .ms-toc::-webkit-scrollbar{display:none}
  .ms-t-i{flex:0 0 44%;scroll-snap-align:start}
  .ms-list{grid-template-columns:1fr}
  .mk{grid-template-columns:2rem 92px minmax(0,1fr);grid-template-areas:"no media body" "no rest rest" "act act act";column-gap:.75rem}
  .mk.past{grid-template-areas:"no media body" "no rest rest"}
  .mk-media{height:124px}
  .mk-no{font-size:1.375rem}
}
.ms-np .ms-cv-in{grid-template-columns:1fr;min-height:0;background:none}
/* 매거진 — 이야기는 펼친 채(회장 2026-10-31 「읽을거리가 되어야」) */
.ms-cv-st{font-size:var(--fs-body);line-height:1.7;color:color-mix(in srgb,var(--paper) 92%,var(--p-color-ink-950));word-break:keep-all}
.mk-rest .mk-st{font-size:var(--fs-body);line-height:1.75;color:var(--ink)}
.mk h3{font-size:var(--fs-h3)}

/* 2026-11-01 회장 지적 반영 — (1) 광고 아래 여백: 사이트 공통 section 위 여백(약 60px)이 표지에 들어오던 것 0 으로
   (4) 번호 열 들여쓰기 없앰: 번호는 포스터 왼쪽 위 작은 표지 · 글은 카드 폭 전체 */
.ms{margin-top:0}
.ms .ms-cover{margin-top:0}
.mk{grid-template-columns:120px minmax(0,1fr);grid-template-areas:"media body" "rest rest" "act act";column-gap:1rem}
.mk.past{grid-template-areas:"media body" "rest rest"}
.mk-no{display:none}
.mk-media[data-no]::before{content:attr(data-no);position:absolute;top:.375rem;left:.375rem;z-index:1;min-width:1.75rem;height:1.75rem;padding:0 .375rem;box-sizing:border-box;border-radius:var(--r-sm);background:var(--kt);color:var(--paper);font-size:var(--fs-caption);font-weight:900;line-height:1.75rem;text-align:center;font-variant-numeric:tabular-nums}
.mk-rest{padding-top:.75rem}
@media(max-width:52rem){
  .mk{grid-template-columns:96px minmax(0,1fr);grid-template-areas:"media body" "rest rest" "act act";column-gap:.75rem}
  .mk.past{grid-template-areas:"media body" "rest rest"}
}
.ms-t-th{font-size:var(--fs-caption);font-weight:700;line-height:1.35;color:var(--kt);word-break:keep-all}   /* 목차: 메뉴 이름 줄 · 주제 줄 나눔(회장 2026-11-01) */
/* 메뉴별 독립 매거진(회장 2026-11-01) — 매거진 이름·호는 표지 맨 위 한 줄에만 */
.ms-mast{margin:0;padding-bottom:.625rem;border-bottom:1px solid color-mix(in srgb,var(--paper) 30%,transparent);font-size:var(--fs-small);font-weight:800;letter-spacing:.02em;color:var(--paper)}
.ms-toc4{grid-template-columns:repeat(4,minmax(0,1fr))}
.ms-n-t{font-size:var(--fs-caption);font-weight:800;color:var(--kt)}
/* 이번 주 다른 매거진 · 카드 표지 — 매거진 이름 / 주제 / 첫 이야기·축제 이름 구분(회장 2026-11-01) */
.ms-t-a{gap:0;padding:.75rem .875rem}
.ms-t-m{align-self:flex-start;padding:.1875rem .5rem;border-radius:var(--p-radius-pill);background:var(--kt-tint);color:var(--kt);font-size:.75rem;font-weight:800;line-height:1.3}
.ms-t-th{margin-top:.5rem;font-size:var(--fs-body);font-weight:800;line-height:1.3;letter-spacing:-.02em;color:var(--ink)}
.ms-t-first{display:flex;flex-direction:column;gap:.125rem;margin-top:.625rem;padding-top:.5rem;border-top:1px solid var(--line)}
.ms-t-h{font-size:var(--fs-caption);font-weight:600;line-height:1.4;color:var(--ink2)}
.ms-t-f{font-size:.75rem;color:var(--ink3)}
.mk-tag{gap:.375rem}
.mk-menu{padding:.125rem .5rem;border-radius:var(--p-radius-pill);background:var(--kt-tint);color:var(--kt);font-size:.75rem}
.mk-story{color:var(--ink3);font-weight:700}
.mk-story::before{content:none}
/* 축제 이름·기간 줄을 카드 맨 위로(회장 2026-11-01) */
.mk{grid-template-areas:"fx fx" "media body" "rest rest" "act act"}
.mk.past{grid-template-areas:"pst pst" "fx fx" "media body" "rest rest"}
.mk-pst{grid-area:pst}
.mk-fx{grid-area:fx;margin:0 0 .875rem;padding:0 0 .625rem;border-top:0;border-bottom:1px solid var(--line)}
.mk-fx b{flex-basis:auto;margin-right:.25rem;font-size:var(--fs-body);font-weight:800;color:var(--ink)}
@media(max-width:52rem){.mk{grid-template-areas:"fx fx" "media body" "rest rest" "act act"}.mk.past{grid-template-areas:"pst pst" "fx fx" "media body" "rest rest"}.mk-fx b{flex-basis:100%}}
/* 메뉴별 축제 목록 — 포스터 없는 칸에는 축제 이름만(지역·날짜·gofesta 글자는 옆 본문과 중복 · 회장 2026-11-01) */
main.mrows .namecard.typo .tp-k,main.mrows .namecard.typo .tp-d,main.mrows .namecard.typo .tp-m{display:none}
main.mrows .namecard.typo{justify-content:center}
/* 메뉴별 축제 목록 — 포스터 없는 칸 축제 이름 글자 70%(회장 2026-11-01) · 휴대폰은 최소 글자 크기(12px)까지만 */
@media(min-width:641px){main.mrows .namecard.typo .tp-n{font-size:calc(clamp(1.125rem,2.1vw,1.5rem) * .7)}}
@media(max-width:640px){html body main.mrows .grid .card .namecard.typo .tp-n{font-size:var(--p-type-floor)}}
/* 축제 목록 포스터 없는 칸: 위쪽 정렬 · 이름 줄바꿈 규칙(render._name_wbr 의 <wbr> 자리에서만 · 회장 2026-11-01) */
main.mrows .namecard.typo{justify-content:flex-start}
.namecard.typo .tp-n{word-break:keep-all;overflow-wrap:break-word}
@media(max-width:640px){html body main.mrows .grid .card .namecard.typo{padding:.375rem .3125rem;justify-content:flex-start}}
/* 메뉴 쪽 제목 아이콘 크기(구 SPOT_CSS 에 있던 규칙 — B안으로 바꾸며 빠져 아이콘이 151~222px 로 커짐 · 2026-11-01 회장 지적) */
.dhead.mdh>div:first-child::before{display:none}
.mdh .mhead h1{display:flex;align-items:center;gap:.5rem}
.mdh .mhead h1>svg{width:1em;height:1em;flex:0 0 auto;color:var(--tone,var(--point-deep))}
/* 축제 목록 포스터 없는 칸: 위쪽 색 선과 이름 사이 5px(회장 2026-11-01) */
main.mrows .namecard.typo{padding-top:calc(.875rem + 3px + 5px)}
@media(max-width:640px){html body main.mrows .grid .card .namecard.typo{padding-top:calc(.375rem + 3px + 5px)}html body main.mrows .grid .card .namecard.typo::after{top:.375rem;left:.3125rem;right:.3125rem}}
/* 메뉴 다섯 쪽 제목 아이콘은 모두 같은 크기 · 본문보다 지나치게 크지 않게 20px/26px(회장 2026-11-01 두 차례) */
main.mrows .mdh .mhead h1>svg{width:20px;height:20px}
@media(min-width:641px){main.mrows .mdh .mhead h1>svg{width:26px;height:26px}}   /* main.mrows: 이벤트 쪽 게시판 CSS(뒤에 붙음)의 1em 규칙보다 앞서게 */
/* 메뉴 다섯 쪽 제목 글자도 아이콘과 맞춰 줄임 · 모두 같은 크기(회장 2026-11-01 「글자 크기도 맞게 같이 줄여야지」) */
html body main.mrows .mdh .mhead h1{font-size:23px;line-height:1.25}
@media(min-width:641px){html body main.mrows .mdh .mhead h1{font-size:32px}}
/* 51 C(2026-11-06 · 회장 결정 「축제 매거진답게」): 이번 호를 열며 · 이번 호 특집 블록 · 특집 쪽(mf) — B안 매거진 문법(mk)의 긴 글 판 하나.
   허브 토큰 var() 만 · 하드코딩 색 0 · 메뉴 톤은 --kt · --kt-mid · --kt-tint 그대로. 공개 스위치 magazine_feature 가 켜졌을 때만 나온다. */
.ms-open{margin:1.25rem 0 0;padding:1rem 1.125rem;border-left:4px solid var(--kt);background:var(--kt-tint);border-radius:0 var(--r-md) var(--r-md) 0}
.ms-open-k{margin:0 0 .375rem;font-size:var(--fs-caption);font-weight:800;color:var(--kt)}
.ms-open-t{margin:0;font-size:var(--fs-body);line-height:1.75;color:var(--ink);word-break:keep-all}
.ms-feat{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:1.25rem;margin:1rem 0 0;padding:1rem;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-card);color:var(--ink);text-decoration:none;min-height:var(--p-target-min)}
.ms-feat:hover .ms-feat-h,.ms-feat:focus-visible .ms-feat-h{text-decoration:underline;text-underline-offset:3px}
.ms-feat:focus-visible{outline:3px solid var(--kt);outline-offset:2px}
.ms-feat-img{display:block;overflow:hidden;border-radius:var(--r-md);background:var(--kt-tint)}
.ms-feat-img img{display:block;width:100%;height:100%;max-height:360px;object-fit:contain}
.ms-feat-txt{display:flex;flex-direction:column;gap:.5rem;min-width:0}
.ms-feat-k{align-self:flex-start;padding:.1875rem .625rem;border-radius:var(--p-radius-pill);background:var(--kt);color:var(--paper);font-size:var(--fs-caption);font-weight:800}
.ms-feat-h{font-size:var(--fs-h2);line-height:1.25;letter-spacing:-.03em;word-break:keep-all;text-wrap:balance}
.ms-feat-s{font-size:var(--fs-body);font-weight:700;color:var(--ink2);word-break:keep-all}
.ms-feat-p{font-size:var(--fs-body);line-height:1.75;color:var(--ink);word-break:keep-all}
.ms-feat-f{font-size:var(--fs-small);color:var(--ink2)}
.ms-feat-go{margin-top:auto;font-size:var(--fs-body);font-weight:800;color:var(--kt)}
@media(max-width:640px){.ms-feat{grid-template-columns:1fr}.ms-feat-img img{max-height:300px}}
/* 특집 쪽 — 읽기 폭 40rem · 본문 글자 크게 · 장 머리는 매거진 장(ms-ch)과 같은 굵은 위선 */
.mf{max-width:40rem;margin:1rem auto 3rem;color:var(--ink)}
.mf .mono{font-variant-numeric:tabular-nums}
.mf-mast{margin:0 0 .75rem;font-size:var(--fs-small);font-weight:800;color:var(--kt)}
.mf-mast a{color:inherit}
.mf-h{margin:0;font-size:var(--fs-h1);line-height:1.2;letter-spacing:-.035em;font-weight:900;word-break:keep-all;text-wrap:balance}
.mf-s{margin:.625rem 0 0;font-size:var(--fs-lead);line-height:1.5;color:var(--ink2);word-break:keep-all}
.mf-f{display:flex;flex-wrap:wrap;gap:.25rem .75rem;margin:1rem 0 0;padding:.625rem 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:var(--fs-small);color:var(--ink2)}
.mf-f b{color:var(--ink)}
.mf-img{margin:1.25rem 0 0}
.mf-img img{display:block;width:100%;height:auto;max-height:640px;object-fit:contain;border-radius:var(--r-md);background:var(--kt-tint)}
.mf-img figcaption{margin-top:.375rem;font-size:var(--fs-caption);color:var(--ink3)}
.mf p{font-size:var(--fs-lead);line-height:1.85;word-break:keep-all}
.mf-lead p:first-child{font-weight:600}
.mf h2{margin:2.25rem 0 .75rem;padding-top:.75rem;border-top:2px solid var(--ink);font-size:var(--fs-h3);line-height:1.3;letter-spacing:-.02em}
.mf-q{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-left:4px solid var(--kt)}
.mf-q p{margin:0;font-size:var(--fs-lead);font-weight:700;line-height:1.7}
.mf-q footer{margin-top:.375rem;font-size:var(--fs-small);color:var(--ink2)}
.mf-q footer a{color:inherit}
.mf-crowd{margin:0;padding-left:1.25rem;font-size:var(--fs-body);line-height:1.75}
.mf-know{margin:2.25rem 0 0;padding:1rem 1.125rem;border-radius:var(--r-lg);background:var(--sunken);border:1px solid var(--line)}
.mf-know h2{margin:0 0 .75rem;padding:0;border:0}
.mf-know dl{margin:0;display:grid;gap:.5rem}
.mf-kr{display:grid;grid-template-columns:8rem minmax(0,1fr);gap:.75rem}
.mf-kr dt{font-size:var(--fs-small);font-weight:800;color:var(--ink2)}
.mf-kr dd{margin:0;font-size:var(--fs-body);word-break:keep-all}
.mf .mf-more{margin:.75rem 0 0;font-size:var(--fs-small)}
.mf-oth ul{margin:0;padding:0;list-style:none;display:grid;gap:.5rem}
.mf-oth a{display:flex;align-items:center;min-height:var(--p-target-min);padding:0 .875rem;border-radius:var(--r-md);background:var(--kt-tint);color:var(--kt);font-weight:800;text-decoration:none}
.mf-src ol{margin:0;padding-left:1.25rem;font-size:var(--fs-small);line-height:1.9}
.mf-src a{color:var(--ink2)}
.mf .mf-note{font-size:var(--fs-small);color:var(--ink2)}
.mf .mf-back{margin-top:2rem;font-size:var(--fs-body);font-weight:800}
.mf-back a{color:var(--kt)}
@media(max-width:640px){.mf p{font-size:var(--fs-body)}.mf-kr{grid-template-columns:1fr;gap:.125rem}.mf-q p{font-size:var(--fs-body)}}
/* 특집 쪽 누르는 높이(허브 gate-snapshot 시안 실측 2026-11-06: 출처·상세 보기·돌아가기 링크 19px < 24px) */
.mf-src li{margin:.125rem 0}
.mf-src a,.mf .mf-more a,.mf .mf-back a,.mf-q footer a,.mf-mast a{display:inline-flex;align-items:center;min-height:var(--p-target-min);padding:.125rem 0}

.pastlink{margin:-.75rem 0 1.25rem;text-align:right}
.pastlink a{display:inline-flex;align-items:center;gap:.25rem;min-height:36px;padding:0 .75rem;border-radius:var(--r-sm);font-size:var(--fs-small);font-weight:700;text-decoration:none;background:var(--soft);color:var(--ink)}
.pasthd h2{margin:1.5rem 0 .75rem;font-size:1.125rem;letter-spacing:-.02em}
.pastgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}   /* B안 카드는 2열(회장 2026-10-31) */
@media(max-width:52rem){.pastgrid{grid-template-columns:1fr}}
.spot.past .pst{display:flex;flex-wrap:wrap;gap:.25rem .5rem;padding:.5rem 1rem;font-size:.75rem;font-weight:700;color:var(--ink2);background:var(--sunken);border-bottom:1px solid var(--line)}
.spot.past .pst b{color:var(--ink)}
.pgnav{display:flex;justify-content:space-between;gap:.5rem;margin:1.5rem 0}
.pgnav a{min-height:40px;display:inline-flex;align-items:center;padding:0 1rem;border-radius:var(--r-sm);background:var(--soft);color:var(--ink);font-weight:700;text-decoration:none}

/* 메뉴 목록 — 질문 + 답 낮은 행 · 언제 갈 수 있나 묶음(회장 2026-11-07) · 색은 토큰만 */
.lgroups{display:grid;gap:1.75rem;margin:1rem 0 2rem}
.lgrp{margin:0}.lgrp[hidden]{display:none}
.lgrp h2{display:flex;align-items:baseline;gap:.5rem;font-size:var(--fs-h3);margin:0;color:var(--ink)}
.lgrp h2 .lcnt{font-style:normal;color:var(--point-ink);font-size:var(--fs-body)}
.lsub{margin:.25rem 0 .75rem;font-size:var(--fs-small);color:var(--ink3);display:flex;flex-wrap:wrap;gap:.375rem}
.lsub .lwhen{color:var(--ink2);font-weight:700}.lsub .lwhen:empty{display:none}
.lrows{display:grid;grid-template-columns:1fr;gap:.625rem}
@media(min-width:900px){.lrows{grid-template-columns:1fr 1fr}}
.lrow{display:grid;grid-template-columns:4.5rem 1fr;gap:.75rem;padding:.75rem;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);color:var(--ink);text-decoration:none;align-items:start}
.lrow[hidden],.lrow.fold{display:none}
.lrow:hover{border-color:var(--tone-mid)}
.lrow:focus-visible{outline:2px solid var(--point);outline-offset:2px}
.lthumb{position:relative;display:block;width:4.5rem;aspect-ratio:5/7;border-radius:var(--r-sm);background:var(--sunken);overflow:hidden}
.lthumb img{width:100%;height:100%;object-fit:contain;display:block}
.lthumb .pyear{position:absolute;left:0;right:0;bottom:0;top:auto;display:block;padding:.0625rem 0;text-align:center;font-size:var(--fs-caption);line-height:1.3;background:var(--ink);color:var(--paper);border-radius:0;margin:0}
.lthumb .pyear .pl{display:none}.lthumb .pyear .pls{display:inline}
.lthumb.none{display:flex;align-items:center;justify-content:center;background:var(--tone-tint);color:var(--tone)}
.lthumb.none svg{width:1.75rem;height:1.75rem}
.lbody{display:flex;flex-direction:column;gap:.25rem;min-width:0}
.ltop{display:flex;gap:.5rem;align-items:flex-start;justify-content:space-between}
.lname{font-size:var(--fs-body);line-height:1.35;font-weight:800}
.ltop .dday{flex:0 0 auto}
.lmeta{display:flex;flex-wrap:wrap;gap:.25rem .5rem;font-size:var(--fs-caption);color:var(--ink2);align-items:center}
.lmeta .tag{margin:0}
.lbadge,.llast{font-size:var(--fs-caption);font-weight:700;padding:.0625rem .5rem;border-radius:var(--r-sm);background:var(--tone-tint);color:var(--point-ink-on-tint)}
.llast{background:var(--accent-wash);color:var(--warn-ink)}.llast[hidden]{display:none}
.lqa{margin:.25rem 0 0;display:grid;grid-template-columns:max-content 1fr;gap:.1875rem .75rem;font-size:var(--fs-small);line-height:1.45}
.lq{display:contents}
.lq dt{color:var(--ink3);font-weight:600}
.lq dd{margin:0;color:var(--ink);min-width:0;overflow-wrap:anywhere}
.lq .jm{font-size:var(--fs-caption)}.lq .lsee{color:var(--ink3)}
.lfoot{margin-top:.25rem;font-size:var(--fs-caption);color:var(--ink3)}
.lfoot em{font-style:normal;color:var(--point-ink);font-weight:700}
.lmore{margin:.75rem auto 0;display:block;min-height:var(--p-target-min);padding:.5rem 1.25rem;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;font-weight:700;cursor:pointer}
.lmore[hidden]{display:none}
@media(max-width:420px){.lrow{grid-template-columns:3.75rem 1fr;gap:.625rem;padding:.625rem}.lthumb{width:3.75rem}.lqa{grid-template-columns:1fr;row-gap:0}.lq dt{font-size:var(--fs-caption)}.lq dd{margin-bottom:.1875rem}}

.dhead.mdh>div:first-child::before{display:none}.mdh .mhead h1{display:flex;align-items:center;gap:.5rem}.mdh .mhead h1>svg{width:1em;height:1em;flex:0 0 auto;color:var(--tone,var(--point-deep))}
.evtabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin:0 0 1.25rem}
.evtabs a{display:block;padding:.875rem 1rem;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);text-decoration:none;color:inherit;box-shadow:var(--shadow-card)}
.evtabs a.on{border-color:var(--point);background:color-mix(in srgb,var(--point) 6%,var(--surface))}.evtabs a b{display:block;font-size:var(--fs-body);margin-bottom:.15rem}.evtabs a span{font-size:var(--fs-small);color:var(--ink2)}
.evboard{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 2rem}@media(max-width:760px){.evboard{grid-template-columns:none}.evboard>div+div .bdhead{display:none}.evboard>div+div ol{border-top:1px solid var(--line)}.evboard .bdrow,.evboard .bdhead{grid-template-columns:1fr 2.8rem;gap:.5rem}.evboard .bdrow .k,.evboard .bdhead span:first-child{display:none}.bdbox{padding:.1rem .75rem .25rem}}
.evboard ol{list-style:none;margin:0;padding:0}.evboard li{border-top:1px solid var(--line)}.evboard li:first-child{border-top:0}
#evboard.mob{margin:1.25rem 0 0}section>a.all.mob{display:block;text-align:right;margin:.625rem 0 0;font-size:var(--fs-small);font-weight:700;color:var(--point-ink);text-decoration:none;min-height:44px;line-height:44px}html.cjs body #evboard.mob>.sh.hsh>svg{display:inline-block}html.cjs body #evboard.mob>.sh.hsh{justify-content:flex-start}
.bdbox{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:.25rem 1.125rem .5rem;box-shadow:var(--shadow-card)}
.bdhead{display:grid;grid-template-columns:5.75rem 1fr 3.5rem;gap:.6rem;align-items:center;padding:.7rem 0 .45rem;border-bottom:2px solid var(--ink);font-size:var(--fs-caption);font-weight:800;color:var(--ink2);letter-spacing:.01em}.bdhead span:last-child{text-align:right}
.bdrow{display:grid;grid-template-columns:5.75rem 1fr 3.5rem;gap:.6rem;align-items:center;padding:.6rem 0;text-decoration:none;color:inherit;min-width:0}.bdrow .k{justify-self:start}.bdrow .d{text-align:right}
.bdrow .k{font-size:.6875rem;font-weight:800;padding:.15rem .5rem;border-radius:999px;background:var(--tone-tint,var(--soft));color:var(--point-ink);white-space:nowrap}
.bdrow .t{min-width:0;display:flex;flex-direction:column;gap:.1rem}.bdrow .t b{font-size:var(--fs-small);line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bdrow .t span{font-size:var(--fs-caption);color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bdrow .d{font-size:var(--fs-caption);color:var(--ink3);white-space:nowrap}.bdrow .new{color:var(--point-ink);font-weight:800;font-size:.625rem;margin-left:.3rem}.bdrow:hover .t b{color:var(--point-deep)}
.bdrow .end{color:var(--ink3)}.evsec .sh.hsh .all2{margin-left:.5rem;font-size:var(--fs-small);font-weight:700;color:var(--point-ink);text-decoration:none;white-space:nowrap;min-height:44px;display:inline-flex;align-items:center}
.evgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}@media(max-width:760px){.evgrid{grid-template-columns:none}}
.evcard{display:grid;grid-template-columns:5.75rem 1fr;gap:.75rem;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:.75rem;text-decoration:none;color:inherit;box-shadow:var(--shadow-card);min-width:0}
.evcard .media{width:5.75rem;aspect-ratio:1/1.414;object-fit:cover;border-radius:8px;border:1px solid var(--line);background:var(--sunken);display:block}.evcard .ph{width:5.75rem;aspect-ratio:1/1.414;border-radius:8px;background:var(--sunken);display:flex;align-items:center;justify-content:center;color:var(--ink3);font-weight:800}
.evcard .b{display:flex;flex-direction:column;gap:.25rem;min-width:0}.evcard .b .m{font-size:var(--fs-caption);color:var(--ink3);display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.evcard .b .m .k{font-size:.6875rem;font-weight:800;padding:.1rem .45rem;border-radius:999px;background:var(--tone-tint,var(--soft));color:var(--point-ink)}
.evcard .b b{font-size:var(--fs-body);line-height:1.35}.evcard .b .f{font-size:var(--fs-small);color:var(--ink2)}.evcard .b .bn{font-size:var(--fs-small);color:var(--ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.evpost{max-width:46rem}.evpost .m{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;font-size:var(--fs-small);color:var(--ink2);margin:0 0 .75rem}.evpost .m .k{font-size:.6875rem;font-weight:800;padding:.15rem .5rem;border-radius:999px;background:var(--tone-tint,var(--soft));color:var(--point-ink)}
.evpost dl{display:grid;grid-template-columns:7rem 1fr;gap:.5rem .75rem;margin:1rem 0;font-size:var(--fs-body)}.evpost dt{color:var(--ink3);font-size:var(--fs-small)}.evpost dd{margin:0;line-height:1.6}
.evpost .img{margin:1rem 0}.evpost .img img{max-width:100%;border-radius:var(--r-md);border:1px solid var(--line)}
.evpost .go{display:inline-flex;align-items:center;min-height:48px;padding:0 1.25rem;border-radius:var(--r-md);background:var(--ink);color:var(--paper);font-weight:800;text-decoration:none}
.pilot{display:inline-flex;align-items:center;gap:.3rem;font-size:.6875rem;font-weight:800;padding:.15rem .55rem;border-radius:999px;border:1px solid var(--point);color:var(--point-ink);background:color-mix(in srgb,var(--point) 8%,var(--surface));letter-spacing:.02em;white-space:nowrap;vertical-align:middle;margin-left:.4rem}.pilot::before{content:"";width:.4rem;height:.4rem;border-radius:50%;background:var(--point);animation:gfpilot 1.6s ease-in-out infinite}@keyframes gfpilot{0%,100%{opacity:1}50%{opacity:.25}}@media(prefers-reduced-motion:reduce){.pilot::before{animation:none}}.hsh h2 .pilot{font-size:.625rem}@media(max-width:640px){.mdh .mhead h1{font-size:1.375rem;white-space:nowrap}.mdh .mhead h1 .pilot{display:none}.evtabs{grid-template-columns:none;gap:.5rem}}
.provided{display:inline-block;font-size:.6875rem;font-weight:800;padding:.1rem .45rem;border-radius:999px;background:var(--ink);color:var(--paper);letter-spacing:.02em}.testmark{color:var(--point-ink);font-weight:800}
.evsubmit{max-width:44rem}.evsubmit .rule{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:1rem 1.125rem;margin:0 0 1.25rem}.evsubmit .rule ol{margin:.5rem 0 0 1.1rem;padding:0;line-height:1.6;font-size:var(--fs-small);color:var(--ink2)}
.evsubmit label{display:block;margin:.75rem 0 .25rem;font-weight:700;font-size:var(--fs-small)}.evsubmit input,.evsubmit select,.evsubmit textarea{width:100%;min-height:44px;border:1px solid var(--line);border-radius:var(--r-sm);padding:.5rem .75rem;font:inherit;background:var(--surface);color:var(--ink);box-sizing:border-box}
.evsubmit textarea{min-height:6rem}.evsubmit .row2{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.evsubmit .chk{display:flex;gap:.5rem;align-items:flex-start;font-size:var(--fs-small);margin:.75rem 0}.evsubmit .chk input{width:auto;min-height:0;margin-top:.2rem}
.evsubmit button{min-height:48px;padding:0 1.5rem;border:0;border-radius:var(--r-md);background:var(--ink);color:var(--paper);font-weight:800;font:inherit;cursor:pointer}.evsubmit .out{margin:.75rem 0 0;font-size:var(--fs-small)}.evsubmit .hint{font-size:var(--fs-caption);color:var(--ink3);margin:.2rem 0 0}
.evsubmit .fsel{position:relative}.evsubmit .fsel ul{position:absolute;left:0;right:0;top:100%;z-index:5;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);margin:.25rem 0 0;padding:.25rem 0;list-style:none;max-height:14rem;overflow:auto;box-shadow:var(--shadow-card)}.evsubmit .fsel li{padding:.45rem .75rem;cursor:pointer;font-size:var(--fs-small)}.evsubmit .fsel li:hover{background:var(--soft)}
/* unslop.patch.css — gofesta 언슬롭 패치(메뉴 35, 2026-11-01 회장 승인 범위: 외관 1~5·7~11 + 기존 결함)
   허브 작성 · gofesta 토큰(--ink·--ink2·--ink3·--point·--surface·--line·--soft·--fill) 변수만 · 색 리터럴 0.
   모든 페이지의 맨 뒤에 붙인다. `html body:not(#ux)` 접두 = ID 한 단 무게(덮어쓰기 층 8겹을 !important 없이 이기기, lessons 2026-10-29).
   마크업 변경은 REPORT.md 「마크업 변경 목록」(render.py 쪽) — 화살표 빼기·날씨 질문·달력 data-lv·인라인 색·바로가기·favicon. */

/* ── 1·2 빨강은 「지금 갈 수 있는 것」에만 — 숫자·머리점·순위·보조 링크는 글자색으로 ── */
html body:not(#ux) .hhead em { color: var(--ink); }                          /* 2 홈 제목 「133곳」 */
html body:not(#ux) .cover b { color: var(--ink); }                           /* 필터 「2,554곳 · 1,658곳」 */
html body:not(#ux) ul.evl li::before { background: var(--ink3); color: var(--ink3); }   /* 이벤트 카드 머리점 */
html body:not(#ux) .rk { color: var(--ink2); }                                /* 순위 01~05 */
html body:not(#ux) a.more { color: var(--ink2); }                             /* 「순위 전체 →」(절 머리 링크 — 화살표 유지) */
html body:not(#ux) .dhead h1 em { color: var(--ink); }                        /* 달력 「315」(인라인 색은 마크업에서 뺌) */
html body:not(#ux) .side-sum a.up { color: var(--ink2); }                     /* 상세 「한눈에 보기로 ↑」 */
html body:not(#ux) nav.tvintro > a > span { color: var(--ink2); }             /* TV 주제 카드 「40곳 보기」 */

/* ── 3·4 제목 위 빨간 막대·키커 ── */
html body:not(#ux) .hhead::before,
html body:not(#ux) .hero > div::before,
html body:not(#ux) .sh.hsh.hl::before,
html body:not(#ux) .dhead > div::before { display: none; }
html body[data-page]:not(#ux) main :is(.glance, .focus, .wx) > .ch { color: var(--ink); font-size: var(--fs-small); font-weight: 700; letter-spacing: 0; }   /* 상세 「한눈에 보기」 등 상자 머리 = 상자 제목(gofesta 의 :not(#_) 규칙보다 한 단 무겁게) */

/* ── 5 절 아이콘은 한 색 ── */
html body:not(#ux) .sh > svg,
html body:not(#ux) h2.grph > svg,
html body:not(#ux) section.glance svg { color: var(--ink2); stroke: currentColor; }

/* ── 7 문장·카드 속 링크: 화살표는 마크업에서 빼고 밑줄로 링크임을 보인다 ── */
html body:not(#ux) a.vfest,
html body:not(#ux) a.upd,
html body:not(#ux) .gsub a { color: var(--ink2); text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: 3px; }
html body:not(#ux) a.vfest:hover,
html body:not(#ux) a.upd:hover,
html body:not(#ux) .gsub a:hover { color: var(--ink); text-decoration-color: currentColor; }

/* ── 8 상세 버튼: 주행동은 「공식 사이트」 하나 ── */
html body:not(#ux) .actions .btn.gold { background: var(--soft); color: var(--ink); border-color: var(--soft); }
html body:not(#ux) .actions .btn.gold:hover { background: var(--soft-press); }

/* ── 9 「아직 몰라요」 — 알약 대신 흐린 글자(묶음 머리 「아직 모르는 것 N가지」가 이미 있다) ── */
html body:not(#ux) .jm.q { background: transparent; color: var(--ink3); padding-inline: 0; border-color: transparent; font-weight: 400; }

/* ── 10 달력: 축제 수 단계 색(data-lv 1~5, 마크업에서 붙임) · 선택한 날만 빨강 ── */
html body:not(#ux) .day.has:not([aria-pressed="true"]) { background: var(--surface); box-shadow: inset 0 0 0 1px var(--line); }
html body:not(#ux) .day.has:not([aria-pressed="true"]) .n { color: var(--ink2); }
html body:not(#ux) .day.has[data-lv="1"]:not([aria-pressed="true"]) { background: color-mix(in srgb, var(--point) 5%, var(--surface)); }
html body:not(#ux) .day.has[data-lv="2"]:not([aria-pressed="true"]) { background: color-mix(in srgb, var(--point) 10%, var(--surface)); }
html body:not(#ux) .day.has[data-lv="3"]:not([aria-pressed="true"]) { background: color-mix(in srgb, var(--point) 17%, var(--surface)); }
html body:not(#ux) .day.has[data-lv="4"]:not([aria-pressed="true"]) { background: color-mix(in srgb, var(--point) 25%, var(--surface)); }
html body:not(#ux) .day.has[data-lv="5"]:not([aria-pressed="true"]) { background: color-mix(in srgb, var(--point) 34%, var(--surface)); }
html body:not(#ux) .day.has[data-lv="4"]:not([aria-pressed="true"]) .n,
html body:not(#ux) .day.has[data-lv="5"]:not([aria-pressed="true"]) .n { color: var(--ink); }

/* ── 11 간격: 1rem = 17px 체계는 유지(홀수 17·51·85 는 rem 체계의 결과). 일회 값만 ── */
html body:not(#ux) .nav { padding: 4px; }

/* ── 기존 결함 ── */
html body:not(#ux) a.vfest { display: inline-flex; align-items: center; min-height: 24px; }   /* 링크 높이 22 → 24(치명) */
html body:not(#ux) .dday,
html body:not(#ux) .brand-tag,
html body:not(#ux) .vplay,
html body:not(#ux) .gfcrumb .sep { font-size: 12px; }                         /* 12px 미만 글자 */
html body:not(#ux) .ux-skip { position: absolute; left: -9999px; top: 8px; z-index: 100; display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; border-radius: var(--r-sm); background: var(--surface); color: var(--ink); box-shadow: var(--shadow-card); }
html body:not(#ux) .ux-skip:focus { left: 16px; }
/* gofesta 상세 쪽 언슬롭 2차(구성·일관성) — 2026-11-02 회장 승인 범위 12가지 · 방향 「잘 만든 여행 안내 책자」
   토큰 변수만(hex 0) · 선택자 머리 html body[data-page="festival"]:not(#ux):not(#_) main — 기존 :not(#_) 규칙보다 한 단 무겁게.
   상자 체계 3가지: ① 기본 = 흰 면 + 카드 그림자(테 없음) ② 보조 = 옅은 면(--soft) 테 없음 ③ 강조 = 「제대로 즐기는 법」 하나 — 색 띠 없이 제목 크기로만(회장 2026-11-02).
   빨강 = 「지금 갈 수 있는 것」(공식 사이트·D-day·진행 중·지금 단계·통제 있음)에만. */

/* 9 · 위쪽 칸(소개·제대로 즐기는 법·한눈에 보기)은 전체 폭, 그 아래만 본문+옆칸 — 두 구역으로 일관.
   해설 글줄 46rem 제한은 뺐다(회장 2026-11-02 「빈 공간이 너무 많아 안 좋아 보인다」) — 글은 상자 폭을 채운다 */

/* 1 · 상자 체계 — 기본(흰 면 + 그림자) */
html body[data-page="festival"]:not(#ux):not(#_) main .care { border: 0; border-radius: var(--r-lg); box-shadow: var(--shadow-card) }
html body[data-page="festival"]:not(#ux):not(#_) .side .sidebox { border: 0; box-shadow: var(--shadow-card) }
/* 1 · 「제대로 즐기는 법」 — 기본 카드와 같은 모양(색 테 없음) */
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy { border: 0; border-radius: var(--r-lg); box-shadow: var(--shadow-card) }   /* 색 띠 없음(회장 2026-11-02 「빨간 윗줄은 AI 티」) — 강조는 제목 크기로만 */
/* 1 · 보조(옅은 면, 테 없음) */
html body[data-page="festival"]:not(#ux):not(#_) main .journey .jtodo { background: var(--soft); border: 0; border-radius: var(--r-md) }
html body[data-page="festival"]:not(#ux):not(#_) main .jaskbox { background: var(--soft); border: 0 }

/* 11 · 상자 안 상자 → 선으로 나눔(2겹까지) */
html body[data-page="festival"]:not(#ux):not(#_) main .journey .jgd { background: none; border: 0; border-left: 2px solid var(--line); border-radius: 0; padding: .25rem 0 .25rem .75rem; margin-top: .625rem }
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vgrid { gap: 0 }
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard,
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard:is(.warn, .bad, .ok, .rain) { background: none; border: 0; border-top: 1px solid var(--line); border-radius: 0; padding: .75rem 0 .25rem }

/* 2 · 빨강 정리 — 라벨·번호·점·글 링크는 글자색 */
html body[data-page="festival"]:not(#ux):not(#_) main .care li b,
html body[data-page="festival"]:not(#ux):not(#_) main .sec.journey .jgd p b,
html body[data-page="festival"]:not(#ux):not(#_) main .relcol b { color: var(--ink) }
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy-kick { color: var(--ink2) }
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy-toc a b { color: var(--ink2) }
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy-ch h3 span { background: none; box-shadow: inset 0 0 0 1.5px var(--ink); color: var(--ink) }
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy-av { background: var(--soft); color: var(--ink2) }
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy-more > summary { border-color: var(--ink); color: var(--ink) }
html body[data-page="festival"]:not(#ux):not(#_) main .journey .jline::before { background: var(--ink3) }
html body[data-page="festival"]:not(#ux):not(#_) main .grp > .grph svg { color: var(--ink2) }
html body[data-page="festival"]:not(#ux):not(#_) main .focus li a i { color: var(--ink3) }
html body[data-page="festival"]:not(#ux):not(#_) main ol.jst .jcnt .q { color: var(--ink2) }
/* 2·3 · 글 속 링크 = 글자색 + 밑줄(대비 통과) */
html body[data-page="festival"]:not(#ux):not(#_) main .journey .jgo { color: var(--ink); font-weight: 600; text-decoration: underline; text-decoration-color: var(--ink3); text-underline-offset: 3px }
/* 12 · 한눈에 보기 — 링크인 값만 얇은 실선 밑줄(점선·빨강 점선 없앰) */
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv > a { border-bottom: 0; text-decoration: underline; text-decoration-color: var(--line); text-decoration-thickness: 1px; text-underline-offset: 4px }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv > a.go { text-decoration: none; color: var(--point-ink) }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv > a.go:not([href*="#vc-"]) { color: var(--ink); text-decoration: underline; text-decoration-color: var(--ink3); text-underline-offset: 4px }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv .gsub a { border-bottom: 0; text-decoration: none }

/* 7 · 「확인됨」 칠한 초록 알약 46번 → 칠 없는 작은 초록 글(점 하나 + 글). 맨 위 안내문(.hint) 속 범례는 그대로 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.ja, .jat) .jm.ok,
html body[data-page="festival"]:not(#ux):not(#_) main .journey ul.ji .jm.ok { background: none; box-shadow: none; color: var(--ok); min-width: 0; padding: 0; font-weight: 700; gap: .25rem }
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.ja, .jat) .jm.ok::before,
html body[data-page="festival"]:not(#ux):not(#_) main .journey ul.ji .jm.ok::before { content: ""; width: .4375rem; height: .4375rem; border-radius: 50%; background: var(--ok) }
/* 「아직 몰라요」는 정보라 글은 남기되 칠한 알약 → 테두리만 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.ja, .jat) .jm.q { background: none; box-shadow: inset 0 0 0 1px var(--line); color: var(--ink2) }

/* 8 · 맞아요/달라요 — 질문별 유지, 흐리게(테 없음·작게) */
html body[data-page="festival"]:not(#ux):not(#_) main .qfb.mini .qfb-b { border-color: transparent; background: none; color: var(--ink3); opacity: .7 }
html body[data-page="festival"]:not(#ux):not(#_) main .qfb.mini .qfb-b:is(:hover, :focus-visible) { opacity: 1 }

/* 10 · 제목 두 단: 묶음 제목(아이콘 + h2 크기) · 상자 제목(아이콘 없음 + h3 크기). 상자 부제는 한 크기 */
html body[data-page="festival"]:not(#ux):not(#_) main :is(.glance, .focus, .wx) > .ch,
html body[data-page="festival"]:not(#ux):not(#_) main .care > h2,
html body[data-page="festival"]:not(#ux):not(#_) main .enjoy h2 { font-size: var(--fs-h3); font-weight: 800; line-height: 1.35; color: var(--ink); letter-spacing: 0; margin-bottom: .5rem }
html body[data-page="festival"]:not(#ux):not(#_) main :is(.care .lead, .grp > .grph .q) { font-size: var(--fs-small); color: var(--ink2) }

/* 6 · 이모지 대신 넣은 선 아이콘(마크업 변경) */
html body[data-page="festival"]:not(#ux):not(#_) .ux-ic { display: inline-block; width: 1.05em; height: 1.05em; vertical-align: -.15em; margin-right: .3em; flex: none }

/* 1 · (회장 2026-11-02 「가기 전에 상자와 바로 위 상자의 가로 크기를 같게」) 펼친 단계 상자(ol.jst>li.open · 양옆 −.75rem)와
   그 위 옅은 면 상자(지금 꼭 볼 3가지·아직 모르는 것)의 가로 끝을 맞춘다 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.jtodo, .jaskbox) { margin-left: -.75rem; margin-right: -.75rem; padding-left: .75rem; padding-right: .75rem }

/* ── 정렬·글자 체계(회장 2026-11-02 「확인됨·원번호·한눈에 보기가 어긋남 · 글자 크기가 제각각」) ──
   글자 크기 = 토큰 5단만: --fs-caption(출처·보조) · --fs-small(상자 안 글·표시) · --fs-body(항목 제목) · --fs-h3(상자 제목) · --fs-h2(묶음 제목) (+ 축제 이름 h1)
   굵기 = 3단만: 400 글 · 700 강조 · 800 제목. 표시(확인됨·아직 몰라요)는 옆 글과 같은 크기·같은 기준선 */

/* 확인됨·아직 몰라요 — 옆 글과 같은 크기, 같은 글자 바닥선 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.ja, .jat) .jm,
html body[data-page="festival"]:not(#ux):not(#_) main .journey ul.ji .jm { display: inline; font-size: var(--fs-small); line-height: inherit; vertical-align: baseline; min-width: 0; margin: 0 .375rem 0 0 }
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.ja, .jat) .jm.q,
html body[data-page="festival"]:not(#ux):not(#_) main .journey ul.ji .jm.q { padding: .0625rem .5rem; border-radius: var(--p-radius-pill); font-weight: 400 }
html body[data-page="festival"]:not(#ux):not(#_) main .journey :is(.ja, .jat) .jm.ok::before,
html body[data-page="festival"]:not(#ux):not(#_) main .journey ul.ji .jm.ok::before { display: inline-block; vertical-align: .15em; margin-right: .3125rem }

/* 여정 체크리스트 원번호 — 단계 제목 글줄 가운데(제목 줄 높이 44px 의 가운데) · 숫자 크기 토큰 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey ol.jst[data-staged] > li::before { top: calc(.625rem + 22px - .75rem); font-size: var(--fs-caption); line-height: 1.5rem }

/* 한눈에 보기 — 항목 이름과 내용 같은 크기, 같은 기준선 */
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 > li { align-items: baseline; grid-template-columns: 6.25rem minmax(0, 1fr) }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 > li > b { display: block; font-size: var(--fs-small); font-weight: 700; color: var(--ink2) }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 > li > b svg { display: inline-block; width: 1em; height: 1em; vertical-align: -.125em; margin-right: .3125rem }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv { align-items: baseline }
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv > a,
html body[data-page="festival"]:not(#ux):not(#_) main .glance ul.g5 .gv > a.go { display: inline; min-height: 0; padding-block: .25rem }

/* 체계 밖 크기 정리 */
html body[data-page="festival"]:not(#ux):not(#_) main .focus li a i,
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard .vh b,
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard ul li,
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard ul li b { font-size: var(--fs-small) }
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard ul li span,
html body[data-page="festival"]:not(#ux):not(#_) main .jvc .vcard :is(p.vsub, .vtag),
html body[data-page="festival"]:not(#ux):not(#_) main .fh-line .dday { font-size: var(--fs-caption) }
html body[data-page="festival"]:not(#ux):not(#_) main .fh-line .per { font-size: var(--fs-h3) }
html body[data-page="festival"]:not(#ux):not(#_) .side .sidebox .go { font-size: var(--fs-small) }
/* 굵기 3단 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey .jgo,
html body[data-page="festival"]:not(#ux):not(#_) main :is(.cap, .ftag) { font-weight: 700 }
html body[data-page="festival"]:not(#ux):not(#_) main :is(ol.jst > li > b .jsh, dd a, .fixask a) { font-weight: 400 }
/* 맞았어요/달라요 — 답 첫 줄 가운데에(버튼 높이 29~30px · 글줄 약 26px → 위로 2px) · 회장 2026-11-02 「같이 맞춰」 */
html body[data-page="festival"]:not(#ux):not(#_) main .journey .ja > .qfb.mini { align-self: flex-start; margin-top: -.125rem }

.btn.my{display:inline-flex;align-items:center;gap:.35rem}.btn.my svg{flex:0 0 auto}
.btn.my.mmy{display:flex;width:100%;justify-content:center;min-height:48px;margin:.5rem 0 0;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font:inherit;font-weight:800;cursor:pointer}
.btn.my[aria-pressed="true"]{color:var(--point-deep);border-color:var(--point)}.btn.my[aria-pressed="true"] svg{fill:currentColor}
.mymsg{font-size:var(--fs-small);color:var(--ink2);margin:.5rem 0 0}
.myrow{margin:1rem auto .5rem}.myrow .myhead{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem}
.myrow .myhead a{white-space:nowrap;margin-left:auto;font-size:var(--fs-small);font-weight:700;color:var(--point-ink);text-decoration:none;min-height:44px;display:inline-flex;align-items:center}
.mytabs{display:flex;gap:.375rem}.mytabs button{white-space:nowrap;appearance:none;border:1px solid var(--line);background:var(--surface);color:var(--ink2);border-radius:999px;padding:.3rem .75rem;font:inherit;font-size:var(--fs-small);font-weight:700;min-height:36px;cursor:pointer}
.mytabs button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.mywrap{position:relative}
.myarr{position:absolute;top:calc(7.5rem * 1.414 / 2);transform:translateY(-50%);z-index:2;width:44px;height:44px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-card);display:none;align-items:center;justify-content:center;cursor:pointer;padding:0}
.myarr.prev{left:-.5rem}.myarr.next{right:-.5rem}.myarr.next svg{transform:scaleX(-1)}.myarr:hover{color:var(--point-deep);border-color:var(--point)}
@media (hover:hover) and (pointer:fine){.myarr:not([hidden]){display:flex}}   /* 마우스 쓰는 화면만 · 휴대폰은 손가락으로 밀기 */
.mystrip::-webkit-scrollbar{display:none}
.mystrip{scrollbar-width:none;display:flex;align-items:flex-start;gap:.75rem;overflow-x:auto;padding:.125rem .125rem .5rem;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.mycard{position:relative;flex:0 0 7.5rem;scroll-snap-align:start;display:flex;flex-direction:column;gap:.35rem;text-decoration:none;color:inherit;min-width:0}
.mycw{position:relative;flex:0 0 7.5rem;scroll-snap-align:start;min-width:0}.mycw .mycard{width:100%}   /* 빼기 단추를 카드(링크) 밖에 두려고 감싼다(링크 안 단추 금지) */
.myx{position:absolute;top:.3rem;right:.3rem;z-index:1;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:999px;background:color-mix(in srgb,var(--paper) 72%,transparent);color:var(--ink3);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 0 0 1px color-mix(in srgb,var(--ink) 8%,transparent)}   /* 흐리고 작게(회장 2026-11-14) — 누르는 자리 28px */
.myx svg{width:11px;height:11px}.myx:hover{background:var(--paper);color:var(--ink)}.myx:focus-visible{outline:2px solid var(--point);outline-offset:2px}
.myund{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .5rem;margin:.25rem 0 .5rem;font-size:var(--fs-small);color:var(--ink2)}
.myund button{appearance:none;border:0;background:none;padding:0 .25rem;min-height:44px;font:inherit;font-weight:800;color:var(--point-ink);text-decoration:underline;text-underline-offset:.2em;cursor:pointer}
.mycard img,.mycard .ph{width:100%;aspect-ratio:1/1.414;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--line);background:var(--sunken);display:block}
.mycard .mk{position:absolute;top:.375rem;left:.375rem;width:1.75rem;height:1.75rem;border-radius:999px;background:var(--surface);color:var(--point-deep);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-card)}.mycard .mk svg{width:14px;height:14px;fill:currentColor}
.mytabs{overflow-x:auto;scrollbar-width:none}.mytabs::-webkit-scrollbar{display:none}
.mycard .ph{display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.5rem;color:var(--ink3)}
.mycard b{font-size:var(--fs-small);line-height:1.35;word-break:keep-all;overflow-wrap:anywhere}   /* 축제 이름은 자르지 않는다(회장 2026-11-05) */
.mycard span{font-size:var(--fs-caption);color:var(--ink3)}.mycard .live{color:var(--point-deep);font-weight:800}
.mynear{display:inline-flex;align-items:center;gap:.35rem;margin:.25rem 0 0;font-size:var(--fs-small);font-weight:700;color:var(--point-ink);text-decoration:none;min-height:44px}
.mypage .lead{max-width:44rem}.mylist{display:grid;gap:.75rem;margin:.75rem 0 1.5rem}
.myitem{display:grid;grid-template-columns:4.5rem 1fr auto;gap:.875rem;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:.75rem;box-shadow:var(--shadow-card);min-width:0}
.myitem img,.myitem .ph{width:4.5rem;aspect-ratio:1/1.414;object-fit:cover;border-radius:8px;border:1px solid var(--line);background:var(--sunken);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--ink3)}
.myitem a.t{font-weight:800;color:inherit;text-decoration:none;line-height:1.35}.myitem .m{font-size:var(--fs-small);color:var(--ink2);margin-top:.2rem}
.myitem .chg{margin-top:.35rem;font-size:var(--fs-small);font-weight:700;color:var(--point-deep)}
.myitem .rm{appearance:none;border:1px solid var(--line);background:var(--surface);color:var(--ink2);border-radius:999px;padding:.35rem .75rem;font:inherit;font-size:var(--fs-caption);min-height:40px;cursor:pointer}
.mypage .sh{display:flex;align-items:center;gap:.5rem}.mypage .sh .rm.all{margin-left:auto}
.myempty{background:var(--sunken);border-radius:var(--r-md);padding:1.25rem;line-height:1.7;color:var(--ink2)}
.myempty a{font-weight:700;color:var(--point-ink)}
.myapp{margin:2rem 0 0;padding:1rem 1.125rem;border:1px dashed var(--line);border-radius:var(--r-md);line-height:1.7;color:var(--ink2);font-size:var(--fs-small)}
.myapp button{appearance:none;border:0;background:var(--ink);color:var(--paper);border-radius:var(--r-md);padding:.6rem 1rem;font:inherit;font-weight:800;min-height:44px;cursor:pointer;margin-top:.5rem}
.nearbar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:1rem 0}
.nearbar .go{appearance:none;border:0;background:var(--ink);color:var(--paper);border-radius:var(--r-md);padding:.7rem 1.1rem;font:inherit;font-weight:800;min-height:48px;cursor:pointer}
.nearmsg{font-size:var(--fs-small);color:var(--ink2);margin:.25rem 0 1rem}
.myitem .km{font-weight:800;font-size:var(--fs-small);white-space:nowrap;color:var(--ink)}
.vtips{margin:2rem 0 0}.vtips:empty{display:none}.vtips h2{font-size:1.125rem;margin:0 0 .75rem}.vtips ul{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}
.vtips li{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:.75rem 1rem}.vtips li p{margin:0;line-height:1.6}.vtips li span{font-size:var(--fs-caption);color:var(--ink3)}
.vtips .vnote{font-size:var(--fs-caption);color:var(--ink3);margin:.5rem 0 0}
.vform{margin:1rem 0 0;background:var(--sunken);border-radius:var(--r-md);padding:1rem}.vform .vq{margin:0 0 .5rem;line-height:1.6}
.vform textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);color:var(--ink);font:inherit;padding:.625rem .75rem;resize:vertical;min-height:4rem}
.vform .vrow{display:flex;align-items:center;justify-content:space-between;margin:.5rem 0 0}.vform .vn{font-size:var(--fs-caption);color:var(--ink3)}
.vform button{appearance:none;border:0;background:var(--ink);color:var(--paper);border-radius:var(--r-md);padding:.55rem 1.1rem;font:inherit;font-weight:800;min-height:44px;cursor:pointer}
.vform .vmsg{margin:.5rem 0 0;font-size:var(--fs-small);color:var(--ink2)}.vform .vf{margin:.25rem 0 0;font-size:var(--fs-caption);color:var(--ink3)}
@media(max-width:640px){.top .aux a.mylink{display:none}}   /* 휴대폰 머리글은 자리가 없다 — 홈 한 줄·상세에서 들어간다 */
@media(max-width:480px){.myitem{grid-template-columns:3.75rem 1fr}.myitem img,.myitem .ph{width:3.75rem}.myitem .rm,.myitem .km{grid-column:2;justify-self:start}}

.ad{margin:0 0 1.25rem}   /* hub-b-2026-10-07 · hub-b2-2026-10-07 */
.ad a{display:flex;text-decoration:none;color:inherit;transition:transform .13s var(--ease)}
.ad a:active{transform:scale(.985)}
.adlabel{display:inline-block;font-size:.8125rem;font-weight:700;line-height:1.4;padding:.05rem .45rem;border-radius:6px;background:var(--sunken);color:var(--ink2);letter-spacing:.02em;flex:0 0 auto}
.adcta{font-weight:700;white-space:nowrap}
.ad-top a{position:relative;align-items:center;gap:1.25rem;min-height:112px;background:#e3e3e8;color:var(--ink);border-radius:20px;padding:.875rem 1.25rem .875rem 1.5rem;box-shadow:0 0 0 1px #d0d0d6}   /* 회장 2026-09-29: 흰 배경에서 검정 띠 대신 회색 면(B2) */
.ad-top .adlabel{position:absolute;top:.625rem;left:.75rem;background:#fff;color:var(--ink2)}
.ad-top .logo{height:34px;width:auto;flex:0 0 auto;margin-top:.5rem;filter:invert(1)}
.ad-top .adt{display:flex;flex-direction:column;gap:.125rem;min-width:0;flex:0 1 auto;line-height:1.35}
.ad-top .adt b{font-size:1.3125rem;letter-spacing:-.02em;white-space:nowrap}
.ad-top .adt span{font-size:.875rem;color:var(--ink2)}
.ad-top .adt .s{font-size:.8125rem;color:color-mix(in srgb,var(--adac) 60%,#000)}
.ad-top .lineup{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:.375rem;padding-left:1.5rem;border-left:1px solid #d0d0d6}
.ad-top .lineup .k{font-size:.8125rem;font-weight:700;letter-spacing:.04em;color:var(--ink3)}
.ad-top .lineup ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem .3rem}
.ad-top .lineup li.more{display:none;background:transparent;color:var(--ink3)}
.ad-top .lineup li{font-size:.8125rem;font-weight:600;padding:.15rem .55rem;border-radius:999px;background:#fff;white-space:nowrap}
.ad-top .thumb{height:92px;width:auto;border-radius:6px;flex:0 0 auto;transform:rotate(3deg);box-shadow:0 6px 16px rgb(0 0 0 / .45)}
.ad-top .adcta{background:var(--adac);color:#12100f;border-radius:999px;padding:.625rem 1.125rem;font-size:.9375rem;flex:0 0 auto}
@media(max-width:1100px){.ad-top .logo{display:none}.ad-top .adlabel{left:auto;right:.75rem}}
.ad-top a.has-art{padding-right:0;overflow:hidden;background:var(--adbg);color:rgb(255 255 255);box-shadow:none}
.ad-top a.has-art .adt{flex:1 1 auto}
.ad-top a.has-art .adt span{color:rgb(255 255 255 / .82)}
.ad-top a.has-art .adt .s{color:var(--adac)}
.ad-top a.has-art .adlabel{left:auto;right:.75rem;z-index:1;background:rgb(255 255 255 / .9);color:rgb(18 16 15)}
.ad-top a.has-art .adcta{margin-left:auto;position:relative;z-index:1}
.ad-top .art{position:relative;flex:0 0 34%;align-self:stretch;margin:-.875rem 0;overflow:hidden}
.ad-top .art img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;-webkit-mask-image:linear-gradient(90deg,transparent 0,rgb(0 0 0) 30%);mask-image:linear-gradient(90deg,transparent 0,rgb(0 0 0) 30%)}
@media(min-width:641px){.ad-top a.has-art .thumb{display:none}}
@media(max-width:900px){.ad-top .art{flex-basis:30%}}
@media(max-width:1180px){.ad-top .lineup ul li:nth-child(n+5):not(.more){display:none}.ad-top .lineup li.more{display:inline-block}}
@media(max-width:640px){.ad-top a{min-height:104px;gap:.75rem;padding:.75rem .875rem .75rem .75rem}.ad-top .adlabel{top:.5rem;left:auto;right:.625rem}.ad-top .thumb{order:-1;height:80px;transform:none}.ad-top .lineup{display:none}.ad-top .adt{flex:1 1 auto}.ad-top .adt b{font-size:1.0625rem;white-space:normal}.ad-top .adt span{font-size:.8125rem}.ad-top .adt .s{display:none}.ad-top .adcta{padding:.5rem .75rem}.ad-top .adcta .w{display:none}.ad-top .art{display:none}.ad-top a.has-art{padding-right:.875rem}}
.ad-card a{flex-direction:column;background:var(--surface);border-radius:20px;overflow:hidden;box-shadow:var(--shadow-card)}
.ad-card img{width:100%;height:auto;aspect-ratio:1200/630;object-fit:cover;display:block;background:var(--sunken)}
.ad-card .adbody{display:flex;flex-direction:column;gap:.3rem;padding:.875rem 1rem 1rem}
.ad-card .adbody b{font-size:1.0625rem;letter-spacing:-.015em;line-height:1.35}
.ad-card .adbody .l{font-size:.875rem;color:var(--ink2)}
.ad-card .adbody .s{font-size:.8125rem;color:var(--ink3)}
.ad-card .adcta{align-self:flex-start;margin-top:.375rem;background:var(--adbg);color:#fff;border-radius:12px;padding:.5rem .875rem;font-size:.875rem}
@media(min-width:760px){.ad-wide a{flex-direction:row;align-items:stretch}.ad-wide img{width:56%;flex:0 0 56%}.ad-wide .adbody{justify-content:center;padding:1.25rem 1.5rem}.ad-wide .adbody b{font-size:1.375rem}}
section.adsec{margin-top:2rem}
.ad-trio{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}
.ad-trio>div{min-width:0}
.ad-trio a{position:relative;height:122px;align-items:center;gap:.875rem;border-radius:20px;padding:.75rem 1rem;overflow:hidden;box-sizing:border-box}
.ad-trio .adlabel{position:absolute;top:.5rem;right:.625rem;font-size:.75rem}
.ad-trio .adt{display:flex;flex-direction:column;gap:.25rem;min-width:0;flex:1 1 auto}
.ad-trio .adt b{font-size:1rem;line-height:1.3;letter-spacing:-.015em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ad-trio .adt .l,.ad-trio .adt .s{font-size:.8125rem;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ad-trio .adcta{position:absolute;right:.625rem;bottom:.625rem;width:2rem;height:2rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.9375rem;font-weight:800}
.ad-trio a{padding-right:2.75rem}
.ad-trio a.tv0{background:var(--adbg);color:#fff}
.ad-trio a.tv0 .tthumb{height:92px;width:auto;border-radius:5px;transform:rotate(-3deg);box-shadow:0 6px 14px rgb(0 0 0 / .5);flex:0 0 auto}
.ad-trio a.tv0 .l{color:rgb(255 255 255 / .8)}
.ad-trio a.tv0 .adlabel{background:rgb(255 255 255 / .15);color:#fff}
.ad-trio a.tv0 .adcta{background:var(--adac);color:#12100f}
.ad-trio a.tv1{background:linear-gradient(120deg,var(--adac),color-mix(in srgb,var(--adac) 70%,#ffcf4a));color:#12100f}
.ad-trio a.tv1 .tlogo{height:30px;width:auto;align-self:flex-start;filter:brightness(0)}
.ad-trio a.tv1 .s{font-size:.9375rem;font-weight:800;line-height:1.35}
.ad-trio a.tv1 .adlabel{background:rgb(255 255 255 / .55);color:#12100f}
.ad-trio a.tv1 .adcta{background:#12100f;color:#fff}
.ad-trio a.tv2{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line,#e2e2e6),inset 5px 0 0 var(--adac)}
.ad-trio a.tv2 .k{font-size:.75rem;font-weight:800;letter-spacing:.06em;color:color-mix(in srgb,var(--adac) 60%,#000)}
.ad-trio a.tv2 .chips{display:flex;flex-wrap:nowrap;gap:.25rem;overflow:hidden}
.ad-trio a.tv2 .chips i{font-style:normal;font-size:.75rem;font-weight:600;padding:.12rem .5rem;border-radius:999px;background:var(--sunken);white-space:nowrap}
.ad-trio a.tv2 .chips i.more{background:transparent;color:var(--ink3)}
.ad-trio a.tv2 b{font-size:.875rem}
.ad-trio a.tv2 .adlabel{background:var(--sunken);color:var(--ink2)}
.ad-trio a.tv2 .adcta{background:var(--adbg);color:#fff}
@media(max-width:900px){.ad-trio{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:85%;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:.25rem}
 .ad-trio>div{scroll-snap-align:start}.ad-trio a{height:114px}}
.ad-strip a{position:relative;align-items:center;gap:1.5rem;min-height:132px;background:linear-gradient(115deg,var(--adbg) 0%,var(--adbg) 55%,color-mix(in srgb,var(--adbg) 82%,var(--adac)) 100%);color:#fff;border-radius:20px;padding:.75rem 1.5rem .75rem 1.75rem;overflow:hidden;box-shadow:0 10px 28px rgb(0 0 0 / .18)}
.ad-strip a::before{content:"";position:absolute;left:0;top:0;bottom:0;width:6px;background:var(--adac)}
.ad-strip .adlabel{position:absolute;top:.625rem;right:.75rem;font-size:.75rem;background:rgb(255 255 255 / .14);color:#fff}
.ad-strip .sthumb{height:124px;width:auto;border-radius:6px;flex:0 0 auto;display:block;transform:rotate(-3deg);box-shadow:0 8px 20px rgb(0 0 0 / .5);margin:.25rem 0}
.ad-strip .sthumb.sq{width:124px;object-fit:cover}
.ad-strip .adt{display:flex;flex-direction:column;gap:.25rem;min-width:0;flex:1 1 auto}
.ad-strip .adt b{font-size:1.375rem;letter-spacing:-.02em;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ad-strip .adt .l{font-size:.9375rem;color:rgb(255 255 255 / .82);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ad-strip .adt .s{font-size:.875rem;font-weight:700;color:var(--adac)}
.ad-strip .slu{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.25rem;max-height:1.75rem;overflow:hidden}
.ad-strip .slu i{font-style:normal;font-size:.75rem;font-weight:600;padding:.15rem .55rem;border-radius:999px;background:rgb(255 255 255 / .12);color:#fff;white-space:nowrap}
.ad-strip .slu i.more{background:transparent;color:rgb(255 255 255 / .7)}
.ad-strip .adcta{background:var(--adac);color:#12100f;border-radius:999px;padding:.75rem 1.25rem;font-size:.9375rem;font-weight:800;flex:0 0 auto;margin-right:1.5rem}
@media(max-width:900px){.ad-strip .slu{display:none}}
@media(max-width:640px){.ad-strip a{gap:.875rem;min-height:112px;padding:.625rem .875rem .625rem 1rem;border-radius:16px}.ad-strip .sthumb{height:96px}.ad-strip .sthumb.sq{width:96px}.ad-strip .adt b{font-size:1rem}.ad-strip .adt .l{font-size:.8125rem}.ad-strip .adt .s{font-size:.75rem}.ad-strip .adcta{display:none}.ad-strip .adlabel{top:.5rem;right:.5rem}}
.side .ad{margin:0}
.ad-side{grid-template-columns:none!important;grid-auto-flow:row!important;grid-auto-columns:auto!important;overflow:visible!important;gap:.75rem}
.ad-side a{height:122px!important}
.ad-moved{margin:1rem 0 1.25rem}
section.adlist{margin:1.5rem 0 0}
.adnote{grid-column:1/-1;font-size:.75rem;color:var(--ink3)}
/* 빈 광고 자리(회장 2026-10-10): 캠페인이 없어도 위치·크기를 예약해 빈 여백으로 둔다 — 자리별 높이는 blueprint/24 실측 */
.ad.ad-empty{background:transparent!important;border:0!important;box-shadow:none!important;padding:0!important}
.ad-top.ad-empty{min-height:122px}.ad-trio.ad-empty{min-height:122px}.ad-card.ad-empty{min-height:96px}
@media(max-width:640px){.ad-top.ad-empty{min-height:74px}.ad-trio.ad-empty{min-height:89px}}
/* ── 광고 자리 시각 분리 (허브 hub-h-2026-10-09 · R5) — ads/inject.py CSS 상수 끝(.adnote 줄 뒤)에 덧붙인다. 뒤에 오므로 같은 선택자를 덮어쓴다.
   원칙(진단 R5·방향 orange-clean-paper-saas 「면의 온도」): 정보 = 흰 카드 20px · 광고 = --ad-surface 톤 면 + 8px 모서리 + 1px 점선(--ad-line).
   「광고」 라벨 ≥12.75px(.75rem→.8125rem) · 좌상단 고정 · 불투명. 본문 중간(.ad-wide)은 띠형 ≤120px. 토큰만(hex 0).
   토큰 --ad-surface·--ad-line 은 허브 tokens/gofesta.tokens.json 에 추가·빌드됨(2026-10-09) → gofesta 는 허브 토큰 site/design_tokens.css 동기화 뒤 적용. */
.ad-card a,.ad-top a,.ad-trio a,.ad-strip a{border-radius:8px!important;box-shadow:none!important;outline:1px dashed var(--ad-line);outline-offset:-1px}
.ad-card a{background:var(--ad-surface)}
.ad-card img{border-radius:6px 6px 0 0}
.adlabel,.ad-top .adlabel,.ad-trio .adlabel,.ad-strip .adlabel,.ad-card .adbody .adlabel{position:absolute;top:.5rem;left:.5rem;right:auto;z-index:2;font-size:var(--fs-caption);font-weight:800;line-height:1.3;padding:.1rem .5rem;border-radius:6px;background:var(--surface);color:var(--ink);opacity:1;box-shadow:0 0 0 1px var(--ad-line)}
.ad-card a{position:relative}
.ad-card .adbody{padding-top:1rem}
.ad-card .adbody>span:first-child{display:none}   /* 라벨은 카드 좌상단(위 규칙)으로 — 본문 안 중복 라벨 숨김 */
.ad-card a::before{content:"광고";position:absolute;top:.5rem;left:.5rem;z-index:2;font-size:var(--fs-caption);font-weight:800;line-height:1.3;padding:.1rem .5rem;border-radius:6px;background:var(--surface);color:var(--ink);box-shadow:0 0 0 1px var(--ad-line)}
@media(max-width:1100px){.ad-top .adlabel{left:.5rem;right:auto}}
@media(max-width:640px){.ad-top .adlabel{left:.5rem;right:auto;top:.5rem}.ad-strip .adlabel{left:.5rem;right:auto}}
html body .ad-top a:not(.has-art) .adlabel,html body .ad-strip a .adlabel{right:auto;width:auto}   /* 모바일 홈 외 페이지에서 left+right 가 함께 걸려 「광고」 라벨이 가로로 늘던 것(회장 2026-10-09 · 연어 배너) */
/* 본문 중간 광고(M1·B1 = .ad-card.ad-wide): 카드형 금지 → 띠형 ≤120px · 그림은 왼쪽 30% · 글은 제목+한 줄만 */
.ad-card.ad-wide a{flex-direction:row;align-items:center;max-height:120px;min-height:0;overflow:hidden;padding:0}
.ad-card.ad-wide img{width:30%;flex:0 0 30%;height:120px;aspect-ratio:auto;object-fit:cover;border-radius:6px 0 0 6px}
.ad-card.ad-wide .adbody{justify-content:center;padding:.75rem 1rem .75rem 1rem;gap:.15rem;min-width:0}
.ad-card.ad-wide .adbody b{font-size:var(--fs-small);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ad-card.ad-wide .adbody .l{font-size:var(--fs-caption);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ad-card.ad-wide .adbody .s{display:none}
.ad-card.ad-wide .adcta{margin-top:.25rem;padding:.3rem .625rem;font-size:var(--fs-caption);border-radius:6px}
@media(min-width:760px){.ad-wide a{flex-direction:row}.ad-wide img{width:30%;flex:0 0 30%}.ad-wide .adbody{padding:.75rem 1.25rem}.ad-wide .adbody b{font-size:var(--fs-body)}}
@media(max-width:640px){.ad-card.ad-wide a{max-height:112px}.ad-card.ad-wide img{height:112px}.ad-card.ad-wide .adcta{display:none}}
/* 모바일 옆칸 이동 광고(.ad-moved): 요약↔목차 사이가 아니라 「할 것」 묶음 뒤 1 · 바닥글 위 1(inject.py JS 교체 · PATCHES R5-③) */
.ad-moved{margin:1rem 0 1.25rem}
.ad-moved.ad-foot{margin:1.5rem 0 .5rem}
