/* ══════════════════════════════════════════════════════════════════════
   status.prospiratweaks.com — układ danych jak Claude Status, ale w ciemnym
   royal-glass Prospiry. Cały chrome (nav, stopka, tło, fonty, karty) pochodzi
   z prospira.css; tu tylko to, czego strona statusu potrzebuje ponad system.

   Jedna świadoma decyzja kolorystyczna: witryna NIE ma zieleni ani bursztynu.
   „Operational" jest ROYAL (nie zielony) — to jest nasz styl. „Degraded" dostaje
   jeden bursztyn (jedyny obcy kolor), bo na stronie statusu ten stan musi się
   wyraźnie odróżniać. „Outage" = sankcjonowana miękka czerwień błędu.
   Sygnatura: pasek uptime świecący na royal zamiast zielonego.
   ══════════════════════════════════════════════════════════════════════ */

:root {
  --st-ok: #2a5bff;
  --st-ok-2: #4f7bff;
  --st-ok-soft: rgba(42, 91, 255, 0.16);
  --st-ok-line: rgba(120, 155, 255, 0.4);
  --st-ok-text: #bcd0ff;
  /* Zieleń „operational" — świadome odstępstwo od zasady „success jest royal",
     ograniczone do OKIENKA baneru (słupki/pigułki dalej royal). Na życzenie. */
  --st-green: #37cc8b;
  --st-green-soft: rgba(45, 200, 135, 0.14);
  --st-green-line: rgba(90, 220, 160, 0.38);
  --st-deg: #e0a44a;               /* jedyny obcy kolor, celowo */
  --st-deg-soft: rgba(224, 164, 74, 0.14);
  --st-deg-line: rgba(224, 164, 74, 0.34);
  --st-out: #f0685f;               /* miękka czerwień, z systemu toastów */
  --st-out-soft: rgba(255, 90, 90, 0.14);
  --st-out-line: rgba(255, 145, 145, 0.34);
  --st-out-text: #ffb4b4;
  --st-maint: #93a7d4;
  --st-nodata: rgba(150, 180, 255, 0.09);
}

/* ── layout ─────────────────────────────────────────────────────────── */
.st-main { padding-top: clamp(28px, 5vw, 52px); padding-bottom: 8px; }
.st-top { display: flex; flex-direction: column; align-items: center; text-align: center; }
.st-note { margin: 22px auto 0; max-width: 60ch; text-align: center; color: var(--text-low); font-size: 0.9rem; }

/* ── baner ogólny (teza) ────────────────────────────────────────────── */
/* Kropka „na żywo" usunięta na życzenie — teraz CAŁE okienko niesie stan:
   tło, krawędź, poświata i słowo-payoff zmieniają barwę. Operational = zielone. */
.st-banner {
  position: relative; overflow: hidden;
  display: flex; align-items: center;
  width: 100%; max-width: 760px; margin-top: 4px;
  padding: 20px 24px; text-align: left;
  border-radius: var(--r-panel);
  border: 1px solid var(--card-border);
  background: var(--card-bg);
  box-shadow: var(--card-shadow);
  transition: border-color var(--dur-1) var(--ease-out), box-shadow var(--dur-1) var(--ease-out);
}
.st-banner::before {                 /* górna włoskowata linia, zabarwiona stanem */
  content: ''; position: absolute; top: 0; left: 8%; right: 8%; height: 1px;
  background: linear-gradient(90deg, transparent, var(--card-border), transparent);
}
.st-banner-title {
  margin: 0; font-size: clamp(1.5rem, 3.2vw, 2.05rem);
  font-weight: 600; letter-spacing: -0.02em; line-height: 1.12; color: var(--text-hi);
}
.st-banner-title em {                /* słowo-payoff w serifie (kolor per stan niżej) */
  font-family: var(--font-serif); font-style: italic; font-weight: 400; letter-spacing: -0.01em;
  background: none; -webkit-text-fill-color: initial; color: var(--text-mid);
}
.st-banner-sub {
  margin: 5px 0 0; font-size: 0.9rem; color: var(--text-mid);
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
}
.st-when { color: var(--text-low); }
.st-banner.is-stale .st-when { color: var(--st-deg); }

/* ── stany baneru — całe okienko zmienia barwę ──────────────────────── */
.st-banner[data-state="operational"] {
  border-color: var(--st-green-line);
  background: radial-gradient(135% 165% at 0% 0%, var(--st-green-soft), transparent 60%), var(--card-bg);
  box-shadow: var(--card-shadow), 0 0 48px -20px rgba(45,200,135,0.62), inset 0 1px 0 rgba(130,240,195,0.13);
}
.st-banner[data-state="operational"]::before { background: linear-gradient(90deg, transparent, var(--st-green-line), transparent); }
.st-banner[data-state="operational"] .st-banner-title em {
  background: linear-gradient(115deg, #d8ffec 6%, #6fe0ab 52%, var(--st-green) 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent;
}

.st-banner[data-state="degraded"] {
  border-color: var(--st-deg-line);
  background: radial-gradient(135% 165% at 0% 0%, var(--st-deg-soft), transparent 60%), var(--card-bg);
  box-shadow: var(--card-shadow), 0 0 48px -20px rgba(224,164,74,0.5), inset 0 1px 0 rgba(240,205,150,0.11);
}
.st-banner[data-state="degraded"]::before { background: linear-gradient(90deg, transparent, var(--st-deg-line), transparent); }
.st-banner[data-state="degraded"] .st-banner-title em { color: var(--st-deg); }

.st-banner[data-state="major_outage"],
.st-banner[data-state="partial_outage"] {
  border-color: var(--st-out-line);
  background: radial-gradient(135% 165% at 0% 0%, var(--st-out-soft), transparent 60%), var(--card-bg);
  box-shadow: var(--card-shadow), 0 0 48px -20px rgba(240,104,95,0.52), inset 0 1px 0 rgba(255,185,185,0.11);
}
.st-banner[data-state="major_outage"]::before,
.st-banner[data-state="partial_outage"]::before { background: linear-gradient(90deg, transparent, var(--st-out-line), transparent); }
.st-banner[data-state="major_outage"] .st-banner-title em,
.st-banner[data-state="partial_outage"] .st-banner-title em { color: var(--st-out-text); }

.st-banner[data-state="maintenance"] .st-banner-title em { color: var(--st-maint); }

/* ── grupy komponentów ──────────────────────────────────────────────── */
.st-groups { margin-top: clamp(30px, 5vw, 46px); display: flex; flex-direction: column; gap: 18px; }
.st-group {
  border-radius: 24px; padding: clamp(14px, 2vw, 20px) clamp(16px, 2.2vw, 24px);
  border: 1px solid var(--island-border);
  background:
    linear-gradient(180deg, rgba(255,255,255,0.022), rgba(255,255,255,0.006)),
    radial-gradient(130% 120% at 0% -10%, rgba(42,91,255,0.05), transparent 60%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.045);
}
.st-group-label {
  display: block; margin: 2px 2px 6px;
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 500;
  letter-spacing: 0.14em; text-transform: uppercase; color: rgba(150,185,255,0.7);
}

/* ── wiersz komponentu ──────────────────────────────────────────────── */
.st-row { padding: 15px 4px; border-top: 1px solid var(--border-soft); }
.st-row:first-of-type { border-top: none; padding-top: 8px; }
.st-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 11px; }
.st-row-name { font-size: 1rem; font-weight: 500; color: var(--text-hi); letter-spacing: -0.01em; min-width: 0; }
/* Subtelny sygnał problemu: sama NAZWA w kolorze stanu (zamiast głośnej pigułki). */
.st-row-name.is-deg { color: #f0c88a; }
.st-row-name.is-out { color: var(--st-out-text); }
.st-row-name.is-maint { color: var(--st-maint); }
.st-row-right { display: inline-flex; align-items: center; gap: 10px; margin-left: auto; flex-shrink: 0; }
.st-row-up { font-family: var(--font-mono); font-size: 0.78rem; color: var(--text-low); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* Etykieta stanu (tylko poza „operational") — BEZ ramki/tła: kropka + słowo.
   Dużo cichsza niż pigułka; nazwa komponentu niesie główny sygnał koloru. */
.st-pill {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 500;
  letter-spacing: 0.03em; white-space: nowrap; color: var(--text-mid);
}
.st-pill::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex-shrink: 0; }
.st-pill.is-deg { color: #e6b878; }
.st-pill.is-out { color: var(--st-out-text); }
.st-pill.is-maint { color: var(--st-maint); }

/* ── SYGNATURA: pasek uptime ────────────────────────────────────────── */
.st-bars { display: flex; gap: 2px; height: 32px; align-items: stretch; }
.st-day {
  flex: 1 1 0; min-width: 0; border-radius: 2px;
  background: var(--st-nodata);
  transition: transform var(--dur-1) var(--ease-out), filter var(--dur-1) var(--ease-out);
}
.st-day.is-ok {
  background: linear-gradient(180deg, var(--st-ok-2), var(--st-ok));
  box-shadow: 0 0 7px -2px rgba(42, 91, 255, 0.7);
}
.st-day.is-deg { background: linear-gradient(180deg, #edb257, var(--st-deg)); box-shadow: 0 0 7px -2px rgba(224,164,74,0.6); }
.st-day.is-out { background: linear-gradient(180deg, #ff726b, var(--st-out)); box-shadow: 0 0 7px -2px rgba(240,104,95,0.6); }
.st-day.is-maint { background: rgba(147,167,212,0.42); }
.st-day:hover { transform: scaleY(1.12); filter: brightness(1.18); }

.st-legend {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  margin-top: 9px; font-family: var(--font-mono); font-size: 0.72rem; color: var(--text-low);
}

/* pływający tooltip słupka (JS ustawia pozycję i treść) */
.st-tip {
  position: fixed; z-index: var(--z-overlay); pointer-events: none;
  transform: translate(-50%, calc(-100% - 10px));
  padding: 8px 11px; border-radius: 10px;
  border: 1px solid var(--border-mid);
  background: linear-gradient(180deg, rgba(13,18,38,0.97), rgba(8,12,26,0.98));
  box-shadow: 0 18px 40px -22px rgba(0,0,0,0.8);
  font-family: var(--font-mono); font-size: 0.74rem; color: var(--text-hi); white-space: nowrap;
  max-width: calc(100vw - 16px);       /* zabezpieczenie: dymek nigdy szerszy niż ekran */
  opacity: 0; transition: opacity var(--dur-1) var(--ease-out);
}
.st-tip.is-on { opacity: 1; }
.st-tip.is-below { transform: translate(-50%, 10px); }   /* odwrócenie: pod słupek */
.st-tip b { font-weight: 500; }
.st-tip .st-tip-state { color: var(--text-mid); }

/* ── incydenty ──────────────────────────────────────────────────────── */
.st-incidents { margin-top: var(--section-gap); }
.st-h2 { font-size: clamp(1.4rem, 3vw, 1.9rem); font-weight: 600; letter-spacing: -0.03em; color: var(--text-hi); margin: 0 0 clamp(20px, 3vw, 30px); }
.st-h2 em {
  font-family: var(--font-serif); font-style: italic; font-weight: 400;
  background: linear-gradient(115deg, #d4e2ff 8%, #7fa2ff 54%, var(--st-ok) 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent;
}
.st-inc-empty {
  border-radius: var(--r-card); border: 1px solid var(--border-soft);
  background: rgba(150,180,255,0.03); padding: 26px 22px; text-align: center;
}
.st-inc-empty-title { margin: 0; font-weight: 500; color: var(--text-hi); }
.st-inc-empty-sub { margin: 5px 0 0; font-size: 0.9rem; color: var(--text-low); }

.st-inc { padding: 18px 0; border-top: 1px solid var(--border-soft); }
.st-inc:first-child { border-top: none; }
.st-inc-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.st-inc-date { font-family: var(--font-mono); font-size: 0.74rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-low); }
.st-inc-title { font-size: 1rem; font-weight: 500; color: var(--text-hi); }
.st-inc-badge {
  margin-left: auto; padding: 3px 10px; border-radius: var(--r-pill);
  font-family: var(--font-mono); font-size: 0.68rem; letter-spacing: 0.05em; text-transform: uppercase;
  border: 1px solid var(--st-ok-line); background: var(--st-ok-soft); color: var(--st-ok-text);
}
.st-inc-badge.is-open { border-color: var(--st-out-line); background: var(--st-out-soft); color: var(--st-out-text); }
.st-inc-meta { margin: 6px 0 0; font-size: 0.84rem; color: var(--text-low); }
.st-inc-updates { list-style: none; margin: 12px 0 0; padding: 0 0 0 16px; border-left: 1px solid var(--border-mid); display: flex; flex-direction: column; gap: 12px; }
.st-upd { position: relative; }
.st-upd::before { content: ''; position: absolute; left: -20px; top: 5px; width: 7px; height: 7px; border-radius: 50%; background: var(--st-ok); border: 2px solid var(--bg-0); }
.st-upd-when { font-family: var(--font-mono); font-size: 0.7rem; color: var(--text-low); letter-spacing: 0.04em; }
.st-upd-body { margin: 2px 0 0; font-size: 0.9rem; color: var(--text-mid); line-height: 1.55; }

/* ── skeleton podczas ładowania ─────────────────────────────────────── */
.st-skel .st-group { opacity: 0.6; }
.st-skel .st-bars .st-day { background: var(--st-nodata); }

/* ── responsywność ──────────────────────────────────────────────────────
   Skala płynna (clamp) robi większość roboty na każdej szerokości; te progi
   dokręcają gęstość na tabletach → telefonach → małych telefonach. Słupki są
   flex:1, więc same się zwężają — na wąskich MNIEJSZY odstęp daje szersze słupki. */

/* tablety i węższe: baner pełnej szerokości (bez sztucznego limitu 760) */
@media (max-width: 820px) {
  .st-banner { max-width: none; }
}

/* telefony */
@media (max-width: 640px) {
  .st-main { padding-top: clamp(20px, 6vw, 40px); }
  .st-banner { padding: 18px; }
  .st-banner-title { font-size: clamp(1.45rem, 6.4vw, 1.9rem); }
  .st-group { border-radius: 20px; padding: 14px 14px; }
  .st-row { padding: 14px 2px; }
  .st-row-head { margin-bottom: 10px; }
  /* Na telefonie stan niesie KOLOR nazwy (+ słupki) — słowo („Major outage")
     jest ZDJĘTE, żeby nazwa i dostępność stały w JEDNYM wierszu. Wcześniej badge
     łamał wiersz i nazwa „uciekała" nad niego — brzydko. Baner i tak pokazuje
     stan ogólny słowem; szczegół jest w sekcji incydentów. */
  .st-pill { display: none; }
  .st-row-up { margin-left: auto; }
  .st-legend { font-size: 0.68rem; }
  .st-bars { gap: 1.5px; height: 30px; }
  .st-h2 { font-size: clamp(1.3rem, 6vw, 1.7rem); }
  .st-inc-updates { padding-left: 14px; }
}

/* małe telefony (≈320–400): najciaśniej — słupki dostają maks. miejsca */
@media (max-width: 400px) {
  .st-group { padding: 12px 10px; }
  .st-row { padding: 13px 0; }
  .st-row-name { font-size: 0.94rem; }
  .st-row-up { font-size: 0.73rem; }
  .st-bars { gap: 1px; height: 28px; }
  .st-legend { font-size: 0.64rem; }
}
