*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--radius:10px;--font:system-ui, -apple-system, sans-serif;--danger:#e05555}[data-theme=dark],:root:not([data-theme]){--bg:#1a1630;--surface:#231f3d;--border:#352f58;--text:#f7ece1;--text-muted:#cac4ce;--accent:#725ac1;--accent-hover:#8d86c9;--card-bg:#a9a5b0;--card-border:#dad5f3;--card-text:#242038;--card-muted:#8d86c9;--card-hover:#725ac114;--card-active:#725ac133;--card-today-bg:#f0edf7;--card-today-border:#abacc5;--today-color:#4a2da8;--count-color:#725ac1;--heat-0:#231f3d;--heat-1:#4a3d80;--heat-2:#725ac1;--heat-3:#8d86c9;--heat-4:#cac4ce}[data-theme=light]{--bg:#e8ede6;--surface:#f4f7f3;--border:#c5cfbf;--text:#2b3328;--text-muted:#6b7a65;--accent:#5a8a5c;--accent-hover:#6d9e6f;--card-bg:#f0f4ee;--card-border:#c5cfbf;--card-text:#2b3328;--card-muted:#7d8d77;--card-hover:#5a8a5c14;--card-active:#5a8a5c33;--card-today-bg:#d4e4cf;--card-today-border:#a3bf9c;--today-color:#3d6b3e;--count-color:#8b9e86;--heat-0:#eff3edb1;--heat-1:#c1d6ba;--heat-2:#8bb882;--heat-3:#5a8a5c;--heat-4:#3a6b3c}body{background:var(--bg);color:var(--text);font-family:var(--font);min-height:100dvh}.login-container{flex-direction:column;justify-content:center;align-items:center;gap:2rem;min-height:100dvh;display:flex}.login-container h1{letter-spacing:-.04em;font-size:2.5rem}.google-signin-wrap{width:100%;max-width:320px}.auth-divider{width:100%;max-width:320px;color:var(--text-muted);align-items:center;gap:.75rem;font-size:.8rem;display:flex}.auth-divider:before,.auth-divider:after{content:"";border-top:1px solid var(--border);flex:1}.auth-tabs{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);gap:0;width:100%;max-width:320px;padding:3px;display:flex}.auth-tab{color:var(--text-muted);border-radius:calc(var(--radius) - 2px);background:0 0;flex:1;padding:.4rem .75rem;font-size:.875rem}.auth-tab.active{background:var(--accent);color:#fff}.auth-tab:not(.active):hover{color:var(--text)}.login-form{flex-direction:column;gap:.75rem;width:100%;max-width:320px;display:flex}.app{max-width:900px;margin:0 auto;padding:1.5rem 1rem}.app-header{justify-content:space-between;align-items:center;margin-bottom:2rem;display:flex}.header-actions{gap:.5rem;display:flex}.nav-tabs{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);flex:1;gap:2px;padding:3px;display:flex}.nav-tab{text-align:center;color:var(--text-muted);border-radius:calc(var(--radius) - 3px);background:0 0;flex:1;padding:.35rem .9rem;font-size:.875rem;font-weight:500}.nav-tab.active{background:var(--accent);color:#fff}.nav-tab:not(.active):hover{color:var(--text)}@keyframes slideFromRight{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}@keyframes slideFromLeft{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}.view-slide-left{animation:.22s forwards slideFromRight}.view-slide-right{animation:.22s forwards slideFromLeft}button{cursor:pointer;font-family:var(--font);border-radius:var(--radius);border:none;padding:.5rem 1rem;font-size:.9rem;transition:opacity .1s}button:disabled{opacity:.5;cursor:not-allowed}.create-button{color:var(--text-muted);border-radius:var(--radius);background:0 0;border:none;padding:.1rem .4rem;font-size:1.4rem;line-height:1}.create-button:hover:not(:disabled){color:var(--text);background:var(--border)}.logout-button{color:var(--text-muted);opacity:.4;background:0 0;border:none;padding:.25rem .5rem;font-size:.75rem}.logout-button:hover{opacity:.8}.app-footer{border-top:1px solid var(--border);justify-content:center;align-items:center;gap:1rem;margin-top:3rem;padding-top:1.5rem;display:flex}.theme-toggle{color:var(--text-muted);opacity:.4;background:0 0;border:none;padding:.25rem .5rem;font-size:1rem;line-height:1}.theme-toggle:hover{opacity:.8}.button-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1rem;display:grid}.button-card{background:var(--card-bg);border:1px solid var(--card-border);border-radius:var(--radius);transition:background .2s,border-color .2s;position:relative}.button-card.tapped-today{background:var(--card-today-bg);border-color:var(--card-today-border)}.button-card .tap-button{color:var(--card-text)}.button-card .tap-count{color:var(--count-color)}.button-card .today-count{color:var(--today-color)}.button-card .last-tapped,.button-card .card-menu-button{color:var(--card-muted)}.button-card .card-menu-button:hover{background:var(--card-border);color:var(--card-text)}.favorite-button{color:#ccc;cursor:pointer;z-index:1;background:0 0;border:none;border-radius:4px;padding:.1rem .2rem;font-size:.75rem;line-height:1;position:absolute;top:.35rem;left:.4rem}.favorite-button.is-favorite,.favorite-button:hover{color:#e05a7a}.tap-button{border-radius:var(--radius);text-align:center;width:100%;color:var(--text);background:0 0;flex-direction:column;justify-content:center;align-items:center;gap:.35rem;padding:1.5rem 1rem;display:flex}.tap-button:hover{background:var(--card-hover)}.tap-button:active{background:var(--card-active);transform:scale(.97)}.button-name{letter-spacing:-.02em;font-size:1.3rem;font-weight:700}.tap-counts{align-items:baseline;gap:.6rem;display:flex}.tap-count{color:var(--accent);opacity:.45;font-size:.8rem;font-weight:400}.today-count{color:#4a2da8;font-size:1.1rem;font-weight:700}.tap-slash{color:var(--accent);opacity:.35;margin:0 .1rem;font-size:.8rem;font-weight:400}.last-tapped{color:var(--text-muted);font-size:.72rem}.card-menu{position:absolute;top:.4rem;right:.4rem}.card-menu-button{width:1.75rem;height:1.75rem;color:var(--text-muted);letter-spacing:.05em;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:1rem;display:flex}.card-menu-button:hover{background:var(--border);color:var(--text)}.card-dropdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);z-index:10;min-width:130px;position:absolute;top:calc(100% + 4px);right:0;overflow:hidden;box-shadow:0 4px 16px #0006}.card-dropdown button{width:100%;color:var(--text);text-align:left;background:0 0;border-radius:0;padding:.55rem .9rem;font-size:.875rem;display:block}.card-dropdown button:hover{background:var(--border)}.card-dropdown .dropdown-danger{color:var(--danger)}.dropdown-confirm{flex-direction:column;gap:.5rem;padding:.6rem .9rem;display:flex}.dropdown-confirm span{color:var(--text-muted);font-size:.8rem}.dropdown-confirm-actions{gap:.4rem;display:flex}.dropdown-confirm-actions button{border-radius:var(--radius);border:1px solid var(--border);color:var(--text);background:0 0;flex:1;width:auto;padding:.35rem .5rem;font-size:.8rem}.dropdown-confirm-actions .dropdown-danger{border-color:var(--danger)}.empty-state{color:var(--text-muted);text-align:center;margin-top:4rem}.modal-overlay{z-index:100;background:#24203899;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:1rem;width:100%;max-width:360px;padding:1.5rem;display:flex}.modal h2{font-size:1.1rem;font-weight:600}.modal input{width:100%}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:.5rem;display:flex}input[type=text],input[type=email],input[type=password]{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-family:var(--font);outline:none;width:100%;padding:.6rem .8rem;font-size:.95rem;transition:border-color .15s}input:focus{border-color:var(--accent)}.type-toggle{border:1px solid var(--border);border-radius:var(--radius);gap:0;margin-top:.5rem;display:flex;overflow:hidden}.type-toggle-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:0;flex:1;padding:.5rem .75rem;font-size:.9rem;transition:background .15s,color .15s}.type-toggle-btn.active{background:var(--accent);color:#fff}.type-toggle-btn:not(.active):hover{background:var(--border);color:var(--text)}.numeric-stats{color:var(--card-muted);font-size:.8rem}.numeric-input-area{flex-direction:column;flex:1;align-items:flex-start;gap:.5rem;padding:.75rem 1rem;display:flex}.numeric-input-area .button-name{color:var(--card-text);font-size:1.1rem;font-weight:600}.numeric-input-row{align-items:stretch;gap:.4rem;width:100%;display:flex}.numeric-value-input{appearance:none;background:var(--card-hover);border:1px solid var(--accent);border-radius:var(--radius);box-sizing:border-box;box-shadow:none;color:var(--card-text);width:0;height:2.25rem;font-size:1.1rem;font-weight:600;font-family:var(--font);outline:none;flex:1;padding:0 .5rem;transition:none}.numeric-submit,.numeric-cancel{border:1px solid var(--border);border-radius:var(--radius);box-sizing:border-box;color:var(--card-text);cursor:pointer;background:0 0;flex-shrink:0;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;padding:0;font-size:1rem;display:flex}.numeric-submit{border-color:var(--accent);color:var(--accent)}.numeric-submit:hover{background:var(--accent);color:#fff}.numeric-cancel:hover{background:var(--card-hover)}.form-error{color:var(--danger);font-size:.85rem}.error-banner{border:1px solid var(--danger);border-radius:var(--radius);color:var(--danger);background:#d930251a;justify-content:space-between;align-items:center;margin-bottom:1rem;padding:.75rem 1rem;display:flex}.error-banner button{color:var(--danger);background:0 0;padding:0;font-size:1.1rem}.history-modal{flex-direction:column;max-width:480px;max-height:80dvh;display:flex}.modal-header{justify-content:space-between;align-items:center;display:flex}.modal-close{color:var(--text-muted);background:0 0;border-radius:4px;justify-content:center;align-items:center;width:1.75rem;height:1.75rem;padding:0;font-size:1.4rem;display:flex}.modal-close:hover{color:var(--text);background:var(--border)}.history-add-row{border-bottom:1px solid var(--border);align-items:center;gap:.5rem;padding:.75rem 0;display:flex}.add-entry-button{color:var(--accent);background:0 0;padding:.3rem 0;font-size:.875rem}.add-entry-button:hover{color:var(--accent-hover)}.history-list{flex:1;margin-top:.25rem;overflow-y:auto}.history-empty{color:var(--text-muted);text-align:center;padding:2rem 0;font-size:.9rem}.history-tap-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:.5rem;padding:.6rem 0;font-size:.9rem;display:flex}.history-tap-row:last-child{border-bottom:none}.history-date{color:var(--text)}.history-value{color:var(--accent);min-width:3rem;font-weight:600}.history-editable{cursor:pointer}.history-editable:hover{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.history-tap-row .history-value-input,.history-add-row .history-value-input{flex-shrink:0;width:5rem;padding:.25rem .4rem;font-size:.9rem}.history-actions{flex-shrink:0;gap:.25rem;display:flex}.history-action-btn{color:var(--text-muted);background:0 0;border-radius:4px;padding:.2rem .4rem;font-size:1rem}.history-action-btn:hover{background:var(--border);color:var(--text)}.history-action-btn.danger:hover{color:var(--danger)}.history-edit-block{flex-direction:column;flex:1;gap:.4rem;display:flex}.history-edit-inputs{align-items:center;gap:.4rem;display:flex}.history-edit-actions{justify-content:flex-end;gap:.4rem;display:flex}.history-tap-row input[type=datetime-local]{flex:1;padding:.3rem .5rem;font-size:.85rem}.stats-top-row{align-items:center;gap:.6rem;margin-bottom:.5rem;display:flex}.stats-filter-toggle{border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius);background:0 0;align-items:center;padding:.3rem .5rem;display:flex}.stats-filter-toggle:hover{color:var(--text);border-color:var(--text-muted)}.stats-filter-toggle.active{background:var(--accent);border-color:var(--accent);color:#fff}.stats-legend-row{margin-bottom:1rem}.stats-presets{gap:.4rem;display:flex}.stats-preset{border:1px solid var(--border);color:var(--text-muted);background:0 0;border-radius:999px;padding:.25rem .65rem;font-size:.78rem}.stats-preset.active{background:var(--accent);border-color:var(--accent);color:#fff}.stats-preset:hover:not(.active){border-color:var(--text-muted);color:var(--text)}.stats-view{grid-template-columns:repeat(auto-fit, minmax(var(--heatmap-min-w,200px), 1fr));gap:2.5rem;padding-top:.5rem;display:grid}.heatmap-block{flex-direction:row;align-items:flex-start;gap:.5rem;display:flex}.heatmap-label-vert{writing-mode:vertical-lr;color:var(--text);letter-spacing:-.01em;flex-shrink:0;align-self:center;font-size:.875rem;font-weight:600;transform:rotate(180deg)}.heatmap-header{justify-content:space-between;align-items:baseline;display:flex}.heatmap-title{letter-spacing:-.01em;font-size:1rem;font-weight:600}.heatmap-total{color:var(--text-muted);font-size:.8rem}.heatmap-scroll{-webkit-overflow-scrolling:touch;flex:1;min-width:0;padding-bottom:4px;overflow-x:auto}.heatmap-scroll svg{margin:0 auto;display:block}.heatmap-month{fill:var(--text-muted);font-size:10px;font-family:var(--font)}.heatmap-legend{align-items:center;gap:4px;display:flex}.heatmap-legend-label{color:var(--text-muted);font-size:.75rem}.heatmap-legend svg{display:block}.chart-wrap{flex:1;min-width:0}.chart-svg{display:block;overflow:visible}.chart-line{fill:none;stroke:var(--accent);stroke-width:1.5px;stroke-linejoin:round;stroke-linecap:round}.chart-dot{fill:var(--accent)}.chart-grid{stroke:var(--border);stroke-width:1px}.chart-avg{stroke:var(--accent);stroke-width:1px;stroke-dasharray:4 3;opacity:.45}.chart-axis-label{fill:var(--text-muted);font-size:9px;font-family:var(--font)}.chart-empty{fill:var(--text-muted);font-size:13px;font-family:var(--font)}.admin-view{padding:1rem 0}.admin-heading{color:var(--text);margin-bottom:1rem;font-size:1rem;font-weight:600}.admin-table{border-collapse:collapse;width:100%;font-size:.875rem}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--border);padding:.5rem .75rem}.admin-table th{color:var(--text-muted);font-weight:600}.cookie-banner{background:var(--surface);border-top:1px solid var(--border);z-index:200;color:var(--text-muted);justify-content:center;align-items:center;gap:1rem;padding:.75rem 1rem;font-size:.8rem;display:flex;position:fixed;bottom:0;left:0;right:0}.cookie-banner button{background:var(--accent);color:#fff;border-radius:var(--radius);cursor:pointer;border:none;flex-shrink:0;padding:.35rem 1.2rem;font-size:.85rem}.cookie-banner button:hover{background:var(--accent-hover)}
