/* Codech product-vignette engine — shared styles.
   Tokens below are defaults; each project's scenes.css re-themes them on .ovp-<slug>
   (e.g. .ovp-acme{--acc:#e11d48;--navy:#111827}). Project styles must be scoped to
   .ovp-<slug> so several case studies can share one page without clashing. */
.ov{
  --navy:#0b1f35; --navy-deep:#061525; --navy-soft:#15324f; --wash:#f0f4f8;
  --acc:#2d7ff9; --acc-strong:#1d4ed8; --acc-tint:#eaf2ff;
  --ink:#0f172a; --ink-soft:#1e293b; --mut:#475569; --mut-2:#64748b; --line:#e2e8f0; --line-2:#edf1f5;
  --spring:cubic-bezier(.32,.72,0,1);
  position:relative;width:100%;aspect-ratio:600/420;
  font-family:"Manrope",system-ui,sans-serif;color:var(--ink);text-align:left;
  -webkit-font-smoothing:antialiased;user-select:none;-webkit-user-select:none;
}
.ov-stage{position:absolute;left:0;top:0;width:600px;height:420px;transform:scale(var(--k,1));transform-origin:0 0}
.ov-scene{position:absolute;inset:0}
.ov *{box-sizing:border-box}
.ov p{margin:0}
.ovi{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ovi.fill{fill:currentColor;stroke:none}

/* reveal helpers */
.ov .fx{opacity:0;transform:translateY(10px);transition:opacity .45s ease,transform .6s var(--spring)}
.ov .fx.in{opacity:1;transform:none}
.ov .pop{opacity:0;transform:scale(.85);transition:opacity .3s ease,transform .45s var(--spring)}
.ov .pop.in{opacity:1;transform:none}
.ov .gone{display:none!important}
.ov-rm *,.ov-rm *::before,.ov-rm *::after{transition:none!important;animation:none!important}

/* cursor */
.ov-cur{position:absolute;left:0;top:0;z-index:30;opacity:0;transform:translate(640px,460px);transition:transform .75s var(--spring),opacity .3s ease;pointer-events:none;filter:drop-shadow(0 3px 5px rgba(6,21,37,.35))}
.ov-cur.on{opacity:1}
.ov-cur svg{display:block;width:24px;height:24px;transform-origin:4px 3px;transition:transform .14s ease}
.ov-cur.down svg{transform:scale(.8)}
.ov-cur i{position:absolute;left:4px;top:3px;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:rgba(45,127,249,.4);opacity:0;transform:scale(.2)}
.ov-cur.down i{animation:ovRip .55s ease-out}
@keyframes ovRip{0%{opacity:1;transform:scale(.2)}100%{opacity:0;transform:scale(1.5)}}

/* shared chrome */
.ov-win{position:absolute;background:#fff;border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:0 1px 3px rgba(15,23,42,.05),0 28px 60px -22px rgba(6,21,37,.45)}
.ov-h1{font-size:22px;font-weight:800;letter-spacing:-.03em;line-height:1.1}
.ov-sub{font-size:12px;color:var(--mut);margin-top:4px;font-weight:500}
.ov-lbl{font-size:9.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--mut-2)}
.ov-av{width:26px;height:26px;border-radius:50%;background:var(--wash);border:1px solid var(--line);display:grid;place-items:center;font-size:9px;font-weight:800;color:var(--ink-soft);flex:none;position:relative}
.ov-av.on::after,.ov-av.away::after{content:"";position:absolute;right:-1px;bottom:-1px;width:8px;height:8px;border-radius:50%;background:#10b981;border:1.5px solid #fff}
.ov-av.away::after{background:#f59e0b}
.ov-av.ai{background:var(--acc-tint);border-color:#cfe0ff;color:var(--acc)}
.ov-badge{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:5px;border:1px solid;font-size:8.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;flex:none}
.ov-badge.conf{color:#b45309;background:#fffbeb;border-color:#fcd34d}
.ov-badge.rest{color:#b91c1c;background:#fef2f2;border-color:#fca5a5}
.ov-badge.int{color:var(--acc-strong);background:#eff6ff;border-color:#bfdbfe}
.ov-badge.priv{color:var(--mut);background:var(--wash);border-color:var(--line)}
.ov-pdf{width:30px;height:34px;border-radius:7px;background:#fef2f2;color:#dc2626;display:grid;place-items:center;flex:none;font-size:7px;font-weight:800;letter-spacing:.02em;position:relative}
.ov-pdf::before{content:"";position:absolute;top:7px;width:12px;height:9px;border-radius:2px;background:currentColor;opacity:.9}
.ov-pdf span{margin-top:12px}
.ov-pdf.xls{background:#ecfdf5;color:#059669}
.ov-pdf.doc{background:var(--wash);color:var(--navy)}
.ov-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:30px;padding:0 12px;border-radius:8px;border:1px solid var(--line);background:#fff;font-size:11.5px;font-weight:700;color:var(--ink);white-space:nowrap}
.ov-btn.pri{background:var(--acc);border-color:var(--acc);color:#fff}
.ov-btn.dark{background:var(--navy);border-color:var(--navy);color:#fff}
.ov-caret{display:inline-block;width:1.5px;height:15px;background:var(--acc);margin-left:1px;vertical-align:-3px;animation:ovBlink 1s steps(1) infinite}
@keyframes ovBlink{50%{opacity:0}}
.ov-spin{animation:ovSpin 1.2s linear infinite}
@keyframes ovSpin{to{transform:rotate(360deg)}}
.ov-dots{display:inline-flex;gap:3px}
.ov-dots b{width:5px;height:5px;border-radius:50%;background:var(--mut-2);animation:ovDot 1s infinite}
.ov-dots b:nth-child(2){animation-delay:.15s}.ov-dots b:nth-child(3){animation-delay:.3s}
@keyframes ovDot{0%,60%,100%{opacity:.3;transform:none}30%{opacity:1;transform:translateY(-2px)}}

/* callout note (Arcade-style annotation) */
.ov-note{position:absolute;z-index:25;display:flex;align-items:center;gap:8px;padding:9px 14px 9px 10px;border-radius:999px;background:var(--navy-deep);color:#fff;font-size:12.5px;font-weight:700;letter-spacing:-.01em;white-space:nowrap;box-shadow:0 14px 30px -10px rgba(6,21,37,.6)}
.ov-note .ovi{width:15px;height:15px;color:#f5c26b}

/* file chip (docs in chat, sources) */
.ov-chip{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:11px;background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.04);max-width:100%;transition:box-shadow .3s,border-color .3s}
.ov-chip b{display:block;font-size:11.5px;font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ov-chip small{display:block;font-size:10px;color:var(--mut-2);margin-top:2px;white-space:nowrap}
.ov-chip .t{min-width:0;flex:1}
.ov-chip.ring{border-color:var(--acc);box-shadow:0 0 0 3px rgba(45,127,249,.18)}
.ov-chip.locked{background:#fafbfc;border-style:dashed}
.ov-chip.locked b{color:var(--mut)}
.ov-chip .lk{width:30px;height:34px;border-radius:7px;background:var(--wash);color:var(--mut-2);display:grid;place-items:center;flex:none}

