@import url('https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700&display=swap');:root{color-scheme:var(--boids-color-scheme,light);--bg:var(--boids-bg,#f9fafb);--panel:var(--boids-panel,#fffffff2);--panel-strong:var(--boids-panel-strong,#ffffff);--text:var(--boids-text,#1f2937);--muted:var(--boids-muted,#6b7280);--line:var(--boids-line,#d1d5db);--accent:var(--boids-accent,#0ea5e9);--accent-2:var(--boids-accent-2,#059669);--shadow:var(--boids-shadow,0 10px 24px rgba(15,23,42,.12));--font-sans:"Lato", "Segoe UI", sans-serif;--font-display:"Lato", "Segoe UI", sans-serif;font:16px/150% var(--font-sans);color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{background:var(--bg);min-height:100vh;margin:0}#root{min-height:100vh}h1,h2{font-family:var(--font-display);letter-spacing:.01em;margin:0;font-weight:600}h1{font-size:clamp(36px,4vw,54px)}h2{font-size:22px}p{margin:0}button{font-family:var(--font-sans)}.app{flex-direction:column;gap:24px;min-height:100vh;padding:24px clamp(18px,4vw,46px) 36px;display:flex}.mast{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:28px;display:flex}.eyebrow{text-transform:uppercase;letter-spacing:.3em;color:var(--muted);margin:0 0 12px;font-size:12px}.subtitle{max-width:600px;color:var(--muted);margin:12px 0 0;font-size:16px}.page-tabs{border:1px solid var(--line);background:var(--boids-control-bg,rgba(255,255,255,.08));border-radius:8px;gap:4px;margin-top:18px;padding:4px;display:inline-flex}.page-tabs button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:7px 12px}.page-tabs button.active{color:var(--text);background:color-mix(in srgb,var(--accent) 18%,transparent)}.page-tabs button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.stats{background:var(--panel);border:1px solid var(--line);border-radius:8px;gap:12px;min-width:180px;padding:16px;display:grid}.stats div{justify-content:space-between;align-items:baseline;display:flex}.stat-label{text-transform:uppercase;letter-spacing:.2em;color:var(--muted);font-size:12px}.stats button,.panel-actions button,.object-actions button,.object-remove{border:1px solid var(--line);color:var(--text);cursor:pointer;background:var(--boids-control-bg,rgba(255,255,255,.08));border-radius:8px;padding:8px 16px;font-size:14px;transition:transform .2s,border-color .2s}.stats button:hover,.panel-actions button:hover,.object-actions button:hover,.object-remove:hover{border-color:var(--accent);transform:translateY(-1px)}.object-actions button:disabled,.object-remove:disabled{cursor:not-allowed;opacity:.45}.object-actions button:disabled:hover,.object-remove:disabled:hover{border-color:var(--line);transform:none}.content{grid-template-columns:minmax(250px,300px) minmax(0,1fr);align-items:stretch;gap:20px;min-width:0;display:grid}.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:8px;flex-direction:column;gap:18px;min-width:0;padding:20px;display:flex}.panel h2{margin:0;font-size:20px}.controls{gap:14px;display:grid}.control-menus{gap:10px;display:grid}.control-menu{border:1px solid var(--line);background:var(--boids-subtle-bg,rgba(255,255,255,.06));border-radius:8px;overflow:hidden}.control-menu summary{min-height:42px;color:var(--text);cursor:pointer;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;padding:10px 12px;list-style:none;display:grid}.control-menu summary::-webkit-details-marker{display:none}.control-menu summary:before{content:"";border-top:5px solid #0000;border-bottom:5px solid #0000;border-left:6px solid var(--muted);transform-origin:50%;width:0;height:0;transition:transform .18s,border-left-color .18s}.control-menu[open] summary:before{border-left-color:var(--accent);transform:rotate(90deg)}.control-menu summary strong{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;justify-self:end;font-size:12px;font-weight:700;overflow:hidden}.control-menu summary:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.control-menu[open]>.controls,.control-menu[open]>.panel-actions{padding:0 12px 12px}.control{gap:8px;display:grid}.control label{color:var(--muted);justify-content:space-between;font-size:14px;display:flex}.control strong{color:var(--text);font-size:14px}.control input[type=range]{appearance:none;background:linear-gradient(90deg, var(--accent), var(--accent-2));border-radius:999px;outline:none;height:6px}.control input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--boids-thumb,#ffffff);border:2px solid var(--bg);border-radius:50%;width:16px;height:16px;box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 22%,transparent)}.toggle-control{color:var(--muted);justify-content:space-between;align-items:center;gap:16px;font-size:14px;display:flex}.toggle-control input{appearance:none;border:1px solid var(--line);cursor:pointer;background:var(--boids-soft-bg,rgba(255,255,255,.14));border-radius:999px;width:42px;height:24px;transition:background .2s,border-color .2s;position:relative}.toggle-control input:after{content:"";background:var(--boids-thumb,#ffffff);border-radius:50%;width:16px;height:16px;transition:transform .2s;position:absolute;top:3px;left:4px}.toggle-control input:checked{background:linear-gradient(90deg, var(--accent), var(--accent-2));border-color:#0000}.toggle-control input:checked:after{transform:translate(17px)}.toggle-control input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.toggle-control input:disabled{cursor:not-allowed;opacity:.45}.segmented-control{border:1px solid var(--line);background:var(--boids-control-bg,rgba(255,255,255,.08));border-radius:8px;grid-template-columns:1fr 1fr;gap:4px;padding:4px;display:grid}.segmented-control button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:7px 8px}.segmented-control button.active{color:var(--text);background:color-mix(in srgb,var(--accent) 18%,transparent)}.segmented-control button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.file-control{grid-template-columns:minmax(0,1fr) auto;gap:8px;display:grid}.file-button,.file-control button{border:1px solid var(--line);min-height:32px;color:var(--text);cursor:pointer;background:var(--boids-control-bg,rgba(255,255,255,.08));border-radius:8px;font-size:14px}.file-button{place-items:center;padding:7px 10px;display:grid}.file-button input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.file-control button{padding:7px 10px}.file-button:hover,.file-control button:hover{border-color:var(--accent)}.file-control button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.file-button:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}.file-name{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.color-row{align-items:center;gap:12px;display:flex}.color-input{border:1px solid var(--line);background:0 0;border-radius:8px;width:44px;height:32px;padding:0}.swatches{flex-wrap:wrap;gap:8px;display:flex}.swatch{cursor:pointer;border:1px solid var(--line);border-radius:50%;width:20px;height:20px;padding:0}.swatch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.panel-actions{justify-content:flex-end;display:flex}.object-actions{grid-template-columns:1fr 1fr;gap:8px;display:grid}.selected-object{border:1px solid var(--line);background:var(--boids-subtle-bg,rgba(255,255,255,.06));border-radius:8px;gap:12px;padding:12px;display:grid}.selected-object-heading{color:var(--text);align-items:center;gap:8px;font-size:13px;font-weight:700;display:flex}.object-color-chip{border:1px solid var(--line);border-radius:50%;flex:none;width:11px;height:11px}.object-list{gap:8px;display:grid}.object-row{border:1px solid var(--line);background:var(--boids-subtle-bg,rgba(255,255,255,.06));border-radius:8px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:6px;padding:6px;display:grid}.object-row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 72%,transparent)}.object-select{min-width:0;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:2px 7px;font-size:13px;display:grid}.object-select span:not(.object-color-chip){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.object-select small{color:var(--muted);letter-spacing:.12em;text-transform:uppercase;grid-column:2;font-size:10px}.object-select:focus-visible,.object-remove:focus-visible,.object-actions button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.object-enabled{color:var(--muted);align-items:center;gap:4px;font-size:12px;display:flex}.object-enabled input{accent-color:var(--accent)}.object-remove{padding:6px 8px;font-size:12px}.viewport{border:1px solid var(--line);aspect-ratio:auto;background:var(--panel-strong);height:clamp(620px,65vh,720px);min-height:0;box-shadow:var(--shadow);border-radius:8px;min-width:0;position:relative;overflow:hidden}.viewport.camera-framed{background:var(--panel-strong);place-items:center;display:grid}.viewport canvas{display:block;width:100%!important;height:100%!important}.viewport.camera-landscape canvas{aspect-ratio:16/9;width:100%!important;height:auto!important;max-height:100%!important}.viewport.camera-portrait canvas{aspect-ratio:9/16;width:auto!important;max-width:100%!important;height:100%!important}.camera-draw-layer{z-index:4;pointer-events:none;position:absolute;inset:0}.camera-draw-layer.drawing{cursor:crosshair;pointer-events:auto}.camera-object-rect{border:2px solid var(--accent);cursor:pointer;pointer-events:auto;background:color-mix(in srgb,var(--accent) 8%,transparent);border-radius:4px;padding:0;display:block;position:absolute;box-shadow:0 0 0 1px rgba(15,23,42,.32)}.camera-draw-layer.drawing .camera-object-rect:not(.draft){pointer-events:none}.camera-object-rect.selected{background:color-mix(in srgb,var(--accent) 16%,transparent);box-shadow:0 0 0 1px rgba(15,23,42,.32),0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent)}.camera-object-rect.disabled{opacity:.38;border-style:dashed}.camera-object-rect.draft{pointer-events:none;background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:var(--text)}.hint{z-index:5;pointer-events:none;color:var(--text);letter-spacing:.08em;text-transform:uppercase;background:color-mix(in srgb,var(--panel-strong) 88%,transparent);border:1px solid var(--line);border-radius:8px;padding:6px 9px;font-size:12px;position:absolute;bottom:16px;left:16px}.unit-vector-label{letter-spacing:0;pointer-events:none;white-space:nowrap;background:color-mix(in srgb,var(--panel-strong) 92%,transparent);border:1px solid;border-radius:6px;padding:4px 7px;font-size:11px;font-weight:700;line-height:1}.explain-page{gap:20px;display:grid}.explain-hero{border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow);border-radius:8px;padding:22px}.explain-hero h2{margin:0 0 10px;font-size:30px}.explain-hero p:not(.eyebrow){max-width:850px;color:var(--muted)}.math-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.math-card{border:1px solid var(--line);background:var(--panel);min-width:0;box-shadow:var(--shadow);border-radius:8px;align-content:start;gap:10px;padding:16px;display:grid}.math-card h3{margin:0;font-size:17px}.math-card p{color:var(--muted);font-size:14px}.equation{color:var(--text);background:var(--boids-code-bg,rgba(12,16,26,.72));border:1px solid var(--line);border-radius:6px;width:100%;padding:10px 12px;font-size:13px;line-height:1.5;display:block;overflow-x:auto}.equation--tex .katex{color:var(--text);font-size:1.04em}.equation--tex .katex-display{margin:0;text-align:left;overflow-x:visible;overflow-y:hidden}.equation--tex .katex-display>.katex{display:inline-block;text-align:left;white-space:nowrap}.equation--tex .katex-html{white-space:nowrap}@media (width<=960px){.content{grid-template-columns:1fr}.stats{width:100%}.viewport{aspect-ratio:auto;width:100%;height:clamp(360px,78vw,470px);min-height:0}.math-grid{grid-template-columns:1fr}}
