:root{--paper:#fafafa;--card:#fff;--ink:#202124;--muted:#71757b;--line:#e4e5e7;--red:#b33131}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}button,input,select{font:inherit}button,a,select{-webkit-tap-highlight-color:transparent}button{border:1px solid var(--ink);border-radius:6px;background:var(--ink);color:#fff;padding:9px 14px;cursor:pointer;font-weight:500}button:hover{opacity:.8}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid #648ac8;outline-offset:3px}.quiet{background:transparent;color:var(--ink);border-color:var(--line)}.hidden{display:none!important}header,main,footer{width:min(960px,calc(100% - 48px));margin:0 auto}header{height:72px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.wordmark{color:var(--ink);text-decoration:none;font-size:17px;font-weight:650;letter-spacing:-.4px}.header-actions{display:flex;align-items:center;gap:10px}main{min-height:65vh;padding-top:32px}h1{font-size:24px;line-height:1.3;font-weight:600;letter-spacing:-.6px;margin:0 0 24px}h2{font-size:22px;line-height:1.35;font-weight:600;letter-spacing:-.5px;margin:0 0 8px}.toolbar{display:flex;align-items:center;gap:20px;padding-bottom:20px;border-bottom:1px solid var(--line)}.filter{display:flex;align-items:center}.filter label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}select{border:1px solid var(--line);background:var(--card);border-radius:6px;padding:8px 28px 8px 10px;color:var(--ink);max-width:210px}.tabs{display:flex;gap:4px;margin-right:auto}.tabs button{padding:8px 12px;background:transparent;color:var(--muted);border-color:transparent;white-space:nowrap}.tabs button.active{background:#eaecef;color:var(--ink)}.list-label{display:flex;justify-content:space-between;align-items:center;padding:18px 0 10px;font-size:12px;color:var(--muted)}.tiny{font-size:11px}.events{display:flex;flex-direction:column}.card{display:grid;grid-template-columns:1fr auto;gap:4px 24px;padding:20px 0;border-bottom:1px solid var(--line)}.card-top{display:flex;align-items:center;gap:10px}.card>.card-top{grid-column:1}.date{font-size:12px;color:var(--muted)}.pill{font-size:11px;line-height:1.5;color:var(--muted);background:#eff0f2;border-radius:4px;padding:2px 6px;white-space:nowrap}.pill.confirmed{color:#367049;background:#e9f1eb}.card h3{grid-column:1;font-size:16px;line-height:1.4;font-weight:550;margin:3px 0;letter-spacing:-.15px}.area{grid-column:1;font-size:13px;color:var(--muted);margin:0}.card-foot{grid-column:2;grid-row:1/4;align-self:center}.card button{background:var(--card);color:var(--ink);border-color:var(--line);font-size:13px;min-width:110px}footer{padding:24px 0;font-size:11px}footer a{color:var(--muted);text-decoration:none}.notice{background:#f0f1f3;border-radius:6px;padding:12px 14px;margin-bottom:18px;font-size:13px}.error{color:var(--red);font-size:13px;white-space:pre-line}.error:empty{display:none}.empty{padding:40px 0;color:var(--muted)}dialog{border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--ink);width:min(620px,calc(100% - 24px));max-height:90dvh;padding:24px;box-shadow:0 16px 64px #0002}dialog::backdrop{background:#1116}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:8px}.close{background:transparent;border:0;color:var(--muted);font-size:26px;line-height:1;padding:0 3px}.muted{color:var(--muted);font-size:13px}.login{max-width:340px;margin:40px auto 80px}.login form{display:grid;gap:12px}label{display:block;font-size:13px;margin:18px 0 7px}input{width:100%;padding:10px 12px;border:1px solid var(--line);background:var(--card);border-radius:6px;color:var(--ink)}#settings form>button{margin:12px 8px 0 0}#settings label span{color:var(--muted);font-size:11px;float:right}.progress{padding:18px 0}.progress p{margin:0;color:var(--muted);font-size:13px}.spinner{display:inline-block;width:12px;height:12px;margin-right:9px;border:2px solid var(--line);border-top-color:var(--ink);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.analysis-facts{display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px;margin:20px 0;font-size:13px}.candidate{padding:20px 0;border-top:1px solid var(--line)}.candidate .card-top{justify-content:space-between}.candidate h3{font-size:20px;font-weight:600;letter-spacing:-.3px;margin:12px 0 4px}.candidate p.muted{margin:0}.candidate ul{padding-left:18px;font-size:13px}.candidate .caveat{font-size:13px;color:var(--muted)}.candidate-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.candidate-actions a{font-size:13px;text-decoration:none;padding:8px 12px;border:1px solid var(--line);border-radius:6px;color:var(--ink)}.candidate-actions a.calendar{background:var(--ink);color:white;border-color:var(--ink)}summary{font-size:12px;color:var(--muted);cursor:pointer}.evidence{margin-top:16px}.sources{font-size:12px;display:flex;gap:12px;flex-wrap:wrap;margin-top:12px}.sources a{color:var(--muted)}.google-attribution{font:400 16px/1.5 Arial,sans-serif;white-space:nowrap;letter-spacing:0;color:#5e5e5e;margin:20px 0 0}.provider-attribution{font-size:11px;color:var(--muted)}.fine{font-size:12px;color:var(--muted)}.preview{margin:20px 0}.preview p{font-size:13px;color:var(--muted);margin:0 0 14px}.activity{margin:20px 0 0;border-top:1px solid var(--line);padding-top:14px}.activity-log{max-height:240px;overflow:auto;margin-top:12px}.activity-row{display:grid;grid-template-columns:72px 1fr;gap:10px;padding:8px 0;font-size:12px;overflow-wrap:anywhere}.activity-row time{font:10px/1.7 monospace;color:var(--muted)}.activity-row.error{color:var(--red)}
@media(max-width:600px){header,main,footer{width:calc(100% - 32px)}header{height:60px}main{padding-top:24px}.toolbar{flex-wrap:wrap;gap:12px}.toolbar>.quiet{margin-left:auto}.tabs{order:3;width:100%;margin:0}.tabs button{flex:1}.card{gap:4px 12px;padding:18px 0}.card h3{font-size:15px}.card-foot{grid-column:1;grid-row:auto;margin-top:8px;justify-self:start}.card button{padding:7px 12px}.list-label .tiny{font-size:10px}dialog{padding:20px}h2{font-size:20px}.login{margin-top:24px}}
@media(prefers-reduced-motion:reduce){.spinner{animation:none}}
.history-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:24px 0 12px}.history-stats strong{display:block;font-size:24px;font-weight:600}.history-stats span{display:block}.history-entry{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.history-entry>summary{font-size:13px;color:var(--ink)}.history-entry ol{padding-left:20px;font-size:13px}.reveal-form{margin:12px 0}.reveal-form select{display:block;margin-top:8px;max-width:100%;width:100%}.check{display:flex;align-items:center;gap:8px}.check input{width:auto}.reveal-form button{margin-top:8px}
@media(max-width:400px){.wordmark{font-size:15px}.header-actions{gap:6px}.header-actions button{font-size:12px;padding:8px}.header-actions .pill{font-size:9px}.history-stats strong{font-size:21px;white-space:nowrap}}
.coordinates{margin:12px 0 20px;padding:16px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.coordinates>summary{color:var(--ink);font-size:13px}.map-controls{display:flex;gap:8px;margin:16px 0 10px}.map-controls button{padding:6px 12px;font-size:12px}.coordinate-map{height:320px;isolation:isolate;border:1px solid var(--line);border-radius:8px;background:#f1f2f3;font-family:inherit}.coordinate-map .leaflet-control-attribution{font-size:10px}.coordinate-map .leaflet-control a{color:var(--ink)}.coordinate-map .coordinate-label{font:11px/1.3 -apple-system,BlinkMacSystemFont,sans-serif;border:0;box-shadow:0 1px 4px #0002;padding:3px 5px;color:var(--ink)}.map-status:empty{display:none}.map-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:12px 0;font-size:11px;color:var(--muted)}.map-legend span{display:flex;align-items:center;gap:5px}.map-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.map-dot.dinner{background:#3478b7}.map-dot.second{background:#c37a23}.map-dot.anchor{background:#7256b5}.coordinate-values{display:grid;gap:12px;margin:16px 0}.coordinate-row{display:grid;gap:2px;font-size:12px}.coordinate-row code{font:12px/1.5 ui-monospace,monospace;user-select:all}.coordinate-row .fine{font-size:11px}.anchor-link{font-size:12px;color:var(--muted)}

.row-venue{grid-column:1;display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-top:7px;font-size:13px;min-width:0}.venue-label{color:var(--muted);font-size:11px}.venue-link{color:var(--ink);text-decoration:underline;text-decoration-color:#c5c8cd;text-underline-offset:3px;overflow-wrap:anywhere}.card .venue-share,.tonight-card .venue-share{min-width:0;padding:3px 8px;font-size:12px}.card:has(.row-venue)>.card-foot{grid-row:1/5}.candidate-actions .venue-share{font-size:13px;padding:8px 12px}@media(max-width:600px){.card:has(.row-venue)>.card-foot{grid-row:auto}}

.tonight{margin-bottom:32px}.tonight>h2{font-size:24px;margin-bottom:12px}.tonight-card{border:1px solid var(--line);border-radius:10px;padding:18px;margin-bottom:10px;background:var(--card)}.tonight-card h3{font-size:19px;line-height:1.4;margin:6px 0}.tonight-card p{margin:6px 0}.tonight-card>button{margin-top:14px}.row-calendar{color:var(--ink);font-size:12px;padding:3px 8px;border:1px solid var(--line);border-radius:6px;text-decoration:none}.install-help{margin:16px 0}body{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}

.venue-time{font-size:12px;color:var(--muted);white-space:nowrap}

/* Invite QR */
.qr{display:flex;justify-content:center;padding:16px 0}
.qr svg{width:min(260px,70vw);height:auto;background:#fff;border-radius:12px;padding:10px;box-shadow:0 1px 4px rgba(0,0,0,.1)}
.invite-link{word-break:break-all;font-size:12px;color:var(--muted);text-align:center}

/* Attendee counts */
.attendees{display:flex;align-items:center;gap:5px;margin:2px 0 0;font-size:12px;color:var(--muted)}
.attendee-dot{color:#2f9e6e;font-size:9px;line-height:1}
.attendee-count{font-weight:500}

/* ============================================================
   Skin layer — map the app's components onto theme.css tokens.
   Loaded last; overrides the light defaults above. Burnt-orange
   dark ground, cream ink, Crimson Pro (see /theme/theme.css).
   ============================================================ */
:root{
  --paper:transparent;              /* themed html background shows through */
  --card:var(--ground-3);
  --ink:var(--cream);
  --muted:hsl(var(--hue) calc(var(--sat) * .3) 62%);
  --line:var(--veil-3);
  --red:var(--danger);
}
body{background:transparent;font-family:var(--font);font-weight:300;font-size:15px;color:var(--ink)}

/* Headings in the display serif */
h1,h2,.wordmark,.candidate h3{font-family:var(--font);letter-spacing:-.3px}
h1{font-weight:400}
.login h1{font-style:italic;font-weight:400}

/* Primary buttons → cream fill, dark ink (222's primary) */
button{background:var(--cream);color:var(--ground-1);border:0;border-radius:var(--r-sm);font-weight:500}
button:hover{background:var(--cream-bright);opacity:1}
.quiet{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--veil-3);border:0}
.quiet:hover{background:var(--veil-2);opacity:1}
.card button,.tonight-card button{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--veil-3);border:0}
.card button:hover{background:var(--veil-2)}
.close{background:transparent!important;box-shadow:none!important;color:var(--muted)}

/* Inputs & selects */
input{background:var(--veil-2);border:1px solid var(--veil-3);color:var(--ink);border-radius:var(--r-sm)}
input::placeholder{color:var(--ink-4)}
input:focus{outline:none;border-color:var(--veil-4)}
select{background:var(--veil-2);border:1px solid var(--veil-3);color:var(--ink);border-radius:var(--r-sm)}

/* Pills / tabs / chips */
.pill{background:var(--veil-2);color:var(--ink-2);border-radius:var(--r-pill);font-style:italic}
.pill.confirmed{color:var(--ground-1);background:var(--cream)}
.pill.invited{color:var(--accent);background:var(--accent-soft)}
.tabs button.active{background:var(--veil-2);color:var(--ink);box-shadow:none}
.tabs button{color:var(--ink-3);box-shadow:none}

/* Dividers between list rows + surfaces */
.card,.candidate,.coordinates,.toolbar{border-color:var(--veil-2)}
.list-label{border:0}
.notice{background:var(--veil-2);border-radius:var(--r-md)}

/* Dialogs become raised grain surfaces */
dialog{background:var(--ground-2);background-image:var(--grain),linear-gradient(180deg,var(--ground-3),var(--ground-2));border:1px solid var(--veil-3);border-radius:var(--r-lg);box-shadow:0 24px 80px #0007}
dialog::backdrop{background:#000a}

/* Venue + candidate links, calendar CTA */
.venue-link{color:var(--ink);text-decoration-color:var(--veil-3)}
.candidate-actions a{border:1px solid var(--veil-3);color:var(--ink);border-radius:var(--r-sm)}
.candidate-actions a.calendar{background:var(--accent);color:var(--ground-0);border-color:var(--accent);font-weight:500}
.row-calendar{color:var(--accent)}

/* Accent + attendee touches */
.attendee-dot{color:var(--accent)}
.spinner{border-color:var(--veil-3);border-top-color:var(--accent)}
.date{color:var(--ink-3)}

/* Keep the QR crisp on the dark ground */
.qr svg{background:#fff;box-shadow:0 2px 12px #0006}
