+
-
+ Mark talks as favorites by opening their details and tapping the ❤️ icon. Your selections are saved locally and will only be visible on this device.
+
+
+
diff --git a/src/styles/ep2026-theme.css b/src/styles/ep2026-theme.css
new file mode 100644
index 000000000..bd5bef058
--- /dev/null
+++ b/src/styles/ep2026-theme.css
@@ -0,0 +1,474 @@
+/* ============================================================
+ EP2026 Design Theme
+ Ported from website-ep2026-new design system
+ ============================================================ */
+
+/* RESET & BASE */
+/* ============ */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+:root {
+ /* Core brand */
+ /* ========== */
+ --ep-bg: #080002;
+ --ep-red: #d4003a;
+ --ep-red-on-dark: #ff1a4a;
+ --ep-indigo: #4a0018;
+ --ep-magenta: #800020;
+ --ep-accent: #f0c040;
+ --ep-white: #ffffff;
+ --ep-cream: #fff5f0;
+ --ep-dark2: #0e0004;
+ --ep-dark3: #0a0003;
+
+ /* RGB channel triples (for composable rgba) */
+ /* ========================================= */
+ --ep-accent-rgb: 240, 192, 64;
+ --ep-info: #5ab0e0;
+ --ep-info-rgb: 90, 176, 224;
+ --ep-w: 255, 255, 255;
+
+ /* White text levels */
+ /* ================= */
+ --ep-text-primary: rgba(255, 255, 255, 0.93);
+ --ep-text-secondary: rgba(255, 255, 255, 0.78);
+ --ep-text-muted: rgba(255, 255, 255, 0.7);
+ --ep-text-faint: rgba(255, 255, 255, 0.6);
+
+ /* White decorative (borders, surfaces) */
+ /* ==================================== */
+ --ep-border: rgba(255, 255, 255, 0.1);
+ --ep-border-strong: rgba(255, 255, 255, 0.15);
+ --ep-border-bright: rgba(255, 255, 255, 0.25);
+ --ep-surface-faint: rgba(255, 255, 255, 0.03);
+ --ep-surface-subtle: rgba(255, 255, 255, 0.05);
+ --ep-surface-medium: rgba(255, 255, 255, 0.08);
+
+ /* Black shadows */
+ /* ============= */
+ --ep-black-75: rgba(0, 0, 0, 0.75);
+ --ep-black-70: rgba(0, 0, 0, 0.7);
+ --ep-black-50: rgba(0, 0, 0, 0.5);
+ --ep-black-40: rgba(0, 0, 0, 0.4);
+ --ep-black-30: rgba(0, 0, 0, 0.3);
+ --ep-black-15: rgba(0, 0, 0, 0.15);
+
+ /* CTA red gradient */
+ /* ================ */
+ --ep-cta-red: #d62020;
+ --ep-cta-red-dark: #8a0020;
+ --ep-cta-mid: #a8002d;
+ --ep-cta-end: #700020;
+
+ /* CTA text on colored buttons */
+ /* =========================== */
+ --ep-cta-text: #0d1a2a;
+ --ep-cta-text-warm: #f0ede8;
+
+ /* Grays */
+ /* ===== */
+ --ep-gray-ee: #eeeeee;
+ --ep-gray-88: #888888;
+ --ep-gray-37: #374151;
+ --ep-gray-22: #222222;
+
+ /* Red / green accents */
+ /* =================== */
+ --ep-red-f0: #f04040;
+ --ep-red-cc: #cc3030;
+ --ep-green-2e: #2ecc71;
+ --ep-green-25: #25a85d;
+ --ep-green-light: #6fd66f;
+ --ep-red-light: #e07070;
+ --ep-green-1a: #1a5c2a;
+
+ /* Schedule room bg */
+ /* ================ */
+ --ep-sched-room-bg: #1e3456;
+
+ /* Section backgrounds */
+ /* =================== */
+ --ep-bg-section: #080f1a;
+ --ep-bg-section-alt: #070b14;
+ --ep-bg-dark: #0a0a1a;
+ --ep-bg-card: #3d1a2a;
+
+ /* Footer gradient */
+ /* =============== */
+ --ep-footer-g1: #0c1628;
+ --ep-footer-g2: #142744;
+ --ep-footer-g3: #1a1a3a;
+ --ep-footer-g4: #0f1a2e;
+
+ /* Overlay */
+ /* ======= */
+ --ep-overlay-dark: rgba(10, 10, 20, 0.95);
+
+ /* Links */
+ /* ===== */
+ --ep-link-color: var(--ep-accent);
+ --ep-link-hover: var(--ep-white);
+}
+
+/* Dark theme base styles */
+/* ====================== */
+body.ep2026-theme {
+ background: var(--ep-bg);
+ color: var(--ep-white);
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-size: 18px;
+ line-height: 1.6;
+ overflow-x: hidden;
+}
+
+.ep2026-theme h1,
+.ep2026-theme h2,
+.ep2026-theme h3 {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+}
+
+.ep2026-theme a {
+ color: var(--ep-link-color);
+ text-decoration: underline;
+}
+
+.ep2026-theme a:hover {
+ color: var(--ep-link-hover);
+}
+
+/* ============================================================
+ SCHEDULE DARK THEME
+ ============================================================ */
+
+/* Schedule section wrapper */
+.ep-sched-section {
+ background:
+ radial-gradient(circle, var(--ep-surface-medium) 1px, transparent 1px),
+ linear-gradient(
+ 135deg,
+ var(--ep-footer-g1) 0%,
+ var(--ep-footer-g2) 40%,
+ var(--ep-footer-g3) 70%,
+ var(--ep-footer-g4) 100%
+ );
+ background-size:
+ 24px 24px,
+ 100% 100%;
+ color: var(--ep-white);
+}
+
+.ep-sched-inner {
+ max-width: 1400px;
+ margin: 0 auto;
+ padding: 2rem 1.5rem;
+}
+
+/* Day title */
+.ep-sched-day-title {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-weight: 500;
+ font-size: clamp(
+ 1.75rem,
+ 1.75rem + (100vw - 20rem) * (2.25 - 1.75) / (45 - 20),
+ 2.25rem
+ );
+ line-height: 1.25;
+ color: var(--ep-white);
+ margin-bottom: 1.5rem;
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+
+/* Room headers row */
+.ep-sched-room-headers {
+ display: grid;
+ gap: 4px;
+ margin-bottom: 4px;
+}
+
+.ep-sched-room-header {
+ background: var(--ep-sched-room-bg);
+ color: var(--ep-text-primary);
+ font-size: 0.85rem;
+ font-weight: 700;
+ text-align: center;
+ padding: 0.5rem 0.3rem;
+ border-radius: 4px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/* Schedule grid container */
+.ep-sched-grid {
+ display: grid;
+ gap: 4px;
+}
+
+/* Time slots */
+.ep-sched-time {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-size: 0.85rem;
+ font-weight: 700;
+ color: var(--ep-accent);
+ padding: 0.4rem 0.4rem 0.4rem 0;
+ text-align: right;
+ align-self: start;
+}
+
+.ep-sched-time h2 {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-size: 0.85rem;
+ font-weight: 700;
+ color: var(--ep-accent);
+ margin: 0;
+}
+
+/* Session cards */
+.ep-session {
+ background: var(--ep-surface-subtle);
+ border: 1px solid var(--ep-border);
+ border-radius: 6px;
+ padding: 0.5rem 0.6rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.15rem;
+ transition:
+ border-color 0.2s,
+ background 0.2s;
+ color: var(--ep-white);
+ font-family: "Inter Tight", system-ui, sans-serif;
+ position: relative;
+ overflow: hidden;
+}
+
+.ep-session:hover {
+ border-color: var(--ep-accent);
+ background: #0f1a2e !important;
+ z-index: 10;
+ transition:
+ border-color 0.1s ease-in-out,
+ background 0.1s ease-in-out;
+}
+
+.ep-session h2 {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-size: 0.82rem;
+ font-weight: 600;
+ line-height: 1.3;
+ color: var(--ep-white);
+ margin: 0;
+ padding: 0;
+}
+
+.ep-session header {
+ padding: 0;
+ margin-bottom: 0.1rem;
+}
+
+.ep-session .room-info {
+ font-size: 0.72rem;
+ color: var(--ep-text-muted);
+ font-weight: 500;
+ text-align: left;
+}
+
+.ep-session footer {
+ font-size: 0.75rem;
+ color: var(--ep-text-secondary);
+ margin-top: 0.2rem;
+ padding: 0;
+}
+
+.ep-session .read-more {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+}
+
+.ep-session .read-more:focus {
+ outline: 2px solid var(--ep-accent);
+ outline-offset: 2px;
+ border-radius: 6px;
+}
+
+/* Session levels */
+.ep-session.beginner {
+ background:
+ repeating-linear-gradient(
+ -45deg,
+ transparent,
+ transparent 4px,
+ rgba(50, 180, 50, 0.2) 4px,
+ rgba(50, 180, 50, 0.2) 6px
+ ),
+ var(--ep-surface-subtle);
+}
+
+.ep-session.advanced {
+ background:
+ repeating-linear-gradient(
+ -45deg,
+ transparent,
+ transparent 4px,
+ rgba(200, 50, 50, 0.2) 4px,
+ rgba(200, 50, 50, 0.2) 6px
+ ),
+ var(--ep-surface-subtle);
+}
+
+/* Breaks */
+.ep-break {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ background: rgba(255, 150, 0, 0.06);
+ border: 2px solid rgba(255, 150, 0, 0.18);
+ border-radius: 6px;
+ padding: 0.4rem 0.8rem;
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-size: 0.85rem;
+ color: var(--ep-text-secondary);
+ font-weight: 500;
+}
+
+.ep-break.room-change {
+ background: var(--ep-surface-subtle);
+ border: 1px dashed var(--ep-border);
+ color: var(--ep-text-muted);
+ font-weight: 400;
+ font-size: 0.75rem;
+}
+
+.ep-break.day-end {
+ background: #2d3548;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: 4px;
+ color: rgba(255, 255, 255, 0.55);
+ font-size: 0.9rem;
+ margin: 0.5rem 0;
+ padding: 0.5rem 1rem;
+ text-align: center;
+}
+
+/* Posters section */
+.ep-posters {
+ text-align: center;
+ border: 2px solid var(--ep-accent);
+ border-radius: 6px;
+ background: rgba(var(--ep-accent-rgb), 0.04);
+}
+
+.ep-posters h2 {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-weight: 700;
+ font-size: 0.8rem;
+ color: var(--ep-accent);
+ padding: 0.4rem 0.5rem;
+ margin: 0;
+}
+
+/* Header sticky bar */
+.ep-sched-header {
+ position: sticky;
+ top: 0;
+ background: var(--ep-bg);
+ z-index: 20;
+}
+
+.ep-sched-header > div > div {
+ padding: 8px;
+ font-weight: 700;
+ font-size: 0.85rem;
+ color: var(--ep-white);
+ font-family: "Inter Tight", system-ui, sans-serif;
+}
+
+/* Scrollbar styling for dark theme */
+.ep2026-theme ::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+}
+
+.ep2026-theme ::-webkit-scrollbar-track {
+ background: var(--ep-dark2);
+}
+
+.ep2026-theme ::-webkit-scrollbar-thumb {
+ background: var(--ep-surface-medium);
+ border-radius: 4px;
+}
+
+.ep2026-theme ::-webkit-scrollbar-thumb:hover {
+ background: var(--ep-border-strong);
+}
+
+/* Note / info box */
+.ep-note {
+ background: rgba(var(--ep-accent-rgb), 0.08);
+ border: 1px solid rgba(var(--ep-accent-rgb), 0.2);
+ border-radius: 6px;
+ padding: 0.8rem 1rem;
+ color: var(--ep-text-secondary);
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-size: 0.95rem;
+}
+
+/* Headline styles */
+.ep-headline {
+ font-family: "Inter Tight", system-ui, sans-serif;
+ font-weight: 500;
+ font-size: clamp(
+ 2.25rem,
+ 2.25rem + (100vw - 20rem) * (3 - 2.25) / (45 - 20),
+ 3rem
+ );
+ line-height: 1.25;
+ color: var(--ep-white);
+ margin-bottom: 1.5rem;
+}
+
+.ep-headline a,
+.ep-sched-day-title a {
+ color: inherit;
+ text-decoration: none;
+}
+
+.ep-headline a:hover,
+.ep-sched-day-title a:hover {
+ text-decoration: underline;
+}
+
+/* Responsive adjustments */
+@media (max-width: 800px) {
+ .ep-sched-time h2 {
+ font-size: 1rem;
+ text-align: center;
+ color: var(--ep-text-secondary);
+ }
+
+ .ep-session h2 {
+ font-size: 0.9rem;
+ }
+
+ .ep-session .room-info {
+ font-size: 0.8rem;
+ }
+}
+
+/* Reduced motion */
+@media (prefers-reduced-motion: reduce) {
+ .ep-session {
+ transition: none;
+ }
+}
{headline}
-💚 Mark talks as favorites by opening their details and tapping the ❤️ icon. Your selections are saved locally and will only be visible on this device.