:root{--paper: #f6f1e8;--panel: #fffcf6;--ink: #2b2622;--muted: #7d7267;--line: #e2d8ca;--accent: #e0565b;--accent-ink: #ffffff;--danger: #c0392b;--viewport: #cfc8bd;--radius: 10px;color-scheme:light}@media(prefers-color-scheme:dark){:root{--paper: #1d1a18;--panel: #24201d;--ink: #efe7dc;--muted: #a59a8d;--line: #3a342e;--accent: #f07a73;--accent-ink: #1d1a18;--danger: #ff7b6b;color-scheme:dark}}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:14px/1.4 Inter,system-ui,sans-serif;display:flex;flex-direction:column}button,select,input{font:inherit;color:inherit}button{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:5px 10px;cursor:pointer}button:hover{border-color:var(--muted)}button.on,button.active{background:var(--ink);color:var(--paper);border-color:var(--ink)}select{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:4px 6px}.topbar{display:flex;align-items:center;gap:14px;padding:10px 16px;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px}.brand-mark svg{width:26px;height:26px;fill:none;stroke:var(--accent);stroke-width:2.2;stroke-linecap:round}.brand-name{font:700 19px/1 Fraunces,Georgia,serif;letter-spacing:-.01em}.model{display:flex;align-items:center;gap:8px;color:var(--muted)}.spacer{flex:1}.layout{flex:1;display:grid;grid-template-columns:minmax(380px,40%) 1fr;min-height:0}.panel{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}.tabs{display:flex;gap:4px;padding:10px 12px 0;border-bottom:1px solid var(--line)}.tab{border:none;border-radius:8px 8px 0 0;background:transparent;padding:8px 12px;color:var(--muted)}.tab.active{background:transparent;color:var(--ink);border-bottom:2px solid var(--accent)}.tab-body{flex:1;display:flex;flex-direction:column;min-height:0;padding:12px;gap:10px}.hidden{display:none!important}.pieces{display:flex;flex-wrap:wrap;gap:6px}.piece-chip{display:flex;gap:6px;align-items:center;padding:4px 9px;border-radius:999px}.piece-chip .dot{width:9px;height:9px;border-radius:50%}.piece-chip small{color:var(--muted)}.piece-chip.active small{color:inherit;opacity:.7}.piece-chip.invalid{border-color:var(--danger)}.toolbox{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.tool-group{display:flex;gap:4px;flex-wrap:wrap}.tool{display:flex;align-items:center;gap:6px}.tool svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}.swatch{width:26px;height:26px;border-radius:6px;padding:0;border:2px solid var(--line)}.swatch.on{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--panel)}.row-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.row-actions label{display:flex;gap:6px;align-items:center;color:var(--muted)}.zoom{margin-left:auto;display:flex;gap:4px}.chart-wrap{flex:1;overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);min-height:0}.chart-canvas{display:block;margin:0 auto;cursor:crosshair}.hint{color:var(--muted);font-size:12.5px;min-height:18px}.viewport{position:relative;background:var(--viewport);min-width:0}#gpu{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;touch-action:none}.overlay{position:absolute}.controls{top:12px;right:12px;width:230px;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--line);border-radius:var(--radius);padding:12px;display:flex;flex-direction:column;gap:10px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.controls label{display:flex;flex-direction:column;gap:4px;font-weight:500}.controls output{color:var(--muted);font-weight:400;float:right}.controls label{position:relative}.controls output{position:absolute;right:0;top:0}.controls input[type=range]{accent-color:var(--accent);width:100%}.seg{display:flex}.controls label.check{flex-direction:row;align-items:center;gap:8px;font-weight:400}.controls label.check input{accent-color:var(--accent)}.controls.jacobi .blocs-only{display:none}.seg button{flex:1;border-radius:0}.seg button:first-child{border-radius:8px 0 0 8px}.seg button:last-child{border-radius:0 8px 8px 0;border-left:none}.buttons{display:flex;gap:6px}.buttons button{flex:1;padding:5px 4px}.stats{left:12px;bottom:12px;font:12px ui-monospace,monospace;color:#3b342e;background:#fffcf6bf;padding:4px 8px;border-radius:6px}.help{left:12px;top:12px;font-size:12px;color:#3b342e;background:#fffcf6bf;padding:4px 8px;border-radius:6px}.gpu-error{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:32px;text-align:center;font-size:16px;background:var(--viewport);color:#3b342e}.patron-actions{display:flex;justify-content:flex-end}.patron{overflow:auto;flex:1;padding:4px 8px 32px}.patron h1{font:700 28px/1.1 Fraunces,Georgia,serif;margin:4px 0 6px}.patron h2{font:600 19px/1.2 Fraunces,Georgia,serif;margin:26px 0 6px;display:flex;gap:8px;align-items:baseline}.patron h2 small{font:400 13px Inter,sans-serif;color:var(--muted)}.patron .meta{color:var(--muted);margin:0 0 4px}.patron .colors{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0}.patron .colors span{display:inline-flex;align-items:center;gap:6px}.patron .colors i{width:14px;height:14px;border-radius:4px;border:1px solid var(--line);display:inline-block}.patron .legend{display:flex;flex-wrap:wrap;gap:14px;color:var(--muted);font-size:13px;margin:6px 0}.patron .piece-body{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:start}.patron .piece-body img{max-width:230px;border:1px solid var(--line);border-radius:8px;background:var(--paper)}.patron ol{margin:0;padding:0;list-style:none;font-variant-numeric:tabular-nums}.patron li{padding:2px 0;border-bottom:1px dashed var(--line);display:grid;grid-template-columns:74px 1fr auto;gap:8px}.patron li b{font-weight:600}.patron li em{color:var(--muted);font-style:normal}.patron .finish,.patron .assembly{margin:6px 0 0}.patron .assembly{color:var(--muted)}@media(max-width:900px){.layout{grid-template-columns:1fr;grid-template-rows:55vh auto}.viewport{order:-1;min-height:55vh}}@media print{.topbar,.viewport,.tabs,#tab-plan,.patron-actions{display:none!important}.layout{display:block}.panel{border:none}#tab-patron{display:block!important}.patron{overflow:visible}.patron .piece-body{break-inside:avoid}}
