/* ============================================================ P42 Dashboard – Retro-Terminal in Rot ("Matrix in Rot") Volle Breite, responsiv (Handy → Tablet → PC → Ultrawide) ============================================================ */ /* Token-System: Farbrollen, Form, Bewegung, Schrift. Die Designs in themes.css setzen vor allem diese Werte. */ :root { /* Farbrollen (für Glow & Transparenzen: --accent-rgb; der Matrix-Regen liest sie mit) */ --accent-rgb: 255 70 70; --bg: #080203; --surface: rgb(20 6 7 / 0.84); --surface-hover: rgb(34 9 10 / 0.92); --surface-2: #180607; --border: rgb(var(--accent-rgb) / 0.22); /* feine Linie */ --line-strong: rgb(var(--accent-rgb) / 0.55); /* betonte Linie */ --accent: rgb(var(--accent-rgb)); --accent-ink: #140203; /* Schrift auf Akzentgrund */ --accent-soft: rgb(var(--accent-rgb) / 0.13); --text: #f1c3c3; --read: #f6d8d8; /* langer Fließtext */ --bright: #fff1f1; --muted: #d08e8e; /* getönt, nicht grau */ --ok: #fff1f1; --warn: #ffa66e; --bad: #ff3d3d; --bad-glow: rgb(255 61 61 / 0.6); /* Diagramm-Reihen (geprüft auf Farbenblindheit vor --surface): 1 = Akzent, 2 = Gegenfarbe */ --series-1: #ff4646; --series-2: #9b7fe0; --topbar-bg: rgb(8 2 3 / 0.76); --glow: 0 0 6px rgb(var(--accent-rgb) / 0.55), 0 0 20px rgb(var(--accent-rgb) / 0.2); --heading-glow: 0 0 6px rgb(var(--accent-rgb) / 0.55), 0 0 26px rgb(var(--accent-rgb) / 0.25); --text-glow: none; /* Flächen, die Designs überschreiben können */ --input-bg: rgb(4 1 1 / 0.85); --card-inner: rgb(12 3 4 / 0.9); --panel: rgb(12 3 4 / 0.96); --overlay: rgb(6 1 2 / 0.86); --backdrop: rgb(0 0 0 / 0.72); --editor-bg: rgb(4 1 1 / 0.9); --map-ocean: #050102; --map-land: #1a0506; --map-land-hover: #3a0b0c; /* Reise-Karte: Punkte anderer Konten, je Person eine Farbe (deutlich anders als die eigenen Punkte) */ --other-1: #9b7fe0; --other-2: #4fd1a5; --other-3: #ffd84a; --other-4: #5fb4ff; --other-5: #c6ff5c; --other-6: #ff9f43; /* Form */ --radius-s: 4px; --radius-m: 8px; --radius-l: 12px; --radius-pill: 999px; --shadow-1: inset 0 1px 0 rgb(255 255 255 / 0.035), 0 12px 32px -20px rgb(0 0 0 / 0.95); --shadow-2: 0 32px 80px -24px rgb(0 0 0 / 0.95), 0 0 0 1px rgb(var(--accent-rgb) / 0.1); --focus-ring: 0 0 0 3px rgb(var(--accent-rgb) / 0.3); --blur: blur(14px) saturate(1.15); --control-h: 40px; /* Bewegung (nur transform/opacity) */ --ease-out: cubic-bezier(0.16, 1, 0.3, 1); --dur: 0.2s; --lift: -2px; /* Schrift: Text, Display (Marke/Seitentitel), Überschriften, Beschriftungen */ --font: 'IBM Plex Mono', ui-monospace, 'Cascadia Mono', Menlo, monospace; --font-display: 'VT323', 'IBM Plex Mono', monospace; --font-heading: var(--font); --font-label: var(--font); --body-size: clamp(14.5px, 0.86rem + 0.15vw, 15.5px); --h1-font: var(--font-display); --h1-size: clamp(2.4rem, 3.8vw, 3.6rem); --h1-weight: 400; --h1-tracking: 0.04em; --h2-size: 1.05rem; --h3-size: 1rem; --heading-weight: 600; --heading-tracking: 0.05em; --heading-case: uppercase; --label-size: 0.72rem; --label-tracking: 0.12em; --tile-font: var(--font-display); --tile-size: 1.55rem; --gutter: clamp(16px, 3vw, 56px); --topbar-h: 64px; color-scheme: dark; } * { box-sizing: border-box; } html { background: var(--bg); -webkit-text-size-adjust: 100%; } body { margin: 0; background: transparent; color: var(--text); font-family: var(--font); font-size: var(--body-size); line-height: 1.6; text-shadow: var(--text-glow); caret-color: var(--accent); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } p { text-wrap: pretty; } /* Röhrenmonitor: Scanlines + abgedunkelte Ränder */ body::after { content: ''; position: fixed; inset: 0; z-index: 100; pointer-events: none; background: repeating-linear-gradient(to bottom, transparent 0 2px, rgb(0 0 0 / 0.07) 2px 3px), radial-gradient(ellipse at center, transparent 62%, rgb(0 0 0 / 0.32) 100%); } .matrix-rain { position: fixed; inset: 0; z-index: -1; width: 100%; height: 100%; opacity: 0.2; pointer-events: none; /* In der Mitte, wo der Inhalt steht, fast unsichtbar; an den Rändern deutlich */ mask-image: radial-gradient(ellipse 70% 75% at 50% 45%, rgb(0 0 0 / 0.18) 0 45%, #000 100%); } .calm .matrix-rain { display: none; } ::selection { background: var(--accent); color: var(--accent-ink); text-shadow: none; } * { scrollbar-color: var(--line-strong) transparent; scrollbar-width: thin; } #root { min-height: 100vh; display: flex; flex-direction: column; } a { color: var(--bright); text-decoration-style: dotted; text-underline-offset: 3px; } a:hover { color: var(--accent); } img { max-width: 100%; } strong, b { color: var(--bright); } code { font-family: var(--font); color: var(--bright); } /* Überschriften: Seitentitel in der Display-Schrift, alles darunter ruhig und klar */ h1, h2, h3 { font-family: var(--font-heading); font-weight: var(--heading-weight); text-transform: var(--heading-case); letter-spacing: var(--heading-tracking); color: var(--bright); text-wrap: balance; } h1 { font-family: var(--h1-font); font-weight: var(--h1-weight); font-size: var(--h1-size); letter-spacing: var(--h1-tracking); line-height: 1.02; margin: 0 0 6px; text-shadow: var(--heading-glow); } h2 { font-size: var(--h2-size); line-height: 1.25; } h3 { font-size: var(--h3-size); line-height: 1.3; } /* Kleine Beschriftungen (Eyebrows): weit gesperrt, klein */ .eyebrow, .fact dt, .aside-facts dt, .monitor-facts dt, .info-facts dt, .form label, .menu-label { font-family: var(--font-label); } /* Blinkender Cursor hinter Seitenüberschriften */ .page-head h1::after, .hero h1::after { content: '_'; margin-left: 0.1em; animation: blink 1.1s steps(1) infinite; } @keyframes blink { 50% { opacity: 0; } } .lead { color: var(--muted); margin: 0 0 28px; } .lead::before { content: '// '; } .hint { color: var(--muted); font-size: 0.88rem; margin: 12px 0 0; } .error { color: var(--bad); margin: 0; text-shadow: 0 0 4px var(--bad-glow); } .error::before { content: '! '; font-weight: 700; } .success { color: var(--ok); margin: 0; } .success::before { content: '✓ '; } .center { text-align: center; } /* ---------- Kopfzeile + Menü ---------- */ .topbar { position: sticky; top: 0; z-index: 20; height: var(--topbar-h); display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 0 var(--gutter); border-bottom: 1px solid var(--border); background: var(--topbar-bg); backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); } .brand { font-family: var(--font-display); font-size: 1.85rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bright); text-decoration: none; text-shadow: var(--heading-glow); white-space: nowrap; } .brand::before { content: '>_ '; color: var(--accent); } .brand span { color: var(--accent); } .menu { position: relative; } .menu-btn { display: grid; place-items: center; width: var(--control-h); height: var(--control-h); border: 1px solid var(--line-strong); border-radius: var(--radius-s); background: transparent; color: var(--accent); cursor: pointer; } .menu-btn:hover, .menu-btn[aria-expanded='true'] { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); } .menu-btn svg { width: 22px; height: 22px; } .menu-panel { position: absolute; right: 0; top: calc(100% + 10px); min-width: 260px; display: flex; flex-direction: column; padding: 6px; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-m); box-shadow: var(--shadow-2); backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); } .menu-panel a, .menu-item { font: inherit; text-align: left; padding: 9px 12px; border: 0; border-radius: var(--radius-s); background: none; color: var(--text); text-decoration: none; text-transform: uppercase; letter-spacing: 0.06em; font-size: 0.88rem; cursor: pointer; text-shadow: inherit; } .menu-panel a::before, .menu-item::before { content: ' '; white-space: pre; } .menu-panel a:hover, .menu-item:hover { background: var(--accent-soft); color: var(--bright); } .menu-panel a:hover::before, .menu-item:hover::before { content: '> '; } .menu-panel a.active { background: var(--accent); color: var(--accent-ink); text-shadow: none; } .menu-panel a.active::before { content: '> '; } .menu-panel hr { border: 0; border-top: 1px solid var(--border); margin: 6px 4px; } .menu-user { padding: 6px 12px 4px; font-size: 0.78rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; } /* Hauptnavigation in der Kopfzeile (ab Tablet), darunter im Menü */ .topnav { display: flex; gap: 4px; margin-left: auto; } .topnav a { padding: 8px 14px; color: var(--muted); text-decoration: none; text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.82rem; border: 1px solid transparent; border-radius: var(--radius-s); } .topnav a:hover { color: var(--bright); background: var(--accent-soft); } .topnav a.active { color: var(--bright); border-color: var(--line-strong); background: var(--accent-soft); } .topnav a.active::before { content: '> '; color: var(--accent); } .menu-primary { display: none; flex-direction: column; } @media (max-width: 999px) { .topnav { display: none; } .menu-primary { display: flex; } } /* ---------- Seitenrahmen: volle Breite ---------- */ .page { flex: 1; width: 100%; padding: clamp(24px, 4vw, 48px) var(--gutter) 64px; } .footer { text-align: center; color: var(--muted); font-size: 0.75rem; padding: 24px 20px; letter-spacing: 0.14em; text-transform: uppercase; } .page-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px 24px; flex-wrap: wrap; margin-bottom: 20px; } .page-head .lead { margin-bottom: 0; } .page-actions { display: flex; gap: 8px; flex-wrap: wrap; } /* ---------- Bausteine ---------- */ .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-m); box-shadow: var(--shadow-1); padding: clamp(16px, 1.6vw, 22px); } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: var(--control-h); font: inherit; font-family: var(--font-label); font-size: 0.82rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; padding: 0 20px; border: 1px solid var(--accent); border-radius: var(--radius-s); background: var(--accent); color: var(--accent-ink); text-shadow: none; cursor: pointer; white-space: nowrap; transition: transform var(--dur) var(--ease-out); } .btn:hover:not(:disabled) { background: var(--bright); border-color: var(--bright); transform: translateY(-1px); } .btn:active:not(:disabled) { transform: translateY(0); } .btn:disabled { opacity: 0.5; cursor: wait; } .btn.ghost { background: transparent; color: var(--accent); border-color: var(--line-strong); } .btn.ghost:hover:not(:disabled) { background: var(--accent-soft); border-color: var(--accent); color: var(--bright); } .btn.ghost.danger-btn { color: var(--bad); border-color: rgb(255 61 61 / 0.5); } .btn.ghost.danger-btn:hover:not(:disabled) { background: var(--bad); border-color: var(--bad); color: var(--accent-ink); } .btn.small { min-height: 30px; padding: 0 12px; font-size: 0.74rem; } .btn.full { width: 100%; } :focus-visible { outline: 2px solid var(--bright); outline-offset: 2px; } .link-btn { font: inherit; font-size: 0.82rem; border: 0; background: none; padding: 0; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; cursor: pointer; text-shadow: inherit; } .link-btn:hover { color: var(--bright); } .link-btn.danger:hover { color: var(--bad); } /* Status-Chips: getönte Pillen; "bad" gefüllt, damit es sofort auffällt */ .badge { display: inline-flex; align-items: center; gap: 6px; padding: 2px 10px; border-radius: var(--radius-pill); font-family: var(--font-label); font-size: 0.72rem; font-weight: 600; line-height: 1.5; text-transform: uppercase; letter-spacing: 0.08em; white-space: nowrap; color: var(--accent); background: color-mix(in oklab, currentColor 13%, transparent); box-shadow: inset 0 0 0 1px color-mix(in oklab, currentColor 32%, transparent); text-shadow: none; } .badge::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex: none; } .badge.ok { color: var(--ok); } .badge.warn { color: var(--warn); } .badge.bad { color: var(--accent-ink); background: var(--bad); box-shadow: none; } .badge.muted { color: var(--muted); } .badge.muted::before { opacity: 0.5; } .chip { font: inherit; font-size: 0.78rem; padding: 4px 12px; border: 1px solid var(--border); border-radius: var(--radius-pill); background: var(--card-inner); color: var(--text); cursor: pointer; text-shadow: inherit; text-decoration: none; } .chip:hover { color: var(--bright); border-color: var(--line-strong); background: var(--accent-soft); } .notice { border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: var(--radius-m); padding: 14px 18px; color: var(--text); margin-bottom: 24px; background: var(--surface); } .notice::before { content: '# '; color: var(--accent); } .meta { display: flex; gap: 8px; align-items: center; margin-top: 14px; font-size: 0.8rem; color: var(--muted); } .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--muted); display: inline-block; flex: none; } .dot.ok { background: var(--ok); box-shadow: 0 0 6px var(--ok); } .dot.warn { background: var(--warn); box-shadow: 0 0 6px var(--warn); } .dot.bad { background: var(--bad); box-shadow: 0 0 6px var(--bad); animation: blink 1.1s steps(1) infinite; } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: clamp(14px, 1.5vw, 24px); } .grid h3 { margin: 0; } /* ---------- Formulare & Dialoge ---------- */ .form { display: flex; flex-direction: column; gap: 14px; } .form h2 { margin: 0 0 4px; } .form label { display: flex; flex-direction: column; gap: 6px; font-size: var(--label-size); font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: var(--label-tracking); } .form label small { font-weight: 400; color: var(--muted); text-transform: none; letter-spacing: 0; } .form label.checkbox { flex-direction: row; align-items: center; gap: 10px; } .form label.checkbox input { width: 18px; height: 18px; accent-color: var(--accent); } .form input:not([type='checkbox']), .form select, .aside-card select, .title-input, .lead-input, .track-form input { font: inherit; font-weight: 400; text-transform: none; letter-spacing: normal; color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); border-radius: 0; padding: 10px 12px; width: 100%; text-shadow: none; } .form input:focus, .form select:focus, .aside-card select:focus, .title-input:focus, .lead-input:focus, .track-form input:focus { outline: none; border-color: var(--accent); box-shadow: var(--glow); } ::placeholder { color: var(--muted); opacity: 0.8; } .form-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 6px; } .modal { width: min(520px, calc(100% - 32px)); border: 1px solid var(--line-strong); border-radius: var(--radius-l); background: var(--panel); color: var(--text); padding: clamp(20px, 3vw, 28px); box-shadow: var(--shadow-2); } .modal::backdrop, .lightbox::backdrop { background: var(--backdrop); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .lightbox { border: 1px solid var(--accent); padding: 0; background: var(--input-bg); max-width: 96vw; max-height: 96vh; cursor: zoom-out; } .lightbox img { display: block; max-width: 96vw; max-height: 96vh; object-fit: contain; } /* ---------- Anmeldung ---------- */ .auth-page { min-height: 100vh; display: grid; place-items: center; padding: 24px var(--gutter); } .auth-card { width: min(440px, 100%); padding: clamp(22px, 4vw, 34px); display: flex; flex-direction: column; gap: 14px; border-color: var(--line-strong); border-radius: var(--radius-l); box-shadow: var(--shadow-2); backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); } .auth-brand { margin-bottom: 4px; } /* ---------- Startseite: Sendungsverfolgung ---------- */ .hero { text-align: center; } .track-form { display: flex; gap: 8px; max-width: 820px; margin: 0 auto; } .prompt-input { flex: 1; min-width: 0; position: relative; } .prompt-input::before { content: '>'; position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: var(--accent); font-size: 1.15rem; pointer-events: none; } .track-form input { font-size: 1.1rem; padding: 14px 18px 14px 38px; border-color: var(--accent); } .track-form .btn { padding: 14px 26px; } .recent { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 12px; } .result { margin: 24px auto 0; max-width: 1280px; text-align: left; } .result .card { border-color: var(--accent); } .result-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; } .carrier { font-family: var(--h1-font); font-size: calc(var(--h1-size) * 0.6); line-height: 1.05; text-transform: uppercase; color: var(--bright); text-shadow: var(--heading-glow); } .number { color: var(--muted); font-size: 0.88rem; word-break: break-all; } .tracking-result { display: grid; gap: 24px; } @media (min-width: 900px) { .tracking-result { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 36px; } .tracking-events { border-left: 1px dashed var(--border); padding-left: 32px; } } .facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin: 18px 0 4px; } .fact { border: 1px solid var(--border); border-radius: var(--radius-s); padding: 10px 14px; background: var(--card-inner); } .fact dt, .aside-facts dt, .monitor-facts dt { font-size: var(--label-size); color: var(--muted); text-transform: uppercase; letter-spacing: var(--label-tracking); } .fact dd { margin: 2px 0 0; font-weight: 600; color: var(--bright); } .timeline { list-style: none; margin: 0; padding: 0; } .timeline li { position: relative; padding: 0 0 16px 22px; border-left: 1px dashed var(--border); margin-left: 5px; } .timeline li:last-child { border-left-color: transparent; padding-bottom: 0; } .timeline li::before { content: ''; position: absolute; left: -6px; top: 5px; width: 11px; height: 11px; background: var(--bg); border: 1px solid var(--accent); } .timeline li:first-child::before { background: var(--accent); box-shadow: var(--glow); } .timeline .when { font-size: 0.78rem; color: var(--muted); } .timeline .what { color: var(--bright); } .timeline .where { font-size: 0.82rem; color: var(--muted); } .more { margin-top: 10px; } .links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; } .links a { font-size: 0.8rem; padding: 5px 12px; border: 1px solid var(--border); border-radius: var(--radius-pill); text-decoration: none; text-transform: uppercase; letter-spacing: 0.05em; } .links a:hover { border-color: var(--accent); background: var(--accent); color: var(--accent-ink); text-shadow: none; } /* ---------- Startseite: Kacheln ---------- */ .tiles-section { margin-top: clamp(40px, 6vw, 72px); } .tiles-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 6px 12px; margin-bottom: 14px; } .tiles-head .link-btn { white-space: nowrap; } .section-title { margin: 0; white-space: nowrap; } .section-title::before { content: '// '; color: var(--accent); } /* Flex statt festem Raster: jede Zeile wird ganz gefüllt, egal wie viele Kacheln */ .tiles { display: flex; flex-wrap: wrap; gap: clamp(14px, 1.5vw, 24px); } .tiles > * { flex: 1 1 210px; min-width: 0; } .tile { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; padding: clamp(18px, 2vw, 28px); border: 1px solid var(--border); background: var(--surface); color: var(--text); font: inherit; text-align: left; text-decoration: none; text-shadow: inherit; cursor: pointer; transition: border-color 0.12s, box-shadow 0.12s, background 0.12s; } .tile:hover { border-color: var(--accent); box-shadow: var(--glow); background: var(--surface-hover); color: var(--text); } .tile:hover strong { color: var(--bright); } .tile svg { width: 34px; height: 34px; color: var(--accent); filter: drop-shadow(0 0 4px rgb(var(--accent-rgb) / 0.6)); } .tile strong { font-family: var(--tile-font); font-size: var(--tile-size); font-weight: 400; line-height: 1.05; text-transform: uppercase; letter-spacing: 0.04em; } .tile small { color: var(--muted); font-size: 0.8rem; } .tile-empty { border-style: dashed; background: transparent; } .tile-empty svg { color: var(--muted); filter: none; } .tile-empty strong { color: var(--muted); } /* ---------- Projektübersicht ---------- */ .projects-grid { grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); } .project-card { padding: 0; overflow: hidden; display: flex; flex-direction: column; color: var(--text); text-decoration: none; transition: border-color 0.12s, box-shadow 0.12s; } .project-card:hover { border-color: var(--accent); box-shadow: var(--glow); color: var(--text); } .project-cover-wrap { position: relative; } .project-cover-wrap .badge { position: absolute; left: 12px; top: 12px; background: var(--overlay); padding: 3px 8px; } .project-cover-wrap .badge.ok { background: var(--accent); color: var(--accent-ink); text-shadow: none; } .project-body h3 { overflow-wrap: anywhere; } .project-cover { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-bottom: 1px solid var(--border); filter: saturate(0.8) contrast(1.05); } .project-card:hover .project-cover { filter: none; } .project-cover.empty { background: repeating-linear-gradient(45deg, transparent 0 10px, rgb(var(--accent-rgb) / 0.07) 10px 20px), var(--input-bg); } .project-body { padding: 16px 18px 18px; display: flex; flex-direction: column; flex: 1; } .project-body .meta { margin-top: auto; padding-top: 14px; } .project-meta { flex-direction: column; align-items: flex-start; gap: 2px; } .project-title-row { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; } .project-teaser { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; margin: 8px 0 0; color: var(--muted); font-size: 0.9rem; } /* ---------- Monitoring ---------- */ .monitor-summary { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 0 0 16px; padding: 10px 14px; border: 1px solid var(--border); background: var(--surface); font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; } .monitor-summary-time { margin-left: auto; font-weight: 400; color: var(--muted); font-size: 0.8rem; } .monitor-card { display: flex; flex-direction: column; border-left: 4px solid var(--border); } .monitor-card.ok { border-left-color: var(--ok); } .monitor-card.bad { border-color: var(--bad); border-left-color: var(--bad); box-shadow: inset 4px 0 12px -6px var(--bad), 0 0 14px rgb(255 43 43 / 0.25); } .monitor-card.ok h3 { color: var(--ok); } .monitor-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; } .monitor-target { margin: 6px 0 0; color: var(--muted); font-size: 0.85rem; word-break: break-all; } .monitor-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 12px 16px; margin: 16px 0 0; padding-top: 14px; border-top: 1px dashed var(--border); } .monitor-facts dd { margin: 2px 0 0; color: var(--bright); font-size: 0.88rem; } .monitor-foot { justify-content: space-between; margin-top: auto; padding-top: 16px; flex-wrap: wrap; } .monitor-actions { display: flex; gap: 14px; } /* Server-Auslastung (P42-S.M.): Karte → große Ansicht */ .monitor-card.clickable { cursor: pointer; transition: transform var(--dur) var(--ease-out), border-color var(--dur); } .monitor-card.clickable:hover { transform: translateY(var(--lift)); border-color: var(--line-strong); } .monitor-card.clickable:focus-visible { outline: none; box-shadow: var(--focus-ring); } .monitor-card.clickable .monitor-target { word-break: normal; overflow-wrap: anywhere; } .agent-summary { display: grid; gap: 10px; margin-top: 14px; } .agent-summary .monitor-facts { margin-top: 4px; } .meter { display: grid; gap: 4px; min-width: 0; } .meter-label { display: flex; justify-content: space-between; gap: 8px; font-size: 0.82rem; color: var(--text); } .meter-label span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .meter-label strong { color: var(--bright); font-weight: 600; white-space: nowrap; } .meter small { color: var(--muted); font-size: 0.76rem; } .meter-bar { display: block; height: 6px; border-radius: var(--radius-pill); background: var(--accent-soft); overflow: hidden; } .meter-bar i { display: block; height: 100%; border-radius: inherit; background: var(--accent); transition: width 0.6s var(--ease-out); } .meter.warn .meter-bar i, .server-tile.warn .meter-bar i { background: var(--warn); } .meter.bad .meter-bar i, .server-tile.bad .meter-bar i { background: var(--bad); } .meter.bad .meter-label strong { color: var(--bad); } .meter.compact .meter-label { font-size: 0.74rem; } .server-modal { width: min(1280px, calc(100% - 24px)); max-height: calc(100vh - 24px); overflow-y: auto; padding: clamp(16px, 2.4vw, 30px); } .server-detail { display: grid; gap: 18px; } .server-detail-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap; } .server-detail-head h2 { margin: 0; } .server-detail-sub { margin: 6px 0 0; color: var(--muted); font-size: 0.84rem; line-height: 1.6; } .server-detail-actions { display: flex; align-items: center; gap: 10px; } .server-detail-actions .btn { padding: 0 14px; } .server-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; } .server-tile { display: grid; gap: 4px; align-content: start; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius-m); background: var(--card-inner); } .server-tile strong { font-family: var(--tile-font); font-size: var(--tile-size); font-weight: 400; color: var(--bright); line-height: 1.1; } .server-tile small { color: var(--muted); font-size: 0.76rem; } .server-tile .meter-bar { margin-top: 4px; } .server-tile.bad strong { color: var(--bad); } .sr-flag { font-family: var(--font-label); font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em; } .server-range { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; } .server-range .eyebrow { margin-right: 4px; } .server-range .hint { margin: 0 0 0 auto; font-size: 0.8rem; } .server-charts { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; } @media (min-width: 900px) { .server-charts { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .chart { margin: 0; padding: 12px 14px 8px; border: 1px solid var(--border); border-radius: var(--radius-m); background: var(--card-inner); min-width: 0; transition: opacity var(--dur); } .chart.is-loading { opacity: 0.6; } .chart-head { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 6px 14px; margin-bottom: 6px; } .chart-title { font-family: var(--font-label); font-size: var(--label-size); letter-spacing: var(--label-tracking); text-transform: uppercase; color: var(--text); } .chart-legend { display: flex; gap: 14px; flex-wrap: wrap; font-size: 0.78rem; color: var(--text); } .chart-key { display: inline-flex; align-items: center; gap: 6px; } .chart-key i, .chart-tip-row i { width: 14px; height: 2px; border-radius: 1px; display: inline-block; flex: none; } .chart-plot { position: relative; width: 100%; } .chart-plot svg { display: block; touch-action: pan-y; outline: none; } .chart-plot svg:focus-visible { box-shadow: var(--focus-ring); } .chart-grid { stroke: var(--border); stroke-width: 1; shape-rendering: crispEdges; } .chart-axis { fill: var(--muted); font-size: 10.5px; font-family: var(--font); } .chart-line { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; } .chart-dot { stroke: var(--card-inner); stroke-width: 2; } .chart-cross { stroke: var(--line-strong); stroke-width: 1; } .chart-empty { margin: 0; height: 190px; display: grid; place-items: center; color: var(--muted); font-size: 0.85rem; text-align: center; } .chart-tip { position: absolute; top: 4px; transform: translateX(-50%); min-width: 160px; padding: 8px 10px; border: 1px solid var(--line-strong); border-radius: var(--radius-s); background: var(--panel); box-shadow: var(--shadow-2); pointer-events: none; font-size: 0.78rem; z-index: 2; } .chart-tip-time { color: var(--muted); margin-bottom: 4px; } .chart-tip-row { display: flex; align-items: center; gap: 8px; } .chart-tip-row strong { color: var(--bright); font-weight: 600; } .chart-tip-row span { color: var(--muted); } .server-table summary, .server-sections details summary { cursor: pointer; } .server-table summary { color: var(--muted); font-size: 0.85rem; } .server-table-scroll { max-height: 320px; overflow: auto; margin-top: 8px; border: 1px solid var(--border); } .server-table table { width: 100%; border-collapse: collapse; font-size: 0.78rem; white-space: nowrap; } .server-table th, .server-table td { padding: 5px 10px; text-align: right; border-bottom: 1px solid var(--border); } .server-table th:first-child, .server-table td:first-child { text-align: left; } .server-table th { position: sticky; top: 0; background: var(--panel); color: var(--muted); font-weight: 600; } .server-sections { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; } @media (min-width: 900px) { .server-sections { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .server-sections section { display: grid; gap: 10px; align-content: start; padding: 14px; border: 1px solid var(--border); border-radius: var(--radius-m); background: var(--card-inner); min-width: 0; } .server-sections h3 { margin: 0; } .server-sections .hint { margin: 0; font-size: 0.8rem; } .server-cores { display: grid; grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); gap: 8px 12px; } .server-list { display: grid; gap: 6px; margin: 0; } .server-list div { display: flex; justify-content: space-between; gap: 12px; font-size: 0.84rem; border-bottom: 1px solid var(--border); padding-bottom: 5px; } .server-list dt { color: var(--muted); overflow-wrap: anywhere; } .server-list dd { margin: 0; color: var(--bright); text-align: right; } .server-list small { color: var(--muted); } /* ---------- Vorrat & Einkauf ---------- */ .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; } .household-error { margin-bottom: 16px; } .household { display: grid; gap: clamp(14px, 1.5vw, 24px); align-items: start; } @media (min-width: 900px) { .household { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* Handy: Umschalter, nur die gewählte Liste zeigen */ .segmented { display: none; margin-bottom: 14px; border: 1px solid var(--accent); } @media (max-width: 899px) { .segmented { display: flex; } .household-panel[data-hidden] { display: none; } } .segmented button { flex: 1; font: inherit; font-size: 0.88rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; padding: 11px 8px; border: 0; background: transparent; color: var(--text); cursor: pointer; } .segmented button[aria-selected='true'] { background: var(--accent); color: var(--accent-ink); } .segmented .count { opacity: 0.75; } .segmented .count::before { content: '['; } .segmented .count::after { content: ']'; } .household-panel { display: flex; flex-direction: column; gap: 16px; } .household-panel.einkauf { border-color: var(--accent); } .shopping-lists { display: flex; flex-direction: column; gap: 8px; margin-bottom: 18px; } .shopping-lists-label { color: var(--muted); font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.08em; margin-right: 2px; } .shopping-lists .chip-list { align-items: center; } .shopping-visibility { margin: 0; font-size: 0.8rem; } .list-delete { margin-right: auto; } .household-head { display: flex; align-items: baseline; justify-content: space-between; gap: 6px 12px; flex-wrap: wrap; } .household-head h2 { margin: 0; } .household-head h2::before { content: '// '; color: var(--accent); } .household-head .hint { margin: 0; } .household-empty { margin: 0; } .household-add { display: flex; gap: 8px; } .household-add .combo { flex: 1; min-width: 0; } .household-add input { font: inherit; color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); padding: 10px 12px; width: 100%; } .household-add input:focus { outline: none; border-color: var(--accent); box-shadow: var(--glow); } .household-add { flex-wrap: wrap; } .household-add .household-qty-input { width: 4.5em; flex: none; text-align: center; } .household-add-error { flex-basis: 100%; } [aria-invalid='true'] { border-color: var(--bad) !important; box-shadow: 0 0 6px var(--bad-glow) !important; } /* Menge + Einheit als zusammenhängender Block */ .qty-unit { display: flex; flex: none; } .qty-unit > input { border-right: 0 !important; } .unit-select { font: inherit; font-size: 0.85rem; color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); padding: 0 6px; min-height: 34px; cursor: pointer; } .unit-select:focus { outline: none; border-color: var(--accent); box-shadow: var(--glow); } .unit-select:disabled { opacity: 0.4; cursor: default; } .household-item > .unit-select { flex: none; width: 4.4em; margin-left: -12px; border-left: 0; } /* Vorschlagsliste */ .combo { position: relative; } .combo-list { position: absolute; z-index: 12; left: 0; right: 0; top: calc(100% + 4px); margin: 0; padding: 4px; list-style: none; background: var(--bg); border: 1px solid var(--accent); box-shadow: var(--glow); max-height: 300px; overflow-y: auto; } .combo-list li { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 8px 10px; cursor: pointer; color: var(--text); } .combo-list li::before { content: ' '; white-space: pre; } .combo-list li > span { flex: 1; } .combo-list li:hover, .combo-list li.active { background: var(--accent-soft); color: var(--bright); } .combo-list li.active::before { content: '> '; color: var(--accent); } .combo-list small { color: var(--muted); font-size: 0.75rem; white-space: nowrap; } .household-list { list-style: none; margin: 0; padding: 0; } .household-item { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-top: 1px dashed var(--border); } .household-name { flex: 1; min-width: 0; display: flex; flex-direction: column; } .household-name strong { overflow-wrap: anywhere; } .household-name small { color: var(--muted); font-size: 0.75rem; } .household-check { appearance: none; flex: none; width: 24px; height: 24px; margin: 0; border: 1px solid var(--accent); background: var(--input-bg); cursor: pointer; display: grid; place-items: center; } .household-check::after { content: '✓'; color: var(--accent); opacity: 0; font-weight: 700; } .household-check:hover::after { opacity: 0.6; } .stepper { display: flex; align-items: stretch; flex: none; border: 1px solid var(--border); } .stepper button { font: inherit; width: 34px; min-height: 34px; border: 0; background: transparent; color: var(--accent); font-size: 1.1rem; cursor: pointer; } .stepper button:hover:not(:disabled) { background: var(--accent); color: var(--accent-ink); } .stepper button:disabled { color: var(--border); cursor: default; } .stepper-value { width: 3.4em; font: inherit; font-weight: 600; text-align: center; color: var(--bright); background: transparent; border: 0; border-inline: 1px solid var(--border); padding: 0; } .stepper-value:focus { outline: none; background: var(--input-bg); box-shadow: inset 0 0 0 1px var(--accent); } .household-actions { display: flex; align-items: center; gap: 12px; flex: none; } .household-actions .link-btn { display: inline-flex; align-items: center; gap: 6px; } .household-actions .link-btn:disabled { opacity: 0.4; cursor: default; } .household-actions svg { width: 18px; height: 18px; } .product-list { list-style: none; margin: 0; padding: 0; max-height: 50vh; overflow-y: auto; } .product-list li { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 8px 0; border-top: 1px dashed var(--border); } @media (max-width: 520px) { .household-add { flex-wrap: wrap; } .household-add .combo { flex-basis: 100%; } .household-add .qty-unit { flex: 1; } .household-add .household-qty-input { flex: 1; } .household-add .btn { flex: 1; } .household-panel { padding: 16px 14px; } .household-item { gap: 8px; } .stepper button { width: 28px; } .stepper-value { width: 2.8em; } .household-item > .unit-select { width: 3.9em; font-size: 0.8rem; padding: 0 2px; } .household-actions { gap: 10px; } .household-actions .label { display: none; } } /* Rezept abgleichen */ .recipe { display: flex; flex-direction: column; gap: 16px; margin-bottom: clamp(14px, 1.5vw, 24px); } .recipe .household-head h2 a { color: inherit; text-decoration: none; } .recipe .household-head h2 a:hover { color: var(--accent); } .recipe input:not([type='checkbox']), .recipe textarea { font: inherit; color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); padding: 10px 12px; width: 100%; } .recipe input:focus, .recipe textarea:focus { outline: none; border-color: var(--accent); box-shadow: var(--glow); } .recipe input:disabled { opacity: 0.4; } .recipe textarea { resize: vertical; } .recipe-load { display: flex; gap: 8px; align-items: flex-start; } .recipe-load > :first-child { flex: 1; min-width: 0; } .recipe-people { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 28px; } .recipe-people label { display: flex; align-items: center; gap: 10px; color: var(--muted); } .recipe-people input[type='number'] { width: 4.5em; text-align: center; padding: 8px; } .recipe-people-main { color: var(--bright) !important; font-weight: 600; } .recipe-people-main input { border-color: var(--accent) !important; } .recipe-people .hint { margin: 0; } .recipe-rows { list-style: none; margin: 0; padding: 0; } .recipe-row { display: grid; grid-template-columns: 24px minmax(0, 1.3fr) minmax(0, 1fr) 150px 140px; align-items: center; gap: 14px; padding: 10px 0; border-top: 1px dashed var(--border); } .recipe-take:checked { background: var(--accent); } .recipe-take:checked::after { content: '✓'; color: var(--accent-ink); opacity: 1; } .recipe-ingredient { display: flex; flex-direction: column; min-width: 0; } .recipe-ingredient strong { overflow-wrap: anywhere; } .recipe-ingredient small { color: var(--muted); font-size: 0.75rem; overflow-wrap: anywhere; } .recipe-status { justify-self: start; } .recipe .recipe-buy .recipe-qty { width: 4.5em; flex: none; text-align: center; padding: 8px; } .recipe .recipe-buy .unit-select { flex: 1; min-width: 0; } .recipe-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; } .recipe-foot .hint { margin: 0; flex: 1 1 280px; } @media (max-width: 760px) { .recipe-load { flex-direction: column; align-items: stretch; } .recipe-row { grid-template-columns: 24px minmax(0, 1fr) 9.5em; grid-template-areas: 'take ing ing' '. status status' '. prod qty'; gap: 6px 10px; } .recipe-take { grid-area: take; align-self: start; } .recipe-ingredient { grid-area: ing; } .recipe-status { grid-area: status; justify-self: start; } .recipe-product { grid-area: prod; } .recipe-buy { grid-area: qty; min-width: 0; } .recipe .recipe-buy .recipe-qty { width: 3.8em; } .recipe-foot .btn { width: 100%; } } /* ---------- Reisen: Weltkarte ---------- */ .city-search { position: relative; max-width: 720px; margin-bottom: 16px; } .city-search input { font: inherit; font-size: 1.05rem; color: var(--bright); background: var(--input-bg); border: 1px solid var(--accent); padding: 12px 16px 12px 38px; width: 100%; } .city-search input:focus { outline: none; box-shadow: var(--glow); } .city-search .combo-list li small { margin-left: 6px; } .city-search .combo-list li.added { opacity: 0.55; cursor: default; } .combo-info { color: var(--muted); cursor: default !important; } .combo-info::before { content: '' !important; } .travel-error { margin-bottom: 12px; } .travel-map { position: relative; padding: 0; overflow: hidden; height: clamp(340px, 68vh, 760px); } .travel-loading { padding: 20px; } .worldmap, .worldmap svg { width: 100%; height: 100%; display: block; } .worldmap svg { cursor: grab; touch-action: none; --inv: 1; } .worldmap svg:active { cursor: grabbing; } .map-sphere { fill: var(--map-ocean); } .map-graticule { fill: none; stroke: rgb(var(--accent-rgb) / 0.09); vector-effect: non-scaling-stroke; } .map-country { fill: var(--map-land); stroke: rgb(var(--accent-rgb) / 0.45); stroke-width: 0.6; vector-effect: non-scaling-stroke; cursor: pointer; transition: fill 0.15s; } .map-country:hover { fill: var(--map-land-hover); } .map-country.visited { fill: rgb(var(--accent-rgb) / 0.55); stroke: rgb(var(--accent-rgb) / 0.9); } .map-country.visited:hover { fill: rgb(var(--accent-rgb) / 0.7); } .map-country.selected { stroke: var(--bright); stroke-width: 1.6; fill: rgb(var(--accent-rgb) / 0.35); } .map-country.visited.selected { fill: rgb(var(--accent-rgb) / 0.8); } /* Stadt-Punkte: Größe bleibt beim Zoomen gleich (--inv = 1 / Zoomfaktor) */ .map-city { transform: scale(var(--inv)); cursor: pointer; } .map-city-hit { fill: transparent; } .map-city-dot { fill: var(--bright); stroke: var(--accent); stroke-width: 2; filter: drop-shadow(0 0 3px rgb(var(--accent-rgb) / 0.9)); } .map-city:hover .map-city-dot { fill: #fff; } .map-city-ring { fill: none; stroke: var(--bright); stroke-width: 1.5; animation: city-pulse 1.6s ease-out infinite; transform-origin: 0 0; } @keyframes city-pulse { from { opacity: 1; transform: scale(0.6); } to { opacity: 0; transform: scale(1.8); } } .calm .map-city-ring { animation: none; } @media (prefers-reduced-motion: reduce) { .map-city-ring { animation: none; } } .map-controls { position: absolute; top: 12px; right: 12px; display: flex; flex-direction: column; border: 1px solid var(--accent); background: var(--overlay); } .map-controls button { font: inherit; font-size: 1.15rem; width: 38px; height: 38px; border: 0; background: transparent; color: var(--accent); cursor: pointer; } .map-controls button + button { border-top: 1px solid var(--border); } .map-controls button:hover { background: var(--accent); color: var(--accent-ink); } /* Info-Kasten: Desktop unten links über der Karte, Handy unter der Karte */ .info-card { position: absolute; left: 14px; bottom: 14px; width: min(380px, calc(100% - 28px)); max-height: calc(100% - 28px); overflow-y: auto; display: flex; flex-direction: column; gap: 10px; padding: 16px 18px; background: var(--panel); border: 1px solid var(--accent); box-shadow: var(--glow); } .info-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; } .info-head h2 { margin: 0; font-size: calc(var(--h2-size) * 1.15); } .info-sub { margin: -6px 0 0; color: var(--muted); font-size: 0.82rem; } .info-facts { margin: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 14px; } .info-facts dt { font-size: 0.7rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.1em; } .info-facts dd { margin: 1px 0 0; color: var(--bright); font-size: 0.88rem; overflow-wrap: anywhere; } .info-extract { margin: 0; color: var(--read); font-size: 0.85rem; line-height: 1.55; text-shadow: none; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; } .info-more { font-size: 0.8rem; align-self: flex-start; } .info-visit { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding-top: 10px; border-top: 1px dashed var(--border); } .info-cities { display: flex; flex-wrap: wrap; gap: 6px; } .info-card .chip { font-size: 0.78rem; } .info-others { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; } .info-others .hint { margin: 0; font-size: 0.78rem; } /* Städte anderer Konten */ .map-city.other .map-city-dot { fill: var(--dot); stroke: var(--bg); stroke-width: 1.5; filter: drop-shadow(0 0 3px var(--dot)); } .map-city.other:hover .map-city-dot { fill: var(--dot); stroke: var(--bright); } .map-city.other .map-city-ring { stroke: var(--dot); } .travel-others { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: -4px 0 14px; } .travel-legend { display: inline-flex; align-items: center; gap: 6px; font-size: 0.82rem; color: var(--muted); margin-left: 6px; } .legend-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--dot); box-shadow: 0 0 4px var(--dot); flex: none; } .legend-dot.own { background: var(--bright); box-shadow: 0 0 0 2px var(--accent); } .travel-person { display: inline-flex; align-items: center; gap: 6px; } .travel-person:not(.active) { opacity: 0.55; } .travel-person:not(.active) .legend-dot { background: transparent; box-shadow: inset 0 0 0 2px var(--dot); } .travel-person small { color: var(--muted); } .badge.travel-owner { color: var(--dot); } /* Besuchte Orte: Kontinente nebeneinander, Länder ausklappbar */ .visited-list { display: grid; gap: 28px 32px; margin-top: 28px; align-items: start; } @media (min-width: 900px) { .visited-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (min-width: 1400px) { .visited-list { grid-template-columns: repeat(3, minmax(0, 1fr)); } } .travel-empty { margin-top: 24px; } .visited-continent .section-title { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; white-space: normal; } .continent-toggle { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; padding: 2px 0; border: 0; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; text-align: left; cursor: pointer; } .continent-toggle:hover { color: var(--accent); } .continent-arrow { display: inline-block; color: var(--accent); transform: rotate(90deg); transition: transform var(--dur) var(--ease-out); } .continent-toggle[aria-expanded='false'] .continent-arrow { transform: none; } .visited-continent.closed .section-title { margin-bottom: 0; } .visited-count { font-family: var(--font); font-size: 0.75rem; font-weight: 400; letter-spacing: 0.02em; text-transform: none; color: var(--muted); text-shadow: none; } .visited-countries { list-style: none; margin: 0; padding: 0; border: 1px solid var(--border); border-radius: var(--radius-m); background: var(--surface); overflow: hidden; } .visited-country + .visited-country { border-top: 1px solid var(--border); } .visited-row { display: flex; align-items: center; gap: 4px; padding: 2px 12px 2px 4px; } .visited-country.active .visited-row { background: var(--accent-soft); box-shadow: inset 2px 0 0 var(--accent); } .visited-toggle { flex: none; width: 34px; height: 34px; display: grid; place-items: center; border: 0; border-radius: var(--radius-s); background: transparent; color: var(--accent); font: inherit; cursor: pointer; } .visited-toggle span { transition: transform var(--dur) var(--ease-out); } .visited-toggle[aria-expanded='true'] span { transform: rotate(90deg); } .visited-toggle:hover:not(:disabled) { background: var(--accent-soft); } .visited-toggle:disabled { color: var(--muted); cursor: default; } .visited-name { flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px; padding: 8px 6px; border: 0; background: transparent; color: var(--bright); font: inherit; font-weight: 600; text-align: left; cursor: pointer; overflow-wrap: anywhere; } .visited-name:hover { color: var(--accent); } .visited-flag { font-size: 1.1em; } .visited-meta { flex: none; font-size: 0.75rem; color: var(--muted); } .visited-country .visited-cities { padding: 2px 14px 14px 46px; } .chip-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; } .chip.active { border-style: solid; border-color: var(--accent); color: var(--bright); background: var(--accent-soft); } .travel-credits { margin-top: 28px; font-size: 0.72rem; } @media (max-width: 759px) { .travel-map { height: auto; overflow: visible; } .worldmap { height: clamp(260px, 52vh, 420px); } .info-card { position: relative; left: auto; bottom: auto; width: auto; max-height: none; border-width: 1px 0 0; box-shadow: none; } .info-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* ---------- Kanban ---------- */ .kanban-filter { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.08em; } .kanban-filter select { font: inherit; text-transform: none; letter-spacing: normal; font-size: 0.88rem; color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); padding: 9px 10px; } .kanban-filter select:focus { outline: none; border-color: var(--accent); box-shadow: var(--glow); } .kanban-error { margin-bottom: 12px; } .board { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(12px, 1.2vw, 20px); align-items: start; } .board-column { display: flex; flex-direction: column; min-height: 220px; background: var(--surface); border: 1px solid var(--border); border-top: 3px solid var(--border); transition: border-color 0.12s, box-shadow 0.12s; } .board-column.arbeit { border-top-color: var(--accent); } .board-column.wartet { border-top-color: var(--warn); } .board-column.erledigt { border-top-color: var(--ok); } .board-column.drop-target { border-color: var(--accent); box-shadow: var(--glow); } .board-head { display: flex; justify-content: space-between; align-items: center; padding: 12px 14px 8px; } .board-head h2 { margin: 0; } .board-head .count { font-family: var(--font); font-size: 0.8rem; color: var(--muted); text-shadow: none; vertical-align: middle; } .board-head .count::before { content: '['; } .board-head .count::after { content: ']'; } .board-head .link-btn { font-size: 1.3rem; line-height: 1; padding: 2px 6px; color: var(--accent); } .board-cards { list-style: none; margin: 0; padding: 4px 10px 12px; display: flex; flex-direction: column; gap: 8px; flex: 1; } .board-empty { color: var(--muted); font-size: 0.8rem; padding: 14px 4px; text-align: center; border: 1px dashed var(--border); } .drop-line { height: 3px; background: var(--accent); box-shadow: var(--glow); margin: 2px 0; } .task-card { width: 100%; display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; font: inherit; text-align: left; color: var(--text); background: var(--card-inner); border: 1px solid var(--border); cursor: grab; text-shadow: none; transition: border-color 0.12s, box-shadow 0.12s, opacity 0.12s; } .task-card:hover { border-color: var(--accent); box-shadow: 0 0 10px rgb(var(--accent-rgb) / 0.3); } .task-card.dragging { opacity: 0.35; } .task-title { color: var(--bright); font-weight: 600; overflow-wrap: anywhere; } .task-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; } /* Priorität: Kennzeichen auf der Karte + farbige Kante links (Mittel ohne Kennzeichen, damit es ruhig bleibt) */ .prio { flex: none; padding: 1px 8px; border-radius: var(--radius-pill); font-family: var(--font-label); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; white-space: nowrap; } .prio-hoch { color: var(--accent-ink); background: var(--bad); } .prio-niedrig { color: var(--muted); box-shadow: inset 0 0 0 1px var(--border); } .task-card.prio-card-hoch { box-shadow: inset 3px 0 0 var(--bad); } .task-card.prio-card-niedrig .task-title { font-weight: 500; } .task-desc { color: var(--read); font-size: 0.8rem; white-space: pre-line; overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } .task-meta { display: flex; justify-content: space-between; align-items: center; margin-top: 2px; } .assignee { display: inline-flex; align-items: center; gap: 6px; font-size: 0.75rem; color: var(--muted); } .assignee.none { font-style: italic; } .avatar { display: inline-grid; place-items: center; width: 22px; height: 22px; font-size: 0.65rem; font-weight: 600; color: var(--accent-ink); background: var(--accent); } .board-column.erledigt .task-title { text-decoration: line-through; text-decoration-color: rgb(var(--accent-rgb) / 0.6); color: var(--muted); } .task-dialog { width: min(620px, calc(100% - 32px)); } .task-dialog textarea { font: inherit; font-weight: 400; text-transform: none; letter-spacing: normal; color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); padding: 10px 12px; width: 100%; resize: vertical; } .task-dialog textarea:focus { outline: none; border-color: var(--accent); box-shadow: var(--glow); } .task-dialog-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; } .task-history { margin: 0; font-size: 0.78rem; } .task-delete { margin-right: auto; } /* Kanban-Übersicht */ .kanban-projects { grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr)); } .kanban-project-card { position: relative; display: flex; flex-direction: column; gap: 10px; transition: border-color 0.12s, box-shadow 0.12s; } .kanban-project-card:hover { border-color: var(--accent); box-shadow: var(--glow); } .kanban-project-card h3 { margin: 0; overflow-wrap: anywhere; } .kanban-project-link { color: inherit; text-decoration: none; } .kanban-project-link::after { content: ''; position: absolute; inset: 0; } /* ganze Karte klickbar */ .kanban-project-actions { position: relative; z-index: 1; display: flex; gap: 16px; padding-top: 8px; border-top: 1px dashed var(--border); } .kanban-project-card.completed { opacity: 0.8; } .kanban-project-card.completed h3 { text-decoration: line-through; text-decoration-color: rgb(var(--accent-rgb) / 0.6); } .kanban-done-badge { align-self: flex-start; margin-top: -4px; white-space: normal; font-size: 0.72rem; max-width: 100%; } .kanban-project-desc { margin: 0; color: var(--read); font-size: 0.85rem; white-space: pre-line; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .status-bar { display: flex; height: 6px; gap: 2px; margin-top: auto; } .status-bar span { min-width: 6px; background: var(--border); } .status-bar .arbeit { background: var(--accent); } .status-bar .wartet { background: var(--warn); } .status-bar .erledigt { background: var(--ok); } .kanban-project-counts { margin: 0; font-size: 0.75rem; color: var(--muted); } .kanban-project-links { margin: 0; font-size: 0.75rem; color: var(--bright); overflow-wrap: anywhere; } .kanban-done { margin-top: clamp(28px, 4vw, 48px); } .kanban-done summary { cursor: pointer; list-style: none; margin-bottom: 14px; } .kanban-done summary::-webkit-details-marker { display: none; } .kanban-done summary h2 { display: inline; } .kanban-done summary h2::after { content: ' ▸'; color: var(--accent); } .kanban-done[open] summary h2::after { content: ' ▾'; } .kanban-done .count { font-family: var(--font); font-size: 0.8rem; color: var(--muted); text-shadow: none; } .kanban-done .count::before { content: '['; } .kanban-done .count::after { content: ']'; } /* Board-Kopf */ .board-completed { margin-bottom: 16px; } .btn.ghost.danger-btn { color: var(--bad); border-color: var(--bad); } .btn.ghost.danger-btn:hover:not(:disabled) { background: var(--bad); color: var(--accent-ink); } .board-page-head { margin-bottom: 18px; } .board-description { white-space: pre-line; margin-bottom: 12px; max-width: 75ch; } .board-links { margin-top: 4px; } .board-links .chip { text-decoration: none; display: inline-block; } /* Artikel-Auswahl im Projekt-Dialog */ .link-picker { border: 1px solid var(--border); padding: 10px 12px 12px; margin: 0; min-width: 0; } .link-picker legend { font-size: 0.8rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; padding: 0 6px; } .link-picker legend small { font-weight: 400; color: var(--muted); text-transform: none; letter-spacing: 0; } .link-picker ul { list-style: none; margin: 8px 0 0; padding: 0; max-height: 200px; overflow-y: auto; display: flex; flex-direction: column; gap: 2px; } .link-picker .checkbox { text-transform: none !important; letter-spacing: 0 !important; font-weight: 400 !important; font-size: 0.9rem !important; padding: 4px 0; } .link-picker input[type='search'] { margin-top: 4px; } .aside-boards { display: flex; flex-direction: column; gap: 4px; } .aside-boards a { text-decoration: none; } .aside-boards a.sub { font-size: 0.8rem; color: var(--muted); } .aside-boards a.sub:hover { color: var(--bright); } /* Handy/Tablet: Spalten nebeneinander wischen */ @media (max-width: 999px) { .board { grid-template-columns: repeat(4, minmax(78%, 1fr)); overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 8px; overscroll-behavior-x: contain; } .board-column { scroll-snap-align: start; } } @media (min-width: 640px) and (max-width: 999px) { .board { grid-template-columns: repeat(4, minmax(46%, 1fr)); } } @media (max-width: 520px) { .task-dialog-row { grid-template-columns: 1fr; } .kanban-filter { width: 100%; } .kanban-filter select { flex: 1; } } /* ---------- Konto & Benutzerverwaltung ---------- */ .settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr)); gap: clamp(14px, 1.5vw, 24px); align-items: start; } .user-list { display: grid; gap: 12px; } .user-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 16px; padding: 16px 20px; } .user-info { display: flex; flex-direction: column; min-width: 0; } .user-info .hint { margin: 2px 0 0; } .user-badges { display: flex; gap: 6px; } .user-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; justify-content: flex-end; } .user-edit { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; } .user-edit input { font: inherit; color: var(--bright); background: var(--input-bg); border: 1px solid var(--accent); padding: 6px 10px; min-width: 0; flex: 1 1 160px; } @media (max-width: 800px) { .user-row { grid-template-columns: minmax(0, 1fr) auto; } .user-actions { grid-column: 1 / -1; justify-content: flex-start; } } /* ============================================================ Artikel (Ansicht + Bearbeitung) – volle Breite mit Seitenleiste ============================================================ */ .back { display: inline-block; margin-bottom: 20px; text-decoration: none; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.08em; } .article-cover { margin: 0 0 clamp(20px, 3vw, 36px); position: relative; border: 1px solid var(--accent); box-shadow: var(--glow); } .article-cover img { display: block; width: 100%; height: clamp(200px, 42vh, 560px); object-fit: cover; cursor: zoom-in; } .article-cover.empty { display: grid; place-items: center; min-height: 160px; border: 1px dashed var(--border); box-shadow: none; background: var(--surface); } .cover-actions { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; } .article-cover:not(.empty) .cover-actions { position: absolute; right: 14px; bottom: 14px; } .article-cover:not(.empty) .cover-actions .btn.ghost { background: var(--overlay); } .editing .article-cover img { cursor: default; } .article-layout { display: grid; gap: clamp(20px, 2.5vw, 40px); align-items: start; } @media (min-width: 1100px) { .article-layout { grid-template-columns: minmax(0, 1fr) clamp(280px, 20vw, 360px); } .article-aside { position: sticky; top: calc(var(--topbar-h) + 20px); } } .article-main { min-width: 0; } /* Lesefenster: Artikeltext auf ruhigem, dunklem Grund statt über dem Matrix-Regen */ .article-page:not(.editing) .article-main { background: var(--surface); border: 1px solid var(--border); padding: clamp(18px, 2.5vw, 36px); } .article-title { font-size: clamp(2.6rem, 4.4vw, 4.4rem); line-height: 0.95; margin: 0; } .article-byline { margin: 12px 0 0; color: var(--muted); font-size: 0.88rem; } .article-lead { max-width: 60ch; font-size: clamp(1.05rem, 1.3vw, 1.25rem); color: var(--text); margin: 14px 0 0; white-space: pre-wrap; border-left: 3px solid var(--accent); padding-left: 14px; } .article-empty { margin-top: 32px; } .title-input { font-family: var(--font-display); font-size: clamp(2rem, 3.4vw, 3.2rem); text-transform: uppercase; padding: 6px 12px; } .lead-input { font-size: 1.05rem; margin-top: 10px; resize: vertical; } .article-body { margin-top: clamp(24px, 3vw, 40px); max-width: 75ch; color: var(--read); text-shadow: none; font-size: clamp(0.98rem, 0.92rem + 0.22vw, 1.12rem); line-height: 1.8; overflow-wrap: break-word; } .article-body > :first-child { margin-top: 0; } .article-body h2 { font-size: 2.3em; margin: 1.3em 0 0.4em; } .article-body h2::before { content: '## '; color: var(--accent); } .article-body h3 { font-size: 1.7em; margin: 1.2em 0 0.3em; } .article-body h3::before { content: '### '; color: var(--accent); } .article-body p { margin: 0 0 1em; } .article-body ul, .article-body ol { padding-left: 1.6em; margin: 0 0 1em; } .article-body ul { list-style: none; } .article-body ul > li::before { content: '■'; color: var(--accent); margin-left: -1.3em; margin-right: 0.7em; font-size: 0.7em; vertical-align: middle; } .article-body ol li::marker { color: var(--accent); } .article-body li { margin: 0.2em 0; } .article-body li > p { margin: 0; display: inline; } .article-body blockquote { margin: 1.4em 0; padding: 4px 0 4px 18px; border-left: 3px solid var(--accent); color: var(--bright); } .article-body img { display: block; max-width: 100%; max-height: 80vh; height: auto; margin: 1.4em auto; border: 1px solid var(--border); cursor: zoom-in; } .article-body hr { border: 0; border-top: 1px dashed var(--accent); margin: 2em 0; } .article-body a { color: var(--bright); } /* Seitenleiste */ .aside-card { display: flex; flex-direction: column; gap: 18px; border-color: var(--accent); } .aside-facts { margin: 0; display: grid; gap: 12px; } .aside-facts dd { margin: 3px 0 0; color: var(--bright); } .aside-facts .sub { display: block; font-size: 0.8rem; color: var(--muted); } .edit-actions { display: flex; flex-direction: column; gap: 12px; } .edit-buttons { display: flex; gap: 8px; } .edit-buttons .btn { flex: 1; } .edit-actions .link-btn { align-self: flex-start; } @media (max-width: 1099px) { /* Beim Lesen zuerst der Titel, beim Bearbeiten zuerst Status & Aktionen */ .editing .article-aside { order: -1; } .aside-card { flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: space-between; padding: 14px 18px; } .aside-facts { grid-auto-flow: column; gap: 24px; } .aside-card > .btn.full { width: auto; } .editing .edit-actions { position: fixed; left: 0; right: 0; bottom: 0; z-index: 15; flex-direction: row; flex-wrap: wrap; align-items: center; padding: 12px var(--gutter) calc(12px + env(safe-area-inset-bottom)); background: var(--bg); border-top: 1px solid var(--accent); box-shadow: 0 -4px 20px rgb(var(--accent-rgb) / 0.15); } .editing .edit-actions .error { flex-basis: 100%; } .editing .edit-buttons { order: 2; margin-left: auto; } .editing .edit-buttons .btn { flex: none; } .editing.article-page { padding-bottom: 80px; } } @media (max-width: 640px) { .aside-facts { grid-auto-flow: row; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px 20px; width: 100%; } .aside-card > .btn.full { width: 100%; } } /* Editor */ .editor { margin-top: 20px; } .toolbar { position: sticky; top: var(--topbar-h); z-index: 10; display: flex; flex-wrap: wrap; align-items: center; gap: 2px; padding: 6px; background: var(--input-bg); border: 1px solid var(--accent); } .toolbar button { font: inherit; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.04em; min-height: 32px; padding: 5px 10px; border: 1px solid transparent; background: transparent; color: var(--text); cursor: pointer; text-shadow: inherit; } .toolbar button:hover:not(:disabled) { border-color: var(--border); color: var(--bright); } .toolbar button:disabled { opacity: 0.35; cursor: default; } .toolbar button.active { background: var(--accent); color: var(--accent-ink); text-shadow: none; } .toolbar button b, .toolbar button i, .toolbar button u { color: inherit; } .toolbar-sep { width: 1px; height: 20px; background: var(--border); margin: 0 4px; } .editor-content.article-body { margin-top: 0; max-width: none; min-height: max(320px, 50vh); padding: clamp(16px, 2vw, 28px); border: 1px solid var(--accent); border-top: 0; background: var(--editor-bg); outline: none; } .editor-content.article-body:focus { box-shadow: var(--glow); } .editor-content img { cursor: pointer; } .editor-content img.ProseMirror-selectednode { outline: 2px solid var(--bright); outline-offset: 2px; } .editor-content p.is-editor-empty:first-child::before { content: attr(data-placeholder); color: var(--muted); float: left; height: 0; pointer-events: none; } /* ---------- Handy ---------- */ @media (max-width: 640px) { body { font-size: 14px; } .brand { font-size: 1.6rem; } .toolbar { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; } .toolbar button { flex: none; } .track-form { flex-direction: column; } .tiles { gap: 12px; } .tiles > * { flex-basis: 140px; } .tile { padding: 16px; } .tile small { display: none; } .page-head .btn, .page-actions { width: 100%; } .page-actions .btn { flex: 1; } } /* Weniger Bewegung, wenn im System eingestellt */ .calm .page-head h1::after, .calm .hero h1::after, .calm .dot.bad { animation: none; } @media (prefers-reduced-motion: reduce) { .page-head h1::after, .hero h1::after, .dot.bad { animation: none; } * { transition: none !important; } } /* ============================================================ Moderne Grundschicht (gilt für alle Designs, Werte aus den Tokens) ============================================================ */ /* Alle Eingabefelder einheitlich: gleiche Höhe, Radius, weicher Fokusring */ .form input:not([type='checkbox']), .form select, .form textarea, .aside-card select, .title-input, .lead-input, .track-form input, .household-add input, .recipe input:not([type='checkbox']), .recipe textarea, .city-search input, .kanban-filter select, .user-edit input, .task-dialog textarea { font-family: var(--font); color: var(--bright); background: var(--input-bg); border: 1px solid var(--border); border-radius: var(--radius-s); min-height: var(--control-h); text-shadow: none; transition: transform var(--dur) var(--ease-out); } .form textarea, .recipe textarea, .task-dialog textarea, .lead-input { min-height: 0; padding: 10px 12px; } .form input:not([type='checkbox']):focus, .form select:focus, .form textarea:focus, .aside-card select:focus, .title-input:focus, .lead-input:focus, .track-form input:focus, .household-add input:focus, .recipe input:focus, .recipe textarea:focus, .city-search input:focus, .kanban-filter select:focus, .user-edit input:focus, .task-dialog textarea:focus, .unit-select:focus { outline: none; border-color: var(--accent); box-shadow: var(--focus-ring); } .track-form input, .city-search input { min-height: 50px; border-color: var(--line-strong); } .track-form .btn { min-height: 50px; } .unit-select { border-radius: var(--radius-s); min-height: 34px; } .qty-unit > input { border-radius: var(--radius-s) 0 0 var(--radius-s) !important; } .qty-unit > .unit-select { border-radius: 0 var(--radius-s) var(--radius-s) 0; } [aria-invalid='true'] { box-shadow: 0 0 0 3px rgb(255 61 61 / 0.25) !important; } /* Beschriftungen in Fakten-Listen */ .info-facts dt { font-size: var(--label-size); letter-spacing: var(--label-tracking); } /* Startseite: Kacheln als App-Starter mit Icon-Feld */ .tile { position: relative; border-radius: var(--radius-m); box-shadow: var(--shadow-1); gap: 12px; transition: transform var(--dur) var(--ease-out); } .tile svg { box-sizing: content-box; width: 26px; height: 26px; padding: 10px; border-radius: var(--radius-s); background: var(--accent-soft); filter: none; } .tile-empty svg { background: transparent; box-shadow: inset 0 0 0 1px var(--border); } /* Interaktive Karten heben sich leicht an (nur transform) */ .tile, .project-card, .kanban-project-card, .task-card { transition: transform var(--dur) var(--ease-out); } .tile:hover, .project-card:hover, .kanban-project-card:hover, .task-card:hover:not(.dragging) { transform: translateY(var(--lift)); box-shadow: var(--shadow-1); } .project-card:hover, .kanban-project-card:hover, .tile:hover { border-color: var(--line-strong); } .project-cover { border-bottom-color: var(--border); } /* Listen: Zeilen mit feinen Linien und Hover-Fläche */ .household-item, .recipe-row, .product-list li { border-top-style: solid; border-top-color: var(--border); } .household-item { padding-inline: 6px; margin-inline: -6px; border-radius: var(--radius-s); } .household-item:hover { background: var(--accent-soft); } .monitor-facts, .info-visit { border-top-style: solid; } .timeline li { border-left-style: solid; border-left-color: var(--border); } .timeline li::before { border-radius: 50%; background: var(--surface-2); } /* Bedienelemente */ .stepper { border-radius: var(--radius-s); overflow: hidden; } .household-check { border-radius: var(--radius-s); border-color: var(--line-strong); } .segmented { border-color: var(--line-strong); border-radius: var(--radius-m); overflow: hidden; padding: 3px; gap: 3px; background: var(--card-inner); } .segmented button { border-radius: calc(var(--radius-m) - 3px); } .segmented .count::before, .segmented .count::after { content: none; } .segmented .count { margin-left: 4px; } .combo-list { border-color: var(--line-strong); border-radius: var(--radius-m); box-shadow: var(--shadow-2); background: var(--panel); padding: 6px; } .combo-list li { border-radius: var(--radius-s); } .toolbar { border-color: var(--line-strong); border-radius: var(--radius-m) var(--radius-m) 0 0; background: var(--panel); backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); } .toolbar button { border-radius: var(--radius-s); } .editor-content.article-body { border-color: var(--line-strong); border-radius: 0 0 var(--radius-m) var(--radius-m); } .monitor-summary { border-radius: var(--radius-m); } .monitor-card { border-left-width: 3px; } .aside-card { border-color: var(--line-strong); } .article-cover { border-color: var(--line-strong); border-radius: var(--radius-l); overflow: hidden; box-shadow: var(--shadow-1); } .article-page:not(.editing) .article-main { border-radius: var(--radius-l); box-shadow: var(--shadow-1); } .article-lead { border-left-width: 2px; } .link-picker { border-color: var(--border); border-radius: var(--radius-m); } /* Kanban */ .board-column { border-radius: var(--radius-m); border-top-width: 2px; box-shadow: var(--shadow-1); } .board-column.drop-target { box-shadow: var(--focus-ring); } .board-head .count::before, .board-head .count::after { content: none; } .board-head .count { display: inline-grid; place-items: center; min-width: 1.6em; height: 1.6em; margin-left: 6px; padding: 0 6px; border-radius: var(--radius-pill); background: var(--accent-soft); color: var(--text); font-family: var(--font-label); font-size: 0.7rem; vertical-align: 0.15em; } .board-empty { border-radius: var(--radius-s); border-style: dashed; } .task-card { border-radius: var(--radius-s); border-color: var(--border); } .task-card:hover { border-color: var(--line-strong); box-shadow: var(--shadow-1); } .drop-line { border-radius: 2px; box-shadow: none; } .avatar { border-radius: 50%; } .status-bar { border-radius: var(--radius-pill); overflow: hidden; } /* Reisen */ .travel-map { border-radius: var(--radius-l); } .map-controls { border-color: var(--line-strong); border-radius: var(--radius-m); overflow: hidden; backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); } .info-card { border-color: var(--line-strong); border-radius: var(--radius-m); box-shadow: var(--shadow-2); backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); } /* Sanfter Wechsel zwischen den Designs (View Transitions, wo der Browser es kann) */ ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 0.35s; animation-timing-function: var(--ease-out); } @media (prefers-reduced-motion: reduce) { .tile:hover, .project-card:hover, .kanban-project-card:hover, .task-card:hover, .btn:hover:not(:disabled) { transform: none; } ::view-transition-old(root), ::view-transition-new(root) { animation: none; } } html.calm .tile:hover, html.calm .project-card:hover, html.calm .kanban-project-card:hover, html.calm .task-card:hover { transform: none; } /* Auswahlknöpfe (z. B. Sichtbarkeit einer Einkaufsliste) nicht wie Eingabefelder gestalten */ .form label.checkbox input[type='radio'] { width: 18px; height: 18px; min-height: 0; padding: 0; margin: 0; border: 0; background: none; box-shadow: none; accent-color: var(--accent); flex: none; }