*{box-sizing:border-box}
:root{
  --bg:#f8fafc;--card:#ffffff;--surface:#f1f5f9;--text:#0f172a;--body:#334155;--muted:#64748b;--accent:#0284c7;--accent-dark:#0369a1;--border:#dbe4ee;--shadow:0 6px 18px rgba(15,23,42,.08);--soft-shadow:0 4px 14px rgba(15,23,42,.055);--danger:#e11d48;--canvas-bg:#ffffff;--canvas-grid:#d6dde8;--canvas-axis:#94a3b8;--canvas-text:#334155;--tooltip-bg:rgba(255,255,255,.96);--control-bg:#f8fafc;--control-bg2:#ffffff;--header:#2c3e50;
}
:root[data-theme="dark"]{
  --bg:#0b0f16;--card:#121821;--surface:#0f1520;--text:#e7edf4;--body:#cbd5e1;--muted:#94a3b8;--accent:#38bdf8;--accent-dark:#7dd3fc;--border:#243244;--shadow:0 10px 28px rgba(0,0,0,.34);--soft-shadow:0 4px 14px rgba(0,0,0,.2);--danger:#fb7185;--canvas-bg:#0c1016;--canvas-grid:#243040;--canvas-axis:#334155;--canvas-text:#9aa4af;--tooltip-bg:rgba(15,19,25,.94);--control-bg:#0f1520;--control-bg2:#111827;
}
html,body{background:var(--bg);color:var(--body);font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;scroll-behavior:smooth}
body{min-height:100vh;display:flex;flex-direction:column}
a{color:inherit}
main{width:100%;max-width:1180px;margin:0 auto;padding:2rem 1.25rem 3rem;flex:1}
.breadcrumb{max-width:1180px;margin:0 auto 1rem;color:var(--muted);font-size:.9rem;font-weight:650}
.breadcrumb a{color:var(--accent);text-decoration:none}.breadcrumb a:hover{text-decoration:underline}
#page-top{max-width:1180px;margin:0 auto 1.35rem;padding:34px 32px 30px;border-radius:12px;color:#fff;background:var(--header);box-shadow:0 6px 18px rgba(0,0,0,.12);border:1px solid rgba(255,255,255,.12)}
#page-top h1{margin:0 0 10px;line-height:1.06;font-weight:800;font-size:clamp(2rem,4vw,3.1rem);color:#fff}
.hero-subtitle{max-width:780px;margin:0;color:rgba(255,255,255,.88);line-height:1.58;font-size:1rem}
.tool-shell,.card{border:1px solid var(--border);background:var(--card);border-radius:14px;box-shadow:var(--soft-shadow)}
.eyebrow{margin:0 0 .45rem;color:var(--accent-dark);text-transform:uppercase;letter-spacing:.13em;font-size:.72rem;font-weight:850}
.tool-shell{position:relative;display:grid;gap:1rem;padding:1rem;margin:1rem 0 0}
.tool-heading{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.35rem .25rem 1rem}
.tool-heading h2{margin:0;color:var(--text);font-size:1.45rem}
.status{color:var(--muted);font-size:.86rem;min-width:96px;text-align:right}
.run-status{margin:.35rem 0 0;text-align:left;min-width:0}
.progress-wrap{position:relative;height:10px;margin:.48rem 0 .12rem;border-radius:999px;overflow:hidden;border:1px solid color-mix(in srgb,var(--accent) 22%,var(--border));background:linear-gradient(180deg,color-mix(in srgb,var(--surface) 84%,var(--accent) 16%),var(--control-bg));box-shadow:inset 0 1px 3px rgba(15,23,42,.14),0 8px 18px color-mix(in srgb,var(--accent) 12%,transparent)}
.progress-wrap[hidden]{display:none}
.progress-fill{position:absolute;inset:0 auto 0 0;width:0%;min-width:7%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),#22c55e,#06b6d4,var(--accent));background-size:240% 100%;box-shadow:0 0 16px color-mix(in srgb,var(--accent) 45%,transparent);animation:progressFlow 1.2s linear infinite;transition:width .24s ease}
.progress-fill::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);transform:translateX(-100%);animation:progressSheen 1.55s ease-in-out infinite}
@keyframes progressFlow{to{background-position:240% 0}}
@keyframes progressSheen{to{transform:translateX(100%)}}
.kinematics-grid{order:2;margin:0}
.kinematics-inner-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.kinematic-panel{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:.9rem}
.kinematic-panel>.row:first-child{margin-top:0}
.run-control-panel{margin-top:1rem;padding:.85rem 1rem;border:1px solid var(--border);border-radius:12px;background:linear-gradient(180deg,var(--surface),var(--card))}
.run-control-panel .row.buttons{margin:0;align-items:center}
.simulation-grid{display:contents}
.controls{order:1}
.viz{order:3}
.controls,.viz{height:100%}
.card{padding:1rem}
.plots{order:4;margin-top:0}
.fourier-coefficients{order:5;margin-top:0}
.distributions{order:6;margin-top:0}
.card h3{margin:0 0 .8rem;color:var(--text);font-size:1rem}
.row{display:flex;gap:.75rem;align-items:center;margin:.72rem 0}
.row label{min-width:126px;color:var(--muted);font-weight:650;font-size:.9rem}
.row.two{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;align-items:end}
.row.two>div{display:flex;flex-direction:column;gap:.35rem}
.row.two label{min-width:0}
.row.three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.65rem;align-items:end}
.row.three>div{display:flex;flex-direction:column;gap:.35rem}
.row.three label{min-width:0;font-size:.82rem}
.row.vertical{align-items:stretch;flex-direction:column;gap:.35rem}
.row.vertical label{min-width:0}
.kinematic-fields{margin:.6rem 0 .15rem}
.compact-two{align-items:center}
.hint{color:var(--muted);font-size:.82rem;margin:.1rem 0}
.advanced{margin-top:.7rem;padding:.8rem;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.advanced summary{cursor:pointer;color:var(--text);font-weight:800;user-select:none}
.buttons{gap:.6rem}
select,input[type=number]{width:100%;padding:.68rem .75rem;border-radius:10px;border:1px solid var(--border);background:var(--control-bg);color:var(--text);outline:none}
select:focus,input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
button{padding:.7rem .9rem;border-radius:10px;border:1px solid var(--border);background:var(--accent);color:#fff;cursor:pointer;font-weight:800}
button:hover{filter:brightness(.98)}button:disabled{opacity:.48;cursor:not-allowed}button.secondary{background:var(--control-bg2);color:var(--text)}
.play-pause-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-width:112px}
.play-pause-icon{display:inline-grid;place-items:center;width:1.18rem;height:1.18rem;border-radius:999px;background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent)}
.play-pause-icon svg{display:block;width:.74rem;height:.74rem;fill:currentColor}
canvas{display:block;width:100%;height:auto;background:var(--canvas-bg);border:1px solid var(--border);border-radius:12px}
.viz{min-height:0}
.kinematics-card canvas{margin-top:.35rem}
.section-title-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem}
.section-title-row h3{margin:0}
.section-title-main{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;min-width:0}
.collapsible-title-row{min-height:2.25rem}
.collapse-btn{display:inline-flex;align-items:center;justify-content:center;gap:.38rem;min-width:104px;padding:.48rem .68rem;border-radius:999px;color:var(--muted);font-size:.78rem;line-height:1}
.collapse-btn:hover{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}
.collapse-icon{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s ease}
.collapse-btn[aria-expanded="false"] .collapse-icon{transform:rotate(180deg)}
.collapsible-content[hidden]{display:none}
.collapsible-card.is-collapsed .collapsible-title-row{margin-bottom:0}
.frame-controls-row{display:flex;align-items:center;justify-content:flex-start;margin:-.1rem 0 .75rem}
.section-title-actions{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;flex-wrap:wrap}
.animation-panel{margin:0 0 .9rem;padding:0}
.animation-main-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem}
.playback-controls{display:flex;flex-direction:column;align-items:flex-start;gap:.48rem}
.auto-repeat-checkbox{display:inline-flex;align-items:center;gap:.45rem;color:var(--muted);font-size:.82rem;font-weight:650;cursor:pointer;user-select:none}
.auto-repeat-checkbox input{width:1rem;height:1rem;margin:0;accent-color:var(--accent)}
.auto-repeat-checkbox:has(input:disabled){opacity:.5;cursor:not-allowed}
.frame-control-group{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.7rem;padding-top:.1rem}
.frame-control-group>label{color:var(--muted);font-weight:650;font-size:.9rem}
.flowfield-options{display:grid;grid-template-columns:1fr 1fr;gap:.75rem 1.2rem;margin-top:.85rem;padding-top:.25rem}
.flowfield-options .row{margin:.35rem 0}
.slider-row label,.vortex-row label{min-width:90px}.action-row{max-width:440px}
.frame-slider-wrap{display:flex;align-items:center;gap:.55rem;width:100%}
.frame-inline-controls{display:inline-flex;align-items:center;gap:.35rem;white-space:nowrap}
.frame-counter{min-width:58px;text-align:right;color:var(--muted);font-size:.86rem;font-variant-numeric:tabular-nums}
.frame-mini-controls{display:inline-flex;align-items:center;gap:.35rem;color:var(--muted)}
.frame-mini-label{min-width:58px;text-align:center;color:var(--muted);font-size:.82rem;font-variant-numeric:tabular-nums}
.frame-step-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;min-width:2rem;height:2rem;padding:0;border-radius:999px;font-size:.9rem;line-height:1}
.frame-step-btn:disabled{opacity:.34}
.circulation-scale-row{align-items:center}
.circulation-scale-control{display:grid;grid-template-columns:minmax(120px,1fr) 58px;gap:.6rem;align-items:center;width:min(340px,100%)}
.circulation-scale-control output{color:var(--muted);font-size:.84rem;font-variant-numeric:tabular-nums;text-align:right}
.seg{display:flex;gap:.4rem;flex-wrap:wrap}
.segbtn{padding:.55rem .75rem;border-radius:999px;border:1px solid var(--border);background:var(--control-bg2);color:var(--muted);font-size:.8rem;opacity:.72;transition:color .18s ease,border-color .18s ease,background .18s ease,opacity .18s ease}
.segbtn.active{border-color:var(--accent);color:var(--accent)}
.segbtn.active{opacity:1;background:var(--control-bg2)}
.segbtn:not(.active):hover{opacity:.92;color:var(--body)}
.distribution-frame{min-width:74px}
input[type=range]{width:100%;accent-color:var(--accent)}
.plotgrid{display:grid;grid-template-columns:1fr 1fr;gap:.9rem}
.fourier-pair-row{max-width:360px;margin:0 0 .8rem}
.distribution-wide{grid-column:1/-1}
.tooltip{position:fixed;z-index:999;pointer-events:none;background:var(--tooltip-bg);border:1px solid var(--border);border-radius:12px;padding:.55rem .7rem;color:var(--text);font-size:.82rem;box-shadow:var(--shadow);max-width:320px;backdrop-filter:blur(6px)}
.tooltip .muted{color:var(--muted)}
@media(max-width:1040px){.kinematics-inner-grid,.simulation-grid{grid-template-columns:1fr}}
@media(max-width:640px){main{padding:1.4rem 1rem 2.4rem}#page-top{padding:28px 22px;border-radius:10px}.tool-shell,.card{border-radius:12px}.tool-heading,.section-title-row{align-items:flex-start;flex-direction:column}.collapsible-title-row{align-items:center;flex-direction:row;width:100%}.section-title-main{gap:.45rem}.collapse-btn{min-width:96px}.frame-controls-row{justify-content:flex-start}.section-title-actions{justify-content:flex-start}.row:not(.two):not(.three){align-items:stretch;flex-direction:column}.row label{min-width:0}.row.two,.row.three,.animation-main-row,.flowfield-options{grid-template-columns:1fr}.frame-control-group{grid-template-columns:1fr}.buttons button,.action-row button{width:100%}.plotgrid{grid-template-columns:1fr}.distribution-wide{grid-column:auto}.status{text-align:left}}
