html,body{height:100%;margin:0;font-family:Inter,ui-sans-serif,system-ui,Segoe UI,Roboto,"Helvetica Neue",Arial;} body{background:var(--bg);color:var(--text);display:flex;justify-content:center;padding:20px 12px;box-sizing:border-box} .app{width:100%;max-width:1200px;display:grid;grid-template-columns:360px 1fr;gap:18px;align-items:start}
header{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px;border-radius:12px;background:var(--panel);border:1px solid var(--border)}
.logo-area{display:flex;align-items:center;gap:12px} .logo-holder{ padding:6px; border-radius:14px; background:var(--panel); border:1px solid var(--border); } .app-logo{ width:56px; height:56px; border-radius:10px; object-fit:contain; background:transparent; transition:opacity 0.2s ease; } .title{font-weight:700;font-size:1.05rem} .subtitle{font-size:0.85rem;color:var(--muted);margin-top:2px}
.right-controls{display:flex;align-items:center;gap:10px} .theme-toggle{ padding:8px 10px; border-radius:999px; border:1px solid var(--border); cursor:pointer; background:transparent; color:var(--muted); font-weight:600; }
.panel{background:var(--panel);border:1px solid var(--border);padding:12px;border-radius:12px} .controls{display:flex;flex-direction:column;gap:10px} label{font-size:0.85rem;color:var(--muted);margin-bottom:6px;display:block} input[type=number], select, input[type=range]{ width:100%;padding:8px;border-radius:8px; border:1px solid var(--border);background:transparent;color:var(--text); box-sizing:border-box; } .row{display:flex;gap:8px} .row .field{flex:1;display:flex;flex-direction:column} .btn-row{display:flex;gap:8px;margin-top:6px;flex-wrap:wrap} button{ padding:8px 12px;border-radius:8px;border:none; background:var(--accent);color:white;cursor:pointer;font-weight:600 } button.secondary{background:transparent;border:1px solid var(--border);color:var(--text)} button:disabled{opacity:0.45;cursor:not-allowed} .small{font-size:0.85rem;color:var(--muted)}
#canvas-wrap{position:relative} canvas{ width:100%;height:360px;border-radius:10px;display:block; background:linear-gradient(180deg,#071224,#02101a); border:1px solid rgba(0,0,0,0.1) } .math{ font-family:ui-monospace,SFMono-Regular,monospace; background:linear-gradient(180deg,rgba(0,0,0,0.02),transparent); padding:10px;border-radius:8px;border:1px solid var(--border); font-size:0.9rem;color:var(--muted) } .metrics{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px} .chip{ background:transparent;border:1px solid var(--border); padding:6px 8px;border-radius:999px; font-weight:700;color:var(--text);font-size:0.9rem } .graph{height:160px;border-radius:8px;border:1px solid var(--border);background:linear-gradient(180deg,#fff,transparent);overflow:hidden} .note{font-size:0.82rem;color:var(--muted)}
.cat-menu{display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap} .cat-btn{ padding:6px 10px;border-radius:999px; border:1px solid var(--border); background:transparent; color:var(--muted); font-size:0.8rem; cursor:pointer } .cat-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}
@media (max-width:920px){.app{grid-template-columns:1fr;}} </style>
<div class="right-controls">
<button class="theme-toggle" id="themeBtn">Dark</button>
</div>
<!-- physics category menu -->
<div>
<label>Physics branch</label>
<div class="cat-menu">
<button class="cat-btn active" data-cat="mechanics">Mechanics</button>
<button class="cat-btn" data-cat="em">Electromagnetism</button>
<button class="cat-btn" data-cat="modern">Modern Physics</button>
</div>
<div class="note">
Mechanics has the projectile simulation. Other branches are placeholders where you can plug more tools later.
</div>
</div>
<div id="controls-main" style="margin-top:10px">
<div>
<label>Simulation</label>
<select id="preset-select">
<option value="custom">Custom (blank)</option>
<option value="human-throw">Human Throw (preset)</option>
<option value="long-shot">Long shot (preset)</option>
</select>
<div class="note" style="margin-top:6px">Pick a preset to load realistic values, or set your own.</div>
</div>
<div class="row" style="margin-top:6px">
<div class="field">
<label>Initial speed u (m/s)</label>
<input id="u" type="number" value="15" step="0.1" min="0.1">
</div>
<div class="field">
<label>Angle θ (deg)</label>
<input id="theta" type="number" value="40" step="0.1" min="0" max="89.9">
</div>
</div>
<div class="row">
<div class="field">
<label>Initial height h (m)</label>
<input id="h" type="number" value="1.6" step="0.01" min="0">
</div>
<div class="field">
<label>Gravity g (m/s²)</label>
<input id="g" type="number" value="9.8" step="0.01" min="0.1">
</div>
</div>
<div>
<label>Angle slider</label>
<input id="angle-range" type="range" min="0" max="89.9" step="0.1" value="40">
<div class="row" style="margin-top:6px">
<div class="small">Time scale</div>
<input id="time-scale" type="range" min="0.2" max="3" step="0.1" value="1">
</div>
</div>
<div class="btn-row">
<button id="startBtn">▶ Start</button>
<button id="pauseBtn" class="secondary">⏸ Pause</button>
<button id="resetBtn" class="secondary">⟲ Reset</button>
<button id="preset-human" class="secondary">Human Throw</button>
</div>
<div style="margin-top:10px">
<label>Display</label>
<div style="display:flex;gap:8px;margin-top:6px;flex-wrap:wrap">
<label class="small"><input id="show-trace" type="checkbox" checked> Trace</label>
<label class="small"><input id="show-vel" type="checkbox" checked> Velocity vector</label>
<label class="small"><input id="show-acc" type="checkbox" checked> Acceleration (g)</label>
<label class="small"><input id="show-analytic" type="checkbox"> Analytic curve</label>
</div>
</div>
<div style="margin-top:12px">
<div class="math" id="math-box"></div>
<div class="metrics" id="metrics"></div>
</div>
</div>
<div id="no-sim-message" class="note" style="display:none;margin-top:12px">
No simulations added for this branch yet. Later you can add electromagnetism or modern physics simulations here.
</div>
<div id="canvas-wrap">
<canvas id="sim-canvas" width="900" height="360"></canvas>
</div>
<div style="display:flex;gap:12px;margin-top:10px">
<div style="flex:1">
<div style="font-weight:700;margin-bottom:6px">Equations & derivation</div>
<div class="math" id="equations" style="max-height:200px;overflow:auto"></div>
</div>
<div style="width:320px">
<div style="font-weight:700;margin-bottom:6px">Angle vs Range</div>
<canvas id="angle-graph" width="320" height="160" class="graph"></canvas>
</div>
</div>
u = ${u} m/s, θ = ${theta}°, h = ${h} m, g = ${g} m/s²
u sinθ = ${fmt(uy)} , u cosθ = ${fmt(ux)} , t_f = ${fmt(T)} s
