:root{--ink: #0c2a3a;--ink-soft: #2a5468;--muted: #5a7d8f;--paper: rgba(248, 252, 255, .92);--paper-solid: #f7fbff;--line: rgba(20, 90, 120, .16);--ocean: #1b6ca8;--ocean-deep: #0a3d66;--ocean-mid: #2a8fc4;--teal: #1fa4a0;--sunrise: #ff8a3d;--sunrise-deep: #e85d2c;--dawn: #ffc857;--coral: #ff6b6b;--foam: #e8f6ff;--rail: rgba(240, 248, 255, .88);--shadow: 0 18px 50px rgba(8, 40, 70, .22);--crimson: var(--ocean);--crimson-deep: var(--ocean-deep);--violet: var(--teal);--violet-soft: var(--ocean-mid);--magenta: var(--sunrise);--font-ui: "JetBrains Mono", "Share Tech Mono", "SF Mono", ui-monospace, monospace;--font-display: "Share Tech Mono", "JetBrains Mono", "SF Mono", ui-monospace, monospace;font-family:var(--font-ui);letter-spacing:.02em;color:var(--ink);background:#041828}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:#041828}#root{position:relative;min-height:100vh}.ocean-backdrop{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;background:linear-gradient(180deg,#1a2a4a,#3d5a80 18%,#f07850 42%,#ffb347 52%,#2a7ab5 58%,#0c4a6e 78%,#06283f);transition:background 1.2s ease}.ocean-backdrop.is-night{background:linear-gradient(180deg,#050814,#0c1630 22%,#152448 40%,#1a3a58 52%,#0a2f4a 62%,#061828 82%,#020810)}.ocean-sky{position:absolute;inset:0 0 42%;background:radial-gradient(ellipse 80% 50% at 50% 70%,rgba(255,180,90,.55),transparent 70%),linear-gradient(180deg,#1e2f4d,#5a6f9a 40%,#e8895a 85%,#ffc070);transition:background 1.2s ease,opacity 1.2s ease}.ocean-backdrop.is-night .ocean-sky{background:radial-gradient(ellipse 70% 40% at 50% 85%,rgba(80,120,180,.35),transparent 70%),linear-gradient(180deg,#04070f,#0d1830 55%,#1a3050)}.ocean-sun,.ocean-moon{position:absolute;left:50%;top:38%;width:min(28vmin,220px);height:min(28vmin,220px);transform:translate(-50%,-40%);border-radius:50%;animation:sunPulse 10s ease-in-out infinite alternate}.ocean-sun{background:radial-gradient(circle at 35% 35%,#fff6d8,#ffd27a 28%,#ff8a3d 62%,#ff642800 78%);box-shadow:0 0 60px 20px #ffaa5073,0 0 120px 40px #ff783240}.ocean-moon{width:min(18vmin,140px);height:min(18vmin,140px);top:32%;background:radial-gradient(circle at 32% 30%,#f7f3e8,#d8d2c4 45%,#a8a294);box-shadow:0 0 40px 12px #c8dcff59,0 0 90px 28px #78a0dc33,inset -18px -10px 28px #28325059}.ocean-stars{position:absolute;inset:0 0 45%;background-image:radial-gradient(1px 1px at 12% 18%,#fff,transparent),radial-gradient(1.5px 1.5px at 28% 40%,#dce8ff,transparent),radial-gradient(1px 1px at 48% 12%,#fff,transparent),radial-gradient(1px 1px at 62% 28%,#e8f0ff,transparent),radial-gradient(1.5px 1.5px at 78% 16%,#fff,transparent),radial-gradient(1px 1px at 88% 42%,#cde0ff,transparent),radial-gradient(1px 1px at 18% 55%,#fff,transparent),radial-gradient(1px 1px at 70% 50%,#fff,transparent);opacity:.85;animation:sparkleDrift 40s linear infinite}.ocean-glow{position:absolute;left:10%;right:10%;top:40%;height:28%;background:linear-gradient(180deg,rgba(255,160,80,.35),rgba(40,140,190,.15),transparent);filter:blur(20px);transition:background 1.2s ease}.ocean-backdrop.is-night .ocean-glow{background:linear-gradient(180deg,rgba(140,180,255,.22),rgba(30,70,120,.18),transparent)}.ocean-backdrop.is-night .ocean-sparkle{opacity:.35}.sky-tide-hud{position:fixed;top:16px;left:16px;z-index:45;display:flex;flex-direction:column;gap:10px;width:min(248px,calc(100vw - 32px));pointer-events:auto;font-family:var(--font-display);-webkit-user-select:none;user-select:none;touch-action:none}.sky-tide-hud.dragging{cursor:grabbing}.sky-clock{display:grid;grid-template-columns:1fr auto;grid-template-areas:"digits zone" "digits tomato" "date date";gap:0 10px;padding:10px 12px;border-radius:12px;background:#0414246b;border:1px solid rgba(255,255,255,.28);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:#fff;box-shadow:0 10px 28px #02101c47;cursor:grab;transition:color .8s ease,background .8s ease,border-color .8s ease,box-shadow .25s ease}.sky-tide-hud.dragging .sky-clock{cursor:grabbing;box-shadow:0 16px 36px #02101c66}html[data-tod=day] .sky-clock{background:#fffaf59e;border-color:#0a284633;color:#0a2438;box-shadow:0 10px 28px #14325029}.sky-clock-digits{grid-area:digits;font-size:1.35rem;font-weight:600;letter-spacing:.08em;font-variant-numeric:tabular-nums;line-height:1.1;align-self:center}.sky-clock-colon{display:inline-block;width:.55ch;text-align:center;transition:opacity .12s linear}.sky-clock-colon.on{opacity:1}.sky-clock-colon.off{opacity:.15}.sky-clock-zone{grid-area:zone;align-self:end;justify-self:end;font-size:.68rem;letter-spacing:.14em;opacity:.85;text-align:right}.sky-clock-date{grid-area:date;margin-top:4px;font-size:.72rem;letter-spacing:.06em;opacity:.78}.pomodoro-toggle{grid-area:tomato;justify-self:end;align-self:start;display:inline-flex;flex-direction:column;align-items:center;gap:2px;margin:0;padding:2px 0 0;border:0;background:transparent;color:#e4572e;cursor:pointer;line-height:1;transition:transform .3s cubic-bezier(.34,1.56,.64,1),color .25s ease,opacity .2s ease;opacity:.82}.pomodoro-toggle:hover{opacity:1;transform:scale(1.12)}.pomodoro-toggle.on{color:#d63b1f;opacity:1;animation:tomato-pulse 1.6s ease-in-out infinite}.pomodoro-tomato{width:18px;height:18px;display:block}html[data-tod=day] .pomodoro-toggle{color:#c23a1a}.pomodoro-remain{font-size:.62rem;letter-spacing:.08em;font-variant-numeric:tabular-nums;color:currentColor;opacity:.9}@keyframes tomato-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}.ocean-wave{position:absolute;left:-10%;width:120%;height:38%;bottom:-2%;background-repeat:repeat-x;background-size:1200px 100%;opacity:.92}.ocean-wave-back{bottom:18%;height:34%;opacity:.55;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E%3Cpath fill='%230a4a72' d='M0 40 Q150 0 300 40 T600 40 T900 40 T1200 40 V120 H0Z'/%3E%3C/svg%3E");animation:waveDrift 18s linear infinite}.ocean-wave-mid{bottom:8%;height:32%;opacity:.75;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E%3Cpath fill='%231b6ca8' d='M0 50 Q150 10 300 50 T600 50 T900 50 T1200 50 V120 H0Z'/%3E%3C/svg%3E");animation:waveDrift 12s linear infinite reverse}.ocean-wave-front{bottom:-4%;height:28%;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E%3Cpath fill='%23062a45' d='M0 45 Q150 5 300 45 T600 45 T900 45 T1200 45 V120 H0Z'/%3E%3Cpath fill='%231fa4a0' opacity='0.35' d='M0 70 Q100 50 200 70 T400 70 T600 70 T800 70 T1000 70 T1200 70 V120 H0Z'/%3E%3C/svg%3E");animation:waveDrift 8s linear infinite}.ocean-ripple{position:absolute;border-radius:50%;border:2px solid rgba(232,246,255,.35);left:50%;top:62%;transform:translate(-50%,-50%);animation:rippleExpand 6s ease-out infinite}.ocean-ripple-a{width:40px;height:18px;animation-delay:0s}.ocean-ripple-b{width:40px;height:18px;left:28%;top:70%;animation-delay:2s}.ocean-ripple-c{width:40px;height:18px;left:72%;top:66%;animation-delay:4s}.ocean-sparkle{position:absolute;inset:48% 0 0;background-image:radial-gradient(circle at 20% 30%,rgba(255,255,255,.55) 0 1px,transparent 2px),radial-gradient(circle at 55% 18%,rgba(255,255,255,.4) 0 1px,transparent 2px),radial-gradient(circle at 78% 40%,rgba(255,255,255,.5) 0 1px,transparent 2px),radial-gradient(circle at 35% 55%,rgba(255,220,160,.45) 0 1.5px,transparent 3px);background-size:180px 120px,220px 160px,160px 140px,200px 150px;animation:sparkleDrift 14s linear infinite;opacity:.7;mix-blend-mode:screen}@keyframes waveDrift{0%{background-position-x:0}to{background-position-x:1200px}}@keyframes rippleExpand{0%{width:24px;height:10px;opacity:.7}to{width:220px;height:70px;opacity:0}}@keyframes sunPulse{0%{transform:translate(-50%,-40%) scale(1);filter:brightness(1)}to{transform:translate(-50%,-42%) scale(1.06);filter:brightness(1.08)}}@keyframes sparkleDrift{0%{background-position:0 0,40px 20px,-20px 10px,10px -15px}to{background-position:180px 40px,100px 80px,80px 50px,90px 30px}}button,input,select,textarea{font:inherit}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.app-shell{position:relative;z-index:1;display:grid;grid-template-rows:auto minmax(0,1fr);height:100vh;overflow:hidden;background:transparent}.topbar{display:grid;grid-template-columns:1fr minmax(160px,280px) 1fr;align-items:center;gap:12px;padding:10px 16px;background:#f7fbffe0;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line);z-index:3}.topbar-left,.topbar-right{display:flex;align-items:center;gap:8px}.topbar-right{justify-content:flex-end;flex-wrap:wrap}.brand{display:inline-flex;align-items:center;gap:8px}.brand-mark{display:block;width:auto;height:36px;object-fit:contain;filter:brightness(0)}html[data-tod=night] .brand-mark{filter:brightness(0) invert(1) drop-shadow(0 2px 14px rgba(0,0,0,.65))}html[data-tod=day] .brand-mark{filter:brightness(0) drop-shadow(0 2px 12px rgba(255,248,240,.75))}.brand-mark.brand-mark-hero{height:min(42vh,280px);width:auto;margin:0 auto}.brand-name{font-family:var(--font-display);font-weight:700;font-size:18px;letter-spacing:.14em;text-transform:uppercase;background:linear-gradient(120deg,var(--ocean-deep),var(--sunrise-deep));-webkit-background-clip:text;background-clip:text;color:transparent}.topbar-divider{width:1px;height:22px;background:var(--line);margin:0 4px}.mode-chip{font-size:12px;font-weight:600;padding:6px 10px;border-radius:999px;color:var(--ocean-deep);background:#1b6ca81a;border:1px solid rgba(27,108,168,.18)}.title-input{width:100%;border:0;background:transparent;text-align:center;font-family:var(--font-ui);font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--ink);padding:6px 10px;border-radius:10px}.title-input:focus{outline:none;background:#ffffffb3;box-shadow:inset 0 0 0 1px #2a8fc473}.ghost-btn,.export-btn,.status-bar button,.page-tabs button,.side button,.inspector button,.rail-btn{cursor:pointer}.ghost-btn{border:1px solid var(--line);background:#ffffffb3;color:var(--ink-soft);border-radius:10px;padding:7px 11px}.ghost-btn:hover{border-color:#2a8fc466;color:var(--ocean-deep)}.export-btn{border:0;border-radius:999px;padding:8px 16px;font-weight:600;color:#fff;background:linear-gradient(135deg,var(--sunrise),var(--ocean));box-shadow:0 10px 24px #1b6ca84d}.export-btn:hover{filter:brightness(1.05)}.inline{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.inline.quiet select,.inline.quiet .mini{border:1px solid var(--line);border-radius:8px;padding:5px 7px;background:#fff}.app-body{display:grid;grid-template-columns:72px minmax(220px,260px) minmax(0,1fr) minmax(220px,260px);min-height:0;height:100%}.tool-rail{display:flex;flex-direction:column;gap:4px;padding:10px 8px;background:var(--rail);border-right:1px solid var(--line);overflow:auto;z-index:2}.rail-btn{display:flex;flex-direction:column;align-items:center;gap:2px;border:0;background:transparent;color:var(--ink-soft);border-radius:14px;padding:8px 4px;font-size:10px;font-weight:500;transition:color .25s ease,transform .35s cubic-bezier(.34,1.45,.64,1)}.rail-glyph{width:36px;height:36px;border-radius:12px;display:grid;place-items:center;font-size:15px;background:#ffffffa6;border:1px solid transparent;transition:transform .4s cubic-bezier(.34,1.56,.64,1),background .3s ease,border-color .25s ease,box-shadow .35s ease,color .25s ease}.rail-glyph-svg{width:18px;height:18px;display:block}.rail-btn:hover{transform:translateY(-1px)}.rail-btn:hover .rail-glyph{border-color:#2a8fc459;transform:scale(1.14);box-shadow:0 8px 18px #1b6ca82e}.rail-btn.active{color:var(--ocean-deep)}.rail-btn.active .rail-glyph{color:#fff;background:linear-gradient(145deg,var(--ocean),var(--teal));box-shadow:0 10px 20px #1b6ca859;border-color:transparent;transform:scale(1.08);animation:rail-bubble-pop .45s cubic-bezier(.34,1.56,.64,1)}.rail-sep{height:1px;margin:6px 8px;background:var(--line)}.side{min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fffafcf0;border-right:1px solid var(--line);z-index:2}.panel-title{font-family:var(--font-display);font-size:15px;font-weight:700;padding:14px 14px 6px;color:var(--ink)}.library,.layers,.stats-panel,.pdb-panel,.chem-panel,.inspector{flex:1;min-height:0;overflow:auto;padding:0 12px 16px}.chem-search{display:flex;gap:8px;margin:8px 0 12px}.chem-search .search{flex:1;min-width:0}.chem-card{display:grid;grid-template-columns:96px 1fr;gap:12px;padding:10px;border:1px solid var(--line);border-radius:12px;background:#fff}.chem-structure-thumb{width:96px;height:96px;object-fit:contain;border-radius:8px;cursor:grab;background:linear-gradient(45deg,#f0e8ee 25%,transparent 25%) 0 0 / 12px 12px,linear-gradient(-45deg,#f0e8ee 25%,transparent 25%) 0 6px / 12px 12px,linear-gradient(45deg,transparent 75%,#f0e8ee 75%) 6px -6px / 12px 12px,linear-gradient(-45deg,transparent 75%,#f0e8ee 75%) -6px 0 / 12px 12px,#fff}.chem-structure-thumb:active{cursor:grabbing}.chem-drag-hint{font-size:11px!important;margin-top:2px!important}.chem-note{margin:0 0 10px;padding:8px 10px;border-radius:10px;background:color-mix(in srgb,var(--ocean) 8%,#fff);border:1px solid color-mix(in srgb,var(--ocean) 22%,var(--line));font-size:12px;line-height:1.4}.chem-card-meta{min-width:0}.chem-card-meta p{margin:4px 0;font-size:12px;line-height:1.35}.chem-iupac{color:var(--ink)}.chem-card-actions{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.chem-spectrum-pick{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);margin-bottom:8px}.chem-ext-links{display:flex;flex-wrap:wrap;gap:8px 12px;font-size:12px}.pdb-search{display:flex;gap:8px;margin:8px 0 12px}.pdb-search .search{flex:1;min-width:0}.pdb-search button{flex-shrink:0}.pdb-results{display:flex;flex-direction:column;gap:10px}.pdb-card{display:grid;grid-template-columns:88px 1fr;gap:10px;padding:8px;border:1px solid var(--line);border-radius:12px;background:#fff}.pdb-card img{width:88px;height:88px;object-fit:cover;border-radius:8px;background:#f3eef2}.pdb-card-meta{min-width:0}.pdb-card-meta p{margin:4px 0;font-size:12px;line-height:1.35}.pdb-card-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}.pdb-card-actions a,.pdb-card-actions button.ghost{font-size:12px}.pdb-viewer-backdrop{position:fixed;inset:0;z-index:50;background:#1404108c;display:flex;align-items:center;justify-content:center;padding:24px}.pdb-viewer{width:min(960px,100%);height:min(720px,90vh);background:#0f0a12;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;border:1px solid rgba(255,220,240,.2);box-shadow:0 20px 60px #00000073}.pdb-viewer-bar{display:flex;align-items:center;gap:12px;padding:10px 12px;background:#fffafcf5;color:var(--ink)}.pdb-viewer-bar strong{margin-right:auto}.pdb-viewer iframe{flex:1;width:100%;border:0;background:#111}.library-head{position:sticky;top:0;z-index:1;background:#fffafcf5;padding-bottom:8px}.stage{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.canvas-atmosphere{position:absolute;inset:0;overflow:hidden;background:linear-gradient(180deg,#243658,#6a7fa8 22%,#f08a55 48%,#ffc060 56%,#1b6ca8 62%,#0a3d66)}.canvas-atmosphere .ocean-sun.canvas-sun,.canvas-atmosphere .canvas-sun{top:42%;width:min(22vmin,160px);height:min(22vmin,160px)}.canvas-atmosphere .ocean-wave{opacity:.85}.canvas-atmosphere .ocean-ripple{border-color:#fff6}.workspace{position:relative;z-index:1;display:flex;flex-direction:column;min-height:0;flex:1;margin:18px 22px 20px;border-radius:20px;overflow:hidden;background:transparent;border:1px solid rgba(255,220,240,.22);box-shadow:var(--shadow)}.page-tabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:8px 10px;background:#fff8fce6;border-bottom:1px solid rgba(255,255,255,.25);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.page-tabs-spacer{flex:1;min-width:8px}.page-tabs .inline,.page-tabs .status-label{font-size:11px}.page-tabs button,.status-bar button{padding:5px 10px;border:1px solid var(--line);border-radius:999px;background:#fffc;color:var(--ink-soft)}.page-tabs button.active,.status-bar button.active,.chip.active{background:#1b6ca81f;border-color:#1b6ca859;color:var(--ocean-deep)}.canvas-column{display:flex;flex-direction:column;min-height:0;flex:1}.canvas-wrap{flex:1;min-height:0;background:transparent;overflow:hidden}.canvas-wrap.tool-text,.canvas-wrap.tool-line,.canvas-wrap.tool-arrow,.canvas-wrap.tool-rect,.canvas-wrap.tool-ellipse,.canvas-wrap.tool-connector{cursor:crosshair}.canvas-wrap.tool-hand,.canvas-wrap.panning{cursor:grab}.status-bar,.status{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:8px 12px;background:#fffafce6;border-top:1px solid rgba(255,255,255,.25);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);font-size:12px}.canvas-wrap .konvajs-content,.canvas-wrap canvas{background:transparent!important}.status-group{display:inline-flex;align-items:center;gap:8px}.status-label{color:var(--muted);font-weight:600}.status-meta{color:var(--muted)}.inspector{background:#fffafcf0;border-left:1px solid var(--line);z-index:2}.inspector h2,.library h2,.layers h2,.stats-panel h2{font-family:var(--font-display);font-size:14px;margin:10px 0 6px}.search,.inspector input,.inspector select,.inspector textarea,.modal select,.stats-panel select,.stats-panel input[type=number],.side input[type=search],.side input:not([type=checkbox]):not([type=range]),.side select{width:100%;margin-top:4px;padding:7px 8px;border:1px solid var(--line);border-radius:10px;background:#fff}.inspector label,.modal label,.stats-panel label{display:block;font-size:12px;margin-top:10px;color:var(--ink-soft)}.check{display:flex;gap:6px;align-items:center}.chips{display:flex;flex-wrap:nowrap;gap:4px;margin:8px 0;overflow-x:auto}.chip{flex:none;padding:4px 8px;border:1px solid var(--line);border-radius:999px;background:#fff;cursor:pointer}.icon-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:6px 2px 10px}.icon-card{position:relative;border:1px solid var(--line);border-radius:12px;padding:8px 6px 6px;text-align:center;background:linear-gradient(180deg,#fff,#fff5f9);cursor:grab;transform:scale(var(--dock-scale, 1));transform-origin:center bottom;transition:transform .18s cubic-bezier(.22,1.2,.36,1),box-shadow .25s ease,border-color .2s ease;will-change:transform}.icon-card:hover{border-color:color-mix(in srgb,var(--ocean) 40%,var(--line));box-shadow:0 12px 28px #0a3d6629}.icon-card img{width:64px;height:64px;object-fit:contain}.icon-card div{font-size:11px;line-height:1.25;max-height:2.5em;overflow:hidden}.star{position:absolute;top:4px;right:4px;border:0;background:transparent;color:#c9a4b4;cursor:pointer}.star.on{color:var(--sunrise)}.load-more{width:100%;margin:12px 0;border:1px solid var(--line);border-radius:10px;padding:8px;background:#fff;cursor:pointer}.error{color:var(--sunrise-deep);font-size:12px}.muted{color:var(--muted);font-size:13px}.tiny{font-size:11px;line-height:1.3}.layer-card{border:1px solid var(--line);border-radius:12px;margin-bottom:8px;padding:8px;background:#fff}.layer-card.active{border-color:#1b6ca873;box-shadow:0 0 0 2px #1b6ca81a}.row-between,.layer-actions{display:flex;justify-content:space-between;gap:4px;align-items:center}.layer-name,.node-row{border:0;background:transparent;text-align:left;width:100%;cursor:pointer}.node-row.selected{background:#2a8fc424;border-radius:6px}.layer-nodes{list-style:none;margin:4px 0 0;padding-left:8px}.stats-panel{padding-top:4px}.stats-panel h3{margin:14px 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--violet)}.stats-actions{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.stats-meta{font-size:12px;color:var(--muted);margin:8px 0}.stats-table{width:100%;border-collapse:collapse;font-size:12px}.stats-table th,.stats-table td{border-bottom:1px solid var(--line);padding:6px 4px;vertical-align:top;text-align:left}.stats-result{white-space:pre-wrap;background:#2a8fc41a;border-radius:10px;padding:8px;font-size:12px}.var-type-list,.desc-grid,.rel-list,.chart-grid{display:grid;gap:8px;margin:8px 0 12px}.var-type-card,.desc-card,.rel-card,.chart-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:8px}.var-type-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:4px}.type-pill{font-size:10px;text-transform:uppercase;letter-spacing:.03em;padding:2px 6px;border-radius:999px;background:#f3e8ff;color:#6b21a8}.type-continuous{background:#fce7f3;color:#9d174d}.type-categorical{background:#fae8ff;color:#86198f}.type-boolean{background:#ffe4e6;color:#9f1239}.type-string{background:#f3e8ff;color:#6b21a8}.type-datetime{background:#fdf2f8;color:#be185d}.type-unknown{background:#f3f4f6;color:#4b5563}.desc-stats{margin:6px 0 0;padding-left:16px;font-size:12px}.chart-card img{display:block;width:100%;height:auto;border-radius:8px;background:#fff}.chart-card figcaption{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-top:6px;font-size:11px;color:var(--muted)}.stats-panel .primary,.modal-actions .primary{background:linear-gradient(135deg,var(--sunrise),var(--ocean));color:#fff;border:0;border-radius:999px;padding:8px 14px;cursor:pointer}.stats-panel .primary:disabled,.modal-actions .primary:disabled{opacity:.65}.test-history{margin-top:8px}.tabs{display:none}.modal-backdrop{position:fixed;inset:0;background:#041e3280;display:flex;align-items:center;justify-content:center;z-index:5;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal{width:320px;background:var(--paper-solid);border-radius:16px;padding:16px;border:1px solid var(--line);box-shadow:var(--shadow)}.export-modal{width:380px}.export-modal h2{margin:0 0 4px;font-family:var(--font-display);font-size:18px}.export-meta{margin:8px 0 0;font-size:12px;color:var(--muted)}.export-error{margin:12px 0 0;padding:8px 10px;border-radius:10px;background:#fde8e8;color:#8a1f1f;font-size:13px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.shortcuts{margin-top:16px;font-size:12px;color:var(--muted)}.side-icon-search{padding:12px 12px 4px;border-bottom:1px solid var(--line);background:#fffafcfa}.side-search-label{display:block;font-family:var(--font-display);font-size:14px;font-weight:700;margin-bottom:6px;color:var(--ink)}.side-icon-search .search{width:100%}.selection-popover-anchor{position:absolute;left:50%;bottom:52px;transform:translate(-50%);z-index:6;pointer-events:none;width:min(920px,calc(100% - 24px))}.selection-popover{pointer-events:auto;display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 12px;padding:10px 14px;border-radius:14px;background:#fffafcf5;border:1px solid rgba(90,20,60,.18);box-shadow:0 12px 40px #28081c47;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.popover-title{font-family:var(--font-display);font-weight:700;font-size:13px;align-self:center;margin-right:4px;color:var(--ink)}.popover-field{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--muted);min-width:88px}.popover-field.compact{min-width:72px}.popover-field textarea{min-width:180px;resize:vertical;font:inherit;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:6px 8px;background:#fff}.popover-field input,.popover-field select{font:inherit;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:5px 8px;background:#fff;min-height:30px}.popover-field input[type=color]{padding:2px;width:44px;min-height:30px}.popover-chips{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.library-popup-backdrop{position:fixed;inset:0;z-index:40;background:#1c06166b;display:flex;align-items:stretch;justify-content:flex-start;padding:72px 0 24px 76px;animation:bubble-backdrop-in .32s ease-out}.library-popup-backdrop--right{justify-content:flex-end;padding:72px 20px 24px 76px}.library-popup-backdrop--pass{pointer-events:none;background:#1c06162e}.library-popup-backdrop--pass .library-popup{pointer-events:auto}.library-popup{width:min(420px,calc(100vw - 100px));max-height:calc(100vh - 100px);background:#fffafcfa;border:1px solid var(--line);border-radius:20px;box-shadow:0 18px 50px #14041047,0 0 0 1px #ffffff59 inset;overflow:hidden;display:flex;flex-direction:column;transform-origin:12px 48px;animation:bubble-panel-in .48s cubic-bezier(.34,1.45,.64,1)}.library-popup--right{transform-origin:calc(100% - 12px) 48px}.library-popup-body{flex:1;min-height:0;overflow:auto;padding:0 12px 16px}.library-popup-bar{display:flex;align-items:center;justify-content:space-between;gap:8px}.library-popup-bar h2{margin:0}.upload-panel .upload-drop{display:flex;flex-direction:column;align-items:stretch;gap:8px;margin:12px 0 4px;padding:16px;border:1px dashed color-mix(in srgb,var(--accent, #9b2d65) 45%,transparent);border-radius:12px;background:color-mix(in srgb,var(--accent, #9b2d65) 6%,transparent);text-align:center}.upload-panel .upload-btn{width:100%;justify-content:center}.upload-panel .icon-card img{object-fit:contain;background:#fff}.shapes-panel .shapes-group{margin:12px 0 4px}.shapes-panel .shapes-group-title{margin:0 0 8px;font-size:.78rem;font-weight:650;letter-spacing:.04em;text-transform:uppercase;color:color-mix(in srgb,var(--ink, #1c0616) 55%,transparent)}.shapes-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 2px 14px}.dock-magnify{isolation:isolate}.shape-tile{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 8px;border:1px solid var(--line, #e5d6de);border-radius:14px;background:#ffffffd9;cursor:pointer;color:inherit;font:inherit;transform:scale(var(--dock-scale, 1));transform-origin:center bottom;transition:transform .18s cubic-bezier(.22,1.2,.36,1),box-shadow .28s ease,border-color .2s ease,background .2s ease;will-change:transform}.shape-tile:hover{border-color:color-mix(in srgb,var(--ocean) 45%,transparent);box-shadow:0 14px 30px #0a3d662e}.shape-tile.active{border-color:var(--ocean);background:color-mix(in srgb,var(--ocean) 10%,white);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ocean) 35%,transparent),0 10px 22px #1b6ca829;animation:tile-select-pop .4s cubic-bezier(.34,1.56,.64,1)}.shape-tile-glyph{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:color-mix(in srgb,var(--ocean) 8%,#f7faf9);font-size:1.35rem;line-height:1;transition:transform .35s cubic-bezier(.34,1.56,.64,1),background .2s ease}.shape-tile:hover .shape-tile-glyph,.shape-tile.active .shape-tile-glyph{transform:scale(1.08)}.shape-tile-label{font-size:.78rem;text-align:center;line-height:1.2}@keyframes bubble-backdrop-in{0%{opacity:0}to{opacity:1}}@keyframes bubble-panel-in{0%{opacity:0;transform:scale(.72) translateY(18px);filter:blur(2px)}55%{opacity:1;filter:blur(0)}78%{transform:scale(1.04) translateY(-2px)}to{opacity:1;transform:scale(1) translateY(0);filter:blur(0)}}@keyframes rail-bubble-pop{0%{transform:scale(.86)}60%{transform:scale(1.16)}to{transform:scale(1.08)}}@keyframes tile-select-pop{0%{transform:scale(calc(var(--dock-scale, 1) * .92))}55%{transform:scale(calc(var(--dock-scale, 1) * 1.08))}to{transform:scale(var(--dock-scale, 1))}}@media(prefers-reduced-motion:reduce){.library-popup-backdrop,.library-popup,.rail-btn.active .rail-glyph,.shape-tile.active,.pomodoro-toggle.on{animation:none!important}.rail-btn,.rail-glyph,.shape-tile,.icon-card,.shape-tile-glyph{transition:none!important}.shape-tile,.icon-card{transform:none!important}}a.mode-chip{text-decoration:none;color:inherit}.auth-shell,.projects-shell{position:relative;z-index:1;min-height:100vh;background:transparent;display:flex;flex-direction:column}.auth-shell{align-items:center;justify-content:center;padding:24px;gap:28px}.auth-slogan{margin:0;width:min(640px,100%);min-height:2.6em;text-align:center;font-family:var(--font-display);font-size:clamp(1rem,2.4vw,1.35rem);font-weight:500;letter-spacing:.04em;line-height:1.45;color:#fff;text-shadow:0 2px 14px rgba(4,30,50,.45);transition:color .8s ease,text-shadow .8s ease}html[data-tod=day] .auth-slogan{color:#0a2438;text-shadow:0 1px 0 rgba(255,248,240,.55),0 2px 12px rgba(255,200,120,.35)}.auth-slogan-text{white-space:pre-wrap}.auth-slogan-caret{display:inline-block;width:.55ch;height:1.05em;margin-left:2px;vertical-align:-.12em;background:#fff;box-shadow:0 0 8px #ffffff8c;animation:auth-caret-blink .9s steps(1) infinite;transition:background .8s ease}html[data-tod=day] .auth-slogan-caret{background:#0a2438;box-shadow:none}@keyframes auth-caret-blink{0%,45%{opacity:1}50%,to{opacity:0}}.auth-card{width:min(440px,100%);background:#fff8f024;border:1px solid rgba(255,255,255,.35);border-radius:18px;padding:28px 24px;box-shadow:0 20px 50px #0418282e;backdrop-filter:blur(10px) saturate(1.1);-webkit-backdrop-filter:blur(10px) saturate(1.1);color:#fff8f0;text-align:center;text-shadow:0 1px 10px rgba(4,30,50,.35);transition:color .8s ease,background .8s ease,border-color .8s ease,text-shadow .8s ease}html[data-tod=day] .auth-card{background:#fffcf88c;border-color:#0a28462e;color:#0a2438;text-shadow:none;box-shadow:0 16px 40px #1432502e}.auth-brand{display:flex;justify-content:center;margin-bottom:16px}.auth-brand .brand-mark{height:120px}.auth-card .brand-name{background:linear-gradient(120deg,#fff8f0,#ffd27a);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 2px 8px rgba(4,30,50,.35))}html[data-tod=day] .auth-card .brand-name{background:linear-gradient(120deg,#0a3d66,#c45a1a);-webkit-background-clip:text;background-clip:text;filter:none}.auth-card h1{margin:0 0 8px;font-family:var(--font-display);letter-spacing:.12em;text-transform:none;font-size:1.65rem;color:#fff8f0;transition:color .8s ease}html[data-tod=day] .auth-card h1{color:#0a2438}.auth-card .muted,.auth-card .guest-note{color:#fff8f0e0;transition:color .8s ease}html[data-tod=day] .auth-card .muted,html[data-tod=day] .auth-card .guest-note{color:#0a2438c7}.auth-card .error{color:#ffe0c8;text-shadow:0 1px 6px rgba(120,30,10,.55)}html[data-tod=day] .auth-card .error{color:#a83212;text-shadow:none}.auth-actions{display:flex;flex-direction:column;gap:10px;margin-top:18px}.auth-btn{display:block;text-align:center;text-decoration:none;border-radius:10px;padding:12px 14px;border:1px solid rgba(255,255,255,.4);background:#ffffff2e;color:#fff8f0;font-weight:600;letter-spacing:.06em;cursor:pointer;text-shadow:0 1px 6px rgba(4,30,50,.4);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .8s ease,border-color .8s ease,color .8s ease,text-shadow .8s ease}.auth-btn:hover{background:#ffffff47;border-color:#ffffff8c}html[data-tod=day] .auth-btn{color:#0a2438;text-shadow:none;border-color:#0a284638;background:#ffffffb8}html[data-tod=day] .auth-btn:hover{background:#ffffffeb;border-color:#0a284659}.auth-btn.guest{background:#e8f6ff38;border-color:#b4dcff80}.auth-btn.google{background:#f4faff33;border-color:#b4d2f080}.auth-btn.orcid{background:#dcfaf038;border-color:#8cd2b480}.auth-btn.dev{background:#ffe6be38;border-color:#ffb4508c}html[data-tod=day] .auth-btn.guest{background:#dcf0ffd9}html[data-tod=day] .auth-btn.google{background:#ebf5ffe6}html[data-tod=day] .auth-btn.orcid{background:#dcf8ece6}html[data-tod=day] .auth-btn.dev{background:#ffecd2eb}.guest-note{margin-top:14px;font-size:12px}.auth-btn.disabled,.auth-btn[aria-disabled=true]{opacity:.45;pointer-events:none}.projects-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 22px;background:#fff8fceb;border-bottom:1px solid rgba(255,255,255,.25)}.projects-user{display:flex;align-items:center;gap:10px}.projects-main{width:min(880px,100%);margin:0 auto;padding:28px 20px 48px}.projects-hero h1{margin:0 0 6px;font-family:var(--font-display);letter-spacing:.14em;text-transform:uppercase;color:#fff8f0;text-shadow:0 2px 16px rgba(10,40,70,.35);transition:color .8s ease,text-shadow .8s ease}.projects-hero .muted{color:#fff8f0e0;text-shadow:0 1px 10px rgba(10,40,70,.3);transition:color .8s ease,text-shadow .8s ease}html[data-tod=day] .projects-hero h1{color:#0a2438;text-shadow:0 1px 0 rgba(255,248,240,.5)}html[data-tod=day] .projects-hero .muted{color:#0a2438c7;text-shadow:none}.projects-toolbar,.projects-create{display:flex;gap:8px;margin:16px 0}.projects-toolbar .search,.projects-create input{flex:1;min-width:0;border-radius:10px;border:1px solid var(--line);padding:10px 12px;background:#fffafcf5}.project-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.project-row{display:flex;gap:10px;align-items:center;background:#fffafcf5;border:1px solid var(--line);border-radius:12px;padding:10px 12px}.project-open{flex:1;min-width:0;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:2px}.project-row-actions{display:flex;gap:6px}.project-row-actions .danger{color:var(--sunrise-deep)}@media(max-width:1100px){.app-body{grid-template-columns:64px minmax(200px,34vw) minmax(0,1fr);grid-template-rows:minmax(0,1fr) minmax(140px,24vh)}.tool-rail{grid-row:1 / span 2}.side{grid-column:2;grid-row:1 / span 2}.stage{grid-column:3;grid-row:1}.inspector{grid-column:3;grid-row:2;border-left:0;border-top:1px solid var(--line)}.topbar{grid-template-columns:1fr;justify-items:stretch}.title-input{text-align:left}}
