:root{color-scheme:dark;--bg:#101923;--surface:#172333;--raised:#203148;--line:#2c3d52;--ink:#e8f0fa;--muted:#a8bbd2;--blue:#93c3ff;--button:#214d7b;--pro:#ffb0aa;--pro-bg:#503234;--personal:#b5d7ff;--personal-bg:#254970;--shadow:0 16px 60px #0005;font-family:"Segoe UI",system-ui,sans-serif}
:root[data-theme=light]{color-scheme:light;--bg:#f2f5fa;--surface:#fff;--raised:#e8eff8;--line:#d5dfeb;--ink:#1a2b42;--muted:#536984;--blue:#195bbb;--button:#d9e8ff;--pro:#962638;--pro-bg:#fde6e5;--personal:#164f9c;--personal-bg:#e1edff;--shadow:0 16px 60px #1a385422}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink)}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:var(--ink);background:var(--raised);border:1px solid var(--line);border-radius:9px;padding:9px 13px;min-height:40px}button:hover{filter:brightness(1.12)}button:disabled{cursor:default;opacity:.5}button.primary{background:var(--button);color:var(--blue);border-color:var(--blue)}button.ghost{background:transparent;border-color:transparent}button.danger{color:var(--pro)}button.selected{background:var(--button);color:var(--blue);border-color:var(--blue)}a{color:var(--blue)}:focus-visible{outline:2px solid var(--blue);outline-offset:3px}input,select,textarea{width:100%;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:10px 12px;min-height:42px}textarea{resize:vertical}input[type=checkbox]{width:20px;min-height:20px;accent-color:var(--blue)}label{display:flex;flex-direction:column;gap:7px;font-size:14px}h1,h2,h3,p{margin:0}h1{font-size:23px;letter-spacing:-.4px}h2{font-size:20px}h3{font-size:16px}.muted{color:var(--muted);font-size:13px;line-height:1.6}.row{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.spread{justify-content:space-between}.stack{display:flex;flex-direction:column;gap:16px}.grow{flex:1;min-width:0}.small{font-size:12px}.loading{padding:60px;text-align:center}.empty{text-align:center;padding:44px 20px;color:var(--muted)}.badge{font-size:11px;border-radius:6px;padding:3px 6px;background:var(--raised);color:var(--muted)}
.login{max-width:440px;margin:8vh auto;padding:30px;background:var(--surface);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow)}.brand{display:flex;align-items:center;gap:12px;font-size:25px;font-weight:650}.brand img{width:43px;height:43px;object-fit:contain}.login .brand{margin-bottom:12px}.login form{margin-top:25px}.login .tabs{margin:20px 0 10px}.tabs{display:flex;gap:5px}.tabs button{flex:1;white-space:nowrap}.error{color:var(--pro);font-size:14px;line-height:1.5}
.workspace{height:100dvh;min-height:520px;display:grid;grid-template-columns:230px minmax(0,1fr);grid-template-rows:72px minmax(0,1fr)}.topbar{grid-column:1/-1;display:flex;align-items:center;padding:12px 25px;border-bottom:1px solid var(--line);gap:18px;background:var(--surface)}.topbar .brand{width:204px}.sync-status{flex:1;color:var(--muted);font-size:12px}.sidebar{padding:20px 15px;overflow:auto;border-right:1px solid var(--line);background:var(--surface)}.nav{display:flex;flex-direction:column;gap:7px;margin-bottom:27px}.nav button{text-align:left;padding:11px 14px;background:transparent;border-color:transparent}.nav .selected{background:var(--button);color:var(--blue)}.sidebar-title{font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--muted);margin:22px 0 12px}.sidebar .account{overflow-wrap:anywhere}.spaces{display:flex;gap:6px}.spaces button{padding:7px;font-size:12px;flex:1}.legend{display:flex;align-items:center;gap:9px;font-size:13px;margin:12px 0}.dot{width:9px;height:9px;border-radius:50%;background:var(--pro)}.dot.personal{background:var(--personal)}.content{min-width:0;min-height:0;display:flex;flex-direction:column}.content-header{padding:19px 24px 14px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}.content-header input{max-width:320px}.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 24px 14px}.toolbar h2{flex:1;min-width:170px}.toolbar button{font-size:13px}.view-selector{display:flex;gap:3px}.banner{margin:0 24px 12px;padding:10px 13px;border:1px solid var(--line);border-radius:8px;background:var(--pro-bg);font-size:13px;color:var(--pro)}.view{flex:1;min-height:0;overflow:auto;padding:0 24px 24px}.settings{max-width:940px;padding-top:8px}.panel{padding:20px;border:1px solid var(--line);border-radius:13px;background:var(--surface)}.panel + .panel{margin-top:18px}.settings .panel>.row{margin-bottom:13px}.setting-row{display:flex;gap:12px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}.setting-row .grow{line-height:1.7}.list{display:flex;flex-direction:column;gap:8px}.task-row{display:flex;align-items:center;gap:13px;border:1px solid var(--line);border-radius:10px;background:var(--surface);padding:13px 15px}.task-main{cursor:pointer;flex:1;min-width:0;text-align:left;background:transparent;border:0;padding:0}.task-title{font-weight:600;overflow-wrap:anywhere}.task-meta{font-size:12px;color:var(--muted);margin-top:5px;line-height:1.7}.done .task-title{text-decoration:line-through;color:var(--muted)}.pro-text{color:var(--pro)}.personal-text{color:var(--personal)}
.mini{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.mini button{min-height:29px;padding:3px;border:0;border-radius:6px;font-size:11px;background:transparent}.mini button.selected{background:var(--button);color:var(--blue)}.mini .day-label{font-size:10px;text-align:center;color:var(--muted);padding:6px 0}.other-month{opacity:.45}.calendar{border:1px solid var(--line);background:var(--surface);border-radius:11px;overflow:hidden}.calendar-head{display:grid;position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--line)}.calendar-head button{background:transparent;border:0;border-radius:0;border-left:1px solid var(--line);padding:10px 3px;font-size:12px;min-width:0}.calendar-head .today{color:var(--blue);background:var(--raised)}.calendar-head strong{display:block;font-size:20px;margin-top:3px}.month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.month-day{min-height:124px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:5px;overflow:hidden}.month-day:nth-child(7n){border-right:0}.month-day .date{font-size:12px;min-height:28px;padding:4px 7px;background:transparent;border:0}.month-day.today .date{background:var(--button);color:var(--blue);border-radius:50%}.event{display:block;color:var(--pro);background:var(--pro-bg);border:0;border-left:3px solid var(--pro);border-radius:5px;padding:5px 7px;text-align:left;overflow:hidden;min-height:25px;font-size:12px;line-height:1.35;width:100%;margin:3px 0}.event.personal{color:var(--personal);background:var(--personal-bg);border-color:var(--personal)}.event strong{font-size:12px;font-weight:600;display:block;overflow-wrap:anywhere}.event .event-time{font-size:10px;opacity:.9}.event.pending{border-left-style:dashed}.month-day .event{white-space:nowrap;text-overflow:ellipsis}.month-day .event strong{display:inline}.calendar-scroll{overflow:auto;max-height:calc(100dvh - 290px);min-height:280px;position:relative}.time-body{display:flex;min-width:650px}.time-body.day{min-width:0}.time-labels{width:52px;flex-shrink:0;color:var(--muted);font-size:10px}.time-labels div{height:60px;padding:0 7px;text-align:right}.time-day{position:relative;flex:1;min-width:0;height:1440px;border-left:1px solid var(--line);background:repeating-linear-gradient(to bottom,transparent 0,transparent 29px,color-mix(in srgb,var(--line) 40%,transparent) 29px,color-mix(in srgb,var(--line) 40%,transparent) 30px,transparent 30px,transparent 59px,var(--line) 59px,var(--line) 60px)}.time-day .event{position:absolute;margin:0;padding:5px;min-height:21px;z-index:2}.all-day-row{display:flex;min-width:650px;background:var(--surface);border-bottom:1px solid var(--line)}.all-day-row.day{min-width:0}.all-day-caption{width:52px;flex-shrink:0;font-size:10px;color:var(--muted);padding:8px 4px}.all-day-cell{flex:1;min-width:0;border-left:1px solid var(--line);padding:3px}.time-now{position:absolute;left:0;right:0;height:2px;background:var(--blue);z-index:3;pointer-events:none}.agenda-heading{font-size:16px;margin:20px 0 10px}.mobile-nav{display:none}
dialog{color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:17px;width:min(620px,calc(100vw - 24px));max-height:92dvh;padding:0;box-shadow:var(--shadow)}dialog::backdrop{background:#040a13a6;backdrop-filter:blur(3px)}.dialog-head{padding:20px 24px 15px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:var(--surface);z-index:3}.dialog-body{padding:20px 24px;display:flex;flex-direction:column;gap:16px}.dialog-actions{padding:15px 24px;border-top:1px solid var(--line);display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;position:sticky;bottom:0;background:var(--surface)}.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px}.check{flex-direction:row;align-items:center;gap:9px}.dialog-subtitle{font-size:12px;color:var(--muted);margin-top:4px}#message{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:30;max-width:min(600px,90vw);background:var(--raised);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:13px 20px;box-shadow:var(--shadow)}#message:empty{display:none}.alarm{position:fixed;right:25px;bottom:24px;z-index:15;border:2px solid var(--blue);background:var(--surface);padding:17px;border-radius:13px;max-width:390px;box-shadow:var(--shadow)}.alarm h3{margin-bottom:10px}
@media(min-width:1450px){.month-day{min-height:150px}.content-header,.toolbar{padding-left:30px;padding-right:30px}.view{padding-left:30px;padding-right:30px}}
@media(max-width:900px){.workspace{grid-template-columns:190px minmax(0,1fr)}.topbar .brand{width:164px}.sidebar{padding:16px 10px}.content-header,.toolbar{padding-left:16px;padding-right:16px}.view{padding-left:16px;padding-right:16px}.calendar-head.week{min-width:650px}.month-day{min-height:100px}.month-day .event{padding:3px;font-size:10px}.month-day .event strong{font-size:10px}}
@media(max-width:650px){.workspace{display:flex;flex-direction:column;min-height:0;height:100dvh;padding-bottom:calc(66px + env(safe-area-inset-bottom))}.topbar{padding:10px 15px;min-height:65px}.topbar .brand{font-size:22px;width:auto}.brand img{width:34px;height:34px}.sync-status{font-size:10px;max-width:160px;margin-left:auto}.topbar .refresh-label{display:none}.sidebar{display:none}.content{flex:1}.content-header{padding:13px 12px 10px;gap:9px}.content-header h1{font-size:22px}.content-header input{max-width:none;order:3;flex-basis:100%}.content-header>.row{margin-left:auto}.content-header button{padding:8px;font-size:12px}.toolbar{padding:0 12px 12px;gap:5px}.toolbar h2{font-size:16px;min-width:145px}.toolbar>.view-selector{order:4;width:100%;margin-top:7px}.view-selector button{flex:1}.toolbar button{padding:7px 10px}.view{padding:0 9px 20px}.banner{margin:0 12px 10px}.calendar-scroll{max-height:calc(100dvh - 355px)}.month-day{min-height:93px;padding:3px}.month-day .event{font-size:9px;border-left-width:2px;padding:3px 2px}.month-day .event strong{font-size:9px}.month-day .date{font-size:11px;padding:3px}.calendar-head strong{font-size:17px}.month-grid .month-day.other-month{opacity:.4}.mobile-nav{display:flex;position:fixed;bottom:0;left:0;right:0;height:calc(64px + env(safe-area-inset-bottom));padding:7px 9px calc(7px + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);gap:5px;z-index:10}.mobile-nav button{flex:1;background:transparent;border:0;padding:8px 2px;font-size:12px}.mobile-nav button.selected{background:var(--raised);color:var(--blue)}.settings{padding:2px 3px}.panel{padding:16px}.task-row{gap:8px;padding:12px 10px}.task-row>.row{flex-direction:column}.task-row>.row button{min-height:30px;padding:4px 7px;font-size:11px}.login{margin:4vh 12px;padding:23px}.field-grid{grid-template-columns:1fr 1fr}.dialog-body,.dialog-head{padding-left:18px;padding-right:18px}.dialog-actions{padding:12px 18px}.alarm{right:12px;left:12px;bottom:85px;max-width:none}#message{bottom:85px;font-size:13px}}

.mobile-filters{display:none}.event-time{margin-right:4px}.time-day .event.short{display:flex;align-items:center;gap:4px;padding:3px 5px}.time-day .event.short .event-time{flex-shrink:0;margin:0}.time-day .event.short strong{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;min-width:0;font-size:11px}
.time-day .event:not(.short) strong{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
@media(max-width:650px){.month-day .event .event-time{display:none}.month-day .event strong{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow:hidden;line-height:1.3}}
.task-list>.task-row{content-visibility:auto;contain-intrinsic-size:auto 84px}
@media(max-width:650px){.mobile-filters{display:flex;align-items:center;gap:8px;padding:0 12px 12px}.mobile-filters .spaces{flex:1}.mobile-filters select{max-width:155px!important;font-size:12px}.calendar-scroll{max-height:calc(100dvh - 405px)}}

.topbar .icon-button{display:inline-flex;align-items:center;justify-content:center;width:40px;min-width:40px;padding:0;flex-shrink:0}.topbar .icon-button.selected{background:var(--button);color:var(--blue)}.topbar .sync-status{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-menu{text-align:left;display:flex;align-items:center;justify-content:space-between}.device-menu::after{content:'›';font-size:22px}.device-list{display:flex;flex-direction:column;gap:12px}.device-row{padding:16px;border:1px solid var(--line);background:var(--bg);border-radius:12px;display:flex;flex-direction:column;gap:6px}.device-row h3{overflow-wrap:anywhere}.current-device{color:var(--blue);background:var(--button)}.device-count{font-weight:600}.devices-body{gap:16px}#devices{width:min(660px,calc(100vw - 24px))}@media(max-width:650px){.topbar{gap:5px}.topbar .ghost{min-width:36px;padding:7px}.topbar .icon-button{width:36px}.device-row{padding:13px}.device-row .row{gap:8px}}

/* One viewport pans the grid and its headings together, on both axes. */
.calendar-view{display:flex;flex-direction:column;overflow:hidden}
.calendar-view .calendar{display:flex;flex:1;min-height:0}
.calendar-view .calendar-scroll{flex:1;min-width:0;min-height:0;max-height:none;overflow:auto;touch-action:pan-x pan-y pinch-zoom;overscroll-behavior:contain}
.calendar-grid{width:100%}.calendar-grid.week{min-width:787px}.calendar-grid.month{min-width:735px}
.calendar-grid .calendar-head,.calendar-grid .time-body,.calendar-grid .all-day-row{min-width:0;width:100%}
.time-labels,.all-day-caption,.calendar-head:not(.month)>div:first-child{position:sticky;left:0;background:var(--surface);z-index:4}
@media(max-width:650px){.calendar-grid .month-day{min-height:110px;padding:5px}.calendar-grid .month-day .event strong{font-size:12px}.calendar-grid .month-day .date{font-size:12px}}
@media(max-height:600px){.content{overflow:auto}.calendar-view{flex-shrink:0;min-height:220px}}

/* Each ringing reminder has its own actions; the empty panel closes itself. */
.alarm{width:420px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 100px);padding:0;overflow:auto;overscroll-behavior:contain;border:0;background:transparent;box-shadow:none}.alarm-heading{font-size:18px;margin:0 0 10px;padding:12px 16px;background:var(--surface);border:1px solid var(--line);border-radius:13px}.alarm-cards{display:grid;gap:12px}.alarm-card{padding:16px;border:2px solid var(--blue);border-radius:16px;background:var(--surface);box-shadow:var(--shadow);overflow-wrap:anywhere}.alarm-card h3{font-size:21px;margin:10px 0 16px}.alarm-actions{display:grid;gap:10px}.alarm-actions button{min-height:48px;white-space:normal}.alarm-snoozes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.alarm-snoozes button{padding:8px 5px;font-size:13px}.alarm-card .error:empty{display:none}.alarm-card .error{margin-top:10px}
@media(max-width:650px){.alarm{width:auto;max-width:none;max-height:calc(100dvh - 170px - env(safe-area-inset-bottom));bottom:calc(78px + env(safe-area-inset-bottom))}.alarm-card{padding:14px}.alarm-heading{margin-bottom:8px}}


/* Keep all-day appointments visible together with the day headings. */
.calendar-pinned{position:sticky;top:0;z-index:5;background:var(--surface)}
.calendar-pinned .calendar-head{position:static}
.calendar-pinned .all-day-row{max-height:150px;overflow-y:auto}
.android-download{display:inline-block;align-self:flex-start;padding:12px 18px;background:var(--button);color:var(--blue);border:1px solid var(--blue);border-radius:10px;text-decoration:none;font-weight:600;max-width:100%}

/* Mobile: one page scrolls the header, controls and complete calendar together. */
@media(max-width:650px){
  .workspace.mobile-calendar{overflow:hidden}
  .mobile-calendar-page{flex:1;min-height:0;min-width:0;overflow:auto;touch-action:pan-x pan-y pinch-zoom;overscroll-behavior:contain}
  .mobile-calendar-sheet{width:max(100%,360px)}
  .mobile-calendar[data-mode=week] .mobile-calendar-sheet{width:max(100%,820px)}
  .mobile-calendar[data-mode=month] .mobile-calendar-sheet{width:max(100%,760px)}
  .mobile-calendar .topbar,.mobile-calendar .content-header,.mobile-calendar .toolbar,.mobile-calendar .mobile-filters,.mobile-calendar .banner{width:max(360px,100vw);max-width:100%}
  .mobile-calendar .content{display:block;overflow:visible;min-height:0}
  .mobile-calendar .view{display:block;overflow:visible;min-height:0;height:auto;flex:none}
  .mobile-calendar .calendar-scroll{overflow:visible;max-height:none;height:auto;min-height:0;flex:none;overscroll-behavior:auto}
  .mobile-calendar .calendar-grid{width:100%;min-width:0}
  .mobile-calendar .calendar-pinned,.mobile-calendar .calendar-head,.mobile-calendar .time-labels,.mobile-calendar .all-day-caption,.mobile-calendar .calendar-head>div:first-child{position:static}
  .mobile-calendar .calendar-pinned .all-day-row{max-height:none;overflow:visible}
}

.event{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}.calendar-dragging{cursor:grabbing;user-select:none}.calendar-drag-preview{position:fixed;z-index:10000;pointer-events:none;max-width:232px;padding:12px;border:2px solid var(--accent,#a4ceff);border-radius:10px;background:var(--panel,#192536);color:var(--ink,#edf3fa);box-shadow:0 6px 24px #0008;font-size:14px}.calendar-drag-preview[data-valid=false]{opacity:.65}

@media(max-width:650px){.mobile-calendar .calendar{display:block}.mobile-calendar .calendar-scroll{width:100%}}

[hidden]{display:none!important}
@media(max-width:450px){#editor .field-grid{grid-template-columns:minmax(0,1fr)}#editor input,#editor select,#editor textarea{min-width:0}}

/* Clip moving pixels, not the scroll surface: horizontal/vertical panning stays native. */
.calendar-motion-clip{overflow:clip;width:100%}
.calendar-motion-clip.week{min-width:787px}.calendar-motion-clip.month{min-width:735px}
@media(max-width:650px){.mobile-calendar .calendar-motion-clip.week,.mobile-calendar .calendar-motion-clip.month{min-width:0}.mobile-calendar-sheet.calendar-motion-clip{width:max(100%,360px)}}
@media(prefers-reduced-motion:reduce){.calendar-motion-surface{transform:none!important}}

/* Active bells move without relayout or whole-row flashing. */
.task-bell{display:inline-block;float:left;margin:0 10px 0 0;font-size:25px;line-height:32px;transform-origin:50% 20%}.task-bell[hidden]{display:none}.task-bell.ringing{animation:declic-bell .8s ease-in-out infinite}.task-bell.waiting{width:12px;height:12px;margin-top:5px;border-radius:50%;background:#ef5350;animation:none}.task-row.ringing{border-color:var(--blue)}
@keyframes declic-bell{0%,100%{transform:rotate(-18deg)}50%{transform:rotate(18deg)}}
@media(prefers-reduced-motion:reduce){.task-bell.ringing{animation:none}}
