@import "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@500;600;700&display=swap";:root{--pine-950:#0a1f14;--pine-900:#10291c;--pine-800:#163524;--pine-700:#1f4a32;--pine-600:#2b6142;--pine-300:#7fa08c;--snow:#f6f1e7;--snow-dim:#a9bfaf;--cranberry-500:#c23b2e;--cranberry-600:#a32f24;--cranberry-050:#c23b2e24;--gold-400:#e6b84c;--gold-300:#f2ce7e;--gold-900:#5c4311;--success:#58b97e;--danger:#e5684d;--danger-ink:#ffb9a8;--silver-400:#c9ced6;--silver-900:#3a3f46;--bronze-400:#b07c4a;--bronze-900:#2c1b0e;--font-display:"Cormorant Garamond", Georgia, "Times New Roman", serif;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.375rem;--text-2xl:1.75rem;--text-3xl:2.125rem;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--radius-sm:8px;--radius-md:12px;--radius-lg:18px;--radius-pill:999px;--shadow-card:0 2px 10px #00000059;--shadow-raised:0 6px 22px #00000073;--shadow-gold-glow:0 0 0 1px #e6b84c59, 0 4px 18px #e6b84c1f;--touch-target:44px;--button-height:52px;--app-max-width:480px;--tabbar-height:64px;--motion-fast:.12s;--motion-medium:.22s;--ease-out:cubic-bezier(.22, 1, .36, 1);--grade-low:#a9bfaf;--grade-mid:var(--gold-400);--grade-high:var(--success)}@media (prefers-reduced-motion:reduce){:root{--motion-fast:0s;--motion-medium:0s}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-body);font-size:var(--text-base);color:var(--snow);background:var(--pine-950);background-image:radial-gradient(circle,#f6f1e70d 1.4px,#0000 1.6px),radial-gradient(circle,#f6f1e709 1.1px,#0000 1.3px);background-position:0 0,31px 47px;background-size:96px 96px,61px 61px;margin:0;line-height:1.5}h1,h2,h3{font-family:var(--font-display);font-weight:var(--weight-bold);text-wrap:balance;margin:0;line-height:1.15}p{margin:0}a{color:var(--gold-400)}.app{max-width:var(--app-max-width);flex-direction:column;min-height:100dvh;margin:0 auto;display:flex}.app-main{padding:var(--space-4) var(--space-4) calc(var(--tabbar-height) + var(--space-8));flex:1}.top-bar{z-index:15;background:var(--pine-950);border-bottom:1px solid var(--pine-700);padding:calc(var(--space-5) + env(safe-area-inset-top)) var(--space-4) var(--space-4);min-height:calc(76px + env(safe-area-inset-top));-webkit-backdrop-filter:none;backdrop-filter:none;justify-content:space-between;align-items:center;gap:var(--space-3);display:flex;position:sticky;top:0}.top-bar .brand{align-items:center;gap:var(--space-3);font-family:var(--font-display);font-size:var(--text-2xl);font-weight:var(--weight-bold);display:flex}.top-bar .brand svg{color:var(--gold-400);flex:none;width:32px;height:32px}.event-chip{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--gold-300);border-radius:var(--radius-pill);padding:var(--space-1) var(--space-3);white-space:nowrap;background:#e6b84c1f;border:1px solid #e6b84c59}.page-title{font-size:var(--text-2xl);margin:var(--space-2) 0 var(--space-1)}.page-sub{color:var(--snow-dim);font-size:var(--text-sm);margin-bottom:var(--space-5)}.ornament{align-items:center;gap:var(--space-3);color:var(--gold-400);margin:var(--space-2) 0 var(--space-5);display:flex}.ornament:before,.ornament:after{content:"";background:linear-gradient(to right, transparent, var(--pine-600));flex:1;height:1px}.ornament:after{background:linear-gradient(to left, transparent, var(--pine-600))}.btn{justify-content:center;align-items:center;gap:var(--space-2);min-height:var(--button-height);padding:0 var(--space-5);border-radius:var(--radius-md);font-family:var(--font-body);font-size:var(--text-base);font-weight:var(--weight-semibold);cursor:pointer;transition:background var(--motion-fast) var(--ease-out), transform var(--motion-fast) var(--ease-out);touch-action:manipulation;-webkit-tap-highlight-color:transparent;border:0;text-decoration:none;display:inline-flex}.btn:active{transform:scale(.97)}.btn:disabled,.btn[aria-disabled=true]{opacity:.45;cursor:not-allowed;transform:none}.btn:focus-visible{outline:3px solid var(--gold-400);outline-offset:2px}.btn--primary{background:var(--cranberry-500);color:#fff}.btn--primary:hover:not(:disabled){background:var(--cranberry-600)}.btn--gold{background:var(--gold-400);color:var(--gold-900)}.btn--secondary{background:var(--pine-800);color:var(--snow);border:1px solid var(--pine-600)}.btn--secondary:hover:not(:disabled){background:var(--pine-700)}.btn--ghost{color:var(--gold-400);min-height:var(--touch-target);background:0 0}.btn--danger-ghost{color:var(--danger);min-height:var(--touch-target);background:0 0}.btn--block{width:100%}.card{background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-card)}.field{margin-bottom:var(--space-4);display:block}.field>.label{font-size:var(--text-sm);font-weight:var(--weight-semibold);margin-bottom:var(--space-2);display:block}.field .hint{font-size:var(--text-xs);color:var(--snow-dim);margin-top:var(--space-1)}.input,.select,.textarea{width:100%;min-height:var(--button-height);padding:var(--space-3) var(--space-4);font-size:var(--text-base);font-family:var(--font-body);color:var(--snow);background:var(--pine-800);border:1px solid var(--pine-600);border-radius:var(--radius-md)}.input:focus,.select:focus,.textarea:focus{border-color:var(--gold-400);outline:none;box-shadow:0 0 0 3px #e6b84c40}.textarea{resize:vertical;min-height:96px}.segmented{gap:var(--space-2);background:var(--pine-800);border:1px solid var(--pine-600);border-radius:var(--radius-md);padding:var(--space-1);grid-auto-flow:column;display:grid}.segmented button{min-height:var(--touch-target);border-radius:calc(var(--radius-md) - 4px);color:var(--snow-dim);font:inherit;font-weight:var(--weight-semibold);cursor:pointer;background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex}.segmented button[aria-pressed=true]{background:var(--pine-700);color:var(--snow);box-shadow:var(--shadow-gold-glow)}.snaps-row{align-items:center;gap:var(--space-3);width:100%;min-height:var(--touch-target);padding:var(--space-3) var(--space-4);background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-md);color:var(--snow);text-decoration:none;display:flex}.snaps-row .thumb{border-radius:var(--radius-sm);object-fit:cover;background:var(--pine-800);width:48px;height:48px;font-size:var(--text-xl);flex:none;place-items:center;display:grid}.snaps-row .meta{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.snaps-row .name{font-family:var(--font-display);font-size:var(--text-lg);font-weight:var(--weight-semibold);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.snaps-row .brewer{font-size:var(--text-sm);color:var(--snow-dim)}.snaps-row-item{align-items:stretch;gap:var(--space-2);display:flex}.snaps-row-item .snaps-row{flex:1;min-width:0}.course-heading{align-items:center;gap:var(--space-2);font-family:var(--font-display);font-size:var(--text-lg);font-weight:var(--weight-bold);color:var(--gold-400);margin:var(--space-5) 0 var(--space-2);display:flex}.glass-rating{gap:var(--space-1);display:flex}.glass-rating .glass{min-width:var(--touch-target);cursor:pointer;min-height:60px;color:var(--pine-600);touch-action:manipulation;-webkit-tap-highlight-color:transparent;background:0 0;border:0;flex:1;place-items:center;padding:0;display:grid}.glass-rating .glass svg{width:100%;max-width:42px;height:auto}.glass-rating .glass .bowl{fill:none}.glass-rating .glass.filled .bowl{fill:currentColor;fill-opacity:.35}.glass-rating .glass.filled{color:var(--gold-400)}.glass-rating .glass:active{transform:scale(.9)}.glass-rating .glass:focus-visible{outline:3px solid var(--gold-400);outline-offset:1px;border-radius:var(--radius-sm)}.category{background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-md);padding:var(--space-3) var(--space-3) var(--space-2);margin-bottom:var(--space-3)}.category-head{margin-bottom:var(--space-1);justify-content:space-between;align-items:baseline;display:flex}.category-head .cat-name{font-weight:var(--weight-semibold)}.category-head .cat-weight{font-size:var(--text-xs);color:var(--snow-dim)}.category-grade{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:var(--weight-bold);color:var(--gold-400);text-align:right;min-width:2ch}.category-grade.pending{color:var(--snow-dim);opacity:.6}.total-panel{bottom:calc(var(--tabbar-height) + var(--space-3));background:var(--pine-800);border:1px solid var(--pine-600);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-raised);justify-content:space-between;align-items:center;gap:var(--space-3);display:flex;position:sticky}.total-panel .total-value{font-family:var(--font-display);font-size:var(--text-3xl);font-weight:var(--weight-bold);color:var(--gold-400)}.total-panel .total-text{font-size:var(--text-xs);color:var(--snow-dim);max-width:16ch}.rank-item{background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-md);margin-bottom:var(--space-3);overflow:hidden}.rank-item[data-rank="1"]{border-color:var(--gold-400);box-shadow:var(--shadow-gold-glow)}.rank-item summary{align-items:center;gap:var(--space-3);min-height:var(--touch-target);padding:var(--space-3) var(--space-4);cursor:pointer;list-style:none;display:flex}.rank-item summary::-webkit-details-marker{display:none}.rank-badge{border-radius:var(--radius-pill);width:40px;height:40px;font-family:var(--font-display);font-weight:var(--weight-bold);font-size:var(--text-lg);background:var(--pine-800);color:var(--snow-dim);border:1px solid var(--pine-600);flex:none;place-items:center;display:grid}.rank-item[data-rank="1"] .rank-badge{background:var(--gold-400);color:var(--gold-900);border-color:var(--gold-400)}.rank-item[data-rank="2"] .rank-badge{background:var(--silver-400);color:var(--silver-900);border-color:var(--silver-400)}.rank-item[data-rank="3"] .rank-badge{background:var(--bronze-400);color:var(--bronze-900);border-color:var(--bronze-400)}.rank-total{font-family:var(--font-display);font-size:var(--text-xl);font-weight:var(--weight-bold);color:var(--gold-400);margin-left:auto}.rank-detail{padding:0 var(--space-4) var(--space-3)}.rank-detail table{border-collapse:collapse;width:100%;font-size:var(--text-sm)}.rank-detail td{padding:var(--space-2) 0;border-top:1px solid var(--pine-700)}.rank-detail td:last-child{text-align:right;font-variant-numeric:tabular-nums}.live-badge{align-items:center;gap:var(--space-1);font-size:var(--text-xs);color:var(--success);display:inline-flex}.live-badge:before{content:"";background:var(--success);width:7px;height:7px;animation:pulse 1.6s var(--ease-out) infinite;border-radius:50%}@keyframes pulse{50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.live-badge:before{animation:none}}.tab-bar{width:100%;max-width:var(--app-max-width);height:calc(var(--tabbar-height) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--pine-900);border-top:1px solid var(--pine-700);grid-auto-flow:column;display:grid;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.tab-bar a{font-size:var(--text-xs);color:var(--snow-dim);min-height:var(--tabbar-height);flex-direction:column;justify-content:center;align-items:center;gap:2px;text-decoration:none;display:flex}.tab-bar a[aria-current=page]{color:var(--gold-400)}.tab-bar a svg{width:22px;height:22px}.user-row{align-items:center;gap:var(--space-3);min-height:var(--touch-target);padding:var(--space-3) var(--space-4);background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-md);margin-bottom:var(--space-2);display:flex}.user-row .avatar{border-radius:var(--radius-pill);background:var(--cranberry-050);width:40px;height:40px;color:var(--cranberry-500);font-weight:var(--weight-bold);flex:none;place-items:center;display:grid}.user-row .info{flex:1;min-width:0}.user-row .info .u-name{font-weight:var(--weight-semibold)}.user-row .info .u-mail{font-size:var(--text-sm);color:var(--snow-dim);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.role-chip{font-size:var(--text-xs);font-weight:var(--weight-semibold);padding:2px var(--space-2);border-radius:var(--radius-pill);background:var(--pine-800);color:var(--snow-dim);border:1px solid var(--pine-600)}.role-chip.admin{color:var(--gold-300);background:#e6b84c1a;border-color:#e6b84c66}.alert{border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);font-size:var(--text-sm);margin-bottom:var(--space-4);border:1px solid}.alert--error{color:var(--danger-ink);background:#e5684d1f;border-color:#e5684d66}.alert--success{color:var(--success);background:#58b97e1a;border-color:#58b97e59}.archive-year{margin-bottom:var(--space-4)}.archive-year details{background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-md);overflow:hidden}.archive-year summary{align-items:center;gap:var(--space-3);padding:var(--space-4);min-height:var(--touch-target);cursor:pointer;list-style:none;display:flex}.archive-year summary::-webkit-details-marker{display:none}.archive-year .year{font-family:var(--font-display);font-size:var(--text-xl);font-weight:var(--weight-bold)}.archive-year .winner-line{font-size:var(--text-sm);color:var(--snow-dim);flex:1}.winner-star{color:var(--gold-400);flex:none}.login-hero{text-align:center;padding:var(--space-10) var(--space-4) var(--space-6)}.login-hero .app-name{font-family:var(--font-display);font-size:var(--text-3xl);font-weight:var(--weight-bold);margin-top:var(--space-3)}.login-hero .tagline{color:var(--snow-dim);font-size:var(--text-sm)}.stack>*+*{margin-top:var(--space-3)}.text-dim{color:var(--snow-dim)}.mb-4{margin-bottom:var(--space-4)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.fill-cranberry{fill:var(--cranberry-500)}.fill-pine-600{fill:var(--pine-600)}.fill-pine-700{fill:var(--pine-700)}.user-block{background:var(--pine-900);border:1px solid var(--pine-700);border-radius:var(--radius-md);margin-bottom:var(--space-3);overflow:hidden}.user-block .user-row{background:0 0;border:0;margin:0}.user-block .actions{gap:var(--space-2);padding:0 var(--space-4) var(--space-4);flex-wrap:wrap;display:flex}.user-block.is-off .info{opacity:.55}.btn--compact{width:auto;padding:0 var(--space-3);font-size:var(--text-sm)}.code-box{justify-content:space-between;align-items:center;gap:var(--space-3);background:var(--pine-800);border:1px dashed var(--gold-400);border-radius:var(--radius-md);padding:var(--space-3);margin-top:var(--space-3);display:flex}.code-box code{font-family:var(--font-body);font-size:var(--text-sm);color:var(--gold-300);overflow-wrap:anywhere}.fadein{animation:fade var(--motion-base) var(--ease-out)}@keyframes fade{0%{opacity:0;transform:translateY(4px)}}.center{text-align:center}.row{gap:var(--space-3);align-items:center;display:flex}.row>.grow{flex:1;min-width:0}.section-title{font-size:var(--text-xl);margin:var(--space-8) 0 var(--space-3)}.thumb-img{border-radius:var(--radius-sm);object-fit:cover;background:var(--pine-800);width:48px;height:48px;font-size:var(--text-xl);flex:none;place-items:center;display:grid}.hero-img{border-radius:var(--radius-md);object-fit:cover;background:var(--pine-800);width:72px;height:72px;font-size:var(--text-3xl);flex:none;place-items:center;display:grid}.review-hero{text-align:center;padding:var(--space-5) var(--space-4)}.review-hero .hero-img{float:none;width:100%;max-width:320px;height:auto;max-height:55vh;margin:0 auto var(--space-4);border:1px solid var(--pine-600);box-shadow:var(--shadow-gold-glow);font-size:4rem}.review-hero .eyebrow{margin:0}.add-preview-img{border-radius:var(--radius-md);border:1px solid var(--pine-600);width:100%;max-width:280px;height:auto;box-shadow:var(--shadow-raised);margin:0 auto;display:block}.eyebrow{font-size:var(--text-xs);font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:.06em;color:var(--snow-dim)}.btn--sm{min-height:var(--touch-target);padding:0 var(--space-4);font-size:var(--text-sm)}button.snaps-row{font:inherit;text-align:left;cursor:pointer}.toast{left:50%;bottom:calc(var(--tabbar-height) + var(--space-6));z-index:10;background:var(--pine-800);width:max-content;max-width:calc(100% - 2rem);position:fixed;transform:translate(-50%)}.code-box{background:var(--pine-800);border:1px dashed var(--pine-600);border-radius:var(--radius-md);padding:var(--space-3);word-break:break-all;-webkit-user-select:all;user-select:all;font-family:ui-monospace,monospace}.winner-box{text-align:center;border-color:var(--gold-400);box-shadow:var(--shadow-gold-glow);margin-bottom:var(--space-4)}.winner-box .w-name{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:var(--weight-bold);color:var(--gold-400)}.nav-row{gap:var(--space-3);margin-top:var(--space-4);display:flex}.progress{font-size:var(--text-sm);color:var(--snow-dim)}.dialog-back{padding:var(--space-4);z-index:20;background:#0009;place-items:center;display:grid;position:fixed;inset:0}.dialog-back .card{background:var(--pine-900);width:100%;max-width:420px}.tab-bar a{font-size:.6875rem}.top-bar .event-chip{text-overflow:ellipsis;max-width:55%;overflow:hidden}.total-panel{bottom:calc(var(--tabbar-height) + var(--space-3) + env(safe-area-inset-bottom))}.glass-rating{flex-wrap:nowrap}@media (width<=420px){.glass-rating{gap:2px}.glass-rating .glass{min-width:0}}.btn .spin{display:none}.loading{text-align:center;color:var(--snow-dim);padding:var(--space-8) 0}
