html,body,#root{height:100%}body{margin:0}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#e8e4dc;--panel:#f6f3ec;--ink:#1c1a17;--muted:#6b6560;--line:#d2cbc0;--accent:#2f5d50;--accent-2:#c45c26;--danger:#8b2e2e;--tap-min:44px;font-family:IBM Plex Sans,Segoe UI,system-ui,sans-serif}*{box-sizing:border-box}html,body{max-width:100%;margin:0;overflow-x:hidden}body{background:var(--bg);color:var(--ink);-webkit-text-size-adjust:100%}.app{flex-direction:column;max-width:100%;min-height:100dvh;display:flex;overflow-x:hidden}.header{border-bottom:1px solid var(--line);background:#faf8f3;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:1rem;padding:1rem 1.25rem .75rem;display:flex}.header h1{letter-spacing:-.02em;margin:0;font-size:1.6rem}.tagline{color:var(--muted);margin:.15rem 0 0;font-size:.85rem}.header-actions{flex-wrap:wrap;gap:.4rem;display:flex}button{font:inherit;border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#fff;border-radius:6px;padding:.4rem .75rem}button.tap{min-height:var(--tap-min);min-width:var(--tap-min);padding:.55rem .9rem}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.secondary{background:#fff}.banner{padding:.4rem 1.25rem;font-size:.85rem}.banner.status{color:var(--muted);border-bottom:1px solid var(--line)}.banner.error{color:var(--danger);background:#f8e4e4}.main{flex:1;grid-template-columns:minmax(280px,340px) 1fr;gap:0;min-width:0;min-height:0;display:grid}.main-narrow{grid-template-columns:1fr;grid-template-areas:"preview""panel"}.main-narrow .preview-wrap{grid-area:preview}.main-narrow .panel{grid-area:panel}.panel{background:var(--panel);border-right:1px solid var(--line);max-height:calc(100dvh - 110px);padding:.75rem 1rem 2rem;overflow:auto}.panel-collapsed{display:none}.panel section{border-bottom:1px dashed var(--line);margin-bottom:1.1rem;padding-bottom:.9rem}.panel h2{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 .55rem;font-size:.78rem}.row{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.4rem;font-size:.9rem;display:flex}.row label{min-width:5.5rem}.row.dual input[type=number]{width:5.5rem;min-height:40px}.row input[type=text],.row select,.row textarea{min-width:0;font:inherit;border:1px solid var(--line);background:#fff;border-radius:4px;flex:1;min-height:40px;padding:.45rem .5rem}.row input[type=number]{font:inherit;border:1px solid var(--line);background:#fff;border-radius:4px;min-height:40px;padding:.45rem .5rem}.row.stack{flex-direction:column;align-items:stretch}.row.stack label{min-width:0}.unit{color:var(--muted);min-width:1.5rem;font-size:.8rem}.hint{color:var(--muted);margin:.35rem 0 0;font-size:.75rem;line-height:1.35}.actions{flex-direction:column;gap:.4rem;display:flex}.actions button{width:100%}.v2{opacity:.75}.pen-list{flex-direction:column;gap:.45rem;margin:.35rem 0 .6rem;display:flex}.pen-row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.pen-swatch{border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:6px;flex-shrink:0;width:48px;height:44px;padding:0}.pen-label-input{min-width:120px;font:inherit;border:1px solid var(--line);background:#fff;border-radius:4px;flex:1;min-height:44px;padding:.45rem .5rem}.manual-list{border:1px solid var(--line);background:#fff;border-radius:6px;max-height:220px;margin:.35rem 0;padding:.35rem;overflow:auto}.manual-row{flex-wrap:wrap;align-items:center;gap:.4rem;margin-bottom:.35rem;display:flex}.manual-label{min-width:5rem;font-size:.85rem}.manual-row select{min-width:100px;min-height:40px;font:inherit;flex:1}.chip{border:1px solid #0003;border-radius:3px;flex-shrink:0;width:14px;height:14px;display:inline-block}.pen-legend{color:var(--muted);flex-wrap:wrap;gap:.5rem .85rem;font-size:.8rem;display:flex}.pen-legend-item{align-items:center;gap:.35rem;display:inline-flex}.preview-wrap{flex-direction:column;gap:.6rem;min-width:0;padding:1rem;display:flex}.preview-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.preview-meta{color:var(--muted);font-size:.85rem}.zoom-controls{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.zoom-label{color:var(--muted);min-width:3rem;font-size:.8rem}.preview-stage{touch-action:none;-webkit-user-select:none;user-select:none;background:#d9d3c8;border-radius:10px;flex:1;justify-content:center;align-items:center;min-height:280px;padding:1rem;display:flex;position:relative;overflow:hidden}.preview-stage.panning{cursor:grab}.preview-stage.panning:active{cursor:grabbing}.preview-transform{transform-origin:50%;will-change:transform;justify-content:center;align-items:center;display:flex}.preview-svg{border-radius:2px;max-width:100%;box-shadow:0 8px 28px #0000002e}.empty{color:var(--muted);text-align:center;padding:3rem}.player-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;padding:.35rem .15rem;display:flex}.player-controls{-webkit-overflow-scrolling:touch;flex-wrap:nowrap;align-items:center;gap:.35rem;max-width:100%;padding-bottom:.15rem;display:flex;overflow-x:auto}.speed-label{color:var(--muted);flex-shrink:0;align-items:center;gap:.35rem;font-size:.85rem;display:inline-flex}.speed-label select{font:inherit;border:1px solid var(--line);background:#fff;border-radius:4px;min-height:44px;padding:.35rem .4rem}.player-progress{color:var(--muted);font-variant-numeric:tabular-nums;word-break:break-word;font-size:.82rem}.pen-tip{pointer-events:none}@media (width<=900px){.main{grid-template-columns:1fr}.panel{border-right:none;border-top:1px solid var(--line);max-height:none;padding-bottom:3rem}.header{align-items:flex-start;padding:.85rem 1rem .65rem}.header h1{font-size:1.35rem}.preview-wrap{z-index:2;background:var(--bg);padding:.75rem;position:sticky;top:0}.preview-stage{min-height:52dvh;padding:.6rem}.player-controls,.player-progress{width:100%}.row label{min-width:4.5rem}}@media (width<=420px){.header-actions button.tap{flex:calc(50% - .4rem)}.zoom-controls{width:100%}.zoom-controls button.tap{flex:1}}
