/* ============================================================ LOKALE FONTS — SIL OFL 1.1 licensed, self-hosted Geen third-party requests, geen privacy-leak naar Google. Variable WOFF2 bestanden onder /assets/fonts/ Licenses in /assets/fonts/licenses/ ============================================================ */ @font-face { font-family: 'Fraunces'; font-style: normal; font-display: swap; font-weight: 100 900; src: url('/assets/fonts/fraunces-latin-full-normal.woff2') format('woff2-variations'); 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; } @font-face { font-family: 'Fraunces'; font-style: italic; font-display: swap; font-weight: 100 900; src: url('/assets/fonts/fraunces-latin-full-italic.woff2') format('woff2-variations'); 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; } @font-face { font-family: 'Literata'; font-style: normal; font-display: swap; font-weight: 400 700; src: url('/assets/fonts/literata-latin-opsz-normal.woff2') format('woff2-variations'); 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; } @font-face { font-family: 'Literata'; font-style: italic; font-display: swap; font-weight: 400 700; src: url('/assets/fonts/literata-latin-opsz-italic.woff2') format('woff2-variations'); 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; } @font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-display: swap; font-weight: 400 700; src: url('/assets/fonts/plus-jakarta-sans-latin-wght-normal.woff2') format('woff2-variations'); 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; } @font-face { font-family: 'Plus Jakarta Sans'; font-style: italic; font-display: swap; font-weight: 400 700; src: url('/assets/fonts/plus-jakarta-sans-latin-wght-italic.woff2') format('woff2-variations'); 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; } /* Klonkt publieke stijl — editorial-ish, geen emoji-UI */ :root { --font-display: 'Fraunces', Georgia, serif; --font-body: 'Literata', Georgia, serif; --font-ui: 'Plus Jakarta Sans', system-ui, sans-serif; --font-mono: ui-monospace, Menlo, Consolas, monospace; --radius: 8px; --transition: 180ms cubic-bezier(.4,0,.2,1); --safe-top: env(safe-area-inset-top, 0); --safe-bot: env(safe-area-inset-bottom, 0); /* iOS top inset: starts from env(), but a tiny boot script overrides it with a real/measured value (env() resolves to 0 in some iOS standalone states). */ --ios-safe-top: env(safe-area-inset-top, 0px); color-scheme: light dark; } /* Native controls (datum/tijd-picker, scrollbars) het SITE-thema laten volgen i.p.v. de OS-voorkeur, en de datum/tijd-velden de site-accentkleur geven. Zo staat de ingebouwde kalender-popup in dark + accent (de popup zelf is een browser-widget, dus fonts/randen blijven van de browser). */ [data-theme="dark"] { color-scheme: dark; } [data-theme="light"] { color-scheme: light; } input[type="date"], input[type="time"], input[type="datetime-local"] { accent-color: var(--accent, #6b8f71); } input[type="date"]::-webkit-calendar-picker-indicator, input[type="time"]::-webkit-calendar-picker-indicator, input[type="datetime-local"]::-webkit-calendar-picker-indicator { cursor: pointer; opacity: .7; } input[type="date"]:hover::-webkit-calendar-picker-indicator, input[type="time"]:hover::-webkit-calendar-picker-indicator, input[type="datetime-local"]:hover::-webkit-calendar-picker-indicator { opacity: 1; } /* ============================================================ PALETTES — elk palette definieert alleen bg/tekst/rand shades. --accent wordt LOS ingesteld via de accent-kleur config (inline in template). Palette-selector: en optioneel data-theme="dark"|"light". Als geen data-palette = Sage default. ============================================================ */ /* ── SAGE (default) ── warme crème ── */ :root, [data-palette="sage"] { --paper: #faf8f3; --paper-2: #f2ede0; --ink: #1a1a1a; --ink-soft: #3d3833; --ink-muted: #6b6560; --ink-faint: #a8a29e; --rule: #e8e2d5; --rule-2: #d4ccb8; } @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]):not([data-palette]), [data-palette="sage"]:not([data-theme="light"]) { --paper: #1c1a17; --paper-2: #252220; --ink: #f4ede0; --ink-soft: #d4ccb8; --ink-muted: #a8a29e; --ink-faint: #6b6560; --rule: #3d3833; --rule-2: #4d4740; } } [data-theme="dark"]:not([data-palette]), [data-theme="dark"][data-palette="sage"] { --paper: #1c1a17; --paper-2: #252220; --ink: #f4ede0; --ink-soft: #d4ccb8; --ink-muted: #a8a29e; --ink-faint: #6b6560; --rule: #3d3833; --rule-2: #4d4740; } /* ── KLONKT ── merk-standaard: clean wit → bijna-zwart (neutraal, gouden accent) ── */ [data-palette="klonkt"] { --paper: #ffffff; --paper-2: #f4f4f5; --ink: #09090b; --ink-soft: #27272a; --ink-muted: #52525b; --ink-faint: #a1a1aa; --rule: #e4e4e7; --rule-2: #d4d4d8; } @media (prefers-color-scheme: dark) { [data-palette="klonkt"]:not([data-theme="light"]) { --paper: #0a0a0a; --paper-2: #18181b; --ink: #fafafa; --ink-soft: #d4d4d8; --ink-muted: #a1a1aa; --ink-faint: #71717a; --rule: #27272a; --rule-2: #3f3f46; } } [data-theme="dark"][data-palette="klonkt"] { --paper: #0a0a0a; --paper-2: #18181b; --ink: #fafafa; --ink-soft: #d4d4d8; --ink-muted: #a1a1aa; --ink-faint: #71717a; --rule: #27272a; --rule-2: #3f3f46; } /* ── PAPER ── minimalistisch wit → zwart ── */ [data-palette="paper"] { --paper: #ffffff; --paper-2: #f4f4f5; --ink: #09090b; --ink-soft: #27272a; --ink-muted: #52525b; --ink-faint: #a1a1aa; --rule: #e4e4e7; --rule-2: #d4d4d8; } @media (prefers-color-scheme: dark) { [data-palette="paper"]:not([data-theme="light"]) { --paper: #0a0a0a; --paper-2: #18181b; --ink: #fafafa; --ink-soft: #d4d4d8; --ink-muted: #a1a1aa; --ink-faint: #71717a; --rule: #27272a; --rule-2: #3f3f46; } } [data-theme="dark"][data-palette="paper"] { --paper: #0a0a0a; --paper-2: #18181b; --ink: #fafafa; --ink-soft: #d4d4d8; --ink-muted: #a1a1aa; --ink-faint: #71717a; --rule: #27272a; --rule-2: #3f3f46; } /* ── FOREST ── olijfgroen → donker bos ── */ [data-palette="forest"] { --paper: #f2f6ed; --paper-2: #e1ead6; --ink: #1a2e15; --ink-soft: #2d4a26; --ink-muted: #5a6f52; --ink-faint: #8aa080; --rule: #ccddbd; --rule-2: #adc396; } @media (prefers-color-scheme: dark) { [data-palette="forest"]:not([data-theme="light"]) { --paper: #0d1f12; --paper-2: #1a331e; --ink: #dcf2d0; --ink-soft: #b8d8a8; --ink-muted: #8aad7c; --ink-faint: #5a7a50; --rule: #2d4a30; --rule-2: #3d5e42; } } [data-theme="dark"][data-palette="forest"] { --paper: #0d1f12; --paper-2: #1a331e; --ink: #dcf2d0; --ink-soft: #b8d8a8; --ink-muted: #8aad7c; --ink-faint: #5a7a50; --rule: #2d4a30; --rule-2: #3d5e42; } /* ── STONE ── beige bruin → koffie ── */ [data-palette="stone"] { --paper: #f5f0e8; --paper-2: #e7ddce; --ink: #2b2218; --ink-soft: #4a3a2a; --ink-muted: #78614a; --ink-faint: #a8927b; --rule: #d6c6ac; --rule-2: #bda98a; } @media (prefers-color-scheme: dark) { [data-palette="stone"]:not([data-theme="light"]) { --paper: #1a130b; --paper-2: #2d2416; --ink: #f5e9d5; --ink-soft: #d4c0a3; --ink-muted: #a8927b; --ink-faint: #786452; --rule: #3d2f1e; --rule-2: #534029; } } [data-theme="dark"][data-palette="stone"] { --paper: #1a130b; --paper-2: #2d2416; --ink: #f5e9d5; --ink-soft: #d4c0a3; --ink-muted: #a8927b; --ink-faint: #786452; --rule: #3d2f1e; --rule-2: #534029; } /* ── MIDNIGHT ── lavendel → donker paars ── */ [data-palette="midnight"] { --paper: #f3f1f8; --paper-2: #e3ddf0; --ink: #1e1a2e; --ink-soft: #332c4d; --ink-muted: #5e5478; --ink-faint: #9288a8; --rule: #d4cae3; --rule-2: #b8a9cc; } @media (prefers-color-scheme: dark) { [data-palette="midnight"]:not([data-theme="light"]) { --paper: #0f0a1f; --paper-2: #1c1432; --ink: #e9def7; --ink-soft: #c4b5d9; --ink-muted: #9d88b8; --ink-faint: #6b5a85; --rule: #2d1f4a; --rule-2: #3d2b5e; } } [data-theme="dark"][data-palette="midnight"] { --paper: #0f0a1f; --paper-2: #1c1432; --ink: #e9def7; --ink-soft: #c4b5d9; --ink-muted: #9d88b8; --ink-faint: #6b5a85; --rule: #2d1f4a; --rule-2: #3d2b5e; } /* ── SUNSET ── roze crème → diep paars-roze ── */ [data-palette="sunset"] { --paper: #fdf4f3; --paper-2: #f7e1dc; --ink: #2e1618; --ink-soft: #4d282b; --ink-muted: #7a4a4e; --ink-faint: #b08589; --rule: #ebcac3; --rule-2: #d9a8a0; } @media (prefers-color-scheme: dark) { [data-palette="sunset"]:not([data-theme="light"]) { --paper: #1f0a14; --paper-2: #321525; --ink: #fce7f3; --ink-soft: #f0c5d3; --ink-muted: #c896a8; --ink-faint: #8a6878; --rule: #4a1f35; --rule-2: #5e2d43; } } [data-theme="dark"][data-palette="sunset"] { --paper: #1f0a14; --paper-2: #321525; --ink: #fce7f3; --ink-soft: #f0c5d3; --ink-muted: #c896a8; --ink-faint: #8a6878; --rule: #4a1f35; --rule-2: #5e2d43; } /* ── SAND ── warm papier (subtiel, niet fel geel) → warm donker ── (key blijft 'cream') */ [data-palette="cream"] { --paper: #f7f3ec; --paper-2: #ece5d8; --ink: #232019; --ink-soft: #43392c; --ink-muted: #6f6149; --ink-faint: #a3957c; --rule: #ddd3c0; --rule-2: #c9bca3; } @media (prefers-color-scheme: dark) { [data-palette="cream"]:not([data-theme="light"]) { --paper: #14120d; --paper-2: #221e15; --ink: #efe9dd; --ink-soft: #d0c6b2; --ink-muted: #a3957c; --ink-faint: #6f6149; --rule: #322c20; --rule-2: #463d2c; } } [data-theme="dark"][data-palette="cream"] { --paper: #14120d; --paper-2: #221e15; --ink: #efe9dd; --ink-soft: #d0c6b2; --ink-muted: #a3957c; --ink-faint: #6f6149; --rule: #322c20; --rule-2: #463d2c; } /* ── OCEAN ── helder blauw → diep oceaanblauw ── */ [data-palette="ocean"] { --paper: #eef4fb; --paper-2: #d8e6f7; --ink: #0f2942; --ink-soft: #1d4368; --ink-muted: #4a6e90; --ink-faint: #87a3c0; --rule: #c2d8ee; --rule-2: #a3c2e0; } @media (prefers-color-scheme: dark) { [data-palette="ocean"]:not([data-theme="light"]) { --paper: #081726; --paper-2: #102a42; --ink: #d6e8fb; --ink-soft: #aecbe8; --ink-muted: #7e9fc0; --ink-faint: #547390; --rule: #1d3a56; --rule-2: #2a4d6e; } } [data-theme="dark"][data-palette="ocean"] { --paper: #081726; --paper-2: #102a42; --ink: #d6e8fb; --ink-soft: #aecbe8; --ink-muted: #7e9fc0; --ink-faint: #547390; --rule: #1d3a56; --rule-2: #2a4d6e; } /* ── TEAL ── mint-turquoise → diep teal ── */ [data-palette="teal"] { --paper: #ecf7f5; --paper-2: #cfe9e4; --ink: #0c2e2a; --ink-soft: #194a44; --ink-muted: #467168; --ink-faint: #84aaa2; --rule: #bce0d9; --rule-2: #9bcbc1; } @media (prefers-color-scheme: dark) { [data-palette="teal"]:not([data-theme="light"]) { --paper: #06201d; --paper-2: #0e332e; --ink: #d4f2ec; --ink-soft: #aad9d0; --ink-muted: #7aaaa0; --ink-faint: #517a72; --rule: #1a4a42; --rule-2: #275e54; } } [data-theme="dark"][data-palette="teal"] { --paper: #06201d; --paper-2: #0e332e; --ink: #d4f2ec; --ink-soft: #aad9d0; --ink-muted: #7aaaa0; --ink-faint: #517a72; --rule: #1a4a42; --rule-2: #275e54; } /* ── CANDY ── zacht roze-rood → diep kersenrood ── */ [data-palette="candy"] { --paper: #fdf1f3; --paper-2: #f8d8de; --ink: #3a1018; --ink-soft: #5e1f2a; --ink-muted: #8e4450; --ink-faint: #c2868f; --rule: #f0c5cd; --rule-2: #e3a0ab; } @media (prefers-color-scheme: dark) { [data-palette="candy"]:not([data-theme="light"]) { --paper: #220810; --paper-2: #3a121d; --ink: #fde0e6; --ink-soft: #f5b8c4; --ink-muted: #cd8b98; --ink-faint: #8e5f6a; --rule: #4d1a28; --rule-2: #632536; } } [data-theme="dark"][data-palette="candy"] { --paper: #220810; --paper-2: #3a121d; --ink: #fde0e6; --ink-soft: #f5b8c4; --ink-muted: #cd8b98; --ink-faint: #8e5f6a; --rule: #4d1a28; --rule-2: #632536; } /* ── AMBER ── warm honing → diep amber ── */ [data-palette="amber"] { --paper: #fdf6e9; --paper-2: #f7e6c2; --ink: #3a2a0c; --ink-soft: #5e451a; --ink-muted: #8e7340; --ink-faint: #c2a877; --rule: #f0dca8; --rule-2: #e3c581; } @media (prefers-color-scheme: dark) { [data-palette="amber"]:not([data-theme="light"]) { --paper: #221a08; --paper-2: #3a2c12; --ink: #fdeecb; --ink-soft: #f0d49a; --ink-muted: #c2a877; --ink-faint: #8e7340; --rule: #4d3a16; --rule-2: #634d20; } } [data-theme="dark"][data-palette="amber"] { --paper: #221a08; --paper-2: #3a2c12; --ink: #fdeecb; --ink-soft: #f0d49a; --ink-muted: #c2a877; --ink-faint: #8e7340; --rule: #4d3a16; --rule-2: #634d20; } /* ── ROSE ── zacht roze → wijnrood ── */ [data-palette="rose"] { --paper: #fdf2f4; --paper-2: #f8dde3; --ink: #2e1419; --ink-soft: #4d242c; --ink-muted: #7a4651; --ink-faint: #b3838d; --rule: #f0c9d1; --rule-2: #e0a3af; } @media (prefers-color-scheme: dark) { [data-palette="rose"]:not([data-theme="light"]) { --paper: #1f0a0f; --paper-2: #33141c; --ink: #fce4ea; --ink-soft: #f0bcc8; --ink-muted: #c98f9d; --ink-faint: #8a6470; --rule: #4a1f2c; --rule-2: #5e2d3a; } } [data-theme="dark"][data-palette="rose"] { --paper: #1f0a0f; --paper-2: #33141c; --ink: #fce4ea; --ink-soft: #f0bcc8; --ink-muted: #c98f9d; --ink-faint: #8a6470; --rule: #4a1f2c; --rule-2: #5e2d3a; } /* ── TERRACOTTA ── warme klei → diep brick ── (key blijft 'mint' voor DB-compat) */ [data-palette="mint"] { --paper: #faf2ee; --paper-2: #f2ddd0; --ink: #2e1a12; --ink-soft: #4a2c1e; --ink-muted: #7a5544; --ink-faint: #b3917e; --rule: #eccdbb; --rule-2: #ddb49d; } @media (prefers-color-scheme: dark) { [data-palette="mint"]:not([data-theme="light"]) { --paper: #1f120c; --paper-2: #2e1c13; --ink: #f7e6da; --ink-soft: #e0c3b0; --ink-muted: #b3917c; --ink-faint: #7a5544; --rule: #4a2c1e; --rule-2: #5e3a28; } } [data-theme="dark"][data-palette="mint"] { --paper: #1f120c; --paper-2: #2e1c13; --ink: #f7e6da; --ink-soft: #e0c3b0; --ink-muted: #b3917c; --ink-faint: #7a5544; --rule: #4a2c1e; --rule-2: #5e3a28; } /* ── LILAC ── zacht lila → donker violet ── */ [data-palette="lilac"] { --paper: #faf4fb; --paper-2: #f0e0f3; --ink: #2a1830; --ink-soft: #46294f; --ink-muted: #7a5685; --ink-faint: #b393bd; --rule: #e6cdec; --rule-2: #d4abdd; } @media (prefers-color-scheme: dark) { [data-palette="lilac"]:not([data-theme="light"]) { --paper: #170a1c; --paper-2: #281433; --ink: #f3e2f7; --ink-soft: #dabce4; --ink-muted: #b088c0; --ink-faint: #7a5a88; --rule: #3d1f4a; --rule-2: #4f2b5e; } } [data-theme="dark"][data-palette="lilac"] { --paper: #170a1c; --paper-2: #281433; --ink: #f3e2f7; --ink-soft: #dabce4; --ink-muted: #b088c0; --ink-faint: #7a5a88; --rule: #3d1f4a; --rule-2: #4f2b5e; } /* Accent-tint wordt berekend uit --accent, zodat hij meegaat bij elke accent-keuze. Wordt in template inline gezet; hier alleen een fallback. */ :root { --accent: #c2410c; --accent-soft: #ea580c; --accent-tint: #fef2e8; } * { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: transparent; overscroll-behavior-y: none; /* Horizontaal clippen op ROOT-niveau: dit propageert naar de viewport (geen horizontale scroll) ZONDER position:fixed te breken — html is sowieso de document-scroller. De body mag GEEN overflow-x krijgen, want dan zou die een tweede scroll-container worden en zou de fixed bottom-tab meeschuiven. */ overflow-x: hidden; } body { margin: 0; } /* ── Thema-scrollbar: slank, afgerond, subtiel — vervangt de standaard chunky browser-scrollbar (met pijltjes) die niet bij het donkere thema past. Werkt op de pagina én op interne scrollers (queue, chat-thread, dropdowns). ── */ * { scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--ink) 28%, transparent) transparent; } ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background-color: color-mix(in srgb, var(--ink) 24%, transparent); border-radius: 999px; border: 2px solid transparent; /* transparante rand → optisch slanker (≈6px) */ background-clip: content-box; } ::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--accent) 60%, var(--ink)); } ::-webkit-scrollbar-corner { background: transparent; } /* Login/auth = focus-scherm. Bij htmx-navigatie naar login blijft de bottom-tab uit de vorige pagina in de DOM staan → hier verbergen zodat het login-scherm net zo "kaal" is als bij een full-load (waar de tab niet eens gerenderd wordt). */ body.on-auth .bottom-tab { display: none; } body:not(.admin) { min-height: 100dvh; background: var(--paper); color: var(--ink); font-family: var(--font-body); font-size: 1.0625rem; line-height: 1.65; font-feature-settings: "liga" 1, "kern" 1, "onum" 1; -webkit-font-smoothing: antialiased; /* v9.4 — Sticky footer: body als flex-kolom, main groeit, footer onderaan */ display: flex; flex-direction: column; } body:not(.admin) #pcms-main { flex: 1 0 auto; } body:not(.admin) .site-footer { flex-shrink: 0; } body:not(.admin)::before { content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none; /* Per-palette achtergrond-gradient: opgebouwd uit de palette's EIGEN --paper/--paper-2 (diagonale verloop) + een zachte accent-glow erbovenop. Werkt automatisch voor elk palet, light én dark — geen per-palette regels nodig. */ background: radial-gradient(ellipse at top, color-mix(in srgb, var(--accent) 6%, transparent), transparent 60%), radial-gradient(ellipse at bottom right, color-mix(in srgb, var(--accent) 7%, transparent), transparent 55%), linear-gradient(160deg, var(--paper) 0%, var(--paper-2) 100%); } /* Klonkt-palet gebruikt nu (net als de andere paletten) de generieke accent-glow hierboven → de achtergrond-gradient volgt de gekozen accentkleur. */ ::selection { background: var(--accent-tint); color: var(--accent); } h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 450; line-height: 1.15; letter-spacing: -0.015em; margin: 0; text-wrap: balance; font-variation-settings: "opsz" 144, "SOFT" 50; } h1 { font-size: clamp(2rem, 4vw + 1rem, 3.5rem); letter-spacing: -0.022em; } h2 { font-size: clamp(1.5rem, 2vw + 1rem, 2.25rem); margin: 1.5rem 0 .4rem; } h3 { font-size: 1.375rem; margin: 1.25rem 0 .3rem; } p { margin: 0 0 .85em; text-wrap: pretty; hyphens: auto; } a { color: var(--ink); text-decoration: underline; text-decoration-color: var(--rule-2); text-underline-offset: 3px; transition: color var(--transition), text-decoration-color var(--transition); } a:hover { color: var(--accent); text-decoration-color: var(--accent); } /* Knop-ankers houden hun eigen tekstkleur bij hover. Zonder dit overschrijft de globale a:hover{color:accent} de knop-tekst → die wordt dezelfde kleur als de accent-achtergrond en valt weg (vooral op sites met een felle accent). */ a.btn:hover, a.epk-btn:hover { color: var(--ink); } a.btn-primary:hover, a.btn-danger:hover, a.btn-success:hover, a.button:hover, a.epk-btn-primary:hover, a.dls-btn:hover, a.sh-tix:hover, a.dl-go:hover { color: #fff; text-decoration-color: currentColor; } a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 2px; text-decoration: none; } blockquote { margin: 2em 0; padding: .25em 0 .25em 1.25em; border-left: 2px solid var(--accent); font-family: var(--font-display); font-style: italic; font-size: 1.15em; color: var(--ink-soft); } code { font-family: var(--font-mono); font-size: .9em; padding: .15em .4em; background: var(--paper-2); border: 1px solid var(--rule); border-radius: 4px; } pre { font-family: var(--font-mono); font-size: .85rem; padding: 1.25em 1.5em; background: var(--paper-2); border: 1px solid var(--rule); border-radius: var(--radius); overflow-x: auto; line-height: 1.5; } pre code { padding: 0; background: none; border: none; } hr { border: 0; border-top: 1px solid var(--rule); margin: 3em auto; max-width: 4rem; } /* Container — schaalt mee met schermgrootte. 42rem default (optimale leesbreedte voor tekst), breder op HD/2.5K/4K waar je meer ademruimte hebt. Grid-view heeft z'n eigen bredere variant (zie .feed-grid). */ /* Container max-width schaalt per schermformaat. 42rem is optimale leesbreedte voor tekst. Op grotere schermen ademruimte geven zonder uitwaaieren. Grid apart geregeld. */ .container { max-width: 42rem; margin-inline: auto; padding-inline: clamp(1.25rem, 4vw, 2rem); } /* Post-/leesbreedte. Globaal + hogere specificity (.container.post-page) zodat 'ie de responsive .container-breakpoints (56/72rem) overal overrult — posts én de downloads-pagina krijgen zo exact dezelfde 720px-breedte. */ .container.post-page { max-width: 720px; margin: 0.5rem auto 2rem; padding: 0 1rem; } /* Laptop / Full HD — 1440px viewport of groter */ @media (min-width: 1440px) { .container { max-width: 56rem; } } /* Desktop / QHD 2.5K — 1920px viewport of groter */ @media (min-width: 1920px) { .container { max-width: 72rem; } } /* 4K UHD — 2560px viewport of groter */ @media (min-width: 2560px) { .container { max-width: 88rem; } } /* Grid-view tiles: Instagram-feel. Max-width schaalt met gekozen kolommen zodat tegels niet te groot of te klein worden. */ @media (min-width: 1200px) { body[data-grid-cols="4"] .feed-grid.container { max-width: 80rem; } body[data-grid-cols="3"] .feed-grid.container { max-width: 64rem; } body[data-grid-cols="2"] .feed-grid.container { max-width: 48rem; } } @media (min-width: 1920px) { body[data-grid-cols="4"] .feed-grid.container { max-width: 96rem; } } .icon { width: 1.125em; height: 1.125em; flex-shrink: 0; vertical-align: -0.15em; stroke: currentColor; fill: none; display: inline-block; } /* Masthead */ .masthead { border-bottom: 1px solid var(--rule); padding: calc(1rem + var(--ios-safe-top, 0px)) 0 1rem; /* GEEN backdrop-filter hier: een voorouder met backdrop-filter blokkeert de frosted blur van het user-menu-dropdown eronder. Masthead is toch bijna dekkend, dus solide bg i.p.v. blur. */ background: color-mix(in srgb, var(--paper) 94%, transparent); position: sticky; top: 0; z-index: 20; } .masthead-inner { display: flex; align-items: center; justify-content: flex-end; gap: 1.5rem; } .masthead-brand { min-width: 0; flex: 1 1 auto; overflow: hidden; } .site-title { font-family: var(--font-display); font-size: 1.5rem; font-weight: 500; font-variation-settings: "opsz" 72, "SOFT" 100; letter-spacing: -0.015em; text-decoration: none; color: var(--ink); line-height: 1; display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; } .site-title:hover { color: var(--accent); } /* v9.0 — nav-home icon (replaces site-title text in nav) */ .nav-home { display: inline-flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem; color: var(--ink-soft); text-decoration: none; border-radius: 6px; border: 1px solid transparent; transition: all var(--transition); } .nav-home:hover { color: var(--ink); background: var(--paper-2); border-color: var(--rule); } .nav-home .icon { width: 1.15rem; height: 1.15rem; } .top-nav { display: flex; align-items: center; gap: .25rem; flex-shrink: 0; } .nav-link, .nav-btn { font-family: var(--font-ui); font-size: .875rem; font-weight: 500; color: var(--ink-soft); text-decoration: none; padding: .5rem .85rem; border-radius: 6px; background: transparent; border: 1px solid transparent; cursor: pointer; display: inline-flex; align-items: center; gap: .4rem; min-height: 2.25rem; transition: all var(--transition); } .nav-link:hover, .nav-btn:hover { color: var(--ink); background: var(--paper-2); border-color: var(--rule); } .nav-link-muted { color: var(--ink-muted); } .nav-label { display: none; } @media (min-width: 560px) { .nav-label { display: inline; } } /* Article */ main { padding-top: 2rem; } .page { padding-block: 2rem 3rem; } page-container { display: block; font-size: 1.125rem; line-height: 1.75; } page-container h1 { font-size: clamp(2rem, 5vw + 1rem, 3.75rem); margin-bottom: 1rem; letter-spacing: -0.025em; } page-container img, page-container iframe, page-container video { max-width: 100%; height: auto; display: block; margin: 2rem auto; border-radius: var(--radius); } page-container audio { width: 100%; margin: 1.5rem 0; } page-container figure { margin: 2rem 0; } page-container figcaption { font-family: var(--font-ui); font-size: .85rem; color: var(--ink-muted); text-align: center; margin-top: .5rem; } page-container[contenteditable="true"] { outline: 2px dashed var(--accent); outline-offset: .5rem; border-radius: var(--radius); } .empty { text-align: center; padding: 4rem 1rem; } /* Moved account (FEP-7628 slice 3): the signpost above the feed. Loud on purpose — a visitor must not read a stale timeline thinking it is current. */ .moved-banner { text-align: center; margin: 1.5rem 0 2rem; padding: 1.75rem 1.25rem; border: 2px solid var(--accent, #e8b04b); border-radius: var(--radius, 10px); background: color-mix(in srgb, var(--accent, #e8b04b) 10%, var(--paper-2, var(--paper))); } .moved-banner-lead { margin: 0 0 .5rem; font-size: 1rem; opacity: .85; } .moved-banner-link { display: inline-block; font-family: var(--font-display); font-size: clamp(1.5rem, 5vw, 2.4rem); font-weight: 700; line-height: 1.15; overflow-wrap: anywhere; } .moved-banner-hint { margin: .75rem 0 0; font-size: .85rem; color: var(--ink-soft); } .empty h1 { font-size: 2rem; } .empty p { color: var(--ink-muted); } /* Embeds */ .pcms-embed, .folio-embed { margin: 2rem 0; } .pcms-embed iframe, .pcms-embed video, .pcms-embed audio, .folio-embed iframe, .folio-embed video, .folio-embed audio { width: 100%; display: block; border: 0; border-radius: var(--radius); } /* Article footer */ .article-footer { display: flex; justify-content: center; padding-top: 2rem; margin-top: 2rem; border-top: 1px solid var(--rule); } /* Buttons */ .button { font-family: var(--font-ui); font-size: .875rem; font-weight: 500; padding: .6rem 1.1rem; min-height: 2.5rem; display: inline-flex; align-items: center; gap: .5rem; background: var(--ink); color: var(--paper); border: 1px solid var(--ink); border-radius: 6px; text-decoration: none; cursor: pointer; transition: all var(--transition); } .button:hover { background: var(--accent); border-color: var(--accent); color: #fff; } .button-ghost { background: transparent; color: var(--ink); border-color: var(--rule-2); } .button-ghost:hover { background: var(--paper-2); border-color: var(--accent); color: var(--accent); } /* Pagination */ .pagination { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; padding-block: 2rem 4rem; margin-top: 2rem; border-top: 1px solid var(--rule); } a.pagination-item { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.25rem; border: 2px solid var(--rule-2, var(--rule)); border-radius: var(--radius); text-decoration: none; transition: all .15s ease; font-size: .9rem; background: var(--paper-2); min-height: 5rem; min-width: 0; overflow: hidden; cursor: pointer; box-shadow: 0 1px 0 rgba(0,0,0,.02); -webkit-tap-highlight-color: color-mix(in srgb, var(--accent) 30%, transparent); position: relative; } .pagination-item:not(a) { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.25rem; border: 1px dashed var(--rule); border-radius: var(--radius); font-size: .9rem; background: transparent; min-height: 5rem; min-width: 0; overflow: hidden; } .pagination-next { flex-direction: row-reverse; text-align: right; } a.pagination-item:hover { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 5%, var(--paper-2)); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,.08); } a.pagination-item:active { transform: translateY(0); transition-duration: .05s; } .pagination-disabled { opacity: .5; cursor: default; font-style: italic; } .pagination-body { display: flex; flex-direction: column; gap: .15rem; min-width: 0; flex: 1; } .pagination-label { display: block; font-family: var(--font-ui); font-size: .7rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--accent); margin-bottom: .15rem; } .pagination-slug { display: block; font-size: .72rem; color: var(--ink-muted); opacity: .75; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-style: italic; } .pagination-title { display: block; font-family: var(--font-display); font-weight: 600; color: var(--ink); font-variation-settings: "opsz" 72; font-style: normal; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 1.05rem; text-decoration: underline; text-decoration-color: var(--rule-2, var(--rule)); text-decoration-thickness: 1px; text-underline-offset: 3px; transition: text-decoration-color .15s; } a.pagination-item:hover .pagination-title { text-decoration-color: var(--accent); } .pagination .icon { width: 1.75em; height: 1.75em; flex-shrink: 0; color: var(--accent); transition: transform .15s; } a.pagination-prev:hover .icon { transform: translateX(-4px); } a.pagination-next:hover .icon { transform: translateX(4px); } /* Pinned-targets → accent-tint en dikkere rand voor duidelijkheid */ .pagination-item.is-pinned { background: color-mix(in srgb, var(--accent) 8%, var(--paper-2)); border-color: color-mix(in srgb, var(--accent) 45%, var(--rule)); } a.pagination-item.is-pinned:hover { background: color-mix(in srgb, var(--accent) 15%, var(--paper-2)); border-color: var(--accent); } @media (max-width: 800px) { .pagination { grid-template-columns: 1fr; } } /* Footer */ .site-footer { padding: 2rem 0 calc(2rem + env(safe-area-inset-bottom, 0px)); border-top: 1px solid var(--rule); margin-top: 4rem; font-family: var(--font-ui); font-size: .85rem; color: var(--ink-muted); } .site-footer-inner { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 1rem; align-items: center; } .site-footer a { color: var(--ink-muted); text-decoration-color: var(--rule); } .site-footer a:hover { color: var(--accent); } .site-footer-links { display: flex; gap: 1rem; } .sep { color: var(--ink-faint); margin: 0 .5rem; } .footer-tagline { font-style: italic; opacity: .8; } @media print { .masthead, .pagination, .site-footer, .article-footer, .top-nav { display: none; } body { background: #fff; color: #000; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; } } /* ============================================================ V7 ADDITIONS — post metadata UI + audio player + post-images ============================================================ */ /* Post header */ .post-header { margin: 0 0 2rem; } .post-cover { margin: 0 0 1.5rem; border-radius: 8px; overflow: hidden; background: color-mix(in srgb, var(--fg) 4%, transparent); } .post-cover img { display: block; width: 100%; height: auto; /* volledige (niet-bijgesneden) hoogte */ /* geen max-height/object-fit: cover meer → de hele afbeelding toont, volle containerbreedte, zijkanten gerespecteerd. */ } .post-title { font-size: clamp(1.6rem, 4vw, 2.6rem); line-height: 1.15; margin: 0 0 .5rem; letter-spacing: -.02em; } /* Pin banner — duidelijk zichtbaar dat een post gepind is */ .post-pin-banner { display: inline-flex; align-items: center; gap: .5rem; background: color-mix(in srgb, var(--accent) 14%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent); color: var(--accent); padding: .4rem .8rem; border-radius: 999px; font-size: .75rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; margin: 0 0 .85rem; line-height: 1; } .post-pin-banner-icon { font-size: 1rem; line-height: 1; } .post-pin-banner-sep { opacity: .5; } .post-pin-banner-pos { opacity: .85; } .post-date { color: var(--fg-muted, #888); font-size: .85rem; letter-spacing: .05em; text-transform: uppercase; margin: 0 0 1.5rem; } /* Post-images in content (resize + align) */ .post-image { margin: 1.5rem 0; } .post-image img { display: block; height: auto; border-radius: 6px; max-width: 100%; } .post-image figcaption { font-size: .85rem; color: var(--fg-muted, #888); margin-top: .5rem; font-style: italic; text-align: center; } .post-image--small img { max-width: 240px; } .post-image--medium img { max-width: 440px; } .post-image--large img { max-width: 720px; } .post-image--full img { width: 100%; max-width: 100%; } .post-image--left { text-align: left; } .post-image--left img { margin-left: 0; margin-right: auto; } .post-image--center { text-align: center; } .post-image--center img { margin-left: auto; margin-right: auto; } .post-image--right { text-align: right; } .post-image--right img { margin-left: auto; margin-right: 0; } /* Afbeeldingen in de post-tekst vullen ALTIJD de containerbreedte en houden hun natuurlijke (niet-bijgesneden) hoogte — geen vaste hoogte / geen crop. */ .post-content img { display: block; width: 100%; max-width: 100%; height: auto; border-radius: 6px; margin: 1.4em auto; } /* Video in de post-tekst (C2S-uploads uit Shaer): dezelfde maatvoering als afbeeldingen, plus een plafond. Zonder deze regel rendert een