:root { --board-bg: #05070d; --board-panel: #101321; --board-panel-alt: #161a2c; --board-border: rgba(255, 255, 255, 0.08); --board-accent: #2dd4bf; --board-accent-soft: rgba(45, 212, 191, 0.12); --board-text: #e5e7eb; --board-text-muted: #94a3b8; --board-text-faint: #64748b; --panel-radius: 16px; --panel-shadow: 0 12px 36px rgba(2, 6, 23, 0.38); --transition-base: 200ms ease; font-family: "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif; } html, body { height: 100%; } body { margin: 0; background: radial-gradient(circle at 20% 20%, rgba(37, 99, 235, 0.15), transparent 55%), radial-gradient(circle at 80% 0%, rgba(45, 212, 191, 0.12), transparent 50%), var(--board-bg); color: var(--board-text); -webkit-font-smoothing: antialiased; font-size: 18px; line-height: 1.35; } .board-shell { min-height: 100vh; padding: 1.75rem clamp(1rem, 5vw, 2.75rem) 2.25rem; display: flex; flex-direction: column; gap: 1.5rem; } .board-header { display: flex; justify-content: space-between; align-items: flex-end; gap: 1rem; flex-wrap: wrap; } .board-header__title { font-size: clamp(2.25rem, 3vw, 3.1rem); font-weight: 600; letter-spacing: 0.035em; } .board-header__meta { display: flex; flex-wrap: wrap; gap: 0.65rem 1.5rem; font-size: 1rem; color: var(--board-text-muted); align-items: center; } .board-header__meta span { display: inline-flex; align-items: center; gap: 0.4rem; } .board-header__status { gap: 1.25rem; font-size: 1.05rem; } .board-header__status time { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--board-text); } .board-header__error { color: var(--board-warn); font-weight: 600; display: none; } .board-header__error[aria-hidden="false"] { display: inline-flex; align-items: center; gap: 0.45rem; } .board-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(540px, 1fr)); gap: 1.75rem; align-content: start; } .board-loader { min-height: 40vh; display: grid; place-items: center; color: var(--board-text-muted); letter-spacing: 0.12em; text-transform: uppercase; font-size: 0.95rem; } .board-stack { display: grid; gap: 1.75rem; } .section { display: grid; gap: 1.1rem; } .section__header { display: flex; justify-content: space-between; align-items: baseline; gap: 0.75rem; flex-wrap: wrap; } .section__title { font-size: clamp(1.5rem, 2.4vw, 1.9rem); font-weight: 600; letter-spacing: 0.04em; } .section__meta { color: var(--board-text-muted); font-size: 1rem; } .meta-banner { display: flex; flex-wrap: wrap; gap: 0.75rem 1.5rem; background: rgba(45, 212, 191, 0.1); border: 1px solid rgba(45, 212, 191, 0.25); border-radius: var(--panel-radius); padding: 0.85rem 1.15rem; font-size: 1rem; color: var(--board-text-muted); } .meta-banner strong { color: var(--board-text); font-weight: 600; font-variant-numeric: tabular-nums; } .stat-grid { display: grid; gap: 0.9rem; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); } .stat-card { background: linear-gradient(145deg, rgba(15, 23, 42, 0.92), rgba(15, 23, 42, 0.7)); border: 1px solid var(--board-border); border-radius: var(--panel-radius); padding: 1.05rem 1.2rem; display: grid; gap: 0.35rem; min-height: 140px; } .stat-card__label { font-size: 0.95rem; text-transform: uppercase; color: var(--board-text-muted); letter-spacing: 0.12em; } .stat-card__value { font-size: clamp(2.2rem, 3.5vw, 2.7rem); font-weight: 600; font-variant-numeric: tabular-nums; } .stat-card__unit { color: var(--board-text-faint); font-size: 1rem; letter-spacing: 0.08em; text-transform: uppercase; } .stat-card__note { color: var(--board-text-muted); font-size: 0.95rem; font-style: italic; } .tandem-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1rem; } .stage-card { background: var(--board-panel); border: 1px solid var(--board-border); border-radius: var(--panel-radius); padding: 1rem 1.05rem 1.1rem; display: grid; gap: 0.75rem; } .stage-card__header { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; } .stage-card__title { display: flex; align-items: center; gap: 0.6rem; font-weight: 600; letter-spacing: 0.05em; } .stage-card__badge { display: inline-flex; width: 1.85rem; height: 1.85rem; border-radius: 50%; align-items: center; justify-content: center; background: rgba(96, 165, 250, 0.2); border: 1px solid rgba(96, 165, 250, 0.45); font-size: 1rem; } .status-pill { border-radius: 999px; padding: 0.35rem 0.85rem; font-size: 0.95rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; background: rgba(148, 163, 184, 0.18); border: 1px solid rgba(148, 163, 184, 0.35); color: var(--board-text); } .status-pill--ok { background: rgba(52, 211, 153, 0.18); border-color: rgba(52, 211, 153, 0.42); color: #bbf7d0; } .status-pill--warn { background: rgba(251, 191, 36, 0.18); border-color: rgba(251, 191, 36, 0.42); color: #fef3c7; } .status-pill--alert { background: rgba(248, 113, 113, 0.2); border-color: rgba(248, 113, 113, 0.42); color: #fecaca; } .status-pill--info { background: rgba(96, 165, 250, 0.2); border-color: rgba(96, 165, 250, 0.45); color: #bfdbfe; } .progress { display: grid; gap: 0.35rem; } .progress__track { position: relative; height: 0.8rem; border-radius: 999px; background: rgba(148, 163, 184, 0.2); overflow: hidden; } .progress__bar { position: absolute; inset: 0; width: 0; background: linear-gradient(90deg, rgba(45, 212, 191, 0.85), rgba(45, 212, 191, 0.45)); transition: width 900ms cubic-bezier(0.4, 0, 0.2, 1); } .progress__label { font-size: 0.95rem; color: var(--board-text-muted); display: flex; justify-content: space-between; font-variant-numeric: tabular-nums; } .metric-list { display: grid; gap: 0.65rem; } .metric { display: flex; justify-content: space-between; align-items: baseline; gap: 0.65rem; } .metric__label { font-size: 1rem; color: var(--board-text-muted); letter-spacing: 0.05em; } .metric__value { font-size: 1.2rem; font-variant-numeric: tabular-nums; font-weight: 500; } .metric__value em { font-size: 0.95rem; color: var(--board-text-faint); font-style: normal; margin-left: 0.35rem; } .mini-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0.7rem; } .mini-card { background: var(--board-panel-alt); border: 1px solid var(--board-border); border-radius: 14px; padding: 0.75rem 0.9rem; display: grid; gap: 0.35rem; } .mini-card__label { color: var(--board-text-muted); font-size: 0.95rem; letter-spacing: 0.1em; text-transform: uppercase; } .mini-card__value { font-size: 1.55rem; font-weight: 600; font-variant-numeric: tabular-nums; } .tank-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.9rem; } .tank-card { background: var(--board-panel); border: 1px solid var(--board-border); border-radius: var(--panel-radius); padding: 0.85rem 1rem; display: grid; gap: 0.6rem; } .tank-card__title { display: flex; justify-content: space-between; align-items: baseline; font-weight: 600; letter-spacing: 0.05em; } .tank-card__meta { font-size: 0.95rem; color: var(--board-text-faint); letter-spacing: 0.08em; text-transform: uppercase; } .tank-card[data-level="low"] .progress__bar { background: linear-gradient(90deg, rgba(248, 113, 113, 0.9), rgba(248, 113, 113, 0.55)); } .tank-card[data-level="caution"] .progress__bar { background: linear-gradient(90deg, rgba(251, 191, 36, 0.85), rgba(251, 191, 36, 0.5)); } .equipment-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1rem; } .equipment-card { background: var(--board-panel); border: 1px solid var(--board-border); border-radius: var(--panel-radius); padding: 1rem 1.1rem; display: grid; gap: 0.8rem; } .equipment-card__title { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; font-weight: 600; letter-spacing: 0.05em; } .equipment-card__rows { display: grid; gap: 0.7rem; } .equipment-row { display: flex; justify-content: space-between; align-items: baseline; gap: 0.6rem; } .equipment-row__label { color: var(--board-text-muted); font-size: 1rem; letter-spacing: 0.05em; } .equipment-row__value { font-size: 1.2rem; font-variant-numeric: tabular-nums; font-weight: 500; } .equipment-row__value small { font-size: 0.85rem; color: var(--board-text-faint); letter-spacing: 0.08em; margin-left: 0.35rem; } .equipment-subgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 0.75rem; } .equipment-mini { background: var(--board-panel-alt); border: 1px solid var(--board-border); border-radius: 14px; padding: 0.8rem 0.95rem; display: grid; gap: 0.45rem; } .equipment-mini__title { display: flex; justify-content: space-between; align-items: baseline; font-size: 1rem; font-weight: 600; } [data-refresh-error="true"] { filter: saturate(0.5); } @media (max-width: 1180px) { .board-content { grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); } } @media (max-width: 900px) { .board-shell { padding-inline: clamp(1rem, 3vw, 1.5rem); } .board-content { grid-template-columns: 1fr; } } @media (max-width: 640px) { body { font-size: 16px; } .board-header { align-items: flex-start; } .board-header__meta { flex-direction: column; align-items: flex-start; } }