:root{--bg: #f4f5f7;--panel: #ffffff;--ink: #1f2430;--muted: #6b7280;--line: #e3e6ea;--accent: #2f6df6;--accent-ink: #ffffff;--good: #1f9d57;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink)}header{padding:14px 20px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:baseline;gap:12px}header h1{font-size:18px;margin:0}header .tag{font-size:12px;color:var(--muted)}.tabs{display:flex;gap:2px;padding:0 16px;background:var(--panel);border-bottom:1px solid var(--line)}.tab{background:transparent;color:var(--muted);border:none;border-bottom:2px solid transparent;border-radius:0;padding:12px 18px;font-weight:600;cursor:pointer}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.content{padding:16px;display:flex;flex-direction:column;gap:16px}.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px}.card.narrow{max-width:520px}.card h2{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 12px}.card h3{font-size:13px;margin:16px 0 8px}.controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}label.field{display:flex;flex-direction:column;font-size:12px;color:var(--muted);gap:4px}select,input[type=text],input[type=number]{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink);width:100%}input[type=color]{width:34px;height:30px;padding:2px;border:1px solid var(--line);border-radius:6px;background:#fff}button{font:inherit;font-weight:600;padding:8px 14px;border:none;border-radius:7px;background:var(--accent);color:var(--accent-ink);cursor:pointer}button.secondary{background:#eef1f6;color:var(--ink);border:1px solid var(--line)}button.ghost{background:transparent;color:var(--muted);padding:4px 8px}button:hover{filter:brightness(1.04)}button:disabled{cursor:not-allowed;opacity:.45;filter:none}.info{background:#eef3ff;border:1px solid #c7d8ff;color:#1f3864;border-radius:8px;padding:10px 12px;font-size:13px}.save-panel{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 8px}.nav-row{display:flex;justify-content:space-between;gap:8px;margin-top:16px}.import-msg{margin:0 0 10px}.import-review{border:1px solid #c7d8ff;background:#f7faff;border-radius:10px;padding:12px;margin:12px 0}.import-review h3{margin-top:0}.mini-stats{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:8px;margin:10px 0}.mini-stats>div{background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px 10px}.mini-stats span{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.mini-stats strong{display:block;margin-top:3px}.table-wrap.compact table{font-size:12px}.nav-row.tight{justify-content:flex-start;margin-top:10px}.step-controls{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin:10px 0}.step-nav{display:flex;align-items:center;gap:6px}.step-btn{padding:7px 12px;font-size:13px;min-width:64px}.step-label{font-size:13px;font-weight:600;color:var(--ink);min-width:110px;text-align:center}.sep{width:1px;height:24px;background:var(--line);margin:0 4px}.units-note{background:#eef3ff;border:1px solid #c7d8ff;border-radius:7px;padding:8px 10px;font-size:12.5px;margin-bottom:12px}.disclaimer{font-size:11.5px;color:var(--muted);font-style:italic;margin:8px 0 4px}.rec-alt{background:#e7f7ee;font-weight:600}.field-label{font-size:12px;color:var(--muted);margin:4px 0 8px;font-weight:600}.colour-cell{display:flex;align-items:center;gap:6px}.colour-cell select{width:92px}.swatch{width:14px;height:14px;border-radius:3px;display:inline-block;flex:none;border:1px solid rgba(0,0,0,.15)}.legend{display:flex;flex-wrap:wrap;gap:14px;margin:12px 0 4px;font-size:13px}.legend-item{display:inline-flex;align-items:center;gap:6px}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:12.5px}th,td{text-align:right;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}th:first-child,td:first-child{text-align:left}thead th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.03em}td input[type=number]{width:78px}td input.grow{min-width:160px}.pallet-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:8px 0 4px}.pallet-card{border:1px solid var(--line);border-radius:9px;padding:10px 12px;display:flex;flex-direction:column;gap:4px;background:#fbfcfe;font-size:12px}.pallet-card span{color:var(--muted)}.equip-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.equip{border:1px solid var(--line);border-radius:9px;padding:14px;cursor:pointer;display:block;text-align:left;background:#fff;color:var(--ink);font-weight:400}.equip.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.equip-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}.equip-head strong{font-size:15px}.radio{width:16px;height:16px;border-radius:50%;border:2px solid var(--line);flex:none}.radio.on{border-color:var(--accent);background:radial-gradient(var(--accent) 0 5px,#fff 6px)}.equip-specs{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:8px 16px}.equip-specs div{display:flex;justify-content:space-between;border-bottom:1px dashed var(--line);padding-bottom:4px}.equip-specs dt{color:var(--muted);font-size:12px}.equip-specs dd{margin:0;font-weight:600;font-size:13px}.pack-list{display:flex;flex-direction:column;gap:12px;margin-top:12px}.pack-item{border:1px solid var(--line);border-radius:9px;padding:12px}.pack-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}.swatch{width:14px;height:14px;border-radius:3px;display:inline-block}.rot-modes{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}.rot-card{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:12px 10px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font-weight:400;cursor:pointer}.rot-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset;background:#f5f8ff}.rot-card strong{font-size:13px}.rot-card .muted{font-size:11px;line-height:1.35}.illus{width:76px;height:76px}.pack-rules{display:flex;flex-wrap:wrap;align-items:stretch;gap:12px}.rule{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:9px;padding:8px 12px;cursor:pointer;flex:1 1 240px}.rule.on{border-color:var(--accent);background:#f5f8ff}.rule-icon .illus{width:48px;height:48px}.chk{display:inline-flex;align-items:center;gap:6px;font-size:13px}.chk input{width:auto}.result-grid{display:grid;grid-template-columns:1fr 380px;gap:16px;align-items:start}#viewport{background:#f4f6f8;border:1px solid var(--line);border-radius:10px;overflow:hidden;height:520px}.container-switch{display:flex;gap:6px;margin:12px 0;flex-wrap:wrap}.chip{background:#eef1f6;color:var(--ink);border:1px solid var(--line);padding:6px 12px;border-radius:20px;font-size:12px}.chip.active{background:var(--accent);color:#fff;border-color:var(--accent)}.success{background:#e7f7ee;border:1px solid #b8e6cb;color:#14633a;border-radius:8px;padding:10px 12px;font-size:13px}.warn{background:#fdecec;border:1px solid #f4bcbc;color:#8a1f1f;border-radius:8px;padding:10px 12px;font-size:13px}.bar{height:6px;border-radius:4px;background:var(--line);overflow:hidden;margin-top:6px}.bar>span{display:block;height:100%;background:var(--accent)}.muted{color:var(--muted);font-size:12px}.comp-table tbody tr{cursor:pointer}.comp-table tbody tr:hover{background:#f5f8ff}.comp-row.viewing{background:#eaf1ff;box-shadow:inset 3px 0 0 var(--accent)}.ok{color:var(--good);font-weight:600}.bad{color:#8a1f1f;font-weight:600}.pill{display:inline-block;background:var(--good);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:2px 7px;border-radius:20px;vertical-align:middle}.solver-badge{display:flex;align-items:center;gap:10px;border:1px solid #c7d7ff;background:#eef4ff;color:#1f3864;border-radius:8px;padding:10px 12px;margin-bottom:10px}.solver-badge.fallback{border-color:#f5c16c;background:#fff8e6;color:#6b4500}.solver-badge span{color:inherit;font-size:12px}.warn-list{margin:6px 0 0;padding-left:18px}.warn-list li{margin:2px 0}#print-report{display:none}.rpt{color:#111;font-size:12px}.rpt h1{font-size:20px;margin:0}.rpt h2{font-size:14px;margin:18px 0 6px;border-bottom:2px solid #111;padding-bottom:3px;text-transform:none;letter-spacing:0;color:#111}.rpt-head{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:3px solid #2f6df6;padding-bottom:10px}.rpt-sub{font-size:14px;color:#444;margin-top:2px}.rpt-meta{text-align:right;font-size:11px;color:#444;line-height:1.5}.rpt-banner{background:#eef3ff;border:1px solid #c7d8ff;border-radius:6px;padding:8px 10px;margin:12px 0;font-size:12px}.rpt-warn{background:#fdecec;border:1px solid #f4bcbc;border-radius:6px;padding:8px 10px;margin:10px 0}.rpt-warn ul{margin:4px 0 0;padding-left:18px}.stat-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px 18px;margin:8px 0}.stat-grid div{border-bottom:1px solid #ddd;padding-bottom:4px}.stat-grid span{display:block;color:#666;font-size:10px;text-transform:uppercase;letter-spacing:.03em}.stat-grid b{font-size:13px}.rpt-img{text-align:center;margin:10px 0}.rpt-img img{max-width:100%;max-height:300px;border:1px solid #ccc;border-radius:6px}table.rpt-table{width:100%;border-collapse:collapse;font-size:11px;margin-top:4px}.rpt-table th,.rpt-table td{border:1px solid #ccc;padding:4px 6px;text-align:left}.rpt-table th{background:#f0f3f8;text-transform:none;letter-spacing:0;color:#111;font-size:11px}.rpt-table .r{text-align:right}.rpt-table tr.rec{background:#e7f7ee;font-weight:600}.rpt .sw{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:middle;border:1px solid rgba(0,0,0,.2)}.rpt-disclaimer{font-size:10.5px;font-style:italic;color:#555;margin:6px 0 4px}.rpt-h3{font-size:12px;margin:12px 0 4px;color:#111}.rpt-foot{margin-top:20px;padding-top:8px;border-top:1px solid #ccc;color:#888;font-size:10px;text-align:center}@media print{body>#app{display:none!important}#print-report{display:block!important}@page{margin:14mm}}@media (max-width: 900px){.result-grid{grid-template-columns:1fr}}
