/* ============================================================================ distress.css — editorial overlay on top of the Do Better Norge design system The base design system stays clean and institutional. This file layers the "Norway in distress" treatment: cracked-flag motif, half-mast tint, redaction marks, dossier stamps, manifesto type, evidence-trail-as-protest. Distress intensity is driven by --distress (0..1) set on . Surface mode is driven by .surface-dark on . ============================================================================ */ :root { /* Set by the Tweaks panel. */ --distress: 0.6; /* 0 = somber, 1 = defiant */ --paper: #f4ecd8; /* dossier paper tone (used on stamps) */ --paper-2: #e9dfc5; --stamp: #6e1421; /* deep red ink stamp */ --ink-stamp: #1b1b1b; /* black ink stamp / typewriter */ --bleed: var(--dbn-coral); /* red bleed accent */ /* Derived metrics */ --bleed-h: calc(2px + var(--distress) * 6px); --flag-fade: calc(0.35 + var(--distress) * 0.65); /* Mono / typewriter family for case-file marks */ --type-mono: "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } /* ─── Surface mode: dark ────────────────────────────────────────────────── */ html.surface-dark { --dbn-bg: #0c1018; --dbn-panel: #11161f; --dbn-panel-tinted: #161c27; --dbn-line: #2a313f; --dbn-ink: #ecf0f6; --dbn-ink-soft: #c4cad5; --dbn-muted: #8a93a3; --dbn-muted-2: #5b6271; --dbn-teal-soft: rgba(78, 124, 220, 0.18); --dbn-teal-soft-2: rgba(78, 124, 220, 0.28); --dbn-coral-soft: rgba(186, 12, 47, 0.20); --dbn-amber-soft: rgba(183, 121, 31, 0.14); --dbn-amber-edge: rgba(183, 121, 31, 0.38); --dbn-amber-ink: #e2b87a; --paper: #1a1f2a; --paper-2: #232938; } html.surface-dark .tool-tab { color: var(--dbn-ink); } html.surface-dark .tool-tab.is-active { background: rgba(78,124,220,0.22); border-color: rgba(78,124,220,0.45); } html.surface-dark .secondary-button { background: #1f2735; } html.surface-dark .answer p strong, html.surface-dark .source-title { color: var(--dbn-ink); } /* ─── Body — fine grain noise + paper tone (subtle, scaled by --distress) */ body.dossier { background-color: var(--dbn-bg); background-image: /* paper grain */ radial-gradient(circle at 23% 47%, rgba(0,0,0,calc(0.03 * var(--distress))) 0 1px, transparent 1px), radial-gradient(circle at 71% 19%, rgba(0,0,0,calc(0.025 * var(--distress))) 0 1px, transparent 1px), radial-gradient(circle at 8% 81%, rgba(0,0,0,calc(0.02 * var(--distress))) 0 1px, transparent 1px), radial-gradient(circle at 88% 71%, rgba(0,0,0,calc(0.03 * var(--distress))) 0 1px, transparent 1px); background-size: 7px 7px, 13px 13px, 11px 11px, 17px 17px; } html.surface-dark body.dossier { background-image: radial-gradient(circle at 23% 47%, rgba(255,255,255,calc(0.025 * var(--distress))) 0 1px, transparent 1px), radial-gradient(circle at 71% 19%, rgba(255,255,255,calc(0.02 * var(--distress))) 0 1px, transparent 1px); } /* ─── App shell: top bleed bar + side numbering ─────────────────────────── */ .app-shell { position: relative; } .app-shell::before { /* the bleed: red bar at top, mimicking the flag colour eroding */ content: ""; position: absolute; left: 0; right: 0; top: 0; height: var(--bleed-h); background: linear-gradient(90deg, var(--bleed) 0%, var(--bleed) 38%, #00205B 38%, #00205B 41%, #fff 41%, #fff 49%, #00205B 49%, #00205B 52%, var(--bleed) 52%, var(--bleed) 100%); opacity: calc(0.55 + var(--distress) * 0.45); } /* ─── Manifesto strip (between disclaimer and workspace) ────────────────── */ .manifesto { max-width: 1500px; margin: 0 auto 14px; display: grid; grid-template-columns: 1fr auto; gap: 18px; align-items: end; padding: calc(14px + var(--distress) * 18px) 22px calc(14px + var(--distress) * 14px) 26px; border: 1px solid var(--dbn-line); border-left: 6px solid var(--dbn-coral); border-radius: 8px; background: var(--dbn-panel); position: relative; overflow: hidden; } .manifesto::before { /* the half-mast flag — faded, desaturated, sliced */ content: ""; position: absolute; right: -40px; top: -10px; bottom: -10px; width: 320px; background: linear-gradient(180deg, transparent 0%, transparent 32%, var(--dbn-coral) 32%, var(--dbn-coral) 38%, #fff 38%, #fff 42%, #00205B 42%, #00205B 50%, #fff 50%, #fff 54%, var(--dbn-coral) 54%, var(--dbn-coral) 60%, transparent 60%); opacity: calc(0.10 + var(--distress) * 0.35); filter: grayscale(calc(0.6 - var(--distress) * 0.4)) saturate(calc(0.4 + var(--distress) * 0.6)); transform: skewX(-8deg); pointer-events: none; mask-image: linear-gradient(90deg, transparent 0%, #000 35%, #000 100%); -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 35%, #000 100%); } html.surface-dark .manifesto::before { opacity: calc(0.20 + var(--distress) * 0.40); } .manifesto-copy { position: relative; z-index: 2; max-width: 880px; } .manifesto-eyebrow { font-family: var(--type-mono); font-size: 0.74rem; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--dbn-coral); margin: 0 0 8px; display: flex; align-items: center; gap: 10px; } .manifesto-eyebrow::before { content: ""; display: inline-block; width: 28px; height: 2px; background: var(--dbn-coral); } .manifesto-title { margin: 0; font-weight: 900; letter-spacing: -0.025em; line-height: 1.02; color: var(--dbn-ink); font-size: clamp(1.7rem, calc(2rem + var(--distress) * 1.6rem), 3.4rem); text-wrap: balance; } .manifesto-sub { margin: 12px 0 0; color: var(--dbn-muted); font-size: 1rem; line-height: 1.5; max-width: 56ch; } .manifesto-stats { display: grid; grid-template-columns: repeat(2, minmax(110px, auto)); gap: 16px 28px; position: relative; z-index: 2; align-self: center; } .manifesto-stat { text-align: right; min-width: 110px; } .manifesto-stat-num { font-size: clamp(1.6rem, 2.2rem, 2.6rem); font-weight: 900; letter-spacing: -0.04em; color: var(--dbn-coral); font-variant-numeric: tabular-nums; line-height: 1; } .manifesto-stat-num.is-blue { color: var(--dbn-teal); } .manifesto-stat-label { font-family: var(--type-mono); font-size: 0.66rem; font-weight: 600; letter-spacing: 0.10em; text-transform: uppercase; color: var(--dbn-muted); margin-top: 4px; max-width: 22ch; margin-left: auto; } /* ─── Dossier stamp ─────────────────────────────────────────────────────── */ .stamp { display: inline-flex; align-items: center; gap: 7px; font-family: var(--type-mono); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; padding: 5px 9px 4px; color: var(--stamp); border: 1.5px solid var(--stamp); border-radius: 4px; background: transparent; transform: rotate(-1.5deg); opacity: calc(0.45 + var(--distress) * 0.55); } .stamp.is-ink { color: var(--ink-stamp); border-color: var(--ink-stamp); } html.surface-dark .stamp { color: #e8b6b9; border-color: rgba(232,182,185,0.55); } html.surface-dark .stamp.is-ink { color: #c9cfdb; border-color: rgba(201,207,219,0.45); } .stamp::before { content: ""; width: 8px; height: 8px; border-radius: 999px; border: 1.5px solid currentColor; } /* ─── Topbar overrides ──────────────────────────────────────────────────── */ .topbar { padding-top: calc(10px + var(--distress) * 4px); } .topbar .case-no { font-family: var(--type-mono); font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--dbn-muted); margin-top: 6px; display: inline-flex; align-items: center; gap: 10px; } .topbar .case-no .pulse { width: 8px; height: 8px; border-radius: 999px; background: var(--dbn-coral); box-shadow: 0 0 0 0 rgba(186,12,47,0.6); animation: caseno-pulse 1.6s ease-out infinite; } @keyframes caseno-pulse { 0%,100% { box-shadow: 0 0 0 0 rgba(186,12,47,0.55); } 60% { box-shadow: 0 0 0 9px rgba(186,12,47,0); } } /* ─── Tool rail: stat severity ──────────────────────────────────────────── */ .tool-rail { padding: 12px; gap: 6px; position: relative; } .tool-rail::before { content: "TOOLS · CASE WORK"; display: block; font-family: var(--type-mono); font-size: 0.6rem; letter-spacing: 0.16em; color: var(--dbn-muted); margin: 4px 6px 8px; } .tool-tab { position: relative; padding: 12px 12px 12px 14px; border-left: 2px solid transparent !important; transition: background .15s, border-color .15s, color .15s; } .tool-tab span { font-size: 0.95rem; } .tool-tab small { font-family: var(--type-mono); font-size: 0.66rem; letter-spacing: 0.06em; text-transform: uppercase; } .tool-tab .tag { position: absolute; top: 8px; right: 8px; font-family: var(--type-mono); font-size: 0.6rem; font-weight: 700; color: var(--dbn-coral); letter-spacing: 0.06em; } .tool-tab.is-active { border-left-color: var(--dbn-coral) !important; } .tool-tab.is-active::before { content: "▶"; position: absolute; left: -10px; top: 50%; transform: translateY(-50%); color: var(--dbn-coral); font-size: 8px; } /* ─── Tool panel header: tab title + dossier corner fold ────────────────── */ .tool-panel { position: relative; padding: 20px 22px 22px; } .tool-panel .corner-fold { position: absolute; top: 0; right: 0; width: calc(28px + var(--distress) * 22px); height: calc(28px + var(--distress) * 22px); background: linear-gradient(225deg, var(--paper) 50%, transparent 50%); border-bottom-left-radius: 6px; opacity: calc(0.35 + var(--distress) * 0.5); pointer-events: none; } .tool-panel .corner-fold::after { content: ""; position: absolute; right: 0; top: 0; width: 100%; height: 100%; background: linear-gradient(225deg, transparent 49%, rgba(0,0,0,0.08) 50%, transparent 51%); } html.surface-dark .tool-panel .corner-fold { opacity: calc(0.18 + var(--distress) * 0.32); } /* ─── Reasoning panel: case-file aesthetic ──────────────────────────────── */ .reasoning-panel { padding: 18px 18px 20px; position: relative; } .reasoning-panel .file-label { font-family: var(--type-mono); font-size: 0.62rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--dbn-muted); margin: 0 0 4px; } .reasoning-panel .case-meta { font-family: var(--type-mono); font-size: 0.74rem; color: var(--dbn-ink-soft); border-top: 1px dashed var(--dbn-line); margin-top: 18px; padding-top: 14px; display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; } .reasoning-panel .case-meta span:nth-child(odd) { color: var(--dbn-muted); } /* ─── Citation chip — richer evidence treatment ─────────────────────────── */ .cite-chip { background: transparent !important; border: 1px solid var(--dbn-coral) !important; color: var(--dbn-coral) !important; } .cite-chip:hover { background: var(--dbn-coral) !important; color: #fff !important; } /* ─── Redaction motif ───────────────────────────────────────────────────── */ .redact { background: #0a0c11; color: transparent !important; border-radius: 1px; padding: 1px 4px; margin: 0 1px; text-shadow: none !important; letter-spacing: 0.02em; user-select: none; cursor: help; position: relative; display: inline-block; vertical-align: baseline; transition: background .2s; } .redact::after { /* faint typewriter strike-through */ content: ""; position: absolute; left: 2px; right: 2px; top: 50%; height: 0.6px; background: rgba(255,255,255,0.06); } .redact:hover { background: #6e1421; } /* ─── Headline / numbers ────────────────────────────────────────────────── */ .bignum { font-weight: 900; font-variant-numeric: tabular-nums; letter-spacing: -0.03em; line-height: 1; color: var(--dbn-coral); } /* ─── Article 8 chip (used across tools) ────────────────────────────────── */ .art-chip { display: inline-flex; align-items: center; gap: 6px; background: var(--dbn-coral-soft); color: var(--dbn-coral); border: 1px solid var(--dbn-coral); border-radius: 999px; padding: 3px 10px; font-family: var(--type-mono); font-size: 0.7rem; font-weight: 700; letter-spacing: 0.04em; } .art-chip.is-blue { background: var(--dbn-teal-soft); color: var(--dbn-teal); border-color: var(--dbn-teal); } .art-chip.is-amber { background: var(--dbn-amber-soft); color: var(--dbn-amber-ink); border-color: var(--dbn-amber-edge); } /* ─── Bench/Bar — visit-rights chart ────────────────────────────────────── */ .bench-row { display: grid; grid-template-columns: 130px 1fr 50px; gap: 10px; align-items: center; padding: 6px 0; } .bench-row + .bench-row { border-top: 1px dashed var(--dbn-line); } .bench-row.is-no { color: var(--dbn-coral); font-weight: 800; } .bench-name { font-family: var(--type-mono); font-size: 0.78rem; letter-spacing: 0.04em; text-transform: uppercase; } .bench-bar { position: relative; height: 18px; background: var(--dbn-panel-tinted); border: 1px solid var(--dbn-line); border-radius: 2px; } .bench-fill { position: absolute; left: 0; top: 0; bottom: 0; background: var(--dbn-teal); width: var(--w, 20%); } .bench-row.is-no .bench-fill { background: var(--dbn-coral); } .bench-num { text-align: right; font-family: var(--type-mono); font-weight: 800; font-size: 0.95rem; font-variant-numeric: tabular-nums; } /* ─── Advocate side-picker ──────────────────────────────────────────────── */ .side-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; } .side-tile { border: 1px solid var(--dbn-line); background: var(--dbn-panel-tinted); border-radius: 8px; padding: 12px; text-align: left; cursor: pointer; transition: all .15s; } .side-tile:hover { border-color: var(--dbn-coral); } .side-tile.is-on { border-color: var(--dbn-coral); background: var(--dbn-coral-soft); box-shadow: inset 0 0 0 1px var(--dbn-coral); } .side-tile-glyph { font-family: var(--type-mono); font-size: 0.66rem; color: var(--dbn-muted); letter-spacing: 0.1em; } .side-tile-name { font-weight: 800; margin: 4px 0 2px; font-size: 1rem; } .side-tile-desc { font-size: 0.78rem; color: var(--dbn-muted); line-height: 1.4; } /* ─── Timeline strip ─────────────────────────────────────────────────────── */ .tl { list-style: none; padding: 0; margin: 0; position: relative; } .tl::before { content: ""; position: absolute; left: 9px; top: 6px; bottom: 6px; width: 1px; background: var(--dbn-line); } .tl li { position: relative; padding: 8px 0 14px 28px; } .tl-dot { position: absolute; left: 4px; top: 12px; width: 12px; height: 12px; border-radius: 999px; background: var(--dbn-panel); border: 2px solid var(--dbn-coral); } .tl li.is-bad .tl-dot { background: var(--dbn-coral); } .tl-time { font-family: var(--type-mono); font-size: 0.7rem; letter-spacing: 0.04em; color: var(--dbn-muted); } .tl-event { font-weight: 700; color: var(--dbn-ink); margin: 2px 0; } .tl-detail { color: var(--dbn-muted); font-size: 0.88rem; line-height: 1.45; } /* ─── Cases table ───────────────────────────────────────────────────────── */ .cases-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; } .cases-table th { text-align: left; padding: 8px 10px 8px 0; font-family: var(--type-mono); font-size: 0.66rem; letter-spacing: 0.10em; text-transform: uppercase; color: var(--dbn-muted); border-bottom: 1px solid var(--dbn-line); } .cases-table td { padding: 10px 10px 10px 0; border-bottom: 1px dashed var(--dbn-line); vertical-align: top; } .cases-table tr:hover td { background: var(--dbn-panel-tinted); } .cases-table .c-no { font-family: var(--type-mono); font-weight: 800; color: var(--dbn-coral); width: 36px; } .cases-table .c-name { font-weight: 800; color: var(--dbn-ink); } .cases-table .c-year { color: var(--dbn-muted); font-variant-numeric: tabular-nums; width: 50px; } .cases-table .c-art { display: inline-block; font-family: var(--type-mono); font-size: 0.7rem; font-weight: 800; padding: 2px 7px; border-radius: 3px; background: var(--dbn-coral-soft); color: var(--dbn-coral); } /* ─── Voice card (Elena K. style quote) ─────────────────────────────────── */ .voice { border-left: 4px solid var(--dbn-coral); padding: 12px 0 12px 16px; margin: 0; } .voice q { display: block; font-size: clamp(0.98rem, calc(0.92rem + var(--distress) * 0.4rem), 1.32rem); font-weight: 600; line-height: 1.45; color: var(--dbn-ink); letter-spacing: -0.005em; quotes: "“" "”" "‘" "’"; text-wrap: pretty; } .voice q::before { content: open-quote; color: var(--dbn-coral); font-weight: 900; } .voice q::after { content: close-quote; color: var(--dbn-coral); font-weight: 900; } .voice-by { margin-top: 8px; font-size: 0.78rem; color: var(--dbn-muted); display: flex; gap: 10px; align-items: center; } .voice-initials { width: 28px; height: 28px; border-radius: 999px; background: var(--dbn-coral-soft); color: var(--dbn-coral); display: inline-flex; align-items: center; justify-content: center; font-family: var(--type-mono); font-weight: 800; font-size: 0.7rem; border: 1px solid var(--dbn-coral); } /* ─── Source card extra polish ───────────────────────────────────────────── */ .source-card { background: var(--dbn-panel); } .source-card.is-highlight { background: var(--dbn-coral-soft); } /* ─── Section heading (mini, inside tool panels) ─────────────────────────── */ .h-section { font-family: var(--type-mono); font-size: 0.7rem; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--dbn-muted); margin: 18px 0 10px; display: flex; align-items: center; gap: 10px; } .h-section::after { content: ""; flex: 1; height: 1px; background: var(--dbn-line); } /* ─── Hairline divider with mono caption ────────────────────────────────── */ .hairline { border: 0; border-top: 1px solid var(--dbn-line); margin: 18px 0; } /* ─── Tweaks panel — pin to bottom-right ─────────────────────────────────── */ .tweaks-panel-host { z-index: 1000; } /* ─── Animations: cracked-flag pulse (used in topbar mark) ──────────────── */ @keyframes flag-half-mast { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(2px); } } /* ─── Footer strip ───────────────────────────────────────────────────────── */ .foot-strip { max-width: 1500px; margin: 24px auto 12px; padding: 12px 4px; display: flex; justify-content: space-between; gap: 16px; border-top: 1px dashed var(--dbn-line); font-family: var(--type-mono); font-size: 0.7rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--dbn-muted); } /* ─── Source modal-lite (inline detail panel) ───────────────────────────── */ .source-detail { margin-top: 10px; padding: 14px 16px; border: 1px solid var(--dbn-coral); background: var(--dbn-coral-soft); border-radius: 8px; position: relative; } .source-detail .close { position: absolute; top: 6px; right: 8px; background: transparent; border: 0; color: var(--dbn-coral); cursor: pointer; font-family: var(--type-mono); font-size: 0.9rem; } .source-detail .head { font-family: var(--type-mono); font-size: 0.7rem; letter-spacing: 0.1em; color: var(--dbn-coral); text-transform: uppercase; } .source-detail blockquote { margin: 8px 0 0; font-size: 0.95rem; line-height: 1.55; color: var(--dbn-ink); border-left: 2px solid var(--dbn-coral); padding-left: 12px; } /* ─── Search input row used in Search & Ask ─────────────────────────────── */ .search-row { display: grid; grid-template-columns: 1fr auto; gap: 10px; } .search-input { width: 100%; border: 1px solid var(--dbn-line); border-radius: 8px; padding: 12px 14px; background: var(--dbn-panel); color: var(--dbn-ink); font-size: 0.98rem; } .search-input:focus-visible { outline: 3px solid var(--dbn-teal-ring); outline-offset: 2px; } /* ─── Pre-set filter pills ──────────────────────────────────────────────── */ .pill-row { display: flex; gap: 6px; flex-wrap: wrap; margin: 8px 0 4px; } .pill-row .pill { border: 1px solid var(--dbn-line); background: var(--dbn-panel); color: var(--dbn-muted); border-radius: 999px; padding: 5px 11px; font-size: 0.78rem; font-weight: 600; cursor: pointer; transition: all .12s; } .pill-row .pill:hover { border-color: var(--dbn-teal); color: var(--dbn-teal); } .pill-row .pill.is-on { background: var(--dbn-teal); color: #fff; border-color: var(--dbn-teal); } /* ─── Redaction tool — case-file paper ──────────────────────────────────── */ .redact-paper { background: var(--paper); color: #1a1a1a; border: 1px solid var(--paper-2); border-radius: 4px; padding: 22px 26px; font-family: "Times New Roman", Georgia, serif; font-size: 0.96rem; line-height: 1.7; position: relative; box-shadow: 0 1px 0 var(--paper-2); } .redact-paper::after { content: "CONFIDENTIAL"; position: absolute; top: 14px; right: 18px; font-family: var(--type-mono); font-size: 0.7rem; letter-spacing: 0.16em; color: rgba(110,20,33,0.7); border: 1.5px solid rgba(110,20,33,0.7); padding: 4px 8px; border-radius: 3px; transform: rotate(2deg); } html.surface-dark .redact-paper { color: #d8d0b6; } /* ─── Misc utility ──────────────────────────────────────────────────────── */ .mono { font-family: var(--type-mono); } .muted { color: var(--dbn-muted); } .danger-ink { color: var(--dbn-coral); } .tinted-card { background: var(--dbn-panel-tinted); border: 1px solid var(--dbn-line); border-radius: 8px; padding: 14px 16px; } /* ─── Hide manifesto half-mast on narrow screens ────────────────────────── */ @media (max-width: 860px) { .manifesto { grid-template-columns: 1fr; } .manifesto-stats { justify-content: flex-start; } .manifesto::before { display: none; } .manifesto-stat, .manifesto-stat-label { text-align: left; margin-left: 0; } }