:root{--page: #F5F1EE;--paper: #FFFCFA;--sunken: #F0EAE7;--overlay: rgba(30, 22, 32, .44);--ink: #221C26;--ink-2: #524A58;--ink-3: #6C6473;--ink-invert: #FFFFFF;--line: #E5DCE2;--line-strong: #CDC0C9;--brand: #6B3F6E;--brand-dark: #52305A;--brand-soft: #F3EBF4;--brand-ring: rgba(107, 63, 110, .26);--brand-tint: rgba(107, 63, 110, .018);--brand-glow: rgba(107, 63, 110, .9);--login-grad: linear-gradient(160deg, #1E1522 0%, #2C2131 32%, #4A2E52 70%, #6B3F6E 100%);--aurora-a: rgba(163, 112, 168, .5);--aurora-b: rgba(107, 63, 110, .62);--login-accent: #E4C7E7;--mark-a: #A3709F;--mark-b: #52305A;--nav-bg: #2C2131;--nav-bg-deep: #241A28;--nav-ink: #E7DEEA;--nav-ink-dim: #B3A3BA;--nav-ink-faint: #9C8FA3;--nav-hover: rgba(255, 255, 255, .07);--danger: #B3261E;--danger-soft: #FBEAE7;--warn: #9A5B06;--warn-soft: #FBF0DE;--ok: #2E6B45;--ok-soft: #E9F2EC;--info: #40567E;--info-soft: #ECEFF6;--muted: #625A68;--muted-soft: #EFEAEE;--r-sm: 4px;--r-md: 7px;--r-lg: 11px;--shadow-card: 0 1px 2px rgba(34, 28, 38, .045), 0 10px 26px -18px rgba(34, 28, 38, .28);--shadow-pop: 0 12px 34px rgba(34, 28, 38, .16), 0 2px 6px rgba(34, 28, 38, .08);--ease: cubic-bezier(.2, 0, .15, 1);--font-display: "Anuphan", "Sarabun", system-ui, sans-serif;--font-body: "Sarabun", system-ui, -apple-system, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", monospace;--sidebar-w: 244px;--topbar-h: 78px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--page);color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-display);margin:0;line-height:1.3;font-weight:600}h1{font-size:1.5rem}h2{font-size:1.175rem}h3{font-size:1rem}p{margin:0 0 .6em}a{color:var(--brand)}.num,.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.shell{display:flex;min-height:100%}.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:linear-gradient(180deg,var(--nav-bg) 0%,var(--nav-bg-deep) 100%);color:var(--nav-ink);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.sidebar-brand{padding:18px 18px 16px;border-bottom:1px solid rgba(255,255,255,.08);position:relative;overflow:hidden}.sidebar-brand:after{content:"";position:absolute;pointer-events:none;right:-26px;top:50%;translate:0 -50%;width:84px;height:84px;background:url(/tuh-lab-logo.png) center / contain no-repeat;opacity:.1}.sidebar-brand .brand-mark{border-radius:11px;transition:transform .25s var(--ease),box-shadow .25s var(--ease)}.sidebar-brand:hover .brand-mark{transform:translateY(-2px);box-shadow:0 6px 16px #00000052}.brand-mark{display:block;flex:none}.sidebar-brand .title{font-family:var(--font-display);font-weight:600;color:#fff;font-size:.95rem;letter-spacing:-.01em;white-space:nowrap}.sidebar-brand .sub{font-size:.72rem;color:var(--nav-ink-faint);letter-spacing:.02em}.nav{padding:10px 10px 20px;overflow-y:auto;flex:1}.nav-group+.nav-group .nav-group-label{border-top:1px solid rgba(255,255,255,.07);margin-top:8px}.nav-group-label{font-size:.66rem;letter-spacing:.09em;text-transform:uppercase;color:var(--nav-ink-faint);padding:14px 10px 6px;font-weight:600}.nav-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;margin-bottom:2px;background:none;border:0;border-radius:var(--r-md);color:var(--nav-ink-dim);font:inherit;font-size:.9rem;text-align:left;cursor:pointer;transition:background .14s var(--ease),color .14s var(--ease)}.nav-item:hover{background:var(--nav-hover);color:#fff}.nav-item.active{background:var(--brand);color:#fff;font-weight:600;box-shadow:0 3px 12px -4px var(--brand-glow)}.nav-item .count{margin-left:auto;font-family:var(--font-mono);font-size:.72rem;background:#ffffff24;padding:1px 6px;border-radius:999px}.nav-item.active .count{background:#ffffff3d}.nav-item .count.alarm{background:var(--danger);color:#fff}.sidebar-foot{padding:12px;border-top:1px solid rgba(255,255,255,.08);font-size:.78rem;color:var(--nav-ink-faint)}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{min-height:var(--topbar-h);background:var(--paper);border-bottom:1px solid var(--line-strong);box-shadow:0 1px #221c2605,0 6px 16px -12px #221c264d;display:flex;align-items:center;gap:14px;padding:0 24px;position:sticky;top:0;z-index:20}.topbar .page-icon{width:42px;height:42px;border-radius:11px;flex:none;background:var(--brand);color:#fff;display:grid;place-items:center;box-shadow:0 4px 12px -4px var(--brand-glow)}.topbar h1{font-size:1.42rem;line-height:1.2;letter-spacing:-.015em;color:var(--ink)}.topbar .crumb{font-size:.84rem;color:var(--ink-2);margin-top:1px}.content{padding:22px;max-width:1440px;width:100%;animation:view-in .32s var(--ease)}@keyframes view-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.content{animation:none}}.avatar{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:.78rem;font-weight:600;flex:none}.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.card-head{display:flex;align-items:center;gap:11px;padding:13px 16px;border-bottom:1px solid var(--line)}.card-head h2{font-size:1rem;letter-spacing:-.005em}.card-head .head-icon{width:30px;height:30px;border-radius:8px;flex:none;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center}.card-body{padding:16px}.card-foot{padding:12px 16px;border-top:1px solid var(--line);background:var(--sunken);border-radius:0 0 var(--r-lg) var(--r-lg)}.section-rule{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-weight:600;font-size:.95rem;color:var(--ink);margin:4px 0 2px}.section-rule:before{content:"";width:3px;height:15px;border-radius:2px;background:var(--brand);flex:none}.section-rule:after{content:"";flex:1;height:1px;background:var(--line)}.grid{display:grid;gap:14px}.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.spacer{flex:1}.stack{display:flex;flex-direction:column;gap:14px}.stat{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px}.stat .label{font-size:.78rem;color:var(--ink-3);display:flex;align-items:center;gap:6px}.stat .value{font-family:var(--font-mono);font-size:1.75rem;font-weight:600;line-height:1.2;margin-top:4px}.stat .hint{font-size:.76rem;color:var(--ink-3)}.stat.is-danger .value{color:var(--danger)}.stat.is-warn .value{color:var(--warn)}.stat.is-ok .value{color:var(--ok)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:8px 14px;min-height:36px;font:inherit;font-size:.88rem;font-weight:600;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--paper);color:var(--ink);cursor:pointer;white-space:nowrap;transition:background .14s var(--ease),border-color .14s var(--ease),color .14s var(--ease)}.btn:hover:not(:disabled){background:var(--sunken);border-color:var(--ink-3)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover:not(:disabled){background:var(--brand-dark);border-color:var(--brand-dark)}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.danger:hover:not(:disabled){background:#93190f;border-color:#93190f}.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover:not(:disabled){background:var(--muted-soft);border-color:transparent}.btn.sm{min-height:30px;padding:4px 10px;font-size:.8rem}.btn.icon{padding:6px;min-height:32px;width:32px}.field{display:flex;flex-direction:column;gap:5px;min-width:0}.field>label{font-size:.8rem;font-weight:600;color:var(--ink-2)}.field .req{color:var(--danger)}.field .hint{font-size:.74rem;color:var(--ink-3)}.field .err{font-size:.74rem;color:var(--danger);font-weight:500}.input,.select,.textarea{width:100%;padding:8px 11px;min-height:38px;font:inherit;font-size:.9rem;color:var(--ink);background:var(--paper);border:1px solid var(--line-strong);border-radius:var(--r-md);transition:border-color .14s var(--ease),box-shadow .14s var(--ease)}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring)}.input::placeholder,.textarea::placeholder{color:var(--ink-3);opacity:1}.input:disabled,.select:disabled,.textarea:disabled{background:var(--sunken);color:var(--ink-3);cursor:not-allowed}.input.invalid,.select.invalid{border-color:var(--danger)}.input.num,.input.date{font-family:var(--font-mono)}.textarea{min-height:74px;resize:vertical;line-height:1.55}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23465653' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center}.search{position:relative}.search .input{padding-left:34px}.search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-3)}.checkbox{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:.88rem}.checkbox input{width:17px;height:17px;accent-color:var(--brand);cursor:pointer}.segmented{display:inline-flex;background:var(--muted-soft);border-radius:var(--r-md);padding:3px;gap:2px;flex-wrap:wrap}.segmented button{border:0;background:none;font:inherit;font-size:.84rem;font-weight:500;padding:5px 12px;border-radius:5px;color:var(--ink-2);cursor:pointer}.segmented button:hover{color:var(--ink)}.segmented button.active{background:var(--paper);color:var(--ink);font-weight:600;box-shadow:0 1px 2px #00000017}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:.875rem}table.data th{text-align:left;font-size:.72rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);padding:10px 12px;border-bottom:1px solid var(--line-strong);background:var(--sunken);white-space:nowrap;position:sticky;top:0}table.data td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}table.data tbody tr:nth-child(2n){background:var(--brand-tint)}table.data tbody tr:last-child td{border-bottom:0}table.data tbody tr.clickable{cursor:pointer}table.data tbody tr.clickable:hover{background:var(--brand-soft)}table.data .r{text-align:right}table.data .c{text-align:center}table.data td.num,table.data th.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right}.empty{padding:44px 20px;text-align:center;color:var(--ink-3)}.empty svg{color:var(--line-strong);margin-bottom:8px}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap;border:1px solid transparent}.badge.danger{background:var(--danger-soft);color:var(--danger);border-color:#f0c8c2}.badge.warn{background:var(--warn-soft);color:var(--warn);border-color:#efd6b2}.badge.ok{background:var(--ok-soft);color:var(--ok);border-color:#c3dccb}.badge.info{background:var(--info-soft);color:var(--info);border-color:#c9d1e2}.badge.muted{background:var(--muted-soft);color:var(--muted);border-color:var(--line-strong)}.badge.brand{background:var(--brand-soft);color:var(--brand-dark);border-color:#dec9e0}.chip{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:.74rem;background:var(--sunken);border:1px solid var(--line);padding:1px 7px;border-radius:var(--r-sm);color:var(--ink-2)}.muted-text{color:var(--ink-3)}.small{font-size:.8rem}.tiny{font-size:.72rem}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto;animation:fade .16s var(--ease)}.modal{background:var(--paper);border-radius:var(--r-lg);width:100%;max-width:560px;box-shadow:var(--shadow-pop);animation:rise .2s var(--ease)}.modal.wide{max-width:900px}.modal.xwide{max-width:1140px}.modal-head{display:flex;align-items:center;gap:12px;padding:15px 18px;border-bottom:1px solid var(--line)}.modal-head h2{flex:1}.modal-body{padding:18px}.modal-foot{display:flex;gap:9px;justify-content:flex-end;padding:14px 18px;border-top:1px solid var(--line);background:var(--sunken);border-radius:0 0 var(--r-lg) var(--r-lg);flex-wrap:wrap}@keyframes fade{0%{opacity:0}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.toasts{position:fixed;right:18px;bottom:18px;z-index:90;display:flex;flex-direction:column;gap:8px;max-width:400px}.toast{display:flex;align-items:flex-start;gap:10px;background:var(--paper);border:1px solid var(--line-strong);border-left-width:4px;border-radius:var(--r-md);padding:11px 14px;box-shadow:var(--shadow-pop);font-size:.88rem;animation:rise .2s var(--ease)}.toast.ok{border-left-color:var(--ok)}.toast.error{border-left-color:var(--danger)}.toast.info{border-left-color:var(--info)}.login-page{min-height:100vh;background:var(--login-grad);display:grid;place-items:center;padding:32px 24px;position:relative;overflow:hidden}.login-page:before,.login-page:after{content:"";position:absolute;border-radius:50%;pointer-events:none;filter:blur(90px);opacity:.5}.login-page:before{width:640px;height:640px;top:-220px;left:-160px;background:radial-gradient(circle,var(--aurora-a),transparent 70%);animation:aurora-a 22s ease-in-out infinite}.login-page:after{width:560px;height:560px;bottom:-200px;right:-140px;background:radial-gradient(circle,var(--aurora-b),transparent 70%);animation:aurora-b 27s ease-in-out infinite}@keyframes aurora-a{0%,to{transform:translate(0) scale(1)}50%{transform:translate(90px,70px) scale(1.12)}}@keyframes aurora-b{0%,to{transform:translate(0) scale(1.06)}50%{transform:translate(-70px,-60px) scale(1)}}.login-shell{position:relative;z-index:1;width:100%;max-width:1040px;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,400px);gap:48px;align-items:center}.login-watermark{position:absolute;z-index:0;pointer-events:none;-webkit-user-select:none;user-select:none;width:min(660px,82vw);aspect-ratio:1;left:50%;top:50%;translate:-50% -50%;background:url(/tuh-lab-logo.png) center / contain no-repeat;opacity:.07;animation:watermark-drift 34s ease-in-out infinite}@media(min-width:901px){.login-watermark{left:34%}}@keyframes watermark-drift{0%,to{transform:rotate(-3deg) scale(1)}50%{transform:rotate(3deg) scale(1.05)}}.login-intro{color:var(--nav-ink)}.login-intro .crest{width:82px;height:82px;border-radius:50%;background:url(/tuh-lab-logo.png) center / contain no-repeat;box-shadow:0 10px 30px #0000006b;flex:none}.login-intro h1{color:#fff;font-size:clamp(1.6rem,3.2vw,2.15rem);line-height:1.2;letter-spacing:-.01em}.login-intro .tagline{color:var(--nav-ink-dim);font-size:.95rem}.login-intro .org{color:var(--nav-ink-faint);font-size:.82rem;letter-spacing:.01em}.login-features{display:grid;gap:12px;margin-top:26px}.login-feature{display:flex;gap:13px;align-items:flex-start;background:#ffffff0e;border:1px solid rgba(255,255,255,.09);border-radius:var(--r-md);padding:12px 14px;transition:background .25s var(--ease),transform .25s var(--ease),border-color .25s var(--ease)}.login-feature:hover{background:#ffffff1a;border-color:#ffffff2e;transform:translate(4px)}.login-feature .ico{width:34px;height:34px;border-radius:9px;flex:none;display:grid;place-items:center;background:#ffffff1a;color:var(--login-accent)}.login-feature b{color:#fff;font-size:.9rem;font-weight:600;display:block}.login-feature span{color:var(--nav-ink-dim);font-size:.8rem;line-height:1.5}.login-sections{margin-top:22px;display:flex;flex-wrap:wrap;gap:6px}.login-sections .code{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.04em;color:var(--nav-ink-dim);background:#ffffff0f;border:1px solid rgba(255,255,255,.08);padding:3px 8px;border-radius:999px;transition:color .2s var(--ease),background .2s var(--ease)}.login-sections .code:hover{color:#fff;background:#ffffff21}.login-card{position:relative;z-index:1;background:var(--paper);border-radius:var(--r-lg);width:100%;padding:30px 28px;box-shadow:0 28px 70px #00000073}.login-card .brand-mark{border-radius:13px;box-shadow:0 6px 16px #00000040}.rise-in{animation:rise-in .62s var(--ease) backwards}@keyframes rise-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}@media(max-width:900px){.login-shell{grid-template-columns:1fr;gap:30px;max-width:460px}.login-intro{text-align:center}.login-intro .row{justify-content:center}.login-feature{text-align:left}.login-sections{justify-content:center}}@media(max-width:640px),(max-height:620px){.login-features,.login-sections{display:none}}@media(prefers-reduced-motion:reduce){.login-page:before,.login-page:after,.login-watermark{animation:none}.rise-in{animation:none}}.steps{display:flex;align-items:center;gap:0;flex-wrap:wrap}.step{display:flex;align-items:center;gap:8px;padding:0 4px}.step .dot{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;border:2px solid var(--line-strong);background:var(--paper);font-family:var(--font-mono);font-size:.74rem;font-weight:600;color:var(--ink-3);flex:none}.step .txt{font-size:.82rem;color:var(--ink-3)}.step.done .dot{background:var(--ok);border-color:var(--ok);color:#fff}.step.done .txt{color:var(--ink-2)}.step.current .dot{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.step.current .txt{color:var(--brand-dark);font-weight:600}.step.rejected .dot{background:var(--danger);border-color:var(--danger);color:#fff}.step-line{width:30px;height:2px;background:var(--line-strong)}.step-line.done{background:var(--ok)}.doc-sheet{background:#fff;color:#000;width:210mm;min-height:297mm;padding:14mm 15mm;margin:0 auto;font-family:var(--font-body);font-size:11.5pt;line-height:1.45;border:1px solid var(--line)}.doc-sheet h1{font-size:16pt;text-align:center;letter-spacing:.01em}.doc-sheet .org{text-align:center;font-size:12pt;font-weight:600}.doc-sheet .sub{text-align:center;font-size:10.5pt;color:#333}.doc-sheet table{width:100%;border-collapse:collapse;font-size:10pt;margin-top:8px}.doc-sheet table th,.doc-sheet table td{border:1px solid #333;padding:4px 6px}.doc-sheet table th{background:#efefef;font-weight:600;text-align:center;font-size:9.5pt}.doc-sheet .meta{display:grid;grid-template-columns:1fr 1fr;gap:2px 18px;font-size:10.5pt;margin:10px 0}.doc-sheet .sign-row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:26px;text-align:center;font-size:10pt}.doc-sheet .sign-line{border-bottom:1px dotted #000;height:46px;display:flex;align-items:flex-end;justify-content:center}.doc-sheet .sign-line img{max-height:42px;max-width:100%}@media print{body{background:#fff}.no-print,.sidebar,.topbar,.toasts{display:none!important}.backdrop{position:static;padding:0;background:none;overflow:visible;display:block}.modal,.modal.xwide{max-width:none;box-shadow:none;border-radius:0;animation:none}.modal-head,.modal-foot{display:none!important}.modal-body{padding:0}.content{padding:0;max-width:none}.doc-sheet{border:0;width:auto;min-height:auto;padding:0}.print-plain{border:0!important}.print-plain>.card-head{display:none!important}.print-plain>.card-body{padding:0!important;background:none!important;overflow:visible!important}.print-plain>.card-body>div{padding:0!important;display:block!important}.doc-sheet table{page-break-inside:auto}.doc-sheet tr{page-break-inside:avoid}.doc-sheet h2{page-break-after:avoid}.doc-sheet .sign-row{page-break-inside:avoid}@page{size:A4;margin:12mm}}@media(max-width:900px){.sidebar{position:fixed;z-index:50;transform:translate(-100%);transition:transform .2s var(--ease)}.sidebar.open{transform:none;box-shadow:var(--shadow-pop)}.content{padding:14px}.topbar{padding:0 14px}}@media(min-width:901px){.menu-toggle{display:none}}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);z-index:45}@media(min-width:901px){.scrim{display:none}}:root[data-theme=burgundy]{--page: #F6F1EF;--paper: #FFFCFB;--sunken: #F1E9E7;--ink: #241A1E;--ink-2: #55474C;--ink-3: #716469;--line: #E7DBDE;--line-strong: #D0BFC4;--brand: #7B2E48;--brand-dark: #5E2137;--brand-soft: #F7EAEE;--brand-ring: rgba(123, 46, 72, .26);--brand-tint: rgba(123, 46, 72, .018);--brand-glow: rgba(123, 46, 72, .9);--nav-bg: #2E1D24;--nav-bg-deep: #251720;--nav-ink: #EBDDE1;--nav-ink-dim: #BFA6AE;--nav-ink-faint: #A18B94;--muted: #6A5A5F;--muted-soft: #F0EAEB;--mark-a: #A85E77;--mark-b: #5E2137;--login-grad: linear-gradient(160deg, #1F1216 0%, #2E1D24 32%, #55253C 70%, #7B2E48 100%);--aurora-a: rgba(168, 94, 119, .48);--aurora-b: rgba(123, 46, 72, .6);--login-accent: #E9C3CE}:root[data-theme=indigo]{--page: #F4F2F3;--paper: #FFFDFC;--sunken: #EEEBEF;--ink: #1F1C2B;--ink-2: #4C4860;--ink-3: #6A657A;--line: #E1DEE8;--line-strong: #C6C2D2;--brand: #4A3F82;--brand-dark: #372F66;--brand-soft: #EDEBF7;--brand-ring: rgba(74, 63, 130, .26);--brand-tint: rgba(74, 63, 130, .02);--brand-glow: rgba(74, 63, 130, .9);--nav-bg: #262238;--nav-bg-deep: #1D1A2D;--nav-ink: #E2DFEF;--nav-ink-dim: #ABA5C4;--nav-ink-faint: #9590AC;--muted: #5C5870;--muted-soft: #ECEAF1;--mark-a: #7A6EB5;--mark-b: #372F66;--login-grad: linear-gradient(160deg, #17152A 0%, #262238 32%, #3B3369 70%, #4A3F82 100%);--aurora-a: rgba(122, 110, 181, .48);--aurora-b: rgba(74, 63, 130, .6);--login-accent: #CFC9EE}:root[data-theme=graphite]{--page: #F6F3EE;--paper: #FFFDF9;--sunken: #F0EBE3;--ink: #221F1B;--ink-2: #55504A;--ink-3: #6D6761;--line: #E4DDD3;--line-strong: #CBC2B5;--brand: #45413C;--brand-dark: #302D29;--brand-soft: #EEEAE4;--brand-ring: rgba(69, 65, 60, .24);--brand-tint: rgba(69, 65, 60, .02);--brand-glow: rgba(69, 65, 60, .85);--nav-bg: #332F2A;--nav-bg-deep: #262320;--nav-ink: #E9E3D9;--nav-ink-dim: #B7B0A4;--nav-ink-faint: #A49F95;--muted: #5E5952;--muted-soft: #EEEAE3;--mark-a: #736C63;--mark-b: #302D29;--login-grad: linear-gradient(160deg, #201E1B 0%, #2E2A26 32%, #423E38 70%, #55504A 100%);--aurora-a: rgba(150, 140, 126, .4);--aurora-b: rgba(96, 90, 81, .55);--login-accent: #DED4C6}:root[data-theme=espresso]{--page: #F6F2EC;--paper: #FFFCF8;--sunken: #F0E9E0;--ink: #241C15;--ink-2: #554B41;--ink-3: #70665D;--line: #E6DCD0;--line-strong: #CDBFAE;--brand: #6A4630;--brand-dark: #4F3423;--brand-soft: #F3ECE5;--brand-ring: rgba(106, 70, 48, .26);--brand-tint: rgba(106, 70, 48, .02);--brand-glow: rgba(106, 70, 48, .9);--nav-bg: #322619;--nav-bg-deep: #271D13;--nav-ink: #EDE3D7;--nav-ink-dim: #BCAE9C;--nav-ink-faint: #A19587;--muted: #61574C;--muted-soft: #EFEAE2;--mark-a: #9E7A5C;--mark-b: #4F3423;--login-grad: linear-gradient(160deg, #1E1610 0%, #322619 32%, #533A26 70%, #6A4630 100%);--aurora-a: rgba(158, 122, 92, .45);--aurora-b: rgba(106, 70, 48, .6);--login-accent: #E4CDB4}.dropzone{border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:16px;margin-bottom:14px;cursor:pointer;background:var(--sunken);transition:border-color .16s var(--ease),background .16s var(--ease)}.dropzone:hover{border-color:var(--brand);background:var(--brand-soft)}.dropzone.over{border-color:var(--brand);background:var(--brand-soft);box-shadow:0 0 0 3px var(--brand-ring)}.attach-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(212px,1fr))}.attach-item{border:1px solid var(--line);border-radius:var(--r-md);background:var(--paper);overflow:hidden;display:flex;flex-direction:column;transition:border-color .16s var(--ease),box-shadow .16s var(--ease)}.attach-item:hover{border-color:var(--line-strong);box-shadow:var(--shadow-card)}.attach-thumb{height:118px;border:0;padding:0;width:100%;background:var(--sunken);cursor:pointer;display:grid;place-items:center;overflow:hidden;border-bottom:1px solid var(--line)}.attach-thumb img{width:100%;height:100%;object-fit:cover;display:block}.attach-meta{padding:9px 10px;display:flex;flex-direction:column;gap:3px}.attach-name{font-size:.82rem;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attach-meta a.btn{text-decoration:none}@media print{.dropzone,.attach-grid{display:none!important}}.settings-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);align-items:start}@media(max-width:1000px){.settings-layout{grid-template-columns:1fr}}.preview-inline{background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 12px;min-height:38px;display:flex;flex-direction:column;justify-content:center}.threshold-bar{display:flex;height:9px;border-radius:999px;overflow:hidden}.threshold-bar .seg{flex:1}.threshold-bar .seg.danger{background:var(--danger);flex:1.1}.threshold-bar .seg.warn{background:var(--warn)}.threshold-bar .seg.ok{background:var(--ok);flex:1.6}.letterhead{background:#fff;border:1px solid var(--line-strong);border-radius:var(--r-md);padding:18px 16px;text-align:center;color:#000}.letterhead .org{font-family:var(--font-display);font-weight:600;font-size:1rem}.letterhead .lab{font-size:.85rem;color:#333}.letterhead .addr{font-size:.72rem;color:#555;line-height:1.45}.letterhead .doc-title{font-family:var(--font-display);font-weight:700;font-size:1.05rem;margin-top:10px;padding-top:10px;border-top:1px solid #ddd}.letterhead .doc-meta{display:flex;justify-content:space-between;gap:10px;font-size:.75rem;color:#333;margin-top:8px;text-align:left}.save-bar{position:sticky;bottom:0;z-index:10;display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);padding:11px 14px;box-shadow:0 -2px 16px -8px #221c2659}.save-bar .small{display:inline-flex;align-items:center;gap:6px}.quick-pick{display:inline-flex;align-items:baseline;gap:6px;padding:5px 10px;font:inherit;font-size:.78rem;cursor:pointer;background:var(--paper);color:var(--ink-1);border:1px solid var(--line-strong);border-radius:999px;transition:background .14s,border-color .14s,transform .14s}.quick-pick:hover{background:var(--brand-soft);border-color:var(--brand);transform:translateY(-1px)}.quick-pick .qp-qty{font-size:.72rem;color:var(--ink-3)}.issue-summary{display:flex;align-items:center;gap:14px;background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px}.issue-summary .figure{font-size:1.2rem;font-weight:600;line-height:1.2}.how-steps{display:grid;gap:12px}.how-step{display:flex;gap:12px;align-items:flex-start}.how-step-num{position:relative;flex:none;width:40px;height:40px;display:grid;place-items:center;border-radius:var(--r-md);background:var(--brand-soft);color:var(--brand-dark);border:1px solid #DEC9E0}.how-step-num span{position:absolute;top:-6px;right:-6px;width:18px;height:18px;display:grid;place-items:center;font-size:.66rem;font-weight:700;background:var(--brand);color:#fff;border-radius:999px}.lot-queue{display:grid;gap:7px}.lot-chip{display:flex;align-items:center;gap:11px;padding:9px 12px;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-md)}.lot-chip.first{border-color:var(--brand);background:var(--brand-soft)}.lot-chip-rank{flex:none;min-width:30px;text-align:center;font-size:.68rem;font-weight:700;color:var(--ink-3)}.lot-chip.first .lot-chip-rank{color:#fff;background:var(--brand);padding:3px 8px;border-radius:999px;min-width:0}@media(max-width:900px){.issue-summary{flex-wrap:wrap}}.guide-layout{display:grid;grid-template-columns:236px minmax(0,1fr);gap:22px;align-items:start}.guide-toc{position:sticky;top:96px;display:grid;gap:2px;background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 6px;box-shadow:var(--shadow-card);max-height:calc(100vh - 120px);overflow-y:auto}.guide-toc-item{display:flex;align-items:center;gap:9px;width:100%;padding:8px 10px;font:inherit;font-size:.8rem;text-align:left;background:none;border:0;border-radius:var(--r-md);color:var(--ink-2);cursor:pointer;line-height:1.35;transition:background .14s,color .14s}.guide-toc-item:hover{background:var(--sunken);color:var(--ink-1)}.guide-toc-item.active{background:var(--brand-soft);color:var(--brand-dark);font-weight:600}.guide-toc-item svg{flex:none}.guide-body{display:grid;gap:26px}.guide-section{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px 24px;box-shadow:var(--shadow-card);scroll-margin-top:96px}.guide-section-head{display:flex;gap:13px;align-items:flex-start;margin-bottom:16px}.guide-section-icon{flex:none;width:42px;height:42px;display:grid;place-items:center;border-radius:var(--r-md);background:var(--brand-soft);color:var(--brand-dark);border:1px solid #DEC9E0}.guide-section h2{font-size:1.2rem;font-weight:700;color:var(--ink-1);margin:3px 0 0}.guide-lead{font-size:.87rem;color:var(--ink-3);margin:5px 0 0;line-height:1.6}.guide-h3{font-size:.95rem;font-weight:700;color:var(--ink-1);margin:22px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line)}.guide-steps{list-style:none;margin:0;padding:0;display:grid;gap:13px}.guide-step{display:flex;gap:12px;align-items:flex-start}.guide-step-num{flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:999px;background:var(--brand);color:#fff;font-size:.75rem;font-weight:700;margin-top:1px}.guide-step-title{font-weight:600;color:var(--ink-1);line-height:1.45}.guide-step-text{font-size:.85rem;color:var(--ink-2);margin-top:3px;line-height:1.65}.guide-tip{display:flex;gap:7px;align-items:flex-start;margin-top:7px;font-size:.8rem;color:var(--ink-3);line-height:1.55;background:var(--sunken);border-radius:var(--r-md);padding:8px 10px}.guide-tip svg{flex:none;margin-top:2px}.guide-tip.warn{background:var(--warn-soft);color:var(--ink-2)}.guide-note{display:flex;gap:11px;align-items:flex-start;margin-top:16px;padding:13px 15px;border-radius:var(--r-md);background:var(--sunken);border:1px solid var(--line);line-height:1.65}.guide-note svg{flex:none;margin-top:2px}.guide-note-title{font-weight:700;color:var(--ink-1);margin-bottom:3px}.guide-note.brand{background:var(--brand-soft);border-color:#dec9e0}.guide-note.warn{background:var(--warn-soft);border-color:var(--line-strong)}.guide-note.danger{background:var(--danger-soft);border-color:var(--line-strong)}.guide-note.info{background:var(--info-soft);border-color:var(--line-strong)}.guide-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:11px;margin:16px 0}.guide-mini{display:flex;gap:10px;align-items:flex-start;padding:12px 13px;background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-md)}.guide-mini-icon{flex:none;width:32px;height:32px;display:grid;place-items:center;border-radius:var(--r-md);background:var(--paper);border:1px solid var(--line-strong);color:var(--brand-dark)}.guide-faq{display:grid;gap:8px}.guide-faq-item{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}.guide-faq-item>button{display:flex;gap:9px;align-items:center;width:100%;padding:12px 14px;font:inherit;font-weight:600;text-align:left;background:var(--paper);border:0;color:var(--ink-1);cursor:pointer}.guide-faq-item>button:hover{background:var(--sunken)}.guide-faq-item>button svg{flex:none;transition:transform .18s}.guide-faq-item.open>button svg{transform:rotate(90deg)}.guide-faq-a{display:grid;grid-template-rows:0fr;transition:grid-template-rows .22s ease}.guide-faq-item.open .guide-faq-a{grid-template-rows:1fr}.guide-faq-a>div{overflow:hidden}.guide-faq-item.open .guide-faq-a>div{padding:0 14px 13px 37px;font-size:.85rem;color:var(--ink-2);line-height:1.7}.guide-figure{margin:18px 0;padding:14px;background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-lg)}.guide-figure figcaption{margin-top:8px;text-align:center;font-size:.78rem;color:var(--ink-3);line-height:1.5}.gfx{width:100%;height:100%;display:block;overflow:visible}.gfx-track{stroke:var(--line-strong);stroke-width:2.5;stroke-linecap:round}.gfx-track-live{stroke:var(--brand);stroke-width:2.5;stroke-linecap:round;stroke-dasharray:7 9;animation:gfxDash 1.4s linear infinite}.gfx-track-fill{stroke:var(--brand);stroke-width:2.5;stroke-linecap:round;stroke-dasharray:320;stroke-dashoffset:320;animation:gfxDraw 3.4s ease-in-out infinite}.gfx-node{fill:var(--paper);stroke:var(--brand);stroke-width:2}.gfx-node.soft{fill:var(--paper);stroke:var(--line-strong)}.gfx-node-fill{fill:none;stroke:var(--brand);stroke-width:2.5;stroke-dasharray:151;stroke-dashoffset:151;transform-box:fill-box;transform-origin:center;transform:rotate(-90deg);animation:gfxRing 3.4s ease-in-out infinite}.gfx-node-fill.s1{animation-delay:0s}.gfx-node-fill.s2{animation-delay:.55s}.gfx-node-fill.s3{animation-delay:1.1s}.gfx-node-ring{fill:none;stroke:var(--brand);stroke-width:2;transform-box:fill-box;transform-origin:center;animation:gfxPulse 3s ease-out infinite}.gfx-packet{fill:var(--brand)}.gfx-label{font-size:11.5px;fill:var(--ink-2);text-anchor:middle;font-weight:600}.gfx-note{font-size:10.5px;fill:var(--ink-3);text-anchor:middle}.gfx-note.dim{fill:var(--ink-3);opacity:.75}.gfx-step-num{font-size:13px;fill:var(--brand-dark);text-anchor:middle;font-weight:700}.gfx-box{fill:var(--paper);stroke:var(--line-strong);stroke-width:1.5}.gfx-box.muted{fill:var(--sunken)}.gfx-box.brand{fill:var(--brand-soft);stroke:var(--brand);stroke-width:2}.gfx-box.danger{fill:var(--danger-soft);stroke:var(--danger);stroke-width:2}.gfx-box-text{font-size:12.5px;fill:var(--ink-1);text-anchor:middle}.gfx-box-text.strong{font-weight:700;font-size:13.5px}.gfx-box-sub{font-size:10.5px;fill:var(--ink-3);text-anchor:middle}.gfx-box-sub.em{fill:var(--brand-dark);font-weight:700}.gfx-figure{font-size:22px;font-weight:700;fill:var(--ink-1);text-anchor:middle}.gfx-figure.danger{fill:var(--danger)}.gfx-op{font-size:19px;font-weight:700;fill:var(--ink-3);text-anchor:middle}.gfx-arrow{fill:none;stroke:var(--brand);stroke-width:2;stroke-dasharray:120;stroke-dashoffset:120;animation:gfxDraw2 3s ease-in-out infinite}.gfx-bar{fill:var(--ok);transform-box:fill-box;transform-origin:left center;animation:gfxGrow 2.6s ease-out infinite}.gfx-bar.warn{fill:var(--warn)}.gfx-bar.crit{fill:#e08a2e}.gfx-bar.danger{fill:var(--danger)}.gfx-bar-label{font-size:11px;fill:var(--ink-2);text-anchor:end;font-weight:600}.gfx-pop{animation:gfxPop .45s cubic-bezier(.2,.9,.3,1.3) backwards}.gfx-fade{animation:gfxFade .55s ease backwards}.gfx-pick{animation:gfxPick 3s ease-in-out infinite;transform-box:fill-box;transform-origin:center}.gfx-hand{animation:gfxHand 3s ease-in-out infinite}.gfx-stock{animation:gfxStock 3.4s ease-in-out infinite;transform-box:fill-box;transform-origin:center}@keyframes gfxDash{to{stroke-dashoffset:-32}}@keyframes gfxDraw{0%,8%{stroke-dashoffset:320}70%,to{stroke-dashoffset:0}}@keyframes gfxDraw2{0%,10%{stroke-dashoffset:120}55%,to{stroke-dashoffset:0}}@keyframes gfxRing{0%,5%{stroke-dashoffset:151}30%,to{stroke-dashoffset:0}}@keyframes gfxPulse{0%{opacity:.55;transform:scale(1)}60%,to{opacity:0;transform:scale(1.55)}}@keyframes gfxPop{0%{opacity:0;transform:translateY(8px) scale(.9)}to{opacity:1;transform:none}}@keyframes gfxFade{0%{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}@keyframes gfxGrow{0%{transform:scaleX(0)}45%,to{transform:scaleX(1)}}@keyframes gfxPick{0%,20%{transform:translateY(0)}38%,72%{transform:translateY(-9px)}92%,to{transform:translateY(0)}}@keyframes gfxHand{0%,22%{opacity:0}42%,72%{opacity:1}92%,to{opacity:0}}@keyframes gfxStock{0%,62%{opacity:.3;transform:scale(.94)}80%,to{opacity:1;transform:scale(1)}}@media(max-width:1020px){.guide-layout{grid-template-columns:1fr}.guide-toc{position:static;max-height:none;display:flex;flex-wrap:wrap;gap:4px}.guide-toc-item{width:auto;font-size:.76rem}.guide-toc>div:first-child{width:100%}}@media print{.guide-toc{display:none}.guide-layout{grid-template-columns:1fr}.guide-section{break-inside:avoid;box-shadow:none}.guide-faq-a{grid-template-rows:1fr!important}.guide-faq-a>div{padding:0 14px 13px 37px!important;overflow:visible!important}}@media(prefers-reduced-motion:reduce){.gfx *,.gfx{animation:none!important}.gfx-track-fill,.gfx-node-fill,.gfx-arrow{stroke-dashoffset:0!important}.gfx-bar{transform:none!important}.gfx-hand,.gfx-stock,.gfx-pop,.gfx-fade{opacity:1!important}}.pw-wrap{position:relative;display:block}.pw-input{padding-right:40px;width:100%}.pw-toggle{position:absolute;top:50%;right:6px;transform:translateY(-50%);display:grid;place-items:center;width:30px;height:30px;background:none;border:0;border-radius:var(--r-sm);color:var(--ink-3);cursor:pointer;transition:color .14s,background .14s}.pw-toggle:hover{color:var(--brand);background:var(--sunken)}.lock-box{background:var(--warn-soft);border:1px solid var(--line-strong);border-radius:var(--r-md);padding:11px 13px}.sidebar-foot.as-link{display:block;width:100%;text-align:left;background:none;border:0;border-top:1px solid rgba(255,255,255,.08);font:inherit;font-size:.78rem;color:var(--nav-ink-faint);cursor:pointer;transition:background .14s}.sidebar-foot.as-link:hover{background:#ffffff0f}.sidebar-foot.as-link svg{color:var(--nav-ink-faint);flex:none}.combo{position:relative}.combo-field{display:flex;align-items:center;gap:8px;width:100%;text-align:left;cursor:pointer;font:inherit}.combo-field:disabled{cursor:not-allowed;opacity:.6}.combo-field>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.combo-field .combo-ph{color:var(--ink-3)}.combo-field svg{flex:none;color:var(--ink-3)}.combo-pop{position:absolute;z-index:40;top:calc(100% + 4px);left:0;right:0;background:var(--paper);border:1px solid var(--line-strong);border-radius:var(--r-md);box-shadow:0 12px 32px -12px #221c2673;overflow:hidden}.combo-search{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--line);background:var(--sunken)}.combo-search svg{flex:none;color:var(--ink-3)}.combo-search input{flex:1;min-width:0;border:0;background:none;font:inherit;font-size:.86rem;color:var(--ink-1);outline:none}.combo-list{max-height:290px;overflow-y:auto}.combo-item{display:block;width:100%;text-align:left;font:inherit;font-size:.84rem;padding:8px 12px;background:none;border:0;color:var(--ink-1);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.combo-item.on{background:var(--brand-soft)}.combo-item.sel{font-weight:600;color:var(--brand-dark)}.combo-none,.combo-more{padding:10px 12px;font-size:.78rem;color:var(--ink-3)}.combo-more{border-top:1px solid var(--line);background:var(--sunken)}@media(max-width:900px){.small{font-size:.875rem}.tiny{font-size:.8125rem}.field>label{font-size:.875rem}.field .hint,.stat .label,.stat .hint{font-size:.8125rem}.nav-group-label{font-size:.75rem}.sidebar-brand .sub{font-size:.8125rem}}@media(pointer:coarse){.btn{min-height:44px;padding-inline:16px}.btn.sm{min-height:38px}.input,.select,.textarea{min-height:44px}.nav-item{padding-block:12px}}
