:root{--bg:#f3f2f2;--surface:#eae9e9;--text:#201e1d;--accent:#ec3013;--border:#7b7a7a;--neutral-100:#f8f4f4;--neutral-200:#eae7e7;--neutral-300:#d7d3d3;--neutral-400:#bab6b6;--neutral-500:#9b9797;--neutral-600:#7d7979;--neutral-700:#605d5d;--neutral-800:#444141;--neutral-900:#2d2b2b;--accent-100:#fff2ef;--accent-600:#dd2b0f;--accent-800:#7c1405;--muted:var(--neutral-600);--warn-bg:var(--accent-100);--warn-text:var(--accent-800);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--radius:0;--shadow-md:0 3px 10px rgba(45,43,43,0.16);--shadow-lg:0 12px 32px rgba(45,43,43,0.22);--sheet-fill:#ffffff;--sheet-stroke:var(--neutral-900);--gripper-fill:var(--neutral-300);--piece-fill:var(--neutral-100);--piece-flipped:var(--accent-100);--piece-stroke:var(--neutral-400)}*{box-sizing:border-box}@font-face{font-family:Archivo;src:url(/fonts/archivo-vietnamese.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Archivo;src:url(/fonts/archivo-latin-ext.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Archivo;src:url(/fonts/archivo-latin.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body{margin:0;background:var(--bg);color:var(--text);font:13px/1.5 Archivo,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.app-shell{height:100vh;display:flex;overflow:hidden}.app-nav{width:200px;flex:none;background:var(--neutral-900);color:var(--neutral-300);display:flex;flex-direction:column;padding:var(--space-4) 0;overflow-y:auto}.app-nav .brand{padding:0 var(--space-4) 14px;font-family:Archivo,system-ui,sans-serif;font-weight:800;font-size:16px;color:var(--neutral-100);letter-spacing:-.01em}.app-nav .brand span{color:var(--accent)}.app-nav .sec{padding:14px var(--space-4) 6px;font-size:9.5px;letter-spacing:.12em;color:var(--neutral-600)}.app-nav a{padding:6px var(--space-4);font-size:13px;color:var(--neutral-400);text-decoration:none;cursor:pointer}.app-nav a.on{color:var(--neutral-100);border-left:3px solid var(--accent);background:rgba(236,48,19,.14);padding-left:13px}.app-nav .foot{margin-top:auto}.app-main{flex:1 1;min-width:0;display:flex;flex-direction:column}.context-bar{height:52px;flex:none;border-bottom:2px solid var(--border);display:flex;align-items:center;gap:14px;padding:0 var(--space-4)}.context-bar .k{font-size:12px;color:var(--neutral-600)}.context-bar .v{font-family:Archivo,system-ui,sans-serif;font-weight:800;font-size:13px}.context-bar .sep{width:1px;height:20px;background:var(--border)}.context-bar .status{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--neutral-600)}.context-bar .status:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}.quote-layout{flex:1 1;min-height:0;display:grid;grid-template-columns:336px minmax(0,1fr) 392px}.col-preview,.col-spec{border-right:2px solid var(--border)}.col-spec{overflow-y:auto}.col-preview,.col-spec{min-width:0;padding:var(--space-3)}.col-preview{overflow:auto;background:var(--neutral-100)}.col-price{min-width:0;display:flex;flex-direction:column;min-height:0}.col-price>.sheet-options{flex:none;max-height:30%;overflow-y:auto}.col-price>.cost-breakdown{flex:1 1;min-height:0;overflow-y:auto}.col-price>.totals-pinned{flex:none;background:var(--surface);border-top:2px solid var(--border)}@media (max-width:1280px){.app-shell{height:auto;min-height:100vh;overflow:visible}.quote-layout{grid-template-columns:1fr}.col-preview,.col-spec{border-right:none;border-bottom:2px solid var(--border);overflow:visible}.col-price>.cost-breakdown,.col-price>.sheet-options{max-height:none;overflow:visible}}section{border:none;border-radius:var(--radius);padding:0;margin-bottom:var(--space-4)}section>h2{padding-bottom:6px;border-bottom:1px solid var(--border)}h1{font-size:18px;letter-spacing:-.015em;margin:var(--space-4) var(--space-4) 0}h1,h2{font-family:Archivo,system-ui,sans-serif;font-weight:800}h2{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--text);margin:0 0 10px}label{display:block;margin-bottom:10px}label span{display:block;font-size:12px;color:var(--neutral-700);margin-bottom:3px}input,select{width:100%;padding:5px var(--space-2);border:1px solid var(--border);border-radius:var(--radius);font:inherit;background:var(--surface);color:inherit}input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:5px 4px;border-bottom:1px solid var(--border);font-weight:400;vertical-align:top}thead th{font-size:12px;color:var(--muted)}.numeric{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}tr.subtotal td,tr.subtotal th,tr.total td,tr.total th{font-weight:600;border-top:1px solid var(--text)}.badge{display:inline-block;margin-left:6px;padding:1px 6px;font-size:9px;letter-spacing:.04em}.badge,.flat-size{border-radius:var(--radius);background:var(--warn-bg);color:var(--warn-text)}.flat-size{margin-top:-4px;padding:6px 8px;font-weight:600}.imposition-preview figcaption{margin-top:8px;font-size:13px}.alternate-warning{display:block;margin-top:6px;padding:6px 8px;background:var(--warn-bg);color:var(--warn-text);border-radius:4px}.sheet-options ul{list-style:none;margin:0;padding:0}.sheet-options button{display:grid;grid-template-columns:auto 1fr auto;grid-gap:8px;gap:8px;width:100%;padding:7px 8px;margin-bottom:4px;border:1px solid transparent;border-radius:4px;background:transparent;font:inherit;text-align:left;cursor:pointer}.sheet-options button:hover{background:var(--bg)}.sheet-options button.selected{border-color:var(--accent);background:var(--bg)}.sheet-options .total{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.break-even{margin:8px 0 0;padding:8px;background:var(--bg);border-radius:4px;font-size:13px}.rejected{margin-top:8px;font-size:12px;color:var(--muted)}.quantity-tiers tr.selected{background:var(--bg)}.quantity-tiers button{border:none;background:none;font:inherit;color:inherit;cursor:pointer;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.sign-in{max-width:340px;margin:80px auto;display:flex;flex-direction:column;gap:12px}.sign-in h1{margin:0 0 4px;font-size:20px}.sign-in .hint{margin:0;font-size:12px;color:var(--muted)}.empty-hint{font-size:12px;color:var(--neutral-600);margin:0;padding:var(--space-2) 0}.new-quote{max-width:420px;display:flex;flex-direction:column;gap:12px}.quote-code{font-size:13px;color:var(--muted);margin:0 0 12px}button{font-family:Archivo,system-ui,sans-serif;font-weight:800;font-size:13px;padding:var(--space-2) 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);color:var(--text);cursor:pointer}button:hover:not(:disabled){background:var(--neutral-200)}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:disabled{background:var(--neutral-300);color:var(--neutral-600);border-color:var(--neutral-300);cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-600);border-color:var(--accent-600)}.operation-picker fieldset{border:1px solid var(--line,#ccc);border-radius:4px;margin:0 0 10px;padding:8px 10px 10px}.operation-picker legend{font-size:12px;font-weight:600;color:var(--muted);padding:0 4px}.operation-row{flex-wrap:wrap;padding:2px 0}.operation-row,.operation-row>label{display:flex;align-items:center;gap:6px}.operation-row>label{flex-wrap:nowrap;flex:1 1 100%;min-width:0;font-size:12px;margin:0;cursor:pointer}.operation-row>label input[type=checkbox]{width:auto;flex:none;margin:0;accent-color:var(--accent)}.operation-row>label>span:first-of-type{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.badge-stage{background:var(--neutral-200);color:var(--neutral-700);margin-left:0;flex:none;white-space:nowrap}.operation-row .unit-price{font-size:11px;color:var(--neutral-600);margin-left:auto;white-space:nowrap;flex:none}.operation-param{display:flex;align-items:center;gap:6px;flex:0 0 auto;margin-left:22px;margin-bottom:0;font-size:11px}.operation-param>span{margin:0;white-space:nowrap}.operation-param input,.operation-param select{width:auto;min-width:78px;padding:2px 5px;font-size:11px}.operation-picker .hint{font-size:12px;color:var(--muted);margin:0 0 10px}.totals-panel{padding:10px var(--space-3) var(--space-3)}.totals-row{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}.totals-foot{align-items:center;margin-top:var(--space-2)}.totals-label{font-size:11px;color:var(--neutral-600)}.totals-big{font-family:Archivo,system-ui,sans-serif;font-weight:800;font-size:20px;line-height:1.1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.totals-unit{font-size:12px;font-weight:400;color:var(--neutral-600)}.totals-margin{font-size:12px;display:inline-flex;align-items:center;gap:6px}.totals-margin b{font-family:Archivo,system-ui,sans-serif;font-size:14px}.margin-low{color:var(--accent)}.badge-floor{background:var(--accent);color:#fff}.totals-note{font-size:11px;color:var(--accent-800);margin:6px 0 0}.indirect-rates label{display:grid;grid-template-columns:1fr auto;align-items:center;grid-gap:4px var(--space-2);gap:4px var(--space-2);margin-bottom:var(--space-2)}.indirect-rates label>span:first-child{margin:0;font-size:12px;color:var(--neutral-700)}.rate-input{display:inline-flex;align-items:center;gap:4px}.rate-input input{width:64px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.rate-unit{font-size:11px;color:var(--neutral-600)}.rate-hint{grid-column:1/-1;margin:0;font-size:10.5px;color:var(--neutral-500)}.rate-note{font-size:11px;color:var(--neutral-600);margin:var(--space-2) 0 0}.confirmed-band{flex:none;display:flex;align-items:center;gap:var(--space-3);padding:9px var(--space-4);background:var(--accent-100);border-bottom:2px solid var(--accent);color:var(--accent-800);font-size:11.5px}.confirmed-band b{font-family:Archivo,system-ui,sans-serif;font-weight:800;font-size:12px}.confirmed-band .confirmed-note{opacity:.8}.confirmed-band button{margin-left:auto;font-size:11px;padding:4px 10px}.status-confirmed{color:var(--accent)}.dialog-backdrop{position:fixed;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;background:rgba(32,30,29,.45)}.dialog{width:min(460px,92vw);max-height:90vh;overflow-y:auto;padding:var(--space-4);background:var(--bg);border:2px solid var(--text);border-radius:var(--radius);box-shadow:var(--shadow-lg)}.dialog h2{font-size:16px;text-transform:none;letter-spacing:-.015em;border-bottom:none;padding-bottom:0;margin-bottom:var(--space-3)}.dialog-actions{display:flex;justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-4)}.confirm-figures{display:flex;flex-direction:column;gap:0;margin:0 0 var(--space-3)}.confirm-figures>div{display:flex;justify-content:space-between;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--border)}.confirm-figures dt{font-size:13px}.confirm-figures dd{margin:0;font-family:Archivo,system-ui,sans-serif;font-weight:800;font-size:15px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.confirm-note{font-size:12px;color:var(--neutral-700);margin:0 0 var(--space-3)}.confirm-floor{font-size:12.5px;color:var(--accent-800);background:var(--accent-100);border:2px solid var(--accent);padding:9px 11px;margin-bottom:var(--space-3)}.confirmed-todo{margin-left:auto;display:inline-flex;align-items:center;gap:6px}.confirmed-todo .badge{margin-left:0;background:var(--neutral-200);color:var(--neutral-700)}.confirmed-band .confirmed-todo button{margin-left:0}