:root{--bg:#eceae5;--surface:#ffffff;--surface-2:#fbfaf8;--surface-3:#f7f5f1;--line:#ddd9d2;--line-2:#eceae5;--line-3:#f2f0ec;--line-4:#f4f2ee;--ink:#1a1d21;--ink-2:#3a4046;--ink-2b:#4a5157;--ink-2c:#5a6167;--ink-3:#6b7178;--ink-3b:#7c8288;--ink-3c:#8a9096;--ink-4:#9aa0a6;--ink-4b:#a3a8ad;--ink-4c:#b4b8bc;--ink-4d:#c3c0b8;--rail:#14181d;--rail-2:#232b33;--brand:#d9862c;--brand-tint:#f7ede4;--brand-tint-2:#fdf7ee;--brand-tint-3:#f4ede2;--brand-ink:#a06010;--brand-ink-2:#8a5d18;--brand-line:#e8d9bd;--green:#2e7d5b;--green-tint:#eaf4ee;--green-tint-2:#eef5ef;--blue:#0b5d8f;--blue-tint:#eef4f9;--blue-tint-2:#f7f9fb;--blue-line:#cfd8e2;--blue-ink:#0b3f66;--red:#c0392b;--red-tint:#fdf0ee;--red-line:#f0d5cf;--red-dark:#a32d1e;--s-bg:#f1f1ef;--s-surface:#ffffff;--s-surface-2:#f6f5f3;--s-surface-3:#eceae6;--s-ink:#232322;--s-ink-2:#4b4b49;--s-ink-3:#7a7975;--s-ink-4:#a3a19b;--s-line:#e5e3de;--s-line-2:#efede9;--s-brand:#dd5a2a;--s-amber:#ca8a04;--s-amber-tint:#fbf1d9;--s-red:#dc2626;--s-red-tint:#fbe3e3;--s-blue:#0284c7;--s-blue-tint:#ddeefa;--s-violet:#7c3aed;--s-violet-tint:#ede4fb;--s-indigo:#4f46e5;--s-green:#0e9f6e;--s-green-tint:#dcf3ea;--s-shadow-sm:0 1px 2px rgba(11,26,20,0.05),0 2px 8px -4px rgba(11,26,20,0.1);--s-shadow:0 1px 2px rgba(11,26,20,0.04),0 12px 28px -16px rgba(11,26,20,0.22);--font:"IBM Plex Sans Thai","IBM Plex Sans",system-ui,sans-serif;--en:"IBM Plex Sans","IBM Plex Sans Thai",system-ui,sans-serif;--mono:"IBM Plex Mono",ui-monospace,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg)}body{font-family:var(--font);color:var(--ink);-webkit-font-smoothing:antialiased}a{color:var(--blue);text-decoration:none}a:hover{color:var(--brand)}button,input,select,textarea{font-family:inherit;color:inherit}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:var(--ink-4d);border-radius:9px}.shell{display:grid;grid-template-columns:216px 1fr;min-height:100vh;background:var(--bg)}.rail{background:var(--rail);color:#fff;display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh}.rail-head{padding:20px 18px 16px;border-bottom:1px solid rgba(255,255,255,.09)}.rail-logo{width:26px;height:26px;background:var(--brand);display:grid;place-items:center;font:700 13px var(--mono);color:var(--rail);border-radius:3px;flex:0 0 auto}.rail-nav{padding:12px 8px;gap:2px;overflow-y:auto}.nav-item,.rail-nav{display:flex;flex-direction:column}.nav-item{gap:1px;padding:9px 11px;border-radius:4px;cursor:pointer;background:transparent;color:#fff}.nav-item:hover{background:rgba(255,255,255,.05);color:#fff}.nav-item.active{background:var(--rail-2);box-shadow:inset 2px 0 0 var(--brand)}.nav-item.locked{opacity:.32;pointer-events:none}.nav-th{font:500 12.5px/1.3 var(--font)}.nav-en{font:400 9.5px/1.3 var(--mono);opacity:.45;letter-spacing:.05em}.rail-foot{margin-top:auto;padding:14px 18px;border-top:1px solid rgba(255,255,255,.09);display:flex;align-items:center;gap:10px}.rail-avatar{width:28px;height:28px;border-radius:50%;background:#2e3944;display:grid;place-items:center;font:600 11px var(--mono);color:#9fb0bf;flex:0 0 auto}.main{min-width:0;display:flex;flex-direction:column}.topbar{background:var(--surface);border-bottom:1px solid var(--line);padding:0 28px;display:flex;align-items:center;gap:20px;height:60px;position:-webkit-sticky;position:sticky;top:0;z-index:5}.page-title{font:600 15px/1.3 var(--font)}.page-sub{font:400 11px/1.3 var(--font);color:var(--ink-3b)}.proj-switch{display:flex;align-items:center;gap:7px;background:var(--line-4);border:1px solid #e0dcd4;padding:6px 11px;border-radius:4px;font:500 11.5px var(--font);color:var(--ink-2b);cursor:pointer}.content{padding:26px 28px 60px;flex:1 1}.card{background:var(--surface);border:1px solid var(--line);border-radius:5px;min-width:0}.card-head{padding:13px 18px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:12px;flex-wrap:wrap}.card-title{font:600 12.5px var(--font)}.card-sub{font:400 10.5px/1.5 var(--font);color:var(--ink-3c);margin-top:2px}.card-foot{padding:14px 18px;border-top:1px solid var(--line-2);background:var(--surface-2)}.sec-num{width:18px;height:18px;border-radius:3px;display:grid;place-items:center;font:600 10px var(--mono);flex:0 0 auto}.scroll-x{overflow-x:auto}table.tbl{width:100%;border-collapse:collapse}table.tbl thead tr{background:var(--surface-3)}table.tbl th{text-align:left;padding:8px 10px;font:600 10.5px var(--font);color:var(--ink-3);border-bottom:1px solid var(--line-2);white-space:nowrap}table.tbl th:first-child{padding-left:18px}table.tbl th:last-child{padding-right:18px}table.tbl td{padding:9px 10px;border-bottom:1px solid var(--line-3);font:400 11.5px var(--font);vertical-align:middle}table.tbl td:first-child{padding-left:18px}table.tbl td:last-child{padding-right:18px}.num{font-family:var(--mono);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap}.num,td.num,th.num{text-align:right}.mono{font-family:var(--mono);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.chip{display:inline-block;padding:2px 7px;font:500 10px var(--font);white-space:nowrap}.chip,.chip-code{border-radius:3px}.chip-code{font:600 11px var(--mono);color:var(--red);background:var(--red-tint);padding:2px 6px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 15px;border-radius:4px;border:1px solid transparent;font:600 11.5px var(--font);cursor:pointer;white-space:nowrap;background:var(--surface);color:var(--ink-2c);border-color:var(--line)}.btn:hover{filter:brightness(.97)}.btn-primary{background:var(--brand);color:var(--rail);border-color:var(--brand)}.btn-dark{background:var(--rail);color:#fff;border-color:var(--rail)}.btn-ghost{background:var(--surface);border-color:var(--line);color:var(--ink-2c);font-weight:500;padding:6px 12px;font-size:11px}.btn-blue{background:var(--blue-tint-2);border-color:var(--blue-line);color:var(--blue);font-weight:500;padding:4px 10px;font-size:10.5px;border-radius:3px}.btn-dashed{display:block;width:100%;border:1px dashed var(--line);background:transparent;border-radius:4px;padding:10px;text-align:center;font:500 11px var(--font);color:var(--ink-3c);cursor:pointer}.btn-dashed:hover{background:var(--surface-2);color:var(--brand-ink)}.btn-dashed:disabled,.btn:disabled{opacity:.55;cursor:not-allowed}.pill{padding:6px 13px;background:var(--surface);border:1px solid var(--line);color:var(--ink-2c);border-radius:4px;font:500 11.5px var(--font);cursor:pointer;white-space:nowrap;display:inline-block}.pill.on{background:var(--rail);color:#fff;border-color:var(--rail)}.vol-toggle{padding:4px 10px;border-radius:3px;cursor:pointer;font:600 10.5px var(--mono);background:var(--surface);color:var(--ink-4b);border:1px dashed var(--line)}.vol-toggle.on{background:var(--brand-tint);color:var(--brand-ink);border:1px solid var(--brand-line)}.field-label{font:500 10.5px var(--font);color:var(--ink-3b);display:block;margin-bottom:5px}input.inp,select.inp,textarea.inp{width:100%;border:1px solid var(--line);border-radius:4px;padding:8px 10px;background:var(--surface);font:500 12px var(--font);color:var(--ink)}.field-box,input.inp-num:disabled,input.inp:disabled,input.inp[readonly],select.inp:disabled,textarea.inp:disabled,textarea.inp[readonly]{width:100%;border:1px dashed var(--ink-4c);border-radius:4px;padding:8px 10px;font:500 12px var(--font);color:var(--ink-3);cursor:not-allowed;background-color:var(--surface-3);background-image:repeating-linear-gradient(135deg,transparent,transparent 5px,rgb(0 0 0/.025) 0,rgb(0 0 0/.025) 10px)}input.inp-num:disabled{padding:5px 8px;font:500 11.5px var(--mono);text-align:right}.field-label .lock-tag{margin-left:6px;font:400 9px var(--mono);letter-spacing:.03em;color:var(--ink-4);border:1px solid var(--line);border-radius:3px;padding:0 4px}input.inp:focus,select.inp:focus,textarea.inp:focus{outline:none;border-color:var(--brand);background:var(--surface)}input.inp-num{min-width:70px;border:1px solid var(--line);border-radius:3px;padding:5px 8px;background:var(--surface-2);font:500 11.5px var(--mono);text-align:right}input.inp-num:focus{outline:none;border-color:var(--brand);background:var(--surface)}.calc{font:400 11.5px var(--mono);color:var(--ink-3);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.calc.strong{font-weight:600;color:var(--ink)}.s-card{background:var(--s-surface);border:1px solid var(--s-line);border-radius:16px;box-shadow:var(--s-shadow-sm)}.s-card-head{padding:14px 20px;border-bottom:1px solid var(--s-line-2);display:flex;align-items:center;gap:12px;flex-wrap:wrap}.s-btn{padding:6px 11px;border:1px solid var(--s-line);border-radius:8px;background:var(--s-surface-2);font:600 11.5px var(--font);color:var(--s-ink-2);cursor:pointer;white-space:nowrap}.s-btn-lg{padding:9px 15px;border-radius:10px;font:600 13px var(--font)}.s-btn-brand{background:var(--s-brand);color:#fff;border-color:var(--s-brand);box-shadow:0 6px 16px -8px var(--s-brand)}.s-pill{display:inline-flex;gap:5px;padding:3px 9px;border-radius:7px;font:600 11.5px var(--font);white-space:nowrap}.perm-row,.s-pill{align-items:center}.perm-row{display:grid;grid-template-columns:minmax(0,1fr) 34px 34px 34px;grid-gap:0 8px;gap:0 8px}.perm-box{justify-self:center;width:26px;height:26px;border-radius:8px;display:grid;place-items:center;font:700 12px var(--en);background:var(--surface);color:transparent;border:1.5px solid var(--s-line);cursor:pointer;padding:0}.perm-box.ov{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--s-amber)}.stack{flex-direction:column}.row,.stack{display:flex}.row{align-items:center}.wrap{flex-wrap:wrap}.grow{flex:1 1;min-width:0}.right{margin-left:auto}.muted{color:var(--ink-3b)}.bar-track{height:6px;background:var(--line-2);border-radius:3px;overflow:hidden}.bar-fill{height:100%}.alert-warn{background:var(--brand-tint-2);border:1px solid var(--brand-line);border-radius:5px;padding:14px 16px}.alert-danger{background:var(--red-tint);border-radius:4px;padding:10px 12px}.dropzone{border:1.5px dashed #d9c9ad;background:var(--surface-2);border-radius:5px;padding:22px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 18px}.dropzone.drag{border-color:var(--brand);background:var(--brand-tint-2)}.flash{padding:9px 14px;border-radius:4px;font:500 11.5px var(--font);margin-bottom:14px}.flash-ok{background:var(--green-tint);color:var(--green);border:1px solid #cfe6da}.flash-err{background:var(--red-tint);color:var(--red-dark);border:1px solid var(--red-line)}@media (max-width:900px){.shell{grid-template-columns:1fr}.rail{position:static;height:auto;align-items:center;overflow-x:auto}.rail,.rail-nav{flex-direction:row}.rail-nav{padding:8px}.rail-foot,.rail-head{border:0}.content{padding:16px 14px 48px}.topbar{padding:0 14px}}.perm-box input{position:absolute;opacity:0;width:0;height:0}.perm-box:has(input:checked){background:var(--tone,#0284c7);border-color:var(--tone,#0284c7);color:#fff}.perm-box.readonly{cursor:default}.perm-box.partial{background:var(--s-surface-2);color:var(--tone);border-color:color-mix(in srgb,var(--tone) 45%,transparent)}.perm-box.filled{background:var(--tone);border-color:var(--tone);color:#fff}:root[data-theme=dark]{--bg:#16181a;--surface:#1e2124;--surface-2:#232629;--surface-3:#2a2e32;--line:#343a40;--line-2:#2d3236;--line-3:#282c30;--line-4:#24282c;--ink:#e9e7e2;--ink-2:#d2cfc9;--ink-2b:#c6c3bd;--ink-2c:#b7b4ae;--ink-3:#a09d97;--ink-3b:#94918b;--ink-3c:#88857f;--ink-4:#78756f;--ink-4b:#6d6a65;--ink-4c:#615e5a;--ink-4d:#56534f;--rail:#101314;--rail-2:#232a30;--brand:#d9862c;--brand-tint:#3b2c1a;--brand-tint-2:#322718;--brand-tint-3:#42311d;--brand-ink:#e2a862;--brand-ink-2:#cc9550;--brand-line:#5a4526;--green:#4fb187;--green-tint:#1c2f26;--green-tint-2:#1a2b22;--blue:#55a6da;--blue-tint:#1b2c39;--blue-tint-2:#1a242c;--blue-line:#35485c;--blue-ink:#a6cfea;--red:#e4705f;--red-tint:#3b2320;--red-line:#5e352d;--red-dark:#f2917f;--s-bg:#16181a;--s-surface:#1e2124;--s-surface-2:#24282b;--s-surface-3:#2b2f33;--s-ink:#e9e7e2;--s-ink-2:#cbc8c2;--s-ink-3:#9d9a94;--s-ink-4:#7d7a75;--s-line:#343a40;--s-line-2:#2b3034;--s-brand:#e2704a;--s-amber:#d8a12a;--s-amber-tint:#362c14;--s-red:#e4645f;--s-red-tint:#3a2222;--s-blue:#3ea6de;--s-blue-tint:#172a36;--s-violet:#9a6df0;--s-violet-tint:#271f3a;--s-indigo:#6f68ee;--s-green:#35b98a;--s-green-tint:#16302a;--s-shadow-sm:0 1px 2px rgba(0,0,0,0.35),0 2px 8px -4px rgba(0,0,0,0.45);--s-shadow:0 1px 2px rgba(0,0,0,0.3),0 12px 28px -16px rgba(0,0,0,0.6);color-scheme:dark}:root[data-theme=dark] .chip,:root[data-theme=dark] .chip-code,:root[data-theme=dark] .s-pill{background:color-mix(in srgb,currentColor 16%,var(--surface))!important}:root[data-theme=dark] .alert-warn{background:var(--brand-tint-2)!important;border-color:var(--brand-line)!important}:root[data-theme=dark] .alert-danger,:root[data-theme=dark] .flash-err{background:var(--red-tint)!important;border-color:var(--red-line)!important}:root[data-theme=dark] .flash-ok{background:var(--green-tint)!important;border-color:#2f5c48!important}:root[data-theme=dark] .dropzone{background:var(--surface-2);border-color:var(--brand-line)}:root[data-theme=dark] .btn-primary,:root[data-theme=dark] .s-btn-brand{color:#14181d}:root[data-theme=dark] .s-btn-brand{color:#fff}.theme-toggle{display:grid;place-items:center;width:30px;height:30px;border-radius:4px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2c);cursor:pointer;font-size:13px;line-height:1}.theme-toggle:hover{border-color:var(--brand);color:var(--brand-ink)}:root[data-theme=dark] .field-box,:root[data-theme=dark] input.inp-num:disabled,:root[data-theme=dark] input.inp:disabled,:root[data-theme=dark] input.inp[readonly],:root[data-theme=dark] select.inp:disabled,:root[data-theme=dark] textarea.inp:disabled,:root[data-theme=dark] textarea.inp[readonly]{background-image:repeating-linear-gradient(135deg,transparent,transparent 5px,rgb(255 255 255/.04) 0,rgb(255 255 255/.04) 10px)}