OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

status.css

13 KB
/* ============================================================
   Öffentliche Statusseite – eigenständiges, cleanes Design.
   Bewusst unabhängig von app.css (Prefix: sp-).
   ============================================================ */
:root {
    --sp-green:  var(--green-600);
    --sp-amber:  var(--amber-600);
    --sp-orange: var(--orange-600);
    --sp-red:    var(--red-600);
    --sp-blue:   var(--blue-600);
    --sp-bg:     var(--color-gray-50);
    --sp-card:   var(--color-bg);
    --sp-border: var(--gray-200);
    --sp-text:   var(--gray-900);
    --sp-muted:  var(--gray-500);
    --sp-accent: var(--blue-600);
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
.sp-body {
    background: var(--sp-bg);
    color: var(--sp-text);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    font-size: 15px;
    line-height: 1.5;
    min-height: 100vh;
}
.sp-body--embed { background: transparent; }
/* Eingebettet ins Self-Service-Portal: Typografie der Statusseite übernehmen,
   aber Seitenhintergrund/-höhe der Portal-Kopf-/Fußleiste überlassen. */
.sp-body--portal { background: transparent; min-height: 0; }
.sp-body--portal .sp-container { padding-top: 0; padding-left: 0; padding-right: 0; }

.sp-topbar {
    display: flex; align-items: center; gap: .85rem;
    max-width: 820px; margin: 0 auto; padding: 1.75rem 1.25rem .5rem;
}
.sp-logo { height: 40px; width: auto; max-width: 220px; object-fit: contain; }
.sp-topbar-text { display: flex; flex-direction: column; line-height: 1.25; }
.sp-topbar-title { font-size: 1.05rem; font-weight: 600; color: var(--sp-muted); }
.sp-topbar-sub { font-size: .85rem; color: var(--sp-muted); }
.sp-support {
    margin-left: auto; white-space: nowrap; text-decoration: none;
    font-size: .85rem; font-weight: 600; color: var(--color-on-accent); background: var(--sp-accent);
    padding: .45rem .9rem; border-radius: 8px;
}
.sp-support:hover { filter: brightness(.93); }

.sp-container { max-width: 820px; margin: 0 auto; padding: 1rem 1.25rem 3rem; }
.sp-container--embed { padding: .75rem; }

/* Gesamtstatus-Banner */
.sp-banner {
    display: flex; align-items: center; gap: .85rem;
    border-radius: 12px; padding: 1.15rem 1.35rem; color: var(--color-on-accent);
    font-size: 1.15rem; font-weight: 600; margin-bottom: 1.5rem;
    box-shadow: 0 1px 3px rgba(0,0,0,.08);
}
.sp-banner .sp-banner-icon { font-size: 1.5rem; line-height: 1; }
.sp-banner--operational    { background: var(--sp-green); }
.sp-banner--degraded       { background: var(--sp-amber); }
.sp-banner--partial_outage { background: var(--sp-orange); }
.sp-banner--major_outage   { background: var(--sp-red); }

/* Abschnitte */
.sp-section { margin-bottom: 1.75rem; }
.sp-section-title {
    font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
    color: var(--ssp-content-text, var(--sp-muted)); margin: 0 0 .6rem .15rem;
}

/* Dienste-Liste */
.sp-card { background: var(--sp-card); border: 1px solid var(--sp-border); border-radius: 12px; overflow: hidden; }
/* Gruppen-Überschriften folgen der Optik der Abschnitts-Überschrift („Dienste"),
   damit alle Überschriften der Statusseite einheitlich aussehen. */
.sp-group-title {
    font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
    color: var(--ssp-content-text, var(--sp-muted)); margin: 1.25rem .15rem .5rem;
}
.sp-service { padding: .9rem 1.15rem; border-top: 1px solid var(--sp-border); }
.sp-service:first-child { border-top: none; }
.sp-service-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.sp-service-name { font-weight: 600; }
.sp-service-desc { font-size: .82rem; color: var(--sp-muted); margin-top: .1rem; }

/* 90-Tage-Uptime */
.sp-uptime { display: flex; gap: 2px; margin-top: .6rem; height: 26px; }
.sp-uptime-day { flex: 1 1 0; min-width: 2px; border-radius: 2px; background: var(--sp-green); }
.sp-uptime-day--nodata         { background: var(--gray-200); }
.sp-uptime-day--degraded       { background: var(--sp-amber); }
.sp-uptime-day--partial_outage { background: var(--sp-orange); }
.sp-uptime-day--major_outage   { background: var(--sp-red); }
.sp-uptime-legend { display: flex; justify-content: space-between; font-size: .7rem; color: var(--sp-muted); margin-top: .25rem; }

/* Status-Pill */
.sp-pill {
    display: inline-flex; align-items: center; gap: .4rem; white-space: nowrap;
    font-size: .82rem; font-weight: 600; padding: .25rem .7rem; border-radius: 9999px;
}
.sp-pill::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.sp-pill--operational    { color: var(--sp-green);  background: var(--green-100); }
.sp-pill--degraded       { color: var(--sp-amber);  background: var(--amber-100); }
.sp-pill--partial_outage { color: var(--sp-orange); background: var(--orange-100); }
.sp-pill--major_outage   { color: var(--sp-red);    background: var(--red-100); }

/* Störungen */
.sp-incident { background: var(--sp-card); border: 1px solid var(--sp-border); border-left: 4px solid var(--sp-amber); border-radius: 10px; padding: 1.1rem 1.25rem; margin-bottom: 1rem; }
.sp-incident--major    { border-left-color: var(--sp-orange); }
.sp-incident--critical { border-left-color: var(--sp-red); }
.sp-incident-head { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; margin-bottom: .25rem; }
.sp-incident-title { font-size: 1.05rem; font-weight: 700; margin: 0; }
.sp-incident-meta { font-size: .82rem; color: var(--sp-muted); }
.sp-tag { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; padding: .15rem .5rem; border-radius: 6px; background: var(--indigo-50); color: var(--indigo-800); }
.sp-tag--minor    { background: var(--amber-100); color: var(--amber-800); }
.sp-tag--major    { background: var(--orange-100); color: var(--orange-800); }
.sp-tag--critical { background: var(--red-100); color: var(--red-800); }

/* Timeline der Updates */
.sp-timeline { margin: .75rem 0 0; padding: 0; list-style: none; }
.sp-update { position: relative; padding: 0 0 .9rem 1.1rem; border-left: 2px solid var(--sp-border); }
.sp-update:last-child { padding-bottom: 0; }
.sp-update::before { content: ""; position: absolute; left: -5px; top: .35rem; width: 8px; height: 8px; border-radius: 50%; background: var(--sp-muted); }
.sp-update-status { font-weight: 700; font-size: .85rem; }
.sp-update-time { font-size: .76rem; color: var(--sp-muted); margin-left: .4rem; }
.sp-update-body { margin: .15rem 0 0; white-space: pre-wrap; }

/* Wartung */
.sp-maint { background: var(--blue-50); border: 1px solid var(--blue-200); border-radius: 10px; padding: 1rem 1.2rem; margin-bottom: 1rem; }
.sp-maint-title { font-weight: 700; margin: 0 0 .15rem; color: var(--blue-800); }
.sp-maint-time { font-size: .82rem; color: var(--blue-700); }
.sp-maint-body { margin: .4rem 0 0; white-space: pre-wrap; }

/* History (behoben) */
.sp-history-item { padding: .7rem 0; border-top: 1px solid var(--sp-border); }
.sp-history-item:first-child { border-top: none; }
.sp-history-title { font-weight: 600; }

.sp-empty { color: var(--sp-muted); padding: 1rem 1.15rem; }
.sp-affected { font-size: .8rem; color: var(--sp-muted); margin-top: .35rem; }

.sp-footer { max-width: 820px; margin: 0 auto; padding: 1.5rem 1.25rem 2.5rem; color: var(--sp-muted); font-size: .82rem; text-align: center; }

/* Optionale Websuche (im Backend aktivierbar, fester Anbieter) */
.sp-search-form {
    display: flex; align-items: center; gap: .5rem;
    background: var(--sp-card); border: 1px solid var(--sp-border);
    border-radius: 999px; padding: .3rem .3rem .3rem .95rem;
    box-shadow: 0 1px 2px rgba(17, 24, 39, .05);
    transition: border-color .15s ease, box-shadow .15s ease;
}
.sp-search-form:focus-within {
    border-color: var(--sp-accent);
    box-shadow: 0 2px 10px rgba(17, 24, 39, .08);
}
.sp-search-icon { display: inline-flex; align-items: center; color: var(--sp-muted); flex: 0 0 auto; }
.sp-search-input {
    flex: 1 1 auto; min-width: 0; height: 40px;
    border: 0; background: transparent; outline: none;
    font-size: 1rem; color: var(--sp-text);
}
.sp-search-input::placeholder { color: var(--sp-muted); }
.sp-search-btn {
    flex: 0 0 auto; display: inline-flex; align-items: center; gap: .45rem;
    height: 40px; padding: 0 1.15rem; border: 0; border-radius: 999px; cursor: pointer;
    background: var(--sp-accent); color: var(--color-on-accent); font-weight: 600; font-size: .9rem; white-space: nowrap;
    transition: filter .15s ease;
}
.sp-search-btn:hover { filter: brightness(.93); }
.sp-search-btn-icon { flex: 0 0 auto; }
@media (max-width: 560px) {
    .sp-search-form { flex-wrap: wrap; border-radius: 16px; padding: .6rem; }
    .sp-search-icon { padding-left: .35rem; }
    .sp-search-input { flex: 1 1 60%; }
    .sp-search-btn { flex: 1 1 100%; justify-content: center; }
}

/* Prominente Websuche (Hero): zentriert, größer, mit Überschrift */
.sp-search--hero { margin-top: .25rem; margin-bottom: 2.5rem; text-align: center; }
.sp-search-title {
    font-size: 1.2rem; font-weight: 700; color: var(--sp-text);
    margin: 0 0 .85rem;
}
.sp-search--hero .sp-search-form,
.sp-start-hero .sp-search-form {
    max-width: 660px; margin: 0 auto;
    padding: .4rem .4rem .4rem 1.2rem;
    box-shadow: 0 6px 22px rgba(17, 24, 39, .10);
}
.sp-search--hero .sp-search-form:focus-within,
.sp-start-hero .sp-search-form:focus-within {
    box-shadow: 0 8px 26px rgba(17, 24, 39, .14);
}
.sp-search--hero .sp-search-icon svg,
.sp-start-hero .sp-search-icon svg { width: 22px; height: 22px; }
.sp-search--hero .sp-search-input,
.sp-start-hero .sp-search-input { height: 52px; font-size: 1.1rem; }
.sp-search--hero .sp-search-btn,
.sp-start-hero .sp-search-btn { height: 44px; padding: 0 1.4rem; font-size: .95rem; }
@media (max-width: 560px) {
    .sp-search-title { font-size: 1.08rem; }
    .sp-search--hero .sp-search-input,
    .sp-start-hero .sp-search-input { height: 46px; font-size: 1.02rem; }
}

/* ============================================================
   Startseiten-Modus (/status als Browser-Startseite):
   Logo + große Suche + Status-Kurzinfo mittig, Status darunter.
   ============================================================ */
html { scroll-behavior: smooth; }
.sp-body--start .sp-container { padding-top: 0; }
.sp-start-hero {
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    min-height: 46vh; padding: 3rem 0 2.25rem; text-align: center;
}
.sp-start-logo { height: 60px; width: auto; max-width: 280px; object-fit: contain; margin-bottom: 1rem; }
.sp-start-appname { font-size: 1.9rem; font-weight: 700; letter-spacing: -.02em; margin-bottom: .75rem; }
.sp-start-greeting { color: var(--sp-muted); font-size: .95rem; margin: 0 0 1.5rem; }
.sp-start-hero .sp-search-form { width: 100%; }
.sp-start-meta {
    display: flex; align-items: center; justify-content: center; flex-wrap: wrap;
    gap: .6rem; margin-top: 1.5rem;
}
a.sp-start-chip { text-decoration: none; transition: filter .15s ease, box-shadow .15s ease; }
a.sp-start-chip:hover { filter: brightness(.96); box-shadow: 0 1px 4px rgba(17, 24, 39, .10); }
.sp-start-chip--support {
    display: inline-flex; align-items: center; white-space: nowrap;
    font-size: .82rem; font-weight: 600; padding: .25rem .7rem; border-radius: 9999px;
    color: var(--sp-accent); background: var(--sp-card); border: 1px solid var(--sp-border);
}
.sp-body--start .sp-section-title#status { scroll-margin-top: 1.25rem; }
@media (max-width: 560px) {
    .sp-start-hero { min-height: 38vh; padding: 2.25rem 0 1.75rem; }
    .sp-start-logo { height: 48px; }
}

/* Frei befüllbarer HTML-Block (Backend-Inhalt) */
.sp-custom-html {
    background: var(--sp-card); border: 1px solid var(--sp-border); border-radius: 12px;
    padding: 1.15rem 1.25rem; overflow-wrap: break-word;
}
.sp-custom-html > :first-child { margin-top: 0; }
.sp-custom-html > :last-child { margin-bottom: 0; }
.sp-custom-html img { max-width: 100%; height: auto; }

/* Eintragen für Benachrichtigungen */
.sp-subscribe { padding: 1.15rem 1.25rem; }
.sp-subscribe-lead { margin: 0 0 .85rem; color: var(--sp-text); }
.sp-subscribe-form { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.sp-subscribe-input {
    flex: 1 1 260px; min-width: 0; height: 40px; padding: 0 .95rem;
    border: 1px solid var(--sp-border); border-radius: 999px;
    background: var(--sp-card); color: var(--sp-text); font-size: 1rem; outline: none;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.sp-subscribe-input::placeholder { color: var(--sp-muted); }
.sp-subscribe-input:focus {
    border-color: var(--sp-accent);
    box-shadow: 0 2px 10px rgba(17, 24, 39, .08);
}
.sp-subscribe-note { margin: .75rem 0 0; color: var(--sp-muted); font-size: .84rem; }
@media (max-width: 560px) {
    .sp-subscribe-form .sp-search-btn { flex: 1 1 100%; justify-content: center; }
}

@media (max-width: 560px) {
    .sp-service-row { flex-direction: column; align-items: flex-start; gap: .5rem; }
}