:root{color:#e5edf7;background:#07111f;font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input{font:inherit}.app-shell{background:radial-gradient(circle at 20% 0,#14395b 0,#0000 28%),#07111f;min-height:100vh;padding:20px}.app-header{justify-content:space-between;align-items:end;gap:20px;margin-bottom:16px;display:flex}.eyebrow{color:#7dd3fc;letter-spacing:.08em;margin:0 0 6px;font-weight:800}h1{margin:0;font-size:clamp(1.8rem,4vw,3.4rem)}h2{margin:0 0 12px;font-size:1.05rem}h3{margin:0 0 8px}.status-pill{color:#bae6fd;background:#0e74902e;border:1px solid #7dd3fc59;border-radius:999px;padding:10px 14px}.workspace{grid-template-columns:minmax(280px,360px) minmax(420px,1fr) minmax(300px,420px);align-items:stretch;gap:16px;display:grid}.panel,.scene-panel{background:#0f172ad1;border:1px solid #94a3b83d;border-radius:18px;box-shadow:0 20px 60px #00000038}.panel{padding:16px;overflow:auto}.controls-panel,.detail-panel{max-height:74vh}.scene-panel{min-height:74vh;position:relative;overflow:hidden}.scene-canvas-wrap{outline:none;position:absolute;inset:0}.scene-canvas-wrap canvas{display:block}.loading{color:#bfdbfe;place-items:center;height:100%;display:grid}.input-row{color:#cbd5e1;gap:6px;margin-bottom:12px;display:grid}.input-row input{color:#e2e8f0;background:#0f172a;border:1px solid #94a3b859;border-radius:10px;width:100%;padding:10px}.formula-note{color:#93c5fd;font-size:.9rem}.summary-card{color:#cbd5e1;background:#1e293bbf;border-radius:12px;gap:4px;margin:10px 0;padding:10px;display:grid}.mapping{margin:12px 0}.mapping summary{cursor:pointer;color:#bfdbfe;font-weight:700}table{border-collapse:collapse;width:100%;margin-top:8px;font-size:.82rem}th,td{text-align:left;vertical-align:top;border-bottom:1px solid #94a3b829;padding:5px}.pile-detail p{color:#cbd5e1;margin:7px 0}.layer-list{gap:8px;margin-top:14px;display:grid}.layer-row{background:#1e293ba6;border-radius:10px;gap:2px;padding:8px;display:grid}.layer-row span:first-child{color:#fde68a;font-weight:700}.layer-row small{color:#94a3b8}.warnings-panel{max-height:240px;margin-top:16px}.warning{color:#cbd5e1;background:#1e293b9e;border-radius:10px;margin:6px 0;padding:8px}.warning.error{color:#fecaca;background:#7f1d1d40}.warning.warning{color:#fed7aa;background:#7c2d1240}.warning.info{color:#bfdbfe;background:#1e40af38}.error-panel{color:#fecaca;margin-bottom:16px}@media (width<=1100px){.workspace{grid-template-columns:1fr}.scene-panel{min-height:60vh}.app-header{flex-direction:column;align-items:start}}.layer-visibility{background:#0f172ab8;border:1px solid #7dd3fc2e;border-radius:14px;margin:14px 0;padding:12px}.layer-visibility summary{cursor:pointer;color:#bfdbfe;font-weight:800}.layer-actions{gap:8px;margin:10px 0;display:flex}.layer-actions button{cursor:pointer;color:#dbeafe;background:#0e74902e;border:1px solid #7dd3fc47;border-radius:10px;flex:1;padding:7px 8px}.layer-actions button:hover{background:#0e749052}.layer-toggle-list{gap:7px;max-height:220px;padding-right:4px;display:grid;overflow:auto}.layer-toggle{color:#cbd5e1;cursor:pointer;background:#1e293b8c;border-radius:10px;align-items:center;gap:8px;padding:7px 8px;display:flex}.layer-toggle:hover{background:#334155b8}.layer-toggle input{accent-color:#38bdf8}.layer-toggle span{line-height:1.25}.capacity-card{background:#451a032e;border:1px solid #fbbf2447;border-radius:14px;margin:14px 0;padding:12px}.capacity-card h3{color:#fde68a}.capacity-grid{color:#cbd5e1;grid-template-columns:minmax(120px,1fr) 1fr;gap:6px 10px;margin:10px 0;display:grid}.capacity-grid strong{color:#e2e8f0;text-align:right}.capacity-total{font-size:1.05rem;color:#86efac!important}.capacity-card summary{cursor:pointer;color:#bfdbfe;margin:8px 0;font-weight:800}.capacity-table{font-size:.78rem}.capacity-table th,.capacity-table td{padding:4px}.capacity-result{color:#bbf7d0;background:#16653438;border-radius:12px;gap:6px;margin:10px 0 12px;padding:12px;display:grid}.capacity-result strong{color:#86efac;font-size:1.35rem}.capacity-grid.compact{grid-template-columns:minmax(80px,1fr) 1fr}
