:root{--space-2xs: 2px;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--space-3xl: 64px}:root{--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 9999px}:root{--primary: #0d9488;--primary-light: #ccfbf1;--primary-border: #5eead4;--primary-dark: #0f766e;--secondary: #14b8a6;--secondary-light: #f0fdfa;--secondary-border: #99f6e4;--day-tracked-fill: #0d9488;--day-tracked-border: #0f766e;--day-rest-fill: #f0fdfa;--day-rest-border: #ccfbf1;--hm-0: color-mix(in srgb, var(--primary) 12%, #ffffff);--hm-50: color-mix(in srgb, var(--primary) 55%, #ffffff);--hm-100: var(--primary-dark);--hm-future: transparent;--warning: #fef3c7;--warning-border: #fcd34d;--warning-text: #92400e;--bg-top: #f3f4f6;--bg-bottom: #f5f7f7;--surface: #ffffff;--surface-soft: #f8fafc;--border: #e2e8f0;--border-strong: #cbd5e1;--text: #1e293b;--text-muted: #4f6b68;--accent: var(--primary);--accent-strong: var(--primary-dark);--accent-soft: var(--primary-light);--accent-soft-2: #f0fdfa;--success: var(--secondary);--success-border: var(--secondary-border);--day-tracked-rest: var(--day-rest-fill);--day-hover-border: var(--primary-border);--day-grid: #e2e8f0}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;scrollbar-gutter:stable;color:var(--text);background:linear-gradient(180deg,var(--bg-top) 0%,var(--bg-bottom) 100%);font-family:Geist,Segoe UI,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5}h1,h2,h3,h4,h5,h6{font-family:Plus Jakarta Sans,Segoe UI,Helvetica Neue,Arial,sans-serif}button,input,textarea,select{font:inherit}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.celebration-particle{position:fixed;border-radius:50%;pointer-events:none;z-index:9999;animation:explode .8s ease-out forwards}.celebration-particle.square{border-radius:3px}@keyframes explode{0%{transform:translate(0) scale(0);opacity:1}10%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--end-x),var(--end-y)) scale(.2);opacity:0}}
