/* Grove 1.0.0 · Reusable components use the g- prefix. No external dependencies. */
:root {
  color-scheme: light;
  --g-green-50:#F0FBF5; --g-green-100:#DBF6E7; --g-green-200:#B7EED1;
  --g-green-300:#89E5B7; --g-green-400:#5DDD9D; --g-green-500:#39C783;
  --g-green-600:#218653; --g-green-700:#1B6945; --g-green-800:#184F37;
  --g-green-900:#123C2D; --g-green-950:#0B281D;
  --g-accent:var(--g-green-400); --g-accent-hover:var(--g-green-300); --g-accent-pressed:var(--g-green-500);
  --g-on-accent:var(--g-green-950); --g-link:var(--g-green-700);
  --g-bg:#FFFFFF; --g-surface:#F3F5F3; --g-elevated:#FFFFFF; --g-ink:#171D19;
  --g-muted:#515C54; --g-subtle:#667269; --g-border:#D9DFDA; --g-input-border:#7D8B80;
  --g-soft:var(--g-green-100); --g-on-soft:var(--g-green-900);
  --g-danger:#B42332; --g-danger-bg:#FCE9EC; --g-success:#21653E; --g-success-bg:#E4F3E9;
  --g-warning:#715500; --g-warning-bg:#FFF2C2; --g-info:#18596B; --g-info-bg:#E2F3F6;
  --g-disabled-bg:#EDF0ED; --g-disabled-ink:#7A847C; --g-overlay:rgba(11,40,29,.48);
  --g-focus:#1B6945; --g-focus-gap:#FFFFFF;
  --g-orange:#FFC091; --g-yellow:#FFEB69; --g-blue:#A0E1E1; --g-pink:#FFD7EF;
  --g-purple:#260A2F; --g-gold:#3A341C; --g-charcoal:#21231D; --g-maroon:#3B101D;
  --g-font:Arial, Helvetica, sans-serif; --g-text-display:64px; --g-text-screen:40px; --g-text-section:32px; --g-text-subsection:24px; --g-text-title:20px; --g-text-large:18px; --g-text-body:16px; --g-text-caption:14px; --g-text-micro:12px; --g-mono:ui-monospace, SFMono-Regular, Consolas, monospace;
  --g-space-1:4px; --g-space-2:8px; --g-space-3:12px; --g-space-4:16px; --g-space-5:20px;
  --g-space-6:24px; --g-space-8:32px; --g-space-10:40px; --g-space-12:48px; --g-space-16:64px; --g-space-24:96px;
  --g-radius-sm:8px; --g-radius-md:16px; --g-radius-lg:24px; --g-radius-xl:32px; --g-radius-pill:999px;
  --g-shadow-sm:0 2px 8px #123C2D0A; --g-shadow-md:0 8px 24px #123C2D12; --g-shadow-lg:0 24px 80px #123C2D2B;
  --g-duration-fast:120ms; --g-duration-normal:200ms; --g-duration-slow:320ms;
  --g-ease:cubic-bezier(.2,.8,.2,1); --g-z-sticky:20; --g-z-menu:30; --g-z-dialog:50; --g-z-toast:60;
}
[data-theme="dark"] {
  color-scheme:dark; --g-bg:#101A14; --g-surface:#1A281F; --g-elevated:#213127; --g-ink:#EFF8F1;
  --g-muted:#BFCEC2; --g-subtle:#A4B9AA; --g-border:#3C5142; --g-input-border:#859D8D;
  --g-soft:#244A35; --g-on-soft:#B7EED1; --g-link:#89E5B7;
  --g-danger:#FFA6B2; --g-danger-bg:#441F27; --g-success:#9BE5B5; --g-success-bg:#203F2B;
  --g-warning:#FFE282; --g-warning-bg:#42381D; --g-info:#9ADAE9; --g-info-bg:#183B43;
  --g-disabled-bg:#26382D; --g-disabled-ink:#889A8E; --g-focus:#89E5B7; --g-focus-gap:#101A14;
}
*,*::before,*::after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}
body{margin:0;background:var(--g-bg);color:var(--g-ink);font:16px/1.5 var(--g-font);-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit}button,a,input,select,textarea{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:not-allowed}
a{color:var(--g-link);text-underline-offset:3px}h1,h2,h3,h4,p{margin:0}h1,h2,h3{line-height:1.12;letter-spacing:-.035em}h4{line-height:1.3}p+p{margin-top:12px}svg{flex-shrink:0}button svg{pointer-events:none}
:focus-visible{outline:2px solid var(--g-focus);outline-offset:3px;box-shadow:0 0 0 3px var(--g-focus-gap)}
[hidden]{display:none!important}.g-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.g-icon{width:24px;height:24px;display:inline-block;vertical-align:middle;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.g-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.g-stack{display:grid;gap:16px}.g-between{display:flex;align-items:center;justify-content:space-between;gap:16px}.g-muted{color:var(--g-muted)}.g-small{font-size:14px;line-height:1.45}.g-full{width:100%}
.g-btn{display:inline-flex;justify-content:center;align-items:center;gap:8px;min-height:48px;padding:11px 24px;border:1px solid transparent;border-radius:var(--g-radius-pill);background:var(--g-accent);color:var(--g-on-accent);font-size:16px;font-weight:700;line-height:1.4;text-decoration:none;transition:background var(--g-duration-fast),transform var(--g-duration-fast);white-space:normal}
.g-btn:hover{background:var(--g-accent-hover)}.g-btn:active{background:var(--g-accent-pressed);transform:translateY(1px)}
.g-btn--secondary{background:var(--g-soft);color:var(--g-on-soft)}.g-btn--secondary:hover{background:var(--g-green-200);color:var(--g-green-950)}
.g-btn--neutral{background:var(--g-surface);color:var(--g-ink)}.g-btn--neutral:hover{background:var(--g-border)}
.g-btn--danger{background:transparent;color:var(--g-danger);border-color:var(--g-danger)}.g-btn--danger:hover{background:var(--g-danger-bg)}
.g-btn--text{background:transparent;color:var(--g-link);text-decoration:underline;text-underline-offset:3px;padding-inline:12px}.g-btn--text:hover{background:var(--g-soft)}
.g-btn--sm{min-height:44px;padding:9px 18px;font-size:14px}.g-btn--lg{min-height:56px;padding:15px 32px;font-size:18px}
.g-btn--icon{width:48px;padding:10px;flex:none}.g-btn:disabled,.g-btn[aria-disabled="true"]{background:var(--g-disabled-bg);color:var(--g-disabled-ink);border-color:transparent;transform:none}
.g-btn[aria-busy="true"]{pointer-events:none}.g-spinner{width:20px;height:20px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;display:inline-block;animation:g-spin .8s linear infinite}
@keyframes g-spin{to{transform:rotate(360deg)}}
.g-field{display:grid;gap:8px;min-width:0}.g-field label,.g-label{font-weight:700;font-size:14px}.g-field input:not([type=checkbox]):not([type=radio]):not([type=range]),.g-field select,.g-field textarea,.g-input{width:100%;min-height:52px;background:var(--g-bg);border:1px solid var(--g-input-border);border-radius:var(--g-radius-sm);color:var(--g-ink);padding:13px 16px;min-width:0}
.g-field textarea{resize:vertical;min-height:112px}.g-field input:focus,.g-field select:focus,.g-field textarea:focus{border-color:var(--g-focus)}
.g-field input[aria-invalid=true]{border:2px solid var(--g-danger)}.g-field input:disabled{background:var(--g-disabled-bg);border-color:var(--g-border);color:var(--g-disabled-ink)}
.g-field .g-help{font-size:14px;color:var(--g-muted)}.g-field .g-help--error{color:var(--g-danger)}.g-field .g-help--success{color:var(--g-success)}.g-field .g-help--warning{color:var(--g-warning)}
.g-input-group{display:flex;gap:8px}.g-input-group select{width:100px;flex:none}.g-input-wrap{position:relative}.g-input-wrap input{padding-right:58px!important}.g-input-wrap button{position:absolute;right:4px;top:4px}
.g-choice{display:flex;align-items:center;gap:12px;min-height:48px;cursor:pointer}.g-choice input{width:22px;height:22px;accent-color:var(--g-green-700);flex:none}
.g-switch{appearance:none!important;position:relative;width:48px!important;height:28px!important;border:1px solid var(--g-input-border);background:var(--g-input-border);border-radius:999px;cursor:pointer;transition:background .2s}
.g-switch:before{content:"";position:absolute;width:20px;height:20px;left:3px;top:3px;border-radius:50%;background:white;transition:transform .2s}.g-switch:checked{background:var(--g-green-700);border-color:var(--g-green-700)}.g-switch:checked:before{transform:translateX(20px)}
.g-choice:has(input:disabled){opacity:.6;cursor:not-allowed}input[type=range]{accent-color:var(--g-green-700);width:100%;min-height:44px}fieldset{border:0;padding:0;margin:0}legend{font-weight:700;margin-bottom:8px}
.g-alert{display:flex;align-items:flex-start;gap:12px;padding:16px 20px;border-radius:var(--g-radius-md);background:var(--g-surface);color:var(--g-ink);font-size:16px}.g-alert p{margin-top:4px}.g-alert--success{background:var(--g-success-bg);color:var(--g-success)}.g-alert--danger{background:var(--g-danger-bg);color:var(--g-danger)}.g-alert--warning{background:var(--g-warning-bg);color:var(--g-warning)}.g-alert--info{background:var(--g-info-bg);color:var(--g-info)}
.g-alert--critical{background:#B42332;color:white}.g-alert--critical .g-btn{background:white;color:#B42332;margin-top:16px}
.g-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:12px;line-height:20px;font-weight:700;background:var(--g-surface);color:var(--g-muted);white-space:nowrap}.g-badge:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.g-badge--success{background:var(--g-success-bg);color:var(--g-success)}.g-badge--danger{background:var(--g-danger-bg);color:var(--g-danger)}.g-badge--warning{background:var(--g-warning-bg);color:var(--g-warning)}.g-badge--info{background:var(--g-info-bg);color:var(--g-info)}
.g-avatar{display:inline-grid;place-items:center;position:relative;width:48px;height:48px;border-radius:50%;background:var(--g-soft);color:var(--g-on-soft);font-weight:700;flex:none;font-size:16px;vertical-align:middle}.g-avatar--sm{width:32px;height:32px;font-size:12px}.g-avatar--lg{width:64px;height:64px;font-size:22px}.g-avatar--xl{width:80px;height:80px;font-size:28px}.g-avatar--pink{background:var(--g-pink);color:var(--g-maroon)}.g-avatar--blue{background:var(--g-blue);color:var(--g-charcoal)}.g-avatar__dot{position:absolute;right:0;top:0;width:12px;height:12px;border-radius:50%;background:var(--g-danger);border:2px solid var(--g-bg)}.g-avatar__check{position:absolute;right:-3px;bottom:-3px;background:var(--g-green-700);color:#fff;border:2px solid var(--g-bg);border-radius:50%;width:22px;height:22px;display:grid;place-items:center}.g-avatar__check svg{width:14px;height:14px}.g-avatar-group{display:flex;padding-left:8px}.g-avatar-group .g-avatar{margin-left:-8px;box-shadow:0 0 0 3px var(--g-bg)}.g-avatar-group--diagonal .g-avatar:nth-child(2){margin-top:24px}
.g-card{display:block;padding:24px;border:1px solid transparent;border-radius:var(--g-radius-lg);background:var(--g-surface);text-align:left;color:var(--g-ink);text-decoration:none}.g-card h3{font-size:24px;margin:16px 0 8px}.g-card p{color:var(--g-muted)}.g-card .g-btn{margin-top:24px}.g-card--interactive{cursor:pointer;transition:background .2s,transform .2s}.g-card--interactive:hover{background:var(--g-soft)}.g-card--interactive:active{transform:scale(.99)}.g-card[aria-pressed=true]{border-color:var(--g-focus);background:var(--g-soft)}
.g-list{display:grid;gap:4px}.g-list-item{display:flex;align-items:center;gap:16px;min-height:80px;padding:16px;border:0;border-radius:var(--g-radius-md);background:var(--g-bg);color:var(--g-ink);width:100%;text-align:left;text-decoration:none}.g-list-item .g-list-copy{flex:1;min-width:0}.g-list-item small{display:block;color:var(--g-muted);font-size:14px}.g-list-item:hover:is(button,a){background:var(--g-surface)}.g-list-item--inactive{opacity:.55}.g-list-item .g-choice{margin-left:auto}
.g-bottom-nav{display:flex;justify-content:space-around;gap:4px;background:var(--g-bg);padding:8px 8px max(8px,env(safe-area-inset-bottom));border-top:1px solid var(--g-border)}.g-bottom-nav button{display:grid;justify-items:center;gap:4px;flex:1;border:0;background:transparent;border-radius:12px;padding:8px 4px;min-height:64px;color:var(--g-muted);font-size:12px;line-height:1.3}.g-bottom-nav button[aria-current=page]{color:var(--g-link);font-weight:700}.g-bottom-nav button[aria-current=page] .g-icon{background:var(--g-soft);box-shadow:0 0 0 6px var(--g-soft);border-radius:6px}
.g-tabs{display:flex;gap:4px;border-bottom:1px solid var(--g-border);overflow-x:auto}.g-tabs [role=tab]{background:transparent;border:0;border-bottom:3px solid transparent;padding:12px 20px;min-height:48px;color:var(--g-muted);font-weight:700;white-space:nowrap}.g-tabs [aria-selected=true]{border-color:var(--g-link);color:var(--g-link)}.g-tabpanel{padding-top:24px}
.g-dialog{position:fixed;max-width:calc(100% - 32px);width:480px;max-height:calc(100dvh - 48px);margin:auto;border:0;border-radius:var(--g-radius-lg);background:var(--g-elevated);color:var(--g-ink);padding:32px;box-shadow:var(--g-shadow-lg);overflow:auto;z-index:var(--g-z-dialog)}.g-dialog::backdrop{background:var(--g-overlay)}.g-dialog h2{font-size:28px;margin:8px 0 16px}.g-dialog .close-dialog{margin-left:auto;display:flex}.g-dialog footer{display:flex;gap:12px;margin-top:32px}.g-sheet{top:auto;bottom:0;margin-bottom:0;width:540px;border-radius:24px 24px 0 0;padding-bottom:max(24px,env(safe-area-inset-bottom))}.g-sheet:before{content:"";display:block;width:40px;height:4px;background:var(--g-border);border-radius:99px;margin:-16px auto 8px}
.g-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:var(--g-z-toast);background:var(--g-green-950);color:white;padding:14px 20px;border-radius:16px;box-shadow:var(--g-shadow-md);max-width:calc(100vw - 32px);width:max-content;display:flex;gap:12px;align-items:center}.g-toast button{color:white;background:none;border:0;min-width:44px;min-height:44px}.g-toast:empty{display:none}
.g-table-wrap{overflow-x:auto;border:1px solid var(--g-border);border-radius:16px}.g-table{border-collapse:collapse;width:100%;font-size:14px}.g-table caption{text-align:left;padding:16px;font-weight:700}.g-table th{background:var(--g-surface);color:var(--g-muted);font-weight:700;text-align:left}.g-table th,.g-table td{padding:16px;border-bottom:1px solid var(--g-border)}.g-table tr:last-child td{border-bottom:0}.g-table th button{font:inherit;background:none;border:0;color:inherit;min-height:44px;display:inline-flex;align-items:center;gap:8px;text-align:left}.g-num{text-align:right!important;font-variant-numeric:tabular-nums;white-space:nowrap}.g-table td small{display:block;color:var(--g-muted)}
.g-upload{border:1px dashed var(--g-input-border);border-radius:16px;padding:24px;background:var(--g-surface)}.g-upload[data-drag=true]{background:var(--g-soft);border:2px solid var(--g-focus)}.g-upload input[type=file]{max-width:100%;font-size:14px;margin-top:16px}.g-upload input::file-selector-button{border:0;border-radius:99px;background:var(--g-soft);color:var(--g-on-soft);padding:12px 16px;font-weight:700;margin-right:12px;cursor:pointer;min-height:44px}.g-upload-result{display:flex;align-items:center;gap:12px;min-width:0}.g-upload-result span{overflow-wrap:anywhere;flex:1}
.g-accordion details{border-bottom:1px solid var(--g-border)}.g-accordion summary{font-weight:700;cursor:pointer;padding:20px 0;min-height:56px}.g-accordion details p{padding:0 0 20px;color:var(--g-muted)}
.g-tooltip-wrap{position:relative;display:inline-flex}.g-tooltip{visibility:hidden;opacity:0;position:absolute;bottom:calc(100% + 10px);left:50%;transform:translateX(-50%);background:var(--g-green-950);color:#fff;border-radius:8px;padding:8px 12px;width:190px;font-size:14px;z-index:var(--g-z-menu);text-align:center}.g-tooltip-wrap:hover .g-tooltip,.g-tooltip-wrap:focus-within .g-tooltip{visibility:visible;opacity:1}.g-tooltip-wrap[data-dismissed=true] .g-tooltip{visibility:hidden;opacity:0}
.g-progress{width:100%;height:8px;accent-color:var(--g-green-700);border:0;border-radius:99px;overflow:hidden}.g-progress::-webkit-progress-bar{background:var(--g-border)}.g-progress::-webkit-progress-value{background:var(--g-green-600)}.g-progress::-moz-progress-bar{background:var(--g-green-600)}
.g-skeleton{height:16px;border-radius:8px;background:var(--g-border);animation:g-pulse 1.6s ease-in-out infinite}.g-skeleton+.g-skeleton{margin-top:12px}@keyframes g-pulse{50%{opacity:.4}}
.g-empty{text-align:center;padding:32px 24px;display:grid;justify-items:center;gap:16px}.g-empty h3{font-size:24px}.g-empty p{max-width:330px;color:var(--g-muted)}
.g-notification{display:flex;gap:12px;padding:20px 0;border-bottom:1px solid var(--g-border)}.g-notification__dot{width:8px;height:8px;flex:none;margin-top:8px;background:var(--g-link);border-radius:50%}.g-notification[data-read=true] .g-notification__dot{background:transparent}.g-notification[data-read=true] strong{font-weight:400}.g-notification time{font-size:12px;color:var(--g-muted);white-space:nowrap}

/* Reusable typography roles. */
.g-display{font-size:var(--g-text-display);line-height:1;font-weight:700;letter-spacing:-.045em}.g-title-screen{font-size:var(--g-text-screen);line-height:1.1;font-weight:700;letter-spacing:-.035em}.g-title-section{font-size:var(--g-text-section);line-height:1.125;font-weight:700;letter-spacing:-.03em}.g-title-subsection{font-size:var(--g-text-subsection);line-height:1.167;font-weight:700;letter-spacing:-.025em}.g-title-body{font-size:var(--g-text-title);line-height:1.4;font-weight:700}.g-title-group{font-size:var(--g-text-body);line-height:1.5;font-weight:700}.g-body-large{font-size:var(--g-text-large);line-height:1.556}.g-body{font-size:var(--g-text-body);line-height:1.5}.g-caption{font-size:var(--g-text-caption);line-height:1.429}.g-micro{font-size:var(--g-text-micro);line-height:1.333;font-weight:700}.g-bold{font-weight:700}.g-link{color:var(--g-link);text-decoration:underline;text-underline-offset:3px;font-weight:700}.g-link--large{font-size:var(--g-text-large);line-height:1.556}
@media(max-width:600px){.g-display{font-size:40px;line-height:1.1}.g-title-screen{font-size:32px;line-height:1.125}}
