:root { --bg: #f5efe3; --bg-accent: #efe3cf; --surface: rgba(255, 252, 246, 0.82); --surface-strong: #fffaf2; --line: rgba(46, 39, 30, 0.14); --text: #1f1a17; --muted: #65594d; --primary: #c24d2c; --primary-dark: #8f381f; --success: #245e3f; --warning: #8d5a13; --danger: #8a2f2f; --shadow: 0 16px 42px rgba(72, 55, 36, 0.11); --radius-lg: 8px; --radius-md: 8px; --radius-sm: 8px; --mono: "IBM Plex Mono", monospace; --sans: "Space Grotesk", sans-serif; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; font-family: var(--sans); color: var(--text); background: linear-gradient(135deg, var(--bg), #f7f2ea 48%, var(--bg-accent)); } body::before { content: ""; position: fixed; inset: 0; pointer-events: none; background-image: linear-gradient(rgba(255, 255, 255, 0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.08) 1px, transparent 1px); background-size: 32px 32px; mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.22), transparent 72%); } .page-shell { width: min(1280px, calc(100vw - 32px)); margin: 0 auto; padding: 24px 0 44px; } .hero { display: grid; grid-template-columns: 1.6fr 1fr; gap: 16px; margin-bottom: 16px; } .hero-copy, .status-panel, .panel { backdrop-filter: blur(12px); background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow); } .hero-copy { padding: 28px; border-radius: var(--radius-lg); } .eyebrow, .section-kicker, .stat-label, .meta-label { margin: 0 0 10px; font-family: var(--mono); font-size: 0.76rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); } h1, h2, h3, p { margin: 0; } h1 { font-size: clamp(2.2rem, 4vw, 3.8rem); line-height: 1; max-width: 14ch; } .hero-text { max-width: 58ch; margin-top: 14px; font-size: 1rem; line-height: 1.5; color: var(--muted); } .hero-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; } .status-panel { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 14px; border-radius: var(--radius-lg); } .stat-card { padding: 14px; background: rgba(255, 250, 242, 0.86); border-radius: var(--radius-md); border: 1px solid rgba(46, 39, 30, 0.08); } .stat-card strong { display: block; font-size: 1.7rem; line-height: 1.1; } .stat-card.wide { grid-column: 1 / -1; } .stat-card.wide strong { font-size: 1rem; line-height: 1.5; } .provider-summary { display: flex; flex-wrap: wrap; gap: 8px; } .dashboard-grid { display: grid; grid-template-columns: minmax(360px, 0.9fr) minmax(420px, 1.1fr); gap: 16px; } .panel { padding: 18px; border-radius: var(--radius-lg); } .panel-wide { grid-column: 1 / -1; } .panel-header { display: flex; align-items: start; justify-content: space-between; gap: 14px; margin-bottom: 14px; } .panel-tools { display: flex; gap: 10px; } .watch-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; } .full-width { grid-column: 1 / -1; } label { display: grid; gap: 8px; font-size: 0.95rem; color: var(--muted); } input, select, textarea, button { font: inherit; } input, select, textarea { width: 100%; padding: 10px 12px; border-radius: var(--radius-sm); border: 1px solid rgba(46, 39, 30, 0.16); background: rgba(255, 255, 255, 0.88); color: var(--text); transition: border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease; } input:focus, select:focus, textarea:focus { outline: none; border-color: rgba(194, 77, 44, 0.68); box-shadow: 0 0 0 4px rgba(194, 77, 44, 0.12); } button, .ghost-button { display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: 0 14px; border: 0; border-radius: 999px; text-decoration: none; cursor: pointer; transition: transform 180ms ease, box-shadow 180ms ease, background 180ms ease; } button:hover, .ghost-button:hover { transform: translateY(-1px); } .primary-button { background: linear-gradient(135deg, var(--primary), #d0722e); color: white; box-shadow: 0 14px 30px rgba(194, 77, 44, 0.26); } .ghost-button { background: rgba(255, 255, 255, 0.62); color: var(--text); border: 1px solid rgba(46, 39, 30, 0.12); } .watch-list, .event-list, .notification-list, .provider-status-list { display: grid; gap: 10px; } .empty-state { padding: 20px; border-radius: var(--radius-md); border: 1px dashed rgba(46, 39, 30, 0.18); color: var(--muted); text-align: center; } .watch-card, .event-card, .notification-card, .provider-status-card { padding: 18px; border-radius: var(--radius-md); background: var(--surface-strong); border: 1px solid rgba(46, 39, 30, 0.08); } .watch-card, .event-card { transform: translateY(6px); opacity: 0; animation: riseIn 420ms ease forwards; } .watch-header, .event-header, .notification-header { display: flex; align-items: start; justify-content: space-between; gap: 12px; } .pill-row, .action-row, .event-actions, .event-meta, .notification-meta { display: flex; flex-wrap: wrap; gap: 6px; } .pill { display: inline-flex; align-items: center; min-height: 24px; padding: 0 8px; border-radius: 999px; background: rgba(194, 77, 44, 0.09); color: var(--primary-dark); font-family: var(--mono); font-size: 0.78rem; } .pill.success { background: rgba(36, 94, 63, 0.12); color: var(--success); } .pill.warning { background: rgba(141, 90, 19, 0.14); color: var(--warning); } .pill.danger { background: rgba(138, 47, 47, 0.12); color: var(--danger); } .provider-chip { display: inline-flex; align-items: center; min-height: 32px; padding: 0 12px; border-radius: 999px; background: rgba(46, 39, 30, 0.08); color: var(--text); font-family: var(--mono); font-size: 0.78rem; } .provider-ticketmaster { background: rgba(36, 94, 63, 0.12); color: var(--success); } .provider-bandsintown { background: rgba(194, 77, 44, 0.12); color: var(--primary-dark); } .provider-jambase { background: rgba(17, 108, 110, 0.13); color: #0d5f61; } .provider-eventim { background: rgba(86, 60, 153, 0.14); color: #4f3790; } .provider-barclays-arena { background: rgba(26, 87, 163, 0.14); color: #1a57a3; } .provider-fabrik { background: rgba(154, 77, 24, 0.14); color: #8e4516; } .muted { color: var(--muted); } .watch-card p, .event-card p, .notification-card p, .provider-status-card p { margin-top: 8px; line-height: 1.45; } .watch-note { color: var(--muted); } .source-list { display: grid; gap: 8px; margin-top: 12px; } .source-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 12px; padding: 10px; border-radius: var(--radius-sm); background: rgba(46, 39, 30, 0.05); } .source-content { min-width: 0; } .source-title-row { display: flex; align-items: center; gap: 8px; } .source-row a { display: block; max-width: 100%; margin: 4px 0; overflow-wrap: anywhere; color: var(--primary-dark); font-size: 0.9rem; } .source-message { margin: 0; color: var(--muted); font-size: 0.9rem; } .source-form { display: grid; grid-template-columns: 0.7fr 1.4fr auto; gap: 8px; margin-top: 10px; } .action-button { display: inline-flex; align-items: center; justify-content: center; min-height: 32px; padding: 0 10px; border-radius: 999px; background: rgba(46, 39, 30, 0.08); color: var(--text); text-decoration: none; white-space: nowrap; font-size: 0.92rem; } .action-button.danger { background: rgba(138, 47, 47, 0.1); color: var(--danger); } .action-button.success { background: rgba(36, 94, 63, 0.1); color: var(--success); } .event-card { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 14px; padding: 14px; } .event-date-badge { display: grid; align-content: center; min-height: 86px; padding: 10px; border-radius: var(--radius-sm); background: rgba(194, 77, 44, 0.1); color: var(--primary-dark); } .event-date-badge strong { font-size: 1rem; line-height: 1.15; } .event-date-badge span { margin-top: 4px; color: var(--muted); font-family: var(--mono); font-size: 0.78rem; } .event-content { min-width: 0; } .event-header h3 { overflow-wrap: anywhere; } .event-meta, .notification-meta { margin-top: 8px; color: var(--muted); font-size: 0.9rem; } .event-meta span:not(:last-child)::after { content: "/"; margin-left: 8px; color: rgba(101, 89, 77, 0.52); } .event-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 12px; } .event-link { color: var(--primary-dark); background: rgba(194, 77, 44, 0.09); } .toast { position: fixed; right: 20px; bottom: 20px; max-width: min(420px, calc(100vw - 40px)); padding: 14px 18px; border-radius: 16px; background: rgba(31, 26, 23, 0.92); color: white; box-shadow: 0 18px 40px rgba(31, 26, 23, 0.24); opacity: 0; pointer-events: none; transform: translateY(10px); transition: opacity 200ms ease, transform 200ms ease; } .toast.visible { opacity: 1; transform: translateY(0); } @keyframes riseIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 980px) { .hero, .dashboard-grid { grid-template-columns: 1fr; } .panel-wide { grid-column: auto; } } @media (max-width: 720px) { .page-shell { width: min(100vw - 20px, 1280px); padding-top: 18px; } .hero-copy, .panel, .status-panel { padding: 20px; } .watch-form, .source-form, .status-panel { grid-template-columns: 1fr; } h1 { max-width: none; font-size: clamp(2.3rem, 13vw, 3.6rem); } .panel-header, .watch-header, .event-header, .notification-header { flex-direction: column; } .source-row, .event-card { grid-template-columns: 1fr; } .event-date-badge { min-height: auto; } .event-footer, .source-title-row { align-items: flex-start; flex-direction: column; } .event-actions, .action-row, .panel-tools { width: 100%; } .event-actions .action-button, .action-row .action-button { flex: 1 1 140px; } }