/* Solveon Pulse — ISO ekranlarinin ortak govde stili (V3-7f, 30 Tem 2026).
 *
 * Kaynak: eski tek-sayfa iso.html'in <style> blogu. Sayfa uce bolununce ayni
 * blok uc kopya olacakti; tek dosyaya alindi. YALNIZ iso-* sayfalari yukler
 * (tasarim dili tokens.css + components.css'te, bu dosya onlarin ustune biner).
 */
*{box-sizing:border-box;margin:0}
/* Sayfa genisligi ve form satiri (.frow / .frow-lbl) artik panel.css'te —
 * tek kaynak. Burada tekrarlanmaz (UI-TUR, 9 Agu). */
section{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius-card);
        box-shadow:var(--shadow-card);padding:var(--space-5);margin-bottom:var(--space-4)}
section h2{font-size:var(--fz-md);font-weight:var(--fw-semi);margin-bottom:4px}
section p.sub{font-size:var(--fz-sm);color:var(--text-muted);margin-bottom:var(--space-4)}
/* Kart izgarasi TAVAN genislikli ve SOLA YASLI (UI-TUR, 9 Agu turu 4).
 * Onceden `minmax(210px,1fr)` idi: tek kart kalinca (ornegin "Turetilmis EnPI —
 * yok") 1fr tum satiri kapiyor ve kart, kart olmaktan cikip dev bir bloga
 * donusuyordu. Sayfa 1440'a cikinca bu iyice gorunur oldu.
 * COZUM iki parcali: (1) izgara SATIRI PAYLASIR (1fr) — EnPI'deki dort kart
 * (gunluk enerji / calisma saati basina / uretim birimi basina / toplam enerji)
 * boylece HER genislikte tek sirada kalir, alta dusmez; (2) kartin KENDISINE
 * tavan konur — tek kart kalinca 1fr tum satiri verse bile kart 340'ta durur.
 * SABIT TAVANLA (280) DENENDI VE YETMEDI: 1440 px ekranda main'in ic genisligi
 * 1149 px, dort kart 4x280+3x12 = 1156 px istiyordu — sekiz piksel yuzunden
 * yine 3+1 kiriliyordu. Sabit tavan ekran genisligine bagli, bu kurgu degil.
 * Tablo ve grafikler tam genisligi kullanmaya DEVAM eder. */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:var(--space-3)}
.cards > *{max-width:340px}
.kpi{background:var(--surface-2);border:1px solid var(--hairline);border-radius:10px;padding:14px}
.kpi .lbl{font-size:var(--fz-xs);color:var(--text-muted)}
/* §11.3 (PULSE-278): KPI ve tablo sayilari Inter tabular; mono yalniz .raw */
.kpi .val{font-size:var(--fz-2xl);font-weight:600;margin:4px 0;font-variant-numeric:tabular-nums}
.kpi .sub{font-size:var(--fz-xs);color:var(--text-muted)}
.kpi .val .num{font-weight:600} .kpi .val .unit{font-size:var(--fz-sm);font-weight:400;color:var(--text-muted)}
.tag{font-size:10px;font-weight:var(--fw-bold);padding:2px 7px;border-radius:var(--radius-pill);
     background:var(--ink-100);color:var(--ink-500)}
.tag.decl{background:var(--amber-100);color:var(--amber-700)}
table{width:100%;border-collapse:collapse;font-size:var(--fz-sm)}
th{text-align:left;font-size:var(--fz-xs);color:var(--text-muted);font-weight:var(--fw-semi);
   text-transform:uppercase;letter-spacing:.04em;padding:6px 8px 6px 0;border-bottom:1px solid var(--hairline)}
td{padding:7px 8px 7px 0;border-bottom:1px solid var(--hairline)}
td.v{text-align:right;font-variant-numeric:tabular-nums}
/* Saga yasli sayidan sonra baska sutun geliyorsa nefes payi birak: aksi halde
 * sayi ile yandaki metin yapisik okunuyor ("veri yok —", "1.000 —"). Son
 * sutundaki sayilar (tablolarin cogu) etkilenmez. (30 Tem gorsel turu) */
td.v:not(:last-child){padding-right:var(--space-5)}
tr.old td{color:var(--text-muted);text-decoration:line-through}
/* ISO kanal eslemesi: Excel gibi veri girisi (V3-7f, 30 Tem).
 * Onceki halde tum alanlar tek "Tasiyici" hucresine sikismisti; placeholder
 * kirpiliyor, kullanici kutuya ne yazacagini bilmiyordu. Simdi her alan kendi
 * BASLIKLI sutununda; role uymayan sutunda kutu yerine "—" durur. */
.tbl-kaydir{overflow-x:auto;margin:0 calc(-1 * var(--space-2));padding:0 var(--space-2)}
table.grid{min-width:1080px;border-collapse:separate;border-spacing:0}
table.grid th{white-space:nowrap;padding:6px 8px;border-bottom:1px solid var(--hairline-strong)}
table.grid td{padding:5px 8px;border-bottom:1px solid var(--hairline);vertical-align:middle}
table.grid th + th, table.grid td + td{border-left:1px solid var(--hairline)}
table.grid tbody tr:hover td{background:var(--surface-2)}
table.grid .s-input{width:100%;min-width:74px}
/* Sinyal adi ve seri no alt alta: parantezli tek satir uc satira sariyordu. */
table.grid td.sig{min-width:200px;white-space:nowrap}
table.grid td.sig .sub{font-size:var(--fz-xs);color:var(--text-muted);margin-top:2px}
table.grid td[data-for] .na{display:none;color:var(--text-faint)}
/* Rol yoksa ya da role uymuyorsa: kutu gizli, "—" gorunur. */
table.grid tr[data-role=""] td[data-for] .s-input,
table.grid tr[data-role="energy_carrier"] td[data-for="ai"] .s-input,
table.grid tr[data-role="process_variable"] td[data-for="carrier"] .s-input,
table.grid tr[data-role="relevant_variable"] td[data-for="carrier"] .s-input{display:none}
table.grid tr[data-role=""] td[data-for] .na,
table.grid tr[data-role="energy_carrier"] td[data-for="ai"] .na,
table.grid tr[data-role="process_variable"] td[data-for="carrier"] .na,
table.grid tr[data-role="relevant_variable"] td[data-for="carrier"] .na{display:inline}
.msg{font-size:var(--fz-sm);margin-top:10px;min-height:18px}
.msg.ok{color:var(--emerald-600)} .msg.err{color:var(--red-600)} .msg.warn{color:var(--amber-600)}
.note{font-size:var(--fz-xs);color:var(--text-muted);margin-top:10px}
.gate{padding:40px;text-align:center;color:var(--text-muted)}
/* Hedef ilerleme cubugu (V3-7d) */
.pbar{height:8px;border-radius:var(--radius-pill);background:var(--ink-100);overflow:hidden;margin:8px 0 4px}
.pbar > i{display:block;height:100%;border-radius:var(--radius-pill);background:var(--sky-600, var(--ink-500))}
.pbar > i.done{background:var(--emerald-600)}
.badge{font-size:10px;font-weight:var(--fw-bold);padding:2px 7px;border-radius:var(--radius-pill)}
.badge.open{background:var(--amber-100);color:var(--amber-700)}
.badge.closed{background:var(--emerald-100);color:var(--emerald-600)}
.badge.met{background:var(--emerald-100);color:var(--emerald-600)}
/* Sapma kaydi karti (V3-7d, denetim izi) */
.dev{border:1px solid var(--hairline);border-radius:10px;padding:12px 14px;margin-bottom:10px;background:var(--surface-2)}
.dev .dhead{display:flex;justify-content:space-between;align-items:center;gap:10px}
.dev .dt{font-weight:var(--fw-semi)}
.dev .meta{font-size:var(--fz-xs);color:var(--text-muted);margin-top:4px}
.dev .trail{font-size:var(--fz-xs);color:var(--emerald-600);margin-top:8px;
            border-top:1px dashed var(--hairline);padding-top:6px}
.dev .close-box{display:none;margin-top:8px}
.dev .close-box.on{display:block}
#demoBar{display:none;background:var(--amber-100);color:var(--amber-700);
         border-bottom:1px solid var(--amber-500);padding:9px 20px;
         font-size:var(--fz-sm);font-weight:var(--fw-semi);text-align:center}
