/* OBF 업무 공간 · 토큰은 obf-site/DESIGN.md와 같은 값. 흑·백·적, 선으로 구분, 그림자 없음. */
:root{
  --paper:#f7f5f1;--surface:#ffffff;--surface-alt:#efece6;--ink:#0a0a0a;--sub:#5a5a5a;--muted:#6b6b6b;--faint:#b8b8b8;
  --line:#e3dfd8;--line-strong:#c9c3b9;--signal:#f50000;
  --topbar-bg:var(--paper);--scrim:rgba(10,10,10,.28);--ink-hover:#2a2a2a;--on-ink:#bdbdbd;--mark-bg:var(--line-strong);--logo-bg:#f7f5f1;--mask:#000;
  color-scheme:light;
  --sans:Pretendard,"Pretendard Variable",Inter,"Helvetica Neue","Apple SD Gothic Neo",Helvetica,Arial,sans-serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --beat:500ms;--ease:cubic-bezier(.2,0,.38,.9);
  --gutter:clamp(16px,4vw,28px);--shell:1200px;--bar:56px;
  font-family:var(--sans);font-size:14px;line-height:1.6;color:var(--ink);background:var(--paper);
  -webkit-font-smoothing:antialiased;
}
*{box-sizing:border-box}
body{margin:0;min-height:100vh;background:var(--paper);word-break:keep-all;overflow-wrap:break-word}
button,input,select,textarea{font:inherit;color:inherit}
a{color:inherit}
h1,h2,h3,h4,p{margin:0}
:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
[hidden]{display:none!important}

/* 계측기 라벨: 모노·소문자 유지. 날짜·지역·건수·표 머리에만 쓴다. */
.label{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--muted)}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}

/* 상단 바: 첫 줄은 브랜드·행사·검색·계정, 둘째 줄은 주 메뉴. 메뉴가 잘리지 않도록 항상 두 줄이며 모든 폭에서 같은 구조다. */
.topbar{position:sticky;top:0;z-index:20;background:var(--topbar-bg);backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--line)}
.topbar-inner{max-width:var(--shell);margin:0 auto;padding:0 var(--gutter);display:flex;flex-wrap:wrap;align-items:center;gap:0 20px}
.brand-wrap,.tools{height:var(--bar)}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;flex-shrink:0;background:none;border:0;padding:0;cursor:pointer}
.brand img{display:block;width:54px;height:auto}
.brand span{font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--sub);white-space:nowrap}
.nav{order:3;flex-basis:100%;display:flex;align-items:stretch;height:40px;gap:2px;margin:0 calc(-1 * var(--gutter));padding:0 var(--gutter);min-width:0;overflow-x:auto;scrollbar-width:none;border-top:1px solid var(--line)}
.nav::-webkit-scrollbar{display:none}
.nav button{position:relative;background:none;border:0;padding:0 11px;color:var(--sub);white-space:nowrap;cursor:pointer;font-weight:500;transition:color calc(var(--beat)/4) var(--ease)}
.nav button:first-child{padding-left:0}
.nav button:first-child[aria-current="page"]::after{left:0}
.nav button:hover{color:var(--ink)}
.nav button[aria-current="page"]{color:var(--ink);font-weight:600}
/* 화면에서 시그널 적색은 이 밑줄 한 곳이다. */
.nav button[aria-current="page"]::after{content:"";position:absolute;left:11px;right:11px;bottom:-1px;height:2px;background:var(--signal)}
.nav button .count{font-family:var(--mono);font-size:10.5px;color:var(--muted);margin-left:5px}
.tools{margin-left:auto;display:flex;align-items:center;gap:8px;flex-shrink:0}
.search{position:relative}
.search input{width:220px;height:34px;border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:0 10px;transition:width calc(var(--beat)/2) var(--ease),border-color calc(var(--beat)/4) var(--ease)}
.search input:focus{width:300px;border-color:var(--ink);outline:0}
.search input::placeholder{color:var(--muted)}
.persona{height:34px;border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:0 8px;max-width:170px;color:var(--sub)}

/* 검토판 안내 띠 */
.strip{border-bottom:1px solid var(--line);background:var(--surface-alt);color:var(--sub);font-size:12px}
.strip-inner{max-width:var(--shell);margin:0 auto;padding:6px var(--gutter);display:flex;gap:14px;flex-wrap:wrap}
.strip b{font-weight:600;color:var(--ink)}

/* 본문 */
main{max-width:var(--shell);margin:0 auto;padding:28px var(--gutter) 64px;min-width:0}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}
.page-head h1{font-size:26px;font-weight:700;letter-spacing:-.022em;line-height:1.15}
.page-head .meta{color:var(--muted);font-size:12.5px;margin-top:6px}
.page-actions{display:flex;gap:8px;flex-wrap:wrap}
#message{min-height:18px;color:var(--sub);font-size:13px;margin:-10px 0 14px}
#message:empty{margin:0;min-height:0}

/* 버튼 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:0 13px;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);cursor:pointer;white-space:nowrap;transition:border-color calc(var(--beat)/4) var(--ease),background calc(var(--beat)/4) var(--ease)}
.btn:hover{border-color:var(--ink)}
.btn.primary{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.btn.primary:hover{background:var(--ink-hover)}
.btn.small{min-height:28px;padding:0 9px;font-size:12.5px}
.btn.ghost{border-color:transparent;background:transparent;color:var(--sub)}
.btn.ghost:hover{color:var(--ink);background:var(--surface-alt)}
.btn:disabled{opacity:.45;cursor:default}
.link{background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line-strong);color:var(--sub)}
.link:hover{color:var(--ink);text-decoration-color:var(--ink)}

/* 주목 지표: 큰 카드 대신 한 줄. 각 항목은 해당 목록으로 이동한다. */
.pulse{display:flex;flex-wrap:wrap;border-top:1px solid var(--ink);border-bottom:1px solid var(--line);margin-bottom:28px}
.pulse button{flex:1 1 160px;display:flex;flex-direction:column;gap:2px;background:none;border:0;border-right:1px solid var(--line);padding:14px 16px 14px 0;margin-right:16px;text-align:left;cursor:pointer}
.pulse button:last-child{border-right:0;margin-right:0}
.pulse .v{font-family:var(--mono);font-size:24px;font-weight:500;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums}
.pulse .k{font-size:13px;color:var(--sub)}
.pulse .s{font-size:11.5px;color:var(--muted)}
.pulse button:hover .k{color:var(--ink)}

/* 섹션 */
.grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:40px;align-items:start}
.stack{display:grid;gap:32px;min-width:0}
.block{min-width:0}
.block-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:8px;border-bottom:1px solid var(--ink);margin-bottom:4px}
.block-head h2{font-size:15px;font-weight:600;letter-spacing:-.01em}
.block-head h2 .count{font-family:var(--mono);font-size:11.5px;font-weight:400;color:var(--muted);margin-left:8px}
.block-head .more{font-size:12.5px}
.block-note{color:var(--muted);font-size:12px;padding:10px 0 0;line-height:1.6}

/* 행 목록 */
.rows{display:block}
.row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 16px;align-items:center;width:100%;padding:9px 0;border-bottom:1px solid var(--line);background:none;border-left:0;border-right:0;border-top:0;text-align:left;cursor:pointer;color:inherit;transition:background calc(var(--beat)/4) var(--ease)}
.row:hover{background:var(--surface)}
.row .t{font-weight:500;line-height:1.45;overflow-wrap:anywhere}
.row .d{grid-column:1;font-size:12px;color:var(--muted);display:flex;gap:8px;flex-wrap:wrap}
.row .d .sep{color:var(--faint)}
.row .r{grid-column:2;grid-row:1/span 2;display:flex;gap:6px;align-items:center;justify-self:end}
.row.lead .t::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--ink);margin:0 8px 2px 0}

/* 칩과 상태 */
.chip{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border:1px solid var(--line-strong);border-radius:999px;font-size:11.5px;color:var(--sub);white-space:nowrap;background:var(--surface)}
.chip.solid{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.chip.faint{border-style:dashed;color:var(--muted);background:transparent}
.chip.mono{font-family:var(--mono);font-size:10.5px;letter-spacing:.04em}
.reply{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:13px}
.reply::before{content:"";width:8px;height:8px;border-radius:50%;border:1.5px solid var(--ink);flex-shrink:0}
.reply.yes::before{background:var(--ink)}
.reply.no::before{background:transparent}
.reply.unknown{color:var(--muted)}
.reply.unknown::before{border-color:var(--faint);border-style:dashed}

/* 필터 */
.filters{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:18px}
.filters .group{display:flex;gap:4px;border:1px solid var(--line);border-radius:999px;padding:3px;background:var(--surface)}
.filters .group button{border:0;background:none;padding:4px 11px;border-radius:999px;color:var(--sub);cursor:pointer;font-size:13px;white-space:nowrap}
.filters .group button[aria-pressed="true"]{background:var(--ink);color:var(--surface)}
.filters .group button .count{font-family:var(--mono);font-size:10.5px;margin-left:4px;opacity:1}
.filters .spacer{flex:1}
.filters .hint{font-size:12px;color:var(--muted)}

/* 표 */
.table-wrap{border-top:1px solid var(--ink);min-width:0;max-width:100%}
table{border-collapse:collapse;width:100%;min-width:0;table-layout:fixed}
th{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;font-weight:500;color:var(--muted);text-align:left;padding:9px 10px 9px 0;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:9px 10px 9px 0;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.5}
tr.click{cursor:pointer}
tr.click:hover td{background:var(--surface)}
td .name{font-weight:600}
td .sub{display:block;font-size:12px;color:var(--muted);margin-top:2px}
td.n{font-family:var(--mono);font-size:12.5px;white-space:nowrap;color:var(--sub)}
td.next{color:var(--sub);max-width:320px}
.partners{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:18px;font-size:13px;color:var(--sub)}
.partners .chip{cursor:pointer}
.partners .chip:hover{border-color:var(--ink)}

/* 시안 목록 */
.drafts{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1px;background:var(--line);border:1px solid var(--line)}
.draft{background:var(--surface);padding:18px 18px 16px;text-align:left;border:0;cursor:pointer;display:grid;gap:8px;align-content:start;min-width:0}
.draft:hover{background:var(--paper)}
.draft .head{display:flex;justify-content:space-between;gap:8px;align-items:center}
.draft h3{font-size:14.5px;font-weight:600;line-height:1.4;overflow-wrap:anywhere}
.draft .to{font-size:12.5px;color:var(--sub);overflow-wrap:anywhere}
.draft .to b{font-weight:500;color:var(--muted)}
.draft .preview{font-size:12.5px;color:var(--muted);line-height:1.6;white-space:pre-line;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.draft .foot{display:flex;justify-content:space-between;font-family:var(--mono);font-size:10.5px;color:var(--muted)}

/* 탭 */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:22px;overflow-x:auto;scrollbar-width:none}
.tabs button{position:relative;background:none;border:0;padding:8px 12px;color:var(--sub);cursor:pointer;white-space:nowrap;font-weight:500}
.tabs button[aria-selected="true"]{color:var(--ink);font-weight:600}
.tabs button[aria-selected="true"]::after{content:"";position:absolute;left:12px;right:12px;bottom:-1px;height:2px;background:var(--ink)}

/* 안내·가이드 본문 */
.prose{max-width:760px;line-height:1.8}
.prose h2{font-size:18px;font-weight:700;letter-spacing:-.015em;margin:34px 0 10px}
.prose h2:first-child{margin-top:0}
.prose h3{font-size:15px;font-weight:600;margin:26px 0 8px}
.prose h4{font-size:14px;font-weight:600;margin:20px 0 6px}
.prose p{margin:8px 0;color:var(--ink-hover)}
.prose ol,.prose ul{padding-left:22px;margin:8px 0}
.prose li{margin:4px 0}
.prose code{font-family:var(--mono);font-size:12px;background:var(--surface-alt);padding:1px 5px;border-radius:4px}
.prose table{min-width:0;font-size:13px}
.prose .table-wrap{border-top:1px solid var(--line-strong);margin:12px 0}
.prose .table-wrap table{min-width:560px}
.callout{border-left:2px solid var(--ink);padding:10px 16px;margin:14px 0;color:var(--sub);background:var(--surface);line-height:1.7}
.flow{display:flex;gap:6px;flex-wrap:wrap;margin:14px 0}
.flow span{border:1px solid var(--line-strong);border-radius:999px;padding:4px 12px;font-size:12.5px;color:var(--sub)}
.snippet{position:relative;margin:12px 0}
.snippet pre{margin:0;padding:16px 18px;border:1px solid var(--line);border-radius:6px;background:var(--surface);white-space:pre-wrap;overflow-wrap:anywhere;font:12.5px/1.75 var(--mono)}
.snippet .btn{position:absolute;top:8px;right:8px}
.guide-layout{display:grid;grid-template-columns:200px minmax(0,1fr);gap:40px;align-items:start}
.toc{position:sticky;top:calc(var(--bar) + 20px);display:grid;gap:2px;font-size:12.5px;max-height:calc(100vh - var(--bar) - 40px);overflow:auto}
.toc a{color:var(--sub);text-decoration:none;padding:4px 0;border-left:1px solid var(--line);padding-left:12px}
.toc a:hover{color:var(--ink);border-left-color:var(--ink)}
.guide-search{display:flex;gap:8px;align-items:center;margin-bottom:18px}
.guide-search input{flex:1;max-width:420px;height:34px;border:1px solid var(--line);border-radius:6px;padding:0 10px;background:var(--surface)}
.guide-search .hint{font-size:12px;color:var(--muted)}
mark{background:var(--mark-bg);color:var(--ink);padding:0 1px}

/* 상세 서랍 */
dialog.drawer{position:fixed;inset:0 0 0 auto;margin:0;width:min(640px,100vw);max-width:100vw;height:100dvh;max-height:100dvh;border:0;border-left:1px solid var(--line);padding:0;background:var(--surface);color:inherit;display:flex;flex-direction:column}
dialog.drawer:not([open]){display:none}
dialog.drawer.wide{width:min(900px,100vw)}
dialog.drawer::backdrop{background:var(--scrim)}
.drawer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px var(--gutter);border-bottom:1px solid var(--line);flex-shrink:0}
.drawer-head .kind{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--muted)}
.drawer-body{overflow:auto;padding:22px var(--gutter) 40px;flex:1;min-height:0}
.drawer-body h2{font-size:20px;font-weight:700;letter-spacing:-.02em;line-height:1.3;margin-bottom:10px}
.drawer-body .chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:18px}
.facts{margin-top:18px;display:grid;grid-template-columns:120px minmax(0,1fr);gap:8px 16px;font-size:13.5px;border-top:1px solid var(--line);padding-top:14px}
.facts dt{color:var(--muted);font-size:12.5px}
.facts dd{margin:0;overflow-wrap:anywhere}
.routes{display:grid;gap:6px;margin-top:4px}
.routes div{display:flex;gap:10px;align-items:center;font-size:13px}
.routes .label:first-child{min-width:84px}
.section{margin-top:28px;padding-top:18px;border-top:1px solid var(--line)}
.section h3{font-size:14px;font-weight:600;margin-bottom:12px;display:flex;justify-content:space-between;align-items:baseline}
.section h3 .count{font-family:var(--mono);font-size:11px;font-weight:400;color:var(--muted)}
.body-text{white-space:pre-wrap;line-height:1.8;overflow-wrap:anywhere}
.comment{padding:12px 14px;border:1px solid var(--line);border-radius:6px;margin-bottom:8px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}
.comment small{display:block;font-family:var(--mono);font-size:10.5px;color:var(--muted);margin-bottom:6px}
.history p{font-size:12.5px;color:var(--muted);margin:3px 0}
.history p b{font-weight:500;color:var(--sub)}
#dialog-message{font-size:13px;color:var(--sub);margin-top:14px;min-height:0}
#dialog-message:empty{display:none}

/* 폼 */
label.f{display:grid;gap:5px;font-size:12.5px;color:var(--sub)}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 16px}
.form-grid .full{grid-column:1/-1}
input:not([type=search]),select,textarea{width:100%;min-height:36px;border:1px solid var(--line-strong);border-radius:6px;padding:7px 10px;background:var(--surface);transition:border-color calc(var(--beat)/4) var(--ease)}
input:focus,select:focus,textarea:focus{border-color:var(--ink);outline:0}
input:disabled,select:disabled,textarea:disabled{background:var(--paper);color:var(--sub);border-color:var(--line)}
textarea{min-height:120px;resize:vertical;line-height:1.6}
textarea.mail-body{min-height:340px;font-family:var(--mono);font-size:12.5px;line-height:1.7}
.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;flex-wrap:wrap}
.form-note{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.6}

/* 팀 */
.member{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}
.member .s{font-size:12px;color:var(--muted)}

/* 빈 상태 */
.empty{padding:28px 0;color:var(--muted);font-size:13px;line-height:1.7}
.empty b{display:block;color:var(--sub);font-weight:500}

footer{max-width:var(--shell);margin:0 auto;padding:18px var(--gutter) 40px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--muted)}

@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

@media (max-width:1000px){
  .grid{grid-template-columns:1fr;gap:32px}
  .guide-layout{grid-template-columns:1fr}
  .toc{position:static;max-height:none;display:flex;flex-wrap:wrap;gap:4px 14px}
  .toc a{border-left:0;padding-left:0}
  .search input{width:160px}
  .search input:focus{width:220px}
}
@media (max-width:760px){
  :root{--bar:48px}
  .topbar-inner{gap:0 12px}
  .brand img{width:46px}
  .brand span{display:none}
  .tools{margin-left:auto;gap:6px}
  .search input{width:120px}
  .search input:focus{width:170px}
  .persona{max-width:120px;font-size:12px}
  .nav{gap:0;mask-image:linear-gradient(90deg,var(--mask) calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(90deg,var(--mask) calc(100% - 28px),transparent)}
  .nav button{padding:0 10px}
  .nav button[aria-current="page"]::after{left:10px;right:10px}
  .strip-inner{padding:6px var(--gutter);font-size:11.5px;gap:4px 10px}
  main{padding:20px var(--gutter) 56px}
  .page-head h1{font-size:22px}
  .pulse button{flex-basis:calc(50% - 8px);padding:12px 12px 12px 0;margin-right:12px}
  .pulse button:nth-child(2n){border-right:0;margin-right:0}
  .pulse .v{font-size:20px}
  .row{grid-template-columns:1fr}
  .row .r{grid-column:1;grid-row:auto;justify-self:start}
  .form-grid{grid-template-columns:1fr}
  .form-grid .full{grid-column:auto}
  .facts{grid-template-columns:1fr;gap:2px 0}
  .facts dt{margin-top:8px}
  dialog.drawer,dialog.drawer.wide{width:100vw;border-left:0}
  .drafts{grid-template-columns:1fr}
  .filters .group{overflow-x:auto;max-width:100%;scrollbar-width:none}
}

/* CSP style-src 'self' 때문에 인라인 스타일은 쓰지 않는다. */
.chip.solid .on-ink{color:var(--on-ink)}
td.n .dim{color:var(--muted)}
.form-note.lead-note{margin:0 0 16px}
.block-note.pad{padding-bottom:14px}
.name-btn{background:none;border:0;padding:0;font-weight:600;cursor:pointer;text-align:left;color:inherit;overflow-wrap:anywhere}

/* 받는 사람 선택 콤보박스 */
.picker{position:relative}
.picker-list{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:5;margin:0;padding:4px;list-style:none;background:var(--surface);border:1px solid var(--line-strong);border-radius:6px;max-height:280px;overflow:auto}
.picker-list li[role=option]{display:flex;gap:8px;align-items:center;padding:8px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-width:0}
.picker-list li[role=option]:hover,.picker-list li[aria-selected=true]{background:var(--surface-alt)}
.o-name{font-weight:600;white-space:nowrap}
.o-route{color:var(--muted);font-size:12px;margin-left:auto;text-align:right;overflow-wrap:anywhere}
.picker-more{padding:8px 10px;font-size:12px;color:var(--muted)}
@media (max-width:760px){.picker-list li[role=option]{flex-wrap:wrap}.o-route{margin-left:0;text-align:left;flex-basis:100%}}

/* 참여 면 칩: 확정=채움, 협의 중=실선, 미확인=점선, 해당 없음·불참=취소선 */
.facets{display:inline-flex;flex-wrap:wrap;gap:4px;max-width:300px;vertical-align:middle}
.chip.facet{font-size:11px;height:20px;padding:0 7px}
.chip.talk{border-color:var(--ink);color:var(--ink)}
.chip.off{text-decoration:line-through;color:var(--muted);border-color:var(--line);background:transparent}
td .facets{max-width:330px}
.row .r .facets{max-width:220px;justify-content:flex-end}

/* 시안 읽기 화면 */
.mail-view{white-space:pre-wrap;overflow-wrap:anywhere;font:13px/1.75 var(--mono);border:1px solid var(--line);border-radius:6px;padding:16px 18px;background:var(--paper);margin:16px 0 0}
.form-actions.start{justify-content:flex-start}
#dialog-message .btn{margin-left:8px;vertical-align:middle}

/* 발송 전 확인 관문 */
.callout.warn{border-left-color:var(--ink);color:var(--ink)}
.checklist{display:grid;gap:8px;margin:12px 0 16px}
.check{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;line-height:1.5;cursor:pointer}
.check input{width:16px;height:16px;min-height:0;margin-top:3px;flex-shrink:0;accent-color:var(--ink)}
.send-check .form-note{flex:1;min-width:200px}

/* 운영 세션 표시와 목록 이어 불러오기 */
.session{display:flex;align-items:center;gap:10px}
.who{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--sub);white-space:nowrap}
.more-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:24px;padding-top:16px;border-top:1px solid var(--line)}
/* 운영 라우터가 내보내는 로그인 페이지(main 하나에 로고·제목·폼) */
body:has(> main > form[action="/auth/login"]){display:grid;place-items:center;min-height:100vh}
body:has(> main > form[action="/auth/login"]) > main{max-width:420px;padding:32px var(--gutter)}
body:has(> main > form[action="/auth/login"]) > main img{display:block;width:80px;height:auto;margin-bottom:24px}
body:has(> main > form[action="/auth/login"]) > main h1{font-size:22px;font-weight:700;letter-spacing:-.02em;margin-bottom:8px}
body:has(> main > form[action="/auth/login"]) > main p{color:var(--sub);margin-bottom:20px}

/* 긴 본문 접기 */
.clamp .body-text{max-height:9.5em;overflow:hidden;position:relative}
.clamp .body-text::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3em;background:linear-gradient(transparent,var(--surface))}
.clamp.open .body-text{max-height:none}
.clamp.open .body-text::after{display:none}
.clamp .link{margin-top:6px;font-size:12.5px}
/* 참고 후보 원본·문서 부분 이동 */
details.raw{margin-top:16px}
details.raw summary{cursor:pointer;color:var(--sub);font-size:13px}
details.raw pre{margin-top:8px;padding:12px 14px;border:1px solid var(--line);border-radius:6px;background:var(--paper);white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 var(--mono);max-height:320px;overflow:auto}
.parts{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.facts dd a{color:var(--ink);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line-strong);overflow-wrap:anywhere}
table.dense td{padding:8px 10px 8px 0;font-size:13.5px}
table.dense td .sub{font-size:11.5px}
/* 모바일: 표를 카드형으로 쌓는다 */
@media (max-width:760px){
  table.stacked{min-width:0;border-top:0}
  table.stacked thead{display:none}
  table.stacked tr{display:block;padding:10px 0;border-bottom:1px solid var(--line)}
  table.stacked td{display:flex;gap:10px;align-items:flex-start;padding:3px 0;border:0;font-size:13px}
  table.stacked td::before{content:attr(data-label);flex:0 0 64px;color:var(--muted);font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;padding-top:3px}
  table.stacked td.n{white-space:normal}
  table.stacked td .facets{max-width:none}
  tr.click:hover td{background:transparent}
}

/* 역할 배지 · 완료 피드 · 방향 변경 · 회의 · 메일 이력 · 행사 선택 · 현지 시각 */
.who-tag{display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}
.who-tag .role{font-family:var(--mono);font-size:10px;letter-spacing:.04em;color:var(--sub);border:1px solid var(--line-strong);border-radius:3px;padding:1px 4px;line-height:1.3;white-space:nowrap}
.who-tag .role.access{color:var(--muted);border-style:dashed}
.unknown{color:var(--muted)}
.row.static{cursor:default}
.row.static:hover{background:transparent}
.row .link-row,.meeting-card .link-row{background:none;border:0;padding:0;font:inherit;font-weight:500;text-align:left;color:inherit;cursor:pointer;line-height:1.45;overflow-wrap:anywhere}
.row .link-row:hover,.meeting-card .link-row:hover{text-decoration:underline;text-underline-offset:3px}
.row .d .link{font-size:12px;color:var(--ink);text-decoration-color:var(--line-strong)}
.row .d .link+.link::before{content:", ";color:var(--muted)}
.row.feed .d{gap:6px}
.meeting-card{padding:12px 0 0}
.meeting-card .when{display:flex;flex-direction:column;gap:4px;margin:0 0 12px}
.meeting-card .when b{font-size:15px;font-weight:600}
.agenda{display:grid;grid-template-columns:72px minmax(0,1fr);gap:6px 12px;font-size:13.5px;margin:0}
.agenda dt{color:var(--muted);font-size:12.5px}
.agenda dd{margin:0}
.brand-wrap{display:flex;align-items:center;gap:10px;flex-shrink:0;min-width:0}
.brand-wrap .sep{color:var(--faint);font-size:14px}
.project{appearance:none;-webkit-appearance:none;background:transparent;border:0;border-bottom:1px solid var(--line-strong);padding:2px 0;font:inherit;font-size:12.5px;color:var(--ink);cursor:pointer;max-width:200px;text-overflow:ellipsis}
.project:focus{outline:0;border-bottom-color:var(--ink)}
.chip.clock .lt{font-variant-numeric:tabular-nums;color:var(--ink);margin-left:2px}
.clock .lt{font-variant-numeric:tabular-nums}
.mail-tools{margin:0 0 16px}
.mail-tools input{width:100%;max-width:440px;height:34px;border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:0 10px}
.mail-tools input:focus{border-color:var(--ink);outline:0}
.sync-line{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:12px;color:var(--muted);margin:0 0 10px}
.sync-line .err{color:var(--ink)}
.chip.warn{border-color:var(--ink);color:var(--ink)}
.mail-msg .snippet{grid-column:1;font-size:12.5px;color:var(--sub);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.mail-msg.unread .t{font-weight:600}
.plain{list-style:none;padding:0;margin:0}
.plain li{padding:10px 0;border-bottom:1px solid var(--line);line-height:1.6}
.plain li .d{display:flex;flex-wrap:wrap;gap:8px;font-size:12px;color:var(--muted);margin-top:4px}
.plain li p{margin:6px 0 0;color:var(--sub);font-size:13px}
.plain li .say{padding-left:12px;border-left:2px solid var(--line)}
.plain li .label{margin-right:6px}
@media (max-width:760px){.brand-wrap .sep{display:none}.project{max-width:140px;font-size:12px}}
.facts.top{margin-top:0;border-top:0;padding-top:0;margin-bottom:14px}
.k-title{margin:0 0 8px}
.section h3 .chip{margin-left:8px}
.sources{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
details.raw pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12.5px;line-height:1.6;margin:8px 0 0}
.hist{padding:8px 0;border-bottom:1px solid var(--line)}
.hist p{margin:0;line-height:1.6}
.hist .chip{margin-left:6px}
.hist-tools{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
details.raw.small{margin-top:4px}
details.raw.small summary{font-size:12px}
details.raw.small .form-note{margin-top:4px}
.correct-form{margin-top:10px;padding:12px;border:1px dashed var(--line-strong);border-radius:6px}
.contact-cell{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
td>.contact-cell{margin:0}
.contact-cell a{white-space:nowrap}
.facts dd .d{display:flex;flex-wrap:wrap;gap:6px;font-size:12px;color:var(--muted);margin-top:4px}
td .chip.faint+.chip,td .name-btn+.chip{margin-left:6px}
fieldset.members,fieldset.channels{border:1px solid var(--line);border-radius:6px;padding:10px 12px;display:grid;gap:8px}
fieldset legend{font-size:12.5px;color:var(--muted);padding:0 4px}
fieldset .check .label{margin-left:8px}


/* 팀원 카드·연결 보기·스레드·첨부 */
.person-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin-bottom:28px}
.person-card{display:flex;flex-direction:column;gap:6px;padding:16px;background:var(--paper);border:0;text-align:left;cursor:pointer;color:inherit}
.person-card:hover{background:var(--surface)}
.person-card.on{background:var(--surface);box-shadow:inset 0 0 0 1px var(--ink)}
.person-card .name{font-size:16px;font-weight:600}
.person-card .roles{display:flex;gap:5px;flex-wrap:wrap}
.person-card .role{font-family:var(--mono);font-size:10px;letter-spacing:.04em;border:1px solid var(--line-strong);border-radius:3px;padding:1px 4px;color:var(--sub)}
.person-card .role.access{border-style:dashed;color:var(--muted)}
.person-card .contact{font-size:12.5px;color:var(--sub);overflow-wrap:anywhere}
.person-card .stats{display:flex;gap:10px;flex-wrap:wrap;font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:4px}
.person-head .facts{margin-top:10px}
.graph-legend{display:flex;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--sub);margin-bottom:8px}
.graph-legend .legend::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;background:var(--ink)}
.graph{width:100%;max-width:720px;height:auto;display:block;border:1px solid var(--line);background:var(--surface)}
.graph .edge{stroke:var(--line-strong);stroke-width:1}
.graph .node circle{fill:var(--paper);stroke:var(--ink);stroke-width:1.2;cursor:pointer}
.graph .node.done circle{fill:var(--ink)}
.graph .node.wait circle{stroke-dasharray:3 2}
.graph .node.contact circle,.graph .legend.contact::before{fill:var(--surface-alt)}
.graph .node.more circle{stroke:var(--line-strong);cursor:default}
.graph .node text{font-size:11px;fill:var(--sub);pointer-events:none}
.graph .node.me circle{fill:var(--ink);stroke:var(--ink)}
.graph .node.me text{fill:var(--paper);font-size:13px;font-weight:600}
.graph .node:focus{outline:0}
.graph .node:focus circle,.graph .node:hover circle{stroke-width:2.5}
.thread{margin:0 0 16px}
.thread-item p{margin:6px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}
.thread-item.reply{padding-left:18px;border-left:2px solid var(--line)}
.thread-item.answer{background:var(--surface)}
.attach-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 14px}
.attach-grid .full{grid-column:1/-1}
.attach-list .attach{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;align-items:center}
.attach-list .attach .d{grid-column:1;display:flex;flex-wrap:wrap;gap:6px;font-size:12px;color:var(--muted)}
.attach-list .attach .link{grid-column:2;grid-row:1/span 2}
@media (max-width:760px){.attach-grid{grid-template-columns:1fr}.person-grid{grid-template-columns:1fr}}
.notify{position:relative}
.notify .count{font-family:var(--mono);font-size:10.5px;margin-left:5px;background:var(--ink);color:var(--paper);border-radius:999px;padding:1px 6px}
.notice.unread .t{font-weight:600}
.person-card .name .label{margin-left:8px;font-size:10.5px}
.dday b{color:var(--ink)}
.page-head .meta .sep{margin:0 6px;color:var(--faint)}
.ai-actions{flex-wrap:wrap;margin-bottom:8px}
.judge-form{grid-column:1/-1;margin-top:8px;padding:10px;border:1px dashed var(--line-strong);border-radius:6px}
.person-card .org{font-size:12px;color:var(--sub)}
.plain.tight li{padding:3px 0;border:0}
.assessment h4{font-size:13px;font-weight:600;margin:16px 0 8px}
.assessment h4 .label{margin-left:8px}
.more-row.top{margin:0 0 12px;padding:0;border:0}
.contact-search{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.contact-search input{flex:1 1 320px;max-width:520px;height:34px;border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:0 10px}
.contact-search input:focus{border-color:var(--ink);outline:0}
.contact-search .count{font-size:12px;color:var(--muted)}

/* 표 가독성: 한글은 단어 안에서 끊지 않고, 긴 영문·주소만 필요할 때 끊는다. 참고 후보 표는 열 너비를 고정한다. */
html{scroll-padding-top:calc(var(--bar) + 12px)}
td,th{word-break:keep-all;overflow-wrap:anywhere}
table.reference{table-layout:fixed;min-width:0}
table.reference .c-name{width:24%}
table.reference .c-fest{width:15%}
table.reference .c-role{width:13%}
table.reference .c-campaign{width:17%}
table.reference .c-contact{width:17%}
table.reference .c-owner{width:14%}
table.reference td .chip{max-width:100%;white-space:normal;height:auto;min-height:22px;padding:2px 8px;line-height:1.3}

.activity .t{font-weight:400}
.activity .act{color:var(--sub)}
.link-row.inline{display:inline;font-weight:600}
.people-group{margin-bottom:24px}
.people-group .person-grid{margin-bottom:8px}

/* 서랍 안 긴 글: 칩은 짧은 상태에만 쓰고, 문장은 본문 블록에서 줄바꿈한다. 어떤 요소도 서랍 오른쪽 밖으로 넘치지 않는다. */
.facts dd .chip,.assessment .chip,.chips .chip{white-space:normal;max-width:100%;height:auto;min-height:22px;line-height:1.35;padding:2px 8px;text-align:left}
.facts dd .body-text{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.facts dd .clamp{margin:0}
.facts dd .clamp .body-text{max-height:6.2em}
.drawer-body,.drawer-body *{max-width:100%;min-width:0}

/* 가로 스크롤 없이 전체 내용에 닿게 한다. 표는 1000px 이하에서 라벨 붙은 카드형으로 쌓고, 칩·주소·긴 글은 폭 안에서 줄바꿈한다. */
@media (max-width:1000px){

  table.stacked td>.contact-cell{display:inline-flex;flex-wrap:wrap}
  table.stacked td .chip{white-space:normal;height:auto;min-height:22px;line-height:1.3;padding:2px 8px}
  .row .r{flex-wrap:wrap;justify-content:flex-start}
  .row .r .facets{max-width:none}
}
td .chip,td .facets .chip{white-space:normal;height:auto;min-height:22px;line-height:1.3;padding:2px 8px}
td .facets{max-width:none}
td.next{max-width:none}
td.n{white-space:normal}
th{white-space:normal}
.row .r{max-width:45%;flex-wrap:wrap;justify-content:flex-end}
.row .r .chip{white-space:normal;height:auto;min-height:22px;line-height:1.3;padding:2px 8px}
.mail-msg .r,.notice .r{max-width:100%}
.mail-msg .r .chip,.notice .r .chip,.notice .r .btn{white-space:nowrap;flex-shrink:0}
.chips .chip,.facts .chip{white-space:normal}
main,.grid,.stack,.block,.rows,.row,.section,.drawer-body,.person-detail{min-width:0;max-width:100%}
.contact-search input,.mail-tools input{max-width:100%}
.graph{max-width:100%}
pre.mail-view,pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}
.picker-list li[role=option]{flex-wrap:wrap}

/* 머리글 버튼·칩은 좁은 폭에서 줄바꿈해 main 밖으로 나가지 않는다 */
.page-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;max-width:100%;min-width:0}
@media (max-width:760px){.page-actions{justify-content:flex-start}.page-actions .btn{white-space:normal;text-align:left}}
.person-row .t{font-weight:500}

/* 서랍 안 모든 글은 긴 토큰이라도 폭 안에서 끊는다(내용은 줄이지 않는다) */
.drawer-body p,.drawer-body dd,.drawer-body dt,.drawer-body li,.drawer-body span,.drawer-body h2,.drawer-body h3,.drawer-body summary{overflow-wrap:anywhere;min-width:0}
.assessment .lead-note{white-space:normal}

/* 좁은 폭에서 필터 묶음은 숨은 가로 스크롤 대신 줄바꿈한다 */
@media (max-width:760px){.filters .group{flex-wrap:wrap;overflow:visible;max-width:100%;border-radius:12px}.filters .group button{white-space:normal}}
details.fold summary{cursor:pointer;color:var(--sub);font-size:13px;margin:8px 0}
details.fold[open] summary{margin-bottom:4px}

/* 공동 제안함 카드: 구획별 세로 배치, 내용 축약 없음, 버튼 줄바꿈 */
.proposal-progress { border-top: 1px solid var(--line); padding-top: 1rem; margin-top: 1rem; }
.proposal-progress-form { margin-top: 1rem; display: grid; gap: .75rem; }
.proposal-card{border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin-bottom:14px;background:var(--surface);min-width:0;max-width:100%}
.proposal-card header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.proposal-card header h3{font-size:15px;font-weight:600;line-height:1.4;margin:0;min-width:0;overflow-wrap:anywhere;flex:1 1 240px}
.proposal-card .facts{margin-top:8px;padding-top:10px}
.proposal-card .facts dd .body-text{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.proposal-card .judge-actions{margin-top:12px;flex-wrap:wrap}
.proposal-card .judge-form{margin-top:10px}
.row .snippet{grid-column:1;display:block;overflow-wrap:anywhere}
@media (max-width:760px){.proposal-card{padding:14px}.proposal-card .facts{grid-template-columns:1fr;gap:2px 0}.proposal-card .facts dt{margin-top:8px}}

/* ---------- 공통 서식 통일 (2026-09-10) ---------- */
/* 행 오른쪽 칩은 한 덩어리로 유지한다. 폭이 좁으면 칩 단위로 줄바꿈하지 글자 단위로 쪼개지 않는다. */
.row .r .chip,.row .r .reply{white-space:nowrap}
.row .r{max-width:none}
@media (max-width:760px){.row .r .chip{white-space:normal}}
/* 탭은 글자 단위로 꺾지 않는다. 좁은 폭에서는 탭 단위로 줄바꿈한다. */
.tabs button{white-space:nowrap}
@media (max-width:760px){.tabs{flex-wrap:wrap;overflow:visible}.tabs button{white-space:nowrap;padding:8px 10px}}
/* 다른 모듈의 행(제목 + 부제 + 오른쪽 값)을 업무·연락 행과 같은 서식으로 맞춘다. */
.row>span:first-child b{font-weight:500;line-height:1.45;overflow-wrap:anywhere}
.row .sub{display:block;font-size:12px;color:var(--muted);margin-top:2px;font-weight:400}
.row>span:last-child:not(.r):not(.d):not(.t){grid-column:2;grid-row:1/span 2;justify-self:end;text-align:right;font-size:13px}
.row>span:last-child:not(.r) .sub{text-align:right}
/* 검색·필터 폼은 왼쪽 정렬 툴바로 통일한다(공통 원장·참여·조건·정산). */
form.form-actions{justify-content:flex-start;align-items:flex-end;margin:0 0 18px;padding-bottom:14px;border-bottom:1px solid var(--line)}
form.form-actions label.f{min-width:160px;flex:1 1 200px;max-width:320px}
.rows+.form-actions{justify-content:flex-start;align-items:center;margin-top:16px;padding-top:12px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted)}
.rows+.form-actions span{font-family:var(--mono);font-size:11px}
/* 카드 격자: 빈 칸이 색 덩어리로 남지 않도록 카드마다 테두리를 준다. */
.drafts,.person-grid{gap:12px;background:transparent;border:0}
.draft,.person-card{border:1px solid var(--line);border-radius:6px}
.person-card{background:var(--surface)}
.person-card:hover{border-color:var(--ink)}
.drafts .empty,.person-grid .empty{grid-column:1/-1}
/* 첨부 노드: 실제 파일만, 미리보기는 카탈로그가 준 이미지로 보여 준다. */
.attachments h4{font-size:13px;font-weight:600;margin:16px 0 6px}
.attachments h4.asset-picked{margin-top:20px;padding-top:14px;border-top:1px solid var(--line)}
.asset-group .form-note{margin:0 0 8px}
.asset-nodes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:6px 0 4px}
.asset-node{display:grid;gap:4px;justify-items:start;text-align:left;padding:10px;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);color:inherit;font:inherit;cursor:pointer;min-width:0;transition:border-color calc(var(--beat)/4) var(--ease)}
.asset-node:hover{border-color:var(--ink)}
.asset-node:disabled{cursor:default;color:var(--sub)}
.asset-node[aria-pressed="true"]{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.asset-preview{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:16/9;background:var(--paper);border:1px solid var(--line);border-radius:4px;overflow:hidden;font-family:var(--mono);font-size:11px;color:var(--muted)}
.asset-preview img{width:100%;height:100%;object-fit:contain;display:block}
.asset-name{font-weight:600;font-size:13px;line-height:1.35;overflow-wrap:anywhere}
.asset-front{font-size:11.5px;color:var(--sub);line-height:1.4;overflow-wrap:anywhere}
.asset-meta{font-family:var(--mono);font-size:10.5px;color:var(--muted)}
.asset-state{font-size:11.5px;color:var(--muted)}
.asset-node[aria-pressed="true"] .asset-state{color:var(--ink);font-weight:600}
.asset-none{font-size:12.5px;color:var(--muted);padding:6px 0}
.asset-selected{list-style:none;margin:0;padding:0}
.asset-selected li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line)}
.asset-selected li .d{grid-column:1;font-size:12px;color:var(--muted)}
.asset-selected li .r{grid-column:2;grid-row:1/span 2;display:flex;gap:6px}
.asset-selected li .btn{white-space:nowrap}
/* 발송 대기열: 선택 → 최종 확인 → 발송 요청 */
.queue-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px}
.queue-bar .spacer{flex:1}
.queue-bar .check{font-size:13px}
.form-note.status{margin:0 0 14px;color:var(--ink)}
.queue-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 12px;align-items:start;padding:11px 0;border-bottom:1px solid var(--line)}
.queue-row .pick{width:16px;padding-top:3px}
.queue-row .pick input{width:16px;height:16px;min-height:0;accent-color:var(--ink)}
.queue-row .main{display:grid;gap:3px;min-width:0;justify-items:start}
.queue-row .link-row{background:none;border:0;padding:0;font:inherit;font-weight:500;text-align:left;color:inherit;cursor:pointer;line-height:1.45;overflow-wrap:anywhere}
.queue-row .link-row:hover,.queue-row .link-row[aria-expanded="true"]{text-decoration:underline;text-underline-offset:3px}
.queue-row .main .d{font-size:12px;color:var(--muted);display:flex;gap:8px;flex-wrap:wrap}
.queue-row .main .d .sep{color:var(--faint)}
.queue-row .main .note{font-size:12px;color:var(--ink)}
.queue-row .r{display:flex;gap:6px;align-items:center;justify-self:end;flex-wrap:wrap;justify-content:flex-end}
.queue-row .r .chip{white-space:nowrap}
.queue-body{grid-column:2/-1;margin-top:8px}
.queue-body .facts{margin-top:0;border-top:0;padding-top:0}
.queue-body .mail-view{margin-top:12px}
.queue-review .block-head{margin-bottom:14px}
.queue-card{border:1px solid var(--line);border-radius:6px;padding:16px 18px;margin-bottom:12px;background:var(--surface)}
.queue-card h3{font-size:15px;font-weight:600;margin-bottom:6px}
.queue-card .facts{margin-top:8px;padding-top:10px}
.queue-card .check{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
@media (max-width:760px){.queue-row{grid-template-columns:auto minmax(0,1fr)}.queue-row .r{grid-column:2;justify-self:start;justify-content:flex-start}.queue-body{grid-column:1/-1}}
/* 불러오는 중: 첫 화면과 메뉴 이동 사이에 목록 자리를 미리 보여 준다. */
.skeleton{display:grid;gap:14px;padding:6px 0}
.skeleton span{display:block;height:14px;border-radius:4px;background:linear-gradient(90deg,var(--surface-alt) 25%,var(--line) 50%,var(--surface-alt) 75%);background-size:200% 100%;animation:shimmer 1.2s linear infinite}
.skeleton span:nth-child(1){width:38%;height:22px}
.skeleton span:nth-child(2){width:72%}
.skeleton span:nth-child(3){width:58%}
.skeleton span:nth-child(4){width:64%}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
/* 업무 배정 응답 */
.assignment .state{margin-left:8px}
.assignment .form-actions{justify-content:flex-start}

/* 본문 이미지 배치 편집기·본문 미리보기 (2026-09-10) */
.mail-html{border:1px solid var(--line);border-radius:6px;padding:18px 20px;background:var(--surface);margin:16px 0 0;line-height:1.75;overflow-wrap:anywhere;max-width:100%}
.mail-html p{margin:0 0 1em}
.mail-html p:last-child{margin-bottom:0}
.mail-html img{max-width:100%;height:auto;display:inline-block;vertical-align:middle}
.mail-html .mail-image{margin:0 0 1em}
.mail-html .mail-image[data-align="left"],.mail-html .mail-image.left{text-align:left}
.mail-html .mail-image[data-align="center"],.mail-html .mail-image.center{text-align:center}
.mail-html .mail-image[data-align="right"],.mail-html .mail-image.right{text-align:right}
.layout .form-note.status{color:var(--ink)}
.layout-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start;margin-top:12px}
.layout-preview h4{font-size:13px;font-weight:600;margin:0 0 6px;display:flex;justify-content:space-between;align-items:baseline}
.layout-preview .mail-html{margin-top:0}
.layout-files{display:grid;gap:6px;margin-bottom:12px}
.layout-file{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface)}
.layout-file .name{font-weight:500;flex:1 1 140px;min-width:0;overflow-wrap:anywhere}
.layout-file select{width:auto;min-height:30px;padding:3px 8px;font-size:12.5px}
.layout-slots{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.layout-para{padding:6px 10px;font-size:12.5px;color:var(--sub);border-left:2px solid var(--line);overflow-wrap:anywhere}
.layout-para .label{display:block;margin-bottom:2px}
.layout-slot{min-height:30px;padding:5px 8px;border:1px dashed var(--line-strong);border-radius:6px;display:grid;gap:6px;transition:border-color calc(var(--beat)/4) var(--ease),background calc(var(--beat)/4) var(--ease)}
.layout-slot>.label{line-height:18px}
.layout-slot.filled{border-style:solid;background:var(--surface)}
.layout-slot.over{border-color:var(--ink);background:var(--surface-alt)}
.layout-node{display:grid;grid-template-columns:56px minmax(0,1fr);gap:2px 10px;align-items:center;padding:8px;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface);cursor:grab}
.layout-node[draggable="false"]{cursor:default}
.layout-node .thumb{grid-row:1/span 3;width:56px;height:36px;border:1px solid var(--line);border-radius:4px;background:var(--paper);display:flex;align-items:center;justify-content:center;overflow:hidden}
.layout-node .thumb img{width:100%;height:100%;object-fit:contain}
.layout-node .name{font-weight:600;font-size:13px;overflow-wrap:anywhere}
.layout-node .controls{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px}
.layout-node .controls select{width:auto;min-height:28px;padding:2px 6px;font-size:12px}
.layout-node .controls .width{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--sub)}
.layout-node .controls input[type=range]{width:120px;min-height:0;padding:0;border:0;background:transparent;accent-color:var(--ink)}
.layout-node .controls .num{min-width:44px}
@media (max-width:760px){.layout-grid{grid-template-columns:1fr}.layout-node{grid-template-columns:48px minmax(0,1fr)}.layout-node .thumb{width:48px;height:32px}.layout-node .controls input[type=range]{width:96px}}
/* 순수 렌더(mail-layout.js) 출력: 문단은 pre-wrap, 이미지 행은 표 구조라 표 기본 서식을 끈다 */
.mail-html .mail-body-text{margin:0 0 16px;white-space:pre-wrap;overflow-wrap:anywhere}
.mail-html table.mail-body-image-row{width:100%;border-collapse:collapse;margin:0 0 16px;table-layout:auto}
.mail-html table.mail-body-image-row td{padding:0;border:0;line-height:0}
/* td align으로 좌우 정렬이 되도록 이미지는 inline-block(블록이면 정렬이 무시된다) */
.mail-html .mail-body-image{display:inline-block;max-width:100%;height:auto;border:0}
.mail-html[data-broken]{border-color:var(--ink)}
/* 명함 앞면·뒷면: 첨부 카드의 면 확인 링크는 토글 버튼 밖에 두고, 배치 노드·선택 목록에는 면 표시를 붙인다 */
.asset-card{display:grid;gap:4px;min-width:0}
.asset-card .asset-node{width:100%}
.asset-sides{display:flex;gap:10px;font-size:12px;padding:0 2px}
.asset-selected .asset-sides{grid-column:1;padding:0}
.layout-node .side,.layout-file .side{display:inline-block;margin-left:6px;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--sub);border:1px solid var(--line-strong);border-radius:3px;padding:0 4px;line-height:1.5;vertical-align:middle;font-weight:400}

.short-link-target{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.short-link-url{overflow-wrap:anywhere}

/* 기존 포커스 초기화보다 우선하여 키보드 위치를 표시한다. */
input:focus-visible,select:focus-visible,textarea:focus-visible,
.search input:focus-visible,.mail-tools input:focus-visible,.contact-search input:focus-visible,
.project:focus-visible,.graph .node:focus-visible{outline:2px solid var(--ink);outline-offset:2px}

@media (max-width:760px){
  /* 개별 폼 글자 크기보다 우선하여 iOS 입력 확대를 방지한다. */
  input,select,textarea{font-size:16px!important}
}

/* 양쪽 테마에서 보조 글자도 본문 대비를 유지한다. 로고 원본의 적색은 보존한다. */
@media (prefers-color-scheme:dark){
  :root{
    color-scheme:dark;
    --paper:#141414;--surface:#1c1c1c;--surface-alt:#262626;
    --ink:#f5f5f5;--sub:#cccccc;--muted:#b3b3b3;--faint:#5c5c5c;
    --line:#383838;--line-strong:#505050;--ink-hover:#dddddd;
    --topbar-bg:var(--paper);--scrim:rgba(0,0,0,.65);--on-ink:#454545;
  }
  .brand img,body:has(> main > form[action="/auth/login"]) > main img{background:var(--logo-bg);border-radius:3px}
}
::placeholder{color:var(--muted);opacity:1}
#message[role="alert"]:not(:empty){color:var(--ink);font-weight:700;border-left:3px solid var(--ink);padding:8px 12px;background:var(--surface)}
#message[role="alert"]:not(:empty)::before{content:"!";margin-right:8px}
.search-toggle{display:none}
.project-picker{display:flex;align-items:center;gap:10px;min-width:0}
.page-heading{min-width:0}
@media (max-width:760px){
  .topbar-inner{position:relative;gap:0 8px}
  .tools{min-width:0;flex:1;justify-content:flex-end}
  .search-toggle{display:inline-flex;min-width:44px;min-height:44px;padding:0}
  .search-toggle svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2}
  .search{display:none;position:absolute;top:var(--bar);left:var(--gutter);right:var(--gutter);height:52px;padding:4px 0;background:var(--paper)}
  .topbar-inner.search-open .search{display:block}
  .topbar-inner.search-open .nav{margin-top:52px}
  .search input,.search input:focus{width:100%;height:44px}
  .persona{min-width:0;max-width:140px;width:100%;height:44px}
  .session{min-width:0;gap:4px}
  .who{min-width:0;display:block;overflow:hidden;text-overflow:ellipsis;max-width:100px;white-space:nowrap}
  /* 상단 바 높이를 넘지 않게 모바일은 이름만 한 줄로 보인다. 역할 배지는 데스크톱에서 표시. */
  .who .who-tag .role{display:none}
  .tools>.notify{padding:0 4px}
  .page-heading{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;width:100%}
  .page-heading .meta{flex-basis:100%;margin-top:0}
  .page-heading .project-picker{margin-left:auto;max-width:65%}
  .page-heading .project{max-width:100%}
  .page-heading .project-picker .sep{display:none}
  .page-actions{flex-basis:100%}
}
@media (pointer:coarse){
  .btn.small,button.chip,.filters .group button,.nav button,.topbar button{min-height:44px}
  .nav{height:auto;min-height:44px}
  .topbar button{min-width:44px}
  .project,.persona{min-height:44px}
  /* 44px 복사 버튼이 예문 첫 줄을 가리지 않게 위 여백을 확보한다. */
  .snippet pre{padding-top:60px}
}
