:root{--cal-elevated: #0d0d0d;--cal-header-bg: rgba(4, 4, 4, .9);--cal-hairline: rgba(255, 255, 255, .06);--cal-input-bg: rgba(255, 255, 255, .05);--cal-on-accent: var(--color-bg)}:root[data-theme=light]{--color-bg: #eef1f5;--color-fg: #1a1d21;--color-muted: rgba(0, 0, 0, .6);--color-surface: rgba(0, 0, 0, .05);--color-surface-brighter: rgba(0, 0, 0, .12);--color-accent: #0c9a4e;--color-accent-hover: #0a8544;--cal-elevated: #ffffff;--cal-header-bg: rgba(238, 241, 245, .92);--cal-hairline: rgba(0, 0, 0, .1);--cal-input-bg: #ffffff;--cal-on-accent: #ffffff}:root[data-theme=light] body:before{background:var(--color-bg)}.theme-toggle{background:var(--color-surface);border:1px solid var(--color-surface-brighter);color:var(--color-fg);width:36px;height:36px;border-radius:8px;cursor:pointer;font-size:1rem;line-height:1;display:inline-flex;align-items:center;justify-content:center;transition:var(--transition-fast)}.theme-toggle:hover{border-color:var(--color-accent)}.theme-toggle-login{position:absolute;top:var(--space-sm);right:var(--space-sm)}.screen{min-height:100vh}.hidden{display:none!important}#login-screen{display:flex;align-items:center;justify-content:center;padding:var(--space-md)}.login-card{position:relative;background:var(--color-surface);border:1px solid var(--color-surface-brighter);border-radius:14px;padding:var(--space-lg);width:min(100%,420px);box-shadow:var(--shadow-lg)}.login-head{text-align:center;margin-bottom:var(--space-md)}.login-head h1{font-family:var(--font-accent);font-size:var(--text-xl)}.login-head h1 span{color:var(--color-accent)}.login-head p{color:var(--color-muted);font-size:var(--text-sm);margin-top:var(--space-xs)}.login-form{display:flex;flex-direction:column;gap:var(--space-sm)}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:var(--text-sm);color:var(--color-muted)}.field input{padding:12px;background:var(--cal-input-bg);border:1px solid var(--color-surface-brighter);color:var(--color-fg);border-radius:8px;outline:none;transition:border-color var(--transition-fast)}.field input:focus{border-color:var(--color-accent)}.login-error{color:#ff6b6b;font-size:var(--text-sm);text-align:center;min-height:1.2em}.btn-primary{background:var(--color-accent);color:var(--cal-on-accent);border:none;padding:13px;font-weight:700;border-radius:8px;cursor:pointer;transition:background var(--transition-fast)}.btn-primary:hover{background:var(--color-accent-hover)}.btn-primary:disabled{opacity:.6;cursor:default}.btn-ghost{background:none;border:1px solid var(--color-surface-brighter);color:var(--color-muted);padding:8px 14px;border-radius:8px;cursor:pointer;font-size:var(--text-sm);transition:var(--transition-fast)}.btn-ghost:hover{color:var(--color-fg);border-color:var(--color-fg)}.btn-ghost.today{color:var(--color-accent);border-color:var(--color-accent)}.cal-header{position:sticky;top:0;z-index:10;background:var(--cal-header-bg);backdrop-filter:blur(8px);border-bottom:1px solid var(--color-surface-brighter);padding:var(--space-sm) var(--space-md)}.cal-header-row{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.cal-title{font-family:var(--font-accent);font-size:var(--text-lg)}.cal-title span{color:var(--color-accent)}.cal-header-actions{display:flex;align-items:center;gap:var(--space-xs)}.user-chip{color:var(--color-muted);font-size:var(--text-sm)}.week-nav{display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-xs);flex-wrap:wrap}.nav-btn{background:var(--color-surface);border:1px solid var(--color-surface-brighter);color:var(--color-fg);width:36px;height:36px;border-radius:8px;cursor:pointer;font-size:1.2rem;line-height:1;transition:var(--transition-fast)}.nav-btn:hover{border-color:var(--color-accent);color:var(--color-accent)}.week-range{font-weight:600;min-width:12ch;text-align:center}.cal-main{padding:var(--space-sm) var(--space-md) var(--space-xl)}.state{text-align:center;color:var(--color-muted);padding:var(--space-xl) 0}.spinner,.login-spinner{width:36px;height:36px;border:3px solid var(--color-surface-brighter);border-top-color:var(--color-accent);border-radius:50%;margin:0 auto var(--space-sm);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.week-grid{display:grid;grid-template-columns:56px repeat(7,minmax(0,1fr));gap:0;align-items:start}.grid-corner{position:sticky;top:0}.grid-dayhead{text-align:center;padding:8px 4px;border-bottom:1px solid var(--color-surface-brighter)}.grid-dayhead .dh-name{display:block;font-size:var(--text-xs);color:var(--color-muted);letter-spacing:.05em}.grid-dayhead .dh-num{display:block;font-size:var(--text-md);font-weight:700}.grid-dayhead.is-today .dh-num{color:var(--color-accent)}.grid-allday-label{font-size:var(--text-xs);color:var(--color-muted);display:flex;align-items:center;justify-content:flex-end;padding:4px 6px;border-bottom:1px solid var(--color-surface-brighter)}.grid-allday-cell{border-bottom:1px solid var(--color-surface-brighter);border-left:1px solid var(--color-surface);padding:3px;display:flex;flex-direction:column;gap:3px;min-height:26px}.allday-pill{background:var(--color-surface-brighter);border:1px solid var(--color-surface-brighter);border-left:3px solid var(--c, var(--color-accent));color:var(--color-fg);border-radius:5px;padding:2px 6px;font-size:var(--text-xs);cursor:pointer;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.grid-times,.grid-time{position:relative}.grid-time span{position:absolute;top:-.6em;right:6px;font-size:var(--text-xs);color:var(--color-muted)}.grid-daycol{position:relative;border-left:1px solid var(--color-surface)}.grid-hourline{border-bottom:1px solid var(--cal-hairline)}.grid-event{position:absolute;left:2px;right:2px;background:var(--color-surface-brighter);border:1px solid var(--color-surface-brighter);border-left:3px solid var(--c, var(--color-accent));border-radius:5px;padding:3px 5px;overflow:hidden;cursor:pointer;text-align:left;color:var(--color-fg);transition:filter var(--transition-fast)}.grid-event:hover{filter:brightness(1.2)}.ge-time{display:block;font-size:.62rem;color:var(--color-muted)}.ge-title{display:block;font-size:var(--text-xs);font-weight:600;line-height:1.15}.agenda{display:none;flex-direction:column;gap:var(--space-sm)}.agenda-day{display:grid;grid-template-columns:52px 1fr;gap:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-surface)}.agenda-date{text-align:center}.ad-num{display:block;font-size:var(--text-xl);font-weight:700;line-height:1}.ad-name{display:block;font-size:var(--text-xs);color:var(--color-muted)}.agenda-day.is-today .ad-num{color:var(--color-accent)}.agenda-events{display:flex;flex-direction:column;gap:6px}.agenda-empty{color:var(--color-muted);font-size:var(--text-sm);padding:6px 0}.agenda-event{display:flex;flex-direction:column;gap:2px;background:var(--color-surface);border-left:3px solid var(--c, var(--color-accent));border-radius:8px;padding:10px 12px;cursor:pointer;text-align:left;color:var(--color-fg);min-height:44px}.agenda-event:active{background:var(--color-surface-brighter)}.ae-time{font-size:var(--text-xs);color:var(--color-muted)}.ae-title{font-size:var(--text-sm);font-weight:600}.modal-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;padding:var(--space-md);z-index:100}.modal{background:var(--cal-elevated);border:1px solid var(--color-surface-brighter);border-radius:14px;width:min(100%,440px);box-shadow:var(--shadow-lg)}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-sm);padding:var(--space-md);border-bottom:1px solid var(--color-surface)}.modal-head h3{font-family:var(--font-accent);font-size:var(--text-md)}.modal-close{background:none;border:none;color:var(--color-muted);font-size:1.1rem;cursor:pointer;line-height:1}.modal-close:hover{color:var(--color-fg)}.modal-body{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.modal-row{display:flex;gap:var(--space-xs);align-items:flex-start;color:var(--color-fg)}.modal-ico{flex-shrink:0}@media(max-width:767px){.week-grid{display:none}.agenda{display:flex}.cal-title{font-size:var(--text-md)}}
