elevarts.com · propunere de design

Dark mode — înainte și după

Șase modificări implementate în elevarts-astro, pornite de la reel-ul @designmotionhq și verificate pe tokenii reali ai site-ului. Totul e scris în cod și construit, dar nimic nu e publicat. Pagina asta e ce se schimbă, măsurat și fotografiat din paginile adevărate.

⏸ nedeployat — aștept OK branch master, necommitat ✓ npm run check ✓ build 412 pagini 3 fișiere atinse

Pe scurt

Fiecare rând e o valoare schimbată într-un singur loc. Coloana „se propagă în" spune câte locuri din cod o citesc — de-aia sunt schimbări de un rând cu efect pe tot site-ul.

CeDinÎnSe propagă înPaginiRisc
1Text secundar alb 40%alb 55% 42 locuri, 12 fișieretoate mic
2Mov pe text #af18ed#c697d8 6 locuri (token nou)home, de-ce-noi, portofoliu mediu
3Text principal #ffffffalb 92% 196 locuri, 14 fișieretoate mic
4Umbre blur 48–80px negruinel 1px + contact 3 prin token + 6 hardcodate~210 mediu
5Scara de elevație fără nume--elev-0…3 doar tokens.mjszero (doar nume) nul
6Greutatea textului 400385 1 loc (body)toate mic

Cum se citesc cifrele de mai jos

Lc e contrastul măsurat cu APCA — algoritmul din WCAG 3, nu raportul clasic. L-am folosit pentru că raportul clasic supraevaluează sistematic textul deschis pe fundal închis, adică exact cazul nostru. Praguri: Lc 75 = text de 16px, Lc 60 = 18px, Lc 45 = 24px și mai mare, Lc 30 = minimul sub care un element nu mai are ce căuta pe ecran.

Cele șase modificări

Panourile de mai jos sunt randate live, cu fonturile și tokenii reali ai site-ului. Nu sunt capturi.

1Textul secundar urcă de la 40% la 55%

Etichetele, subtitlurile și notele mici foloseau alb la 40% opacitate. La 13–14px, cât sunt scrise, ochiul le vede ca pată cenușie, nu ca litere. Nu e o preferință de stil: 40% dă Lc 26, sub pragul absolut de 30.

înainte · alb 40%

Evenimente livrate

3.000+evenimente
800+costume proprii
APCA Lc 26.2sub pragul minim (30)

după · alb 55%

Evenimente livrate

3.000+evenimente
800+costume proprii
APCA Lc 43.4bun pentru text mic auxiliar
Unde se schimbă
src/config/tokens.mjs — o linie, --text-subtle
Se propagă în
42 de locuri, 12 fișiere
CaseStudy · ThemesIndex · WhyPage · BlogPost · BlogIndex · CatalogTiles · CoursesPage · LegalPage · Ecosystem · ThemePage · main.css · craft.css
Ce vezi schimbat
etichetele de sub cifre, „DESCRIPTION / CATEGORIES" pe pagini de act, kicker-ele de secțiune, datele de pe blog, notele din paginile legale
2Un mov separat, numai pentru text

--primary (#af18ed) e saturat la 86%. Ca fundal de buton, cu alb peste, e perfect — rămâne neatins acolo. Ca culoare de literă pe fundal închis dă Lc 28.7 și „curge" dincolo de marginea glifei. Tokenul nou păstrează exact același hue (283°) și coboară doar saturația și luminozitatea: S86→45%, L51→72%. Brandul nu se mișcă, doar litera devine lizibilă.

înainte · #af18ed

18ani de scenă
3.000+evenimente
800+costume proprii
APCA Lc 28.7H 283 · S 86% · L 51%

după · #c697d8

18ani de scenă
3.000+evenimente
800+costume proprii
APCA Lc 55.0H 283 · S 45% · L 72%
Unde se schimbă
token nou --primary-text în tokens.mjs, plus 6 înlocuiri de color:
Se propagă în
6 locuri, țintit:
WhyPage.astro:194 — cifrele
main.css:3970/73/76/79 — .stat-number
main.css:5002 — separatorul din titlul de portofoliu
Ce NU se atinge
butoanele .btn-primary, bordurile de hover, glow-urile, gradientul de brand, logoul. Toate rămân pe --primary saturat.
3Albul principal coboară la 92%

Albul pur pe aproape-negru dă Lc 107, adică peste pragul de la care conturul literei începe să strălucească — efect de halou, resimțit mai ales de cititorii cu astigmatism, și obositor la text lung. La 92% contrastul rămâne Lc 95, cu mult peste orice cerință, dar textul stă liniștit în pagină.

înainte · #ffffff · greutate 400

Facem show-uri cu costume proprii, artiști ai noștri și un singur om de sunat. De 18 ani avem grijă să iasă exact cum l-ai aprobat.

Costumele le construim în atelierul nostru, iar repetițiile se fac pe scena din sediu înainte de orice eveniment.

APCA Lc 107.6peste 90 = zona de halou

după · alb 92% · greutate 385

Facem show-uri cu costume proprii, artiști ai noștri și un singur om de sunat. De 18 ani avem grijă să iasă exact cum l-ai aprobat.

Costumele le construim în atelierul nostru, iar repetițiile se fac pe scena din sediu înainte de orice eveniment.

APCA Lc 95.0peste pragul de 75 cu marjă mare
Unde se schimbă
tokens.mjs — o linie, --text
Se propagă în
196 de locuri, 14 fișiere — e culoarea implicită de text a întregului site
Ce vezi schimbat
orice titlu și orice paragraf, pe toate cele 412 pagini. Cea mai largă dintre cele șase, și cea mai discretă la bucată.
4Umbra neagră devine inel de lumină

Pe fundalul nostru (#0d0d0d) o umbră neagră mută luminanța de la 0,0040 la 0,0012 — o diferență pe care ochiul n-o vede, dar al cărei blur de 80px se plătește la fiecare redesenare, mai ales pe telefon. Marginea care chiar se citește pe întuneric e o linie de lumină de 1px. Umbra rămâne, mai strânsă, doar ca ancoră de contact.

înainte · blur 48px negru

Sediul și atelierul

Birou, atelier și sală de repetiții — vizite doar cu programare.

0 16px 48px rgba(0,0,0,.44)marginea de sus se pierde în fundal

după · inel 1px + contact

Sediul și atelierul

Birou, atelier și sală de repetiții — vizite doar cu programare.

0 0 0 1px alb 10%, 0 16px 40px negru 60%cardul are contur pe toate laturile
Unde se schimbă
tokens.mjs--shadow-card și --shadow-raised; plus 6 umbre hardcodate mutate pe token
Se propagă în
9 elemente:
.contact-info · .contact-map__frame
.themes-cta__inner · .act-detail__info
.act-cta-banner__inner · .prod-cta__inner
+ 3 prin token (carduri portofoliu)
Pagini atinse
~210 — două dintre elemente (.act-detail__info, .act-cta-banner__inner) sunt pe fiecare din cele 204 pagini de act
5Scara de elevație primește nume

Site-ul avea deja șase suprafețe, în ordine bună de luminozitate, dar fără un nume care să spună care e mai sus. Cel mai încurcat: --surface-deep („adânc") e de fapt mai deschis decât --bg, deci mai sus. Adaug patru aliasuri peste valorile existente. Zero schimbare vizuală — e singura modificare din listă pe care nu ai cum s-o vezi. Rostul ei e ca următoarea persoană care adaugă un card să urce o treaptă, nu să pună a 105-a umbră.

înainte · șase nume fără ordine

--bg#0d0d0d
--surface-deep#131517  „adânc", dar mai sus
--surface#1a1a1a
--card-bg#1c1f28
ordinea se deducedin hex, de fiecare dată

după · o scară, patru trepte

--elev-0  paginaL 5,1%
--elev-1  bandăL 8,2%
--elev-2  suprafațăL 10,2%
--elev-3  cardL 13,3%
ordinea e scrisăaceleași culori, alt nume
Unde se schimbă
tokens.mjs — patru aliasuri noi, zero valori atinse
Se propagă în
nicăieri, încă. Sunt disponibile de acum înainte; codul existent rămâne pe numele vechi, care funcționează la fel.
De ce merită
site-ul are 104 declarații de umbră. Fără o scară numită, a 105-a e inevitabilă.
6Greutatea textului coboară la 385

Pe fundal închis, literele deschise par mai groase decât sunt — se numește iluzia de iradiere și e o chestiune de optică, nu de gust. Manrope, fontul nostru de text, e variabil (200–800), deci greutatea se poate cobori fracționar. 385 aduce textul optic înapoi la 400, fără nicio mișcare de layout. Compară cele două panouri de la punctul 3 — acolo e vizibil cel mai bine, pe paragraf lung.

înainte · 400

Costumele le construim în atelierul nostru, iar repetițiile se fac pe scena din sediu înainte de orice eveniment. Artiștii sunt ai noștri.

după · 385

Costumele le construim în atelierul nostru, iar repetițiile se fac pe scena din sediu înainte de orice eveniment. Artiștii sunt ai noștri.

Unde se schimbă
public/css/main.css — o linie, pe body
Se propagă în
tot ce moștenește greutatea, adică textul curent de pe toate paginile. Titlurile au greutăți scrise explicit și nu se mișcă.
Risc
zero layout shift — e același font, aceeași metrică. Dacă nu-ți place, e un singur număr de schimbat înapoi.

Din paginile adevărate

Capturi din site-ul construit acum, la 1280px și 390px. Trage de linia mov, sau apasă butoanele ca să comuți dintr-o dată — pentru diferențele mici, comutarea bruscă se vede mai bine decât trasul încet.

Cifrele de pe „De ce noi" /ro/de-ce-noi/ · 1280px · schimbările 1 + 2
Cifrele înainte: mov saturat, etichete stinse
Cifrele după: mov calm, etichete lizibile
înaintedupă

Cel mai clar exemplu din tot lotul: numărul devine lizibil fără să iasă din brand, iar eticheta de sub el încetează să fie o pată.

Bara de cifre de pe prima pagină /ro/ · 1280px · schimbările 1 + 2
Bara de statistici înainte
Bara de statistici după
înaintedupă
Panoul de contact /ro/contact/ · 1280px · schimbările 3 + 4
Panoul de contact înainte
Panoul de contact după
înaintedupă

Aici se vede inelul de lumină: pune linia sus de tot și uită-te la marginea de sus a panoului — înainte se topea în fundal.

Pagina de act — coloana de text /our-acts/jongleuri-led/ · 1280px · 204 pagini identice
Coloana de text de pe pagina de act, înainte
Coloana de text de pe pagina de act, după
înaintedupă

Apasă „comută" de câteva ori și uită-te la titlul mare: albul pur pulsează, cel de 92% stă. Butonul mov rămâne exact cum era.

Bannerul de final de pagină de act /our-acts/jongleuri-led/ · 1280px · schimbarea 4
Bannerul de CTA înainte
Bannerul de CTA după
înaintedupă
Blocul de CTA de pe teme /ro/themes/ · 1280px · schimbarea 4
Blocul de CTA înainte
Blocul de CTA după
înaintedupă
Text lung — pagina de termeni /privacy/ · 1280px · schimbările 3 + 6
Text lung înainte
Text lung după
înaintedupă

Proba cea mai grea pentru punctele 3 și 6: un ecran plin de text mic. Aici se simte diferența la citit, nu la privit.

Prima pagină pe telefon /ro/ · 390px · toate schimbările
Prima pagină pe telefon, înainte
Prima pagină pe telefon, după
înaintedupă
Pagină de act pe telefon /our-acts/jongleuri-led/ · 390px · toate schimbările
Pagina de act pe telefon, înainte
Pagina de act pe telefon, după
înaintedupă

Poza produsului rămâne la luminozitate plină, neatinsă. Vezi secțiunea de mai jos.

Ce nu am schimbat, deși reel-ul o cere

Două dintre cele șase principii ale lui nu se aplică la noi. Unul fiindcă îl respectăm deja, celălalt fiindcă la noi ar strica.

Liniile subțiri — le facem deja corect

Principiul 05 din reel cere ca liniile de 1px să fie scrise în alfa, nu în gri fix, ca să se adapteze la suprafața de sub ele. Noi avem deja --border: alb 12% și --glass-bg: alb 6%. Nimic de făcut.

Pozele — nu le întunecăm, și e o corectură la ce ți-am spus prima dată

Prima oară ți-am semnalat că filter: brightness(1.12) de pe imaginile de hero face exact invers față de principiul 06. Am citit filtrul izolat. Când m-am uitat la element, peste pozele alea stă deja un văl gros (.hero__scrim, negru până la 90%) — boostul e compensarea lui, nu o greșeală. Comentariul din cod o spune: „sursele sunt filmate în cluburi și noaptea". Le las cum sunt.

Mai departe: reel-ul e făcut pentru un dashboard, unde poza e decor. La noi poza e produsul. Un client care se uită la un costum trebuie să-l vadă la lumina lui, nu la 90%. Așa că regula pentru noi e împărțită: se întunecă doar imaginile decorative — fundal de secțiune, copertă sub text — iar galeria de produs rămâne la 1. Verificat: galeriile de act n-au niciun filtru, logourile de clienți sunt deja la 60% opacitate. Adică e deja făcut corect, fără să știm că e o regulă.

Cele 98 de umbre rămase

Site-ul are 104 declarații de box-shadow. Am mutat pe token doar 6 — cele negre cu blur mare, unde câștigul e clar. Restul sunt glow-uri de brand și umbre mici care își fac treaba; le-am lăsat. Le semnalez, nu le rescriu: un refactor de 98 de linii pe care nu le-ai cerut face diff-ul imposibil de verificat.

Dacă spui da

Comanda de publicare, când dai OK:

cd ~/elevarts-astro && npm run ship

Ce rămâne de decis separat

Gradientul de brand din titluri (--grad-start #e100e7 spre alb) dă Lc 37 la capătul magenta. Pe titluri de 44–88px e la limita de jos a ce se citește confortabil. N-am atins nimic — e semnătura vizuală a site-ului și o schimbare acolo e o decizie de brand, nu una de accesibilitate. Dacă vrei, îți fac o variantă cu capătul magenta cu 8% mai deschis și o compari aici, la fel.