:root { --fg: #1d1d1f; --bg: #fafafa; --accent: #c8102e; --muted: #666; --card: #fff; --ok: #1b7f3b; --warn: #b35c00; }
* { box-sizing: border-box; }
body { margin: 0; font: 16px/1.45 system-ui, sans-serif; color: var(--fg); background: var(--bg); }
header.top { display: flex; flex-wrap: wrap; gap: 12px 20px; align-items: center; padding: 12px 16px; background: #fff; border-bottom: 1px solid #e5e5e5; }
header.top .brand { font-weight: 700; color: var(--accent); text-decoration: none; }
header.top nav { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; }
header.top nav a { color: var(--fg); text-decoration: none; }
main { max-width: 1000px; margin: 0 auto; padding: 16px; }
.inline { display: inline; }
button.link { background: none; border: 0; color: var(--muted); cursor: pointer; padding: 0; font: inherit; }
.stack { display: grid; gap: 12px; max-width: 420px; }
label { display: grid; gap: 4px; }
input, select, textarea { font: inherit; padding: 8px; border: 1px solid #ccc; border-radius: 6px; }
button { font: inherit; padding: 8px 14px; border-radius: 6px; border: 1px solid #bbb; background: #fff; cursor: pointer; }
button.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
.error { color: var(--accent); }
.ok { color: var(--ok); } .warn { color: var(--warn); }
.banner { padding: 12px 16px; border-radius: 8px; background: #fff4e5; border: 1px solid #f0c48a; margin-bottom: 16px; }
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }
.card { background: var(--card); border: 1px solid #e5e5e5; border-radius: 10px; overflow: hidden; display: grid; grid-template-rows: auto 1fr auto; }
.card img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.card .body { padding: 12px; }
.card .actions { display: flex; gap: 8px; padding: 12px; border-top: 1px solid #eee; flex-wrap: wrap; align-items: center; }
.card.accepted { border-color: var(--ok); } .card.skipped { opacity: .55; }
.meta { color: var(--muted); font-size: 14px; }
table { border-collapse: collapse; width: 100%; } td, th { text-align: left; padding: 8px; border-bottom: 1px solid #eee; vertical-align: top; }
.week { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
.day { background: #fff; border: 1px solid #e5e5e5; border-radius: 8px; padding: 10px; min-height: 90px; }
.htmx-request .spinner, .spinner.htmx-request { display: inline-block; } .spinner { display: none; }
.qr img { width: 260px; height: 260px; image-rendering: pixelated; }
