/* 글렌에어코리아 ERP — 이 프로젝트에서만 쓰는 규칙. 토큰은 ux.css, 부품은 console.css 가 정본.
   색은 파랑·먹·흰 셋. 회색 면 금지 — 면은 흰색, 경계는 선. */
.gk-sq{color:#fff;font-size:11.5px;font-weight:900;letter-spacing:-.02em;}
.nav .soon{margin-left:auto;font-size:9.5px;font-weight:800;letter-spacing:.06em;color:rgba(255,255,255,.5);border:1px solid rgba(255,255,255,.22);border-radius:var(--r-pill);padding:0 5px;line-height:14px;}
.view > *{max-width:1440px;}
a.linky{color:var(--blue);}
.mb{margin-bottom:12px;} .mt{margin-top:12px;}
.row{display:flex;align-items:center;gap:8px;}
.grow{flex:1;min-width:0;}
.mute{color:var(--muted);} .faint{color:var(--faint);}
.ell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.right{text-align:right;}
.card-b{padding:13px 15px;}
.card-b.tight{padding:6px 0;}
.pgrid{display:grid;gap:12px;} .pgrid.c2{grid-template-columns:1fr 1fr;} .pgrid.c3{grid-template-columns:1fr 1fr 1fr;} .pgrid.c32{grid-template-columns:3fr 2fr;} .pgrid.c23{grid-template-columns:2fr 3fr;} .pgrid.c13{grid-template-columns:1fr 3fr;} .pgrid.c31{grid-template-columns:3fr 1fr;}
.hdr{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px;}
.hdr .h2{margin-bottom:3px;} .hdr .h2s{margin:0;} .hdr .acts{margin-left:auto;display:flex;gap:7px;align-items:center;flex:none;}
.h2 .k{color:var(--blue);}
.h2 .dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--blue);vertical-align:middle;margin:0 0 4px 3px;}
.btn.sm{height:28px;padding:0 9px;font-size:12px;}
.btn.danger{background:var(--surface);color:var(--danger);border-color:var(--danger);font-weight:650;}
.btn.danger:hover{background:var(--danger-soft);}
.btn[disabled]{opacity:.45;cursor:not-allowed;}
.st.lg{font-size:12px;padding:3px 10px;}
.st-live{background:var(--blue);color:#fff;}
table.grid td.k{font-weight:750;} table.grid tr.go{cursor:pointer;} table.grid tr.go:hover td{background:var(--blue-soft);}
table.grid td.r,table.grid th.r{text-align:right;}
table.grid td.c,table.grid th.c{text-align:center;}
table.grid td .sub{display:block;font-size:11px;color:var(--faint);margin-top:1px;}
table.grid tr.sum td{font-weight:800;border-top:2px solid var(--line-strong);background:var(--surface);}
.tw.tall{max-height:calc(100vh - 230px);}
.tw.auto{max-height:none;}
.pn{font-family:var(--mono);font-size:12.5px;letter-spacing:-.01em;}
.bcode{font-family:var(--mono);font-size:12px;letter-spacing:.04em;}
.chips{display:flex;flex-wrap:wrap;gap:5px;}
.chip.sm{height:24px;padding:0 9px;font-size:11.5px;}
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff;}
.chip a{color:inherit;}
.kv{display:grid;grid-template-columns:96px 1fr;gap:7px 12px;align-items:baseline;}
.kv-k{font-size:12px;font-weight:650;color:var(--muted);}
.kv-v{font-size:13px;font-weight:600;min-width:0;}
.kv-v.pn{font-weight:600;}
.note{font-size:12px;color:var(--muted);line-height:1.6;}
.honest{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);border:1px dashed var(--line-strong);border-radius:var(--r-pill);padding:3px 10px;}
.honest::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--warn);}
.warnbox{padding:9px 12px;border:1px solid var(--warn);border-radius:var(--r-sm);background:var(--warn-soft);color:var(--warn);font-size:12.5px;font-weight:650;}
.okbox{padding:9px 12px;border:1px solid var(--blue-line);border-radius:var(--r-sm);background:var(--blue-soft);color:var(--blue);font-size:12.5px;font-weight:650;}
.badbox{padding:9px 12px;border:1px solid var(--danger);border-radius:var(--r-sm);background:var(--danger-soft);color:var(--danger);font-size:12.5px;font-weight:650;}

/* ── 프로세스 차트 (대시보드) — 단계 상자 + 사이 화살표, 각 단계는 그 업무로 가는 문 ── */
.flow{display:grid;grid-template-columns:repeat(5,1fr 20px) ;grid-template-columns:1fr 22px 1fr 22px 1fr 22px 1fr 22px 1fr;align-items:stretch;gap:0;}
.flow .fx{display:flex;align-items:center;justify-content:center;color:var(--line-strong);}
.fs{display:block;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px 11px;box-shadow:var(--sh-xs);text-decoration:none;color:inherit;position:relative;transition:border-color .12s var(--ease),transform .12s var(--ease);}
.fs:hover{border-color:var(--blue);transform:translateY(-1px);}
.fs .fs-k{font-size:11.5px;font-weight:700;color:var(--muted);display:flex;align-items:center;gap:6px;}
.fs .fs-k svg{color:var(--blue);}
.fs .fs-v{font-size:26px;font-weight:800;letter-spacing:-.04em;line-height:1.2;margin-top:4px;}
.fs .fs-v small{font-size:12px;font-weight:650;color:var(--muted);margin-left:3px;letter-spacing:0;}
.fs .fs-sub{margin-top:7px;display:flex;flex-direction:column;gap:3px;}
.fs .fs-sub span{font-size:11.5px;color:var(--ink-2);display:flex;justify-content:space-between;gap:8px;}
.fs .fs-sub span b{font-weight:750;font-variant-numeric:tabular-nums;}
.fs .fs-sub span.alert b{color:var(--danger);}
.fs .fs-sub span.now b{color:var(--blue);}
.fs .fs-go{position:absolute;right:12px;top:12px;color:var(--faint);}
.fs.hot{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft);}
.fs .fs-bar{height:4px;border-radius:2px;background:var(--line);margin-top:9px;overflow:hidden;}
.fs .fs-bar i{display:block;height:100%;background:var(--blue);border-radius:2px;}

/* 오늘 할 일 줄 */
.todo{display:flex;align-items:center;gap:10px;padding:9px 15px;border-bottom:1px solid var(--line);font-size:13px;text-decoration:none;color:inherit;}
.todo:last-child{border-bottom:0;} .todo:hover{background:var(--blue-soft);}
.todo .ti{width:28px;height:28px;border-radius:50%;border:1px solid var(--line-strong);display:grid;place-items:center;color:var(--blue);flex:none;}
.todo .tt{font-weight:750;letter-spacing:-.02em;flex:none;}
.todo .ts{color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.todo .tn{font-weight:800;color:var(--blue);font-variant-numeric:tabular-nums;}
.todo.alert .ti{color:var(--danger);} .todo.alert .tn{color:var(--danger);}

/* 단계 표시 (상세 화면 상단) */
.steps{display:flex;gap:6px;}
.step{flex:1;display:flex;align-items:center;gap:9px;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);font-size:12.5px;color:var(--muted);min-width:0;}
.step b{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--line-strong);display:inline-flex;align-items:center;justify-content:center;font-size:11.5px;flex:none;}
.step span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.step small{display:block;font-size:10.5px;color:var(--faint);font-weight:500;}
.step.done{color:var(--ink);} .step.done b{background:var(--ink);color:#fff;border-color:var(--ink);}
.step.now{border-color:var(--blue);color:var(--blue);font-weight:700;} .step.now b{background:var(--blue);color:#fff;border-color:var(--blue);}

/* 타임라인 (추적) */
.tl{position:relative;padding-left:18px;}
.tl::before{content:'';position:absolute;left:5px;top:8px;bottom:8px;width:1.5px;background:var(--line);}
.tl-i{position:relative;padding:8px 0 8px 10px;}
.tl-i::before{content:'';position:absolute;left:-17px;top:14px;width:8px;height:8px;border-radius:50%;background:var(--surface);border:1.5px solid var(--line-strong);}
.tl-i.hl::before{background:var(--blue);border-color:var(--blue);}
.tl-i.now::before{background:var(--surface);border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft);}
.tl-t{font-size:13px;font-weight:750;letter-spacing:-.02em;display:flex;gap:8px;align-items:center;}
.tl-t .when{font-weight:600;color:var(--faint);font-size:11.5px;margin-left:auto;font-variant-numeric:tabular-nums;}
.tl-s{font-size:12px;color:var(--muted);margin-top:2px;line-height:1.55;}
.tl-docs{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px;}
.doclink{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border:1px solid var(--line-strong);border-radius:var(--r-pill);font-size:11px;font-weight:650;color:var(--ink-2);background:var(--surface);text-decoration:none;}
.doclink:hover{border-color:var(--blue);color:var(--blue);}
.doclink.miss{border-style:dashed;color:var(--faint);}

/* ── OCR 검토 — 왼쪽 원본, 오른쪽 추출값 ── */
.ocr{display:grid;grid-template-columns:minmax(0,1fr) 440px;gap:12px;align-items:start;}
.ocr-view{position:sticky;top:0;}
.ocr-page{position:relative;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:var(--surface);}
.ocr-page img{display:block;width:100%;height:auto;}
.ocr-box{position:absolute;border:1.5px solid var(--blue);background:rgba(33,69,255,.08);border-radius:2px;cursor:pointer;transition:background .12s;}
.ocr-box.low{border-color:var(--danger);background:rgba(217,45,32,.1);}
.ocr-box.on{background:rgba(33,69,255,.22);box-shadow:0 0 0 3px rgba(33,69,255,.25);}
.ocr-box.low.on{background:rgba(217,45,32,.22);box-shadow:0 0 0 3px rgba(217,45,32,.25);}
.ocr-pages{display:flex;gap:5px;margin-bottom:8px;align-items:center;}
.ocr-pages .chip{height:28px;padding:0 10px;font-size:12px;cursor:pointer;}
.ofield{display:grid;grid-template-columns:104px 1fr 44px;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line);}
.ofield:last-child{border-bottom:0;}
.ofield .ok{font-size:12px;font-weight:650;color:var(--muted);}
.ofield .fi{height:30px;font-size:13px;}
.ofield .fi.pn{font-family:var(--mono);}
.ofield.low .fi{border-color:var(--danger);background:var(--danger-soft);}
.ofield.low .ok{color:var(--danger);}
.ofield .cf{font-size:11px;font-weight:800;text-align:right;font-variant-numeric:tabular-nums;color:var(--muted);}
.ofield.low .cf{color:var(--danger);}
.ofield .was{grid-column:2/4;font-size:11px;color:var(--danger);margin-top:-3px;}
.ofield .was b{font-family:var(--mono);font-weight:700;}
table.olines td{padding:4px 6px;} table.olines .fi{height:28px;font-size:12.5px;padding:0 6px;}
table.olines tr.low td{background:var(--danger-soft);}
table.olines tr.on td{background:var(--blue-soft);}
table.olines .pn.fi{font-family:var(--mono);}
.match{font-size:11px;font-weight:750;}
.match.ok{color:var(--blue);} .match.bad{color:var(--danger);} .match.none{color:var(--faint);font-weight:600;}

/* 업로드 드롭존 — 흰 바탕 + 점선 */
.drop,.drop.big{background:var(--surface);border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:26px 18px;text-align:center;cursor:pointer;}
.drop:hover,.drop.over{border-color:var(--blue);background:var(--blue-soft);}
.drop-t{font-size:14px;font-weight:800;letter-spacing:-.02em;} .drop-s{font-size:12px;color:var(--muted);margin-top:4px;line-height:1.6;}
.uplist{display:flex;flex-direction:column;gap:6px;margin-top:10px;text-align:left;}
.upi{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);font-size:12.5px;background:var(--surface);}
.upi .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:650;}
.upi .pg{height:3px;flex:0 0 90px;background:var(--line);border-radius:2px;overflow:hidden;} .upi .pg i{display:block;height:100%;background:var(--blue);width:0;transition:width .3s;}
.upi .rs{font-size:11.5px;color:var(--muted);flex:none;min-width:120px;text-align:right;}
.upi.done .rs{color:var(--blue);font-weight:700;} .upi.bad .rs{color:var(--danger);font-weight:700;}

/* 로트 카드 (재고·바코드 조회) */
.lot{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);padding:12px 14px;box-shadow:var(--sh-xs);}
.lot-h{display:flex;align-items:center;gap:10px;}
.lot-h .bc{font-family:var(--mono);font-size:13px;font-weight:700;letter-spacing:.04em;}
.lot-h .loc{margin-left:auto;font-size:11.5px;font-weight:750;color:var(--blue);border:1px solid var(--blue-line);background:var(--blue-soft);border-radius:var(--r-pill);padding:2px 8px;}
.lot-q{display:flex;align-items:baseline;gap:6px;margin-top:6px;}
.lot-q b{font-size:22px;font-weight:800;letter-spacing:-.04em;} .lot-q span{font-size:12px;color:var(--muted);}
.lot-q .of{color:var(--faint);}
.lot-m{display:grid;grid-template-columns:1fr 1fr;gap:3px 10px;margin-top:8px;font-size:12px;color:var(--ink-2);}
.lot-m span{color:var(--faint);margin-right:4px;}
.rate{display:flex;align-items:center;gap:8px;width:140px;} .rate .bar{flex:1;height:5px;border-radius:3px;background:var(--line);overflow:hidden;} .rate .bar i{display:block;height:100%;background:var(--blue);} .rate b{font-size:11.5px;font-variant-numeric:tabular-nums;min-width:32px;text-align:right;}

/* 라벨 미리보기 */
.labels{display:grid;grid-template-columns:repeat(auto-fill,minmax(236px,1fr));gap:10px;}
.label{border:1px solid var(--line-strong);border-radius:4px;background:#fff;padding:8px 10px;aspect-ratio:50/30;display:flex;flex-direction:column;color:#000;}
.label .lh{display:flex;justify-content:space-between;font-size:9.5px;font-weight:800;letter-spacing:.04em;}
.label .lp{font-family:var(--mono);font-size:12.5px;font-weight:800;margin-top:2px;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.label .lm{font-size:9px;display:flex;gap:8px;margin-top:1px;color:#222;}
.label svg{width:100%;height:auto;margin-top:auto;}
@media print{ body{background:#fff;} .side,.top,.noprint{display:none !important;} .app{display:block;height:auto;overflow:visible;} .main{overflow:visible;} .view{overflow:visible;padding:0;} .labels{grid-template-columns:repeat(2,50mm);gap:4mm;} .label{width:50mm;height:30mm;aspect-ratio:auto;border:0;page-break-inside:avoid;} .card{border:0;box-shadow:none;} }

/* 서류 선택 트리 (출하) */
.dsel{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);}
.dsel-h{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line);font-size:12.5px;font-weight:750;}
.dsel-i{display:flex;align-items:center;gap:10px;padding:7px 12px 7px 30px;border-bottom:1px solid var(--line);font-size:12.5px;}
.dsel-i:last-child{border-bottom:0;}
.dsel-i .pgs{display:flex;gap:4px;margin-left:auto;}
.pgchip{width:26px;height:22px;border:1px solid var(--line-strong);border-radius:4px;background:var(--surface);font-size:11px;font-weight:700;cursor:pointer;font-family:inherit;color:var(--ink-2);}
.pgchip.on{background:var(--blue);border-color:var(--blue);color:#fff;}
.dsel-i.req b{color:var(--ink);} .dsel-i .req-tag{font-size:10px;font-weight:800;color:var(--blue);border:1px solid var(--blue-line);border-radius:var(--r-pill);padding:0 6px;}
input[type=checkbox].ck{width:15px;height:15px;accent-color:var(--blue);}

/* 종이 (명세서·보증서 인쇄) */
.paper{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--sh-xs);padding:34px 40px;max-width:860px;}
.paper h1{text-align:center;font-size:21px;font-weight:800;letter-spacing:.3em;text-indent:.3em;margin:0 0 18px;}
.paper .doc-t{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:14px;}
.paper .doc-t th{width:92px;text-align:left;background:var(--surface);font-weight:750;padding:7px 10px;border:1px solid var(--line-strong);}
.paper .doc-t td{padding:7px 10px;border:1px solid var(--line-strong);}
.paper table.lines{width:100%;border-collapse:collapse;font-size:12.5px;}
.paper table.lines th{border:1px solid var(--line-strong);padding:6px 8px;font-weight:750;text-align:left;}
.paper table.lines td{border:1px solid var(--line-strong);padding:6px 8px;}
.paper .sig{display:flex;justify-content:flex-end;gap:40px;margin-top:28px;font-size:12.5px;}
.paper .sig div{text-align:center;} .paper .sig .ln{width:140px;border-bottom:1px solid var(--ink);height:34px;margin-bottom:4px;}
@media print{ .paper{border:0;box-shadow:none;padding:0;max-width:none;} }

/* 권한 매트릭스 */
table.perm td{text-align:center;} table.perm td button{width:30px;height:26px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);font-family:inherit;font-size:11.5px;font-weight:800;cursor:pointer;color:var(--faint);}
table.perm td button.l1{color:var(--ink-2);border-color:var(--ink-2);} table.perm td button.l2{background:var(--blue);border-color:var(--blue);color:#fff;}

/* 수입신고필증 대조 */
.cmp{display:grid;grid-template-columns:1fr 24px 1fr;gap:6px 10px;align-items:center;font-size:12.5px;}
.cmp .ck{display:grid;place-items:center;} .cmp .ok{color:var(--blue);font-weight:800;} .cmp .bad{color:var(--danger);font-weight:800;}
.cmp .h{font-size:11px;font-weight:800;letter-spacing:.06em;color:var(--faint);}

/* 지능형 입력 드롭다운 (suggest.js) */
.sug-box{position:fixed;z-index:9000;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-md);box-shadow:var(--sh-md);max-height:280px;overflow:auto;font-size:13px;max-width:380px;}
.sug-i{display:flex;justify-content:space-between;gap:12px;padding:7px 12px;cursor:pointer;border-bottom:1px solid var(--line);}
.sug-i:last-of-type{border-bottom:0;} .sug-i.on,.sug-i:hover{background:var(--blue-soft);}
.sug-i .sv b{color:var(--blue);font-weight:750;} .sug-i .ss{color:var(--faint);font-size:11.5px;white-space:nowrap;}
.sug-f{padding:4px 12px;font-size:11px;color:var(--faint);border-top:1px solid var(--line);background:var(--surface);}

/* 파일 선택기 (filepick.js) */
.fp{position:relative;margin:2px 0 8px}
.fp .fp-native{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.fp-ctl{display:flex;align-items:center;gap:8px;width:100%;min-height:var(--h-ctl);padding:4px 10px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);font:inherit;font-size:13.5px;color:var(--ink);cursor:pointer;text-align:left}
.fp-ctl:hover,.fp.on .fp-ctl{border-color:var(--blue)} .fp.on .fp-ctl{box-shadow:0 0 0 3px var(--blue-soft)}
.fp.over .fp-ctl,.fp.over .fp-drop{border-color:var(--blue);background:var(--blue-soft)}
.fp-ic{color:var(--muted);display:inline-flex} .fp-txt{flex:1;color:var(--faint)} .fp-chev{margin-left:auto;color:var(--faint);display:inline-flex}
.fp-chips{display:flex;flex-wrap:wrap;gap:4px;flex:1}
.fp-chip{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 4px 0 8px;border:1px solid var(--blue-line);background:var(--blue-soft);border-radius:999px;font-size:12px;max-width:100%}
.fp-chip b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px} .fp-chip i{font-style:normal;color:var(--muted);font-size:11px}
.fp-chip a{width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);cursor:pointer;font-size:11px} .fp-chip a:hover{background:var(--blue);color:#fff}
.fp-pop{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:50;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-md);box-shadow:var(--sh-md);padding:8px}
.fp-drop{border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:18px 14px;text-align:center;cursor:pointer}
.fp-drop:hover{border-color:var(--blue)} .fp-dt{font-weight:700;font-size:13.5px} .fp-ds{font-size:12px;color:var(--muted);margin:4px 0 10px;line-height:1.6}

/* 로그인 왼쪽 흐름 */
.login-flow{display:flex;align-items:center;gap:7px;margin-bottom:22px;font-size:11.5px;font-weight:800;letter-spacing:.06em;color:rgba(255,255,255,.55);}
.login-flow i{width:14px;height:1px;background:rgba(255,255,255,.3);}
.login-flow span:last-child{color:#fff;} .login-flow span:nth-child(1){color:#fff;}

/* 품목 재고 막대 */
.stockbar{display:flex;height:8px;border-radius:4px;overflow:hidden;border:1px solid var(--line);}
.stockbar i{display:block;height:100%;} .stockbar .a{background:var(--blue);} .stockbar .b{background:var(--blue-line);} .stockbar .c{background:var(--line);}
.inline-ed{border:1px dashed transparent;border-radius:4px;padding:1px 4px;margin:-1px -4px;cursor:text;}
.inline-ed:hover{border-color:var(--line-strong);} .inline-ed:focus{outline:none;border-color:var(--blue);background:var(--blue-soft);}
.qty-in{width:72px;height:28px;text-align:right;font-variant-numeric:tabular-nums;}
.pill-n{display:inline-block;min-width:18px;height:18px;line-height:18px;border-radius:9px;background:var(--blue);color:#fff;font-size:10.5px;font-weight:800;text-align:center;padding:0 5px;}
.pill-n.warn{background:var(--danger);}
/* 번호·코드 칸은 줄바꿈 금지 */
table.grid td.k,table.grid td.num,table.grid td.bcode,table.grid td.pn{white-space:nowrap;}
table.grid th{white-space:nowrap;}
/* 그리드 칸이 표 때문에 늘어나지 않게 */
.pgrid > *{min-width:0;}

/* 알림 벨 */
.bell{position:relative;width:34px;height:34px;border-radius:50%;border:1px solid var(--line-strong);background:var(--surface);display:grid;place-items:center;cursor:pointer;color:var(--ink-2);}
.bell:hover{border-color:var(--blue);color:var(--blue);}
.bell-n{position:absolute;top:-4px;right:-4px;min-width:17px;height:17px;line-height:17px;border-radius:9px;background:var(--danger);color:#fff;font-size:10px;font-weight:800;padding:0 4px;text-align:center;}
.bell.ring{animation:ring .6s ease;} @keyframes ring{0%{transform:rotate(0)}20%{transform:rotate(14deg)}40%{transform:rotate(-12deg)}60%{transform:rotate(8deg)}80%{transform:rotate(-4deg)}100%{transform:rotate(0)}}
.bell-pop{display:none;position:fixed;top:58px;right:16px;width:380px;max-height:70vh;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-lg);box-shadow:var(--sh-md);z-index:300;overflow:hidden;flex-direction:column;}
.bell-pop.on{display:flex;}
.bell-h{display:flex;align-items:center;padding:11px 14px;border-bottom:1px solid var(--line);} .bell-h b{font-size:13.5px;font-weight:800;}
.bell-b{overflow-y:auto;}
.bell-b .todo{padding:9px 14px;align-items:flex-start;} .bell-b .todo .ts{white-space:normal;line-height:1.45;}
/* 실시간 알림 토스트 (우상단) */
.noti-stack{position:fixed;top:64px;right:18px;z-index:320;display:flex;flex-direction:column;gap:8px;width:340px;pointer-events:none;}
.noti{display:flex;gap:10px;align-items:flex-start;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:10px;box-shadow:var(--sh-md);padding:11px 14px;opacity:0;transform:translateX(16px);transition:opacity .25s var(--ease),transform .25s var(--ease);pointer-events:auto;cursor:pointer;text-decoration:none;color:inherit;}
.noti.on{opacity:1;transform:translateX(0);} .noti.alert{border-left-color:var(--danger);} .noti.action{border-left-color:var(--blue);}
.noti b{display:block;font-size:12.5px;font-weight:800;letter-spacing:-.02em;} .noti span{display:block;font-size:12px;color:var(--muted);margin-top:1px;line-height:1.5;}
.noti .nk{font-size:10px;font-weight:800;color:var(--blue);letter-spacing:.06em;margin-bottom:2px;}
.live{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:750;color:var(--muted);} .live i{width:7px;height:7px;border-radius:50%;background:var(--success);animation:livepulse 1.6s infinite;} @keyframes livepulse{50%{opacity:.25}}
.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;} .photos a{display:block;border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden;background:var(--surface);} .photos img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;} .photos span{display:block;font-size:11px;color:var(--muted);padding:4px 6px;}
/* 거래처 서류 규칙 칩 — 한 줄 */
td .chips.rule{flex-wrap:nowrap;} td .chips.rule .chip{height:22px;padding:0 7px;font-size:11px;}
/* 라벨 QR — 오른쪽 아래 작은 정사각형, 바코드는 왼쪽으로 */
.label{position:relative;} .label .lqr{position:absolute;right:8px;bottom:8px;width:24%;aspect-ratio:1;background:#fff;} .label .lqr svg{width:100%;height:100%;display:block;}
.label[data-qr-done] > svg:not(.lqr svg){width:72%;}
