:root{
  --navy:#0f2230;
  /* --teal-l e capatul deschis al gradientelor teal, acelasi hex ca in PV si
     Contracte (marca, barele de progres). --accent e culoarea de link a ambelor. */
  --teal:#0e7c86; --teal-d:#0b626a; --teal-s:#e3f4f5; --teal-l:#14b8a6;
  --accent:#2563eb;
  --ground:#f4f6fb; --surface:#ffffff; --surface-2:#f8fafc;
  --border:#e3e8f0; --border-2:#d5dce8;
  --ink:#1e2a3a; --ink-soft:#5b6b82; --ink-mute:#8a99ad;
  --ok:#15803d; --ok-s:#e7f6ec; --warn:#b45309; --warn-s:#fef3e2; --bad:#dc2626; --bad-s:#fdecec;
  /* Doua umbre, ca in PV: cea mica e starea de repaus, cea medie apare la hover.
     Inainte umbra ampla era permanenta si toate cardurile pluteau. */
  --shadow:0 1px 2px rgba(16,30,54,.08);
  --shadow-md:0 1px 3px rgba(16,30,54,.08), 0 6px 24px rgba(16,30,54,.06);
  --shadow-lg:0 2px 6px rgba(16,30,54,.08), 0 24px 60px rgba(16,30,54,.16);
  --r:12px; --r-lg:18px;
}
/* Fara tema intunecata. PV Service si Contracte sunt fixate pe light si n-au
   niciun mecanism de comutare; campania trebuie sa arate la fel cand sta langa
   ele pe acelasi telefon. In dark, --teal sarea de la #0e7c86 la #3fb3bd — adica
   se schimba chiar culoarea care ar trebui sa lege cele trei aplicatii.
   color-scheme:light nu e decorativ: fara el sistemul deseneaza in continuare
   controalele native (bife, autofill, scrollbar) pe fundal intunecat. */
:root{color-scheme:light}

*{box-sizing:border-box}
/* Orice regula din foaia autorului bate [hidden] din foaia browserului. Cum mai
   jos punem display pe .f, .check si altele, atributul `hidden` ramanea complet
   fara efect — campurile ascunse se vedeau oricum. Se repara o data, aici. */
[hidden]{display:none !important}
body{
  margin:0; background:var(--ground); color:var(--ink);
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  font-size:15px; line-height:1.55; -webkit-font-smoothing:antialiased;
}
h1,h2,h3{text-wrap:balance;margin:0}
a{color:var(--accent)}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:6px}

.wrap{max-width:1080px;margin:0 auto;padding:26px 18px 60px}
.top{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between;margin-bottom:18px}
.brandline{display:flex;align-items:center;gap:11px}
/* Aceeasi marca pe care o au PV si Contracte: patrat cu gradient teal, litera alba. */
.mark{width:32px;height:32px;border-radius:10px;background:linear-gradient(135deg,var(--teal),var(--teal-l));display:grid;place-items:center;flex:none}
.mark span{color:#fff;font-weight:700;font-size:15px;line-height:1}
.brandline b{font-size:16px;font-weight:700;letter-spacing:-.01em}
.brandline small{display:block;color:var(--ink-mute);font-size:11.5px;font-weight:500;letter-spacing:.03em;text-transform:uppercase}
/* Machetei ii apartin banda de avertizare, comutatorul de vizualizare, panourile
   (i) si rama de telefon. Aici erau cod mort — aplicatia reala nu le emite
   niciodata (0 aparitii in app.js), iar demo/index.html are propria lui copie. */

.sbar{background:var(--navy);color:#fff;padding:12px 18px 13px;flex:none}
.sbar .row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sbar b{font-size:14.5px;font-weight:700;letter-spacing:.01em}
.sbar em{font-style:normal;font-size:11px;color:#8fb9be;font-weight:600;letter-spacing:.05em;flex:none}
.bar{height:3px;background:rgba(255,255,255,.16);border-radius:3px;margin-top:11px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--teal-l);border-radius:3px;transition:width .45s cubic-bezier(.4,0,.2,1)}

.body{flex:1;overflow-y:auto;padding:20px 18px 24px}
.step{display:none;animation:fade .3s ease both}
.step.on{display:block}
@keyframes fade{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.step,.bar i,.infobox.on{animation:none;transition:none}}

.step h2{font-size:20px;font-weight:700;letter-spacing:-.02em;margin-bottom:7px}
.step p.lead{color:var(--ink-soft);font-size:14px;margin:0 0 17px}

.prize{
  background:linear-gradient(160deg,var(--teal-s),color-mix(in srgb,var(--teal-s) 55%,var(--surface)));
  border:1px solid color-mix(in srgb,var(--teal) 24%,transparent);
  border-radius:var(--r-lg);padding:17px 16px;margin-bottom:16px
}
.prize .k{font-size:10.5px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--teal-d);margin-bottom:5px}
.prize .v{font-size:19px;font-weight:800;letter-spacing:-.02em;line-height:1.25}
.prize .s{color:var(--ink-soft);font-size:13px;margin-top:6px}

/* Pasul 1 decide daca omul merge mai departe. Se da un obiect — deci obiectul se vede,
   mare, pe un fundal inchis pe care turbina colorata iese in fata. */
.hero{
  position:relative;overflow:hidden;border-radius:var(--r-lg);margin-bottom:16px;
  background:radial-gradient(125% 145% at 16% 0%,#17505b 0%,var(--navy) 63%);
  color:#fff;padding:19px 18px 15px;box-shadow:var(--shadow-md)
}
.hero::after{content:'';position:absolute;right:-46px;top:-56px;width:196px;height:196px;border-radius:50%;
  background:radial-gradient(circle,rgba(20,184,166,.32),transparent 68%);pointer-events:none}
.hero>*{position:relative;z-index:1}
.hero-k{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;
  color:#93dade;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.17);border-radius:99px;padding:3px 10px}
.hero-t{font-size:26px;font-weight:800;letter-spacing:-.03em;line-height:1.14;margin:11px 0 6px;color:#fff}
.hero-s{font-size:13.5px;line-height:1.5;color:#b6d2d8;margin:0}
/* Poza sta pe placuta ei alba, exact ca pe site. Decupata de fundal lasa un halou
   zimtat pe margini (pragul de alb taie si reflexiile de pe cromul capului) — pe
   fundal inchis se vede imediat. */
.hero-plansa{background:#fff;border-radius:13px;padding:10px 12px;margin:15px 0 9px;
  box-shadow:0 10px 26px rgba(0,0,0,.32)}
.hero-img{display:block;width:100%;height:auto}
.hero-nm{text-align:center;font-size:11px;font-weight:600;letter-spacing:.05em;color:#8ecfd5}
@media (max-width:359px){.hero-t{font-size:23px}}

ol.plan{list-style:none;padding:0;margin:0 0 18px;display:flex;flex-direction:column;gap:9px;counter-reset:s}
ol.plan li{counter-increment:s;display:flex;gap:11px;align-items:flex-start;font-size:13.5px;color:var(--ink-soft)}
ol.plan li::before{
  content:counter(s);flex:none;width:21px;height:21px;border-radius:50%;
  background:var(--teal-s);border:1px solid color-mix(in srgb,var(--teal) 28%,transparent);
  display:grid;place-items:center;font-size:11px;font-weight:700;color:var(--teal-d)
}

/* Se aplica si pe <div class="f"> — blocul „Facultatea" nu mai e <label>, fiindca
   are lista lui proprie, iar un <label> care o inconjoara ar fura clicurile. Cu
   selectorul vechi `label.f`, singurul camp care nu e <label> ramanea fara cei
   13px de dedesubt si se lipea de bifa GDPR. */
.f{display:block;margin-bottom:13px}
label.f>span{display:block;font-size:12.5px;font-weight:600;color:var(--ink-soft);margin-bottom:5px}
.inp{width:100%;padding:11px 12px;border:1px solid var(--border-2);border-radius:10px;background:var(--surface);color:var(--ink);font:inherit;font-size:15px}
.inp:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--teal) 16%,transparent)}

/* iOS Safari mareste singur pagina cand focalizezi un camp cu font sub 16px, si
   NU se mai intoarce dupa ce iesi. Aici conteaza cel mai mult: studentii sunt
   toti pe telefon. Efectul secundar e si mai suparator — cat timp pagina e
   marita si deplasata, lista de facultati (position:fixed) apare taiata.
   16px doar pe atingere; pe desktop ramane 15px. */
@media (pointer: coarse) {
  .inp, input, select, textarea { font-size: 16px; }
}
/* eticheta unui camp care nu mai e <label> in jurul inputului (combobox-ul are
   propria lista, iar un <label> care o inconjoara ar fura clicurile) */
.f>.lbl{display:block;font-size:12.5px;font-weight:600;color:var(--ink-soft);margin-bottom:5px}

/* ---------- lista de facultati, cu cautare ---------- */
.combo{position:relative}
.combo-list{
  position:absolute;left:0;right:0;top:calc(100% + 5px);z-index:30;margin:0;padding:5px;
  list-style:none;max-height:238px;overflow-y:auto;background:var(--surface);
  border:1px solid var(--border-2);border-radius:var(--r);box-shadow:var(--shadow-lg)
}
.combo-list li{padding:9px 11px;border-radius:8px;cursor:pointer;font-size:14px;line-height:1.35}
.combo-list li:hover,.combo-list li.pe{background:var(--teal-s);color:var(--teal)}
.combo-list li b{font-weight:700}
.combo-list li.gol{color:var(--ink-mute);cursor:default;font-size:12.5px}
.combo-list li.gol:hover{background:none;color:var(--ink-mute)}

.years{display:flex;gap:6px}
.years button{flex:1;padding:10px 0;min-height:42px;border:1px solid var(--border-2);background:var(--surface);border-radius:9px;cursor:pointer;font-weight:700;font-size:14px;color:var(--ink-soft);transition:.12s}
.years button[aria-pressed="true"]{background:var(--teal);border-color:var(--teal);color:#fff}

.check{display:flex;gap:10px;align-items:flex-start;margin-bottom:11px;cursor:pointer}
.check input{margin:2px 0 0;width:17px;height:17px;accent-color:var(--teal);flex:none}
.check span{font-size:12.5px;color:var(--ink-soft);line-height:1.5}

.btn{width:100%;padding:13px;border:0;border-radius:11px;background:var(--teal);color:#fff;font-weight:700;font-size:15px;cursor:pointer;transition:.15s}
.btn:hover:not(:disabled){background:var(--teal-d)}
.btn:disabled{background:var(--border-2);color:var(--ink-mute);cursor:not-allowed}
.btn.ghost{background:none;border:1px solid var(--border-2);color:var(--ink-soft);font-weight:600}
.btn.ghost:hover{background:var(--surface-2)}

/* caseta de link: numele de utilizator poate fi lung, deci se rupe pe randul urmator
   in loc sa iasa din chenar */
.act{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface-2);margin-bottom:14px;text-decoration:none;color:inherit}
.act .ic{width:38px;height:38px;border-radius:10px;flex:none;display:grid;place-items:center;background:var(--surface);border:1px solid var(--border)}
.act .txt{flex:1;min-width:0}
.act b{display:block;font-size:14px;font-weight:700;overflow-wrap:anywhere;line-height:1.3}
.act small{color:var(--ink-mute);font-size:12px}
.act .go{flex:none;width:26px;height:26px;border-radius:50%;background:var(--teal);color:#fff;display:grid;place-items:center;font-size:14px;font-weight:700}

.hint{font-size:12px;color:var(--ink-mute);margin:0 0 14px;line-height:1.5}
/* sub un camp de formular, indicatia sta lipita de el, nu inaintea urmatorului */
.f>.hint{display:block;font-size:11.5px;font-style:normal;margin:5px 0 0;line-height:1.45}

.done{text-align:center;padding-top:6px}
.tick{width:46px;height:46px;border-radius:50%;background:var(--ok-s);display:grid;place-items:center;margin:0 auto 12px}
.codecard{
  position:relative;overflow:hidden;margin-top:15px;padding:16px 14px 14px;border-radius:var(--r-lg);
  background:radial-gradient(120% 150% at 18% 0%,#17505b 0%,var(--navy) 64%);box-shadow:var(--shadow-md)
}
.codecard::after{content:'';position:absolute;left:-40px;bottom:-60px;width:180px;height:180px;border-radius:50%;
  background:radial-gradient(circle,rgba(20,184,166,.3),transparent 68%);pointer-events:none}
.codecard>*{position:relative;z-index:1}
.codecard-s{margin-top:9px;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#8ecfd5}
.code{font-size:30px;font-weight:800;letter-spacing:.14em;font-variant-numeric:tabular-nums;margin:0 0 2px;color:#fff}
.qrbox{background:#fff;border:1px solid var(--border);border-radius:var(--r);padding:12px;display:inline-block;margin:12px 0 2px}
.qrbox svg{display:block;width:150px;height:150px}
.next{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);padding:13px 14px;text-align:left;font-size:12.5px;color:var(--ink-soft);margin-top:16px}
/* doar PRIMUL <b> e titlul casetei; restul raman in text, altfel „235 lei cash"
   sarea pe rand propriu */
.next>b:first-child{color:var(--ink);display:block;margin-bottom:4px;font-size:13px}

/* ---------- panou administrare ---------- */
/* butoanele spre aplicatiile surori, in antetul panoului */
.top-act{display:flex;flex-wrap:wrap;gap:8px}
.top-act .btn{width:auto;padding:8px 14px;font-size:13px}

/* Antetul panoului. Inainte era un rand de text pe fundalul gol al paginii, langa
   trei butoane — arata a pagina neterminata. Banda navy e aceeasi familie cu meniul
   lateral din PV Service si Contracte, deci cele trei aplicatii par una singura. */
.pnl-head{
  background:linear-gradient(135deg,var(--navy) 0%,#14394a 52%,#0c5b64 100%);
  border-radius:var(--r-lg);padding:17px 20px;margin-bottom:14px;
  box-shadow:var(--shadow-md);color:#fff
}
.pnl-head .brandline b{color:#fff}
.pnl-head .brandline small{color:#a3c6cd}
.pnl-head .mark{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.24)}
.pnl-head .btn.ghost{background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.22);color:#fff}
.pnl-head .btn.ghost:hover{background:rgba(255,255,255,.19)}
.sub-panou{margin:0 0 11px;font-size:12.5px;color:var(--ink-mute)}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(152px,1fr));gap:12px;margin-bottom:16px}
/* Placuta e si cifra, si filtrul. Inainte cifrele stateau moarte sus, iar sub ele
   se repetau exact aceleasi cinci stari ca butoane — doua comenzi pentru un lucru.
   Fiecare stare isi are culoarea ei (--c), aceeasi cu a pastilei din lista. */
.tile{
  --c:var(--teal-d); --cs:var(--teal-s);
  position:relative;display:flex;flex-direction:column;align-items:flex-start;text-align:left;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r);
  padding:13px 14px 12px;box-shadow:var(--shadow);cursor:pointer;font:inherit;color:inherit;
  overflow:hidden;transition:border-color .14s,box-shadow .14s,transform .14s,background .14s
}
.tile::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--c);opacity:0;transition:opacity .14s}
.tile:hover{border-color:color-mix(in srgb,var(--c) 45%,var(--border));box-shadow:var(--shadow-md);transform:translateY(-1px)}
.tile.on{background:var(--cs);border-color:color-mix(in srgb,var(--c) 50%,transparent)}
.tile.on::before{opacity:1}
.tic{width:30px;height:30px;border-radius:9px;background:var(--cs);color:var(--c);display:grid;place-items:center;margin-bottom:9px;flex:none;transition:background .14s}
.tic svg{width:16px;height:16px}
.tile.on .tic{background:var(--surface)}
.tk{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-mute)}
.tv{font-size:27px;font-weight:800;letter-spacing:-.03em;font-variant-numeric:tabular-nums;line-height:1.12;margin-top:2px}
.td{font-size:12px;color:var(--ink-mute);margin-top:1px}
.tile.on .tv{color:var(--c)}
.tile.on .tk,.tile.on .td{color:color-mix(in srgb,var(--c) 72%,var(--ink))}
.t-toate{--c:var(--teal-d);--cs:var(--teal-s)}
.t-nou{--c:var(--warn);--cs:var(--warn-s)}
.t-aprobat{--c:var(--ok);--cs:var(--ok-s)}
.t-predat{--c:var(--accent);--cs:#e9effc}
.t-respins{--c:var(--bad);--cs:var(--bad-s)}
@media (pointer:coarse){.tile{padding:14px}}

.split{display:grid;grid-template-columns:minmax(0,1fr) 272px;gap:16px;align-items:start}
@media (max-width:860px){.split{grid-template-columns:minmax(0,1fr)}}

.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden}
.phead{padding:14px 16px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:10px}
.tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tools h3{font-size:14.5px;font-weight:700;margin-right:auto}
.cauta{position:relative;flex:1 1 190px;min-width:0}
.cauta input{width:100%;padding:8px 11px 8px 31px;border:1px solid var(--border-2);border-radius:9px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px}
.cauta input:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--teal) 16%,transparent)}
.cauta svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-mute);pointer-events:none}
.exp{display:inline-flex;align-items:center;gap:6px;padding:8px 13px;border:1px solid var(--border-2);background:var(--surface);border-radius:9px;cursor:pointer;font-size:13px;font-weight:600;color:var(--ink-soft);white-space:nowrap}
.exp:hover{background:var(--surface-2);border-color:var(--teal);color:var(--teal)}
/* cand e pus un filtru din placute, capul listei spune care e si cum se scoate */
.acum{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.acum:empty{display:none}
.acum-p{font-size:12px;font-weight:700;color:var(--navy);background:var(--surface-2);border:1px solid var(--border-2);border-radius:99px;padding:3px 11px}
.acum-x{border:0;background:none;padding:3px 2px;font-size:12.5px;font-weight:600;color:var(--teal);cursor:pointer;border-radius:6px}
.acum-x:hover{text-decoration:underline}
.pcount{font-size:11.5px;font-weight:600;color:var(--ink-mute)}

/* Lista de inscrieri: randuri-card, nu tabel. Un tabel cu sapte coloane nu
   incape pe un ecran obisnuit si obliga la derulare laterala. */
.lista{display:flex;flex-direction:column}
/* Grila, nu flex: asa motivul si butoanele stau aliniate sub nume, nu sub initiale. */
.rand{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  grid-template-areas:"av st dr" ". motiv motiv" ". act act";
  gap:2px 12px;padding:13px 16px;border-bottom:1px solid var(--border);align-items:start;
  transition:background .14s
}
.rand:hover{background:var(--surface-2)}
.rand:last-child{border-bottom:0}
.rand .st{grid-area:st;min-width:0}
/* Initialele — o listă de sute de nume aliniate identic se citește greu. */
.av{
  grid-area:av;width:38px;height:38px;border-radius:11px;display:grid;place-items:center;flex:none;
  font-size:13px;font-weight:700;letter-spacing:.02em;background:var(--surface-2);color:var(--ink-soft);
  border:1px solid var(--border)
}
.av-nou{background:var(--warn-s);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 22%,transparent)}
.av-aprobat{background:var(--ok-s);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 22%,transparent)}
.av-predat{background:var(--teal-s);color:var(--teal-d);border-color:color-mix(in srgb,var(--teal) 25%,transparent)}
.av-respins{background:var(--bad-s);color:var(--bad);border-color:color-mix(in srgb,var(--bad) 20%,transparent)}
@media (max-width:560px){
  .rand{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"av st" "dr dr" "motiv motiv" "act act";gap:8px 11px}
  .rand .dr{flex-direction:row;align-items:center;flex-wrap:wrap}
}
.rand .nume{font-weight:600;font-size:14px;overflow-wrap:anywhere}
.rand .sub{font-size:12.5px;color:var(--ink-mute);overflow-wrap:anywhere}
/* linie separata, pe flex: separatorul nu mai ramane orfan la capat de rand */
.rand .meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 7px;margin-top:3px;font-size:12.5px;color:var(--ink-mute)}
.rand .cod{font-size:11px;font-weight:700;letter-spacing:.04em;font-variant-numeric:tabular-nums;color:var(--ink-soft);background:var(--surface-2);border:1px solid var(--border);border-radius:6px;padding:1px 6px}
.rand .dr{grid-area:dr;flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.rand .ig{color:var(--teal);text-decoration:none;font-weight:600;font-size:12.5px;overflow-wrap:anywhere}
.rand .ig:hover{text-decoration:underline}
.pill{display:inline-block;padding:3px 9px;border-radius:99px;font-size:11.5px;font-weight:700;white-space:nowrap}
/* „nou" inseamna De verificat — asteapta decizia ta. In PV si Contracte starea
   asta e chihlimbarie, iar griul e rezervat pentru anulat/draft. Cu gri, exact
   randurile care cer o actiune erau singurele care se stingeau in lista. */
.pill.nou{background:var(--warn-s);color:var(--warn)}
.pill.aprobat{background:var(--ok-s);color:var(--ok)}
.pill.respins{background:var(--bad-s);color:var(--bad)}
.pill.predat{background:var(--teal-s);color:var(--teal-d)}
.gol{padding:24px 16px;text-align:center;color:var(--ink-mute);font-size:13.5px}
.tfoot{padding:11px 16px;border-top:1px solid var(--border);background:var(--surface-2);font-size:12.5px;color:var(--ink-mute)}

.fac{padding:14px 16px;display:flex;flex-direction:column;gap:11px}
.fac .r{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px}
.fac .nm{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fac .n{font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink-soft)}
.fac .track{grid-column:1/-1;height:5px;background:var(--surface-2);border-radius:4px;overflow:hidden}
.fac .track i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--teal),var(--teal-l));transition:width .4s cubic-bezier(.4,0,.2,1)}
.fac .n{background:var(--surface-2);border:1px solid var(--border);border-radius:7px;padding:0 7px;line-height:19px;height:19px;min-width:22px;text-align:center}

/* Creditul dezvoltatorului, in aceeasi forma ca in PV Service si Contracte.
   Inlocuieste .foot, o clasa care statea aici fara sa fie randata vreodata. */
.made-by{text-align:center;font-size:10.5px;letter-spacing:.01em;line-height:1.6;
  padding:16px 10px 20px;color:#97a6b7}
.made-by a{display:inline-flex;align-items:center;gap:4px;text-decoration:none;color:inherit;
  border-radius:6px;padding:1px 5px;transition:color .15s,background .15s}
.made-by b{font-weight:600}
.made-by svg{width:12px;height:12px;opacity:.6;transition:opacity .15s}
.made-by a:hover{color:#25d366;background:rgba(37,211,102,.1)}
.made-by a:hover svg{opacity:1}

/* =====================================================================
   Aplicatia reala — ce nu exista in macheta
   ===================================================================== */

/* Ecranul studentului: coloana centrata, nu ramă de telefon.
   Pe telefon ocupa tot, pe desktop sta la mijloc cu latime de telefon. */
.ecran{min-height:100dvh;display:flex;flex-direction:column;max-width:440px;margin:0 auto;background:var(--surface)}
@media (min-width:520px){
  .ecran{min-height:calc(100dvh - 48px);margin:24px auto;border-radius:20px;overflow:hidden;box-shadow:var(--shadow-lg)}
}
.ecran .sbar{position:sticky;top:0;z-index:2}
.ecran .body{flex:1;overflow-y:auto;padding:22px 20px 32px}

.incarc{padding:60px 20px;text-align:center;color:var(--ink-mute);font-size:14px}

/* Banda de test. Rosie dinadins: daca aplicatia ajunge din greseala la
   studenti pe date locale, inscrierile lor dispar odata cu cache-ul. */
.banda{
  background:var(--bad);color:#fff;text-align:center;
  padding:9px 14px;font-size:12.5px;font-weight:700;line-height:1.4;
  position:sticky;top:0;z-index:10
}

/* Capcana pentru roboti: invizibila pentru oameni, dar nu prin display:none,
   ca unele scripturi il detecteaza si o sar. */
.capcana{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.req{color:var(--bad);font-weight:700}   /* steluta de camp obligatoriu */

/* Ecranul de intrare. Prima incercare a imprumutat de la PV Service si Contracte
   doar NUMELE claselor (.login-wrap/.login-card), nu si valorile — deci cardul
   statea pe fundalul deschis al paginii, fara sigla, si nu semana cu nimic.
   Aici sunt copiate declaratiile ca atare din foaia celorlalte doua: ecran
   inchis, card alb care pluteste deasupra lui, sigla langa numele aplicatiei.
   Hexurile gradientelor nu sunt in variabile pentru ca nici acolo nu sunt —
   se schimba in trei locuri deodata sau in niciunul. */
.login-wrap{min-height:100dvh;display:grid;place-items:center;padding:24px 16px;
  background:
    radial-gradient(1200px 600px at 10% -10%, #12414b 0%, transparent 55%),
    radial-gradient(1000px 500px at 110% 110%, #0c5a63 0%, transparent 50%),
    var(--navy)}
.login-card{width:100%;max-width:400px;background:var(--surface);
  border-radius:16px;box-shadow:0 24px 60px rgba(0,0,0,.35);padding:32px}
.login-logo{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.login-mark-img{height:46px;max-width:64px;width:auto;object-fit:contain;flex:none}
.login-card h1{font-size:18px;font-weight:700;color:var(--ink)}
.login-card .sub{color:var(--ink-mute);font-size:12.5px;margin:2px 0 22px}
.login-card .btn{margin-top:4px}
/* Raspunsul la intrebarea pe care si-o pune oricine intra a doua oara: contul e
   acelasi, dar sesiunea se tine pe fiecare adresa in parte (asa lucreaza
   browserul, nu e o setare de-a noastra). Scris aici, pe ecran, ca sa nu mai
   para o defectiune. */
.login-note{margin-top:14px;text-align:center;font-size:11.5px;line-height:1.55;color:var(--ink-mute)}
.login-note b{font-weight:600;color:var(--ink-soft)}
.login-card .made-by{padding:16px 0 0;margin-top:4px}

.toasts{position:fixed;left:50%;transform:translateX(-50%);bottom:20px;z-index:50;display:flex;flex-direction:column;gap:8px;width:calc(100% - 32px);max-width:420px;pointer-events:none}
.toast{
  background:var(--navy);color:#fff;padding:11px 15px;border-radius:11px;
  font-size:13.5px;font-weight:500;box-shadow:var(--shadow-lg);transition:opacity .3s
}
.toast.err{background:var(--bad)}
.toast.ok{background:var(--ok)}

/* butonul de export din aplicatia reala nu are pictograma */
.exp{white-space:nowrap}
.rand .mkt{font-size:10.5px;font-weight:700;letter-spacing:.03em;color:var(--teal-d);background:var(--teal-s);border-radius:99px;padding:2px 8px;white-space:nowrap}

/* actiunile din panou */
.rand .actiuni{grid-area:act;display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}
.ac{
  border:1px solid var(--border-2);background:var(--surface);color:var(--ink-soft);
  border-radius:8px;padding:5px 12px;font-size:12.5px;font-weight:600;cursor:pointer;transition:.14s
}
.ac:hover{background:var(--surface-2);border-color:var(--teal);color:var(--teal)}
.ac.pri{background:var(--teal);border-color:var(--teal);color:#fff}
.ac.pri:hover{background:var(--teal-d);color:#fff}
.rand .motiv{
  grid-area:motiv;margin-top:7px;font-size:12.5px;color:var(--bad);
  background:var(--bad-s);border-radius:8px;padding:7px 10px;overflow-wrap:anywhere
}
.gol p{font-size:13px;line-height:1.55;max-width:34em;margin-left:auto;margin-right:auto}


/* ---------- pasul final: turbina ta + upgrade-ul ----------
   Clientul a cerut ca alegerea sa fie ULTIMUL lucru, iar cea cu LED sa NU fie o
   varianta egala, ci un upgrade peste turbina gratuita, cu costul lui. De aceea
   nu mai sunt doua casute la fel: una e „turbina ta", cealalta e o bifa. */
.premiu{border:1.5px solid var(--teal);background:var(--teal-s);border-radius:var(--r-lg);
  padding:13px 14px 14px;margin-bottom:12px;transition:opacity .16s,border-color .16s,background .16s}
.premiu.inlocuita{opacity:.5;border-color:var(--border);background:var(--surface)}
.premiu-k{display:block;font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;
  color:var(--teal-d);margin-bottom:9px}
.premiu .culori{margin:12px 0 0}

.upg{display:flex;gap:11px;align-items:flex-start;border:1.5px dashed var(--border-2);
  border-radius:var(--r-lg);padding:13px 14px;margin-bottom:12px;cursor:pointer;
  transition:border-color .16s,background .16s}
.upg:hover{border-color:color-mix(in srgb,var(--teal) 55%,var(--border-2))}
.upg.on{border-style:solid;border-color:var(--teal);background:var(--teal-s)}
.upg input{margin:2px 0 0;width:18px;height:18px;accent-color:var(--teal);flex:none}
.upg-txt{display:block;min-width:0}
/* Aceeasi supratitlu ca la cardul premiului („Turbina ta"), ca ochiul sa prinda
   din prima ierarhia: aia e turbina, asta e un supliment peste ea. Culoarea e
   neutra, nu teal — cardul de deasupra trebuie sa ramana cel principal. */
.upg-k{display:block;font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;
  color:var(--ink-mute);margin-bottom:6px}
.upg-cap{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.upg-cap b{font-size:14px;font-weight:700}
.upg-s{display:block;margin-top:5px;font-size:12.5px;color:var(--ink-soft);line-height:1.5}
.upg-poza{display:block;margin-top:10px}

.stoc{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);
  padding:10px 12px;font-size:12.5px;line-height:1.5;color:var(--ink-soft);margin-bottom:14px}
/* poza sta pe alb, ca pe site — decupata de fundal lasa halou pe margini */
.opt-poza{display:block;background:#fff;border:1px solid var(--border);border-radius:11px;padding:8px 10px;margin-bottom:10px}
.opt-poza img{display:block;width:100%;height:auto}
.opt-cap{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:2px}
.opt-cap b{font-size:14.5px;font-weight:700}
.opt-pret{margin-left:auto;font-style:normal;font-size:12px;font-weight:700;background:var(--navy);color:#fff;
  border-radius:99px;padding:3px 10px;white-space:nowrap}
.opt-pret.gratis{background:var(--ok-s);color:var(--ok)}
.opt-s{display:block;margin-top:5px;font-size:12.5px;color:var(--ink-soft);line-height:1.5}

.culori{margin-bottom:14px}
.culori>.lbl{display:block;font-size:12.5px;font-weight:600;color:var(--ink-soft);margin-bottom:7px}
.cul-lista{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:7px}
.cul{display:inline-flex;align-items:center;gap:7px;border:1.5px solid var(--border-2);background:var(--surface);
  border-radius:99px;padding:6px 12px 6px 7px;cursor:pointer;font:inherit;font-size:12.5px;font-weight:600;
  color:var(--ink-soft);transition:border-color .14s,background .14s,color .14s}
.cul.oricare{padding-left:12px}
.cul:hover{border-color:var(--teal)}
.cul.on{border-color:var(--teal);background:var(--teal-s);color:var(--teal-d)}
.cul-p{width:16px;height:16px;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.18);flex:none}


/* turbina aleasa, in randul din panou */
.rand .tur{font-size:11px;font-weight:600;color:var(--teal-d);background:var(--teal-s);
  border:1px solid color-mix(in srgb,var(--teal) 22%,transparent);border-radius:6px;padding:1px 7px;white-space:nowrap}
.rand .tur.led{color:var(--warn);background:var(--warn-s);border-color:color-mix(in srgb,var(--warn) 26%,transparent)}
.rand .tur b{font-weight:700}
/* cele doua panouri din dreapta, unul sub altul */
.lat{display:grid;gap:16px;align-content:start}
.fac .nm .mic{font-weight:400;color:var(--ink-mute);font-size:11px}
.culori-sum{border-top:1px solid var(--border);padding-top:10px;margin-top:2px;display:grid;gap:6px}
.culori-sum .mic{font-size:11px;color:var(--ink-mute);font-weight:600;letter-spacing:.02em}
.cbadge{display:inline-block;font-size:11.5px;font-weight:600;color:var(--ink-soft);background:var(--surface-2);
  border:1px solid var(--border);border-radius:99px;padding:2px 9px;margin:0 4px 4px 0}
.cbadge b{color:var(--ink);font-weight:700}

.next.cash{background:var(--warn-s);border-color:color-mix(in srgb,var(--warn) 26%,transparent);color:var(--warn);margin-top:10px}
.next.cash>b:first-child{color:var(--warn)}
.next.cash b{color:var(--warn);font-weight:700}

/* stergerea: vizibila, dar nu invitatoare — sta la capatul randului de actiuni */
.ac.sterge{margin-left:auto;color:var(--bad);border-color:#f0cccc}
.ac.sterge:hover{background:var(--bad-s);border-color:var(--bad);color:var(--bad)}

/* Pe atingere: tinte de minim 42px si 16px in casete.
   `.cauta input{font-size:13px}` (clasa + element) bate regula generala `input{font-size:16px}`
   de mai sus, deci campul de cautare al panoului inca provoca marirea paginii pe iPhone —
   de-aia e numit explicit aici. */
@media (pointer:coarse){
  .tile{padding:14px}
  .cauta input{font-size:16px}
  .ac{min-height:42px;padding:9px 15px;font-size:13.5px}
  .top-act .btn,.exp,.cauta input{min-height:42px}
  .rand .ig{display:inline-flex;align-items:center;min-height:26px}
  .acum-x{min-height:34px}
  .cul{min-height:42px}
}
