*{box-sizing:border-box}body{margin:0;background:#e9e7dc;color:#182923;font-family:system-ui,sans-serif}button,input{font:inherit}button{cursor:pointer;background:#263b33;color:#edffdb;border:1px solid #65816b;border-radius:8px;padding:9px 12px;font-weight:700}button:disabled{opacity:.4;cursor:default}button.active{background:#ffc271;color:#182923}button:focus-visible,a:focus-visible{outline:3px solid #ec933a}header{height:62px;padding:12px 22px;display:flex;align-items:center;justify-content:space-between;background:#182923;color:#eff1dc;gap:16px}header a{color:inherit;text-decoration:none;font-weight:850}header>a:first-child{font-size:24px}header span{font:11px monospace;color:#b8cb9a}.lab{display:grid;grid-template-columns:30% 70%;height:calc(100svh - 62px);min-height:760px}aside{display:grid;grid-template-rows:2fr 1fr 1fr;min-width:0;min-height:0;background:#cbd1be;gap:1px}.box{background:#f5f3e9;padding:12px 15px;min-height:0;overflow:auto;position:relative}.heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.heading h2{font:800 12px monospace;text-transform:uppercase;margin:0}.heading>span{font:9px monospace}#discView{height:calc(100% - 65px);min-height:100px;position:relative}canvas{width:100%;height:100%;display:block;touch-action:none}#discView span{position:absolute;bottom:4px;left:8px;font:10px monospace;pointer-events:none}.values{position:absolute;inset:55px 14px auto;background:#e3e9d9;padding:12px;border:1px solid #708668;border-radius:10px;box-shadow:0 10px 25px #0003}.values[hidden]{display:none}label{display:block;font-size:12px;margin:8px 0}input[type=range]{display:block;width:100%;accent-color:#567839}input[type=number]{width:100%;min-width:0;padding:5px;border:1px solid #a1ae95;border-radius:5px;background:#fffef6}output{font:12px monospace}.row{display:flex;gap:6px;margin-top:10px}.row button{flex:1}.coordinates{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:5px;align-items:center}.coordinates button{font-size:11px;padding:7px}.hint{font-size:11px;line-height:1.45;color:#687463;margin:7px 0}.world{display:flex;flex-direction:column;min-width:0;background:#192d25}.worldbar{display:flex;align-items:center;gap:8px;padding:12px;color:#edffd8}.worldbar>div{flex:1}.worldbar strong{display:block;font-size:22px}.worldbar small{font:10px monospace;color:#a8bb99}#scene{position:relative;flex:1;min-height:0}#notice{position:absolute;left:14px;top:10px;max-width:85%;background:#162b23cd;color:#eaffbf;padding:8px 12px;font-size:12px;pointer-events:none;border-radius:8px}.actions{display:flex;flex-wrap:wrap;gap:7px;padding:12px;color:#dce8cf;align-items:center}.actions span{font:10px monospace;width:100%;color:#9faf97}.primary{background:#c2f45b;color:#172d20;border-color:#c2f45b}.report{padding:35px;display:grid;grid-template-columns:1fr 1.5fr;gap:25px}.report h1{font-size:32px;margin:8px 0}.eyebrow{font:12px monospace;color:#667d51}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stat{padding:15px;background:#f8f9ef;border:1px solid #cad1bd;border-radius:10px}.stat strong{font-size:23px;display:block}.stat span{font:10px monospace;text-transform:uppercase}details{grid-column:1/-1;font-size:13px;line-height:1.6}dialog{border:0;border-radius:15px;background:#f4f6e9;max-width:90%;width:370px}dialog::backdrop{background:#092019aa}dialog button{margin:10px 3px 0}a{color:#3c673d}@media(max-width:850px){header>span{display:none}.lab{height:auto;min-height:0;grid-template-columns:1fr}.world{grid-row:1;height:66svh;min-height:400px}aside{grid-template-rows:280px auto auto}.box{overflow:visible}.coordinates{grid-template-columns:1fr 1fr 1fr auto}.report{grid-template-columns:1fr;padding:20px}.stats{grid-template-columns:repeat(2,1fr)}header{padding:10px}.worldbar strong{font-size:18px}}
/* Compact attitude preview leaves more room for throw authoring. */
.orientation{display:flex;flex-direction:column}.orientation #discView{flex:1;height:auto;min-height:90px}.attitude-sliders{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.attitude-sliders label{margin:5px 0}.section-lock{font-size:18px;padding:5px 9px}.section-lock[aria-pressed=true]{background:#ffcb78;color:#192d25}.curve-options button{font-size:11px;padding:6px}.box[data-editing=true]{box-shadow:inset 3px 0 #ffb958}.actions select{min-height:38px;border-radius:8px;background:#f0f6e5;padding:7px}.coordinates input{max-width:100%}
.lab { height: calc(100svh - 62px); min-height: 0; grid-template-columns: minmax(0, 3fr) minmax(0, 7fr); }
.lab > aside { display: flex; flex-direction: column; overflow-y: auto; overflow-x: hidden; }
.lab > aside > .box { flex: 0 0 auto; overflow: visible; }
.lab > aside > .orientation { flex: 0 0 auto; height: auto; }
.orientation #discView {
  flex: 0 0 206px;
  height: 206px;
  min-height: 206px;
  overflow: hidden;
  border: 1px solid #688a6c;
  border-radius: 7px;
  background-color: #193a30;
  background-image:
    radial-gradient(circle at center, #79c48655 1px, transparent 1.5px),
    linear-gradient(#9ceab52b 1px, transparent 1px),
    linear-gradient(90deg, #9ceab52b 1px, transparent 1px),
    linear-gradient(#9ceab50c 1px, transparent 1px),
    linear-gradient(90deg, #9ceab50c 1px, transparent 1px);
  background-size: 40px 40px, 40px 40px, 40px 40px, 8px 8px, 8px 8px;
  background-position: center;
  box-shadow: inset 0 0 32px #061a2070;
}
.orientation #discView::before {
  content: "+";
  position: absolute;
  top: 7px;
  left: 9px;
  color: #b7f3a0;
  font: 14px monospace;
  text-shadow: 0 0 8px #b7f3a066;
  pointer-events: none;
}
.orientation #discView::after {
  content: "◻ ▪ ▪  /  ATTITUDE GRID";
  position: absolute;
  top: 8px;
  right: 9px;
  color: #abd6ae;
  font: 8px monospace;
  letter-spacing: .08em;
  pointer-events: none;
}
.orientation #discView span { color: #d5f5cd; background: #10281dcc; padding: 3px 5px; border-radius: 3px; font-size: 9px; }
#discCanvas, #worldCanvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.heading h2 { flex: 1; min-width: 0; line-height: 1.4; }
.heading button { flex-shrink: 0; }
.attitude-sliders { flex-shrink: 0; }
.attitude-sliders input { margin-inline: 0; }
.coordinates { grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: end; }
.coordinates label { min-width: 0; margin: 4px 0; }
.coordinates button { grid-column: 1 / -1; min-height: 32px; }
#arcStats { display: block; margin-top: 8px; line-height: 1.5; }
.world { min-height: 0; overflow: hidden; }
.worldbar, .actions { flex-shrink: 0; }
.actions button, .actions select { min-height: 38px; }
@media(max-width:850px) {
  .lab { height: auto; grid-template-columns: minmax(0, 1fr); }
  .lab > aside { overflow: visible; }
  .lab > aside > .orientation { flex-basis: auto; }
  .world { height: 66svh; min-height: 400px; }
}
.section-lock { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 38px; padding: 6px 8px; font: 700 11px system-ui,sans-serif; background: #e0eddd; color: #294832; border-color: #8fa98b; }
.section-lock svg { width: 20px; height: 23px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
.section-lock[aria-pressed="true"] { background: #263d32; color: #efffc4; border-color: #819a64; }
#autoAim{display:inline-flex;align-items:center;gap:7px}#autoAim svg{width:18px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.aim-terminal{position:fixed;right:18px;bottom:100px;width:min(380px,calc(100vw - 24px));z-index:60;border:1px solid #6b9d72;border-radius:10px;background:#0b1915f5;color:#b8f99d;box-shadow:0 15px 50px #0007;overflow:hidden;font:13px/1.6 ui-monospace,monospace}.aim-terminal[hidden]{display:none}.terminal-title{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:#23382e;font-size:10px;letter-spacing:.08em}.terminal-title button{padding:3px 9px;font-size:19px;background:transparent;border:0}.terminal-prompt{padding:13px 15px 0;font-weight:bold}.aim-terminal pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 15px 18px;min-height:45px}.terminal-cursor{animation:terminal-blink 1s steps(2,start) infinite}@keyframes terminal-blink{to{visibility:hidden}}@media(prefers-reduced-motion:reduce){.terminal-cursor{animation:none}}
.aim-terminal pre { max-height: 280px; overflow-y: auto; }
.aim-log-line { display: block; margin-bottom: 7px; }
.aim-log-line.command { color: #8ddde5; }
.aim-log-line[tabindex]:hover, .aim-log-line[tabindex]:focus { background: #294837; outline: 1px solid #84ba75; }
.aim-log-line.success { color: #c6ff81; font-weight: 800; border-top: 1px solid #678a52; padding-top: 8px; }
.aim-log-line.failure { color: #ffb788; font-weight: 800; border-top: 1px solid #94704e; padding-top: 8px; }
.box .aim-referenced { outline: 2px solid #e4a33c; outline-offset: 2px; background-color: #fce9bb; box-shadow: 0 0 14px #e4a33c66; opacity: 1; }
.aim-terminal { position: absolute; inset: auto 0 0 auto; width: 35%; max-height: 85%; border-radius: 8px 8px 0 0; display: flex; flex-direction: column; }
.aim-terminal pre { min-height: 0; flex: 1; overflow-y: auto; }
.terminal-title { flex-shrink: 0; gap: 8px; }
.terminal-title strong { margin-right: auto; }
.terminal-title .terminal-restore { font-size: 11px; color: #d4ffad; }
.terminal-restore[hidden] { display: none; }
.aim-terminal.is-minimized .terminal-prompt, .aim-terminal.is-minimized pre { display: none; }
#autoAim.aim-result-ripple { animation: aim-text-ripple 1.6s ease-out 1; }
@keyframes aim-text-ripple {
  0%,100% { text-shadow: none; }
  20% { color: #edffd8; text-shadow: 0 0 2px #fff, 0 0 8px #c3ff69; }
  45% { text-shadow: -6px 0 12px #a7ed5dcc, 6px 0 12px #a7ed5dcc, 0 0 22px #baff5b; }
  75% { text-shadow: -12px 0 22px #a7ed5d44, 12px 0 22px #a7ed5d44; }
}
@media(prefers-reduced-motion:reduce) { #autoAim.aim-result-ripple { animation: none; } }
.site-header{height:62px;min-height:62px;padding:8px 16px;gap:14px;background:linear-gradient(135deg,#293b34,#17271f);border-bottom:1px solid #50624c}
.site-header .brand{display:inline-flex;align-items:baseline;flex-shrink:0;font:800 32px/1 Arial,sans-serif;letter-spacing:-.09em;color:#f4f5f2}
.site-header .brand span{font:inherit;color:inherit}
.site-header .portrait-letter{width:.9em;height:1.05em;display:inline-block;overflow:hidden;position:relative;border:1px solid currentColor;transform:translateY(.1em);background:#70558c}
.site-header .portrait-o{border-radius:50%}
.site-header .portrait-d{margin-left:.12em;border-radius:2px 50% 50% 2px}
.site-header .portrait-letter img{width:100%;height:100%;display:block;object-fit:cover}
.site-header .portrait-o img{object-position:0% 50%}
.site-header .portrait-d img{object-position:50% 24%}
.site-header .brand .brand-punctuation{margin-left:.08em;color:#c2f45b;font-size:.54em;letter-spacing:-.04em}
.site-header .lab-name{font:10px monospace;white-space:nowrap}
.site-header nav{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0}
.site-header nav a{display:flex;align-items:center;gap:5px;white-space:nowrap;font:700 11px system-ui;padding:7px 9px;border:1px solid #60745e;border-radius:20px}
.site-header nav a:hover{background:#39513f}
.site-header nav i{width:6px;height:6px;border-radius:50%;background:#b9ee74;box-shadow:0 0 6px #b9ee7480}
.site-header nav .header-pay{background:#c2f45b;color:#172d20}
.site-header nav .stripe-link{border:0;padding:3px}
.site-header .stripe-link img{width:72px;height:auto}
@media(max-width:850px){.site-header{padding:7px 10px;gap:8px}.site-header .brand{font-size:27px}.site-header .lab-name,.site-header .stripe-link{display:none}.site-header nav{overflow-x:auto;justify-content:flex-start}.site-header nav a{font-size:10px;padding:7px}.site-header nav .stripe-link{display:none}}
#autoAim:not(:disabled){position:relative;overflow:hidden;animation:aim-invite-glow 2.8s ease-in-out infinite}
#autoAim:not(:disabled)::after{content:"✦";position:absolute;right:5px;top:1px;color:#fff9c0;pointer-events:none;animation:aim-invite-sparkle 2.8s ease-in-out infinite}
@keyframes aim-invite-glow{0%,100%{text-shadow:0 0 2px #c8ff94;box-shadow:0 0 3px #b4e96740}50%{text-shadow:0 0 9px #fff5ac,0 0 17px #c8ff94;box-shadow:0 0 13px #b4e96785}}
@keyframes aim-invite-sparkle{0%,100%{opacity:.1;transform:scale(.5) rotate(0)}50%{opacity:1;transform:scale(1.1) rotate(90deg)}}
@media(prefers-reduced-motion:reduce){#autoAim:not(:disabled),#autoAim:not(:disabled)::after{animation:none}}
#discColor,#discSkin{display:block;width:100%;min-width:0;margin-top:6px;padding:8px;border:1px solid #829779;border-radius:7px;background:#fffef6;color:#192d25;font:inherit}
.box:has(#discColor) .row>label{flex:1;min-width:0}
.style-label{font:700 11px system-ui;margin:9px 0 6px}
.style-swatches{display:flex;gap:8px;flex-wrap:wrap;padding:3px}
.style-swatches .style-swatch{width:30px;height:30px;min-width:30px;padding:0;border-radius:5px;border:1px solid #647263;background-size:cover;background-position:center}
.style-swatches .style-swatch[aria-pressed="true"]{outline:2px solid #233c2a;outline-offset:2px;box-shadow:0 0 0 1px #fff inset}
.style-swatches .style-swatch:hover{transform:translateY(-2px)}
.actions .throw-control-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;width:100%}
.aim-controls,.sound-controls{display:flex;align-items:center;gap:7px}
.actions .camera-segments{display:flex;gap:0;border:1px solid #65816b;border-radius:9px;overflow:hidden}
.camera-segments button{border:0;border-radius:0;font-size:12px;padding:10px}
.actions .control-caption{width:auto;color:#dce8cf;font:11px system-ui}
.actions .sliding-toggle{position:relative;margin:0;display:block;cursor:pointer}
.sliding-toggle input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:2}
.actions .sliding-toggle .toggle-options{position:relative;display:flex;width:94px;height:34px;border:1px solid #65816b;border-radius:8px;overflow:hidden;background:#14281e}
.actions .sliding-toggle .toggle-options:before{content:"";position:absolute;inset:2px auto 2px 2px;width:calc(50% - 2px);border-radius:5px;background:#c2f45b;transition:transform .2s}
.sliding-toggle input:checked+.toggle-options:before{transform:translateX(100%)}
.actions .toggle-options span{position:relative;display:grid;place-items:center;width:50%;font:700 11px system-ui;color:#dce8cf}
.sliding-toggle input:not(:checked)+.toggle-options span:first-child,.sliding-toggle input:checked+.toggle-options span:last-child{color:#172d20}
.sliding-toggle input:focus-visible+.toggle-options{outline:2px solid #ffc271;outline-offset:2px}
.sliding-toggle input:disabled+.toggle-options{opacity:.4}
@media(max-width:650px){.actions .throw-control-row{gap:8px}.throw-control-row>button{flex:1}.actions .camera-segments{flex:1}.camera-segments button{flex:1;padding:9px 7px}}
@media(max-width:650px){
 .actions{padding:8px 7px;gap:5px}
 .actions .throw-control-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;width:100%;align-items:stretch}
 .throw-control-row>#simulate,.throw-control-row>.aim-controls,.throw-control-row>.sound-controls{min-width:0;width:100%}
 .throw-control-row>#simulate{font-size:11px;padding:8px 5px;white-space:nowrap}
 .aim-controls{gap:3px;min-width:0}
 .aim-controls #autoAim{font-size:11px;padding:7px 5px;gap:3px;min-width:0;flex:1;white-space:nowrap}
 .aim-controls #autoAim svg{width:14px;height:16px}
 .aim-controls .toggle-options{width:62px!important;height:30px!important;font-size:9px!important}
 .throw-control-row>.camera-segments{grid-column:1/-1;width:100%;min-width:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));}
 .camera-segments button{font-size:10px;padding:8px 2px;min-width:0;white-space:nowrap}
.sound-controls{justify-content:flex-end;gap:5px}
.copy-stats{font-size:11px;padding:8px 10px;white-space:nowrap}
 .sound-controls .toggle-options{width:62px!important;height:30px!important;font-size:9px!important}
 .camera-help{font-size:9px;line-height:1.25;display:block;text-align:center}
 .aim-terminal{width:70%;right:0;max-height:78%;font-size:11px}
 .aim-terminal pre{margin:8px 10px 12px;max-height:220px}
 .aim-terminal .terminal-title{padding:6px 7px;gap:4px}
 .aim-terminal .terminal-title strong{font-size:9px;white-space:nowrap;min-width:0}
 .aim-terminal .terminal-title .terminal-restore{display:inline-block;flex:0 0 auto;min-width:82px;padding:5px 7px;font-size:10px;white-space:nowrap}
}
@media(max-width:650px){
 .worldbar{padding:7px 8px;gap:5px;flex-wrap:wrap}
 .worldbar>div{flex:1 1 100%;min-width:0}
 .worldbar strong{font-size:16px;line-height:1.1}
 .worldbar small{font-size:9px}
 .worldbar #newPath{margin-left:auto}
 .worldbar #pathSettings{padding:8px 10px}
 .world{height:66svh;min-height:390px}
 #scene{min-height:0}
 .actions{flex:0 0 auto}
}
@media(max-width:650px){
 #pathDialog{width:calc(100vw - 24px);max-width:none;margin:auto;padding:12px;border-radius:12px}
 #pathDialog form{display:flex;flex-direction:column;gap:4px}
 #pathDialog h2{font-size:18px;margin:4px 0 8px}
 #pathDialog label{margin:5px 0;font-size:11px}
 #pathDialog input{font-size:14px}
 #pathSettings,#newPath{padding:8px 9px;font-size:11px;min-width:0}
}
