/* 메인 계산기(/plan) 전용 CSS. design/v2/dashboard.html 의 「대시보드 전용」 부분 + design/v2/plan-v21.html(C0021, 디자인 v2.1)의 그래프 화면.
   토큰(tokens.css)의 변수 + 아래 v2.1 새 토큰(이 파일에만 둔다 — tokens.css 와 다른 페이지는 바꾸지 않음, PM 결정).
   외부 글꼴·이미지·@import 없음. 스타일 속성(style="")은 쓰지 않는다(CSP style-src 'self'). */
/* ── v2.1 새 토큰(라이트) / 다크는 시스템 설정과 data-theme 수동 전환 두 곳 모두 정의 ── */
:root{
  --maxw-app:1240px;
  --src-nps:#0072b2;--src-priv:#009e73;--src-home:#d55e00;--src-draw:#8f6fd6;--src-work:#e69f00;
  --nw-line:var(--accent);--nw-b:var(--ink-2);
  --band-fill:rgba(37,99,235,.13);--ev-line:#9aa5b3;--pre-fill:rgba(91,102,117,.07);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --src-nps:#3987e5;--src-priv:#199e70;--src-home:#d95926;--src-draw:#9085e9;--src-work:#c98500;
    --band-fill:rgba(122,167,255,.16);--ev-line:#5b6675;--pre-fill:rgba(255,255,255,.035);
  }
}
:root[data-theme="dark"]{
  --src-nps:#3987e5;--src-priv:#199e70;--src-home:#d95926;--src-draw:#9085e9;--src-work:#c98500;
  --band-fill:rgba(122,167,255,.16);--ev-line:#5b6675;--pre-fill:rgba(255,255,255,.035);
}
/* 본문 틀만 넓힌다. 머리글·바닥글 틀(.site-header .container 등)은 글 페이지와 같은 폭으로 둬서 계산기↔글 전환 때 로고·메뉴가 움직이지 않게 한다(C0043 AI-152 가) */
body.app main.container{max-width:var(--maxw-app)}
[hidden]{display:none!important}
.head{padding:var(--s5) 0 var(--s3);display:flex;align-items:center;justify-content:space-between;gap:var(--s3);flex-wrap:wrap}
.head h1{font-size:var(--fs-6);font-weight:800;letter-spacing:var(--tracking)}
.layout{display:grid;gap:var(--s4);padding-bottom:var(--s7)}
.results{min-width:0}
/* 입력 칸에 고칠 오류가 있을 때: 결과는 마지막 정상 입력의 값이라 흐리게 두고 안내를 맨 위에 둔다(C0024 AI-103 m-1) */
.results>.stale-note{margin:0 0 var(--s3)}
.results.is-stale>:not(.stale-note):not(#errors){opacity:.45}
.panel{padding:0;overflow:hidden}
.panel-toggle{appearance:none;width:100%;border:0;background:transparent;color:inherit;font:inherit;text-align:left;display:flex;align-items:center;gap:var(--s3);padding:var(--s3) var(--card-pad);min-height:60px;cursor:pointer}
.panel-toggle .ttl{font-weight:800}
.panel-toggle .sum-line{display:block;font-size:var(--fs-3);color:var(--ink-2);font-weight:500;margin-top:2px}
.panel-toggle .chev{margin-left:auto;flex:none;display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-3);font-weight:700;color:var(--accent-ink)}
.panel-toggle .chev i{width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .15s;margin-top:-3px}
.panel-toggle[aria-expanded="true"] .chev i{transform:rotate(-135deg);margin-top:3px}
.panel-body{padding:0 var(--card-pad) var(--card-pad);border-top:1px solid var(--line)}
.panel-body[hidden]{display:none}
.panel-body > .field:first-of-type,.panel-body > .callout + .field{margin-top:var(--s4)}
.panel-body > .callout{margin-top:var(--s4)}
.field .val{font-size:var(--fs-2);color:var(--ink-3)}
.field .hint{margin:0}
.field-msg[hidden]{display:none}
.field-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:var(--s1) var(--s3)}
.field-row .hint,.field-row .field-msg{grid-column:1/-1}
.field-row label{min-width:0}
.field-row + .field-row,.field + .field-row,.field-row + .field{margin-top:var(--s3)}
.select,.text-in{font:inherit;font-size:var(--fs-4);color:var(--ink);background:var(--card);border:1px solid var(--line-strong);border-radius:var(--r-md);min-height:var(--tap);padding:0 var(--s3);width:100%}
.select{width:auto;min-width:136px;font-weight:700}
.text-in:focus,.select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.text-in.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--fs-3);padding:var(--s3);line-height:1.5;resize:vertical}
.detail-body{padding-top:var(--s3)}
.detail-body .hint{margin-top:var(--s3)}
.acct{border:1px solid var(--line);border-radius:var(--r-md);margin:var(--s3) 0 0;padding:var(--s2) var(--s3) var(--s3)}
.acct legend{font-size:var(--fs-3);font-weight:700;padding:0 var(--s2)}
.acct-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.acct-grid .field + .field{margin-top:0}
.acct-grid .input-num{width:100%}
.hint-first{margin-top:0!important}
.grp{margin-top:var(--s5);padding-top:var(--s4);border-top:1px solid var(--line)}
.hint-first + .grp{margin-top:var(--s4)}
.grp-t{font-size:var(--fs-4);font-weight:800;margin:0 0 var(--s2)}
/* 세부 입력 그룹 펼치기(C0043 AI-152): 접힌 줄 = 그룹 이름 + 현재 입력 요약 한 줄 */
.grp-acc{margin-top:0;padding-top:0}
.grp-acc>summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--s3);align-items:center;min-height:var(--tap);padding:var(--s3) 0}
.grp-acc>summary::-webkit-details-marker{display:none}
.grp-acc>summary:focus-visible{outline:3px solid var(--focus);outline-offset:-3px;border-radius:var(--r-md)}
.grp-acc>summary .grp-t{grid-column:1;margin:0}
.grp-acc>summary .grp-sum{grid-column:1;font-size:var(--fs-3);color:var(--ink-2);font-weight:500;line-height:1.5;overflow-wrap:anywhere}
.grp-acc>summary i{grid-column:2;grid-row:1/3;width:8px;height:8px;border-right:2px solid var(--ink-2);border-bottom:2px solid var(--ink-2);transform:rotate(45deg);transition:transform .15s;margin-right:4px}
.grp-acc[open]>summary i{transform:rotate(-135deg)}
.grp-acc>.grp-body{padding:0 0 var(--s4)}
.grp-acc>.grp-body>:first-child{margin-top:0}
.hint-first + .grp-acc{margin-top:var(--s3)}
.grp .hint{margin:var(--s2) 0 var(--s3)}
.grp > .field-row + .hint{margin-top:var(--s1)}
.rows{display:grid;gap:var(--s3)}
.row-item{border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s2) var(--s3) var(--s3);min-width:0}
.row-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);margin-bottom:var(--s2)}
.row-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.row-grid .field{min-width:0}
.row-grid .field-wide{grid-column:1/-1}
.row-grid .input-num{width:100%}
.row-item + .btn,.rows + .btn{margin-top:var(--s3)}
.rows:empty{display:none}
.rows:empty + .btn{margin-top:var(--s1)}
.btn-row{display:flex;gap:var(--s2);flex-wrap:wrap;margin-top:var(--s3)}
.hint-priv{margin-top:var(--s4)}
.sum{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.sum .card{display:grid;gap:var(--s2);align-content:start}
.sum .hero-card{grid-column:1/-1}
.stat-value.is-empty{color:var(--ink-3)}
.interp{margin-top:var(--s3);font-size:var(--fs-3);color:var(--ink-2);line-height:1.6}
.interp:empty{display:none}
.stat-sub:empty{display:none}
.callout-error{background:var(--danger-soft);color:var(--danger);margin-top:var(--s3)}
.callout-error ul{margin:0;padding-left:1.2em}
.callout[hidden]{display:none}
#notices .callout{margin-top:var(--s3)}
.limit-check{margin-top:var(--s1);background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);font-size:var(--fs-3)}
.limit-check>summary{list-style:none;cursor:pointer;min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:var(--s2);padding:0 var(--s4);font-weight:700;color:var(--accent-ink)}
.limit-check>summary::-webkit-details-marker{display:none}
.limit-check>summary i{width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .15s}
.limit-check[open]>summary i{transform:rotate(-135deg) translateY(-2px)}
.limit-check>summary:focus-visible{outline:3px solid var(--focus);outline-offset:-3px;border-radius:var(--r-md)}
.lc-body{padding:0 var(--s4) var(--s3)}
.lc-wrap{max-height:330px;overflow:auto}
.lc-table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.lc-table th{font-size:var(--fs-2);color:var(--ink-3);font-weight:600;text-align:right;padding:var(--s2) 0 var(--s2) var(--s2);border-bottom:1px solid var(--line);vertical-align:bottom;position:sticky;top:0;background:var(--card)}
.lc-table td{text-align:right;padding:var(--s2) 0 var(--s2) var(--s2);border-bottom:1px solid var(--line);vertical-align:top;white-space:nowrap}
.lc-table th:first-child,.lc-table td:first-child{text-align:left;padding-left:0}
.lc-table small{display:block;font-size:var(--fs-2);color:var(--ink-3);line-height:1.4;white-space:normal}
.lc-table td b{font-weight:800}
.lc-table tr:last-child td{border-bottom:0}
.lc-foot{margin:var(--s2) 0 0;font-size:var(--fs-2);color:var(--ink-3)}
.chart-card{margin-top:var(--s4);padding:var(--card-pad) var(--card-pad) var(--s4)}
.ch-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);flex-wrap:wrap}
.ch-head .card-title{display:block}
.unit-note{display:block;font-size:var(--fs-2);color:var(--ink-3);font-weight:500}
.toolbar{display:flex;gap:var(--s2);flex-wrap:wrap;margin-top:var(--s3)}
.chip[aria-pressed="true"]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
.chip .ck{width:14px;height:14px;border-radius:4px;border:1.5px solid currentColor;display:inline-grid;place-items:center}
.chip[aria-pressed="true"] .ck::after{content:"";width:6px;height:6px;border-radius:2px;background:currentColor}
.bpick{margin-top:var(--s3);display:grid;gap:var(--s3);padding:var(--s3);border:1px solid var(--line);border-radius:var(--r-md);background:var(--sunken)}
.bpick-row{display:grid;gap:var(--s2)}
.bpick .lbl{font-size:var(--fs-3);font-weight:700;color:var(--ink-2)}
.bpick .hint{margin:0}
.bpick .hint:empty{display:none}
.bpick .btn-row{margin-top:0}
.bedit{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.bedit .field{min-width:0}
.bedit .input-num{width:100%}
.bedit .field + .field{margin-top:0}
.band-tag{margin-top:var(--s2);font-size:var(--fs-3);color:var(--ink-2);font-weight:600;display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap}
.band-note{color:var(--ink-2)}
/* 요약 카드 아래 겹쳐 보기 줄(디자인 v2.1 C2-a): 차이는 숫자만, 좋다·나쁘다 색이나 말을 쓰지 않는다 */
.cmp-line{font-size:var(--fs-3);color:var(--ink-2);font-weight:600;display:flex;gap:6px;align-items:flex-start}
.cmp-line[hidden]{display:none}
.tag-b{display:inline-grid;place-items:center;flex:none;min-width:20px;height:20px;border-radius:6px;border:1.5px dashed var(--nw-b);font-size:var(--fs-2);font-weight:800;color:var(--ink-2)}
.tag-r{display:inline-block;flex:none;width:20px;height:10px;margin-top:5px;border-radius:3px;background:var(--band-fill);border:1px dashed var(--accent)}
.seg.wrap{flex-wrap:wrap;border-radius:var(--r-md)}
.seg.wrap button{border-radius:var(--r-sm)}
.ch-body{display:grid;gap:var(--s3);margin-top:var(--s3)}
.ch-main{min-width:0}
.chart{position:relative;touch-action:pan-y;border-radius:var(--r-sm)}
.chart:focus-visible{outline:3px solid var(--focus);outline-offset:4px}
.chart-svg{display:block;max-width:100%;overflow:visible}
.chart-svg text{font-family:var(--font);fill:var(--ink-3);font-size:var(--fs-1)}
.chart-svg text.pane-t{fill:var(--ink-2);font-weight:700}
.chart-svg text.ev-t{fill:var(--ink-2);font-weight:700}
.chart-svg text.ev-t.sel{fill:var(--ink)}
.chart-svg text.end-t{font-weight:800;font-size:var(--fs-2)}
.chart-svg text.end-a{fill:var(--accent-ink)}
.chart-svg text.end-b{fill:var(--ink-2)}
.chart-svg .hatch-line{stroke:var(--chart-gap);stroke-width:2}
.g-grid{stroke:var(--chart-grid);stroke-width:1}
.g-axis{stroke:var(--line-strong);stroke-width:1}
.g-pre{fill:var(--pre-fill)}
.g-ev{stroke:var(--ev-line);stroke-width:1;stroke-dasharray:3 3}
.g-evm{fill:var(--card);stroke:var(--ink-2);stroke-width:1.5}
.g-evm.sel{fill:var(--ink);stroke:var(--ink)}
.g-band{fill:var(--band-fill)}
.g-bandl{fill:none;stroke:var(--accent);stroke-width:1;stroke-dasharray:4 3;opacity:.8}
.g-nw{fill:none;stroke:var(--nw-line);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.g-nwb{fill:none;stroke:var(--nw-b);stroke-width:2;stroke-dasharray:7 4;stroke-linejoin:round}
.g-spend{fill:none;stroke:var(--chart-line);stroke-width:1.75;stroke-dasharray:5 4}
.g-seg{stroke:var(--card);stroke-width:1}
.g-short{fill:url(#gap-hatch)}
.g-cross{stroke:var(--ink);stroke-width:1;opacity:.55}
.g-dot{fill:var(--card);stroke:var(--nw-line);stroke-width:2.5}
.g-dotb{fill:var(--card);stroke:var(--nw-b);stroke-width:2}
.g-barsel{fill:none;stroke:var(--ink);stroke-width:1.5}
.f-nps{fill:var(--src-nps)}.f-priv{fill:var(--src-priv)}.f-home{fill:var(--src-home)}.f-draw{fill:var(--src-draw)}.f-work{fill:var(--src-work)}
.sw.k-nps{background:var(--src-nps)}.sw.k-priv{background:var(--src-priv)}.sw.k-home{background:var(--src-home)}.sw.k-draw{background:var(--src-draw)}.sw.k-work{background:var(--src-work)}
.sw.nw{height:0;width:18px;border-radius:0;border-top:3px solid var(--nw-line)}
.sw.nwb{height:0;width:18px;border-radius:0;border-top:2px dashed var(--nw-b)}
.sw.band{width:18px;height:10px;background:var(--band-fill);border:1px dashed var(--accent)}
.legend{margin-top:var(--s1)}
.chart-note{margin-top:var(--s2)}
/* 판독 칸(고른 나이) */
.readout{align-self:start;min-height:44px}
.readout-head{display:flex;align-items:center;justify-content:space-between;font-weight:700;margin-bottom:var(--s2)}
.readout-head .yr{font-weight:500;color:var(--ink-3)}
.nav-btns{display:inline-flex;gap:var(--s1)}
.nav-btns button{appearance:none;border:1px solid var(--line-strong);background:var(--card);color:var(--ink);width:36px;height:36px;border-radius:var(--r-pill);cursor:pointer;font-size:var(--fs-5);line-height:1}
.nav-btns button:disabled{opacity:.4;cursor:default}
.readout .big{font-size:var(--fs-6);font-weight:800;letter-spacing:var(--tracking);font-variant-numeric:tabular-nums;line-height:1.2}
.readout .big small{font-size:var(--fs-3);font-weight:600;color:var(--ink-2);margin-left:2px}
.readout dl{margin:var(--s2) 0 0;display:grid;grid-template-columns:1fr auto;gap:2px var(--s3);border-top:1px solid var(--line);padding-top:var(--s2)}
.readout dl:empty{display:none}
.readout dt{display:flex;align-items:center;gap:6px;color:var(--ink-2)}
.readout dd{margin:0;text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.readout dt .sw{width:10px;height:10px}
.readout .tot dt,.readout .tot dd{font-weight:800;color:var(--ink)}
.readout .ev-badge{margin:var(--s2) var(--s1) 0 0}
.readout .ro-sub{margin:var(--s1) 0 0;font-size:var(--fs-3);color:var(--ink-2);font-weight:600;font-variant-numeric:tabular-nums}
.readout .ro-sc{margin-top:var(--s2);border-top:1px solid var(--line);padding-top:var(--s2)}
.readout .ro-sc-t{font-size:var(--fs-2);color:var(--ink-3);font-weight:700;margin:0}
.readout .ro-sc dl{border-top:0;padding-top:0;margin-top:var(--s1);grid-template-columns:1fr;gap:0}
.readout .ro-sc dt{display:block;font-size:var(--fs-2)}
.readout .ro-sc dd{text-align:left;margin-bottom:var(--s1)}
/* 이벤트 칩 목록 */
.evlist{display:flex;gap:var(--s2);flex-wrap:wrap;margin:var(--s3) 0 0;list-style:none;padding:0}
.evlist .chip{min-height:36px;font-weight:600}
.evlist .chip b{font-variant-numeric:tabular-nums}
.evlist .chip[aria-current="true"]{border-color:var(--ink);background:var(--sunken)}
.evlist .dm{width:9px;height:9px;transform:rotate(45deg);border:1.5px solid currentColor;border-radius:1px;flex:none}
/* 표 보기 */
.table-wrap.tall{max-height:420px;overflow:auto;margin-top:var(--s3);border:1px solid var(--line);border-radius:var(--r-md)}
.table-wrap.tall:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.tbl-view .table th,.tbl-view .table td{white-space:nowrap;padding:var(--s2) var(--s3)}
.tbl-view .table thead th{position:sticky;top:0;background:var(--card);z-index:1}
.tbl-view .table th:first-child,.tbl-view .table td:first-child{position:sticky;left:0;background:var(--card)}
.tbl-view .table thead th:first-child{z-index:2}
.tbl-view .table tr.ret td{background:var(--sunken)}
.tbl-view .table tr.sel td{background:var(--accent-soft)}
.tbl-view .table td.grp-pre{text-align:left;color:var(--ink-2)}
.tbl-view .table td .evn{display:block;font-size:var(--fs-2);color:var(--ink-3);font-weight:600}
.disc-notes{margin-top:var(--s4)}
.disc-notes h3{font-size:var(--fs-3);margin:var(--s3) 0 var(--s1)}
.disc-notes ul{margin:0;padding-left:1.2em;font-size:var(--fs-3);color:var(--ink-2);line-height:1.6}
.disc-notes .grade{color:var(--ink-3);font-size:var(--fs-2)}
.page-foot{margin-top:var(--s4)}
@media (min-width:640px){.sum{grid-template-columns:1.3fr 1fr 1fr}.sum .hero-card{grid-column:auto}}
@media (min-width:1024px){
  .layout{grid-template-columns:320px minmax(0,1fr);align-items:start;gap:var(--s6)}
  .panel{position:sticky;top:72px;max-height:calc(100vh - 88px);overflow:auto}
  .panel-toggle{cursor:default}
  .panel-toggle .chev{display:none}
  .head h1{font-size:var(--fs-7)}
  .ch-body{grid-template-columns:minmax(0,1fr) 212px;align-items:start}
}

.hint-warn{color:var(--danger);font-weight:600}
