/* ── NSWM Studio — 공통 디자인 시스템(스테인리스 · 구리 · Plex) 위의 앱 층 ──────────────────
   토큰은 docs/study_note/*.html 의 <style> 과 **같은 값**이다. 심볼 · ID · 상태는 전부 모노.
   로그인의 히어로는 테마와 무관하게 늘 어두운 스테인리스다(설비의 명판 자리) — 나머지는 테마를 따른다. */

:root{
  --ground:#ECEEF0; --surface:#FAFBFC; --raise:#FFFFFF;
  --ink:#171B1F; --ink2:#4A555E; --ink3:#77848D;
  --rule:#D3D8DC; --rule2:#E3E7EA;
  --copper:#A85A26; --copper-soft:#F4E6DA; --copper-line:#DCBBA0;
  --steel:#2D6B8C; --steel-soft:#E1EBF1;
  --allow:#256B4B; --allow-soft:#DFEEE7;
  --deny:#9E2F29; --deny-soft:#F6E1DF;
  --esc:#956C12; --esc-soft:#F5EBD5;
  --font-sans:'IBM Plex Sans KR',-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo',sans-serif;
  /* 모노 글꼴에는 한글이 없다 — 한글은 Plex Sans KR 로 떨어지게 **Plex Mono 바로 다음에** 둔다(글자마다 대체한다).
     ui-monospace · Menlo 뒤에 두면 macOS 가 그 글꼴의 한글 대체를 먼저 써서 음절 사이가 벌어진다 */
  --font-mono:'IBM Plex Mono','IBM Plex Sans KR',ui-monospace,'SF Mono',Menlo,monospace;

  /* 히어로 — 늘 어두운 스테인리스 */
  --hero-ground:#0E1215; --hero-ink:#E7ECEF; --hero-ink2:#A3AFB8; --hero-ink3:#5F6C75;
  --hero-rule:#27313A; --hero-copper:#D98D53; --hero-copper-dim:rgba(217,141,83,.38);

  --radius:7px;
  --shadow:0 1px 2px rgba(15,19,22,.06),0 8px 24px -12px rgba(15,19,22,.18);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --ground:#0F1316; --surface:#161B1F; --raise:#1D2429;
  --ink:#E7ECEF; --ink2:#A3AFB8; --ink3:#71808A;
  --rule:#2A3238; --rule2:#222A2F;
  --copper:#D98D53; --copper-soft:#33241A; --copper-line:#5C4029;
  --steel:#68AACD; --steel-soft:#16262F;
  --allow:#57B187; --allow-soft:#132520;
  --deny:#E4776D; --deny-soft:#2A1817;
  --esc:#DDB158; --esc-soft:#292115;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 10px 30px -14px rgba(0,0,0,.6);
}}
:root[data-theme="dark"]{
  --ground:#0F1316; --surface:#161B1F; --raise:#1D2429;
  --ink:#E7ECEF; --ink2:#A3AFB8; --ink3:#71808A;
  --rule:#2A3238; --rule2:#222A2F;
  --copper:#D98D53; --copper-soft:#33241A; --copper-line:#5C4029;
  --steel:#68AACD; --steel-soft:#16262F;
  --allow:#57B187; --allow-soft:#132520;
  --deny:#E4776D; --deny-soft:#2A1817;
  --esc:#DDB158; --esc-soft:#292115;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 10px 30px -14px rgba(0,0,0,.6);
}

*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--font-sans);
  line-height:1.6;-webkit-font-smoothing:antialiased;font-size:14.5px;word-break:keep-all;overflow-wrap:break-word}
code,.mono{font-family:var(--font-mono)}
:focus-visible{outline:2px solid var(--copper);outline-offset:2px}
button{font:inherit;color:inherit}
a{color:var(--copper)}
.noscript{padding:40px;font-family:var(--font-sans)}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ── 작은 부품 ──────────────────────────────────────────────── */
/* 한글이 든 글은 산세리프 — 모노의 빈칸(0.6em)이 한글 낱말 사이를 벌린다. 모노는 심볼 · ID · 코드(ASCII)에만 */
.eyebrow{font-family:var(--font-sans);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--copper);font-weight:600}
.ko{font-family:var(--font-sans)}
.sym{font-family:var(--font-mono);font-size:.86em;background:var(--rule2);color:var(--ink);
  padding:1.5px 6px;border-radius:3px;border:1px solid var(--rule);white-space:nowrap}
.pill{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-sans);font-size:11px;font-weight:600;
  padding:2px 7px;border-radius:3px;white-space:nowrap}
.pill.code{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.03em}
.p-allow{background:var(--allow-soft);color:var(--allow)}
.p-deny{background:var(--deny-soft);color:var(--deny)}
.p-esc{background:var(--esc-soft);color:var(--esc)}
.p-steel{background:var(--steel-soft);color:var(--steel)}
.p-copper{background:var(--copper-soft);color:var(--copper)}
.p-wait{background:var(--rule2);color:var(--ink3)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:6px;border:1px solid var(--rule);
  background:var(--raise);padding:7px 12px;font-size:13px;cursor:pointer;transition:border-color .15s,color .15s,background .15s}
.btn:hover{border-color:var(--copper);color:var(--copper)}
.btn.primary{background:var(--copper);border-color:var(--copper);color:#fff;font-weight:600}
.btn.primary:hover{filter:brightness(1.07);color:#fff}
.btn.primary:disabled{opacity:.45;cursor:not-allowed;filter:none}
/* 원천 · 시나리오 — 걸음마다의 대본 (C3) */
.scenarios{display:flex;flex-direction:column;gap:14px;margin-top:14px}
.script{margin:12px 0 0;padding-left:22px}
.script li{margin:0 0 10px;line-height:1.55}
.script li .things{margin-top:6px}
.btn.quiet{border-color:transparent;background:none;color:var(--ink2)}
.btn.quiet:hover{color:var(--copper)}
.muted{color:var(--ink3)}
.kernel{font-family:var(--font-mono);font-size:12px;line-height:1.65;color:var(--ink2);white-space:pre-wrap;
  overflow-wrap:anywhere;margin:0}

/* ── 로그인 ─────────────────────────────────────────────────── */
.login{min-height:100vh;display:grid;grid-template-columns:minmax(0,1.35fr) minmax(360px,1fr)}
.hero{position:relative;overflow:hidden;color:var(--hero-ink);padding:40px 56px 36px;display:flex;flex-direction:column;
  background:
    radial-gradient(90% 70% at 22% -10%,rgba(217,141,83,.13),transparent 60%),
    radial-gradient(70% 60% at 110% 110%,rgba(104,170,205,.07),transparent 60%),
    repeating-linear-gradient(90deg,rgba(255,255,255,.017) 0 1px,transparent 1px 3px),
    linear-gradient(162deg,#171D22 0%,var(--hero-ground) 52%,#12181C 100%)}
.hero-top{display:flex;align-items:center;gap:12px}
.nameplate{font-family:var(--font-mono);font-weight:600;font-size:13px;letter-spacing:.34em;color:var(--hero-copper);
  padding:6px 8px 6px 12px;border:1px solid var(--hero-copper-dim);border-radius:3px;line-height:1}
.devbadge{font-family:var(--font-sans);font-size:11.5px;letter-spacing:0;color:#DDB158;border:1px dashed rgba(221,177,88,.5);
  padding:4px 8px;border-radius:3px}
.hero-body{flex:1;display:flex;flex-direction:column;justify-content:center;gap:10px;max-width:760px;padding:24px 0}
.tagline{font-size:clamp(30px,3.3vw,46px);line-height:1.18;letter-spacing:-.028em;font-weight:600;margin:0;
  text-wrap:balance;max-width:14em}
.prism{width:100%;max-width:680px;height:auto;margin:22px 0 4px;overflow:visible}
.prism .symbol{font-family:var(--font-mono);font-weight:500;fill:var(--hero-ink)}
.prism .symbol .sep{fill:var(--hero-ink3)}
.prism .symbol .kind{fill:var(--hero-copper)}
.prism .stem,.prism .ray{fill:none;stroke:var(--hero-rule);stroke-width:1.4;transition:stroke .2s,opacity .2s}
.prism .junction{fill:var(--hero-ground);stroke:var(--hero-ink3);stroke-width:1.4}
.prism .term{font-family:var(--font-sans);font-weight:600;font-size:23px;fill:var(--hero-ink);transition:fill .2s,opacity .2s}
.prism .term.canonical{font-family:var(--font-mono);font-weight:500;font-size:17px;fill:var(--hero-ink2)}
.prism .term.veiled{font-weight:500;font-size:17px;fill:var(--hero-ink3)}
.prism .dept{font-family:var(--font-sans);font-size:12.5px;letter-spacing:.02em;fill:var(--hero-ink3);transition:fill .2s}
.prism .spark{fill:var(--hero-copper)}
.prism .ray-g.is-on .ray{stroke:var(--hero-copper);stroke-width:1.8}
.prism .ray-g.is-on .term{fill:var(--hero-copper)}
.prism .ray-g.is-on .dept{fill:var(--hero-copper)}
.prism.has-focus .ray-g:not(.is-on){opacity:.32}
.prism .draw{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:draw .9s cubic-bezier(.3,.6,.2,1) forwards;
  animation-delay:var(--delay,0s)}
.prism .rise{opacity:0;animation:rise .6s ease-out forwards;animation-delay:var(--delay,0s)}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.prism-caption{margin:0;color:var(--hero-ink2);font-size:14.5px;letter-spacing:-.005em}
.prism-caption b{color:var(--hero-ink);font-weight:500}
.notice{margin:0;font-size:12.5px;color:var(--hero-ink3)}

.seat-panel{background:var(--surface);border-left:1px solid var(--rule);padding:48px 44px 36px;display:flex;flex-direction:column;
  justify-content:center;gap:22px}
.seat-panel h2{font-size:23px;letter-spacing:-.02em;font-weight:600;margin:0;line-height:1.3}
.seat-panel .lead{margin:6px 0 0;color:var(--ink2);font-size:13.5px}
.seats{display:flex;flex-direction:column;gap:8px;border:0;margin:0;padding:0}
.seat{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:4px 12px;align-items:start;
  padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--raise);cursor:pointer;
  transition:border-color .15s,background .15s,box-shadow .15s}
.seat:hover{border-color:var(--copper-line)}
.seat input{position:absolute;opacity:0;pointer-events:none}
.seat .dot{width:14px;height:14px;margin-top:4px;border-radius:50%;border:1.5px solid var(--ink3);transition:all .15s}
.seat:has(input:checked){border-color:var(--copper);background:var(--copper-soft);box-shadow:inset 3px 0 0 var(--copper)}
.seat:has(input:checked) .dot{border-color:var(--copper);background:radial-gradient(circle,var(--copper) 0 3.5px,transparent 4px)}
.seat:has(input:focus-visible){outline:2px solid var(--copper);outline-offset:2px}
.seat .who{font-weight:600;font-size:15px;line-height:1.35}
.seat .what{grid-column:2/3;color:var(--ink2);font-size:12.5px;line-height:1.5}
.seat .lens{font-family:var(--font-mono);font-size:10.5px;color:var(--ink3);margin-top:3px;text-align:right;white-space:nowrap}
.seat .absent{grid-column:2/4;font-size:11.5px;color:var(--esc)}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:12.5px;color:var(--ink2);font-weight:500}
.field input{font:inherit;font-size:15px;padding:10px 12px;border:1px solid var(--rule);border-radius:6px;background:var(--raise);
  color:var(--ink)}
.field input:focus{outline:none;border-color:var(--copper);box-shadow:0 0 0 3px var(--copper-soft)}
.enter{width:100%;padding:12px 16px;font-size:15px}
.enter .arrow{font-family:var(--font-mono);transition:transform .15s}
.enter:not(:disabled):hover .arrow{transform:translateX(3px)}
.alert{margin:0;color:var(--deny);font-size:13px;min-height:1.2em}
.seat-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;color:var(--ink3);font-size:12px}
.seat-foot .mono{font-size:11px}

/* ── 앱 틀 ─────────────────────────────────────────────────── */
.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:14px;padding:10px 22px;
  background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--rule)}
.topbar .nameplate{color:var(--copper);border-color:var(--copper-line);font-size:11.5px;padding:5px 6px 5px 10px}
.topbar .place{font-size:13px;color:var(--ink2);font-weight:500}
.topbar .spacer{flex:1}
.topbar .btn{white-space:nowrap}
.topbar .me{white-space:nowrap}
.topbar .me{display:flex;align-items:baseline;gap:8px;font-size:13px}
.topbar .me b{font-weight:600}
.topbar .me .lens{font-family:var(--font-mono);font-size:11px;color:var(--ink3)}
.page{max-width:1240px;margin:0 auto;padding:30px 28px 100px}
.page-head h1{font-size:30px;letter-spacing:-.025em;line-height:1.2;margin:8px 0 0;font-weight:600}
.page-head .sub{color:var(--ink2);margin:8px 0 0;font-size:14px;max-width:70ch}
.page-head .veiled{color:var(--ink3);margin:6px 0 0;font-size:12.5px;max-width:70ch}
.page-head .fp{font-family:var(--font-mono);font-size:11.5px;color:var(--ink3);margin-top:6px;overflow-wrap:anywhere}
.loading{padding:60px 0;color:var(--ink3);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em}
.failure{border-left:3px solid var(--deny);background:var(--deny-soft);border-radius:0 6px 6px 0;padding:14px 16px;margin:18px 0}
.failure .tag,.caution .tag{font-family:var(--font-mono);font-size:10px;letter-spacing:.13em;text-transform:uppercase;font-weight:600;
  display:block;margin-bottom:6px}
.failure .tag{color:var(--deny)}
.caution{border-left:3px solid var(--esc);background:var(--esc-soft);border-radius:0 6px 6px 0;padding:14px 16px;margin:18px 0}
.caution .tag{color:var(--esc)}

/* 작업 공간 목록 */
.ws-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;margin-top:22px}
.ws-card{display:block;text-decoration:none;color:inherit;border:1px solid var(--rule);background:var(--surface);border-radius:var(--radius);
  padding:18px 18px 16px;transition:border-color .15s,box-shadow .15s}
.ws-card:hover{border-color:var(--copper-line);box-shadow:var(--shadow)}
.ws-card .name{font-family:var(--font-mono);font-size:12px;color:var(--copper);letter-spacing:.04em}
.ws-card h3{margin:6px 0 4px;font-size:17px;letter-spacing:-.01em}
.ws-card p{margin:0;color:var(--ink2);font-size:13px}

/* 여는 차례 — 네 단계는 실제 순서다 */
.stages{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:24px 0 10px;padding:0;list-style:none;
  border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);overflow:hidden}
.stage{position:relative;padding:13px 16px 14px 16px;border-right:1px solid var(--rule)}
.stage:last-child{border-right:none}
.stage .n{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;color:var(--ink3)}
.stage .t{font-weight:600;font-size:13.5px;margin-top:2px;display:flex;align-items:center;gap:8px}
.stage .v{font-size:13px;color:var(--ink2);margin-top:3px;font-variant-numeric:tabular-nums}
.stage .mark{width:8px;height:8px;border-radius:50%;background:var(--ink3);flex:none}
.stage.ok .mark{background:var(--allow)}
.stage.warn .mark{background:var(--esc)}
.stage.fail .mark{background:var(--deny)}
.stage.skip{opacity:.5}
.stage.fail{background:var(--deny-soft)}
.ledger-line{font-size:12.5px;color:var(--ink3);display:flex;flex-wrap:wrap;gap:4px 14px;margin:6px 2px 0;font-variant-numeric:tabular-nums}
.ledger-line b{color:var(--ink);font-weight:500}

.section{margin-top:34px}
.section-head{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--rule);margin-bottom:16px}
.section-head h2{font-size:19px;letter-spacing:-.015em;margin:0;font-weight:600}
.section-head .count{font-size:12.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.section-head .spacer{flex:1}
.toggle{display:inline-flex;border:1px solid var(--rule);border-radius:6px;overflow:hidden;background:var(--raise)}
.toggle button{border:0;background:none;padding:6px 12px;font-size:12.5px;cursor:pointer;color:var(--ink2)}
.toggle button[aria-pressed="true"]{background:var(--ink);color:var(--surface);font-weight:600}

.cell-group{margin-bottom:26px}
.cell-group > h3{font-size:13px;font-weight:600;margin:0 0 10px;display:flex;align-items:baseline;gap:10px;color:var(--ink2)}
.cell-group > h3 .sym{font-size:11px}
.gap{border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);padding:16px 18px;margin-bottom:10px}
.gap-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gap-head .n{font-size:12px;color:var(--ink3)}
.gap .means{font-size:15px;font-weight:500;margin:8px 0 8px;letter-spacing:-.005em;max-width:72ch}
.subjects{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.fix{font-size:13px;color:var(--ink2);margin:0 0 12px;max-width:78ch}
.fix b{color:var(--ink);font-weight:600;margin-right:6px}
.questions{list-style:none;margin:0;padding:12px 0 0;border-top:1px dashed var(--rule);display:flex;flex-direction:column;gap:12px}
.q{display:grid;grid-template-columns:52px minmax(0,1fr);gap:2px 10px}
.q .qid{font-family:var(--font-mono);font-size:11px;color:var(--copper);padding-top:2px}
.q .ask{font-size:14px;line-height:1.55}
.q .qmeta{grid-column:2/3;display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;font-size:12px;color:var(--ink3)}
.q .qmeta .to{color:var(--ink2)}
.q .qmeta .ev{font-size:12px}
details.raw{margin-top:12px}
details.raw summary{cursor:pointer;font-family:var(--font-mono);font-size:11px;color:var(--ink3);letter-spacing:.06em;list-style:none}
details.raw summary::before{content:'▸ ';}
details.raw[open] summary::before{content:'▾ ';}
details.raw .kernel{margin-top:8px;padding:10px 12px;background:var(--raise);border:1px solid var(--rule2);border-radius:5px}

.role-sheet{border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);padding:16px 18px;margin-bottom:12px}
.role-sheet h3{margin:0 0 12px;font-size:15px;display:flex;align-items:baseline;gap:10px}
.role-sheet h3 .count{font-size:12.5px;color:var(--ink3);font-weight:400}
.addresses{grid-column:2/3;display:flex;flex-wrap:wrap;gap:5px}

.finding{display:grid;grid-template-columns:minmax(140px,auto) minmax(0,1fr);gap:4px 14px;padding:9px 0;border-top:1px solid var(--rule2)}
.finding:first-of-type{border-top:none}
.finding .where{font-family:var(--font-mono);font-size:12px;color:var(--ink)}
.finding .where b{color:var(--deny);font-weight:600}
.finding .why{font-size:13px;color:var(--ink2)}
.report{padding:14px 16px;background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius)}
.empty{padding:26px;border:1px dashed var(--rule);border-radius:var(--radius);color:var(--ink2);text-align:center}

/* ── 운영 화면 ─────────────────────────────────────────────── */
.tally{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:24px 0 8px}
.tally > div{border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);padding:12px 16px}
.tally .k{font-size:12.5px;color:var(--ink2)}
.tally .v{font-family:var(--font-mono);font-size:24px;font-weight:500;line-height:1.3}
.tally .allowed .v{color:var(--allow)} .tally .blocked .v{color:var(--deny)}
.tally .pending .v{color:var(--esc)} .tally .unknown .v{color:var(--ink3)}
.things{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px;margin-top:18px}
.thing{border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);overflow:hidden}
.thing-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:14px 16px 10px}
.thing-head h3{margin:0;font-size:18px;letter-spacing:-.015em}
.thing-head .id{font-family:var(--font-mono);font-size:11.5px;color:var(--ink3)}
.facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 14px;padding:0 16px 12px;font-size:13px}
.facts dt{color:var(--ink3)}
.facts dd{margin:0;font-weight:500}
.facts dd.state{font-family:var(--font-mono);font-weight:500;font-size:12.5px}
.facts dd.state.ko{font-family:var(--font-sans);font-size:13px}
.hidden-note{padding:0 16px 10px;font-size:12px;color:var(--ink3)}
.acts{border-top:1px solid var(--rule);background:var(--raise)}
.act{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 10px;padding:9px 16px;border-top:1px solid var(--rule2)}
.act:first-child{border-top:none}
.act .label{font-weight:600;font-size:13.5px}
.act .why{grid-column:1/3;font-size:12.5px;color:var(--ink2)}
.act .why .code{font-family:var(--font-mono);font-size:11px;color:var(--ink3);margin-right:6px}
.act .remedy{grid-column:1/3;font-size:12.5px;color:var(--steel)}
.act .remedy::before{content:'↳ ';font-family:var(--font-mono)}
/* 운영 화면의 행동 · 받을 일 (C4) — 누르면 그 자리의 이름으로 판정한다. 결과의 문장은 커널의 것 그대로 */
.act-btn{background:none;border:none;padding:0;font:inherit;font-weight:600;font-size:13.5px;color:var(--ink);
  cursor:pointer;text-align:left;text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px}
.act-btn:hover,.act-btn:focus-visible{color:var(--copper);text-decoration-color:var(--copper)}
.act .picks{grid-column:1/3;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.act .pick{padding:4px 6px;border:1px solid var(--rule);border-radius:5px;background:var(--surface);color:var(--ink);font:inherit;font-size:12.5px}
.act .need:empty{display:none}
.acts.later{border-top:1px solid var(--rule)}
.acts.later summary{padding:8px 16px;font-size:12.5px;color:var(--ink3);cursor:pointer}
.acts.later[open] summary{border-bottom:1px solid var(--rule2)}
.verdict{border:1px solid var(--rule);border-left:3px solid var(--ink3);border-radius:0 var(--radius) var(--radius) 0;
  background:var(--surface);padding:12px 16px;margin:18px 0}
.verdict.p-allow{border-left-color:var(--allow)}
.verdict.p-deny{border-left-color:var(--deny)}
.verdict.p-esc{border-left-color:var(--esc)}
.verdict p{margin:6px 0 0;font-size:13px;color:var(--ink2)}
.verdict .remedy{color:var(--steel)}
.verdict .remedy::before{content:'↳ ';font-family:var(--font-mono)}
.verdict-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.verdict .alt{display:inline-block;margin:0 6px 0 0;padding:1px 7px;border:1px solid var(--rule);border-radius:3px;font-size:12px}
.verdict .next{margin-top:10px;border-top:1px dashed var(--rule);padding-top:8px}
.verdict .next .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:6px;font-size:13px}
.inbox{border:1px solid var(--esc);border-radius:var(--radius);background:var(--esc-soft);padding:12px 14px;margin:18px 0}
.inbox h2{margin:0 0 6px;font-size:15px}
.inbox .veiled{color:var(--ink3);font-size:12.5px;margin:4px 0}
.hold{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:10px 12px;margin-top:10px}
.hold p{margin:5px 0 0;font-size:12.5px;color:var(--ink2)}
.hold-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.hold .obs{display:inline-block;margin-right:8px;font-family:var(--font-sans)}
.hold-acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.hold-acts .memo{flex:1 1 200px;min-width:0;padding:6px 8px;border:1px solid var(--rule);border-radius:6px;background:var(--raise);
  color:var(--ink);font:inherit;font-size:12.5px}
/* ── C6 — 말로 요청하기 (확정 28 · 170) ─────────────────────── */
.speech{border:1px solid var(--steel);border-radius:var(--radius);background:var(--steel-soft);padding:12px 14px;margin:18px 0}
.speech .eyebrow{display:block;margin-bottom:6px}
.speech-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.speech-kind,.speech-text{padding:7px 9px;border:1px solid var(--rule);border-radius:6px;background:var(--raise);color:var(--ink);font:inherit;font-size:13.5px}
.speech-text{flex:1 1 260px;min-width:0}
.speech .muted{margin:6px 0 0;font-size:12.5px}
.speech .need:empty{display:none}
.spoken{border:1px solid var(--rule);border-left:3px solid var(--steel);border-radius:0 var(--radius) var(--radius) 0;
  background:var(--surface);padding:12px 16px;margin:18px 0;scroll-margin-top:64px}  /* 위에 붙은 머리띠 밑으로 숨지 않게(.trace 와 같은 자) */
.spoken-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.spoken p{margin:6px 0 0;font-size:13px;color:var(--ink2)}
.loop-steps{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.loop-step{font-size:11.5px;padding:1px 7px;border:1px solid var(--rule2);border-radius:3px;color:var(--ink3)}
.loop-step.ran{color:var(--ink2);border-color:var(--rule)}
.loop-step.halted{color:var(--steel);border-color:var(--steel)}
.heard{margin-top:10px;border-top:1px dashed var(--rule);padding-top:8px}
.heard-options{display:flex;flex-direction:column;gap:6px;margin:8px 0}
.heard-option{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.heard-option .need:empty{display:none}
.spoken .said{color:var(--ink);font-weight:500}
.spoken .verdict,.spoken .trace{margin:10px 0 0}
.confess{max-width:640px;margin:40px 0;border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);padding:24px 26px}
.confess h2{margin:6px 0 10px;font-size:20px;letter-spacing:-.015em}
.confess p{color:var(--ink2);margin:0 0 10px}

/* ── A3 — 세계 편집 · 판 (확정 154 · 159) ───────────────────── */
.ws-tabs{display:flex;gap:2px;border-bottom:1px solid var(--rule);margin:20px 0 0;overflow-x:auto}
.ws-tabs a{padding:8px 14px;font-size:13px;color:var(--ink2);text-decoration:none;border:1px solid transparent;
  border-bottom:0;border-radius:6px 6px 0 0;margin-bottom:-1px;white-space:nowrap}
.ws-tabs a:hover{color:var(--copper)}
.ws-tabs a[aria-current="page"]{background:var(--surface);border-color:var(--rule);color:var(--ink);font-weight:600}
.headline{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;font-size:12.5px;color:var(--ink3);margin:12px 0 0}
.headline .fpr{font-family:var(--font-mono);font-size:11.5px}
.editor{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:18px;margin-top:16px;align-items:start}
.editor textarea{width:100%;min-height:64vh;resize:vertical;font-family:var(--font-mono);font-size:12.5px;line-height:1.6;
  background:var(--raise);color:var(--ink);border:1px solid var(--rule);border-radius:var(--radius);padding:12px 14px;
  tab-size:2;white-space:pre;overflow:auto;word-break:normal}
.editor textarea:focus{outline:none;border-color:var(--copper)}
.check{position:sticky;top:12px;display:flex;flex-direction:column;gap:12px;max-height:calc(100vh - 24px);overflow:auto}
.panel{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:12px 14px}
.panel h3{font-size:13px;margin:0 0 8px;font-weight:600;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.panel p{margin:0 0 6px;font-size:12.5px;color:var(--ink2)}
.panel .row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;font-size:12.5px;margin-top:6px}
.diffmap{display:flex;flex-direction:column;gap:6px;font-size:12.5px}
.diffmap .axis{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.diffmap .axis .k{font-size:12px;color:var(--ink3);min-width:4.5em}
.axis-pick{display:inline-flex;border:1px solid var(--rule);border-radius:6px;overflow:hidden}
.axis-pick button{border:0;background:var(--raise);padding:5px 12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;color:var(--ink2)}
.axis-pick button[aria-pressed="true"]{background:var(--copper);color:#fff;font-weight:600}
.question{border-top:1px dashed var(--rule);padding-top:8px;margin-top:8px;font-size:12.5px}
.question:first-of-type{border-top:0;padding-top:0;margin-top:0}
.question select,.panel textarea,.panel input[type=text]{font:inherit;font-size:12.5px;border:1px solid var(--rule);border-radius:6px;
  background:var(--raise);color:var(--ink);padding:5px 8px}
.panel textarea{width:100%;min-height:60px;resize:vertical}
.saved{border-left:3px solid var(--allow);background:var(--allow-soft);border-radius:0 6px 6px 0;padding:12px 14px;font-size:12.5px}
.saved .tag{font-family:var(--font-mono);font-size:10px;letter-spacing:.13em;text-transform:uppercase;font-weight:600;color:var(--allow);display:block;margin-bottom:4px}
.timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.version{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 14px;align-items:start;background:var(--surface);
  border:1px solid var(--rule);border-radius:var(--radius);padding:10px 14px}
.version.is-head{border-color:var(--copper-line)}
.version .pick{display:flex;flex-direction:column;gap:2px;font-size:12px;padding-top:2px}
.version .pick label{display:flex;gap:4px;align-items:center;cursor:pointer;font-family:var(--font-mono)}
.version .what{display:flex;flex-direction:column;gap:4px;font-size:12.5px;min-width:0}
.version .top{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.version .fpr{font-family:var(--font-mono);font-size:11.5px;color:var(--ink3);overflow-wrap:anywhere}
.version .why{color:var(--ink2)}
.linediff{font-family:var(--font-mono);font-size:12px;line-height:1.55;background:var(--raise);border:1px solid var(--rule);
  border-radius:var(--radius);overflow:auto;max-height:70vh}
.linediff .l{display:grid;grid-template-columns:3.4em 3.4em 1.6em minmax(max-content,1fr);white-space:pre}
.linediff .l .no{color:var(--ink3);text-align:right;padding-right:8px;user-select:none}
.linediff .l .op{color:var(--ink3);user-select:none;text-align:center}
.linediff .l.add{background:var(--allow-soft)}
.linediff .l.del{background:var(--deny-soft)}
.linediff .l.hunk{color:var(--steel);background:var(--steel-soft)}

/* ── 운영 화면의 원인 짚기 (C5) — 순서 · 근거 · 가림은 커널의 것. 확률 · 점수를 그리지 않는다 ─────────── */
.why-row{padding:0 16px 10px}
.why-btn{padding:3px 0;font-size:12.5px;gap:4px}
.trace{border:1px solid var(--copper-line);border-radius:var(--radius);background:var(--surface);padding:16px 18px;margin:18px 0;
  scroll-margin-top:64px}
.trace-head h2{margin:6px 0 4px;font-size:19px;letter-spacing:-.015em;font-weight:600;line-height:1.35}
.trace-head p{margin:0;font-size:12.5px}
.trace h3{font-size:14px;margin:18px 0 8px;font-weight:600}
.symptoms{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:12px 0 2px}
.symptoms .k{font-size:12px;color:var(--ink3);margin-right:2px}
.symptom{border:1px solid var(--rule);background:var(--raise);border-radius:6px;padding:5px 10px;font:inherit;font-size:12.5px;
  color:var(--ink);cursor:pointer;text-align:left}
.symptom:hover{border-color:var(--copper-line)}
.symptom[aria-pressed="true"]{border-color:var(--copper);background:var(--copper-soft)}
.trace-map{overflow-x:auto;margin-top:14px;border:1px solid var(--rule2);border-radius:var(--radius);background:var(--raise);padding:10px}
.trace-map .map{display:block;max-width:none;height:auto}
.map .edge path{fill:none;stroke:var(--ink3);stroke-width:1.2;opacity:.55}
.map .edge text{font-family:var(--font-sans);font-size:10.5px;fill:var(--ink3)}
.map .node rect{fill:var(--surface);stroke:var(--rule);stroke-width:1.2}
.map .node .label{font-family:var(--font-sans);font-size:12.5px;font-weight:600;fill:var(--ink)}
.map .node .id{font-family:var(--font-mono);font-size:10.5px;fill:var(--ink3)}
.map .node.origin rect{fill:var(--copper-soft);stroke:var(--copper);stroke-width:1.6}
.map .node.k-rule rect{fill:var(--deny-soft);stroke:var(--deny);stroke-width:1.6}
.map .node.k-signal rect{fill:var(--esc-soft);stroke:var(--esc);stroke-width:1.6}
.map .node.k-change rect{fill:var(--steel-soft);stroke:var(--steel);stroke-width:1.4}
.map .node.probe rect{stroke:var(--ink3);stroke-dasharray:4 3}
.map .node.aftermath{opacity:.5}
.map .badge{fill:var(--ink)}
.map .badge-n{font-family:var(--font-mono);font-size:11px;font-weight:600;fill:var(--surface)}
.map .badge-q{font-family:var(--font-mono);font-size:13px;font-weight:600;fill:var(--ink3)}
.legend{display:flex;flex-wrap:wrap;gap:6px 12px;margin:8px 2px 0;font-size:11.5px;color:var(--ink3)}
.legend .lg{white-space:nowrap}
.legend .lg::before{content:'';display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px;
  border:1.4px solid var(--rule);background:var(--surface)}
.legend .lg-rule::before{background:var(--deny-soft);border-color:var(--deny)}
.legend .lg-signal::before{background:var(--esc-soft);border-color:var(--esc)}
.legend .lg-change::before{background:var(--steel-soft);border-color:var(--steel)}
.legend .lg-probe::before{border-style:dashed;border-color:var(--ink3)}
.legend .lg-aftermath::before{background:var(--rule2);border-color:var(--ink3);opacity:.6}
.causes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.cause{border:1px solid var(--rule);border-left:3px solid var(--ink3);border-radius:0 var(--radius) var(--radius) 0;padding:10px 14px;
  background:var(--raise)}
.cause.k-rule{border-left-color:var(--deny)}
.cause.k-signal{border-left-color:var(--esc)}
.cause.k-change{border-left-color:var(--steel)}
.cause-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.cause-head .rank{font-family:var(--font-mono);font-weight:600;font-size:12px;min-width:22px;height:22px;border-radius:50%;
  background:var(--ink);color:var(--surface);display:inline-flex;align-items:center;justify-content:center}
.cause p{margin:6px 0 0;font-size:12.5px;color:var(--ink2)}
.cause .path{font-size:12px;color:var(--ink3)}
.evidence{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:5px;font-size:12.5px}
.evidence li{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;border-top:1px dashed var(--rule2);padding-top:5px}
.evidence .at{font-variant-numeric:tabular-nums;color:var(--ink3);font-size:12px}
.evidence .values{flex-basis:100%;display:flex;flex-wrap:wrap;gap:6px}
.evidence .obs{background:var(--steel-soft);color:var(--steel);border-radius:4px;padding:1px 7px;font-size:12px}
.to-check ul,.after ul{margin:0;padding-left:18px;font-size:12.5px;color:var(--ink2)}
.to-check li,.after li{margin:4px 0}
.veiled-notes{margin-top:12px}
.veiled-notes .veiled{color:var(--ink3);font-size:12.5px;margin:4px 0}
.trace-foot{margin:16px 0 0;padding-top:10px;border-top:1px solid var(--rule2);font-size:12px;color:var(--ink3)}
/* 왜 이 자리인가 — 후보가 된 까닭 · 이웃과 견준 문장 · 기준마다의 표(갈린 칸은 강조 · 보지 않은 칸은 흐림) */
.why-here{margin:10px 0 4px;padding:10px 12px;border:1px solid var(--rule2);border-radius:6px;background:var(--surface)}
.why-here .why-title{margin:0 0 4px;font-size:11.5px;letter-spacing:.06em;color:var(--copper);font-weight:600}
.why-here .qualifies{margin:0 0 6px;font-size:12.5px;color:var(--ink2)}
.why-here .cmp{margin:8px 0 0;padding-left:10px;border-left:2px solid var(--rule)}
.why-here .cmp.ahead{border-left-color:var(--allow)}
.why-here .cmp.behind{border-left-color:var(--ink3)}
.why-here .sentence{margin:0;font-size:13px;color:var(--ink);line-height:1.6}
.why-here .sentence .dir{display:inline-block;font-size:11px;color:var(--ink3);margin-right:6px;font-weight:600;white-space:nowrap}
.why-here .because{margin:3px 0 0;font-size:12px;color:var(--ink3);line-height:1.55}
.criteria-wrap{overflow-x:auto;margin-top:10px}
.criteria{border-collapse:collapse;width:100%;font-size:12px;min-width:440px}
.criteria th,.criteria td{border-top:1px solid var(--rule2);padding:5px 8px;text-align:left;vertical-align:top}
.criteria thead th{font-size:11.5px;color:var(--ink3);font-weight:600;border-top:none}
.criteria thead th.here{color:var(--copper)}
.criteria tbody th{font-weight:500;color:var(--ink2);white-space:nowrap}
.criteria td.here{font-weight:600;color:var(--ink);background:var(--copper-soft)}
.criteria td .role{display:block;font-size:10.5px;color:var(--ink3);margin-top:1px}
.criteria td.decided{background:var(--esc-soft)}
.criteria td.decided .v{font-weight:600}
.criteria td.decided .role{color:var(--esc);font-weight:600}
.criteria td.unseen{opacity:.45}
.criteria-rest{margin-top:6px}
.criteria-rest summary{cursor:pointer;font-size:11.5px;color:var(--ink3)}
.criteria-rest[open] summary{margin-bottom:4px}
.criteria-note{margin:6px 0 0;font-size:11.5px;color:var(--ink3)}

/* ── 좁은 화면 ─────────────────────────────────────────────── */
@media (max-width:980px){
  .login{grid-template-columns:1fr}
  .hero{padding:26px 20px 22px}
  .hero-body{padding:12px 0}
  .seat-panel{border-left:none;border-top:1px solid var(--rule);padding:26px 20px 30px}
  .stages{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stage:nth-child(2){border-right:none}
  .stage:nth-child(-n+2){border-bottom:1px solid var(--rule)}
  .tally{grid-template-columns:repeat(2,minmax(0,1fr))}
  .page{padding:22px 16px 80px}
  .topbar{padding:10px 16px;gap:10px}
  .topbar .place{display:none}
  .editor{grid-template-columns:1fr}
  .check{position:static;max-height:none}
}
@media (max-width:640px){
  /* 좁은 화면의 윗줄 — 명판 · 누구인가 · 나가기만. 테마는 운영체제 설정을 따른다 */
  .topbar{gap:8px;padding:8px 12px}
  .topbar .theme,.topbar .me .lens,.topbar .me .dept{display:none}
  .topbar .nameplate{font-size:10.5px;letter-spacing:.24em;padding:4px 4px 4px 8px}
}
@media (max-width:520px){
  .finding{grid-template-columns:1fr}
  .things{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .prism .draw{stroke-dashoffset:0}
  .prism .rise{opacity:1}
}
/* A4 — 설계 기록 */
.record-form .field{display:flex;flex-direction:column;gap:4px;margin:8px 0;font-size:12.5px}
.record-form .field .k{color:var(--ink3);font-size:12px}
.record-form .field .hint{font-size:11.5px}
.record-form input[type=text],.record-form input[type=number],.record-form input[type=datetime-local],.record-form select,.record-form textarea{font:inherit;font-size:12.5px;border:1px solid var(--rule);border-radius:6px;padding:6px 8px;background:var(--surface);color:var(--ink)}
.record-form textarea{min-height:56px;resize:vertical}
.record-form .row{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.record-form .row .field{flex:1;min-width:140px}
.record-form fieldset{border:1px dashed var(--rule);border-radius:6px;padding:6px 10px;margin:8px 0}
.record-form legend{font-size:12px;color:var(--ink3);padding:0 4px}
.timeline li.faded{opacity:.62}

/* 🆕 C7 — 개정 게이트(판 탭) · 부서의 결재(받을 일) */
.gate-stages{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:10px}
.gate-stage{border:1px solid var(--rule);border-radius:6px;padding:8px 10px;background:var(--raise);font-size:12.5px;display:flex;flex-direction:column;gap:6px;min-width:0}
.gate-stage.done{border-color:var(--allow);background:var(--allow-soft)}
.gate-stage.now{border-color:var(--copper)}
.gate-stage.blocked{border-color:var(--deny)}
.gate-stage .k{font-weight:600}
.gate-stage .why{color:var(--ink2);font-size:12px;overflow-wrap:anywhere}
.gate-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;margin-top:10px}
.gate-facts>div{border:1px solid var(--rule2);border-radius:6px;padding:8px 10px;background:var(--raise);font-size:12.5px;min-width:0;overflow-wrap:anywhere}
.gate-facts .k{display:block;font-size:11.5px;color:var(--ink3);margin-bottom:4px}
.gate-facts .pill{margin:2px 4px 2px 0}
.evidence-list{list-style:none;margin:6px 0 8px;padding:0;display:flex;flex-direction:column;gap:4px;max-height:220px;overflow:auto;font-size:12.5px}
.evidence-list label{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.hold.revision ul.changes{margin:6px 0 0;padding-left:18px;font-size:12.5px}
.hold.revision .pill{margin:2px 4px 2px 0}
