@charset "UTF-8";
.patterns-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px 20px}.pattern{min-width:0}.pattern-value{font-size:1.7rem;letter-spacing:-.04em;font-weight:600;line-height:1.2;margin-top:12px;font-variant-numeric:tabular-nums}.pattern-help{margin-top:25px;padding-top:18px;border-top:1px solid var(--line);font-size:.8125rem;color:var(--muted);line-height:1.65}.pattern-help summary{color:var(--accent);cursor:pointer;padding:5px 0}.pattern-help p{margin-top:12px}.pattern-help a{color:var(--accent)}@media(max-width:600px){.patterns-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:25px 14px}.pattern-value{font-size:1.45rem}}
:root{color-scheme:dark;--bg:#0b1018;--panel:#111823;--line:#253041;--muted:#a0aec1;--text:#edf2fa;--accent:#afa6ff;--cell:14px;--gap:4px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:16px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);min-height:100vh}button,input,select{font:inherit}button{cursor:pointer;touch-action:manipulation}button:disabled{cursor:default}button,select,input{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:4px}button svg{width:23px;height:23px;flex-shrink:0}button{color:inherit}h1,h2,h3,p{margin:0}h1{font-size:1.4rem;letter-spacing:-.035em;font-weight:650}h2{font-size:1.15rem;letter-spacing:-.025em;font-weight:600}h3{font-size:1rem;font-weight:600}.shell{max-width:1080px;margin:auto;padding:40px 28px 24px;padding-top:max(40px,env(safe-area-inset-top));padding-bottom:max(24px,env(safe-area-inset-bottom))}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:32px}.brand{display:flex;align-items:center;gap:13px}.brand-icon{display:grid;place-items:center;width:46px;height:46px;border-radius:14px;background:#24243e;color:var(--accent);border:1px solid #39365a}.brand-icon svg{width:25px;height:25px}.brand p{font-size:.875rem;color:var(--muted);margin-top:5px}.icon-button{width:44px;height:44px;background:transparent;border:1px solid var(--line);border-radius:12px;display:grid;place-items:center;color:var(--muted);font-size:1.6rem}.icon-button:hover{background:#1a2433;color:var(--text)}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:22px}.stat{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:21px 22px}.stat-label{font-size:.875rem;color:#b6c2d2}.stat-value{font-size:2rem;letter-spacing:-.055em;font-weight:620;margin-top:13px;line-height:1.1;min-height:39px;font-variant-numeric:tabular-nums;white-space:nowrap}.stat-value span{font-size:1rem;letter-spacing:-.01em;font-weight:450;color:var(--muted)}.stat-caption{font-size:.8125rem;color:var(--muted);margin-top:11px;line-height:1.5}.session-card{display:flex;align-items:center;justify-content:space-between;gap:26px;border:1px solid #3b365d;background:#171a2d;border-radius:18px;padding:27px;margin-bottom:28px}.eyebrow{font-size:.75rem;letter-spacing:.12em;font-weight:650;color:var(--accent);margin-bottom:9px}.session-copy h2{font-size:1.4rem}.session-copy p{font-size:.875rem;color:#b6bdd1;margin-top:10px;line-height:1.6;max-width:360px}.session-copy .text-button{margin-top:9px}.session-actions{display:flex;gap:12px;flex-shrink:0}.sleep-button,.wake-button{display:flex;align-items:center;justify-content:center;gap:10px;min-height:58px;padding:17px 22px;border-radius:13px;font-size:.9375rem;font-weight:600;border:1px solid transparent}.sleep-button{background:#b6adff;color:#1a1738;box-shadow:0 6px 20px #0002}.sleep-button:hover:not(:disabled){background:#c9c2ff}.sleep-button:disabled{background:#29283e;color:#9e95c0;border-color:#484064;box-shadow:none}.wake-button{background:#222a3e;color:#dae0f5;border-color:#454962}.wake-button:disabled{opacity:.45}.wake-button:hover:not(:disabled){background:#39405c;border-color:#8480aa}.panel{border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:25px;margin-bottom:22px}.section-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:25px}.section-heading p{color:var(--muted);font-size:.875rem;margin-top:7px;line-height:1.5}.year-picker select{background:#18212e;border:1px solid var(--line);border-radius:9px;padding:10px 13px;font-size:.875rem;color:var(--text);min-height:42px}.calendar-wrap{display:flex;gap:9px}.weekday-labels{flex-shrink:0;width:30px;margin-top:26px;display:grid;grid-template-rows:repeat(7,var(--cell));row-gap:var(--gap);font-size:.75rem;color:var(--muted);line-height:var(--cell)}.weekday-labels span:nth-child(1){grid-row:1}.weekday-labels span:nth-child(2){grid-row:3}.weekday-labels span:nth-child(3){grid-row:5}.calendar-scroll{overflow-x:auto;min-width:0;scrollbar-width:thin;scrollbar-color:#435167 transparent;padding-bottom:10px;overscroll-behavior-x:contain}.months{height:26px;display:grid;grid-auto-columns:var(--cell);column-gap:var(--gap);font-size:.75rem;color:var(--muted);width:max-content}.months span{white-space:nowrap}.heatmap{display:grid;grid-template-rows:repeat(7,var(--cell));grid-auto-flow:column;grid-auto-columns:var(--cell);gap:var(--gap);width:max-content}.heatmap button{width:var(--cell);height:var(--cell);border-radius:3px;border:1px solid #ffffff06;background:#263043;padding:0;position:relative}.heatmap button:hover{outline:1px solid #b8c6dc;outline-offset:2px;z-index:1}.heatmap button.today{box-shadow:0 0 0 1px #9faec6;outline-offset:2px}.heatmap button.future{background:#182130;border-color:#26304360;cursor:default}.heatmap button.outside{visibility:hidden}.level-1,.heatmap .level-1{background:#c1535b}.level-2,.heatmap .level-2{background:#c97950}.level-3,.heatmap .level-3{background:#c7a754}.level-4,.heatmap .level-4{background:#64ac76}.level-5,.heatmap .level-5{background:#35c689}.calendar-footer{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-top:13px}.calendar-hint{font-size:.8125rem;color:var(--muted)}.legend{display:flex;gap:5px;align-items:center;flex-shrink:0}.legend span{font-size:.75rem;color:var(--muted);margin:0 3px}.legend i{display:block;width:11px;height:11px;border-radius:2px}.goal-summary{margin-top:22px;border-top:1px solid var(--line);padding-top:18px;display:flex;gap:9px;align-items:center;color:var(--muted);font-size:.875rem;flex-wrap:wrap}.goal-dot{width:7px;height:7px;background:#35c689;border-radius:50%}.goal-summary .text-button{margin-left:auto}.text-button{border:0;background:none;padding:6px 0;color:var(--accent);font-size:.875rem;min-height:32px}.text-button:hover{color:#d0caff;text-decoration:underline}.small-button{padding:10px 14px;border-radius:10px;background:#1b2534;border:1px solid #334055;color:#dae3ef;font-size:.875rem;min-height:42px;white-space:nowrap}.small-button:hover{background:#29364a}.empty-state{text-align:center;padding:28px 10px 34px}.empty-line{display:block;margin:0 auto 20px;width:52px;height:4px;background:#3d4863;border-radius:4px}.empty-state h3{color:#d9e2ee}.empty-state p{font-size:.875rem;color:var(--muted);margin-top:9px}.history-row{width:100%;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:16px 0;background:none;border:0;border-top:1px solid var(--line);text-align:left}.history-date{font-size:.9375rem;font-weight:550}.history-time{font-size:.8125rem;color:var(--muted);margin-top:6px}.history-result{display:flex;align-items:center;gap:13px;font-size:1.2rem;font-weight:580;font-variant-numeric:tabular-nums;white-space:nowrap}.history-color{display:block;width:12px;height:12px;border-radius:3px}.history-row:hover .history-date{color:var(--accent)}.page-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 3px;color:var(--muted);font-size:.8125rem}.page-footer .text-button{font-size:.8125rem}.modal{background:#131c29;color:var(--text);border:1px solid #38455b;border-radius:19px;width:calc(100% - 32px);max-width:460px;padding:26px;max-height:calc(100dvh - 40px);overflow:auto;box-shadow:0 24px 100px #0008}.modal::backdrop{background:#03060bbd;backdrop-filter:blur(5px)}.modal-header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:26px}.modal-header .icon-button{border:0}.modal label{display:block;font-size:.875rem;color:#c6d3e5;margin:20px 0 10px}.modal input:not([type=hidden]):not([type=file]),.modal select{width:100%;height:48px;min-width:0;padding:12px;border:1px solid #3a485e;background:#0d1420;color:var(--text);border-radius:10px}.modal input[type=datetime-local]{font-size:1rem}.input-unit{display:flex;align-items:center;gap:13px}.input-unit input{max-width:130px}.input-unit span{color:var(--muted);font-size:.9375rem}.field-help{font-size:.8125rem;color:var(--muted);line-height:1.65;margin-top:13px}.primary-button{background:#b6adff;color:#211c44;border:0;padding:13px 20px;border-radius:10px;font-weight:600;min-height:46px;font-size:.9375rem}.primary-button:hover{background:#cec7ff}#goal-form .primary-button{width:100%;margin-top:18px}.divider{height:1px;background:var(--line);margin:26px 0}.backup-actions{display:flex;gap:10px;margin-top:19px;flex-wrap:wrap}.form-actions{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-top:25px}.danger-button{border:1px solid #87494e;color:#ffadb5;background:#3a232c;border-radius:10px;padding:12px 15px;min-height:46px;font-size:.875rem}.duration-preview{margin-top:20px;color:var(--accent);font-size:1.1rem;font-variant-numeric:tabular-nums}.form-error{margin-top:12px;color:#ffb4bc;font-size:.875rem;line-height:1.5}.compact p{line-height:1.65}.install-steps{padding-left:22px;line-height:1.7;font-size:.9375rem}.install-steps li{padding-left:5px;margin-bottom:17px}.toast{position:fixed;bottom:max(22px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);border:1px solid #485674;box-shadow:0 10px 40px #0008;border-radius:12px;padding:14px 20px;background:#253148;color:#f1f5ff;max-width:calc(100% - 32px);width:max-content;font-size:.875rem;line-height:1.5;z-index:10}.notice{background:#38282d;color:#ffc6c5;border:1px solid #784d54;border-radius:12px;padding:14px;font-size:.875rem;line-height:1.5;margin-bottom:20px}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;padding:0}[hidden]{display:none!important}
@media(max-width:900px){.session-card{align-items:flex-start;flex-direction:column;gap:22px}.session-actions{width:100%}.session-actions button{flex:1}.stat{padding:19px 17px}.stat-value{font-size:1.8rem}.stats{gap:10px}}
@media(max-width:600px){:root{--cell:13px;--gap:4px}.shell{padding:27px 18px 22px;padding-top:max(27px,env(safe-area-inset-top));padding-bottom:max(22px,env(safe-area-inset-bottom))}.topbar{margin-bottom:25px}.brand-icon{width:43px;height:43px}.stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:11px;margin-bottom:18px}.stat{padding:18px}.stat-value{font-size:1.85rem}.stat-caption{font-size:.75rem;margin-top:8px}.session-card{padding:22px 19px;margin-bottom:21px}.session-copy h2{font-size:1.3rem}.session-copy p{font-size:.875rem}.session-actions{gap:10px}.session-actions button{padding:16px 11px;gap:8px;font-size:.875rem;min-height:57px}.session-actions button svg{width:20px}.panel{padding:22px 19px;margin-bottom:18px}.section-heading{gap:10px;margin-bottom:24px}.section-heading p{font-size:.8125rem}.calendar-footer{flex-direction:column;align-items:flex-start;gap:16px}.legend{align-self:flex-end}.goal-summary{gap:7px;font-size:.8125rem}.goal-summary .text-button{width:100%;text-align:left;margin-left:14px}.history-panel .section-heading p{max-width:205px}.small-button{padding:10px 11px;font-size:.8125rem}.modal{padding:22px}.history-result{font-size:1.05rem}.history-time{font-size:.75rem}.page-footer{font-size:.75rem}.page-footer .text-button{font-size:.8125rem}}
.stat-value{white-space:normal}.session-actions{flex-wrap:wrap}.session-actions button{min-width:140px}.history-row{flex-wrap:wrap}.history-time{line-height:1.5}.page-footer{flex-wrap:wrap}.goal-summary{line-height:1.6}
@media(prefers-reduced-motion:no-preference){button{transition:background .15s,color .15s,opacity .15s}.toast{animation:appear .15s ease-out}@keyframes appear{from{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}}
