/* Forge.
 *
 * A tool that is looked at for eight hours at a stretch, so the interface gets
 * out of the way: the canvas is the brightest thing on screen and everything
 * else recedes. Panels dock, the rail switches discipline, and the modal set
 * is where each discipline's depth actually lives.
 */
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
:root{
  --bg:#0c0c0f; --panel:#141419; --panel2:#1a1a21; --raise:#22222b;
  --line:#26262f; --line2:#33333f;
  --ink:#eceef2; --dim:#9b9ba6; --faint:#6b6b78;
  --accent:#ff6b3d;                 /* forge — hot metal */
  --accent-soft:rgba(255,107,61,.14);
  --pick:#4d8dff;                   /* selection */
  --good:#4ade80; --warn:#fbbf24; --bad:#f87171;
  --canvas:#191920; --paper:#ffffff;
  --r:12px; --r-sm:9px; --r-lg:18px;
  --rail:60px; --side:260px; --insp:280px;
}
html,body{height:100%}
body{background:var(--bg);color:var(--ink);font-size:13px;line-height:1.5;
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;overflow:hidden}
button,input,select,textarea{font:inherit;color:inherit}
a{color:#8ab4f8;text-decoration:none}

/* ── frame ── */
.app{display:flex;flex-direction:column;height:100vh;height:100dvh}
.top{height:46px;flex:0 0 46px;background:var(--panel);border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:8px;padding:0 10px}
.top .mk{width:24px;height:24px;border-radius:7px;object-fit:cover;flex:0 0 24px}
.top .mk.gohome{cursor:pointer;transition:transform .12s,box-shadow .12s}.top .mk.gohome:hover{transform:scale(1.08);box-shadow:0 0 0 2px rgba(255,107,61,.45)}
.top .docname{font-size:13.5px;font-weight:600;padding:5px 10px;border-radius:7px;
  cursor:text;max-width:260px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.top .docname:hover{background:var(--panel2)}
.top .sp{flex:1}
.menubtn{background:transparent;border:0;padding:6px 10px;border-radius:7px;
  color:var(--dim);cursor:pointer;font-size:12.5px}
.menubtn:hover{background:var(--panel2);color:var(--ink)}

.body{flex:1;display:flex;min-height:0}

/* discipline rail — the whole product in one column */
.rail{width:var(--rail);flex:0 0 var(--rail);background:var(--panel);
  border-right:1px solid var(--line);display:flex;flex-direction:column;
  align-items:center;padding:8px 0;gap:2px;overflow-y:auto}
.railbtn{width:46px;height:46px;border-radius:10px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:3px;color:var(--faint);cursor:pointer;
  font-size:8.5px;letter-spacing:.02em;text-align:center;flex:0 0 auto}
.railbtn:hover{background:var(--panel2);color:var(--ink)}
.railbtn.on{background:var(--accent-soft);color:var(--accent)}
.railsep{width:28px;height:1px;background:var(--line);margin:6px 0;flex:0 0 1px}

/* the dock — tools for whichever discipline is chosen */
.side{width:var(--side);flex:0 0 var(--side);background:var(--panel);
  border-right:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}
.sidehead{padding:13px 14px 9px;font-size:12.5px;font-weight:600;
  display:flex;align-items:center;gap:8px}
.sidehead .sp{flex:1}
.sidebody{flex:1;overflow-y:auto;padding:0 10px 14px}
.grp{font-size:9.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);padding:13px 4px 6px}
.toolgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.tool{aspect-ratio:1;border:1px solid var(--line);border-radius:var(--r-sm);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  color:var(--dim);cursor:pointer;font-size:9px;text-align:center;padding:4px}
.tool:hover{border-color:var(--line2);background:var(--panel2);color:var(--ink)}
.tool.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.listrow{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:var(--r-sm);
  cursor:pointer;color:var(--dim)}
.listrow:hover{background:var(--panel2);color:var(--ink)}
.listrow.on{background:var(--accent-soft);color:var(--accent)}
.listrow .m{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.listrow .r{font-size:10.5px;color:var(--faint)}

/* ── the canvas ── */
.stage{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--canvas)}
.stagebar{height:38px;flex:0 0 38px;border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:6px;padding:0 10px;background:var(--panel)}
.stagebar .sp{flex:1}
.zoom{font-size:11.5px;color:var(--faint);padding:0 8px;font-variant-numeric:tabular-nums}
.surface{flex:1;overflow:auto;display:grid;place-items:center;padding:34px;position:relative}
.paper{background:var(--paper);box-shadow:0 8px 40px rgba(0,0,0,.5);position:relative;
  transform-origin:center}
.obj{position:absolute;cursor:move;outline:1px solid transparent}
.obj:hover{outline-color:rgba(77,141,255,.4)}
.obj.sel{outline:1.5px solid var(--pick)}
.obj.sel::after{content:'';position:absolute;inset:-4px;border:1px dashed var(--pick);
  opacity:.5;pointer-events:none}
.handle{position:absolute;width:8px;height:8px;background:#fff;border:1.5px solid var(--pick);
  border-radius:2px}

/* timeline, for video */
.timeline{height:150px;flex:0 0 150px;border-top:1px solid var(--line);background:var(--panel);
  display:flex;flex-direction:column}
.tlbar{height:30px;display:flex;align-items:center;gap:8px;padding:0 10px;
  border-bottom:1px solid var(--line)}
.tltracks{flex:1;overflow:auto;padding:6px 0}
.track{display:flex;align-items:center;height:34px;gap:8px;padding:0 10px}
.track .nm{width:74px;flex:0 0 74px;font-size:11px;color:var(--dim)}
.track .lane{flex:1;height:24px;background:var(--panel2);border-radius:5px;position:relative}
.clip{position:absolute;top:2px;bottom:2px;border-radius:4px;background:var(--accent-soft);
  border:1px solid var(--accent);font-size:10px;color:var(--accent);padding:0 6px;
  display:flex;align-items:center;overflow:hidden;cursor:grab}
.clip.audio{background:rgba(74,222,128,.13);border-color:var(--good);color:var(--good)}
.playhead{position:absolute;top:0;bottom:0;width:1.5px;background:var(--accent);z-index:5}

/* ── inspector ── */
.insp{width:var(--insp);flex:0 0 var(--insp);background:var(--panel);
  border-left:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}
.inspbody{flex:1;overflow-y:auto;padding:0 12px 16px}
.tabs{display:flex;border-bottom:1px solid var(--line);padding:0 6px}
.tab{padding:11px 10px;font-size:11.5px;color:var(--faint);cursor:pointer;
  border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--ink)}
.tab.on{color:var(--accent);border-bottom-color:var(--accent)}
.field{margin-bottom:11px}
.field label{display:block;font-size:10.5px;color:var(--faint);margin-bottom:4px;
  letter-spacing:.03em;text-transform:uppercase}
.field .two{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.field .three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px}
input,select,textarea{width:100%;background:var(--bg);border:1px solid var(--line2);
  border-radius:7px;padding:7px 9px;outline:none;font-size:12px}
input:focus,select:focus,textarea:focus{border-color:var(--accent)}
input.n{text-align:right;font-variant-numeric:tabular-nums}
.swatch{width:100%;height:30px;border-radius:7px;border:1px solid var(--line2);cursor:pointer}
.slider{width:100%;accent-color:var(--accent)}
.seg{display:flex;background:var(--bg);border:1px solid var(--line2);border-radius:7px;
  overflow:hidden}
.seg button{flex:1;background:transparent;border:0;padding:6px;color:var(--faint);
  cursor:pointer;font-size:11px}
.seg button.on{background:var(--accent-soft);color:var(--accent)}

.btn{background:var(--accent);color:#1b0d06;border:0;border-radius:99px;padding:7px 15px;
  font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}
.btn.ghost{background:transparent;border:1px solid var(--line2);color:var(--ink);
  font-weight:500}
.btn.sm{padding:5px 11px;font-size:11.5px}
.btn.wide{width:100%;padding:9px;text-align:center}
.btns{display:flex;gap:7px;flex-wrap:wrap}
.muted{color:var(--dim)}
.hint{color:var(--faint);font-size:10.5px;margin-top:5px}

/* ── the modal set ── */
.veil{position:fixed;inset:0;background:rgba(0,0,0,.7);backdrop-filter:blur(4px);
  display:none;align-items:center;justify-content:center;padding:24px;z-index:200}
.veil.show{display:flex}
.sheet{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);
  width:100%;max-width:720px;max-height:86vh;overflow:hidden;display:flex;
  flex-direction:column}
.sheet.wide{max-width:1000px}
.sheethead{padding:18px 22px 14px;border-bottom:1px solid var(--line);display:flex;
  align-items:center;gap:10px}
.sheethead h2{font-size:16px;font-weight:620;flex:1}
.sheetbody{padding:20px 22px;overflow-y:auto}
.sheetfoot{padding:14px 22px;border-top:1px solid var(--line);display:flex;gap:8px;
  justify-content:flex-end}
.cardgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:11px}
.mcard{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;cursor:pointer;
  background:var(--panel2)}
.mcard:hover{border-color:var(--accent)}
.mcard .pv{aspect-ratio:4/3;background:var(--bg);display:grid;place-items:center;
  color:var(--faint)}
.mcard .lb{padding:8px 10px;font-size:11.5px}
.mcard .lb b{display:block;font-size:12px;font-weight:550}
.mcard .lb span{color:var(--faint);font-size:10.5px}

.toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(70px);
  background:var(--raise);border:1px solid var(--line2);border-radius:99px;
  padding:9px 18px;font-size:12.5px;opacity:0;transition:.2s;z-index:300}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* Below 1000px, .side and .insp become slide-in drawers instead of being
   hidden outright — see the "responsive chrome" rules further down, which
   is where .rail's narrowing at this breakpoint now lives too. */

/* ── landing ── */
body:has(.land){overflow:auto;font-size:14.5px}
.lwrap{max-width:1060px;margin:0 auto;padding:0 24px;display:flex;align-items:center;gap:14px}
.brand{display:flex;align-items:center;gap:10px}
.brand .mk{display:block;width:30px;height:30px;border-radius:9px;flex:0 0 30px;object-fit:cover}
.brand b{font-size:17px;font-weight:640;letter-spacing:-.3px}
.landhead{border-bottom:1px solid var(--line);padding:17px 0}
.hero{padding:94px 0 76px;text-align:center;border-bottom:1px solid var(--line)}
.hero .lwrap,.lsec .lwrap,.landfoot .lwrap{display:block}
.hero h1{font-size:clamp(34px,6vw,58px);font-weight:640;letter-spacing:-2px;
  line-height:1.08;margin-bottom:20px}
.hero p{font-size:17px;color:var(--dim);max-width:640px;margin:0 auto 30px}
.hero .btns{display:flex}
.lsec{padding:62px 0;border-bottom:1px solid var(--line)}
.lsec.alt{background:var(--panel)}
.lsec h2{font-size:24px;font-weight:620;letter-spacing:-.5px;margin-bottom:11px}
.lsec .lead{font-size:16px;color:var(--dim);max-width:700px}
.grid3{display:grid !important;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:26px}
.lcard h3{font-size:16px;font-weight:600;margin-bottom:6px}
.lcard p{font-size:14px;color:var(--dim)}
.landfoot{padding:38px 0 66px;font-size:13px;color:var(--faint)}
.landfoot a{color:var(--dim);margin-right:18px}
.landfoot p{margin-top:15px}
.land .btn{padding:11px 22px;font-size:14px}

/* ── home ────────────────────────────────────────────────────────────────
   An empty room. Everything the app can do is one button away rather than
   laid out around a document that has not been opened. */
.home {
  height: 100vh; height: 100dvh; overflow-y: auto;
  display: flex; flex-direction: column;
  align-items: center;
  padding: clamp(28px,8vh,64px) 20px 48px;
  background: radial-gradient(ellipse 80% 50% at 50% -20%,
    rgba(255,107,61,0.10), transparent), var(--bg);
}
.home-logo { display: flex; align-items: center; gap: 13px; margin-bottom: 12px; }
.home-logo a { display: block; line-height: 0; }
.home-logo img { width: 44px; height: 44px; border-radius: 12px; object-fit: cover; }
.home-logo span { font-size: 28px; font-weight: 680; letter-spacing: -.9px; }
.home-sub { color: var(--faint); margin-bottom: 34px; font-size: 14px;
  text-align: center; line-height: 1.7; }
.home-actions { display: flex; gap: 11px; flex-wrap: wrap; justify-content: center; }
.home .btn { height: 42px; padding: 0 22px; font-size: 14px; }
.recent { margin-top: 54px; width: 100%; max-width: 540px; }
.recent h3 {
  font-size: 10.5px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .09em; color: var(--faint); margin-bottom: 11px;
}
.recent-item {
  display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
  padding: 11px 13px; border-radius: 9px; cursor: pointer;
  border: 1px solid transparent;
  background: var(--panel);
  margin-bottom: 6px;
}
.recent-item:hover { border-color: var(--line); background: var(--panel2); }
.recent-item b { font-size: 13.5px; font-weight: 550; }
.recent-item span { font-size: 12px; color: var(--faint); }
.recent-icon {
  width: 36px; height: 36px; border-radius: 9px; flex: 0 0 36px;
  display: grid; place-items: center; background: var(--panel2); color: var(--accent);
}

/* What kind of file this is. The rail used to say it by which button was lit;
   now the title bar does, beside the name. */
.kindpill {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 11px; font-weight: 600;
  padding: 3px 9px 3px 7px; border-radius: 99px;
  background: var(--accent-soft); color: var(--accent);
  white-space: nowrap; flex-shrink: 0;
}

/* An icon inside a button needs a gap and needs to sit on the text baseline,
   or it crowds the first letter. */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; }
.btn svg { flex-shrink: 0; }
.home .btn svg { margin-left: -2px; }

/* Scrollbars, in the theme rather than the operating system's. A bar wide
   enough to grab is wide enough to notice; these are neither. */
* { scrollbar-width: thin; scrollbar-color: rgba(140,150,170,.28) transparent; }
*::-webkit-scrollbar { width: 7px; height: 7px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: rgba(140,150,170,.24);
  border-radius: 99px;
}
*::-webkit-scrollbar-thumb:hover { background: rgba(140,150,170,.42); }
*::-webkit-scrollbar-corner { background: transparent; }

.hint { font-size: 12.5px; color: var(--faint, #8b92a0); line-height: 1.6; }


/* ── image module additions ───────────────────────────────────────────────
   Everything below is new: nothing above this line is touched. Ported
   verbatim from forge.ocalt.com/style.css so the module is visually
   identical to Forge proper, then extended for a real, pixel-editing
   canvas rather than a decorative one. */

/* the canvas itself: a checkerboard shows through transparency, same as
   every other raster editor, so "no background" reads as a fact about the
   image rather than a rendering bug */
.canvaswrap{position:relative;transform-origin:top left}
.checker{
  background-image:
    linear-gradient(45deg,#3a3a44 25%,transparent 25%),
    linear-gradient(-45deg,#3a3a44 25%,transparent 25%),
    linear-gradient(45deg,transparent 75%,#3a3a44 75%),
    linear-gradient(-45deg,transparent 75%,#3a3a44 75%);
  background-size:16px 16px;
  background-position:0 0,0 8px,8px -8px,-8px 0;
  background-color:#2a2a32;
}
.editcanvas{display:block;position:relative;image-rendering:pixelated;touch-action:none}
.editcanvas.zoomed-in{image-rendering:pixelated}
.editcanvas.zoomed-out{image-rendering:auto}

/* cursor per tool, set on the surface while a tool is active */
.surface[data-tool="brush"],.surface[data-tool="eraser"]{cursor:crosshair}
.surface[data-tool="bucket"]{cursor:cell}
.surface[data-tool="eyedrop"]{cursor:copy}
.surface[data-tool="text"]{cursor:text}
.surface[data-tool="hand"]{cursor:grab}
.surface[data-tool="hand"]:active{cursor:grabbing}
.surface[data-tool="crop"],.surface[data-tool="select"],.surface[data-tool="lasso"]{cursor:crosshair}
.surface[data-tool="move"]{cursor:move}
.surface[data-tool="zoom"]{cursor:zoom-in}
.surface[data-panning="1"]{cursor:grabbing !important}

/* rulers along the top and left of the stage, ticked every 100 doc-px */
.rulers{position:absolute;inset:0;pointer-events:none;z-index:3}
.ruler-h{position:absolute;top:0;left:24px;right:0;height:24px;background:var(--panel);
  border-bottom:1px solid var(--line);overflow:hidden}
.ruler-v{position:absolute;top:24px;left:0;bottom:0;width:24px;background:var(--panel);
  border-right:1px solid var(--line);overflow:hidden}
.ruler-corner{position:absolute;top:0;left:0;width:24px;height:24px;background:var(--panel);
  border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.ruler-tick{position:absolute;font-size:8.5px;color:var(--faint)}
.ruler-h .ruler-tick{top:10px;border-left:1px solid var(--line2);padding-left:2px}
.ruler-v .ruler-tick{left:2px;border-top:1px solid var(--line2);writing-mode:vertical-lr}

/* marching ants: an animated dashed selection outline, drawn as two offset
   dash patterns running opposite directions so it reads at any zoom */
.marquee{position:absolute;border:1px solid #fff;pointer-events:none;z-index:4;
  box-shadow:0 0 0 1px #000}
.marquee::after{content:'';position:absolute;inset:0;
  background-image:repeating-linear-gradient(90deg,#fff 0 6px,transparent 6px 12px),
    repeating-linear-gradient(0deg,#fff 0 6px,transparent 6px 12px),
    repeating-linear-gradient(90deg,#fff 0 6px,transparent 6px 12px),
    repeating-linear-gradient(0deg,#fff 0 6px,transparent 6px 12px);
  background-size:12px 1px,1px 12px,12px 1px,1px 12px;
  background-position:0 0,0 0,0 100%,100% 0;
  background-repeat:repeat-x,repeat-y,repeat-x,repeat-y;
  animation:ants .5s linear infinite}
@keyframes ants{to{background-position:12px 0,0 12px,-12px 100%,100% -12px}}
.marquee.ellipse{border-radius:50%;box-shadow:none}
.marquee.ellipse::after{border-radius:50%}

/* crop overlay: darken outside the crop rect, rule-of-thirds inside it */
.cropveil{position:absolute;inset:0;background:rgba(0,0,0,.55);pointer-events:none;z-index:4}
.cropwin{position:absolute;outline:1.5px solid #fff;box-shadow:0 0 0 2000px rgba(0,0,0,.55);
  pointer-events:none}
.cropwin .third{position:absolute;background:rgba(255,255,255,.35)}
.crophandle{position:absolute;width:11px;height:11px;background:#fff;border:1.5px solid var(--pick);
  border-radius:2px;pointer-events:auto;z-index:5}

/* transform handles for a selected object layer (text / shape) */
.xform{position:absolute;outline:1.5px solid var(--pick);pointer-events:none}
.xhandle{position:absolute;width:9px;height:9px;background:#fff;border:1.5px solid var(--pick);
  border-radius:2px;pointer-events:auto}
.xrotate{position:absolute;width:9px;height:9px;background:#fff;border:1.5px solid var(--pick);
  border-radius:50%;pointer-events:auto}

/* ── colour picker ── */
.hsv{position:relative;width:100%;aspect-ratio:1.5;border-radius:var(--r-sm);cursor:crosshair;
  overflow:hidden}
.hsv-sat{position:absolute;inset:0;background:linear-gradient(90deg,#fff,transparent)}
.hsv-val{position:absolute;inset:0;background:linear-gradient(0deg,#000,transparent)}
.hsv-dot{position:absolute;width:12px;height:12px;border-radius:50%;border:2px solid #fff;
  box-shadow:0 0 0 1px rgba(0,0,0,.6);transform:translate(-50%,-50%);pointer-events:none}
.hue{position:relative;width:100%;height:16px;border-radius:99px;cursor:pointer;
  background:linear-gradient(90deg,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}
.hue-dot{position:absolute;top:-2px;width:20px;height:20px;border-radius:50%;background:#fff;
  border:2px solid #222;transform:translateX(-50%);box-shadow:0 1px 4px rgba(0,0,0,.5)}
.alpha-track{position:relative;width:100%;height:16px;border-radius:99px;overflow:hidden}
.alpha-dot{position:absolute;top:-2px;width:20px;height:20px;border-radius:50%;background:#fff;
  border:2px solid #222;transform:translateX(-50%);box-shadow:0 1px 4px rgba(0,0,0,.5)}
.swatchgrid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}
.swatchgrid .sw{aspect-ratio:1;border-radius:6px;border:1px solid var(--line2);cursor:pointer}
.swatchgrid .sw.add{display:flex;align-items:center;justify-content:center;color:var(--faint);
  background:var(--bg);font-size:16px}
.currentcolor{display:flex;align-items:center;gap:10px}
.currentcolor .sw{width:38px;height:38px;border-radius:9px;border:1px solid var(--line2);flex:0 0 38px}

/* ── brush preview ── */
.brushpv{display:flex;align-items:center;justify-content:center;height:64px;
  background:var(--bg);border:1px solid var(--line2);border-radius:var(--r-sm);margin-bottom:8px}
.brushpv .dot{border-radius:50%;background:var(--ink)}

/* ── layers panel ── */
.layerrow{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--r-sm);
  cursor:pointer;border:1px solid transparent}
.layerrow:hover{background:var(--panel2)}
.layerrow.on{background:var(--accent-soft);border-color:var(--accent)}
.layerrow .thumb{width:34px;height:34px;border-radius:6px;flex:0 0 34px;border:1px solid var(--line2);
  overflow:hidden;position:relative}
.layerrow .thumb img,.layerrow .thumb canvas{width:100%;height:100%;object-fit:cover}
.layerrow .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:12px}
.layerrow .eye{color:var(--dim);cursor:pointer;flex:0 0 auto}
.layerrow .eye.off{opacity:.3}
.layerrow .lock{color:var(--faint);cursor:pointer;flex:0 0 auto}
.layerrow .lock.on{color:var(--accent)}
.layerrow.dragover{border-color:var(--pick)}

/* ── curve widget (adjustments → Curves) ── */
.curvebox{position:relative;width:100%;aspect-ratio:1;background:var(--bg);
  border:1px solid var(--line2);border-radius:var(--r-sm);cursor:crosshair}
.curvebox canvas{position:absolute;inset:0;width:100%;height:100%}

/* ── history panel ── */
.histrow{display:flex;align-items:center;gap:9px;padding:8px 9px;border-radius:var(--r-sm);
  cursor:pointer;color:var(--dim)}
.histrow:hover{background:var(--panel2);color:var(--ink)}
.histrow.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.histrow .n{width:20px;flex:0 0 20px;text-align:right;font-size:10.5px;color:var(--faint);
  font-variant-numeric:tabular-nums}

/* ── template gallery preview tiles: rendered minis rather than an icon ── */
.tplpv{width:100%;height:100%;display:flex;align-items:center;justify-content:center;
  position:relative;overflow:hidden}
.tplpv .bg{position:absolute;inset:0}
.tplpv .mk{position:relative;font-size:9px;color:#fff;font-weight:700;letter-spacing:.02em;
  padding:4px 8px;border-radius:99px;background:rgba(0,0,0,.35)}

/* ── export panel ── */
.fmtgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:9px}
.fmtcard{border:1px solid var(--line);border-radius:var(--r-sm);padding:12px 10px;
  cursor:pointer;text-align:center;background:var(--panel2)}
.fmtcard:hover{border-color:var(--line2)}
.fmtcard.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.fmtcard b{display:block;font-size:12.5px;margin-bottom:2px}
.fmtcard span{font-size:10px;color:var(--faint)}
.fmtcard.on span{color:var(--accent)}
.codeblock{background:var(--bg);border:1px solid var(--line2);border-radius:var(--r-sm);
  padding:12px 14px;font-family:ui-monospace,'JetBrains Mono',monospace;font-size:11.5px;
  line-height:1.65;white-space:pre;overflow-x:auto;color:var(--dim)}
.codeblock .k{color:#8ab4f8}
.codeblock .s{color:#a5d6a7}
.codeblock .v{color:var(--accent)}
.codeblock .c{color:var(--faint);font-style:italic}

/* ── zoom / pan chrome on the stagebar ── */
.stagebar .divider{width:1px;height:18px;background:var(--line2);margin:0 2px}

/* ── selection-scope pill, shown on the inspector when an op will only
   touch the marked region ── */
.scopepill{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--warn);
  background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.35);border-radius:99px;
  padding:4px 10px;margin-bottom:10px}

@media(max-width:1000px){
  .ruler-h,.ruler-v,.ruler-corner{display:none}
}

/* ── file browser (Forge.FileBrowser) ─────────────────────────────────────
   One tree, walked the same way whether you are opening a file or picking
   where Save As / Export should land — because it IS the same tree. */
.fbwrap{display:flex;gap:0;min-height:340px}
.fbsources{width:150px;flex:0 0 150px;border-right:1px solid var(--line);padding-right:14px;
  display:flex;flex-direction:column;gap:4px}
.fbsrc{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:var(--r-sm);
  cursor:pointer;color:var(--dim);font-size:12.5px}
.fbsrc:hover{background:var(--panel2);color:var(--ink)}
.fbsrc.on{background:var(--accent-soft);color:var(--accent)}
.fbmain{flex:1;padding-left:16px;display:flex;flex-direction:column;min-width:0}
.fbcrumbs{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--faint);
  margin-bottom:10px;flex-wrap:wrap}
.fbcrumb{cursor:pointer}
.fbcrumb:hover{color:var(--ink)}
.fbsep{color:var(--line2)}
.fblist{flex:1;overflow-y:auto;max-height:320px}
.fbrow{display:flex;align-items:center;gap:9px;padding:9px 8px;border-radius:var(--r-sm);
  cursor:pointer;color:var(--dim)}
.fbrow:hover{background:var(--panel2);color:var(--ink)}
.fbrow.off{opacity:.35;cursor:not-allowed;pointer-events:none}
.fbrow .m{flex:1;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fbrow .r{font-size:10px;color:var(--faint);display:flex;align-items:center;gap:4px}
.fbsavebar{display:flex;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.fbdevice{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  padding:40px 20px;text-align:center;color:var(--dim)}
.fbdevice p{max-width:320px;font-size:12.5px;color:var(--faint);margin:0}
@media(max-width:640px){
  .fbwrap{flex-direction:column}
  .fbsources{width:100%;flex-direction:row;border-right:0;border-bottom:1px solid var(--line);
    padding-right:0;padding-bottom:10px;margin-bottom:10px}
  .fbsrc{flex:1;justify-content:center}
  .fbmain{padding-left:0}
}

/* ── home hub (home.html) ─────────────────────────────────────────────────
   Its own screen, not a discipline shell — the doors, not a room. */
.hub{height:100vh;height:100dvh;overflow-y:auto;display:flex;flex-direction:column;
  align-items:center;padding:clamp(28px,8vh,64px) 20px 40px;
  background:radial-gradient(ellipse 80% 50% at 50% -20%,rgba(255,107,61,.10),transparent),var(--bg)}
.hub-logo{width:clamp(64px,12vw,96px);height:clamp(64px,12vw,96px);object-fit:contain;
  margin-bottom:18px}
.hub-name{font-size:clamp(20px,3vw,26px);font-weight:680;letter-spacing:-.5px;margin-bottom:32px;
  text-align:center}
.hub-actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;width:100%;
  max-width:420px}
.hub-actions .btn{flex:1;min-width:150px;height:46px;font-size:14px}
.hub-recent{margin-top:52px;width:100%;max-width:560px}
.hub-recent h3{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;
  color:var(--faint);margin-bottom:11px}
.hub-recent .hint{padding:14px 2px}
/* the start screens scroll inside the visible area: a fixed box is never taller than what shows, even where 100vh runs under a browser's toolbar */
.hub,.home{position:fixed;inset:0;height:auto;padding-bottom:calc(48px + env(safe-area-inset-bottom));overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.recentfilter{width:100%;margin:0 0 10px;height:36px;padding:0 12px;border-radius:9px;border:1px solid var(--line2);background:var(--panel);color:var(--ink);font:inherit;font-size:13px}

/* discipline picker cards — six doors, one open */
.discgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.disccard{border:1px solid var(--line);border-radius:var(--r);padding:16px;background:var(--panel2);
  cursor:pointer;display:flex;flex-direction:column;gap:10px}
.disccard:hover{border-color:var(--accent)}
.disccard .di{width:38px;height:38px;border-radius:10px;background:var(--accent-soft);
  color:var(--accent);display:grid;place-items:center;flex:0 0 38px}
.disccard b{font-size:13.5px;font-weight:600}
.disccard p{font-size:11.5px;color:var(--faint);line-height:1.5;margin:0}
.disccard.off{cursor:default;opacity:.55}
.disccard.off:hover{border-color:var(--line)}
.disccard.off .di{background:var(--panel);color:var(--faint)}
.soonpill{align-self:flex-start;font-size:9.5px;font-weight:700;text-transform:uppercase;
  letter-spacing:.07em;color:var(--faint);background:var(--bg);border:1px solid var(--line2);
  border-radius:99px;padding:2px 8px}

/* ── responsive chrome for a discipline shell (image.html and, later, every
   other module) — panels become drawers on a narrow viewport instead of
   vanishing, so nothing is ever out of reach on a phone ── */
.panelveil{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:150;display:none}
.panelveil.show{display:block}
.drawerbtn{display:none}
@media(max-width:1000px){
  .side,.insp{
    position:fixed;top:46px;bottom:0;width:min(86vw,340px);z-index:160;
    transition:transform .22s ease;box-shadow:0 0 40px rgba(0,0,0,.5);
  }
  .side{left:0;transform:translateX(-104%)}
  .side.open{transform:translateX(0)}
  .insp{right:0;transform:translateX(104%)}
  .insp.open{transform:translateX(0)}
  .rail{width:52px;flex:0 0 52px}
  .drawerbtn{display:flex}
}
.mobileonly{display:none}
@media(max-width:720px){
  .top{padding:0 6px;gap:4px}
  .top .docname{max-width:120px;font-size:12.5px}
  .top .menubtn.deskonly{display:none}
  .mobileonly{display:inline-flex}
  .kindpill{display:none}
  .top .btn.sm span{display:none}
  .top .btn.sm{padding:7px}
}
@media(max-width:520px){
  .rail{width:44px;flex:0 0 44px}
  .railbtn{width:36px;height:36px;font-size:0}
  .railbtn span{display:none}
  .stagebar{padding:0 6px;gap:3px;flex-wrap:nowrap;overflow-x:auto}
  .top .btn.sm{padding:5px 10px}
}

/* ── landing (index.html) ─────────────────────────────────────────────────
   Additive only: the .land/.hero/.lsec/.grid3/.lcard rules above are
   Forge's own, ported verbatim; these fill the gaps the new static landing
   needs now that it no longer depends on /assets/product.* */
.landnav{display:flex;gap:18px;margin-right:10px}
.landnav a{color:var(--dim);font-size:13.5px}
.landnav a:hover{color:var(--ink)}
.hero-mark{width:clamp(64px,10vw,96px);height:clamp(64px,10vw,96px);object-fit:contain;
  display:block;margin:0 auto 26px}
.hero .btns{justify-content:center}
.fine{font-size:12.5px !important;color:var(--faint) !important;margin:18px auto 0 !important}
.disclist{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-top:26px}
.discitem{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;
  border:1px solid var(--line);border-radius:var(--r);background:var(--panel2)}
.discitem b{font-size:14px;font-weight:600}
.discitem .stat{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;
  color:var(--faint);border:1px solid var(--line2);border-radius:99px;padding:3px 9px;white-space:nowrap}
.discitem.live{border-color:var(--accent)}
.discitem.live .stat{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.lcard{border:1px solid var(--line);border-radius:var(--r);padding:20px;background:var(--panel)}
.lsec.alt .lcard{background:var(--bg)}
@media(max-width:760px){
  .landnav{display:none}
  .hero{padding:56px 0 48px}
  .lsec{padding:44px 0}
}
.land .brand{color:var(--ink)}

/* ── video module (video.html) ───────────────────────────────────────
   One shell, five pages (Media, Edit, Color, Audio, Deliver): a viewer in
   the middle, a panel either side (drawers on a narrow screen, same as
   image.html), a timeline or page panel underneath, page tabs at the foot */
.vapp .vbody{flex:1;display:flex;flex-direction:column;min-height:0}
.vapp .vmain{flex:1;display:flex;min-height:0}
.vapp .vcenter{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--canvas)}
.vapp .vbottom{flex:0 0 clamp(200px,36vh,380px);min-height:0;border-top:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column}
.vapp .vbottom.colorpanel{flex-basis:clamp(240px,40vh,400px)}
.vapp .vbottom.pool{flex-basis:clamp(220px,42vh,440px)}
.pagebar{flex:0 0 44px;display:flex;justify-content:center;gap:4px;border-top:1px solid var(--line);background:var(--panel);padding:0 8px;overflow-x:auto}
.pagetab{display:flex;align-items:center;gap:7px;background:transparent;border:0;border-top:2px solid transparent;
  color:var(--faint);padding:0 16px;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap}
.pagetab:hover{color:var(--ink)}
.pagetab.on{color:var(--accent);border-top-color:var(--accent)}
.menubtn.on{background:var(--accent-soft);color:var(--accent)}

/* viewer */
.viewer{flex:1;display:flex;flex-direction:column;min-height:0}
.vbar{height:38px;flex:0 0 38px;display:flex;align-items:center;gap:6px;padding:0 10px;border-bottom:1px solid var(--line);background:var(--panel)}
.vbar .sp{flex:1}
.vtitle{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qsel{width:auto;padding:3px 6px;font-size:11px;background:var(--bg)}
.vscreen{flex:1;min-height:0;display:grid;place-items:center;overflow:hidden;padding:8px;position:relative}
.vframe{position:relative;background:#000;box-shadow:0 6px 30px rgba(0,0,0,.45);touch-action:none}
.vcanvas{display:block;width:100%;height:100%}
.vover{position:absolute;inset:0;pointer-events:none}
.vsel{position:absolute;outline:1.5px solid var(--pick);pointer-events:auto;cursor:move}
.vh{position:absolute;width:11px;height:11px;background:#fff;border:1.5px solid var(--pick);border-radius:2px;cursor:nwse-resize}
.vh.rot{border-radius:50%;transform:translateX(-50%);cursor:grab}
.safe{position:absolute;inset:0;pointer-events:none}
.safe-a{position:absolute;inset:5%;border:1px dashed rgba(255,255,255,.35)}
.safe-t{position:absolute;inset:10%;border:1px dashed rgba(255,255,255,.22)}
.transport{height:44px;flex:0 0 44px;display:flex;align-items:center;gap:4px;padding:0 10px;border-top:1px solid var(--line);background:var(--panel)}
.transport .sp{flex:1}
.tc{font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace;font-size:12px;font-variant-numeric:tabular-nums;color:var(--ink)}
.tc.dim{color:var(--faint)}
.playbtn{width:36px;height:36px;border-radius:50%;border:0;background:var(--accent);color:#1b0d06;display:grid;place-items:center;cursor:pointer;margin:0 4px}
.emptyview{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--faint);max-width:340px;text-align:center}
.srcscreen{background:#000}
.srcmedia{max-width:100%;max-height:100%;display:block}
.srcaudio{display:flex;flex-direction:column;align-items:center;gap:10px;color:var(--dim)}
.srcscrub{position:relative;padding:6px 12px 0;background:var(--panel)}
.srcscrub input{width:100%;accent-color:var(--accent);position:relative;z-index:1}
.srcrange{position:absolute;top:8px;height:16px;background:var(--accent-soft);border:1px solid var(--accent);border-radius:4px;margin-left:12px;max-width:calc(100% - 24px)}
.srcactions{display:flex;gap:8px;flex-wrap:wrap;padding:10px;background:var(--panel);border-top:1px solid var(--line)}

/* timeline */
.tl{flex:1;display:flex;flex-direction:column;min-height:0}
.tl .tlbar{height:36px;flex:0 0 36px;gap:2px;padding:0 6px;overflow-x:auto}
.tl .tlbar .sp{flex:1}
.tl .divider{width:1px;height:18px;background:var(--line2);margin:0 3px;flex:0 0 1px}
.tlbody{flex:1;overflow:auto;position:relative;min-height:0;touch-action:pan-x pan-y}
.tlbody[data-tool="blade"] .tclip{cursor:crosshair}
.tlinner{position:relative;min-height:100%}
.tlruler{position:sticky;top:0;z-index:6;height:24px;background:var(--panel2);border-bottom:1px solid var(--line);cursor:col-resize}
.tlcorner{position:sticky;left:0;height:24px;background:var(--panel2);border-right:1px solid var(--line);z-index:7;display:flex;align-items:center;padding-left:8px}
.tick{position:absolute;top:16px;height:8px;border-left:1px solid var(--line2)}
.tick.major{top:6px;height:18px;border-left-color:#4a4a58}
.tick span{position:absolute;left:3px;top:-3px;font-size:9.5px;color:var(--faint);white-space:nowrap;font-variant-numeric:tabular-nums}
.tlrange{position:absolute;top:0;bottom:0;background:rgba(77,141,255,.07);border-left:1px solid rgba(77,141,255,.55);border-right:1px solid rgba(77,141,255,.55);pointer-events:none;z-index:1}
.tltrack{position:relative;height:46px;border-bottom:1px solid var(--line)}
.tltrack.audio{height:40px}
.tltrack.main{height:56px;background:rgba(255,107,61,.025)}
.tltrack.locked .tllane{background:repeating-linear-gradient(135deg,transparent 0 8px,rgba(255,255,255,.025) 8px 16px)}
.tlhead{position:sticky;left:0;z-index:5;height:100%;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;justify-content:center;gap:3px;padding:0 6px}
.tn{font-size:11px;font-weight:650;color:var(--dim);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tn i{font-style:normal;font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-left:5px}
.tbtns{display:flex;gap:2px}
.tb{width:20px;height:18px;border-radius:4px;border:1px solid var(--line2);background:var(--bg);color:var(--dim);font-size:9.5px;font-weight:700;display:grid;place-items:center;cursor:pointer;padding:0}
.tb.off{opacity:.4}
.tb.on{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.tllane{position:absolute;top:0;bottom:0;right:0}
.tclip{position:absolute;top:4px;bottom:4px;border-radius:6px;overflow:hidden;cursor:grab;border:1px solid rgba(255,255,255,.12);
  background:#2b3a55;color:#fff;font-size:10.5px;touch-action:none;user-select:none;-webkit-user-select:none}
.tclip.video{background:#22324d}
.tclip.image{background:#2f3d2b}
.tclip.audio{background:#173823;border-color:rgba(74,222,128,.35)}
.tclip.text{background:#5a2f6b;border-color:rgba(220,160,255,.35)}
.tclip.shape,.tclip.solid{background:#6b3a22}
.tclip.adjust{background:repeating-linear-gradient(135deg,#3a3a46 0 6px,#33333d 6px 12px)}
.tclip.design{background:#1f4a4f;border-color:rgba(94,234,212,.35)}
.tclip.frames{background:#4f3a1f;border-color:rgba(251,191,36,.4)}
.tclip.sel{outline:2px solid var(--accent);outline-offset:-1px;z-index:2}
.tcstrip{position:absolute;inset:0;width:100%;height:100%;opacity:.85;pointer-events:none}
.tcname{position:absolute;left:6px;top:3px;right:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600;
  text-shadow:0 1px 2px rgba(0,0,0,.8);pointer-events:none;display:flex;align-items:center;gap:3px}
.tcbadges{position:absolute;right:6px;bottom:3px;display:flex;gap:3px;pointer-events:none}
.tcbadges b{font-size:8.5px;font-weight:700;background:rgba(0,0,0,.6);padding:0 4px;border-radius:3px;text-transform:uppercase}
.tctr{position:absolute;top:0;bottom:0;z-index:3;background:linear-gradient(90deg,rgba(255,255,255,.05),rgba(255,255,255,.35),rgba(255,255,255,.05));
  border-left:1px solid rgba(255,255,255,.5);border-right:1px solid rgba(255,255,255,.5);cursor:pointer}
.tclip .tctr{left:0}
.tcfade{position:absolute;left:0;right:0;top:2px;height:calc(100% - 4px);width:100%;color:#fbbf24;pointer-events:none}
.tckf{position:absolute;bottom:2px;width:7px;height:7px;background:#fbbf24;transform:translateX(-50%) rotate(45deg);pointer-events:none;border:1px solid #000}
.tch{position:absolute;top:0;bottom:0;width:8px;cursor:ew-resize;z-index:4}
.tch.l{left:0}.tch.r{right:0}
.tclip.sel .tch{background:rgba(255,107,61,.55)}
.tclip.sel .tch.l{border-radius:5px 0 0 5px}.tclip.sel .tch.r{border-radius:0 5px 5px 0}
.tlplayhead{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--accent);z-index:4;pointer-events:none}
.tlplayhead::before{content:'';position:absolute;top:0;left:-5px;border:6px solid transparent;border-top-color:var(--accent)}
.tlmark{position:absolute;top:2px;width:10px;height:10px;margin-left:-5px;background:#4d8dff;transform:rotate(45deg);z-index:7;cursor:pointer}

/* new-project screen */
.newopts{display:flex;gap:16px;flex-wrap:wrap;justify-content:center;width:100%;max-width:900px;margin-bottom:18px}
.newopts .field{margin:0}
.newopts .seg button{padding:6px 11px;white-space:nowrap}
.dotsw{display:inline-block;width:10px;height:10px;border-radius:50%;border:1px solid var(--line2);margin-right:5px;vertical-align:-1px}
.fmtpv{position:relative}
.fmtbox{border-radius:3px;border:1px solid rgba(255,255,255,.18);box-shadow:0 2px 10px rgba(0,0,0,.4)}

/* library */
.libtabs{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;padding:0 8px 8px;border-bottom:1px solid var(--line)}
.libtab{display:flex;flex-direction:column;align-items:center;gap:3px;background:transparent;border:0;border-radius:8px;color:var(--faint);padding:6px 0;font-size:9px;cursor:pointer}
.libtab:hover{background:var(--panel2);color:var(--ink)}
.libtab.on{background:var(--accent-soft);color:var(--accent)}
.ltile{display:flex;align-items:center;gap:10px;padding:6px;border-radius:var(--r-sm);cursor:pointer;border:1px solid transparent;margin-bottom:3px}
.ltile:hover{background:var(--panel2)}
.ltile.on{border-color:var(--accent);background:var(--accent-soft)}
.lthumb{width:64px;height:40px;flex:0 0 64px;border-radius:6px;overflow:hidden;background:var(--bg);display:grid;place-items:center;color:var(--dim)}
.lthumb img{width:100%;height:100%;object-fit:cover}
.ltext{flex:1;min-width:0}
.ltext b{display:block;font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ltext span{display:block;font-size:10.5px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lplus{width:24px;height:24px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;flex:0 0 24px}
.ttpv{font-size:17px;color:#fff;border-radius:3px}
.solidpv{width:40px;height:26px;border-radius:4px;background:#1b2a52;border:1px solid var(--line2)}
.trpv{width:44px;height:26px;border-radius:4px;background:linear-gradient(90deg,#3a5a8a 50%,#b06a3a 50%)}
.trpv.tr-dissolve{background:linear-gradient(90deg,#3a5a8a,#b06a3a)}
.trpv.tr-dipblack{background:linear-gradient(90deg,#3a5a8a,#000 50%,#b06a3a)}
.trpv.tr-dipwhite{background:linear-gradient(90deg,#3a5a8a,#fff 50%,#b06a3a)}
.trpv.tr-iris{background:radial-gradient(circle,#b06a3a 40%,#3a5a8a 42%)}
.trpv.tr-zoom{background:radial-gradient(circle,#b06a3a 30%,#3a5a8a 70%)}
.trpv.tr-blur{background:linear-gradient(90deg,#3a5a8a,#7a7a8a,#b06a3a);filter:blur(1.5px)}
.trpv.tr-slideup{background:linear-gradient(180deg,#3a5a8a 50%,#b06a3a 50%)}

/* inspector rows */
.clipid{padding:12px 2px 4px}
.clipid b{display:block;font-size:13px;font-weight:620;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.clipid span{font-size:10.5px;color:var(--faint);font-variant-numeric:tabular-nums}
.krow{display:grid;grid-template-columns:86px 1fr 58px 24px;align-items:center;gap:6px;margin-bottom:7px}
.krow:not(:has(.kfb)){grid-template-columns:86px 1fr 58px}
.krow label{font-size:10.5px;color:var(--faint);letter-spacing:.02em}
.krow .kvn{padding:4px 5px;font-size:11px}
.kfb{width:24px;height:24px;border-radius:6px;border:1px solid var(--line2);background:var(--bg);color:var(--faint);display:grid;place-items:center;cursor:pointer;padding:0}
.kfb.some{color:#b88b2c}
.kfb.on{color:#1b0d06;background:#fbbf24;border-color:#fbbf24}
.kfb:disabled{opacity:.35;cursor:default}
.four{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.cpair{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:11px}
.cpair label{display:block;font-size:10.5px;color:var(--faint);margin-bottom:4px;letter-spacing:.03em;text-transform:uppercase}
.minisw{width:22px;height:22px;border-radius:6px;border:1px solid var(--line2);cursor:pointer;flex:0 0 22px}
.speedpresets{display:grid;grid-template-columns:repeat(6,1fr);gap:4px;margin-bottom:10px}
.speedpresets button{background:var(--bg);border:1px solid var(--line2);border-radius:7px;padding:6px 0;font-size:11px;cursor:pointer;color:var(--dim)}
.speedpresets button.on{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;font-size:11.5px;margin:6px 0}
.kv span{color:var(--faint)}
.kv b{font-weight:550;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kv.keys b{text-align:left;white-space:normal}
.cpwrap{display:grid;grid-template-columns:1fr 1fr;gap:18px}

/* media page */
.poolwrap{flex:1;overflow-y:auto;padding:10px 12px 16px}
.poolhead{display:flex;align-items:center;gap:10px;margin:6px 2px 10px}
.poolhead b{font-size:12.5px}
.poolhead .muted{font-size:11px}
.poolhead .sp{flex:1}
.poolgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:10px;margin-bottom:14px}
.ptile{border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden;cursor:pointer;background:var(--panel2)}
.ptile:hover{border-color:var(--line2)}
.ptile.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.pthumb{position:relative;aspect-ratio:16/9;background:#000;display:grid;place-items:center;color:var(--dim)}
.pthumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.pdur{position:absolute;right:5px;bottom:4px;font-size:9.5px;background:rgba(0,0,0,.7);padding:1px 5px;border-radius:4px;font-variant-numeric:tabular-nums}
.pkind{position:absolute;left:5px;bottom:4px;color:var(--good)}
.pname{font-size:11.5px;font-weight:600;padding:6px 8px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pmeta{font-size:10px;color:var(--faint);padding:0 8px 7px}

/* color page */
.cstrip{flex:0 0 auto;display:flex;gap:8px;overflow-x:auto;padding:8px 10px;border-bottom:1px solid var(--line)}
.cclip{flex:0 0 96px;cursor:pointer;border-radius:6px;padding:3px;border:1px solid transparent}
.cclip.on{border-color:var(--accent);background:var(--accent-soft)}
.ccthumb{aspect-ratio:16/9;background:#000;border-radius:4px;overflow:hidden;display:grid;place-items:center;color:var(--dim)}
.ccthumb img{width:100%;height:100%;object-fit:cover}
.cclip span{display:block;font-size:9.5px;color:var(--faint);padding-top:3px;font-variant-numeric:tabular-nums}
.cwheels{flex:1;min-height:0;overflow:auto;display:flex;gap:16px;padding:10px 14px;align-items:flex-start}
.wheelbox{flex:0 0 132px;display:flex;flex-direction:column;align-items:center;gap:6px}
.wtitle{display:flex;align-items:baseline;gap:6px;width:100%}
.wtitle b{font-size:12px}
.wtitle span{font-size:10px;color:var(--faint);flex:1}
.wreset{background:transparent;border:0;color:var(--faint);cursor:pointer;font-size:14px}
.wheel{position:relative;width:118px;height:118px;border-radius:50%;cursor:crosshair;touch-action:none;
  background:radial-gradient(circle,rgba(30,30,36,1) 0,rgba(30,30,36,.15) 62%,transparent 70%),conic-gradient(from 90deg,#f44,#f4f,#44f,#4ff,#4f4,#ff4,#f44);
  border:1px solid var(--line2);box-shadow:inset 0 0 0 10px rgba(0,0,0,.35)}
.wheel::after{content:'';position:absolute;left:50%;top:50%;width:6px;height:6px;margin:-3px;border-radius:50%;background:rgba(255,255,255,.3)}
.puck{position:absolute;width:14px;height:14px;margin:-7px;border-radius:50%;border:2px solid #fff;background:rgba(0,0,0,.4);box-shadow:0 1px 4px rgba(0,0,0,.6);pointer-events:none}
.wheelbox .slider{width:118px}
.wval{font-size:10px;color:var(--faint);font-variant-numeric:tabular-nums}
.primaries{flex:1;min-width:280px;max-width:520px}
.lookgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.look{cursor:pointer;border:1px solid var(--line);border-radius:7px;overflow:hidden;background:var(--bg)}
.look.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.lookcv{display:block;width:100%;aspect-ratio:16/9;background:#000}
.look span{display:block;font-size:10.5px;padding:4px 6px;color:var(--dim)}
.scope{width:100%;display:block;background:#0b0b0e;border-radius:6px;border:1px solid var(--line)}

/* audio page */
.recbox{display:flex;gap:12px;align-items:center;margin-bottom:8px}
.recbox b{font-size:12.5px}
.recbtn{width:44px;height:44px;flex:0 0 44px;border-radius:50%;border:2px solid #f87171;background:transparent;color:#f87171;display:grid;place-items:center;cursor:pointer}
.recbtn.on{background:#f87171;color:#fff;animation:recpulse 1.2s infinite}
@keyframes recpulse{50%{box-shadow:0 0 0 6px rgba(248,113,113,.2)}}
.micmeter{width:100%;height:8px;border-radius:4px;background:var(--bg);display:block;margin-bottom:6px}
.mixer{display:flex;gap:6px;overflow-x:auto;padding:10px 0 4px}
.strip{flex:0 0 58px;display:flex;flex-direction:column;align-items:center;gap:6px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px 4px}
.strip.master{border-color:rgba(255,107,61,.4)}
.strip b{font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.mstack{display:flex;gap:5px;align-items:stretch;height:150px}
.meter{width:10px;height:150px;border-radius:3px;display:block}
.fader{writing-mode:vertical-lr;direction:rtl;width:18px;height:150px;accent-color:var(--accent);padding:0}
.fdb{font-size:9.5px;color:var(--dim);font-variant-numeric:tabular-nums}
.pan{width:50px;accent-color:var(--pick);padding:0}
.ms{display:flex;gap:3px}
.ms button{width:22px;height:20px;border-radius:4px;border:1px solid var(--line2);background:var(--bg);color:var(--dim);font-size:10px;font-weight:700;cursor:pointer;padding:0}
.ms button.on.m{background:#f87171;color:#fff;border-color:#f87171}
.ms button.on.s{background:#fbbf24;color:#1b0d06;border-color:#fbbf24}

/* deliver page */
.job{border:1px solid var(--line);border-radius:var(--r-sm);padding:10px;margin:10px 0;background:var(--panel2)}
.job.done{border-color:rgba(74,222,128,.4)}
.job.failed{border-color:rgba(248,113,113,.5)}
.jtop{display:flex;justify-content:space-between;gap:8px;font-size:12px}
.jtop b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jtop span{color:var(--faint);font-size:11px;flex:0 0 auto}
.jbar{height:6px;border-radius:3px;background:var(--bg);margin:8px 0 6px;overflow:hidden}
.jbar i{display:block;height:100%;background:var(--accent);transition:width .2s}
.job.done .jbar i{background:var(--good)}
.jmeta{font-size:10.5px;color:var(--faint);margin-bottom:6px;word-break:break-word}
.btn[disabled]{opacity:.45;cursor:not-allowed}

@media(max-width:1000px){
  .vapp .vbottom{flex-basis:clamp(180px,34vh,320px)}
  .cwheels{gap:10px}
}
@media(max-width:720px){
  .vapp .rail{display:none}
  .pagetab{padding:0 10px;font-size:11px}
  .pagetab span{display:none}
  .pagetab.on span{display:inline}
  .vapp .vbottom{flex-basis:clamp(170px,38vh,300px)}
  .vapp .vbottom.colorpanel{flex-basis:46vh}
  .transport{gap:2px;padding:0 6px}
  .tltrack{height:40px}.tltrack.main{height:48px}.tltrack.audio{height:34px}
  .wheelbox{flex-basis:108px}.wheel{width:96px;height:96px}.wheelbox .slider{width:96px}
  .cpwrap{grid-template-columns:1fr}
  .vbar .zoom{display:none}
}
/* A closed drawer waits off-screen (translated past the right edge); the
   root must not count that as scrollable width, or a phone browser zooms
   the whole page out to fit it in. */
html:has(.vapp){overflow:hidden}
@media(max-width:720px){
  .vapp .deskonly{display:none !important}
  .cwheels{flex-wrap:wrap;justify-content:center}
  .primaries{min-width:0;flex-basis:100%}
}

/* ── image module: transform box, guides, on-canvas text, notes, anchor ── */
.xform{transform-origin:50% 50%;z-index:5}
.xhandle{width:10px;height:10px;touch-action:none;z-index:2}
.xstick{position:absolute;left:50%;top:-22px;width:1px;height:22px;background:var(--pick);pointer-events:none}
.xrotate{left:calc(50% - 6px);top:-30px;width:12px;height:12px;cursor:grab;touch-action:none;z-index:2}
.guide{position:absolute;background:#ff3dd2;pointer-events:none;z-index:6}
.textedit{position:absolute;z-index:8;border:1.5px dashed var(--pick);padding:0;margin:0;resize:none;overflow:hidden;
  transform-origin:50% 50%;outline:none;white-space:pre-wrap;word-break:normal;min-width:20px}
.noterow{display:flex;gap:10px;align-items:flex-start;padding:10px 4px;border-bottom:1px solid var(--line)}
.noterow > div{flex:1;min-width:0}
.noterow p{margin:3px 0 0;font-size:13px;word-break:break-word}
.anchorgrid{display:grid;grid-template-columns:repeat(3,30px);gap:4px}
.anchorgrid button{width:30px;height:30px;border-radius:6px;border:1px solid var(--line2);background:var(--bg);cursor:pointer}
.anchorgrid button.on{background:var(--accent);border-color:var(--accent)}
@media(max-width:720px){ .xhandle{width:16px;height:16px;margin:-3px} .xrotate{width:18px;height:18px;top:-36px;left:calc(50% - 9px)} .xstick{top:-26px;height:26px} }

/* ══ image module, second generation: chooser, tools, options bar, library ══ */
.home.newscreen{align-items:stretch}
.newwrap{width:100%;max-width:1180px;margin:0 auto;display:flex;flex-direction:column;align-items:center}
.newwrap .grp{align-self:stretch}
.sizerow{display:flex;gap:8px;flex-wrap:wrap;align-self:stretch;margin-bottom:6px}
.sizechip{display:flex;flex-direction:column;align-items:flex-start;gap:1px;padding:9px 13px;border-radius:10px;border:1px solid var(--line);background:var(--panel);cursor:pointer;color:var(--ink);text-align:left}
.sizechip:hover{border-color:var(--accent)}
.sizechip b{font-size:12.5px;font-weight:600}.sizechip span{font-size:10.5px;color:var(--faint)}
.catrow{display:flex;gap:6px;flex-wrap:wrap;align-self:stretch;margin-bottom:14px}
.catchip{padding:6px 13px;border-radius:99px;border:1px solid var(--line2);background:transparent;color:var(--dim);cursor:pointer;font-size:12px}
.catchip.on{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.tplgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px;align-self:stretch;align-items:start}
.tplcard{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;cursor:pointer;background:var(--panel)}
.tplcard:hover{border-color:var(--accent)}
.tplcard .lb{padding:8px 10px;font-size:11.5px}.tplcard .lb b{display:block;font-size:12px;font-weight:550}.tplcard .lb span{color:var(--faint);font-size:10.5px}
.tplthumb{width:100%;max-height:300px;background:var(--panel2) center/contain no-repeat;transition:opacity .2s;opacity:.4}
.tplthumb.ready{opacity:1}
.tplcard .tplthumb{background-size:cover}
.recent-item{align-items:center}
.recent-thumb{width:56px;height:40px;object-fit:cover;border-radius:6px;flex:0 0 56px;background:var(--panel2)}
.imageapp .stage{position:relative}
.surfacewrap{flex:1;position:relative;display:flex;min-height:0;min-width:0}
.surfacewrap .surface{flex:1}
.antscv{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:7}
.optbar{min-height:40px;flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:5px 10px;border-bottom:1px solid var(--line);background:var(--panel2);overflow-x:auto;scrollbar-width:thin;white-space:nowrap}
.optbar .opttool{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--ink);padding-right:6px;border-right:1px solid var(--line2);flex:0 0 auto}
.opt{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--faint);flex:0 0 auto}
.opt input[type=range]{width:96px;accent-color:var(--accent)}
.opt b{font-weight:600;color:var(--dim);min-width:34px;font-variant-numeric:tabular-nums}
.opt select,.opt input.n{padding:4px 6px;font-size:11.5px;background:var(--bg);border:1px solid var(--line2);border-radius:6px}
.opt.chk input{accent-color:var(--accent)}
.opt.chk span{color:var(--dim)}
.optseg{flex:0 0 auto}.optseg button{padding:4px 9px;font-size:11px;white-space:nowrap}
.shapeseg button{padding:4px 7px;display:inline-flex;align-items:center}
.opthint{font-size:11px;color:var(--faint);white-space:normal;min-width:180px}
.optsw{width:30px;height:22px;border-radius:6px;border:1px solid var(--line2);cursor:pointer;position:relative;overflow:hidden}
.optsw i,.swatch i{position:absolute;inset:0;display:block}
.swatch{position:relative;overflow:hidden}
.swatch.sm{height:24px;width:44px;flex:0 0 44px}
.optgap{width:1px;height:20px;background:var(--line2);flex:0 0 1px}
.toolgrid.four{grid-template-columns:repeat(4,1fr);gap:5px}
.toolgrid.four .tool{font-size:8.5px;gap:3px;padding:3px;line-height:1.15}
.fgbg{position:relative;height:58px;margin:2px 0 4px}
.fgsw,.bgsw{position:absolute;width:38px;height:38px;border-radius:8px;border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line2);cursor:pointer}
.fgsw{left:4px;top:0;z-index:2}.bgsw{left:26px;top:18px}
.swapbtn{position:absolute;left:74px;top:4px;padding:4px}.resetbtn{position:absolute;left:74px;top:30px;padding:4px}
.surface[data-tool^="marquee"],.surface[data-tool="lasso"],.surface[data-tool="polylasso"],.surface[data-tool="wand"],.surface[data-tool="range"],.surface[data-tool="gradient"],
.surface[data-tool="pen"],.surface[data-tool="shape"],.surface[data-tool="line"],.surface[data-tool="frame"],.surface[data-tool="freehand"]{cursor:crosshair}
.surface[data-tool="pencil"],.surface[data-tool="spray"],.surface[data-tool="clone"],.surface[data-tool="heal"],.surface[data-tool="spotheal"],.surface[data-tool="smudge"],
.surface[data-tool="blurb"],.surface[data-tool="sharpb"],.surface[data-tool="dodge"],.surface[data-tool="burn"],.surface[data-tool="sponge"],.surface[data-tool="creplace"],.surface[data-tool="quicksel"]{cursor:none}
.surface[data-tool="brush"],.surface[data-tool="eraser"]{cursor:none}
.surface[data-tool="magicerase"]{cursor:cell}
.surface[data-tool="node"]{cursor:default}
.paintedit{display:block}
.gradbar{height:16px;border-radius:5px;border:1px solid var(--line2);margin-bottom:6px}
.stoprow{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.stoprow .slider{flex:1}
.gradchips{display:grid;grid-template-columns:repeat(10,1fr);gap:4px;margin-top:6px}
.gradchips.big{grid-template-columns:repeat(5,1fr);gap:6px}
.gchip{aspect-ratio:1;border-radius:5px;cursor:pointer;border:1px solid var(--line2)}
.gradchips.big .gchip{aspect-ratio:1.4;border-radius:8px}
.effectgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:10px}
.effectchip{border:1px solid var(--line2);border-radius:8px;padding:6px 2px;text-align:center;cursor:pointer;background:var(--bg)}
.effectchip:hover{border-color:var(--accent)}
.effectchip b{display:block;font-size:17px;font-weight:800;color:#ff9d7a;line-height:1.3}
.effectchip span{font-size:9.5px;color:var(--faint)}
.field .four{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}
.fxrow{margin:2px 0}
.fxbody{padding:6px 0 4px 22px}
.maskrow{display:flex;gap:10px;align-items:flex-start;margin-bottom:8px}
.maskrow img{width:56px;height:56px;border-radius:6px;border:1px solid var(--line2);object-fit:contain;background:#000;flex:0 0 56px}
.layerrow .thumb img{object-fit:contain}
.layerrow .mthumb{background:#000}
.layerrow .mthumb.editing{outline:2px solid var(--accent)}
.layerrow.clipped{margin-left:16px}
.clipmark{color:var(--accent);font-size:12px;flex:0 0 auto}
.layerrow .nm svg{vertical-align:-1px;opacity:.6}
.histrow.future{opacity:.45}
.lookgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.lookchip{padding:9px 4px;border:1px solid var(--line2);border-radius:8px;text-align:center;font-size:11.5px;cursor:pointer;background:var(--bg)}
.lookchip:hover{border-color:var(--accent);color:var(--accent)}
.filtwrap{display:grid;grid-template-columns:220px 1fr;gap:16px;min-height:420px}
.filtlist{max-height:62vh;overflow-y:auto;border-right:1px solid var(--line);padding-right:10px}
.filtmain{min-width:0}
.rangewrap{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
.rangewrap canvas{width:100%;border-radius:8px;border:1px solid var(--line2)}
.nodept{position:absolute;width:10px;height:10px;background:#fff;border:1.5px solid var(--pick);pointer-events:auto;cursor:move;touch-action:none;z-index:6}
.nodept.smooth{border-radius:50%}
.nodept.on{background:var(--pick)}
.nodehandle{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--pick);pointer-events:auto;cursor:pointer;touch-action:none;z-index:6}
.xform.nodebox{outline-style:dashed}
.xform.nodebox .xstick,.xform.nodebox .xrotate{display:none}
.xform.multi{outline-style:dashed}
.libgrid{display:grid;gap:7px;margin-bottom:6px}
.libgrid.two{grid-template-columns:1fr 1fr}.libgrid.four{grid-template-columns:repeat(4,1fr)}.libgrid.six{grid-template-columns:repeat(4,1fr)}
.libitem{cursor:pointer;font-size:10.5px;color:var(--dim)}
.libitem .tplthumb{border-radius:8px;border:1px solid var(--line);background-size:cover;margin-bottom:3px}
.libitem:hover .tplthumb{border-color:var(--accent)}
.libicon{aspect-ratio:1;border:1px solid var(--line);border-radius:8px;display:grid;place-items:center;cursor:pointer;color:var(--dim);background:var(--bg)}
.libicon:hover{border-color:var(--accent);color:var(--accent)}
.libicon img{width:78%;height:78%;object-fit:contain}
.libicon canvas{width:80%;height:80%;border-radius:4px}
.libicon.tall img{width:86%;height:86%}
.libphoto{position:relative;aspect-ratio:1.4;border-radius:8px;overflow:hidden;cursor:pointer;border:1px solid var(--line)}
.libphoto img{width:100%;height:100%;object-fit:cover;display:block}
.libphoto:hover{border-color:var(--accent)}
.libdel{position:absolute;top:3px;right:3px;padding:3px;background:rgba(0,0,0,.6);color:#fff}
.textadd{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin-bottom:7px;cursor:pointer;background:var(--bg);color:var(--ink)}
.textadd:hover{border-color:var(--accent)}
.textadd.big{font-size:22px;font-weight:800;font-family:'Montserrat',system-ui,sans-serif}
.textadd.mid{font-size:16px;font-weight:600;font-family:'Poppins',system-ui,sans-serif}
.textadd.small{font-size:12.5px}
.textcombo{border:1px solid var(--line);border-radius:8px;overflow:hidden;cursor:pointer;aspect-ratio:2;background:#22222b}
.textcombo:hover{border-color:var(--accent)}
.textcombo img{width:100%;height:100%;object-fit:cover;display:block}
.kv.keys{grid-template-columns:auto 1fr}
@media(max-width:720px){
  .filtwrap{grid-template-columns:1fr}.filtlist{max-height:30vh;border-right:0;border-bottom:1px solid var(--line);padding:0 0 8px}
  .tplgrid{grid-template-columns:repeat(2,1fr);gap:10px}
  .optbar{gap:8px;padding:5px 8px}.opt input[type=range]{width:72px}
  .nodept{width:16px;height:16px;margin:-3px}.nodehandle{width:14px;height:14px;margin:-3px}
}
html:has(.imageapp){overflow:hidden}
.imageapp .insp .tab{padding:11px 7px;font-size:11px}
.optbar{height:40px;flex:0 0 40px;flex-wrap:nowrap}
.opthint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:420px;min-width:0;flex:0 1 auto}

/* ── video & animation: elements, design layers, animate page, new screen ── */
.newhead{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--faint);margin:34px 0 11px;width:100%;max-width:900px}
.newgif{width:56%;height:auto;image-rendering:auto}
.tplword{width:100%;height:100%;display:grid;place-items:center;font-size:22px}
.stkgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.stk{aspect-ratio:1;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg);display:grid;place-items:center;cursor:pointer;overflow:hidden}
.stk:hover{border-color:var(--accent)}
.stk img{width:84%;height:84%;object-fit:contain}
.phgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.ph{position:relative;aspect-ratio:1;border-radius:var(--r-sm);overflow:hidden;background:var(--bg);border:1px solid var(--line)}
.ph img{width:100%;height:100%;object-fit:cover;cursor:pointer;display:block}
.ph .menubtn{position:absolute;right:3px;bottom:3px;width:24px;height:24px;padding:0;min-width:0;background:rgba(0,0,0,.6);color:#fff;border-radius:6px;display:grid;place-items:center}
.ph:hover{border-color:var(--accent)}
.dlrow{display:flex;align-items:center;gap:8px;padding:4px 2px;border-bottom:1px solid var(--line)}
.dlrow .m{flex:1;min-width:0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dlrow .m.off{opacity:.4;text-decoration:line-through}
.dlrow .r{font-size:9.5px;font-weight:700;text-transform:uppercase;color:var(--faint)}
.dltext{padding:6px 0 10px}
.dltext textarea{width:100%;min-height:52px;margin-bottom:6px}
.dltext .two{display:flex;gap:8px;align-items:center}
.dltext .two .n{width:80px}
.anstage{position:relative;box-shadow:0 4px 24px rgba(0,0,0,.45);touch-action:none;cursor:crosshair}
.anstage canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.anstage #anover{pointer-events:none}
/* see-through paper reads as paper: a light check, so dark ink stays visible */
.anstage.checker{background-color:#ffffff;background-image:linear-gradient(45deg,#e6e6e6 25%,transparent 25%),linear-gradient(-45deg,#e6e6e6 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e6e6e6 75%),linear-gradient(-45deg,transparent 75%,#e6e6e6 75%)}
.vapp .vbottom.anim{flex-basis:clamp(150px,24vh,210px)}
.anbottom{display:flex;flex-direction:column;height:100%;min-height:0}
.anbar{display:flex;align-items:center;gap:4px;padding:6px 10px;border-bottom:1px solid var(--line);flex-wrap:nowrap;overflow-x:auto}
.anbar .zoom{font-size:11px;color:var(--dim);padding:0 3px}
.anstrip{flex:1;min-height:0;display:flex;gap:8px;align-items:center;padding:8px 10px;overflow-x:auto}
.anframe{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:3px;padding:4px;border-radius:8px;border:2px solid transparent;cursor:pointer}
.anframe canvas{display:block;max-height:80px;max-width:80px;border-radius:4px;border:1px solid var(--line2)}
.anframe span{font-size:10px;color:var(--faint);font-weight:600}
.anframe.on{border-color:var(--accent);background:var(--accent-soft)}
.anframe.on span{color:var(--accent)}
.anadd{flex:0 0 52px;height:52px;border-radius:10px;border:1px dashed var(--line2);background:transparent;color:var(--dim);display:grid;place-items:center;cursor:pointer}
.anadd:hover{border-color:var(--accent);color:var(--accent)}
@media (max-width:720px){
  .libtabs{grid-template-columns:repeat(4,1fr)}
  .stkgrid{grid-template-columns:repeat(4,1fr)}
  .vapp .vbottom.anim{flex-basis:150px}
  .anframe canvas{max-height:60px;max-width:60px}
}

/* ── regions, ranges, hand-offs ─────────────────────────────────────────── */
.vtools{margin-right:6px}
.vtools button{padding:4px 7px;display:grid;place-items:center}
.vframe[data-vtool="rect"],.vframe[data-vtool="ellipse"],.vframe[data-vtool="lasso"]{cursor:crosshair}
.vregion{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:3}
.vregion path{fill:none;vector-effect:non-scaling-stroke;stroke-width:1.5}
.vregion .ants{stroke:#000}
.vregion .ants2{stroke:#fff;stroke-dasharray:6 6;animation:vants .6s linear infinite}
.vregion .clipreg{stroke:#4ade80;stroke-dasharray:3 4;stroke-width:1.2}
@keyframes vants{to{stroke-dashoffset:-12}}
.regblock{border:1px solid var(--line);border-radius:var(--r);padding:2px 10px 10px;margin:10px 0;background:var(--panel2)}
.regblock .btns{gap:5px}
.tlrsel{position:absolute;top:1px;bottom:1px;background:rgba(77,141,255,.22);border:1px solid #4d8dff;border-radius:4px;pointer-events:none;z-index:3}
.tlbody[data-tool="range"] .tllane{cursor:text}
.addmode{margin-top:8px}
.addmode button{flex:1;padding:5px 4px;font-size:11px}
.handoffbar{display:flex;align-items:center;gap:10px;padding:7px 14px;background:linear-gradient(90deg,rgba(77,141,255,.18),rgba(255,107,61,.14));border-bottom:1px solid var(--line);font-size:12.5px}
.handoffbar b{font-weight:650}

/* ── audio & sound (audio.html) ──────────────────────────────────────────
   The video shell's frame (rail, panels, page tabs) with sound tools inside:
   a channel rack and canvases for the piano roll and playlist, mixer
   strips, playable instruments, two decks and a waveform editor */
html:has(.aapp){overflow:hidden}
.startpv{display:grid;place-items:center;color:var(--accent);background:radial-gradient(circle at 50% 40%,rgba(255,107,61,.16),transparent 70%),var(--bg)}
.search{width:100%;margin-bottom:8px}
.catchips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:8px}
.catchips .catchip{padding:4px 9px;font-size:11px}
.menubtn.rec{background:#f87171;color:#fff}
.playbtn.sm{width:28px;height:28px}
.atransport{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap}
.atransport .modeseg button{padding:4px 10px}
.atransport .sp{flex:1}
.bpm{display:flex;align-items:center;gap:4px;font-size:10.5px;color:var(--faint)}
.bpm input[type=number]{width:58px;padding:3px 5px}
.bpm input[type=range]{width:70px}
.rack{flex:1;min-height:0;overflow:auto;padding:8px 10px}
.rackrow{display:flex;align-items:center;gap:6px;padding:3px 4px;border-radius:7px}
.rackrow.sel{background:rgba(255,107,61,.08);outline:1px solid rgba(255,107,61,.35)}
.rackrow.muted .steps,.rackrow.muted .minroll{opacity:.35}
.led{width:12px;height:12px;border-radius:50%;border:1px solid var(--line2);background:#333;padding:0;cursor:pointer;flex:0 0 12px}
.led.on{background:#4ade80;box-shadow:0 0 6px rgba(74,222,128,.6)}
.chname{flex:0 0 120px;text-align:left;padding:5px 8px;border-radius:6px;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);font-size:11.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.mini{width:46px;flex:0 0 46px}
.insel{width:46px;padding:3px;font-size:11px;flex:0 0 46px}
.steps{flex:1;display:flex;gap:2px;min-width:0}
.step{flex:1;min-width:10px;height:26px;border-radius:4px;border:0;background:#2a2a32;cursor:pointer;padding:0;touch-action:none}
.step.alt{background:#23232a}
.step.on{background:rgba(255,107,61,calc(.45 + var(--v,.8) * .55))}
.step.acc{box-shadow:inset 0 0 0 2px #ffd27a}
.step.now{outline:2px solid #fff;outline-offset:-2px}
.step:nth-child(4n+1){margin-left:3px}
.minroll{flex:1;height:26px;position:relative;background:#1d1d24;border-radius:4px;cursor:pointer;overflow:hidden}
.minroll i{position:absolute;height:3px;background:#ff6b3d;border-radius:1px}
.addch{margin:8px 0 0 22px}
.vbottom.short{flex-basis:46px !important}
.vbottom.none{display:none}
.bwrap{display:flex;flex-direction:column;height:100%;min-height:0}
.btabs{display:flex;gap:2px;padding:4px 8px 0;border-bottom:1px solid var(--line)}
.btabs button{background:transparent;border:0;border-bottom:2px solid transparent;color:var(--faint);padding:6px 12px;font-size:12px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px}
.btabs button.on{color:var(--accent);border-bottom-color:var(--accent)}
.rollbar{display:flex;align-items:center;gap:6px;padding:5px 8px;border-bottom:1px solid var(--line);flex-wrap:nowrap;overflow-x:auto}
.rollbar .seg button{padding:4px 8px}
.cvscroll{flex:1;min-height:0;overflow:auto;position:relative;touch-action:none}
.cvspacer{position:absolute;left:0;top:0;pointer-events:none}
.stickycv{position:sticky;left:0;top:0;display:block}
.velcv{display:block;width:100%;flex:0 0 54px;border-top:1px solid var(--line);touch-action:none}
.mixer2{flex:1;display:flex;gap:6px;padding:10px;overflow-x:auto;min-height:0}
.mstrip{flex:0 0 96px;display:flex;flex-direction:column;align-items:stretch;gap:6px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:8px 6px;cursor:pointer}
.mstrip.sel{border-color:var(--accent)}
.mstrip.master{background:linear-gradient(var(--panel2),rgba(255,107,61,.06))}
.sname{width:100%;padding:3px 5px;font-size:11px;font-weight:650;text-align:center;background:var(--bg)}
.sfx{min-height:68px;display:flex;flex-direction:column;gap:2px}
.sfxrow{display:flex;align-items:center;gap:4px;font-size:10px;padding:3px 4px;border-radius:4px;background:var(--bg);white-space:nowrap;overflow:hidden}
.sfxrow.on{outline:1px solid var(--accent)}
.sfxrow.off span{opacity:.4;text-decoration:line-through}
.ledsm{width:8px;height:8px;border-radius:50%;border:0;padding:0;background:#444;flex:0 0 8px;cursor:pointer}
.ledsm.on{background:#4ade80}
.seq{display:flex;flex-direction:column;gap:2px;font-size:9px;color:var(--faint)}
.seq label{display:flex;align-items:center;gap:4px}
.seq input{width:100%}
.span{width:100%}
.sfader{display:flex;justify-content:center;gap:6px;height:150px}
.smeter{width:8px;height:150px;border-radius:2px}
.sdb{font-size:10px;text-align:center;color:var(--dim);font-variant-numeric:tabular-nums}
.sms{display:flex;gap:3px;justify-content:center}
.sms button{width:24px;height:20px;border-radius:4px;border:1px solid var(--line2);background:var(--bg);color:var(--dim);font-size:10px;font-weight:700;cursor:pointer;padding:0}
.sms button.on.m{background:#f87171;color:#fff}.sms button.on.s{background:#fbbf24;color:#1b0d06}
.sused{font-size:9px;color:var(--faint);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.playviews button{display:flex;align-items:center;gap:4px;padding:4px 9px}
.playarea{flex:1;min-height:0;display:flex;flex-direction:column;padding:10px;gap:10px;overflow:auto}
.kbwrap{flex:1;min-height:150px;display:flex;align-items:stretch}
.kbwrap.small{flex:0 0 110px;min-height:110px}
.kb{position:relative;flex:1;display:flex;--kw:calc(100% / var(--n));--bw:calc(var(--kw) * .62);touch-action:none;user-select:none;-webkit-user-select:none}
.wkey{flex:1;background:linear-gradient(#f4f4f6,#dcdce2);border:1px solid #888;border-radius:0 0 6px 6px;display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;color:#555;font-size:10px;cursor:pointer}
.wkey span{display:flex;flex-direction:column;align-items:center;gap:3px}
.wkey i,.bkey i,.pad i,.btile i{font-style:normal;font-size:9px;opacity:.55}
.wkey.down{background:linear-gradient(#ffd27a,#ff6b3d)}
.bkey{position:absolute;top:0;width:var(--bw);height:62%;background:linear-gradient(#2c2c33,#0d0d10);border-radius:0 0 5px 5px;z-index:2;cursor:pointer;display:flex;align-items:flex-end;justify-content:center;padding-bottom:6px;color:#bbb}
.bkey.down{background:linear-gradient(#ff6b3d,#b3261e)}
.kbbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fretboard{display:flex;flex-direction:column;gap:0;background:linear-gradient(#5b3a1f,#3e2614);border-radius:8px;padding:6px 0;touch-action:none;user-select:none;-webkit-user-select:none}
.gstring{display:flex;position:relative}
.gstring::after{content:'';position:absolute;left:0;right:0;top:50%;height:2px;background:linear-gradient(#e8e0c8,#a59a7c);pointer-events:none}
.gfret{flex:1;height:34px;border-right:2px solid #b8b8b8;display:grid;place-items:center;position:relative;cursor:pointer;z-index:1}
.gfret.open{flex:0 0 40px;border-right:5px solid #eee}
.gfret span{font-size:9px;color:#fff;background:rgba(0,0,0,.35);border-radius:8px;padding:0 4px;z-index:2}
.gfret.chord span{background:#ff6b3d}
.gfret.down{background:rgba(255,210,122,.35)}
.gfret.dot::before{content:'';position:absolute;width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.35);top:-5px}
.strumrow{display:flex;gap:12px;flex-wrap:wrap}
.chordgrid{flex:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(54px,1fr));gap:4px}
.chordbtn{padding:7px 4px;border-radius:7px;border:1px solid var(--line2);background:var(--panel2);color:var(--ink);font-weight:650;cursor:pointer}
.chordbtn.on{background:var(--accent);color:#1b0d06;border-color:var(--accent)}
.strumbtns{display:flex;flex-direction:column;gap:6px;width:200px}
.strumpad{flex:1;min-height:70px;border:1px dashed var(--line2);border-radius:10px;display:grid;place-items:center;color:var(--faint);font-size:12px;touch-action:none;background:repeating-linear-gradient(0deg,transparent 0 11px,rgba(255,255,255,.06) 11px 13px)}
.padgrid{flex:1;display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(4,1fr);gap:8px;min-height:240px;touch-action:none;user-select:none;-webkit-user-select:none}
.pad{border-radius:12px;background:linear-gradient(#2c2c35,#202027);border:1px solid #3a3a46;display:flex;flex-direction:column;justify-content:space-between;padding:8px;cursor:pointer;box-shadow:inset 0 -3px 0 rgba(0,0,0,.35)}
.pad b{font-size:11px;font-weight:600;color:var(--dim)}
.pad.down{background:linear-gradient(#ff8a5c,#ff6b3d);box-shadow:0 0 18px rgba(255,107,61,.5)}
.pad.down b{color:#1b0d06}
.pad.empty{opacity:.35}
.board{flex:1;display:grid;grid-template-columns:repeat(4,1fr);gap:8px;min-height:240px;touch-action:none;user-select:none;-webkit-user-select:none}
.btile{position:relative;border-radius:12px;background:color-mix(in srgb,var(--c) 22%,#1a1a20);border:1px solid color-mix(in srgb,var(--c) 55%,transparent);display:flex;flex-direction:column;justify-content:center;align-items:center;gap:3px;padding:8px;cursor:pointer;text-align:center}
.btile b{font-size:12.5px}
.btile span{font-size:10px;color:var(--faint)}
.btile i{position:absolute;left:8px;top:6px}
.btile.playing{background:var(--c);color:#111;box-shadow:0 0 20px color-mix(in srgb,var(--c) 60%,transparent)}
.btile.playing span{color:#222}
.btile .tedit{position:absolute;right:4px;top:4px}
.tilepick{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:2px}
.smpwave{flex:1;min-height:130px;border-radius:10px;overflow:hidden;background:#121216}
.smpwave canvas{display:block;touch-action:none}
.playfoot{display:flex;align-items:center;gap:6px;padding:7px 12px;height:100%}
.trow{display:flex;align-items:center;gap:6px;padding:6px 2px;border-bottom:1px solid var(--line)}
.trow .m{flex:1;min-width:0}
.trow .m b{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trow .m span{font-size:10.5px;color:var(--faint)}
.decks{flex:1;min-height:0;display:flex;gap:10px;padding:10px;overflow:auto}
.deck{flex:1;min-width:280px;display:flex;flex-direction:column;gap:8px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:10px}
.deck.drop{outline:2px dashed var(--accent);outline-offset:-4px}
.dhead{display:flex;align-items:center;gap:10px}
.dlabel{width:28px;height:28px;border-radius:7px;background:var(--accent);color:#1b0d06;display:grid;place-items:center;font-size:14px}
.dtitle{flex:1;min-width:0}
.dtitle b{display:block;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dtitle span{font-size:11px;color:var(--faint)}
.dover{display:block;width:100%;height:40px;border-radius:6px;cursor:pointer}
.dzoom{display:block;width:100%;height:74px;border-radius:6px}
.drow{display:flex;gap:14px;align-items:center;justify-content:center}
.platter{flex:0 0 160px;height:160px;border-radius:50%;cursor:grab;touch-action:none}
.platter canvas{display:block;width:100%;height:100%}
.dctl{display:flex;flex-direction:column;gap:7px;min-width:0}
.dbtns{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.dlab{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);margin:2px 0 -3px}
.hotcues,.loops{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}
.loops{grid-template-columns:repeat(6,1fr)}
.hc,.lp{padding:6px 0;border-radius:6px;border:1px solid var(--line2);background:var(--bg);color:var(--dim);font-weight:700;font-size:11px;cursor:pointer}
.hc.set{background:#fbbf24;color:#1b0d06;border-color:#fbbf24}
.lp.on{background:#4ade80;color:#06120f;border-color:#4ade80}
.nudge{display:flex;align-items:center;gap:6px;margin-left:auto}
.pitch{flex:0 0 58px;white-space:nowrap;font-variant-numeric:tabular-nums;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:10px;color:var(--dim)}
.pitch input{writing-mode:vertical-lr;direction:rtl;height:120px;width:20px;accent-color:var(--accent)}
.djmix{flex:0 0 200px;display:flex;flex-wrap:wrap;gap:8px;align-content:flex-start;background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:10px}
.mxstrip{flex:1;display:flex;flex-direction:column;gap:4px;font-size:9px;color:var(--faint);min-width:84px}
.mxstrip b{color:var(--ink);font-size:12px;text-align:center}
.mxstrip label{display:flex;flex-direction:column}
.chfader{display:flex;gap:6px;justify-content:center;height:120px;margin-top:4px}
.chfader .fader{height:120px}
.dvu{width:8px;height:120px;border-radius:2px}
.xfade{width:100%;display:flex;align-items:center;gap:6px;font-weight:700;font-size:11px;color:var(--dim)}
.xfade input{flex:1}
.mvol{width:100%;display:flex;flex-direction:column;font-size:9px;color:var(--faint)}
.edbar{display:flex;align-items:center;gap:4px;padding:6px 10px;border-bottom:1px solid var(--line);background:var(--panel);overflow-x:auto}
.edbar .sp{flex:1}
.edwave{flex:1;min-height:0;position:relative}
.edwave canvas{display:block;touch-action:none;cursor:text}
.edbottom{display:flex;align-items:center;gap:8px;padding:4px 10px;height:100%}
.edbottom canvas{flex:1;height:36px;border-radius:5px;cursor:pointer}
.aapp.page-editor .vbottom.short{flex-basis:clamp(56px,14vh,130px) !important}
.aapp.page-editor .edbottom canvas{height:calc(100% - 8px)}
@media (max-width:720px){
  .chname{flex-basis:76px}
  .mini.pan,.insel{display:none}
  .steps{flex-wrap:wrap;row-gap:3px}
  .step{flex:0 0 calc((100% - 39px) / 16);min-width:0;height:22px}
  .step:nth-child(16n+1){margin-left:0}
  .deck{min-width:240px}
  .platter{flex-basis:110px;height:110px}
  .platter canvas{width:110px;height:110px}
  .decks{flex-direction:column}
  .djmix{flex-basis:auto}
  .strumbtns{width:100%}
  .padgrid,.board{gap:6px}
}

/* ── context menus (shared by every discipline) ── */
.app,.app img,.app canvas{-webkit-touch-callout:none}
.ctxmenu{position:fixed;z-index:9000;min-width:220px;max-width:min(320px,calc(100vw - 12px));padding:5px;background:var(--panel);border:1px solid var(--line2);border-radius:10px;
  box-shadow:0 14px 40px rgba(0,0,0,.55);overflow-y:auto;overscroll-behavior:contain;font-size:13px;user-select:none;-webkit-user-select:none;animation:ctxin .08s ease-out}
.ctxmenu.sub{position:absolute;z-index:1;animation:none}
@keyframes ctxin{from{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}
.ctxitem{display:flex;align-items:center;gap:9px;width:100%;padding:7px 9px;border:0;border-radius:6px;background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer;white-space:nowrap}
.ctxitem .ci{width:16px;display:grid;place-items:center;color:var(--dim)}
.ctxitem .cl{flex:1;overflow:hidden;text-overflow:ellipsis}
.ctxitem .ck{color:var(--faint);font-size:11px;display:grid;place-items:center}
.ctxitem:focus-visible,.ctxitem.open{background:rgba(255,107,61,.14);outline:none}
@media (hover:hover){.ctxitem:hover{background:rgba(255,107,61,.14)}}
.ctxitem:active{background:rgba(255,107,61,.22)}
.ctxitem:focus{outline:none}.ctxitem:focus-visible{box-shadow:inset 0 0 0 1px rgba(255,107,61,.6)}
.ctxitem.on .ci{color:var(--accent)}
.ctxitem.danger{color:#f87171}.ctxitem.danger .ci{color:#f87171}
.ctxitem[disabled]{opacity:.38;cursor:default;background:none}
.ctxsep{height:1px;margin:4px 6px;background:var(--line)}
.ctxhead{padding:6px 9px 3px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (pointer:coarse){.ctxitem{padding:11px 10px;font-size:14px}.ctxmenu{min-width:240px}.ctxitem .ck.kbd{display:none}}

/* ── quick record (Audio & Sound top bar) ── */
.qrec{display:flex;align-items:center;gap:2px;margin-right:4px}
.qrec .qbtn{display:flex;align-items:center;gap:5px;color:#f87171;font-weight:700;font-size:12px}
.qrec .qbtn svg{fill:currentColor}
.qrec .qsrc{padding-left:2px;padding-right:2px;color:var(--faint)}
.qlive{display:flex;align-items:center;gap:7px;padding:3px 9px;border-radius:999px;background:rgba(248,113,113,.14);border:1px solid rgba(248,113,113,.45)}
.qlive .tc{font-size:12px;color:#fca5a5;font-variant-numeric:tabular-nums;min-width:52px}
.qdot{width:9px;height:9px;border-radius:50%;background:#ef4444;animation:qblink 1s steps(2,start) infinite}
.qlive.paused{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.45)}.qlive.paused .qdot{background:#fbbf24;animation:none}.qlive.paused .tc{color:#fcd34d}
@keyframes qblink{to{visibility:hidden}}
.qrec .qstop{color:#f87171}
.qtake{display:flex;align-items:center;gap:5px;padding:5px 8px 5px 9px;cursor:pointer;border-radius:999px;background:var(--panel2);border:1px solid var(--line2);font-size:11.5px;color:var(--dim);max-width:180px}
.qtake b{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:720px){.qtake b,.qtake svg:last-child{display:none}.qtake{padding:6px}.qlive canvas,.qrec .qsrc{display:none}.qlive{padding:3px 7px;gap:5px}.qlive .tc{min-width:0;font-size:11px}.qrec{margin-right:0}}

/* ── the top bar never runs off the screen: the name gives way first ── */
.top>*{flex-shrink:0}
.top .docname{flex-shrink:1;min-width:28px}
@media (max-width:1100px){
  .imageapp .top .menubtn.deskonly{display:none}
  .imageapp .mobileonly{display:inline-flex}
  .top:has(.qlive) .kindpill,.top:has(.qtake) .kindpill{display:none}
}
@media (max-width:520px){
  .top:has(.qlive) #undobtn,.top:has(.qlive) #redobtn{display:none}
}
@media (max-width:380px){
  .top{gap:2px;padding:0 4px}
  .top .menubtn{padding:6px 6px}
  .top .btn.sm{padding:6px}
}
