:root{--bg:#f6f5f2;--panel:#fff;--ink:#1d232a;--muted:#66717d;--line:#dcdfe3;--accent:#0a6cff;--err:#d23a2f;--warn:#c98200;--info:#3d6f9e;color:var(--ink);font:13px/1.4 -apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;margin:0}body{flex-direction:column;display:flex}#toolbar{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 10px;display:flex}#toolbar .title{margin-right:10px;font-weight:600}#toolbar .sep{background:var(--line);width:1px;height:22px;margin:0 4px}button,select,input,textarea{font:inherit;color:inherit}button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:6px;padding:4px 9px}button:hover{border-color:#b8bec6}button.on{background:var(--accent);color:#fff;border-color:var(--accent)}button.small{padding:1px 6px;font-size:12px}button.danger{color:var(--err)}button.generated{color:#1f7a3a;font-variant-numeric:tabular-nums;background:#f1faf3;border-color:#bfe0c8;min-width:170px}button.generated.old{color:var(--muted);border-color:var(--line);background:#fff}.fit{border-radius:6px;margin:2px 0 8px;padding:6px 8px;font-size:12px}.fit.ok{color:#1f5a30;background:#f1faf3;border:1px solid #bfe0c8}.fit.warn{color:#6b4b00;background:#fff8e6;border:1px solid #f0d58a}.fit .row{margin-top:6px}main{flex:1;min-height:0;display:flex;overflow:hidden}aside{background:var(--panel);border-color:var(--line);border-style:solid;border-width:0;width:300px;overflow-y:auto}#left{border-right-width:1px}#right{border-left-width:1px;width:340px}#stage{flex:1;min-width:0;position:relative;overflow:hidden}body.hide-left #left{visibility:hidden;margin-left:-300px}body.hide-right #right{visibility:hidden;margin-right:-340px}body.ready aside{transition:margin .25s,transform .25s,visibility .25s}.panel-head{z-index:2;border-bottom:1px solid var(--line);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:#f1f3f5;justify-content:space-between;align-items:center;padding:6px 8px 6px 12px;font-size:11px;font-weight:600;display:flex;position:sticky;top:0}.panel-head button{text-transform:none;letter-spacing:0;color:var(--ink);font-weight:400}.edge-tab{z-index:5;writing-mode:vertical-rl;background:var(--panel);padding:10px 5px;font-weight:600;position:absolute;top:50%;box-shadow:0 1px 6px #0000001f}.edge-tab.left{border-left:0;border-radius:0 6px 6px 0;left:0;transform:translate(calc(-100% - 8px),-50%)}.edge-tab.right{border-right:0;border-radius:6px 0 0 6px;right:0;transform:translate(calc(100% + 8px),-50%)}body.hide-left .edge-tab.left,body.hide-right .edge-tab.right{transform:translateY(-50%)}body.ready .edge-tab{transition:transform .2s}body.ready.hide-left .edge-tab.left,body.ready.hide-right .edge-tab.right{transition-delay:.2s}.wall-dist{font-variant-numeric:tabular-nums;background:#f1f5fb;border:1px solid #d5e2f3;border-radius:6px;margin:2px 0 8px;padding:6px 8px}@media (width<=800px){#toolbar{-webkit-overflow-scrolling:touch;flex-wrap:nowrap;overflow-x:auto}#toolbar>*{flex-shrink:0}main{position:relative}aside{z-index:10;position:absolute;top:0;bottom:0;box-shadow:0 0 18px #0000002e;width:min(340px,88vw)!important}#left{left:0}#right{right:0}body.hide-left #left,body.hide-right #right{margin:0}body.hide-left #left{transform:translate(calc(-100% - 24px))}body.hide-right #right{transform:translate(calc(100% + 24px))}#tip{display:none}}#canvas{touch-action:none;-webkit-user-select:none;user-select:none;background:#fbfbfa;width:100%;height:100%;display:block}#hint{border:1px solid var(--line);max-width:calc(100% - 20px);color:var(--muted);pointer-events:none;background:#ffffffeb;border-radius:6px;padding:4px 8px;position:absolute;bottom:10px;left:10px}details{border-bottom:1px solid var(--line)}details>summary{cursor:pointer;padding:8px 12px;font-weight:600;list-style:none}details>summary:before{content:"▸ ";color:var(--muted)}details[open]>summary:before{content:"▾ "}.sec{padding:0 12px 10px}.row{align-items:center;gap:6px;margin:4px 0;display:flex}.row>label{color:var(--muted);flex:1}.row input[type=number],.row input[type=text],.row select{border:1px solid var(--line);border-radius:4px;width:110px;padding:2px 5px}.row input.wide{width:170px}textarea{border:1px solid var(--line);border-radius:4px;width:100%;min-height:90px;padding:4px;font:12px ui-monospace,Menlo,monospace}.note{color:var(--muted);margin:4px 0;font-size:12px}.stat{justify-content:space-between;padding:2px 0;display:flex}.stat b{font-variant-numeric:tabular-nums}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:12px}th,td{text-align:left;vertical-align:top;border-bottom:1px solid #eef0f2;padding:3px 4px}th{color:var(--muted);font-weight:500}.swatch{vertical-align:middle;border-radius:2px;width:10px;height:10px;margin-right:4px;display:inline-block}.viol{cursor:pointer;border-radius:4px;margin:2px 0;padding:4px 6px}.viol:hover{background:#f1f3f5}.viol.error{border-left:3px solid var(--err)}.viol.warn{border-left:3px solid var(--warn)}.viol.info{border-left:3px solid var(--info)}.ok{color:#2a8a3e}.bad{color:var(--err);font-weight:600}.sleeper-row{grid-template-columns:1fr 1fr 1fr auto;gap:4px;margin:3px 0;display:grid}.sleeper-row input{border:1px solid var(--line);border-radius:4px;width:100%;padding:2px 4px}.layers label{color:var(--ink);gap:4px;margin:2px 10px 2px 0;display:inline-flex}label.check{color:var(--ink);align-items:center;gap:6px;margin:2px 0 6px;display:flex}input:disabled{opacity:.55}#tip{z-index:50;color:#f4f6f8;pointer-events:none;opacity:0;background:#1d232a;border-radius:6px;max-width:320px;padding:7px 10px;font-size:12px;line-height:1.45;transition:opacity .12s;position:fixed;box-shadow:0 4px 14px #0000002e}#tip.show{opacity:1}[data-tip]>label,th[data-tip],.stat[data-tip] span{cursor:help}@media (prefers-reduced-motion:reduce){body.ready aside,body.ready .edge-tab{transition:none}}#canvas .hole .halo{transition:opacity .12s}#canvas .hole.link-hi .halo{opacity:1}#canvas .void-link{transition:stroke-width .12s}#canvas .void-link.link-hi{opacity:1;stroke-width:26px}
