:root{--color-bg: #1c1d22;--color-card: #323338;--color-border: #3f4147;--color-text: #dbdee1;--color-text-muted: #949ba4;--color-accent: #5865f2;--color-accent-hover: #4752c4;--color-error: #f87171;--color-success: #4ade80;--font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--sidebar-width: 220px;--sidebar-width-mobile: 56px;--radius-sm: 6px;--radius-md: 10px;--shadow-card: 0 2px 6px rgba(0, 0, 0, .2);--row-height: 92px;--row-gap: 8px;--header-height: 32px;--avatar-size: 42px;--avatar-overlap: 10px}*{box-sizing:border-box}body{margin:0;font-family:var(--font-family);background:var(--color-bg);color:var(--color-text);min-height:100vh}a{color:var(--color-accent);text-decoration:none}a:hover{text-decoration:underline}#root{min-height:100vh}.appShell{display:flex;min-height:100vh}.appMain{flex:1;min-width:0;overflow-y:auto;padding:1.25rem 1.5rem}.appMainNarrow{max-width:720px}.sidebar{width:var(--sidebar-width);flex-shrink:0;display:flex;flex-direction:column;background:var(--color-card);border-right:1px solid var(--color-border);min-height:100vh;position:sticky;top:0;height:100vh}.sidebarBrand{padding:1.25rem 1rem 1rem;font-weight:600;font-size:1.125rem;color:var(--color-text)}.sidebarNav{display:flex;flex-direction:column;gap:.25rem;padding:0 .5rem;flex:1}.sidebarLink{display:block;padding:.6rem .75rem;border-radius:var(--radius-sm);color:var(--color-text-muted);font-size:.875rem;text-decoration:none}.sidebarLink:hover{color:var(--color-text);text-decoration:none}.sidebarLinkActive{background:var(--color-bg);color:var(--color-text)}.sidebarFooter{padding:1rem;border-top:1px solid var(--color-border);display:flex;flex-direction:column;gap:.75rem}.sidebarUser{display:flex;align-items:center;gap:.6rem;min-width:0}.sidebarUsername{font-size:.8125rem;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebarToggle{display:none}.btn{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1rem;background:var(--color-accent);color:#fff;border:none;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;cursor:pointer;font-family:inherit}.btn:hover{background:var(--color-accent-hover)}.btn:disabled{opacity:.6;cursor:not-allowed}.btnSecondary{background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border)}.btnSecondary:hover{background:var(--color-border)}.btnSmall{padding:.35rem .65rem;font-size:.8125rem}.btnBlock{width:100%}.card{background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:1.25rem 1.5rem}.cardTitle{font-size:1rem;font-weight:600;margin:0 0 .5rem}.cardHint{font-size:.875rem;color:var(--color-text-muted);margin:0 0 1rem}.form{display:flex;flex-direction:column;gap:1rem}.formLabel{display:flex;flex-direction:column;gap:.35rem;font-size:.875rem;font-weight:500}.formInput{padding:.5rem .75rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:inherit;font-size:.875rem;font-family:inherit}.formInput:focus{outline:none;border-color:var(--color-accent)}.formActions{display:flex;gap:.75rem;flex-wrap:wrap}.errorMsg{color:var(--color-error);font-size:.875rem}.successMsg{color:var(--color-success);font-size:.875rem;margin-top:.75rem}.loginPage{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--color-bg)}.loginCard{background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:2rem;max-width:400px;width:100%;text-align:center}.loginCard h1{margin:0 0 .5rem;font-size:1.5rem}.loginCard p{color:var(--color-text-muted);margin:0 0 1.5rem}.pageTabs{display:flex;gap:0;margin-bottom:1.25rem;border-bottom:1px solid var(--color-border)}.tab{padding:.6rem 1rem;background:none;border:none;border-bottom:2px solid transparent;color:var(--color-text-muted);font-size:.875rem;cursor:pointer;margin-bottom:-1px;font-family:inherit}.tab:hover{color:var(--color-text)}.tabActive{color:var(--color-text);border-bottom-color:var(--color-text)}.timetablePageHeader{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.timetablePageTitle{margin:0;font-size:1.125rem;font-weight:600}.timetableWeekNav{display:flex;gap:.5rem;flex-wrap:wrap}.timetableEmpty,.timetableLoading{color:var(--color-text-muted);font-size:.875rem}.timetableLegend{margin-top:1.25rem;padding-top:.75rem;border-top:1px solid var(--color-border);font-size:.8125rem;color:var(--color-text-muted);display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem}.memberFilter{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin-bottom:1.25rem}.memberFilterLabel{font-weight:600;font-size:.8125rem;color:var(--color-text-muted);margin-right:.25rem}.memberChip{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .55rem .25rem .3rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:999px;color:var(--color-text);font-size:.8125rem;cursor:pointer;font-family:inherit}.memberChipSelected{border-color:var(--color-text-muted)}.memberChip:not(.memberChipSelected){opacity:.55}.avatar{border-radius:50%;object-fit:cover;flex-shrink:0;background:var(--color-card)}.avatarSm{width:24px;height:24px}.avatarMd{width:var(--avatar-size);height:var(--avatar-size)}.avatarStack{display:flex;align-items:center;flex-shrink:0}.avatarStack .avatar{margin-left:calc(-1 * var(--avatar-overlap));border:2px solid var(--color-card)}.avatarStack .avatar:first-child{margin-left:0}.timelineDay{margin-bottom:1.5rem}.timelineDayLabel{font-size:.875rem;font-weight:600;color:var(--color-text);margin-bottom:.5rem}.timelineDayScroll{overflow-x:auto;border-radius:var(--radius-sm)}.timelineDayInner{min-width:600px}.timelineHourHeader{display:grid;height:var(--header-height);background:var(--color-bg);border-bottom:1px solid var(--color-border);position:relative}.timelineHourLabel{display:flex;align-items:center;justify-content:center;font-size:.75rem;color:var(--color-text-muted)}.timelineRow{position:relative;height:var(--row-height);background:var(--color-bg);margin-bottom:var(--row-gap)}.timelineRow:last-child{margin-bottom:0}.timelineGridLine{position:absolute;top:0;bottom:0;width:1px;background:var(--color-border);opacity:.15;pointer-events:none}.eventCard{position:absolute;top:0;height:100%;display:flex;align-items:center;gap:.5rem;padding:0 .65rem;background:var(--color-card);border:none;border-radius:var(--radius-md);box-shadow:var(--shadow-card);color:var(--color-text);cursor:pointer;text-align:left;font-family:inherit;overflow:hidden;min-width:48px}.eventCard:hover{filter:brightness(1.06)}.eventCardTitle{font-size:.875rem;font-weight:400;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.3}.weekGridWrap{overflow-x:auto;border-radius:var(--radius-sm);border:1px solid var(--color-border)}.weekGrid{display:grid;width:max-content;min-width:100%;background:var(--color-bg)}.weekGridCorner{background:var(--color-bg);min-width:56px;min-height:var(--header-height);border-bottom:1px solid var(--color-border)}.weekGridDayHeader{padding:.4rem .35rem;font-size:.8125rem;font-weight:500;background:var(--color-bg);display:flex;flex-direction:column;align-items:center;border-left:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}.weekGridDayName{font-weight:600}.weekGridDayDate{font-size:.75rem;color:var(--color-text-muted)}.weekGridTimeLabel{padding:.2rem .35rem;font-size:.7rem;color:var(--color-text-muted);background:var(--color-bg);border-top:1px solid var(--color-border);text-align:right}.weekGridDayColumn{position:relative;background:var(--color-bg);background-image:repeating-linear-gradient(to bottom,transparent 0,transparent 43px,color-mix(in srgb,var(--color-border) 15%,transparent) 43px,color-mix(in srgb,var(--color-border) 15%,transparent) 44px);border-left:1px solid color-mix(in srgb,var(--color-border) 30%,transparent)}.weekGridEvent{position:absolute;left:2px;right:2px;border-radius:var(--radius-md);padding:.3rem .45rem;display:flex;align-items:center;gap:.35rem;font-size:.75rem;border:none;cursor:pointer;overflow:hidden;background:var(--color-card);color:var(--color-text);box-shadow:var(--shadow-card);font-family:inherit;text-align:left}.weekGridEvent:hover{filter:brightness(1.06)}.weekGridEventBody{display:flex;flex-direction:column;gap:.1rem;min-width:0}.weekGridEventTitle{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.weekGridEventTime{font-size:.7rem;color:var(--color-text-muted)}.eventPopupOverlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem}.eventPopup{background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-md);max-width:420px;width:100%;padding:1rem 1.25rem}.eventPopupHeader{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.75rem}.eventPopupTitle{margin:0;font-size:1rem}.eventPopupClose{background:none;border:none;color:var(--color-text-muted);font-size:1.5rem;line-height:1;cursor:pointer;padding:0}.eventPopupBody{margin:0;font-size:.875rem}.eventPopupBody dt{color:var(--color-text-muted);margin-top:.5rem}.eventPopupBody dd{margin:.15rem 0 0}@media (max-width: 767px){.appShell{flex-direction:column}.sidebar{width:100%;height:auto;min-height:unset;position:relative;flex-direction:row;flex-wrap:wrap;align-items:center}.sidebarBrand{padding:.75rem 1rem}.sidebarNav{flex-direction:row;padding:0 .5rem .75rem;flex:unset;width:100%}.sidebarFooter{width:100%;flex-direction:row;align-items:center;justify-content:space-between}.sidebarFooter .btnBlock{width:auto}}
