/* OSIRIS — secțiunea 5 „Indicators” (pasul 4a, 21 Oct 2026; reparațiile 1, 2 și 3 după lab/pas4a/judecata_1.md, judecata_2.md și judecata_3.md). Se încarcă doar pe prima pagină;
   clasele au prefixul ind- (pe /products există .modal__panel.ind și .ind__*, altceva: blocul secțiunii e .ind-sec, ca să nu se ciocnească).
   Făcută după cercetare/sectiuni/indicatori/fisa.md:
   - vizorul mare + lista cu toate numele + rularea automată cu pauză și contor (TradingView /features/, cardul „tipuri de grafic”);
   - progresul ca o linie care se umple pe elementul activ + butonul vizibil de oprire/pornire (Apple, galeria „highlights”);
   - activul = text alb pe un fundal neutru discret, culorile la 200 ms cubic-bezier(.4,0,.2,1) (Kraken Pro, filele Spot/Margin/Staking);
   - captura reală pe primul plan, cu culorile ei (TradingView /scripts/);
   - trecerea „arsă” (exemplul 24 + Shopify Editions Winter ’26) e în indicators.js (WebGL); aici doar rama, textul și lista.
   Vizorul arată DECUPAJE din capturile reale (teste/decupaje_indicatori.py), la proporția ramei (1,6; 1,4 pe telefon), deci poza umple
   rama (fără benzi goale) și stă DREAPTĂ (fără rotație 3D: textul din ea e clar). Pe telefon: rândul grupelor + pastilele grupei alese
   + ‹ › lângă contor (TradingView pe telefon: rând scurt de categorii; reparația 2); reparațiile 2: rândul grupelor lasă să se vadă o
   bucată din grupa următoare și își stinge marginile cât mai continuă (indicators.js: is-l / is-r).
   Paleta E strictă: hex doar în blocul de variabile de mai jos; fără italic; animațiile NU depind de prefers-reduced-motion (regula 6). */

.ind-sec{
  --ind-shot-bg:#0b0e18;                 /* fundalul graficului din capturi (măsurat în colțurile lor): golul din jurul capturii nu se vede */
  --ind-frame-hi:rgba(242,244,248,.07);  /* lumina de 1 px de pe muchia de sus a ramei */
  --ind-grid:rgba(242,244,248,.045);     /* liniile grilei goale (indicatorii fără captură) */
  --ind-burn-hot:var(--text);            /* trecerea (indicators.js le citește de aici): miezul se duce spre el doar unde arde conținut (de obicei ~200–215 / 255, până la ~230 peste cele mai luminoase lumânări) */
  --ind-burn-core:var(--nile-strong);    /* #7dd3fc: miezul, doar unde frontul arde conținut */
  --ind-burn-glow:var(--accent);         /* #38bdf8: strălucirea din jurul miezului */
  --ind-burn-deep:var(--accent-deep);    /* #1d4ed8: marginea stinsă de peste fundalul gol */
  --ind-burn-char:var(--deep);           /* #0b1d3a: franjurile arse și fâșiile care se ridică (reparațiile 3) */
  --ind-ratio:1.6;                       /* proporția vizorului (1,4 pe telefon) */
  --ind-inset:0px;                       /* decupajele umplu rama (fără margine liberă); indicators.js o citește pentru desenul WebGL */
  --ind-side:23rem;                      /* lățimea listei pe calculator */
  --ind-dwell:6.5s;                      /* cât stă o captură în rularea automată (Apple ~6,6 s, TradingView ~3,9 s) */
}

/* ---------- așezarea: vizorul în stânga, lista (index în două coloane) în dreapta; sub vizor eticheta, numele, propoziția și butonul ---------- */
.ind-stage{display:grid;grid-template-columns:minmax(0,1fr) auto var(--ind-side);grid-template-rows:auto minmax(0,1fr);
  grid-template-areas:"frame frame side" "cap ctrl side";column-gap:clamp(1.75rem,3vw,2.75rem);align-items:start}

/* ---------- vizorul: rama curată, fundalul graficului, captura întreagă; canvasul trecerii (indicators.js) stă peste poză ---------- */
.ind-frame{grid-area:frame;position:relative;min-width:0;aspect-ratio:var(--ind-ratio);border-radius:var(--r-card);overflow:hidden;isolation:isolate;
  background:var(--ind-shot-bg);box-shadow:0 50px 100px -60px var(--black),0 34px 120px -76px rgba(29,78,216,.6);
  touch-action:pan-y;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}
.ind-frame::after{content:"";position:absolute;inset:0;z-index:4;border-radius:inherit;pointer-events:none;
  box-shadow:inset 0 0 0 1px var(--line-strong),inset 0 1px 0 var(--ind-frame-hi);transition:box-shadow .45s var(--ease-std)}
.ind-stage.is-burning .ind-frame::after,.ind-stage.is-loading .ind-frame::after{box-shadow:inset 0 0 0 1px rgba(56,189,248,.32),inset 0 1px 0 var(--ind-frame-hi)}   /* rama prinde o umbră de lumină cât arde (și cât se încarcă poza) */
.ind-frame:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:var(--r-card)}
.ind-shot{position:absolute;inset:var(--ind-inset);z-index:0;width:calc(100% - 2 * var(--ind-inset));height:calc(100% - 2 * var(--ind-inset));max-width:none;object-fit:cover;transition:opacity .5s var(--ease-std)}
.ind-shot.is-front{z-index:1}
.ind-shot.is-gone{opacity:0}
.ind-burn{position:absolute;inset:0;z-index:2;width:100%;height:100%;display:block;pointer-events:none}
/* fără captură: rama goală a graficului (doar grila) + nota cinstită; nu se arată nicio poză în locul ei */
.ind-empty{position:absolute;inset:0;z-index:3;display:grid;align-content:center;justify-items:center;gap:.6rem;padding:1.5rem;text-align:center;
  background-image:linear-gradient(var(--ind-grid) 1px,transparent 1px),linear-gradient(90deg,var(--ind-grid) 1px,transparent 1px);
  background-size:100% 12.5%,8.3333% 100%;background-position:0 -1px,-1px 0;
  opacity:0;visibility:hidden;transition:opacity .35s var(--ease-std),visibility 0s linear .35s}
.ind-empty.is-on{opacity:1;visibility:visible;transition-delay:0s}
.ind-empty__k{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-mono);font-size:var(--t-micro);font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.ind-empty__k::before{content:"";width:.5rem;height:.5rem;border-radius:50%;box-shadow:inset 0 0 0 1.5px currentColor}
.ind-empty__t{max-width:24em;font-size:var(--t-small);line-height:1.5;color:var(--muted)}

/* ---------- sub vizor: „05/20 ── ETICHETA”, numele, o propoziție (ca descrierea activului de la TradingView) ---------- */
.ind-cap{grid-area:cap;min-width:0;padding-top:1.35rem}
.ind-cap__tags{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .75rem;min-height:1.5rem;font-family:var(--font-mono);font-size:var(--t-micro);font-weight:500;line-height:1.5}
.ind-count{color:var(--muted);letter-spacing:.06em;font-variant-numeric:tabular-nums;white-space:nowrap}
.ind-step{display:none}
.ind-count b{margin-right:.2em;font-weight:500;color:var(--text)}
.ind-tag{display:inline-flex;align-items:center;gap:.75rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.ind-tag::before{content:"";flex:0 0 1.25rem;height:1px;background:var(--accent);opacity:.85}
.ind-test{display:inline-flex;align-items:center;gap:.45rem;height:1.5rem;padding:0 .65rem 0 .55rem;border-radius:var(--r-pill);box-shadow:inset 0 0 0 1px var(--line-strong);letter-spacing:.02em;color:var(--text);white-space:nowrap}
.ind-test::before,.ind-item__dot{content:"";flex:none;width:.4375rem;height:.4375rem;border-radius:50%;box-shadow:inset 0 0 0 1.5px currentColor}
.ind-test::before{color:var(--muted)}
.ind-cap__name{margin-top:.6rem;font-size:clamp(1.375rem,1.75vw,1.75rem);line-height:1.15;letter-spacing:-.02em;font-weight:500;color:var(--text)}
.ind-cap__text{margin-top:.45rem;max-width:42em;min-height:3em;font-size:1rem;line-height:1.5;color:var(--muted);text-wrap:pretty}
.ind-cap.is-swap .ind-cap__tags,.ind-cap.is-swap .ind-cap__name,.ind-cap.is-swap .ind-cap__text{animation:indCapIn .5s var(--ease) both}
.ind-cap.is-swap .ind-cap__name{animation-delay:.04s}
.ind-cap.is-swap .ind-cap__text{animation-delay:.08s}
@keyframes indCapIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- oprire / pornire (Apple: buton rotund separat, eticheta se schimbă), 44 px peste tot ---------- */
.ind-ctrl{grid-area:ctrl;align-self:start;padding-top:1.1rem}
.ind-play{display:grid;place-items:center;width:2.75rem;height:2.75rem;border-radius:50%;color:var(--text);background:var(--fill-soft);box-shadow:inset 0 0 0 1px var(--line-strong);
  transition:background-color var(--d-fast) var(--ease-std),box-shadow var(--d-fast) var(--ease-std),transform var(--d-fast) var(--ease);-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.ind-play:active{transform:scale(.94);transition-duration:.08s}
.ind-play:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:50%}
.ind-play__i{display:block;width:.625rem;height:.75rem;border-left:3px solid currentColor;border-right:3px solid currentColor}            /* pauză: două bare */
.ind-play.is-paused .ind-play__i{width:.6875rem;margin-left:.15rem;border:0;background:currentColor;clip-path:polygon(0 0,100% 50%,0 100%)}   /* pornire: triunghi */

/* ---------- lista: indexul celor 20, pe grupe, în două coloane (toate numele se văd deodată) ---------- */
.ind-side{grid-area:side;min-width:0;padding-right:.625rem}
.ind-list{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1.5rem;align-items:start}
.ind-group+.ind-group{margin-top:1.5rem}
.ind-group__label{margin:0 0 .4rem;font-family:var(--font-mono);font-size:var(--t-micro);font-weight:500;line-height:1.5;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.ind-item{position:relative;display:flex;align-items:center;gap:.5rem;min-height:2.25rem;margin:0 -.625rem;padding:.3rem .625rem .45rem;border-radius:.5625rem;
  font-size:.9375rem;font-weight:500;line-height:1.25;letter-spacing:-.005em;color:var(--muted);cursor:pointer;
  transition:color .2s var(--ease-std),background-color .2s var(--ease-std);-webkit-tap-highlight-color:transparent;touch-action:manipulation}
@media (hover:hover){.ind-item:hover{color:var(--text);background:var(--fill-soft)}}
.ind-item.is-active{color:var(--text);background:var(--fill)}
.ind-item:focus-visible{outline:2px solid var(--accent);outline-offset:0;border-radius:.5625rem}
.ind-item__n{min-width:0}
.ind-item__dot{opacity:.8}
/* progresul: linia de 2 px de sub numele activ se umple cât stă captura (se oprește cu rularea; indicators.js trece mai departe la capăt) */
.ind-item__bar{position:absolute;left:.625rem;right:.625rem;bottom:.25rem;height:2px;border-radius:2px;overflow:hidden;background:rgba(242,244,248,.1);opacity:0;transition:opacity .3s var(--ease-std)}
.ind-item__bar::after{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--accent);transform:scaleX(0);transform-origin:0 50%}
.ind-stage.is-auto .ind-item.is-active .ind-item__bar{opacity:1}
.ind-item.is-run .ind-item__bar::after{animation:indFill var(--ind-dwell) linear forwards}
.ind-stage.is-held .ind-item__bar::after{animation-play-state:paused}
@keyframes indFill{to{transform:scaleX(1)}}
.ind-legend{display:flex;align-items:center;gap:.55rem;margin:1.5rem 0 0;padding-top:1rem;border-top:1px solid var(--line);font-size:var(--t-micro);line-height:1.4;color:var(--muted)}

/* ---------- degetul (ecrane cu atingere, oricât de late): rândurile listei de 44 px (reparația 4) ---------- */
@media (pointer:coarse){.ind-item{min-height:2.75rem}}

/* ---------- calculator îngust și tabletă: vizorul pe toată lățimea, lista sub el în trei coloane ---------- */
@media (max-width:1179px){
  .ind-stage{grid-template-columns:minmax(0,1fr) auto;grid-template-rows:none;grid-template-areas:"frame frame" "cap ctrl" "side side";column-gap:1.5rem}
  .ind-side{margin-top:2rem;padding:1.75rem 0 0;border-top:1px solid var(--line)}
  .ind-list{grid-template-columns:repeat(3,minmax(0,1fr));column-gap:2rem;row-gap:1.75rem}
  .ind-col{display:contents}
  .ind-group+.ind-group{margin-top:0}
  .ind-item{min-height:2.75rem;margin:0 -.625rem}                     /* 44 px: tableta se folosește cu degetul */
}

/* ---------- telefon: vizorul pe toată lățimea (proporția 1,4); dedesubt rândul grupelor + pastilele grupei alese (reparația 2), apoi
   „‹ 05/20 ›”, numele și propoziția. Fără JS rămâne rândul glisant cu toate cele 20 (linkuri spre /products). ---------- */
.ind-groups{display:none}
@media (max-width:760px){
  .ind-sec{--ind-ratio:1.4}
  .ind-stage{grid-template-areas:"frame frame" "side side" "cap cap";column-gap:.75rem}
  .ind-frame{border-radius:16px}
  .ind-frame:focus-visible{border-radius:16px}
  .ind-side{margin-top:1rem;padding:0;border-top:0}
  .ind-list{display:flex;align-items:center;gap:.5rem;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    margin:0 calc(-1 * var(--gutter));padding:.25rem var(--gutter);scroll-padding-inline:var(--gutter);
    -webkit-mask-image:linear-gradient(90deg,transparent 0,black var(--gutter),black calc(100% - var(--gutter)),transparent 100%);
    mask-image:linear-gradient(90deg,transparent 0,black var(--gutter),black calc(100% - var(--gutter)),transparent 100%)}
  .ind-list::-webkit-scrollbar{display:none}
  .ind-col,.ind-group{display:contents}
  .ind-group__label{flex:none;margin:0 .1rem 0 .9rem;letter-spacing:.08em}
  .ind-col:first-child>.ind-group:first-child>.ind-group__label{margin-left:0}
  .ind-item{flex:none;min-height:2.75rem;margin:0;padding:0 1rem;border-radius:var(--r-pill);background:rgba(14,18,28,.6);box-shadow:inset 0 0 0 1px var(--line);font-size:.875rem;white-space:nowrap}
  .ind-item.is-active{background:var(--accent-soft);box-shadow:inset 0 0 0 1px rgba(56,189,248,.45)}
  .ind-item:focus-visible{border-radius:var(--r-pill)}
  .ind-item__bar{left:1rem;right:1rem;bottom:.375rem}
  .ind-legend{display:none}                                           /* reparația 3: pastila „In testing” de lângă contor + punctul de pe pastilă ajung */

  /* cu JS (indicators.js pune .is-grouped): sus cele 6 grupe, ca filele scurte de categorii ale TradingView pe telefon (mono, ca etichetele
     grupelor de pe calculator); dedesubt doar pastilele grupei alese, pe cel mult 2 rânduri (3 sub 375 px), cu locul lor rezervat,
     ca înălțimea secțiunii să nu se schimbe când trece la altă grupă */
  .ind-stage.is-grouped .ind-groups:not([hidden]){display:flex;gap:.125rem;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    margin:0 calc(-1 * var(--gutter));padding:0 var(--gutter);scroll-padding-inline:var(--gutter);box-shadow:inset 0 -1px 0 var(--line);
    -webkit-mask-image:linear-gradient(90deg,transparent 0,black var(--ind-fl),black calc(100% - var(--ind-fr)),transparent 100%);
    mask-image:linear-gradient(90deg,transparent 0,black var(--ind-fl),black calc(100% - var(--ind-fr)),transparent 100%)}
  /* reparațiile 2: rândul arată că mai continuă: la încărcare se vede o treime din eticheta grupei următoare („LIQ…” la 390, „LEV…”
     la 320), stinsă spre marginea din dreapta; după glisare se stinge și marginea din stânga (indicators.js pune is-l / is-r) */
  .ind-groups{--ind-fl:0px;--ind-fr:0px}
  .ind-groups.is-l{--ind-fl:1.5rem}
  .ind-groups.is-r{--ind-fr:2rem}
  .ind-groups::-webkit-scrollbar{display:none}
  .ind-gbtn{position:relative;flex:none;display:inline-flex;align-items:center;min-height:2.75rem;padding:0 .5rem;border:0;border-radius:.5rem .5rem 0 0;background:none;
    font-family:var(--font-mono);font-size:var(--t-micro);font-weight:500;line-height:1;letter-spacing:.09em;text-transform:uppercase;white-space:nowrap;color:var(--muted);
    cursor:pointer;transition:color .2s var(--ease-std);-webkit-tap-highlight-color:transparent;touch-action:manipulation}
  .ind-gbtn::after{content:"";position:absolute;left:.5rem;right:.5rem;bottom:0;height:2px;border-radius:2px;background:var(--accent);transform:scaleX(0);transition:transform .3s var(--ease)}
  .ind-gbtn[aria-pressed="true"]{color:var(--text)}
  .ind-gbtn[aria-pressed="true"]::after{transform:scaleX(1)}
  .ind-gbtn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
  .ind-stage.is-grouped .ind-list{flex-wrap:wrap;align-items:flex-start;align-content:flex-start;overflow:visible;margin:.75rem 0 0;padding:0;
    -webkit-mask-image:none;mask-image:none;min-height:calc(2 * 2.75rem + .5rem)}
  .ind-stage.is-grouped .ind-group__label{display:none}
  .ind-stage.is-grouped .ind-item{display:none;padding:0 .875rem;font-size:.8125rem}
  .ind-stage.is-grouped .ind-item.is-in{display:flex}

  /* textul de sub vizor ia toată lățimea: rândul de sus „‹ 05/20 ›” + „In testing” (pe calculator lista e întreagă, deci pașii lipsesc),
     butonul de pauză sus-dreapta; eticheta trece pe rândul ei, sub nume, ca nimic să nu se rupă pe două rânduri și înălțimea să rămână
     aceeași la toți cei 20 (fără salturi) */
  .ind-ctrl{grid-area:cap;justify-self:end;padding-top:1rem}
  .ind-cap{display:grid;grid-template-columns:auto auto auto minmax(0,1fr);column-gap:.25rem;align-items:center;padding-top:1rem}
  .ind-cap__tags{display:contents}
  .ind-step:not([hidden]){display:grid}
  .ind-step{grid-row:1;place-items:center;width:2.75rem;height:2.75rem;padding:0;border:0;border-radius:50%;color:var(--text);background:var(--fill-soft);box-shadow:inset 0 0 0 1px var(--line-strong);
    cursor:pointer;transition:background-color var(--d-fast) var(--ease-std),transform var(--d-fast) var(--ease);-webkit-tap-highlight-color:transparent;touch-action:manipulation}
  .ind-step:active{transform:scale(.94);transition-duration:.08s}
  .ind-step:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
  .ind-step--prev{grid-column:1}
  .ind-step--next{grid-column:3}
  .ind-step__i{display:block;width:.5rem;height:.5rem;margin-left:.2rem;border-top:2px solid currentColor;border-left:2px solid currentColor;border-radius:1px;transform:rotate(-45deg)}
  .ind-step--next .ind-step__i{margin:0 .2rem 0 0;transform:rotate(135deg)}
  .ind-count{grid-row:1;grid-column:2;padding:0 .3rem;line-height:2.75rem}
  .ind-test{grid-row:1;grid-column:4;justify-self:start;margin-left:.5rem}
  .ind-cap__name{grid-row:2;grid-column:1/-1;margin-top:.55rem;font-size:1.375rem}
  .ind-tag{grid-row:3;grid-column:1/-1;margin-top:.35rem;letter-spacing:.04em;text-transform:none}
  .ind-tag::before{display:none}
  .ind-cap__text{grid-row:4;grid-column:1/-1;margin-top:.5rem;min-height:4.5em;font-size:.9375rem}
}
/* sub 375 px rândul de sus nu mai are loc și pentru butonul de pauză: acesta coboară în dreptul numelui (rândul numelui are 44 px,
   iar numele se oprește înaintea butonului, deci nu se ating) */
@media (max-width:374px){
  .ind-cap__text{min-height:6em}
  .ind-stage.is-grouped .ind-list{min-height:calc(3 * 2.75rem + 1rem)}
  .ind-stage.is-grouped .ind-ctrl{padding-top:calc(1rem + 2.75rem + .25rem)}
  .ind-stage.is-grouped .ind-cap__name{display:flex;align-items:center;min-height:2.75rem;margin:.25rem 3.25rem 0 0}
}
