/* APOΞTIC Math Lab — page-specific layout and graph UI */
:root{--void:var(--apo-void);--panel:#090c0c;--panel2:#0d1111;--line:#263030;--line2:#53605f;--ash:var(--apo-ash);--white:#fff;--teal:var(--apo-signal);--flux:var(--apo-flux)}
*{box-sizing:border-box}html,body{height:100%;margin:0;background:#030505;color:var(--ash);font-family:Consolas,"Courier New",monospace;overflow:hidden}
button,input,textarea{font:inherit}.app{height:100vh;display:grid;grid-template-columns:minmax(0,1fr) 360px;grid-template-rows:44px minmax(0,1fr) 205px;gap:7px;padding:7px}
header{grid-column:1/3;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:0 8px}
.brand{color:var(--flux);letter-spacing:4px;font-size:17px}.brand span{color:var(--ash);letter-spacing:3px}.hud{font-size:11px;color:var(--teal);white-space:nowrap}
.panel{background:linear-gradient(180deg,#070a0a,#050707);border:1px solid #164744;box-shadow:0 0 18px #001d1b33}
.graph{grid-column:1;grid-row:2;position:relative;min-width:0;min-height:0;overflow:hidden}
canvas{display:block;width:100%;height:100%;cursor:crosshair}.legend{position:absolute;left:18px;bottom:14px;display:flex;gap:24px;font-size:11px;color:#dfe6e5;pointer-events:none}
.sw{display:inline-block;width:30px;height:2px;background:var(--flux);vertical-align:middle;margin-right:7px}.dash{background:repeating-linear-gradient(90deg,#fff 0 6px,transparent 6px 12px)}.box{width:15px;height:15px;border:1px solid var(--teal);background:var(--apo-signal)22}
.side{grid-column:2;grid-row:2/4;overflow:auto;padding:11px}.section{padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--line)}
h3{margin:0 0 9px;color:var(--flux);font-size:11px;font-weight:400;letter-spacing:2px}.param{display:grid;grid-template-columns:18px 55px 1fr 34px;gap:7px;align-items:center;margin:7px 0}.num{background:#101515;border:1px solid var(--line2);color:#fff;padding:5px;width:55px}.param input[type=range]{width:100%;accent-color:var(--flux)}
button{background:#0c1111;border:1px solid #667372;color:#d6dedd;padding:7px 10px;cursor:pointer;transition:.12s}button:hover,button.on{border-color:var(--flux);color:var(--flux);box-shadow:inset 0 0 12px var(--apo-flux)11}.play{padding:5px 8px;color:var(--flux)}
.live{display:grid;grid-template-columns:1fr 1fr;gap:6px}.live button{font-size:10px;padding:7px 5px}.probe{font-size:10px;line-height:1.55;margin-top:8px;color:var(--ash)}
.eq{display:grid;grid-template-columns:10px 1fr 24px;gap:8px;align-items:center;border:1px solid var(--line);padding:7px;margin:5px 0;background:#080b0b;cursor:pointer;font-size:11px}.eq.sel{border-color:var(--teal);box-shadow:inset 3px 0 var(--teal);color:#fff}.dot{width:8px;height:8px;border-radius:50%;background:var(--teal)}.x{border:0;padding:0;background:transparent}.sideactions{display:grid;grid-template-columns:1fr 1fr 1fr;gap:5px;margin-top:8px}.sideactions button{font-size:9px;padding:6px 3px}
.bottom{grid-column:1;grid-row:3;padding:11px 13px;display:grid;grid-template-columns:minmax(320px,.95fr) minmax(520px,1.4fr);gap:18px;overflow:auto}.editor textarea{width:100%;height:84px;resize:none;background:#0d1212;border:1px solid #6f7b7a;color:#fff;padding:10px 12px;line-height:1.5;outline:none}.editor textarea:focus{border-color:var(--flux);box-shadow:0 0 0 1px var(--apo-flux)22}.actions{display:flex;gap:7px;margin-top:7px}.primary{background:var(--flux);color:#03100f;border-color:var(--flux)}
.quick{display:grid;grid-template-columns:repeat(auto-fit,minmax(82px,1fr));gap:6px}.quick button{font-size:10px;padding:7px 5px;white-space:nowrap}.hint{font-size:9px;color:#6f7b7a;margin-top:5px}
@media(max-width:1050px){.app{grid-template-columns:minmax(0,1fr) 300px}.bottom{grid-template-columns:1fr}.quick{grid-template-columns:repeat(auto-fit,minmax(72px,1fr))}}
@media(max-height:700px){.app{grid-template-rows:40px minmax(0,1fr) 175px}.bottom{padding:7px 10px}.editor textarea{height:60px}.quick button{padding:5px}.section{padding-bottom:8px;margin-bottom:8px}}

.shareactions{margin-top:6px}
#shareStatus{min-height:15px}
body.presentation .side,body.presentation .bottom{display:none}
body.presentation .app{grid-template-columns:1fr;grid-template-rows:44px minmax(0,1fr);padding:7px}
body.presentation header{grid-column:1}
body.presentation .graph{grid-column:1;grid-row:2}
body.presentation .hud{padding-right:100px}
.present-exit{display:none;position:fixed;right:16px;top:12px;z-index:20;background:#081010;border:1px solid var(--apo-signal);color:var(--apo-flux);padding:7px 11px;font:10px Consolas;cursor:pointer}
body.presentation .present-exit{display:block}

/* ==========================================================
   MOBILE COMPOSITION
   Graph first. Controls become a vertical touch workspace.
   ========================================================== */
@media (max-width: 760px){
  html,body{height:auto;min-height:100%;overflow:auto}
  body{overflow-x:hidden}
  .app{
    width:100%;height:auto;min-height:100dvh;
    display:flex;flex-direction:column;
    padding:5px;gap:5px;overflow:visible
  }
  header{
    position:relative;order:0;width:100%;height:42px;min-height:42px;
    display:flex;align-items:center;overflow:hidden;padding:0 9px
  }
  header .logo{font-size:12px;letter-spacing:2px;white-space:nowrap}
  header .logo span{display:none}
  header .logo::after{content:" // MATH";color:var(--apo-ash)}
  .hud{
    margin-left:auto;max-width:58%;overflow:hidden;text-overflow:ellipsis;
    white-space:nowrap;font-size:8px;text-align:right
  }

  .graph{
    order:1;position:relative;width:100%;height:52dvh;min-height:330px;
    grid-column:auto;grid-row:auto
  }
  #cv{touch-action:none}

  .bottom{
    order:2;position:relative;width:100%;height:auto;min-height:0;
    grid-column:auto;grid-row:auto;overflow:visible;
    display:block;padding:8px
  }
  .bottom .editor{width:100%;min-width:0}
  #expr{height:96px;min-height:96px;font-size:14px;line-height:1.45;padding:9px}
  .bottom .quick{width:100%;margin-top:8px}
  .quickgrid{grid-template-columns:repeat(4,minmax(0,1fr))!important}
  .quickgrid button{min-width:0;padding:8px 3px;font-size:9px}

  .side{
    order:3;position:relative;width:100%;height:auto;max-height:none;
    grid-column:auto;grid-row:auto;overflow:visible;border-left:1px solid var(--apo-line)
  }
  .side>div,.side>.section{padding:10px}
  .param{grid-template-columns:22px 58px minmax(80px,1fr) 24px;gap:7px}
  .param input[type=range]{min-width:0}
  .live{grid-template-columns:repeat(2,minmax(0,1fr))}
  .live button{min-height:38px}
  .sideactions,.apo-actions{grid-template-columns:repeat(3,minmax(0,1fr))}
  .sideactions button,.apo-actions button{min-height:38px}
  #workspaceList{min-height:40px}
  #workspaceName{min-height:40px;font-size:14px}
  .probe,.apo-probe{font-size:10px;line-height:1.55}
  h3{font-size:10px;margin-bottom:9px}

  /* Presentation becomes a clean phone graph. */
  body.presentation{overflow:hidden}
  body.presentation .app{height:100dvh;min-height:100dvh;padding:0}
  body.presentation header{height:38px;min-height:38px;border-left:0;border-right:0}
  body.presentation .graph{height:calc(100dvh - 38px);min-height:0;border:0}
  body.presentation .side,body.presentation .bottom{display:none}
  .present-exit{right:8px;top:48px;padding:8px 10px}
}

@media (max-width: 430px){
  .graph{height:48dvh;min-height:300px}
  .quickgrid{grid-template-columns:repeat(3,minmax(0,1fr))!important}
  .hud{max-width:52%}
  .param{grid-template-columns:20px 54px minmax(70px,1fr) 22px}
}

@media (max-width: 350px){
  .quickgrid{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .hud{display:none}
}
