Python 51.6%
TypeScript 46.7%
CSS 1.7%
1@import "tailwindcss";23@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));45/* ==================================================================== tokens6 QC26 « Editorial Data Intelligence » — papier chaud, encre, un seul accent (sarcelle,7 jamais une couleur de parti). Les couleurs de partis vivent ici en variables, adaptées au8 thème sombre (le marine du PQ et le violet du PCQ sont éclaircis pour rester lisibles). */9:root {10 --background: #f6f5f1;11 --surface: #ffffff;12 --surface-2: #f0eee8;13 --surface-3: #e6e3db;14 --surface-4: #d9d5cb;15 --border: rgba(20, 22, 28, 0.1);16 --border-strong: rgba(20, 22, 28, 0.22);17 --text: #15171c;18 --text-2: #5c6270;19 --text-3: #8b909b;20 --text-inverse: #f6f5f1;21 --qc26: #15171c;22 --qc26-accent: #0f766e;23 --qc26-accent-strong: #0b5d57;24 --qc26-accent-soft: rgba(15, 118, 110, 0.1);25 --qc26-accent-ink: #ffffff;26 --live: #d12f2f;27 --live-soft: rgba(209, 47, 47, 0.1);28 --ok: #1f7a3a;29 --ok-soft: rgba(31, 122, 58, 0.1);30 --warn: #b45309;31 --warn-soft: rgba(180, 83, 9, 0.12);32 --grid: rgba(20, 22, 28, 0.07);33 --p-caq: #20a8e0;34 --p-plq: #ed1b2d;35 --p-pq: #1e295c;36 --p-qs: #ff5505;37 --p-pcq: #6e4c9f;38 --p-aut: #9aa0a6;39 --p-none: #c9c5bb;40 --radius: 12px;41 --radius-lg: 18px;42 --radius-sm: 8px;43 --shadow-sm: 0 1px 2px rgba(21, 23, 28, 0.05), 0 1px 1px rgba(21, 23, 28, 0.03);44 --shadow-md: 0 10px 30px -18px rgba(21, 23, 28, 0.35), 0 2px 8px -4px rgba(21, 23, 28, 0.08);45 --shadow-lg: 0 30px 60px -30px rgba(21, 23, 28, 0.4);46 --font-sans: var(--font-inter), ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;47 --font-display: var(--font-fraunces), "Iowan Old Style", "Palatino Linotype", Georgia, serif;48 --font-mono: var(--font-jetbrains), ui-monospace, "SF Mono", Menlo, Consolas, monospace;49 --header-h: 60px;50 --bottom-nav-h: 62px;51 --header-bg: rgba(246, 245, 241, 0.82);52 --nav-bg: rgba(255, 255, 255, 0.9);53 --hero-glow: radial-gradient(1200px 500px at 15% -10%, rgba(15, 118, 110, 0.14), transparent 60%), radial-gradient(900px 400px at 95% 0%, rgba(21, 23, 28, 0.06), transparent 60%);54 color-scheme: light;55}56:root[data-theme="dark"] {57 --background: #0e1013;58 --surface: #15181d;59 --surface-2: #1c2027;60 --surface-3: #252a33;61 --surface-4: #313743;62 --border: rgba(255, 255, 255, 0.09);63 --border-strong: rgba(255, 255, 255, 0.2);64 --text: #edeff3;65 --text-2: #a5abb8;66 --text-3: #737a88;67 --text-inverse: #0e1013;68 --qc26: #edeff3;69 --qc26-accent: #2fb8aa;70 --qc26-accent-strong: #5fd3c7;71 --qc26-accent-soft: rgba(47, 184, 170, 0.14);72 --qc26-accent-ink: #0e1013;73 --live: #f0554f;74 --live-soft: rgba(240, 85, 79, 0.14);75 --ok: #3fbf6b;76 --ok-soft: rgba(63, 191, 107, 0.14);77 --warn: #e0a23a;78 --warn-soft: rgba(224, 162, 58, 0.14);79 --grid: rgba(255, 255, 255, 0.07);80 --p-caq: #3db8ea;81 --p-plq: #f24c5a;82 --p-pq: #7385dc;83 --p-qs: #ff7a3d;84 --p-pcq: #ab8ee3;85 --p-aut: #8b919c;86 --p-none: #3a404b;87 --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);88 --shadow-md: 0 12px 30px -18px rgba(0, 0, 0, 0.8), 0 2px 8px -4px rgba(0, 0, 0, 0.5);89 --shadow-lg: 0 30px 60px -30px rgba(0, 0, 0, 0.9);90 --header-bg: rgba(14, 16, 19, 0.78);91 --nav-bg: rgba(21, 24, 29, 0.92);92 --hero-glow: radial-gradient(1200px 500px at 15% -10%, rgba(47, 184, 170, 0.16), transparent 60%), radial-gradient(900px 400px at 95% 0%, rgba(115, 133, 220, 0.1), transparent 60%);93 color-scheme: dark;94}9596@theme inline {97 --color-background: var(--background);98 --color-surface: var(--surface);99 --color-surface-2: var(--surface-2);100 --color-surface-3: var(--surface-3);101 --color-surface-4: var(--surface-4);102 --color-border: var(--border);103 --color-border-strong: var(--border-strong);104 --color-ink: var(--text);105 --color-ink-2: var(--text-2);106 --color-ink-3: var(--text-3);107 --color-ink-inverse: var(--text-inverse);108 --color-brand: var(--qc26);109 --color-accent: var(--qc26-accent);110 --color-accent-strong: var(--qc26-accent-strong);111 --color-accent-soft: var(--qc26-accent-soft);112 --color-accent-ink: var(--qc26-accent-ink);113 --color-live: var(--live);114 --color-live-soft: var(--live-soft);115 --color-ok: var(--ok);116 --color-ok-soft: var(--ok-soft);117 --color-warn: var(--warn);118 --color-warn-soft: var(--warn-soft);119 --font-sans: var(--font-sans);120 --font-display: var(--font-display);121 --font-mono: var(--font-mono);122 --radius-card: var(--radius);123 --radius-card-lg: var(--radius-lg);124}125126/* ====================================================================== base */127html {128 -webkit-text-size-adjust: 100%;129 scroll-behavior: smooth;130}131@media (prefers-reduced-motion: reduce) {132 html { scroll-behavior: auto; }133 *, *::before, *::after { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }134}135body {136 background: var(--background);137 color: var(--text);138 font-family: var(--font-sans);139 font-feature-settings: "cv11", "ss01", "ss03";140 -webkit-font-smoothing: antialiased;141 text-rendering: optimizeLegibility;142 min-height: 100dvh;143 transition: background-color 0.25s ease, color 0.25s ease;144}145@layer base {146 a { color: inherit; text-decoration: none; }147 a:hover { text-decoration: none; }148 ::selection { background: var(--qc26-accent-soft); }149 :focus-visible { outline: 2px solid var(--qc26-accent); outline-offset: 2px; border-radius: 4px; }150}151152/* ================================================================ typography */153.display { font-family: var(--font-display); font-weight: 600; letter-spacing: -0.02em; line-height: 0.98; font-variation-settings: "opsz" 144, "SOFT" 30; }154.display-tight { letter-spacing: -0.035em; }155.figure { font-family: var(--font-display); font-weight: 500; letter-spacing: -0.03em; line-height: 0.9; font-variant-numeric: tabular-nums lining-nums; font-variation-settings: "opsz" 144, "SOFT" 0; }156.serif { font-family: var(--font-display); }157.num { font-variant-numeric: tabular-nums lining-nums; letter-spacing: -0.01em; }158.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; letter-spacing: -0.01em; }159.eyebrow { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 600; color: var(--text-2); }160.eyebrow-accent { color: var(--qc26-accent); }161.lede { font-size: 16px; line-height: 1.6; color: var(--text-2); }162.prose-qc26 p { line-height: 1.7; }163.prose-qc26 b { color: var(--text); }164165/* ================================================================ surfaces */166.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow-sm); }167.card-lg { border-radius: var(--radius-lg); }168.card-flat { box-shadow: none; }169.card-hover { transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease; }170.card-hover:hover { box-shadow: var(--shadow-md); border-color: var(--border-strong); transform: translateY(-1px); }171.hairline { border-color: var(--border); }172.surface-2 { background: var(--surface-2); }173.surface-3 { background: var(--surface-3); }174.inset { background: var(--surface-2); border-radius: var(--radius-sm); }175.ink-panel { background: var(--qc26); color: var(--text-inverse); }176.hero-glow { background-image: var(--hero-glow); }177.glass { background: var(--header-bg); backdrop-filter: saturate(160%) blur(14px); -webkit-backdrop-filter: saturate(160%) blur(14px); }178.divider { height: 1px; background: var(--border); }179.rule-top { border-top: 2px solid var(--text); }180.section-num { font-family: var(--font-mono); font-size: 11px; color: var(--text-3); letter-spacing: 0.08em; }181182/* ================================================================ buttons */183.btn { display: inline-flex; align-items: center; gap: 8px; border-radius: 10px; padding: 10px 16px; font-size: 14px; font-weight: 600; border: 1px solid transparent; transition: background-color 0.15s, color 0.15s, border-color 0.15s, transform 0.1s; white-space: nowrap; }184.btn:active { transform: translateY(1px); }185.btn-primary { background: var(--text); color: var(--text-inverse); }186.btn-primary:hover { background: var(--qc26-accent-strong); color: #fff; }187.btn-accent { background: var(--qc26-accent); color: var(--qc26-accent-ink); }188.btn-accent:hover { background: var(--qc26-accent-strong); }189.btn-ghost { background: var(--surface); border-color: var(--border-strong); color: var(--text); }190.btn-ghost:hover { background: var(--surface-2); }191.btn-sm { padding: 6px 11px; font-size: 12.5px; border-radius: 8px; }192.link { color: var(--qc26-accent); font-weight: 500; }193.link:hover { text-decoration: underline; text-underline-offset: 3px; }194.chip { display: inline-flex; align-items: center; gap: 6px; border-radius: 999px; padding: 6px 12px; font-size: 13px; font-weight: 500; border: 1px solid var(--border); background: var(--surface); transition: background-color 0.15s, border-color 0.15s, color 0.15s; }195.chip:hover { background: var(--surface-2); }196.chip-active { background: var(--text); color: var(--text-inverse); border-color: var(--text); }197.chip-active:hover { background: var(--text); }198199/* ================================================================ tables */200.data-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13.5px; }201.data-table th { text-align: left; font-family: var(--font-mono); font-weight: 600; color: var(--text-2); font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase; padding: 10px 12px; border-bottom: 1px solid var(--border); white-space: nowrap; position: sticky; top: 0; background: var(--surface); z-index: 1; }202.data-table td { padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; }203.data-table tr:last-child td { border-bottom: 0; }204.data-table tbody tr:hover { background: var(--surface-2); }205.data-table .r { text-align: right; }206select, input[type="text"], input[type="search"] { color: var(--text); background: var(--surface); }207input[type="range"] { accent-color: var(--qc26-accent); }208input[type="checkbox"] { accent-color: var(--qc26-accent); }209210/* ================================================================ utilities */211.scrollbar-none { scrollbar-width: none; }212.scrollbar-none::-webkit-scrollbar { display: none; }213.safe-bottom { padding-bottom: max(env(safe-area-inset-bottom), 0px); }214.tabular { font-variant-numeric: tabular-nums; }215.pcolor { color: var(--pc); }216.pbg { background: var(--pc); }217218@keyframes pulse-dot { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }219.live-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--live); display: inline-block; animation: pulse-dot 1.6s ease-in-out infinite; }220@keyframes fade-up { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }221.fade-up { animation: fade-up 0.45s cubic-bezier(0.2, 0.7, 0.2, 1) both; }222.fade-up-2 { animation-delay: 0.08s; }223.fade-up-3 { animation-delay: 0.16s; }224@keyframes ticker-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }225.ticker-in { animation: ticker-in 0.3s ease-out both; }226@keyframes grow-x { from { transform: scaleX(0); } to { transform: scaleX(1); } }227.grow-x { transform-origin: left; animation: grow-x 0.7s cubic-bezier(0.2, 0.7, 0.2, 1) both; }228229/* mobile : rails horizontaux à défilement magnétique */230.rail { display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; padding-bottom: 6px; margin-inline: -16px; padding-inline: 16px; scrollbar-width: none; }231.rail::-webkit-scrollbar { display: none; }232.rail > * { scroll-snap-align: start; flex: 0 0 78%; max-width: 320px; }233@media (min-width: 640px) { .rail { display: grid; overflow: visible; margin-inline: 0; padding-inline: 0; } .rail > * { flex: initial; max-width: none; } }234/* mobile : rangée de sondage compacte */235.poll-row { display: grid; grid-template-columns: 1fr auto; gap: 4px 12px; padding: 10px 14px; border-bottom: 1px solid var(--border); }236.poll-row:last-child { border-bottom: 0; }237.poll-vals { display: grid; grid-template-columns: repeat(5, 1fr); gap: 4px; grid-column: 1 / -1; margin-top: 4px; }238.poll-vals > div { text-align: center; border-radius: 6px; padding: 4px 0 3px; background: var(--surface-2); }239.poll-vals .lbl { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.06em; text-transform: uppercase; }240.poll-vals .val { font-family: var(--font-mono); font-size: 14px; font-weight: 600; line-height: 1.1; }241@media (max-width: 767px) {242 .data-table { font-size: 13px; }243 .data-table th, .data-table td { padding: 8px 10px; }244 .figure-hero { font-size: 92px !important; }245 .card { border-radius: 12px; }246 .section-gap > * + * { margin-top: 44px; }247}248249/* charts */250.chart-grid line { stroke: var(--grid); }251.chart-tip { position: absolute; pointer-events: none; z-index: 20; background: var(--surface); border: 1px solid var(--border-strong); border-radius: 10px; box-shadow: var(--shadow-md); padding: 8px 10px; font-size: 12px; line-height: 1.35; min-width: 150px; }252253/* waffle */254.waffle-dot { transition: fill 0.3s ease, opacity 0.3s ease; }255256/* print */257@media print { header, nav, footer, .no-print { display: none !important; } body { background: #fff; } }258