:root{--bg: #0a0a0a;--surface: #161616;--surface-elevated: #232323;--border: #2a2a2a;--text: #f5f5f5;--text-muted: #9a9a9a;--accent: #01e7d9;--accent-strong: #01e7d9;--accent-strong-hover: #01ada3;--error: #f87171;--success: #34d399;--gold: #facc15;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}:root[data-theme=light]{--bg: #fafafa;--surface: #f0f0f0;--surface-elevated: #ffffff;--border: #e0e0e0;--text: #18181b;--text-muted: #6b6b6b;--accent: #00786b;--accent-strong: #00786b;--accent-strong-hover: #005f55;--error: #dc2626;--success: #047857;--gold: #b45309}*{box-sizing:border-box}html{scrollbar-gutter:stable;background:var(--bg)}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.login,.home,.category-list,.exercise-list,.exercise-detail,.update-pb,.calendar,.calendar-day-detail,.profile-page,.account-page,.settings-page,.help-page,.privacy-page{max-width:480px;margin:0 auto;padding:1rem}.privacy-back{display:inline-block;color:var(--text-muted);font-size:.875rem;margin-bottom:1.5rem}.privacy-page h2{margin-top:1.75rem}.privacy-page p{color:var(--text-muted);line-height:1.6}.home .btn-primary{margin-bottom:1.5rem}.home-section{margin-top:1.5rem}.home-section h2{margin-top:0}.app-header{position:sticky;top:0;z-index:10;background:var(--surface);border-bottom:1px solid var(--border)}.app-header-inner{max-width:480px;height:3.5rem;margin:0 auto;padding:0 1rem;display:grid;grid-template-columns:1fr auto 1fr;align-items:center}.app-header-slot{display:flex;align-items:center}.app-header-slot.app-header-slot-right{justify-content:flex-end}.app-header-logo-link{justify-self:center;display:flex}.app-header-logo{height:1.75rem;width:auto;display:block}img.theme-logo-light{display:none}:root[data-theme=light] img.theme-logo-dark{display:none}:root[data-theme=light] img.theme-logo-light{display:block}.app-header-back{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;margin-left:-.4rem;color:var(--text);background:none;border:none;border-radius:8px}.app-header-back:hover{background:var(--border)}.app-header-menu-btn{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;margin-right:-.4rem;color:var(--text);background:none;border:none;border-radius:8px}.app-header-menu-btn:hover{background:var(--border)}.side-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;opacity:0;pointer-events:none;transition:opacity .25s ease;z-index:200}.side-menu-backdrop.open{opacity:1;pointer-events:auto}.side-menu{position:fixed;top:0;right:0;bottom:0;width:min(270px,78vw);display:flex;flex-direction:column;background:var(--surface);border-left:1px solid var(--border);transform:translate(100%);transition:transform .3s cubic-bezier(.32,.72,0,1),box-shadow .3s cubic-bezier(.32,.72,0,1);z-index:201;overflow-y:auto}.side-menu.open{transform:translate(0);box-shadow:-8px 0 24px #0006}.side-menu-profile{display:flex;align-items:center;gap:.75rem;padding:1.5rem 1.25rem;border-bottom:1px solid var(--border);color:inherit;text-decoration:none}.side-menu-profile .avatar,.side-menu-profile .avatar-placeholder{width:3rem;height:3rem;font-size:1.1rem;flex-shrink:0}.side-menu-profile>div{min-width:0}.side-menu-profile-name{display:block;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-menu-profile-link{display:flex;align-items:center;gap:.1rem;font-size:.8rem;color:var(--text-muted);margin-top:.15rem}.side-menu-links{list-style:none;padding:.5rem 0;margin:0;border-bottom:1px solid var(--border)}.side-menu-links a{display:flex;align-items:center;gap:.85rem;padding:.85rem 1.25rem;color:var(--text);text-decoration:none}.side-menu-links a svg{color:var(--text-muted);flex-shrink:0}.side-menu-links a .side-menu-kofi-icon{color:#ff5a16}.side-menu-links a:active{background:var(--surface-elevated)}.side-menu-footer{margin-top:auto;padding:1rem 1.25rem 1.5rem}.side-menu-signout{display:flex;align-items:center;gap:.85rem;width:100%;padding:.6rem 0;background:none;border:none;font-size:1rem;color:var(--error)}.side-menu-version{margin:.75rem 0 0;font-size:.75rem;color:var(--text-muted)}.exercise-list ul{list-style:none;padding:0}.exercise-list ul li{border-bottom:1px solid var(--border)}.exercise-list ul a{display:block;padding:.75rem 0;color:inherit;text-decoration:none}.category-grid{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem}.category-grid a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem 1rem;background:var(--surface);border:1px solid var(--border);border-radius:12px;color:var(--text);text-decoration:none;text-align:center;transition:border-color .15s,background .15s}.category-grid a:active{background:var(--surface-elevated);border-color:var(--accent-strong)}.category-icon{width:32px;height:32px;color:var(--accent-strong);flex-shrink:0}.exercise-list-heading{display:flex;justify-content:center;margin:1rem 0 1.5rem}.exercise-list-heading .category-icon{width:48px;height:48px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.exercise-list{padding-bottom:5.5rem}.add-exercise-bar{position:fixed;left:0;right:0;bottom:0;z-index:10;background:var(--surface);border-top:1px solid var(--border)}.add-exercise-bar-inner{max-width:480px;margin:0 auto;padding:.75rem 1rem}.add-exercise-bar-inner .error{margin:0 0 .5rem;font-size:.875rem}.add-exercise-page{max-width:480px;margin:0 auto;padding:1rem}.add-exercise-page form{display:flex;flex-direction:column;gap:1rem;margin-top:1rem}.add-exercise-page label{display:flex;flex-direction:column;gap:.4rem;font-size:.875rem;color:var(--text-muted)}.add-exercise-page input,.add-exercise-page textarea{padding:.7rem .8rem;font-size:1rem;font-family:inherit;resize:vertical}.add-exercise-page fieldset{border:1px solid var(--border);border-radius:8px;display:flex;gap:1rem}.add-exercise-page fieldset label{flex-direction:row;align-items:center;gap:.4rem;color:var(--text)}.exercise-info{margin-top:1.5rem}.exercise-info p{margin:.5rem 0}.exercise-info .exercise-info-label{color:var(--text-muted);font-size:.875rem;text-transform:uppercase;letter-spacing:.04em;margin-top:1rem}.update-pb-form{display:flex;flex-direction:column;gap:1.25rem;margin-top:1rem}.update-pb-form label{display:flex;flex-direction:column;gap:.4rem;font-size:.875rem;color:var(--text-muted)}.update-pb-form input{padding:.7rem .8rem;font-size:1.1rem}.pb-label{margin:.5rem 0 0;color:var(--text-muted);font-size:.875rem;text-transform:uppercase;letter-spacing:.04em}.pb-value{font-size:2rem;font-weight:700;margin:1rem 0;color:var(--gold)}.hint{font-size:.875rem;color:var(--text-muted)}.pb-history{list-style:none;padding:0;max-height:19rem;overflow-y:auto}.pb-history li{display:flex;justify-content:space-between;padding:.5rem 0;border-bottom:1px solid var(--border)}.pb-history-date{color:var(--text-muted)}.progress-chart,.weekly-activity-chart{margin-top:1.5rem}.weekly-bar{transform-box:fill-box;transform-origin:bottom;animation:bar-grow .4s cubic-bezier(.32,.72,0,1) backwards}@keyframes bar-grow{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.chart-tooltip{background:var(--surface-elevated);border:1px solid var(--border);border-radius:6px;padding:.5rem .75rem;font-size:.8rem;box-shadow:0 8px 24px #00000080}.chart-tooltip p{margin:0}.chart-tooltip .chart-tooltip-value{margin-top:.15rem}.chart-tooltip-date{color:var(--text-muted)}.chart-tooltip-value{color:var(--text);font-weight:600}.chart-tooltip-pb{color:var(--gold)}.quick-add{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}.quick-add a{display:block;padding:.6rem .9rem;background:var(--surface);border:1px solid var(--border);border-radius:10px;text-decoration:none;color:var(--text)}.quick-add a:active{background:var(--surface-elevated)}.recent-pbs{list-style:none;padding:0}.recent-pbs li{display:flex;justify-content:space-between;gap:.5rem;padding:.5rem 0;border-bottom:1px solid var(--border)}.recent-pb-name{flex:1}.recent-pb-date{color:var(--text-muted)}.section-heading{display:flex;align-items:center;justify-content:space-between}.section-heading h2{margin:0}.section-heading-icon{display:flex;color:var(--text-muted)}.section-heading-icon:active{color:var(--text)}.empty-state{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:2.5rem 1rem;color:var(--text-muted);text-align:center}.empty-state svg{color:var(--border)}.empty-state p{margin:0}.recent-days{list-style:none;padding:0}.recent-days a{display:flex;justify-content:space-between;padding:.75rem 0;color:inherit;border-bottom:1px solid var(--border)}.recent-days-count{color:var(--text-muted);font-size:.875rem}.calendar-nav{display:flex;align-items:center;justify-content:space-between}.calendar-nav h1{margin:0;font-size:1.25rem}.calendar-nav button{background:none;border:none;font-size:1.25rem;padding:.25rem .75rem}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.25rem;margin-top:.75rem}.calendar-weekdays{margin-top:1rem;text-align:center;color:var(--text-muted);font-size:.8rem}.calendar-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;color:var(--text);position:relative}.calendar-cell.is-today{border:1px solid var(--border)}.calendar-cell.is-outside-month{color:var(--text-muted)}.calendar-cell.has-entry{background:var(--surface);font-weight:600}.calendar-cell.has-entry:after{content:"";position:absolute;bottom:6px;width:4px;height:4px;border-radius:50%;background:var(--accent-strong)}input,textarea,select{background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);font-family:inherit}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}button,.btn{display:inline-block;text-align:center;padding:.6rem 1rem;font-size:1rem;font-family:inherit;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer}.page-loading{min-height:100vh;display:flex;align-items:center;justify-content:center}.spinner{border:3px solid var(--border);border-top-color:var(--accent-strong);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error{color:var(--error)}.message{color:var(--success)}.btn-danger{display:block;width:100%;margin-top:1.5rem;background:none;border:1px solid var(--error);color:var(--error)}.btn-danger:disabled{opacity:.6;cursor:not-allowed}.text-accent{color:var(--accent)}.dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;padding:1rem;z-index:100}.dialog{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.25rem}.dialog-body{margin:0 0 1.25rem}.dialog-actions{display:flex;justify-content:flex-end;gap:.75rem}.dialog-actions button{width:auto}.avatar{width:3rem;height:3rem;border-radius:50%;object-fit:cover}.avatar-placeholder{display:flex;align-items:center;justify-content:center;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);font-weight:600}.avatar-picker{display:flex;flex-direction:column;align-items:center;gap:.5rem;margin-bottom:1.5rem}.avatar-picker .avatar,.avatar-picker .avatar-placeholder{width:5rem;height:5rem;font-size:1.5rem}.avatar-upload-label{color:var(--accent);font-size:.875rem;cursor:pointer}.avatar-upload-label input[type=file]{display:none}.profile-page form,.account-page form{display:flex;flex-direction:column;gap:1rem}.profile-page form label,.account-page form label{display:flex;flex-direction:column;gap:.4rem;font-size:.875rem;color:var(--text-muted)}.profile-page form input,.account-page form input{padding:.7rem .8rem;font-size:1rem}.profile-page form fieldset,.account-page form fieldset{border:1px solid var(--border);border-radius:8px;display:flex;gap:1rem}.profile-page form fieldset label,.account-page form fieldset label{flex-direction:row;align-items:center;gap:.4rem;color:var(--text)}.account-page section{margin-top:2rem}.account-details{list-style:none;padding:0;margin:1.25rem 0 0}.account-details li{display:flex;justify-content:space-between;gap:1rem;padding:.6rem 0;border-bottom:1px solid var(--border)}.account-details li span:first-child{color:var(--text-muted);flex-shrink:0}.account-details li span:last-child{text-align:right;min-width:0;overflow-wrap:break-word}.help-tips{list-style:none;padding:0;margin:.75rem 0 0}.help-tips li{position:relative;padding:.5rem 0 .5rem 1.1rem;color:var(--text-muted);line-height:1.5}.help-tips li:before{content:"";position:absolute;left:0;top:1.05rem;width:6px;height:6px;border-radius:50%;background:var(--accent-strong)}.help-feedback{margin-top:2rem}.help-feedback p{color:var(--text-muted);margin-bottom:1rem}.help-footer{margin-top:2.5rem;padding-top:1.25rem;border-top:1px solid var(--border);text-align:center}.help-footer a{color:var(--text-muted);font-size:.875rem}.input-row{display:flex;gap:.75rem}.input-row label{flex:1}.exercise-detail-image{display:block;max-width:220px;width:100%;aspect-ratio:1/1;object-fit:contain;margin:0 auto 1rem}.exercise-detail-heading{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem}.exercise-detail-heading h1{margin-bottom:0;min-width:0;overflow-wrap:break-word}.exercise-detail-heading a{flex-shrink:0}.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.not-found-page{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem;text-align:center}.not-found-page .btn-primary{width:auto;padding-left:2rem;padding-right:2rem;margin-top:1rem}.not-found-image{width:100%;max-width:280px;margin-bottom:1rem}.login-panel{width:100%;max-width:360px}.login-logo{display:block;width:100%;max-width:220px;margin:0 auto}.login-tagline{text-align:center;color:var(--text-muted);font-size:.9rem;margin:.75rem 0 0}.intro-transition{position:fixed;top:0;right:0;bottom:0;left:0;z-index:300;display:flex;align-items:center;justify-content:center;background:var(--bg);transform:translateY(0);transition:transform .55s cubic-bezier(.32,.72,0,1)}.intro-transition.wiping{transform:translateY(-100%)}.intro-transition-teal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:299;background:var(--accent-strong);transform:translateY(0);transition:transform .6s cubic-bezier(.32,.72,0,1);transition-delay:.6s}.intro-transition-teal.wiping{transform:translateY(-100%)}.intro-transition-logo{width:60%;max-width:220px}.segmented-toggle{position:relative;display:flex;border:1px solid var(--border);border-radius:999px;padding:.25rem}.login .segmented-toggle{margin:1.5rem 0}.settings-page h2{margin-bottom:.5rem}.settings-page h2:not(:first-of-type){margin-top:1.75rem}.settings-page select{width:100%;padding:.7rem .8rem;font-size:1rem}.segmented-toggle-indicator{position:absolute;top:.25rem;left:.25rem;width:calc(50% - .25rem);height:calc(100% - .5rem);border:1.5px solid var(--accent-strong);border-radius:999px;background:color-mix(in srgb,var(--accent-strong) 10%,transparent);transition:transform .3s cubic-bezier(.32,.72,0,1)}.segmented-toggle-indicator.slide-right{transform:translate(100%)}.segmented-toggle-option{position:relative;z-index:1;flex:1;padding:.6rem 1rem;border:none;border-radius:999px;background:none;color:var(--text-muted);font-size:.95rem;font-weight:600;font-family:inherit;cursor:pointer;transition:color .2s ease}.segmented-toggle-option.active{color:var(--accent-strong)}.login form{display:flex;flex-direction:column;gap:.9rem;margin-bottom:1.25rem}.login form label{display:flex;flex-direction:column;gap:.4rem;font-size:.875rem;color:var(--text-muted)}.login form input{padding:.7rem .8rem;font-size:1rem}.btn-primary{display:inline-block;text-align:center;width:100%;border:1px solid var(--accent-strong);border-radius:8px;font-family:inherit;font-size:1rem;cursor:pointer;background:none;color:var(--accent-strong);font-weight:600;padding:.75rem 1rem}.btn-primary:hover:not(:disabled){background:color-mix(in srgb,var(--accent-strong) 10%,transparent);border-color:var(--accent-strong-hover);color:var(--accent-strong-hover)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.login-divider{display:flex;align-items:center;gap:.75rem;margin:1.25rem 0;color:var(--text-muted);font-size:.8rem}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:var(--border)}.btn-google{width:100%;display:flex;align-items:center;justify-content:center;gap:.6rem;background:var(--surface);border-color:var(--border)}.btn-google:hover{background:#1f1f1f}.login button.link{display:block;width:100%;background:none;border:none;color:var(--accent);text-decoration:none;text-align:center;margin-top:1.25rem;padding:.5rem}.login button.link:hover{text-decoration:underline}.error-boundary{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:1.5rem;text-align:center}.error-boundary-detail{color:var(--text-muted);font-size:.8rem;font-family:monospace;max-width:320px;word-break:break-word}.toast-container{position:fixed;left:0;right:0;bottom:5.5rem;z-index:150;display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:0 1rem;pointer-events:none}.toast{width:100%;max-width:400px;display:flex;align-items:center;gap:.75rem;background:var(--surface-elevated);border:1px solid var(--border);border-left:3px solid var(--accent-strong);color:var(--text);padding:.75rem 1rem;border-radius:8px;font-size:.9rem;box-shadow:0 8px 24px #00000080;animation:toast-in .25s ease-out;pointer-events:auto}.toast.closing{animation:toast-out .25s ease-in forwards}.toast-message{flex:1}.toast-action{flex-shrink:0;width:auto;padding:.4rem .75rem;font-size:.85rem;background:var(--accent-strong);border-color:var(--accent-strong);color:#05201c;font-weight:600}.toast-close{flex-shrink:0;width:auto;padding:0 .25rem;background:none;border:none;color:var(--text-muted);font-size:1.25rem;line-height:1}@keyframes toast-in{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(50px)}}
