:root{--bg0: #f4f5f7;--bg1: #ffffff;--ink: #1a1d24;--muted: #5c6570;--accent: #c45c26;--accent2: #8a4b24;--ok: #2f7a45;--track: #e2e5ea;--bar: #c45c26;--panel: rgba(255, 255, 255, .94);--line: rgba(26, 29, 36, .12);font-family:IBM Plex Sans,system-ui,sans-serif;color:var(--ink);background:radial-gradient(1200px 700px at 20% -10%,#ffffff,transparent),radial-gradient(900px 600px at 100% 0%,#eef1f5,transparent),var(--bg0)}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{min-height:100vh}.pendulum-genes{margin:.35rem 0 .5rem;padding:.55rem .75rem;border-radius:8px;background:#2f7a4514;border:1px solid rgba(47,122,69,.22);font-size:.92rem;line-height:1.45}h1,h2,h3{font-family:Fraunces,Georgia,serif;font-weight:700;letter-spacing:.01em;color:var(--ink)}a{color:var(--accent2);text-decoration:none}button{font:inherit;cursor:pointer;border:1px solid var(--line);background:linear-gradient(180deg,#fff,#eef1f5);color:var(--ink);border-radius:6px;padding:.55rem 1rem}button.primary{background:linear-gradient(180deg,#d4723a,#a8441c);border-color:#e08a55;color:#fff}button:disabled{opacity:.5;cursor:not-allowed}.app-shell{display:grid;grid-template-rows:auto 1fr;min-height:100vh}.topnav{display:flex;gap:1.25rem;align-items:baseline;padding:1rem 1.5rem;border-bottom:1px solid var(--line);background:#ffffffe0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.topnav .brand{font-family:Fraunces,Georgia,serif;font-size:1.35rem;color:var(--ink)}.topnav a{color:var(--muted)}.topnav a.active{color:var(--accent)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:1rem;box-shadow:0 1px 2px #1a1d240a}.progress-stack{display:flex;flex-direction:column;gap:.65rem}.progress-row label{display:flex;justify-content:space-between;font-size:.85rem;color:var(--muted);margin-bottom:.25rem}.track{height:10px;background:var(--track);border-radius:999px;overflow:hidden}.fill{height:100%;background:linear-gradient(90deg,var(--bar),#e08a55);width:0%;transition:width .2s ease}.viewer-wrap{position:relative;width:100%;height:min(62vh,640px);border-radius:10px;overflow:hidden;border:1px solid var(--line);background:#f0f2f5;box-shadow:inset 0 0 0 1px #fff9}.viewer-wrap canvas{width:100%;height:100%;display:block;outline:none;touch-action:none}.viewer-wrap canvas:focus-visible{box-shadow:inset 0 0 0 2px var(--bar)}.camera-toolbar{position:absolute;top:.65rem;right:.65rem;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.3rem;max-width:calc(100% - 1.3rem);padding:.35rem;border:1px solid rgba(40,48,58,.18);border-radius:8px;background:#fafbfce0;box-shadow:0 2px 10px #0f141c24;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.camera-toolbar button{min-width:2rem;padding:.3rem .5rem;font-size:.78rem}.planar2d-wrap{background:radial-gradient(ellipse at 30% 20%,rgba(255,250,240,.9),transparent 55%),linear-gradient(145deg,#f3efe6,#e7e0d2 55%,#d9d1c3)}.planar2d-canvas{cursor:grab}.planar2d-canvas:active{cursor:grabbing}.planar2d-hud{position:absolute;left:.65rem;bottom:.65rem;max-width:calc(100% - 8rem);padding:.35rem .55rem;border-radius:6px;border:1px solid rgba(40,36,30,.16);background:#faf7f0e6;color:#2c2820;font-size:.78rem;font-variant-numeric:tabular-nums;box-shadow:0 1px 6px #14100a1a;pointer-events:none}.planar2d-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center}.rate-banner{margin:.5rem 0 .75rem;padding:.55rem .75rem;border-radius:8px;border:1px solid rgba(40,36,30,.18);background:#faf7f0f5;color:#1e242a;font-size:.95rem;font-variant-numeric:tabular-nums}.controls{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.75rem}.parts-panel{margin-top:.75rem;padding:.75rem 1rem;border:1px solid var(--line);border-radius:8px;background:var(--panel)}.parts-panel-head{display:flex;flex-wrap:wrap;gap:.75rem;align-items:baseline;margin-bottom:.5rem}.parts-panel-actions{display:flex;flex-wrap:wrap;gap:.65rem;align-items:center;margin-bottom:.65rem}.parts-panel-actions button{padding:.3rem .7rem;font-size:.85rem}.parts-flags{display:flex;flex-wrap:wrap;gap:.4rem .75rem}.part-flag{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .55rem;border-radius:4px;border:1px solid transparent;color:var(--muted);font-size:.9rem;cursor:pointer;-webkit-user-select:none;user-select:none}.part-flag.on{color:var(--ink);border-color:var(--line);background:#f7f8fa}.part-flag input{accent-color:var(--accent)}.controls input[type=range]{width:160px}.muted{color:var(--muted);font-size:.9rem}.family-picker{display:flex;flex-wrap:wrap;gap:.35rem;margin:.65rem 0}.family-picker button{padding:.35rem .55rem;font-size:.78rem}.family-picker button.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,white);color:var(--ink)}.family-picker button.experimental{opacity:.78;border-style:dashed}.timing-stability{padding:.55rem .65rem;border:1px solid var(--line);border-radius:6px;background:#f7f9fb}.grid-two{display:grid;grid-template-columns:1.1fr .9fr;gap:1rem;padding:1rem 1.5rem 2rem}@media (max-width: 960px){.grid-two{grid-template-columns:1fr}}.gallery-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem;max-height:420px;overflow:auto}.gallery-list li{display:flex;justify-content:space-between;gap:.75rem;padding:.65rem .75rem;border:1px solid var(--line);border-radius:8px;background:#fff}.badge-ok{color:var(--ok);font-size:.8rem}.badge-dead{color:#c44;font-size:.8rem;font-weight:600}.composer-page{padding:0 1rem 1.5rem}.composer-page-header{margin-bottom:.75rem}.composer-page-header h1{margin:0 0 .35rem}.composer-shell{display:grid;grid-template-columns:200px 1fr 240px;gap:.75rem;min-height:560px}.composer-palette,.composer-inspector{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.75rem;overflow:auto;max-height:72vh}.composer-palette h2,.composer-inspector h2,.composer-inspector h3{margin:0 0 .5rem;font-size:1rem}.composer-hint{font-size:.78rem;margin:0 0 .65rem}.composer-part-btn{display:flex;align-items:center;gap:.5rem;width:100%;margin-bottom:.35rem;padding:.45rem .55rem;text-align:left;font-size:.82rem}.composer-part-symbol{font-family:ui-monospace,monospace;font-weight:700;min-width:2.5rem}.composer-main{display:flex;flex-direction:column;min-height:0}.composer-toolbar{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.5rem}.composer-toolbar button.selected,.family-picker button.selected{outline:2px solid var(--accent)}.composer-import{display:inline-flex;align-items:center;padding:.55rem 1rem;border:1px solid var(--line);border-radius:6px;background:linear-gradient(180deg,#fff,#eef1f5);cursor:pointer;font-size:inherit}.composer-canvas-wrap{flex:1;min-height:420px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#e8e4dc}.composer-canvas{display:block;width:100%;height:100%;min-height:420px;cursor:grab}.composer-canvas:active{cursor:grabbing}.composer-status{margin-top:.4rem;font-size:.85rem;color:var(--muted)}.composer-joint-list,.composer-joint-legend{list-style:none;padding:0;margin:0 0 1rem;font-size:.78rem;line-height:1.45}.composer-joint-list li{padding:.25rem 0;border-bottom:1px solid var(--line)}.composer-json-snippet{font-size:.7rem;background:#f0f2f5;padding:.5rem;border-radius:6px;overflow:auto;max-height:120px}.composer-play-btn{font-weight:600;min-width:7rem}.composer-play-btn.selected{background:#2a8a4a;color:#fff;border-color:#1a6a38}.composer-motion-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:.5rem;padding:.5rem .65rem;background:var(--panel);border:1px solid var(--line);border-radius:8px}.composer-slider{display:flex;align-items:center;gap:.45rem;font-size:.82rem;min-width:220px}.composer-slider input[type=range]{flex:1;min-width:100px}.composer-slider-val{font-family:ui-monospace,monospace;min-width:2.5rem;text-align:right}.composer-motion-legend{list-style:none;padding:0;margin:0 0 .75rem;font-size:.76rem;line-height:1.4}.composer-motion-legend li{display:flex;align-items:flex-start;gap:.4rem;margin-bottom:.35rem}.composer-motion-swatch{display:inline-block;width:12px;height:12px;border:2px solid;border-radius:2px;flex-shrink:0;margin-top:2px}.composer-part-review{list-style:none;padding:0;margin:0 0 .75rem}.composer-part-review>li{margin-bottom:.5rem;padding-bottom:.45rem;border-bottom:1px solid var(--line)}.composer-part-review>li.selected{background:#c45c2614;border-radius:6px;padding:.35rem}.composer-part-row{display:flex;align-items:center;gap:.35rem;width:100%;padding:.2rem 0;border:none;background:transparent;text-align:left;cursor:pointer;font-size:.78rem}.composer-part-id{font-family:ui-monospace,monospace;font-weight:700;display:block}.composer-part-title{display:block;font-size:.76rem;line-height:1.25}.composer-part-label-block{flex:1;min-width:0}.composer-tag-badge{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;border-radius:999px;background:#1a2228;color:#fff;font-family:ui-monospace,monospace;font-weight:700;font-size:.78rem;flex-shrink:0}.composer-rename{width:100%;margin-bottom:.75rem;padding:.35rem .45rem;font-size:.8rem;border:1px solid var(--line);border-radius:4px}.composer-part-meta{color:var(--muted)}.composer-verdict-row{display:flex;gap:.25rem;margin:.25rem 0 .2rem 1.1rem}.composer-verdict-row button{padding:.15rem .45rem;font-size:.72rem;text-transform:uppercase}.composer-verdict-row button.selected{outline:2px solid var(--accent)}.composer-note{width:calc(100% - 1.1rem);margin-left:1.1rem;padding:.25rem .4rem;font-size:.75rem;border:1px solid var(--line);border-radius:4px}.composer-copy-btn{width:100%;margin-bottom:.5rem}.composer-feedback-preview{max-height:180px;margin-bottom:1rem}.composer-shell{grid-template-columns:200px 1fr 300px}@media (max-width: 960px){.composer-shell{grid-template-columns:1fr}}
