/*
 * appoint4u status page. The app's visual language ("Apple clarity, Strato honesty", app
 * src/app/globals.css): system font with Inter, ink #1d1d1f on mist #f5f5f7, white cards with 18 px
 * radius, action blue, quiet hairlines. Light and dark follow the device. No script, no web font
 * from elsewhere: Inter (SIL OFL 1.1) is served from this site.
 * Colour pairs are contrast-tested (test/contrast.test.mjs): text 4.5:1, bars and icons 3:1.
 */

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("fonts/inter-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  color-scheme: light;
  --bg: #f5f5f7;
  --card: #ffffff;
  --text: #1d1d1f;
  --text-2: #6e6e73;
  --text-on-tint: #424245;
  --line: #e8e8ed;
  --line-strong: #d2d2d7;
  --link: #0066cc;
  --action: #0071e3;
  --action-hover: #0077ed;
  --on-action: #ffffff;
  --code-bg: #f5f5f7;
  --topbar: rgb(251 251 253 / 0.86);
  --on-status: #ffffff;

  --ok: #1e7b35;
  --degraded: #8a6100;
  --partial: #b25000;
  --major: #d70015;
  --maint: #0066cc;

  --bar-ok: #2b9a47;
  --bar-degraded: #b87d00;
  --bar-partial: #d9580b;
  --bar-major: #d70015;
  --bar-maint: #0071e3;
  --bar-nodata: #8e8e93;
  --bar-empty: #e8e8ed; /* days without data: a quiet fill, the text says it (not a status colour) */

  --tint-ok: #e9f7ee;
  --tint-degraded: #fdf6e3;
  --tint-partial: #fff4e5;
  --tint-major: #fdecee;
  --tint-maint: #e8f1fd;
  --tint-neutral: #f5f5f7;

  --radius-card: 18px;
  --radius-small: 10px;
  --font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif;
  --font-display: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif;
  --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
}

@media (prefers-color-scheme: dark) {
  :root {
    color-scheme: dark;
    --bg: #000000;
    --card: #1c1c1e;
    --text: #f5f5f7;
    --text-2: #a1a1a6;
    --text-on-tint: #d1d1d6;
    --line: #2c2c2e;
    --line-strong: #3a3a3c;
    --link: #2997ff;
    --action: #0071e3;
    --action-hover: #0077ed;
    --on-action: #ffffff;
    --code-bg: #2c2c2e;
    --topbar: rgb(22 22 23 / 0.86);
    --on-status: #000000;

    --ok: #30d158;
    --degraded: #ffd60a;
    --partial: #ff9f0a;
    --major: #ff6961;
    --maint: #64d2ff;

    --bar-ok: #30d158;
    --bar-degraded: #ffd60a;
    --bar-partial: #ff9f0a;
    --bar-major: #ff6961;
    --bar-maint: #64d2ff;
    --bar-nodata: #7c7c80;
    --bar-empty: #3a3a3c;

    --tint-ok: #0f2a18;
    --tint-degraded: #2d2606;
    --tint-partial: #301e05;
    --tint-major: #331414;
    --tint-maint: #0b2433;
    --tint-neutral: #1c1c1e;
  }
}

*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  font-size: 17px;
  line-height: 1.47;
  letter-spacing: -0.022em;
  font-synthesis: none;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4 {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 600;
  text-wrap: balance;
  hyphens: auto;
  overflow-wrap: break-word;
}

p { margin: 0; text-wrap: pretty; }
ul, ol { margin: 0; padding: 0; }
img, svg { display: block; max-width: 100%; }

a { color: var(--link); text-decoration-line: underline; text-decoration-thickness: 1px; text-underline-offset: 0.18em; }
a:hover { text-decoration-thickness: 2px; }

:focus-visible {
  outline: 2px solid var(--action);
  outline-offset: 2px;
  border-radius: 6px;
}

code, pre { font-family: var(--font-mono); font-size: 0.86em; letter-spacing: 0; }

time, .tabular { font-variant-numeric: tabular-nums; }

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: absolute;
  left: 16px;
  top: -100px;
  z-index: 100;
  padding: 10px 16px;
  border-radius: 980px;
  background: var(--action);
  color: var(--on-action);
  font-weight: 600;
  text-decoration: none;
}
.skip-link:focus { top: 8px; }

.wrap {
  width: 100%;
  max-width: 880px;
  margin-inline: auto;
  padding-inline: 16px;
}

main { display: block; padding-block: 20px 56px; outline: none; }

/* ------------------------------------------------------------ header */

.topbar {
  position: sticky;
  top: 0;
  z-index: 10;
  background: var(--topbar);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  backdrop-filter: saturate(180%) blur(20px);
  border-bottom: 1px solid var(--line);
}

.topbar-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  column-gap: 16px;
  min-height: 52px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  color: var(--text);
  text-decoration: none;
}
.brand img { width: auto; height: 22px; }
.brand-status {
  padding-left: 10px;
  border-left: 1px solid var(--line-strong);
  color: var(--text-2);
  font-size: 17px;
  font-weight: 600;
  letter-spacing: -0.01em;
}

.topnav {
  display: flex;
  align-items: center;
  gap: 2px;
  margin-inline: -10px;
}
.topnav a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding-inline: 10px;
  color: var(--text);
  font-size: 14px;
  letter-spacing: -0.01em;
  text-decoration: none;
  opacity: 0.86;
}
.topnav a:hover { opacity: 1; text-decoration: underline; }
.topnav a[aria-current="page"] { opacity: 1; font-weight: 600; }
.topnav .lang-switch { font-weight: 600; }

@media (max-width: 559px) {
  .topbar { position: static; }
  .topbar-inner { padding-block: 4px; }
  .topnav { width: 100%; order: 2; border-top: 1px solid var(--line); margin-inline: 0; justify-content: space-between; }
  .topnav a { padding-inline: 4px; }
}

/* ------------------------------------------------------------ hero */

.hero {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: 22px 20px;
  border-radius: var(--radius-card);
  background: var(--tint-neutral);
}
.hero h1 { font-size: 26px; line-height: 1.15; letter-spacing: -0.012em; }
.hero-icon { flex: none; padding-top: 2px; }
.hero-icon .icon { width: 36px; height: 36px; }
.hero-meta { margin-top: 8px; color: var(--text-on-tint); font-size: 15px; }
.hero-auto { margin-top: 6px; color: var(--text); font-size: 16px; font-weight: 600; }
.hero-note { margin-top: 4px; color: var(--text-on-tint); font-size: 14px; line-height: 1.43; }
.hero-note + .hero-note { margin-top: 6px; }

.hero.lv-operational { background: var(--tint-ok); }
.hero.lv-degraded_performance { background: var(--tint-degraded); }
.hero.lv-partial_outage { background: var(--tint-partial); }
.hero.lv-major_outage { background: var(--tint-major); }
.hero.lv-under_maintenance { background: var(--tint-maint); }

@media (min-width: 735px) {
  main { padding-block: 32px 80px; }
  .hero { padding: 30px 32px; gap: 20px; }
  .hero h1 { font-size: 34px; }
  .hero-icon .icon { width: 44px; height: 44px; }
}

/* ------------------------------------------------------------ levels, icons, badges */

.icon { flex: none; width: 1.15em; height: 1.15em; }
.icon-inner { stroke: var(--on-status); }
.icon-dot { fill: var(--on-status); }

.lv-operational { --level: var(--ok); --bar: var(--bar-ok); --tint: var(--tint-ok); }
.lv-degraded_performance { --level: var(--degraded); --bar: var(--bar-degraded); --tint: var(--tint-degraded); }
.lv-partial_outage { --level: var(--partial); --bar: var(--bar-partial); --tint: var(--tint-partial); }
.lv-major_outage { --level: var(--major); --bar: var(--bar-major); --tint: var(--tint-major); }
.lv-under_maintenance { --level: var(--maint); --bar: var(--bar-maint); --tint: var(--tint-maint); }

.hero-icon, .level .icon { color: var(--bar); }

.level {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--level);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.012em;
  white-space: nowrap;
}

.badge {
  display: inline-flex;
  align-items: center;
  min-height: 22px;
  padding: 2px 9px;
  border-radius: 980px;
  background: var(--tint-neutral);
  color: var(--text);
  font-size: 12px;
  line-height: 1.34;
  font-weight: 600;
  letter-spacing: 0;
  white-space: nowrap;
}
.card .badge { background: var(--bg); }
/* On the grey page background (an incident's own page) a badge needs the card colour to read as one. */
.page-head .badge { background: var(--card); }
.badge.st-resolved, .badge.st-completed { background: var(--tint-ok); color: var(--ok); }
.badge.st-investigating, .badge.st-identified { background: var(--tint-partial); color: var(--partial); }
.badge.st-monitoring, .badge.st-scheduled, .badge.st-in_progress, .badge.st-verifying { background: var(--tint-maint); color: var(--maint); }
.badge.st-cancelled, .badge.st-auto { color: var(--text-2); }

/* ------------------------------------------------------------ sections and cards */

.section { margin-top: 36px; }
.section-title { margin-bottom: 14px; font-size: 21px; line-height: 1.19; letter-spacing: 0.005em; }
@media (min-width: 735px) {
  .section { margin-top: 48px; }
  .section-title { font-size: 24px; }
}

.card {
  border-radius: var(--radius-card);
  background: var(--card);
}
.panel { padding: 20px; }
@media (min-width: 735px) { .panel { padding: 24px 28px; } }

.stack { display: grid; gap: 14px; }

.eyebrow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.card-title { margin-top: 10px; font-size: 19px; line-height: 1.26; }
.card-title a { color: var(--text); text-decoration: none; }
.card-title a:hover { text-decoration: underline; }
.card-meta { margin-top: 4px; color: var(--text-2); font-size: 14px; }

.incident, .maintenance { padding: 20px; border-top: 4px solid var(--bar); }
.maintenance { --bar: var(--bar-maint); }
.maintenance.is-cancelled { --bar: var(--bar-nodata); }
@media (min-width: 735px) { .incident, .maintenance { padding: 24px 28px; } }

.facts { display: grid; gap: 10px; margin: 14px 0 0; }
.facts div { display: grid; gap: 2px; }
.facts dt { color: var(--text-2); font-size: 13px; font-weight: 600; }
.facts dd { margin: 0; font-size: 15px; }
@media (min-width: 560px) { .facts { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } }

/* updates */
.timeline { list-style: none; margin-top: 16px; display: grid; gap: 16px; }
.timeline-item { position: relative; padding-left: 18px; }
.timeline-item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.45em;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--line-strong);
}
.timeline-item:first-child::before { background: var(--bar, var(--action)); }
.timeline-item:not(:last-child)::after {
  content: "";
  position: absolute;
  left: 3.5px;
  top: calc(0.45em + 12px);
  bottom: -12px;
  width: 1px;
  background: var(--line-strong);
}
.update-meta { font-size: 14px; color: var(--text-2); }
.update-meta strong { color: var(--text); font-weight: 600; }
.update-text { margin-top: 4px; font-size: 16px; }
.update-text p + p, .update-text p + ul, .update-text ul + p { margin-top: 8px; }
.update-text ul, .history-text ul, .legal-body ul { padding-left: 1.2em; }
.update-text code, .history-text code { padding: 1px 5px; border-radius: 6px; background: var(--code-bg); }

/* ------------------------------------------------------------ components and bars */

.components { list-style: none; }
.component { padding: 18px 20px; }
.component + .component { border-top: 1px solid var(--line); }
@media (min-width: 735px) { .component { padding: 20px 28px; } }

.component-row { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 6px 16px; }
.component-text { min-width: 0; flex: 1 1 260px; }
.component-name { font-size: 17px; line-height: 1.3; letter-spacing: -0.012em; }
.component-desc { margin-top: 2px; color: var(--text-2); font-size: 13px; line-height: 1.4; }
.component-level { padding-top: 1px; }

.note-line {
  margin-top: 10px;
  padding: 8px 12px;
  border-radius: var(--radius-small);
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
}

.uptime { margin-top: 14px; }
.bars {
  display: flex;
  gap: 2px;
  height: 32px;
  list-style: none;
}
.bar {
  flex: 1 1 0;
  min-width: 0;
  border-radius: 2px;
  background: var(--bar-ok);
}
.bar.b-operational { background: var(--bar-ok); }
.bar.b-degraded_performance { background: var(--bar-degraded); }
.bar.b-partial_outage { background: var(--bar-partial); }
.bar.b-major_outage { background: var(--bar-major); }
.bar.b-under_maintenance { background: var(--bar-maint); }
.bar.b-nodata { background: var(--bar-empty); }

.bars-legend {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  margin-top: 6px;
  color: var(--text-2);
  font-size: 12px;
  line-height: 1.34;
}
.legend-pct { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; }
.legend-short { display: none; }
/* The bars show 90 days here, so "(90 Tage)" is only for screen readers; on phones it is visible.
   "(seit 4. Nov. 2026)" says the figure covers less than the bars: always visible. */
.pct-period { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.pct-period.pct-since { position: static; width: auto; height: auto; overflow: visible; clip-path: none; font-weight: 400; color: var(--text-2); }
.nowrap { white-space: nowrap; }

/* Phones: the last 30 days, so a day stays wide enough to see. */
@media (max-width: 639px) {
  .bars { gap: 2px; height: 28px; }
  .bar:nth-child(-n + 60) { display: none; }
  .legend-long { display: none; }
  .legend-short { display: inline; }
  .pct-period { position: static; width: auto; height: auto; overflow: visible; clip-path: none; font-weight: 400; color: var(--text-2); }
}

.problem-days { margin-top: 8px; font-size: 14px; }
.problem-days summary {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 32px;
  color: var(--link);
  cursor: pointer;
  list-style: none;
}
.problem-days summary::-webkit-details-marker { display: none; }
.problem-days summary:hover > span:last-child { text-decoration: underline; text-underline-offset: 0.18em; }
/* The app's accordion marker (globals.css .acc-icon): a circled plus that turns into a minus. */
.acc-icon {
  position: relative;
  flex: none;
  width: 18px;
  height: 18px;
  border: 1.5px solid currentColor;
  border-radius: 99px;
}
.acc-icon::before, .acc-icon::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 8px;
  height: 1.5px;
  background: currentColor;
  transform: translate(-50%, -50%);
}
.acc-icon::after { transform: translate(-50%, -50%) rotate(90deg); }
details[open] > summary .acc-icon::after { transform: translate(-50%, -50%) rotate(0deg); }
.problem-days ul { list-style: none; display: grid; gap: 6px; margin: 4px 0 2px; }
.problem-days li { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; }
.problem-days .level { font-size: 13px; }
.problem-date { min-width: 8.5em; font-variant-numeric: tabular-nums; }
.problem-duration { color: var(--text-2); }
.no-problems { margin-top: 8px; color: var(--text-2); font-size: 13px; }

.fineprint { margin-top: 12px; color: var(--text-2); font-size: 13px; line-height: 1.45; }
.muted { color: var(--text-2); }

/* ------------------------------------------------------------ history */

.days { list-style: none; display: grid; gap: 4px; }
.day { padding: 14px 0; border-bottom: 1px solid var(--line-strong); }
.day-title { font-size: 15px; letter-spacing: -0.01em; }
.day > .muted { margin-top: 4px; font-size: 14px; }
.day-empty { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 14px; padding-block: 10px; }
.day-empty .day-title { min-width: 9.5em; font-weight: 500; }
.day-empty > .muted { margin-top: 0; }
.history { list-style: none; display: grid; gap: 12px; margin-top: 10px; }
.history-item { padding: 16px 18px; border-radius: var(--radius-small); background: var(--card); }
.history-title { font-size: 17px; line-height: 1.3; }
.history-title a { color: var(--text); text-decoration: none; }
.history-title a:hover { text-decoration: underline; }
.history-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin-top: 6px; }
.history-meta .level { font-size: 13px; }
.history-when { color: var(--text-2); font-size: 13px; font-variant-numeric: tabular-nums; }
.history-components { margin-top: 4px; color: var(--text-2); font-size: 13px; }
.history-text { margin-top: 8px; font-size: 15px; }
.history-text p + p { margin-top: 6px; }

.more { display: inline-flex; align-items: center; min-height: 44px; font-size: 15px; }

/* ------------------------------------------------------------ report and subscribe */

.grid-2 { display: grid; gap: 14px; margin-top: 36px; }
@media (min-width: 735px) { .grid-2 { grid-template-columns: 1fr 1fr; margin-top: 48px; } }
.panel-title { font-size: 19px; margin-bottom: 8px; }
.panel p { font-size: 15px; }
.actions { margin-top: 16px; }
.hint { margin-top: 8px; color: var(--text-2); font-size: 13px !important; }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 10px 22px;
  border-radius: 980px;
  font-size: 17px;
  line-height: 1.18;
  text-decoration: none;
  white-space: nowrap;
}
.btn-primary { background: var(--action); color: var(--on-action); }
.btn-primary:hover { background: var(--action-hover); text-decoration: none; }
.btn .icon { width: 18px; height: 18px; }

.link-list { list-style: none; display: grid; gap: 2px; margin-top: 10px; }
.link-list a { display: inline-flex; align-items: center; gap: 10px; min-height: 40px; font-size: 15px; }
.link-list .icon { width: 20px; height: 20px; color: var(--text-2); }
.link-list.padded { padding: 12px 20px; }
.link-list.padded li { display: flex; flex-wrap: wrap; align-items: center; gap: 0 12px; padding-block: 4px; }

/* ------------------------------------------------------------ text pages */

.page-head { margin-top: 8px; }
.page-head h1 { font-size: 30px; line-height: 1.12; letter-spacing: -0.01em; }
.page-head h2 { font-size: 24px; }
.page-head .eyebrow { margin-bottom: 10px; }
.page-head + .page-head { margin-top: 36px; }
.lead { margin-top: 10px; color: var(--text-2); font-size: 17px; }
.page-head .muted { margin-top: 8px; font-size: 14px; }
@media (min-width: 735px) { .page-head h1 { font-size: 40px; } .lead { font-size: 19px; } }

.incident-page .card { margin-top: 20px; }
.incident-page .facts { margin-top: 0; }
.incident-page .timeline { margin-top: 0; }

.legal-body { margin-top: 20px; display: grid; gap: 18px; }
.legal-section h2 { font-size: 15px; line-height: 1.35; }
.legal-section p { margin-top: 4px; color: var(--text-2); font-size: 14px; line-height: 1.55; }
.legal-section p + p { margin-top: 8px; }

/* Address and meaning as pairs: stacked on phones, two columns from 640 px. Long addresses wrap. */
.api-list { margin: 0; font-size: 14px; }
.api-list > div { display: grid; gap: 4px 20px; padding: 12px 20px; border-bottom: 1px solid var(--line); }
.api-list > div:last-child { border-bottom: 0; }
.api-list dt, .api-list dd { min-width: 0; margin: 0; }
.api-list dd { color: var(--text); }
.api-list code { overflow-wrap: anywhere; }
@media (min-width: 640px) {
  .api-list > div { grid-template-columns: minmax(0, 23rem) minmax(0, 1fr); padding-inline: 24px; }
}
.wrap-code { white-space: normal; overflow-wrap: anywhere; }

.code-block {
  margin: 0;
  padding: 18px 20px;
  overflow-x: auto;
  font-size: 13px;
  line-height: 1.55;
  white-space: pre;
}
/* Phones: the example wraps instead of scrolling sideways inside its box. */
@media (max-width: 639px) {
  .code-block { white-space: pre-wrap; overflow-wrap: anywhere; }
}

.bullets { list-style: disc; padding: 16px 20px 16px 40px; display: grid; gap: 8px; font-size: 15px; }

/* ------------------------------------------------------------ footer */

.site-footer {
  border-top: 1px solid var(--line-strong);
  padding-block: 24px 40px;
  color: var(--text-2);
  font-size: 13px;
  line-height: 1.45;
}
.footer-nav { display: flex; flex-wrap: wrap; gap: 0 18px; margin-top: 10px; }
.footer-nav a { display: inline-flex; align-items: center; min-height: 36px; color: var(--text); }
.footer-copy { margin-top: 10px; }

/* Windows high contrast: keep the bars and status colours visible. */
@media (forced-colors: active) {
  .bar, .hero-icon, .level, .icon { forced-color-adjust: none; }
  .card, .history-item, .hero { border: 1px solid CanvasText; }
}

@media print {
  .topbar, .grid-2, .skip-link { display: none; }
  body { background: #fff; }
}
