/* Admin chrome layout. Buttons/fields/cards come from tactile 3-sheet. */
html,body{margin:0;overflow-x:clip;word-break:keep-all;overflow-wrap:anywhere}
code{font-family:var(--font);font-variant-numeric:tabular-nums}

.t-pt{font-weight:500;font-size:28px;line-height:1.25;letter-spacing:-.03em;color:var(--ink);margin:0}
.t-t1{font-weight:600;font-size:20px;line-height:1.4;letter-spacing:-.01em;color:var(--ink)}
.anchor{font-family:var(--font);font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.rowkey{font-weight:500;color:var(--ink)}

.field .hint{font-size:13px;color:var(--muted);margin-top:7px}
.sheet{padding:30px 32px}
.card{padding:26px}
.card.act{cursor:pointer}
.card h4{font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--ink);margin:0 0 6px;line-height:1.5}
.card p{margin:0;font-size:15px;line-height:1.47;color:var(--muted)}
.tbl{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.tbl th{font-size:13px;font-weight:600;color:var(--muted);text-align:left;padding:0 14px 10px 0;border-bottom:1px solid var(--line)}
.tbl td{font-size:15px;padding:13px 14px 13px 0;vertical-align:top;border-top:1px solid var(--line)}
.tbl tr:first-child td{border-top:none}
.tbl td.n{font-family:var(--font);font-weight:500;font-variant-numeric:tabular-nums;color:var(--ink);text-align:right}
/* 숫자 색은 .app-metric-value(app-surface)가 준다. */
.stat .sv{font-family:var(--font);font-weight:500;font-size:34px;line-height:1.15;font-variant-numeric:tabular-nums}
.stat .sv small{font-size:14px;color:var(--muted)}
.stat .sd{font-size:13px;margin-top:6px}
.stat .sd.up{color:var(--app-accent-text)} .stat .sd.dn{color:var(--accent-deep)}
/* 위험 숫자는 잉크. 보통 숫자의 아쿠아(.app-metric-value)보다 먼저 읽힌다. */
.stat .sv.bad{color:var(--accent-deep)}
.code{border-radius:var(--radius-sm);background:var(--control-fill);border:1px solid var(--line);box-shadow:none;
  padding:18px 20px;font-family:var(--font);font-variant-numeric:tabular-nums;font-size:13px;line-height:1.75;color:var(--ink);overflow-x:auto;white-space:pre}
.code.wrap{white-space:pre-wrap;word-break:break-word}
.track{height:4px;border-radius:2px;background:var(--line);box-shadow:none;overflow:hidden}
.fill{display:block;height:100%;border-radius:2px;background:var(--accent);transition:width var(--duration) var(--ease)}
.btngrp{display:inline-flex;gap:4px;padding:5px;border-radius:12px;background:var(--control-fill);border:1px solid var(--line);box-shadow:none}
.btngrp .btn{min-height:36px}
.icon-btn:focus-visible{outline:2px solid var(--accent-deep);outline-offset:3px}

.bdg{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;
  background:transparent;padding:3px 8px;letter-spacing:.12em;color:var(--muted);
  border:1px solid var(--line);border-radius:6px}
.bdg.ok,.bdg.warn,.bdg.err,.bdg.mute{background:transparent}
.bdg.ok{color:var(--app-accent-text)}
/* 심각도 배지(warn·err)는 잉크. 확인 칸 아쿠아를 입히면 경고가 오류보다 먼저 읽힌다. */
.bdg.warn{color:var(--accent-deep)}
.bdg.err{color:var(--accent-deep)}

/* 나타남/숨김은 tactile .toast / .toast.visible. 여기선 폭만. */

#login{min-height:100vh;display:none;align-items:center;justify-content:center;padding:32px}
/* 로그인 머리: 밝은 면(.panel) 옆자리. 잉크 첫인상 면은 디자인 시스템 v4 에서 폐기(2026-10-01). */
#login .login-stage{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:16px;width:min(880px,100%);align-items:stretch}
#login .login-intro{display:flex;flex-direction:column;justify-content:space-between;gap:32px;min-width:0;padding:28px 32px}
#login .login-lede{margin:0;font-weight:300;font-size:28px;line-height:1.3;letter-spacing:-.03em;color:var(--ink)}
#login .login-lede strong{font-weight:500}
#login .sheet{width:400px;max-width:100%}
#login h1{margin:0}
#login .login-home{display:inline-block;text-decoration:none;color:inherit;border-radius:12px}
#login .login-home:focus-visible{outline:2px solid var(--ink);outline-offset:4px}
#login .xk-wordmark{display:block;height:22px;width:auto}
#login .sub{text-align:center;margin:0}
@media(max-width:880px){
  #login{align-items:flex-start;padding:20px}
  #login .login-stage{grid-template-columns:minmax(0,1fr);width:min(400px,100%)}
  #login .login-intro{gap:20px}
  #login .login-lede{font-size:22px}
}
#login .google-box{margin-top:22px}
#login .or{display:flex;align-items:center;gap:12px;margin:16px 0 4px;font-size:13px;color:var(--muted)}
#login .or::before,#login .or::after{content:"";flex:1;height:1px;background:var(--line)}
#login .field{margin-top:12px}
#login .login-act{margin-top:20px}
#login .login-act .btn{width:100%}
#login #msg{margin-top:12px;text-align:center}

.gslot{position:relative;height:46px;width:100%}
.gslot .gbtn-face{
  position:absolute;inset:0;z-index:0;pointer-events:none;
  display:flex;align-items:center;justify-content:center;gap:10px;
  font-weight:550;color:var(--ink);font-size:13px}
.gslot:focus-within .gbtn-face{outline:2px solid var(--accent-deep);outline-offset:3px}
.gslot .gbtn-hit{position:absolute;inset:0;z-index:1;opacity:.011;overflow:hidden;border-radius:12px}
.g-logo{display:block;flex:0 0 auto}

#app{display:none;min-height:100vh}
aside,aside.material-navigation{
  position:fixed;top:0;left:0;bottom:0;width:240px;padding:28px 18px;
  display:flex;flex-direction:column;gap:6px}
aside .brand,aside .brand:link,aside .brand:visited{
  display:flex;flex-direction:column;align-items:flex-start;gap:6px;
  text-decoration:none;cursor:pointer;padding:0 6px;color:var(--ink)}
aside .brand .xk-wordmark{display:block;height:16px;width:auto}
aside .brand small{display:block;font-family:var(--font);font-size:13px;letter-spacing:.12em;
  color:var(--muted);font-weight:600}

/* ── 틀: 왼쪽 메뉴(하는 일 기준) + 위쪽 검색 막대 (2026-09-27) ── */
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
aside{overflow-y:auto;gap:var(--space-4)}
aside nav{display:flex;flex-direction:column;gap:2px}
aside .nav-group{display:flex;flex-direction:column;gap:2px;margin-top:var(--gutter)}
aside .nav-group:first-child{margin-top:0}
aside .nav-label{display:block;margin:0 0 var(--space-2);padding:var(--space-3) 10px 0;border-top:1px solid var(--line);font-size:12px;font-weight:600;line-height:1.4;letter-spacing:.12em;color:var(--muted);cursor:default}
aside .nav-group:first-child .nav-label{border-top:0;padding-top:0}
aside nav a,aside nav summary{
  display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:36px;
  text-decoration:none;font-size:13.5px;font-weight:500;color:var(--ink);
  padding:6px 10px;border-radius:10px;cursor:pointer;
  transition:background var(--duration) var(--ease),color var(--duration) var(--ease)}
aside nav a:hover,aside nav summary:hover{background:var(--control-fill)}
/* 현재 위치: 글자는 .app-current(짙은 아쿠아), 면은 중립 선택 토큰. */
aside nav a.active{background:var(--selected-fill);box-shadow:inset 0 0 0 1px var(--selected-border)}
aside nav summary{list-style:none}
aside nav summary::-webkit-details-marker{display:none}
aside nav summary::after{content:"";width:6px;height:6px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:rotate(45deg) translateY(-2px);margin-right:4px}
aside nav details[open]>summary::after{transform:rotate(225deg) translateY(-1px)}
aside nav .nav-sub{display:flex;flex-direction:column;gap:2px;margin:2px 0 4px 12px;padding-left:10px;border-left:1px solid var(--line)}
aside nav .nav-sub a{color:var(--muted)}
aside nav .nav-sub a.active{color:inherit}
aside .nav-tag{font-size:13px;color:var(--muted);font-weight:400}
aside .nav-count{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;padding:0 6px;
  border-radius:6px;background:var(--selected-fill);font-size:13px;font-weight:550;font-variant-numeric:tabular-nums;color:var(--ink)}
aside .nav-count[hidden]{display:none}
aside .side-foot{margin-top:auto;padding-top:var(--space-3);border-top:1px solid var(--line)}
.avat{flex:0 0 auto;width:32px;height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:600;color:var(--ink);background:var(--control-fill);border:1px solid var(--glass-rim)}
.avat.sm{width:32px;height:32px}

.app-main{margin-left:240px;min-width:0;display:flex;flex-direction:column;min-height:100vh}
.app-topbar{position:sticky;top:0;z-index:4;display:flex;align-items:center;gap:var(--space-4);min-height:60px;padding:10px 40px;
  background:var(--header-fill);border-bottom:1px solid var(--line)}
.app-topbar .menu-btn{display:none}
.gsearch{position:relative;flex:1;max-width:560px}
.gsearch .input{width:100%;box-sizing:border-box;padding-left:40px;padding-right:40px}
.gsearch svg{position:absolute;left:14px;top:50%;width:16px;height:16px;transform:translateY(-50%);
  stroke:var(--muted);fill:none;stroke-width:1.7;pointer-events:none}
.gsearch kbd{position:absolute;right:12px;top:50%;transform:translateY(-50%);font:13px var(--font);color:var(--muted);
  border:1px solid var(--line);border-radius:5px;padding:0 6px;pointer-events:none}
.me{margin-left:auto;display:flex;align-items:center;gap:12px;font-size:13.5px;min-width:0}
.me .who{text-align:right;line-height:1.35;min-width:0}
.me .who .nm{display:block;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.me .who small{display:block;font-size:13px;color:var(--muted)}

main{padding:32px 40px 80px;max-width:1180px;width:100%;box-sizing:border-box}
@media(min-width:881px){
  aside.material-navigation{top:12px;left:12px;bottom:12px;width:228px;height:auto}
  .app-main{margin-left:256px}
}
.workspace-topbar,.workspace-backdrop{display:none}
@media(max-width:880px){
  .app-main{margin-left:0}
  main{padding:24px 16px 64px}
  .app-topbar{padding:8px 16px;gap:10px}
  .app-topbar .menu-btn{display:inline-flex;min-height:38px}
  .me .who{display:none}
  .gsearch kbd{display:none}
  aside,[data-workspace-nav]{
    position:fixed;inset:0 auto 0 0;width:min(280px,86vw);height:100dvh;z-index:6;
    padding:24px 20px;overflow-y:auto;
    background:var(--canvas);border-right:1px solid var(--line);border-radius:0;
    transform:translateX(-100%);visibility:hidden;
    transition:transform var(--duration) var(--ease),visibility var(--duration)}
  [data-workspace-nav].is-open{transform:none;visibility:visible}
  .workspace-backdrop:not([hidden]){
    display:block;position:fixed;inset:0;z-index:5;
    background:color-mix(in srgb,var(--ink) 32%,transparent);border:0;padding:0}
}

/* 화면 머리 · 화면 안 탭 */
.crumb{font-size:13px;color:var(--muted);margin-bottom:6px}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-4)}
.page-head .lead{font-size:14px;line-height:1.7;color:var(--muted);margin:6px 0 0}
.section-tabs{display:flex;gap:4px;flex-wrap:wrap;margin:0 0 var(--space-4);padding-bottom:var(--space-2);border-bottom:1px solid var(--line)}
.section-tabs a{display:inline-flex;align-items:center;min-height:36px;padding:6px 12px;border-radius:10px;
  font-size:13.5px;font-weight:500;color:var(--muted);text-decoration:none}
.section-tabs a:hover{color:var(--ink);background:var(--control-fill)}
.section-tabs a[aria-current="page"]{color:var(--ink);background:var(--selected-fill);box-shadow:inset 0 0 0 1px var(--selected-border)}

/* 상태는 글자 + 글리프. 색 하나로 구분하지 않는다. */
.st{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;white-space:nowrap;color:var(--ink)}
.st::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;border:1.5px solid currentColor}
.st.on::before,.st.new::before{background:currentColor}
.st.wait::before,.st.hold::before{background:linear-gradient(90deg,currentColor 50%,transparent 50%)}
.st.hold,.st.off,.st.closed{color:var(--muted)}
.st.lock::before{border-radius:2px;background:currentColor}
.st.done::before{border-radius:0;width:9px;height:5px;border-width:0 0 1.8px 1.8px;transform:rotate(-45deg) translate(1px,-1px)}
.st.check{color:var(--app-accent-text);font-weight:550}
.st.check::before{border-radius:2px;transform:rotate(45deg);width:7px;height:7px}
.st.off::before{border-style:dashed}

/* 기술 정보 접기 — 내부 ID 는 여기에만 */
details.tech{margin-top:var(--space-4);border-top:1px solid var(--line);padding-top:var(--space-2)}
details.tech summary{cursor:pointer;font-size:13px;color:var(--muted);min-height:32px;display:flex;align-items:center}
details.tech .kv{margin-top:var(--space-2)}
.kv{display:grid;grid-template-columns:112px minmax(0,1fr);gap:8px 16px;font-size:14px;margin:0}
.kv dt{color:var(--muted);font-size:13px}
.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}

/* 홈 바로가기 */
.home-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4)}
.home-card{display:block;text-decoration:none;color:var(--ink);padding:22px 24px}
.home-card h2{font-size:17px;font-weight:600;margin:0 0 4px}
.home-card .stats{display:flex;flex-wrap:wrap;gap:16px;margin-top:var(--space-3)}
.hstat b{color:var(--ink);font-weight:600}
.caption{font-size:13px;color:var(--muted);line-height:1.6;margin:0}
.filters{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-3)}
.filters .segmented{flex-wrap:wrap}
.filters .segmented button{font-size:13px;min-height:34px;padding:6px 12px}
.segmented .n{margin-left:5px;color:var(--muted);font-variant-numeric:tabular-nums}
@media(max-width:880px){
  .home-grid{grid-template-columns:minmax(0,1fr)}
  .page-head{flex-direction:column;align-items:flex-start}
}
.empty-intro{margin-top:var(--space-3)}
.empty-intro .empty-title{margin:0;font-size:20px;font-weight:600;line-height:1.4;letter-spacing:-.01em}
.empty-intro .intro-copy{margin:8px 0 0;font-size:15px;line-height:1.6;color:var(--muted)}

.sub{color:var(--muted);font-size:13.5px;margin:6px 0 20px;line-height:1.55}
.muted{color:var(--muted);font-size:13.5px}
.mono{font-family:var(--font);font-weight:500;font-size:.92em;font-variant-numeric:tabular-nums}
.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.spread{justify-content:space-between}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.act{padding-top:var(--space-3);border-top:1px solid var(--line)}
.note + .act{margin-top:var(--space-3);border-top:0;padding-top:0}
.act + .act{margin-top:var(--space-4)}
.act-k{font-family:var(--font);font-size:13px;font-weight:600;color:var(--muted);
  margin-bottom:var(--space-1)}
.act-grid{display:grid;grid-template-columns:7.5rem minmax(12rem,2fr) minmax(8rem,1fr) 9rem;
  gap:12px 14px;align-items:end}
.act label{margin-top:0}
.act-grid + div{margin-top:var(--space-2)}
.act input,.act select{width:100%;box-sizing:border-box}
@media(max-width:820px){
  .act-grid{grid-template-columns:1fr 1fr}
  .act-grid > :nth-child(2){grid-column:1 / -1}
}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
@media(max-width:1100px){.g4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){.g2,.g3{grid-template-columns:1fr}}

main .card, main .stat{margin-bottom:var(--space-4)}

.mt-1{margin-top:var(--space-1)}
.mt-2{margin-top:var(--space-2)}
.mt-3{margin-top:var(--space-3)}
.mt-4{margin-top:var(--space-4)}
.mb-2{margin-bottom:var(--space-2)}
.mb-3{margin-bottom:var(--space-3)}
.mb-4{margin-bottom:var(--space-4)}
.my-3{margin:var(--space-3) 0}
.mr-2{margin-right:var(--space-2)}
.ml-3{margin-left:var(--space-3)}
.indent{margin-left:20px}
.pre{white-space:pre-wrap}
.divblock{margin-top:var(--space-4);padding-top:var(--space-3);
  border-top:1px solid var(--line)}

.note{background:var(--control-fill);border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px 18px;
  font-size:13.5px;color:var(--ink);margin-top:12px}

.cell-stack{display:flex;flex-direction:column;gap:6px;min-width:110px}
tr.clickable{cursor:pointer}
tr.clickable:hover td{background:var(--control-fill)}
/* 미저장 행 = 사람이 확인할 칸. 옅은 아쿠아 칸 + 기존 ● 표시. */
tr.dirty td,tr.dirty.clickable:hover td{background:var(--app-accent-wash)}
tr.dirty td:first-child::before{content:"● ";font-family:var(--font);font-size:13px;color:var(--app-accent-text)}
.btn.row-save:disabled{cursor:not-allowed}

.suggest{position:relative}
.suggest-list{position:absolute;left:0;right:0;top:100%;z-index:30;margin-top:4px;overflow:hidden}
.suggest-item{display:flex;align-items:center;min-height:40px;width:100%;text-align:left;
  background:transparent;box-shadow:none;border-radius:0;padding:8px 12px;border:0;cursor:pointer;
  font-family:var(--font);color:var(--ink)}
.suggest-item:hover{background:var(--control-fill)}
.suggest-empty{padding:10px 12px;color:var(--muted);font-size:13.5px}

label:not(.lb){font-size:13.5px;font-weight:600;color:var(--muted);display:block;margin:12px 0 6px}
.field label,.field-label{font-size:12px;font-weight:550;line-height:1.5;margin:0;color:inherit}
.pw-wrap{position:relative;width:100%}
.pw-wrap input{width:100%;box-sizing:border-box;padding-right:44px}
.row > .pw-wrap{flex:1;min-width:0;width:auto}
.pw-toggle{
  position:absolute;top:0;right:0;width:44px;height:44px;padding:0;
  display:flex;align-items:center;justify-content:center;
  background:none;border:0;color:var(--muted);cursor:pointer;
  transition:color var(--duration) var(--ease)}
.pw-toggle:hover{color:var(--ink)}
.pw-toggle:focus-visible{outline:2px solid var(--accent-deep);outline-offset:3px;border-radius:12px}
.pw-toggle svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round}
.pw-toggle .ic-eye-off{display:none}
.pw-toggle[aria-pressed="true"] .ic-eye{display:none}
.pw-toggle[aria-pressed="true"] .ic-eye-off{display:block}

select.cell-sel{min-width:92px;min-height:36px;font-size:13.5px;padding:4px 10px;
  border-radius:12px}

.cal-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cal-head b{font-size:13.5px;color:var(--ink)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:var(--space-2)}
.cal-wd{font-family:var(--font);font-size:13px;color:var(--muted);text-align:center;padding:4px 0}
.cal-day{min-height:40px;border:none;border-radius:12px;background:var(--control-fill);
  box-shadow:none;color:var(--ink);font-family:var(--font);font-size:13.5px;
  font-variant-numeric:tabular-nums;cursor:pointer;
  transition:background var(--duration) var(--ease),color var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}
.cal-day:hover{color:var(--ink)}
.cal-day.today{background:var(--control-fill);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}
/* 선택 칸은 중립 면 + --muted 테두리(캔버스 대비 3:1 이상). 옅은 아쿠아 테두리는 경계로 쓰지 않는다. */
.cal-day.on{background:var(--selected-fill);color:var(--ink);box-shadow:inset 0 0 0 1px var(--muted);font-weight:600}
.cal-day:disabled{cursor:not-allowed;box-shadow:none;background:transparent;color:var(--muted);opacity:.45}
.cal-day.blank{visibility:hidden}
.cal-day:focus-visible,.wk-c:focus-visible,.wk-h:focus-visible{outline:2px solid var(--accent-deep);outline-offset:3px}
.wk{display:grid;grid-template-columns:56px repeat(7,1fr);gap:3px}
.wk-t{font-family:var(--font);font-size:13px;color:var(--muted);display:flex;align-items:center}
.wk-h{min-height:32px;border:none;border-radius:12px;background:transparent;color:var(--muted);
  font-family:var(--font);font-size:13.5px;font-weight:600;cursor:pointer}
.wk-h:hover{color:var(--ink);background:var(--control-fill)}
.wk-h:disabled{cursor:not-allowed;opacity:.45}
.wk-n{display:block;font-family:var(--font);font-size:13px;font-weight:600;color:var(--ink)}
.wk-c{min-height:26px;border:none;border-radius:12px;background:var(--control-fill);
  box-shadow:none;cursor:pointer;
  transition:background var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}
.wk-c:hover{box-shadow:inset 0 0 0 1px var(--line)}
.wk-c.on{background:var(--selected-fill);box-shadow:inset 0 0 0 2px var(--muted)}
.wk-c:disabled{cursor:not-allowed;opacity:.4}
.bk-note{min-height:36px;padding:6px 12px;font-size:13.5px;flex:1;border-radius:12px}

#modal{position:fixed;inset:0;background:color-mix(in srgb,var(--ink) 45%,transparent);display:none;
  align-items:center;justify-content:center;z-index:120;padding:24px}
#modal .dialog{width:400px;max-width:100%;max-height:90vh}
/* 검토 폼은 점수 3열(각 ~193px)이라 400px 상자에서 세 번째가 잘린다. */
#modal .dialog.wide{width:min(720px,100%)}
#modal .dialog.wide .g3{grid-template-columns:repeat(3,minmax(0,1fr))}
input[type="checkbox"],input[type="radio"]{
  width:18px;height:18px;min-height:0;min-width:18px;padding:0;margin:0;
  background:transparent;box-shadow:none;flex:0 0 auto;accent-color:var(--accent)}
label.chk{display:flex;align-items:center;gap:8px;font-weight:600;margin:12px 0 6px}
.tbl td,.tbl th{overflow-wrap:break-word;word-break:normal}
.bdg,.hstat{white-space:nowrap;overflow-wrap:normal;word-break:keep-all}
.tbl td.nowrap,.tbl th.nowrap{white-space:nowrap}
#toast.toast{position:fixed;right:24px;bottom:24px;z-index:130;pointer-events:none;
  width:auto;max-width:min(360px,calc(100vw - 48px));font-weight:600;color:var(--ink)}


@media (prefers-reduced-motion:reduce){
  .btn,.toast,.cal-day,.wk-c,aside nav a,.workspace-topbar,[data-workspace-nav],
  .fill,.pw-toggle,.app-view{
    animation:none!important;transition:none!important}
}

/* ── 고객 › 사람 · 사람 상세 (2026-09-27) ── */
.chips{display:flex;flex-wrap:wrap;gap:4px}
.chip{display:inline-flex;align-items:center;padding:1px 8px;border:1px solid var(--line);border-radius:6px;
  font-size:13px;line-height:1.6;color:var(--ink);white-space:nowrap}
.chip.quiet{color:var(--muted)}
.rowname{font-weight:550}
.create-box{margin-top:var(--space-4)}
.create-box > summary{cursor:pointer;font-size:14px;font-weight:550;min-height:36px;display:flex;align-items:center}
.create-box .card{margin:var(--space-3) 0 0;padding:0;border:0;box-shadow:none;background:none}
.split{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:var(--space-4);align-items:start}
.stack > * + *{margin-top:var(--space-4)}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-2)}
.panel h2,.panel-head h2{font-size:16px;font-weight:600;line-height:1.5;margin:0}
.panel-head .more{font-size:13px;color:var(--ink);white-space:nowrap}
.person-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:20px;align-items:start;margin-bottom:var(--space-4)}
.person-head .t-pt{font-size:26px}
.person-head .meta{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:6px;font-size:13.5px;color:var(--muted)}
.person-head .actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;max-width:380px}
.person-head .actions .caption{width:100%;text-align:right}
.avat.lg{width:56px;height:56px;font-size:20px}
.facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:18px 0 0;border-top:1px solid var(--line)}
.facts div{padding:12px 16px 0 0}
.facts dt{font-size:13px;color:var(--muted)}
.facts dd{margin:2px 0 0;font-size:15px}
.tabs{display:flex;gap:22px;margin-bottom:var(--space-4);border-bottom:1px solid var(--line)}
.tabs button{font-size:14px;min-height:44px;padding:10px 1px 12px;background:none;border:0;cursor:pointer;color:var(--muted)}
.tabs button[aria-pressed="true"]{color:var(--ink);border-bottom:2px solid var(--ink);margin-bottom:-1px}
.tabs .tab-count{margin-left:6px;font-size:13px;color:var(--muted)}
.timeline{list-style:none;margin:0;padding:0}
.timeline li{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;padding:10px 0;border-top:1px solid var(--line);font-size:14px}
.timeline li:first-child{border-top:0}
.timeline time{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.product{display:grid;grid-template-columns:180px minmax(0,1fr) auto;gap:18px;padding:16px 0;border-top:1px solid var(--line);align-items:start}
.product:first-of-type{border-top:0}
.product h3{font-size:15px;font-weight:600;margin:0 0 4px}
.product .kv{grid-template-columns:88px minmax(0,1fr)}
.actions.stackv{display:flex;flex-direction:column;align-items:stretch;gap:6px}
.gate{list-style:none;margin:8px 0 0;padding:0}
.gate li{display:grid;grid-template-columns:20px minmax(0,1fr);gap:8px;font-size:13.5px;line-height:1.6;padding:4px 0}
.gate li::before{content:"";width:14px;height:14px;margin-top:3px;border-radius:50%;border:1.5px solid var(--ink)}
.gate li.ok::before{background:var(--ink);box-shadow:inset 0 0 0 3px var(--canvas)}
.gate li.no{color:var(--muted)}
.gate li.no::before{border-style:dashed;border-color:var(--muted)}
.diff{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:center;padding:14px 16px;border:1px solid var(--line);border-radius:12px;margin:16px 0}
.diff .from{color:var(--muted)}
.diff span{font-size:13px;color:var(--muted);display:block}
.diff b{font-weight:600;font-size:15px}
@media(max-width:1100px){
  .split{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:880px){
  .person-head{grid-template-columns:auto minmax(0,1fr)}
  .person-head .actions{grid-column:1 / -1;justify-content:flex-start;max-width:none}
  .person-head .actions .caption{text-align:left}
  .facts{grid-template-columns:repeat(2,minmax(0,1fr))}
  .product{grid-template-columns:minmax(0,1fr)}
  .tabs{overflow-x:auto;gap:16px}
  .timeline li{grid-template-columns:72px minmax(0,1fr)}
}
.panel:not(.card){padding:20px 24px}
#view a:not(.btn){color:inherit}
#view a.more{font-size:13px;color:var(--ink)}
.stat a.more{display:inline-block;margin-top:var(--space-2)}
#view a.more,#view .timeline a{text-decoration:none}
#view a.more:hover,#view .timeline a:hover{text-decoration:underline}
.tabs button{white-space:nowrap;flex:0 0 auto}
.app-review h2.app-review-label{font-size:15px;line-height:1.5;margin:0}
.filters .input{width:auto;min-height:40px}
.filters .grow{flex:1 1 240px;min-width:0}
@media(max-width:880px){.filters .input{flex:1 1 100%}}

/* ── 홈 「오늘 할 일」 (2026-09-27) ── */
.home-head{padding:26px 30px;margin-bottom:var(--space-4);display:flex;align-items:flex-end;justify-content:space-between;gap:24px}
.home-head h1{font-size:28px;line-height:1.3;letter-spacing:-.03em;margin:0}
.home-head .intro-copy{font-size:14px;margin:6px 0 0;color:var(--muted)}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4)}
.todo{display:flex;flex-direction:column}
.todo h2{display:flex;align-items:baseline;gap:8px}
.todo .todo-n{font-size:28px;font-weight:500;line-height:1.1;letter-spacing:-.02em}
.todo ul{list-style:none;margin:var(--space-2) 0 0;padding:0}
.todo li{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 16px;padding:11px 10px;margin:0 -10px;
  border-top:1px solid var(--line);border-radius:8px}
.todo li:hover{background:var(--selected-fill)}
.todo li a{text-decoration:none;font-size:14px;font-weight:550}
.todo li a::after{content:"";position:absolute;inset:0}
.todo li .sub{grid-column:1;font-size:13px;color:var(--muted)}
.todo li .when{grid-row:1 / span 2;grid-column:2;align-self:center;font-size:13px;color:var(--muted);text-align:right;white-space:nowrap}
.todo li .when b{display:block;font-weight:550;color:var(--ink)}
.todo li.empty{display:block;font-size:13.5px;color:var(--muted)}
.todo li.empty:hover{background:none}
@media(max-width:880px){
  .grid-2{grid-template-columns:minmax(0,1fr)}
  .home-head{flex-direction:column;align-items:flex-start;padding:22px 20px}
}

/* ── 분석 검토 (2026-09-27) ── */
.queue{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:var(--space-3) 0 var(--space-2)}
.queue-item{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 14px;text-align:left;cursor:pointer;
  border:1px solid var(--line);border-radius:12px;background:transparent;font:inherit;font-size:13.5px;line-height:1.5;color:var(--ink)}
.queue-item:hover{background:var(--selected-fill)}
.queue-item[aria-pressed="true"]{background:var(--selected-fill);border-color:var(--selected-border)}
.queue-item b{font-weight:600}
.queue-item small{font-size:13px;color:var(--muted)}
.excerpt{font-size:14px;line-height:1.8;padding:12px 16px;border-radius:10px;background:var(--control-fill);border:1px solid var(--line)}
.excerpt + .excerpt{margin-top:8px}
.claims{list-style:none;margin:0;padding:0}
.claims li{display:grid;grid-template-columns:56px minmax(0,1fr) 96px;gap:12px;padding:14px 0;border-top:1px solid var(--line)}
.claims li:first-child{border-top:0}
.claims .kind{font-size:13px;color:var(--muted);padding-top:2px}
.claims .text{font-size:14px;font-weight:550}
.claims blockquote{margin:6px 0 0;padding:0;font-size:13.5px;color:var(--muted);line-height:1.65}
.claims blockquote::before{content:"근거 · ";color:var(--ink);font-weight:550}
.claims .none{margin:6px 0 0}
.claims li.flag{background:var(--app-accent-wash);margin:0 -12px;padding:14px 12px;border-radius:10px;border-top-color:transparent}
.conf{font-size:13px;text-align:right;padding-top:2px}
.conf .bar{display:block;height:4px;border-radius:2px;background:var(--line);margin-top:6px;overflow:hidden}
.conf .bar i{display:block;height:100%;background:var(--ink)}
.checks{list-style:none;margin:0;padding:0}
.checks li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;padding:11px 0;border-top:1px solid var(--line);font-size:14px}
.checks li:first-child{border-top:0}
.checks li .caption{grid-column:1}
.checks li .res{grid-row:1 / span 2;grid-column:2;align-self:center}
.rubric h3{font-size:14px;font-weight:600;margin:var(--space-3) 0 0}
.rubric h3 .q{font-weight:400;color:var(--muted);font-size:13px;margin-left:4px}
.rubric ol{list-style:none;margin:6px 0 0;padding:0}
.rubric li{display:grid;grid-template-columns:56px minmax(0,1fr);gap:8px;font-size:13.5px;line-height:1.6;padding:3px 0}
.rubric li b{font-weight:600;font-variant-numeric:tabular-nums}
.divider{border:0;border-top:1px solid var(--line);margin:var(--space-4) 0}
.score{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.btn.full{width:100%}
@media(max-width:1100px){.queue{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:880px){
  .queue{grid-template-columns:minmax(0,1fr)}
  .claims li{grid-template-columns:minmax(0,1fr)}
  .conf{text-align:left}
}

.runs-pages{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;margin:var(--space-3) 0}
.runs-pages button{border:1px solid var(--line);background:var(--solid);color:var(--ink);border-radius:8px;padding:6px 10px;cursor:pointer}
.runs-pages button[aria-current="page"]{background:var(--selected-fill);border-color:var(--selected-border)}
.runs-pages button:disabled{opacity:.45;cursor:default}
.score-help { margin: .35rem 0 .65rem; }
.score-help summary { cursor: pointer; color: var(--muted); font-size: .82rem; }
.score-help ol { margin: .4rem 0; padding-left: 1.3rem; }

/* 검토 큐는 좁은 화면에서 한 행을 세로로 읽는다. 환불 칩도 카드 폭 안에서 줄바꿈한다. */
[data-review-group] .chip{white-space:normal}
@media(max-width:600px){
  [data-review-group] .tbl,[data-review-group] .tbl tbody,[data-review-group] .tbl tr,[data-review-group] .tbl td{display:block;width:100%;box-sizing:border-box}
  [data-review-group] .tbl tr:has(th){display:none}
  [data-review-group] .tbl td{padding:var(--space-2) 0;border-top:none;overflow-wrap:anywhere}
  [data-review-group] .tbl td.n{text-align:left}
  [data-review-group] .tbl tr + tr{border-top:1px solid var(--line)}
}
