/* EVA v2 (claude/one-eva-v2): the scene is EVA's calm field of orbs (eva-orbs.mjs). HJ, 9 Oct: no tree, no AI chip, no
   frames on pillars. Colours follow the Night / Day theme (eva-theme.css). */
#evaStage{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:0;background:var(--e-bg,#100b08);overflow:hidden}
#evaStage #evaOrbs{position:absolute;inset:0;width:100%;height:100%;display:block}
/* her body (HJ's video, 24 Oct; eva-v2.mjs mountBody): black is see-through ("screen"); --eva-glow / --eva-swell follow her voice */
#evaBody{position:fixed;left:50%;top:calc(50% + 12px);z-index:0;width:min(88vh,52vw);height:auto;aspect-ratio:1;pointer-events:none;object-fit:contain;
 mix-blend-mode:screen;opacity:0;transform:translate(-50%,-50%) scale(var(--eva-swell,1));filter:brightness(var(--eva-glow,1)) saturate(calc(.8 + .2*var(--eva-glow,1)));transition:opacity .9s ease}
html.eva-body-on.eva-body-shown #evaBody{opacity:.95}
html.eva-body-on.eva-body-shown.eva-body-back #evaBody{opacity:.32}
html[data-theme="day"] #evaBody{mix-blend-mode:multiply;filter:invert(1) hue-rotate(180deg) contrast(var(--eva-glow,1))}
@media (max-width:900px),(max-height:560px){#evaBody{width:min(94vw,58vh);top:44%}html.eva-body-on.eva-body-shown #evaBody{opacity:.7}}
@media (prefers-reduced-motion:reduce){#evaBody{transform:translate(-50%,-50%)}}
/* the orbs draw the whole scene: the older backdrops step aside */
html.eva-orbs-on :is(.bg-glow,#jarvisEnvironment,#jarvisSun,canvas#space,canvas.jarvis-energy,canvas.jarvis-energy-under,#jarvisSpace,canvas.plexus,.hub-background){display:none!important}
html.eva-v2 #jarvisSpace,html.eva-v2 canvas.plexus,html.eva-v2 canvas.jarvis-energy,html.eva-v2 canvas.jarvis-energy-under{display:none!important}
/* the old robot's sky also stays hidden from the first paint, not only once the orbs are up: on the lock screen it is
   hue-rotated (jarvis-now.css) and showed as a green flash while the dashboard took over from the sign-in (10 Oct) */
html.eva-v2 :is(canvas#space,#jarvisEnvironment,#jarvisSun){display:none!important}

/* ---------- sign-in: the globe of live orbs (eva-v2.mjs mountEntrance; this box only marks its place) ---------- */
:root{--ent-h:min(60vh,600px);--ent-w:calc(var(--ent-h)*.929)}
@media (max-width:600px){:root{--ent-h:min(52vh,calc(92vw/.929))}}
.eva-entrance{position:fixed;z-index:1;left:50%;top:calc(50% + 12px);width:var(--ent-w);height:var(--ent-h);translate:-50% -50%;pointer-events:none}
/* the companion's old halo and seed stay out of the way */
html.eva-entrance-on #core .orb-halo{display:none}
/* the old round power button is never drawn under EVA v2, not even for the moment before eva-v2.mjs places it over the
   globe (HJ, 10 Oct: after a sign-out "a weird circle round" showed in the middle); it stays a clear click target */
html.eva-v2 :is(#core .orb-halo,#reactor){display:none!important}
html.eva-v2 .eye-btn:not(:focus-visible){background:transparent!important;border-color:transparent!important;box-shadow:none!important}
html.eva-v2 .eye-btn::before,html.eva-v2 .eye-btn::after{display:none!important}
/* back from a sign-out: the picture of EVA's core (full screen, login-early.js) lies over her stage but under the page's
   text, until her live orbs draw the same core */
html.eva-v2 .exit-frame{z-index:0!important}
/* the entry button covers the clip: pressing the globe opens the entry panel, which sits over the clip's base */
html.eva-entrance-on .entry-wrap.on-eye .eye-btn{width:calc(var(--ent-w)*.72);height:calc(var(--ent-h)*.74);border-radius:36px;cursor:pointer;background:transparent!important;border:0!important;box-shadow:none}
html.eva-entrance-on .entry-wrap.on-eye .eye-btn:focus-visible{box-shadow:0 0 0 2px var(--e-o),0 0 24px color-mix(in srgb,var(--e-o) 50%,transparent)}
html.eva-entrance-on .entry-wrap.on-eye .entry{top:calc(100% + .2rem);bottom:auto}
/* (the CSS glow that held the core's place after a sign-out is gone: laid over the live core it drew a dark ring, HJ
   10 Oct "a weird circle round, bright inside"; the orbs now run in a worker and show the core themselves) */
/* the old robot's centre label ("LOCKED", "EVA LOCKED", in the alert colour on the lock screen): EVA's atom says it */
html.eva-v2 #boot .hub-core-label{display:none!important}
/* ---------- Needs Attention: shapes of orbs circling EVA (eva-attention-orbs.js; the dots are drawn by the orb engine)
   Each shape gets an invisible click target and a short caption under it; the opened item's details sit inside the
   document frame its dots form (.cc-pop.eva-doc). ---------- */
/* (above the hub #boot, z 100; below the module workspace 120, voice controls 124, dock 125, top bar 131, popup 145) */
.eva-sat{position:fixed;inset:0;z-index:110;pointer-events:none}
.eva-sat-item{position:absolute;left:0;top:0;width:0;height:0;will-change:transform,opacity;opacity:0}
.eva-sat-hit{all:unset;box-sizing:border-box;position:absolute;left:calc(var(--s,100px)*-.55);top:calc(var(--s,100px)*-.55);width:calc(var(--s,100px)*1.1);height:calc(var(--s,100px)*1.1);border-radius:50%;cursor:pointer;pointer-events:none;background:none!important;border:0!important;box-shadow:none!important}
.eva-sat-live .eva-sat-hit{pointer-events:auto}
.eva-sat-hit:focus-visible{outline:2px solid var(--e-o);outline-offset:4px}
.eva-sat-cap{position:absolute;left:0;top:calc(var(--s,100px)*.56);translate:-50% 0;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;
 font:600 12px/1.25 var(--e-sans);letter-spacing:.01em;color:var(--e-tx);text-shadow:0 1px 8px var(--e-bg),0 0 2px var(--e-bg)}
/* Morning (Dawn Opal): every caption on a frosted pearl pill, so it reads over the sky and the passing orbs */
html[data-theme=day] .eva-sat-cap{padding:4px 10px 4px 9px;border-radius:999px;color:#1a1b45;text-shadow:none;background:#ffffffd6;-webkit-backdrop-filter:blur(8px) saturate(1.4);backdrop-filter:blur(8px) saturate(1.4);box-shadow:0 0 0 1px #2c2a7a14,0 4px 14px #2c2a7a1f}
html[data-theme=day] .eva-sat-item[data-sev=red] .eva-sat-cap::before{background:#d81e4e!important}
html[data-theme=day] .eva-sat-item[data-sev=orange] .eva-sat-cap::before{background:#d9740a!important}
.eva-sat-item[data-sev=red] .eva-sat-cap::before{content:"";display:inline-block;width:6px;height:6px;margin-right:6px;border-radius:50%;background:#ff4d5e;vertical-align:1px}
.eva-sat-item[data-sev=orange] .eva-sat-cap::before{content:"";display:inline-block;width:6px;height:6px;margin-right:6px;border-radius:50%;background:#ff8a3d;vertical-align:1px}
/* the opened item: its details inside the frame of dots (the frame is the orbs; the panel is a clear sheet inside it) */
.cc-pop.eva-doc{position:fixed!important;right:auto!important;bottom:auto!important;transform:none!important;translate:none!important;max-width:none!important;max-height:none!important;overflow:auto;
 margin:0!important;border:0!important;border-radius:14px!important;box-shadow:none!important;background:color-mix(in srgb,var(--e-card,#0b0705) 72%,transparent)!important;animation:evaDocIn .45s .35s cubic-bezier(.05,.7,.1,1) both}
@keyframes evaDocIn{from{opacity:0;scale:.98}}
@media (prefers-reduced-motion:reduce){.cc-pop.eva-doc{animation:none}}/* without WebGL the success tick is a small vector */
.eva-tick{position:fixed;z-index:2;translate:-50% -50%;pointer-events:none}
.eva-tick svg{width:100%;height:100%;fill:none;stroke:#5fe0ac;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 10px #5fe0ac99)}
html[data-theme=day] .eva-tick svg{stroke:#111;filter:drop-shadow(0 0 8px #00000033)}
.eva-tick circle{stroke-width:4;opacity:.75;stroke-dasharray:330;stroke-dashoffset:330;animation:evaTick .7s ease-out forwards}
.eva-tick path{stroke-width:8;stroke-dasharray:80;stroke-dashoffset:80;animation:evaTick .45s .45s ease-out forwards}
@keyframes evaTick{to{stroke-dashoffset:0}}

/* ---------- lock screen: the frames sit still in two columns, left and right; the middle stays free for EVA's orbs
   (HJ, 10 Oct). An opened frame becomes a drawer beside its column; the orbs form its symbol in the free middle
   (eva-v2-lock.js). ---------- */
/* HJ, 10 Oct (after go-live): Gold and Fuel get their own columns beside the free middle (Gold inner left, Fuel inner
   right) and every frame is shown open, whole, at its own height; the outer columns keep the other frames.
   (eva-v2.mjs placeAtom mirrors these widths so the lock-screen atom sits in the free middle.) */
html.eva-v2{--lk-side:clamp(250px,19vw,350px);--lk-inner:clamp(210px,14.5vw,290px);--lk-gap:18px;--lk-top:96px;--lk-bottom:78px}
html.eva-v2.nw-locked .nw-lock{position:fixed!important;inset:var(--lk-top) 24px var(--lk-bottom) 24px!important;translate:none;width:auto;max-height:none;overflow:visible;
 display:grid!important;grid-template-columns:var(--lk-side) var(--lk-inner) 1fr var(--lk-inner) var(--lk-side);grid-template-rows:minmax(0,1fr);gap:0 var(--lk-gap);padding:0!important;pointer-events:none}
/* each column is a stack: frames at their full height share any spare height; a column only scrolls if the screen is too short */
html.eva-v2.nw-locked .nw-lock .nw-lk-col{display:flex!important;flex-direction:column;gap:12px;min-height:0;overflow-y:auto;overflow-x:visible;padding:4px 6px 6px 0;pointer-events:auto;
 position:static!important;inset:auto!important;width:auto!important;max-height:none!important;margin:0!important;   /* (jarvis-now.css places these absolutely) */
 scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--e-o) 45%,transparent) transparent}
/* the narrow Fuel column: the monthly change keeps its amount and drops the percentage, so the table fits */
html.eva-v2.nw-locked .nw-lock .nw-lk-inr .nw-tbl em small{display:none}
html.eva-v2.nw-locked .nw-lock .nw-lk-inr .nw-fuel .nw-tbl{min-width:0;width:100%}html.eva-v2.nw-locked .nw-lock .nw-lk-inr .nw-fuel{overflow-x:hidden}
html.eva-v2.nw-locked .nw-lock .nw-lk-left{grid-column:1}html.eva-v2.nw-locked .nw-lock .nw-lk-inl{grid-column:2}
html.eva-v2.nw-locked .nw-lock .nw-lk-inr{grid-column:4}html.eva-v2.nw-locked .nw-lock .nw-lk-right{grid-column:5}
html.eva-v2.nw-locked .nw-lock :is(.nw-lk,.eva-lk-hold){position:relative!important;inset:auto!important;width:auto!important;margin:0!important;height:auto;min-height:0;flex:1 0 auto;pointer-events:auto}
/* Gold and Fuel fill their column; their 12-month table scrolls inside if it is taller than the screen */
html.eva-v2.nw-locked .nw-lock :is(.nw-lk-inl,.nw-lk-inr) .nw-lk:not(.eva-open){flex:1 1 auto;overflow-y:auto!important;scrollbar-width:thin}
html.eva-v2.nw-locked .nw-lock .nw-lk{overflow:hidden;padding:12px 16px 14px!important;clip-path:none!important;cursor:pointer;transform:none;
 transition:translate .25s var(--e-ease,ease),box-shadow .25s,border-color .25s,opacity .35s,filter .35s}
html.eva-v2.nw-locked .nw-lock .nw-lk::before{display:none!important}
/* (frames are shown whole now, so the fade that said "there is more inside" is gone) */
html.eva-v2.nw-locked .nw-lock .nw-lk:not(.eva-open)::after{display:none!important}
html.eva-v2.nw-locked .nw-lock .nw-lk:not(.eva-open):is(:hover,:focus-visible){translate:0 -3px;border-color:color-mix(in srgb,var(--e-o) 55%,transparent)!important;box-shadow:0 0 0 1px color-mix(in srgb,var(--e-o) 25%,transparent),0 14px 34px #0000004d,0 0 26px color-mix(in srgb,var(--e-o) 16%,transparent)!important}
html.eva-v2.nw-locked .nw-lock .nw-lk:focus-visible{outline:2px solid var(--e-o);outline-offset:3px}
html.eva-v2.nw-locked .nw-lock .eva-lk-hold{border-radius:16px;border:1px dashed var(--e-line2)}
/* the drawer: beside its column (eva-v2-lock.js sets left / width), large and scrollable; the other frames step back */
html.eva-v2.nw-locked .nw-lock .nw-lk.eva-open{position:fixed!important;z-index:40;inset:50% auto auto var(--dl,24px)!important;width:var(--dw,420px)!important;translate:0 -50%;height:auto;max-height:72vh;overflow:auto;cursor:default;background:var(--e-card)!important;
 box-shadow:0 30px 80px #000000a6,0 0 0 1px color-mix(in srgb,var(--e-o) 35%,transparent)!important}
html.eva-v2.nw-locked.eva-drawer-open .nw-lock .nw-lk:not(.eva-open){filter:brightness(.3) saturate(.5) blur(1.5px);pointer-events:none}
/* narrower screens (901-1250px): no room for five columns and the free middle, so Gold goes under the left frames and
   Fuel over the right ones, as before */
@media (min-width:901px) and (max-width:1250px){
 html.eva-v2.nw-locked .nw-lock{grid-template-columns:var(--lk-side) 1fr var(--lk-side);grid-template-rows:repeat(5,minmax(0,1fr));grid-auto-flow:row dense;gap:12px 24px}
 html.eva-v2.nw-locked .nw-lock .nw-lk-col{display:contents!important}
 html.eva-v2.nw-locked .nw-lock :is(.nw-weather,.nw-next,.nw-health,.nw-usage,.nw-gold){grid-column:1}
 html.eva-v2.nw-locked .nw-lock :is(.nw-fuel,.nw-news,.nw-ai){grid-column:3}
 html.eva-v2.nw-locked .nw-lock .nw-lk:not(.eva-open){overflow:hidden!important}}
@media (max-width:900px){
 html.eva-v2.nw-locked .nw-lock{inset:auto 12px 16px 12px!important;max-height:calc(100svh - 190px);overflow:auto;grid-template-columns:1fr;grid-template-rows:none;grid-auto-rows:150px}
 html.eva-v2.nw-locked .nw-lock .nw-lk-col{display:contents!important}
 html.eva-v2.nw-locked .nw-lock .nw-lk{grid-column:1!important;overflow:hidden!important}
 html.eva-v2.nw-locked .nw-lock .nw-lk.eva-open{left:12px!important;right:12px!important;width:auto!important;top:auto!important;bottom:12px!important;translate:none;max-height:62vh}}@media (prefers-reduced-motion:reduce){html.eva-v2.nw-locked .nw-lock .nw-lk{transition:none}.eva-tick :is(circle,path){animation:none;stroke-dashoffset:0}}
