/* 12code 디자인 시스템 — 핸드오프 정본(웹사이트 디자인 요청.zip) 반영, 2026-08-30 */
:root{
  --bg:#ffffff; --bg-sub:#f7f7f5; --bg-deep:#eeeeea;
  --fg:#0a0a0a; --fg-2:#57574f; --fg-3:#8e8e86;
  --line:#e4e4df; --line-2:#c8c8c1; --line-3:#0a0a0a;
  --cta-bg:#0a0a0a; --cta-fg:#ffffff;
  --ok:oklch(0.45 0.09 155); --warn:oklch(0.50 0.11 66); --fail:oklch(0.50 0.15 27);
  --ok-bg:oklch(0.97 0.02 155); --warn-bg:oklch(0.97 0.03 78); --fail-bg:oklch(0.97 0.02 27);
  --op-b:1; --op-w:0;
}
:root:not([data-theme="light"]){
  @media (prefers-color-scheme: dark){
    --bg:#0b0b0c; --bg-sub:#141416; --bg-deep:#1c1c1f;
    --fg:#f2f2ef; --fg-2:#a5a59f; --fg-3:#75756f;
    --line:#262629; --line-2:#3c3c42; --line-3:#f2f2ef;
    --cta-bg:#f2f2ef; --cta-fg:#0b0b0c;
    --ok:oklch(0.80 0.12 155); --warn:oklch(0.84 0.12 80); --fail:oklch(0.72 0.14 25);
    --ok-bg:oklch(0.24 0.03 155); --warn-bg:oklch(0.25 0.04 80); --fail-bg:oklch(0.24 0.04 25);
    --op-b:0; --op-w:1;
  }
}
:root[data-theme="dark"]{
  --bg:#0b0b0c; --bg-sub:#141416; --bg-deep:#1c1c1f;
  --fg:#f2f2ef; --fg-2:#a5a59f; --fg-3:#75756f;
  --line:#262629; --line-2:#3c3c42; --line-3:#f2f2ef;
  --cta-bg:#f2f2ef; --cta-fg:#0b0b0c;
  --ok:oklch(0.80 0.12 155); --warn:oklch(0.84 0.12 80); --fail:oklch(0.72 0.14 25);
  --ok-bg:oklch(0.24 0.03 155); --warn-bg:oklch(0.25 0.04 80); --fail-bg:oklch(0.24 0.04 25);
  --op-b:0; --op-w:1;
}

html{ scrollbar-gutter: stable; }
*{ box-sizing:border-box; }
body{
  margin:0; background:var(--bg); color:var(--fg);
  font-family:'IBM Plex Sans KR', -apple-system, 'Malgun Gothic', sans-serif;
  font-weight:400; word-break:keep-all;
}
.mono{ font-family:'IBM Plex Mono', monospace; }
a{ color:inherit; text-decoration:none; }
.wrap{ max-width:1160px; margin:0 auto; padding:0 22px; }

/* 헤더 */
.topbar{
  position:sticky; top:0; z-index:20; background:var(--bg);
  height:54px; display:flex; align-items:center; justify-content:space-between;
  border-bottom:1px solid var(--line); padding:0 22px;
}
.topbar-logo{ position:relative; width:72px; height:13px; display:inline-block; }
.topbar-logo img{ position:absolute; inset:0; width:100%; height:100%; object-fit:contain; object-position:left center; }
.topbar-logo .b{ opacity:var(--op-b); }
.topbar-logo .w{ opacity:var(--op-w); }
.topbar-nav{ display:flex; align-items:center; gap:22px; font-size:13.5px; }
.topbar-nav a{ color:var(--fg-2); }
.topbar-nav a.active, .topbar-nav a:hover{ color:var(--fg); }
.theme-toggle{
  width:28px; height:28px; border:1px solid var(--line-2); border-radius:2px;
  display:flex; align-items:center; justify-content:center; cursor:pointer; background:var(--bg);
  color:var(--fg); font-size:13px;
}

/* 푸터 */
.footer{
  border-top:1px solid var(--line); padding:16px 22px; margin-top:40px;
  display:flex; align-items:center; justify-content:space-between;
  font-size:12px; color:var(--fg-3);
}
.footer a{ color:var(--fg-3); }
.footer a:hover{ color:var(--fg); }

/* 페이지 공통 */
.page{ padding:24px 0 80px; }
.page-head{
  padding:34px 0 18px; border-bottom:2px solid var(--line-3);
  display:flex; align-items:flex-end; justify-content:space-between; gap:20px; flex-wrap:wrap;
}
.kicker{ margin:0 0 6px; font-size:10px; letter-spacing:.14em; color:var(--fg-3); }
.h1{ margin:0; font-size:28px; font-weight:600; letter-spacing:-.03em; }
.page-head .meta{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--fg-3); text-align:right; line-height:1.6; }
.page-desc{ margin:8px 0 0; font-size:14px; color:var(--fg-2); line-height:1.6; max-width:620px; }

/* sticky 필터바 */
.filterbar{
  position:sticky; top:54px; z-index:10; background:var(--bg);
  border-bottom:1px solid var(--line); padding:12px 0; display:flex; gap:10px; flex-wrap:wrap; align-items:center;
}
.filterbar input[type=text]{
  flex:1 1 240px; min-width:0; border:1px solid var(--line-2); border-radius:2px; background:var(--bg);
  color:var(--fg); padding:9px 12px; font-size:13.5px; font-family:inherit;
}
.chip{
  border:1px solid var(--line-2); border-radius:999px; padding:6px 14px; font-size:13px; background:var(--bg);
  color:var(--fg-2); cursor:pointer;
}
.chip.active{ background:var(--cta-bg); color:var(--cta-fg); border-color:var(--cta-bg); }

/* 트랙/모듈 */
.track-head{ padding:22px 0 8px; border-bottom:1px solid var(--line-3); margin-top:26px; }
.track-head h2{ margin:0; font-size:21px; font-weight:600; letter-spacing:-.03em; }
.track-banner{
  margin:10px 0 0; padding:12px 16px; border:1px solid var(--line-2); background:var(--bg-sub);
  font-size:12.5px; color:var(--fg-2); line-height:1.7;
}
.module-head{
  display:flex; align-items:baseline; gap:10px; padding:16px 0 8px; border-bottom:1px solid var(--line-2); margin-top:14px;
}
.module-head .id{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--fg-3); }
.module-head .name{ font-size:15px; font-weight:600; }
.module-head .count{ margin-left:auto; font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--fg-3); }
.subject-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:0; }
.subject-row{ display:flex; align-items:baseline; gap:10px; padding:11px 2px; border-bottom:1px solid var(--line); }
.subject-row .id{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--fg-3); min-width:26px; }
.subject-row .name{ flex:1; font-size:14px; }
.subject-row .count{ font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--fg-3); }
.subject-row{ cursor:pointer; }
.subject-row:hover .name{ text-decoration:underline; }

/* 팩트 카드 */
.fact-card{ border:1px solid var(--line); padding:18px 20px; margin:0 0 12px; }
.fact-card .badges{ display:flex; gap:8px; align-items:center; margin-bottom:10px; }
.badge{ display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:600; padding:3px 8px; border-radius:2px; border:1px solid; }
.badge .dot{ width:4px; height:4px; border-radius:999px; background:currentColor; }
.badge.ok{ color:var(--ok); background:var(--ok-bg); border-color:currentColor; }
.badge.warn{ color:var(--warn); background:var(--warn-bg); border-color:currentColor; }
.badge.fail{ color:var(--fail); background:var(--fail-bg); border-color:currentColor; }
.badge.mono{ font-family:'IBM Plex Mono',monospace; font-weight:400; font-size:10.5px; color:var(--fg-3); background:transparent; border-color:var(--line-2); }
.fact-card .claim{ font-size:15.5px; line-height:1.75; }
.fact-card .caution{ margin-top:12px; padding-top:12px; border-top:1px dashed var(--line-2); font-size:13.5px; color:var(--fg-2); }
.fact-card .caution .lbl{ font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.1em; color:var(--fg-3); margin-right:8px; }
.fact-card .source{ margin-top:10px; padding-top:10px; border-top:1px solid var(--line); font-size:12.5px; }
.fact-card .source a{ text-decoration:underline; }

/* 게시글 상세 */
.post-wrap{ display:flex; flex-wrap:wrap; gap:36px 48px; align-items:flex-start; padding:14px 0 0; }
.post-body{ flex:1 1 520px; min-width:0; }
.post-crumb{ margin:0 0 10px; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; color:var(--fg-3); }
.post-crumb .sep{ color:var(--line-2); }
.post-h1{ margin:0 0 12px; font-size:31px; font-weight:600; letter-spacing:-.035em; line-height:1.32; }
.post-sub{ margin:0 0 18px; font-size:17px; line-height:1.7; color:var(--fg-2); letter-spacing:-.01em; }
.post-meta{ margin:0 0 24px; padding:14px 0; border-top:1px solid var(--line); border-bottom:1px solid var(--line);
  display:grid; grid-template-columns:repeat(auto-fit,minmax(126px,1fr)); gap:12px 0; }
.post-meta dt{ font-family:'IBM Plex Mono',monospace; font-size:9.5px; letter-spacing:.1em; color:var(--fg-3); margin-bottom:3px; }
.post-meta dd{ margin:0; font-size:12.5px; }
.typo-card{ border:1px solid var(--line-3); background:var(--bg-sub); padding:32px; display:flex; flex-direction:column;
  gap:20px; justify-content:space-between; aspect-ratio:16/9; margin:0 0 8px; }
.typo-card .top{ display:flex; align-items:baseline; gap:10px; font-family:'IBM Plex Mono',monospace; font-size:10.5px; letter-spacing:.14em; color:var(--fg-3); }
.typo-card .top .n{ margin-left:auto; }
.typo-card .headline{ margin:0; font-size:clamp(21px,3.2vw,36px); font-weight:600; letter-spacing:-.04em; line-height:1.24; }
.typo-card .headline .op{ color:var(--fg-3); }
.typo-card .bottom{ display:flex; align-items:flex-end; gap:12px; border-top:1px solid var(--line-2); padding-top:13px; }
.typo-card .bottom .dek{ flex:1; margin:0; font-size:13px; color:var(--fg-2); line-height:1.6; }
.typo-card .wm{ flex:none; position:relative; width:62px; height:11px; }
.typo-card .wm img{ position:absolute; inset:0; width:100%; height:100%; object-fit:contain; }
.fig-caption{ margin:8px 0 30px; font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--fg-3); }
.box{ border:1px solid var(--line-2); background:var(--bg); padding:18px 20px; margin:26px 0; }
.box.summary{ background:var(--bg-sub); padding:20px 22px; margin:0 0 30px; }
.box .lbl{ margin:0 0 12px; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.14em; color:var(--fg-3); }
.box .lbl.fail{ color:var(--fail); }
.box.summary ol{ margin:0; padding-left:20px; display:flex; flex-direction:column; gap:8px; }
.box.summary li{ font-size:15px; line-height:1.7; letter-spacing:-.01em; }
.post-content{ font-size:16.5px; line-height:1.9; }
.post-content h2{ margin:34px 0 14px; font-size:21px; font-weight:600; letter-spacing:-.025em; line-height:1.4;
  padding-bottom:9px; border-bottom:1px solid var(--line-2); }
.post-content p{ margin:0 0 18px; }
.compare-box{ border:1px solid var(--line-2); background:var(--bg); margin:26px 0; }
.compare-box .lbl{ margin:0; padding:14px 20px 0; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.14em; color:var(--fg-3); }
.compare-cols{ display:flex; flex-wrap:wrap; padding:14px 0 0; }
.compare-col{ flex:1 1 240px; min-width:0; padding:0 20px 18px; }
.compare-col.a{ border-right:1px solid var(--line); }
.compare-col h4{ margin:0 0 8px; font-size:15px; font-weight:600; letter-spacing:-.01em; }
.compare-col ul{ margin:0; padding-left:17px; display:flex; flex-direction:column; gap:6px; }
.compare-col li{ font-size:14px; line-height:1.7; color:var(--fg-2); }
.checklist{ margin:0; padding:0; list-style:none; display:flex; flex-direction:column; gap:9px; }
.checklist li{ display:flex; gap:11px; align-items:flex-start; }
.checklist .box-ck{ flex:none; width:14px; height:14px; border:1px solid var(--line-2); margin-top:4px; }
.checklist span.t{ flex:1; font-size:15px; line-height:1.7; }
.next-action{ margin:38px 0 0; padding:20px 22px; border:1px solid var(--line-3); }
.next-action .cta{ display:inline-block; font-size:14px; font-weight:600; border-bottom:1.5px solid var(--fg); }
.prevnext{ margin:34px 0 0; display:flex; flex-wrap:wrap; border-top:1px solid var(--line-3); border-bottom:1px solid var(--line); }
.prevnext a{ flex:1 1 240px; min-width:0; padding:16px 18px; }
.prevnext a.prev{ border-right:1px solid var(--line); padding-left:2px; }
.prevnext a.next{ text-align:right; padding-right:2px; }
.prevnext .k{ display:block; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; color:var(--fg-3); margin-bottom:6px; }
.prevnext .t{ display:block; font-size:15px; font-weight:600; letter-spacing:-.015em; line-height:1.55; }
.section-h2{ margin:34px 0 0; }
.section-h2-head{ display:flex; align-items:baseline; gap:10px; padding-bottom:9px; border-bottom:1px solid var(--line-2); }
.section-h2-head h2{ margin:0; font-size:15px; font-weight:600; letter-spacing:-.02em; }
.section-h2-head .n{ margin-left:auto; font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--fg-3); }
.link-row{ display:flex; flex-wrap:wrap; gap:4px 14px; align-items:baseline; padding:14px 2px; border-bottom:1px solid var(--line); }
.link-row .id{ flex:none; font-family:'IBM Plex Mono',monospace; font-size:10px; color:var(--fg-3); }
.link-row .t{ flex:1 1 260px; min-width:0; font-size:15px; letter-spacing:-.01em; }
.link-row .k{ flex:none; font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--fg-3); margin-left:auto; }
.link-row .url{ flex:none; margin-left:auto; font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--fg-3); border-bottom:1px solid var(--line-2); }
.src-note{ margin:12px 0 0; font-size:12.5px; color:var(--fg-3); line-height:1.75; }

/* 사이드바 */
.post-toc-mobile{ margin:0 0 22px; border-top:1px solid var(--line-3); border-bottom:1px solid var(--line); }
.post-toc-mobile summary{ list-style:none; cursor:pointer; padding:12px 2px; display:flex; align-items:center; gap:10px; }
.post-toc-mobile summary::-webkit-details-marker{ display:none; }
.post-toc-mobile .k{ font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; color:var(--fg-3); }
.post-toc-mobile .cur{ flex:1; font-size:13.5px; font-weight:600; letter-spacing:-.01em; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.post-toc-mobile nav{ padding:0 2px 10px; display:flex; flex-direction:column; }
.post-toc-mobile nav a{ padding:9px 0; border-top:1px solid var(--line); font-size:13.5px; color:var(--fg-2); line-height:1.55; }
.post-aside{ flex:0 1 258px; min-width:0; position:sticky; top:70px; }
.post-aside .lbl{ font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; color:var(--fg-3); padding-bottom:9px; border-bottom:1px solid var(--line-2); }
.toc-nav{ display:flex; flex-direction:column; }
.toc-nav a{ display:flex; gap:10px; padding:10px 0; border-bottom:1px solid var(--line); }
.toc-nav .mark{ flex:none; width:2px; background:var(--line); }
.toc-nav a.on .mark{ background:var(--fg); }
.toc-nav .h{ flex:1; font-size:13px; color:var(--fg-2); line-height:1.55; letter-spacing:-.01em; }
.toc-nav a.on .h{ font-weight:600; color:var(--fg); }
.series-box{ margin-top:26px; }
.series-head{ display:flex; align-items:baseline; gap:8px; padding-bottom:9px; border-bottom:1px solid var(--line-2); }
.series-nav a, .series-nav span.row{ display:flex; gap:9px; padding:9px 0; border-bottom:1px solid var(--line); }
.series-nav .no{ flex:none; font-family:'IBM Plex Mono',monospace; font-size:10px; color:var(--fg-3); padding-left:4px; }
.series-nav .cur .no{ color:var(--fg); }
.series-nav .t{ flex:1; font-size:12.5px; color:var(--fg-2); line-height:1.5; letter-spacing:-.01em; padding-right:4px; }
.series-nav .cur{ background:var(--bg-sub); }
.series-nav .cur .t{ font-weight:600; color:var(--fg); }
.series-more{ display:inline-block; margin-top:12px; font-size:12.5px; color:var(--fg-2); border-bottom:1px solid var(--line-2); }

@media (max-width: 880px){
  [data-toc-desktop]{ display:none; }
}
@media (min-width: 881px){
  [data-toc-mobile]{ display:none; }
}

/* 홈 */
.home{ min-height:calc(100vh - 54px - 60px); display:flex; flex-direction:column; align-items:center; justify-content:center; padding:24px; }
.home .wordmark{ position:relative; width:198px; height:34px; margin-bottom:20px; }
.home .wordmark img{ position:absolute; inset:0; width:100%; height:100%; object-fit:contain; }
.home .sub{ margin:0 0 22px; font-size:14px; color:var(--fg-2); }
.home .searchbox{ width:100%; max-width:640px; }
.home .searchrow{ display:flex; border:1.5px solid var(--fg); border-radius:2px; height:46px; overflow:hidden; }
.home .searchrow input{ flex:1; border:none; padding:0 16px; font-size:15px; font-family:inherit; background:var(--bg); color:var(--fg); }
.home .searchrow input:focus{ outline:none; }
.home .searchrow button{ border:none; background:var(--cta-bg); color:var(--cta-fg); padding:0 22px; font-size:14px; cursor:pointer; }
.home .personas-wrap{ width:100%; margin-top:20px; }
.home .personas{ display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.home .persona-for{ font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:0.12em; color:var(--fg-3); margin-right:4px; }
.home .chip-persona{ padding:5px 13px; border:1px solid var(--line-2); background:transparent; color:var(--fg-2); border-radius:999px; cursor:pointer; font-size:12.5px; font-weight:500; font-family:inherit; }
.home .chip-persona.active{ border-color:var(--line-3); background:var(--cta-bg); color:var(--cta-fg); }
.persona-chip.active{ border-color:var(--line-3) !important; background:var(--cta-bg) !important; color:var(--cta-fg) !important; }
.faq-title{ margin-top:16px; border-top:1px solid var(--line); padding:11px 2px 3px; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; color:var(--fg-3); }
.faq-list{ display:flex; flex-direction:column; }
.faq-q{ display:flex; align-items:baseline; gap:12px; padding:13px 2px; border-top:1px solid var(--line); border-left:none; border-right:none; border-bottom:none; cursor:pointer; background:transparent; font-family:inherit; font-size:14.5px; letter-spacing:-.01em; color:var(--fg); text-align:left; width:100%; }
.faq-q:hover{ color:var(--fg); background:var(--bg-sub); }
.home .newsticker{ width:100%; max-width:640px; margin-top:28px; padding:12px 0; border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
.home .newsticker .row1{ display:flex; gap:10px; font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--fg-3); margin-bottom:4px; }
.home .newsticker .row2{ font-size:14px; }
.home .academy-cta{ margin-top:18px; font-size:13px; color:var(--fg-3); }
.home .academy-cta a{ color:var(--fg); border-bottom:1px solid var(--line-2); }

/* 스텁/폼 */
.stub-box{ max-width:400px; margin:60px auto; }
.stub-box input{ display:block; width:100%; box-sizing:border-box; border:1px solid var(--line-2); border-radius:2px;
  padding:11px 12px; margin-top:10px; font-size:14px; font-family:inherit; background:var(--bg); color:var(--fg); }
.stub-box button{ width:100%; margin-top:14px; padding:11px; background:var(--cta-bg); color:var(--cta-fg); border:none; border-radius:2px; font-size:14px; cursor:pointer; }

table{ border-collapse:collapse; width:100%; margin:12px 0; }
th,td{ border:1px solid var(--line); padding:8px 10px; text-align:left; font-size:13.5px; }
