body{color:#1f2a37;background:#f6f7fb;margin:0;font-family:Arial,sans-serif}header{color:#fff;background:#111827}.container{box-sizing:border-box;width:100%;max-width:1920px;margin:0 auto;padding:16px 24px}header.hidden{transform:translateY(-100%)}#site-header{z-index:10;transition:transform .2s;position:sticky;top:0}.header-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.header-actions{flex-wrap:nowrap;align-items:center;gap:10px;display:flex}header h1{margin:0;font-size:20px}.tabs{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.tab-button{color:#111827;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:8px;padding:8px 14px;font-weight:600}.tab-button.active{color:#1d4ed8;background:#eff6ff;border-color:#2563eb}.tab-panel.hidden{display:none}.ghost-button{color:#111827;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:6px 10px;font-size:13px;font-weight:600;transition:transform .2s,box-shadow .2s,border-color .2s;box-shadow:0 4px 10px #11182714}.ghost-button:disabled{opacity:.6;cursor:not-allowed}.ghost-button:hover:not(:disabled){border-color:#9ca3af;transform:translateY(-1px);box-shadow:0 6px 14px #1118271f}.filters{justify-content:flex-start;align-items:center;gap:8px;width:100%;margin-bottom:12px;display:flex;position:relative}.header-actions .filters{flex:none;width:auto;margin-bottom:0}.menu-toggle{border-radius:10px;justify-content:center;align-items:center;width:38px;height:38px;padding:0;display:inline-flex}.menu-toggle .icon{width:18px;height:18px;display:block}.filters-toggle{border-radius:10px;justify-content:center;align-items:center;width:38px;height:38px;padding:0;display:inline-flex}.filters-toggle .icon{width:18px;height:18px;display:block}.favorites-button{border-radius:10px;align-items:center;gap:6px;padding:6px 10px;font-weight:600;display:inline-flex}.favorites-button.icon-only{justify-content:center;width:38px;height:38px;padding:0;font-size:18px;line-height:1}.favorites-button.active,.filters-toggle.active{color:#1d4ed8;background:#eff6ff;border-color:#2563eb}.filters-body{opacity:0;pointer-events:none;z-index:25;background:linear-gradient(#fff 0%,#f8fafc 100%);border:1px solid #e5e7eb;border-radius:14px;grid-template-columns:1fr 1fr;align-items:start;gap:10px;width:min(340px,100vw - 24px);max-height:0;padding:34px 12px 12px;transition:max-height .25s,opacity .2s,transform .25s;display:grid;position:absolute;top:calc(100% + 8px);left:0;overflow:hidden;transform:translateY(-6px);box-shadow:0 14px 30px #0f172a29}.header-actions .filters-body{left:auto;right:0}.filters-body.open{opacity:1;pointer-events:auto;max-height:400px;overflow:visible;transform:translateY(0)}.filters-body .filter-close{z-index:2;top:8px;right:10px}.filters-body .modal-title{margin:0;position:absolute;top:10px;left:12px}.filter-item{color:#374151;flex-direction:column;align-items:flex-start;gap:6px;min-width:0;font-size:13px;display:flex}.filter-item.checkbox{flex-direction:row;grid-column:1/-1;align-items:center;gap:8px;padding:2px 2px 0;font-size:13px;line-height:1.3}.dropdown{flex:none;width:100%;min-width:0;position:relative}.dropdown-toggle{text-align:left;cursor:pointer;color:#111827;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(#fff 0%,#f8fafc 100%);border:1px solid #e5e7eb;border-radius:10px;width:100%;padding:8px 12px;font-family:inherit;font-size:14px;transition:border-color .2s,box-shadow .2s,transform .2s;overflow:hidden;box-shadow:0 2px 6px #0f172a14}.dropdown-toggle:hover{border-color:#cbd5f5;transform:translateY(-1px);box-shadow:0 8px 18px #3b82f62e}.dropdown-menu{opacity:0;z-index:40;background:#fff;border:1px solid #e5e7eb;border-radius:12px;max-height:0;transition:max-height .25s,opacity .2s,transform .25s;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden;transform:translateY(-6px);box-shadow:0 18px 36px #0f172a2e}.dropdown-menu.open{opacity:1;max-height:260px;transform:translateY(0)}.dropdown-item{text-align:left;cursor:pointer;color:#1f2937;background:#fff;border:none;border-bottom:1px solid #f1f5f9;width:100%;padding:10px 12px;font-size:14px;transition:background .2s,color .2s,transform .2s}.dropdown-item:last-child{border-bottom:none}.dropdown-item:hover{color:#111827;background:#f8fafc;transform:translate(2px)}.dropdown-item.active{color:#0369a1;z-index:inherit;background:#e0f2fe;font-weight:600}.filter-item label{color:#374151;cursor:pointer;font-weight:600}.filter-item select{cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:8px;padding:6px 10px;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 2px #0000000a}.filter-item select:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 3px #2563eb33}.filter-item.checkbox input{cursor:pointer;width:16px;height:16px}.visually-hidden{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}#schedule{flex-wrap:wrap;align-items:flex-start;gap:16px;display:flex}.year-block{width:100%;margin-bottom:24px}.year-header{color:#111827;margin:0 0 10px;font-size:20px;font-weight:700}.month-header{align-items:center;gap:12px;min-height:1.5em;margin:10px 0 12px;display:flex}.month-header__label{color:#1f2937;flex-shrink:0;font-size:18px;font-weight:700}.month-header__line{background:#d1d5db;border-radius:1px;flex:1 1 0;min-width:1rem;height:1px}.week-row{flex-wrap:wrap;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.status{color:#9ca3af;margin-top:6px;font-size:13px}.header-link{color:#93c5fd;margin-left:6px;text-decoration:none}.header-link:hover{text-decoration:underline}.day{box-sizing:border-box;background:#fff;border:1px solid #e5e7eb;border-radius:12px;flex:320px;max-width:360px;padding:16px;box-shadow:0 1px 3px #00000014}.day.highlight{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b33}.day.today{border-color:#10b981;box-shadow:0 0 0 2px #10b98133}.day-title{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.day-title h2{margin:0;font-size:18px}.day-title .day-name{font-weight:600}.day-title .day-date{color:#6b7280;text-align:left;font-size:14px;font-weight:500}.badge{color:#92400e;background:#fef3c7;border-radius:5px;padding:4px 8px;font-size:12px}.lesson{cursor:pointer;background:#fafafa;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:10px;padding:12px;transition:box-shadow .2s,transform .2s,border-color .2s;position:relative}.lesson:hover{border-color:#d1d5db;transform:translateY(-1px);box-shadow:0 6px 16px #00000014}.lesson.soon{background:#fff7ed;border-color:#fdba74}.lesson.in-progress{background:#ecfdf5;border-color:#10b981}.lesson.exam{background:#fff1f2;border-color:#ef4444}.lesson.credit{background:#eff6ff;border-color:#3b82f6}.lesson-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.lesson-controls{align-items:center;gap:8px;display:inline-flex}.lesson-status{color:#075985;background:#e0f2fe;border-radius:999px;padding:3px 6px;font-size:11px;display:none}.lesson-status.active{display:inline-flex}.lesson-status.soon{color:#9a3412;background:#ffedd5}.lesson-status.in-progress{color:#166534;background:#dcfce7}.favorite-toggle{color:#9ca3af;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:8px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;font-size:14px;line-height:1;transition:background .2s,border-color .2s,box-shadow .2s;display:inline-flex;position:absolute;top:12px;right:12px}.favorite-toggle.active{color:#f59e0b;background:#fffbeb;border-color:#f59e0b}.favorite-toggle:disabled{cursor:not-allowed;opacity:.6}.favorite-toggle:hover:not(:disabled){border-color:#d1d5db;box-shadow:0 4px 10px #00000014}.lesson-title{word-break:break-word;padding-right:40px;font-weight:600;display:block}.lesson-meta{color:#6b7280;margin-top:4px;font-size:13px}.hw-badge{color:#92400e;background:#fef3c7;border-radius:8px;padding:4px 6px;font-size:11px}.lesson-details{opacity:0;border-top:1px dashed #e5e7eb;max-height:0;transition:max-height .45s,opacity .35s,transform .45s;overflow:hidden;transform:translateY(-6px)}.lesson-details:not(.active){border-top:none;margin-top:0;padding-top:0}.lesson-details.active{opacity:1;max-height:600px;margin-top:10px;transform:translateY(0)}.homework-list{background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;margin-top:10px;margin-bottom:16px;padding:12px}.homework-item{background:#eff6ff;border:1px solid #dbeafe;border-left:4px solid #3b82f6;border-radius:8px;margin-bottom:8px;padding:12px;box-shadow:0 1px 3px #3b82f61a}.homework-item:last-child{margin-bottom:0}.homework-form{background:#fef3c7;border:1px dashed #f59e0b;border-radius:8px;flex-direction:column;gap:8px;margin-top:16px;padding:12px;display:flex}.homework-form textarea{box-sizing:border-box;resize:none;background:#fff;border:1px solid #d1d5db;border-radius:8px;width:100%;min-height:70px;padding:8px;font-family:inherit}.homework-form input{border:1px solid #d1d5db;border-radius:6px;margin-top:8px;padding:6px 8px}.homework-form button{color:#fff;cursor:pointer;background:#111827;border:none;border-radius:8px;margin-top:8px;padding:8px 12px;transition:transform .2s,box-shadow .2s,background .2s}.homework-form button:hover{background:#1f2937;transform:translateY(-1px);box-shadow:0 6px 14px #11182740}.auth-button{color:#fff;cursor:pointer;background:#374151;border:1px solid #4b5563;border-radius:8px;justify-content:center;align-items:center;padding:8px 14px;font-weight:600;text-decoration:none;transition:transform .2s,box-shadow .2s,background .2s;display:inline-flex;box-shadow:0 6px 14px #1118272e}.auth-button:hover{background:#1f2937;transform:translateY(-1px);box-shadow:0 8px 18px #11182738}.secondary-button{color:#111827;cursor:pointer;background:#fff;border:1px solid #9ca3af;border-radius:5px;padding:8px 14px;transition:transform .2s,box-shadow .2s,border-color .2s}.secondary-button:hover{border-color:#6b7280;transform:translateY(-1px);box-shadow:0 6px 14px #1118271f}.google-button{color:#1f2937;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:8px;align-items:center;gap:6px;padding:8px 12px;font-weight:600;transition:transform .2s,box-shadow .2s,border-color .2s;display:inline-flex}.google-button:hover{border-color:#9ca3af;transform:translateY(-1px);box-shadow:0 6px 14px #1118271f}.google-button.connected{color:#991b1b;background:#fef2f2;border-color:#fecaca}.modal{z-index:1000;opacity:1;visibility:visible;background:#11182780;justify-content:center;align-items:center;transition:opacity .25s,visibility 0s linear .25s;display:flex;position:fixed;inset:0}.modal.hidden{opacity:0;visibility:hidden;pointer-events:none}.modal-content{opacity:1;background:#fff;border-radius:14px;min-width:320px;max-width:420px;padding:20px;transition:transform .25s,opacity .25s;transform:translateY(0);box-shadow:0 14px 30px #00000040}.modal.hidden .modal-content{opacity:0;transform:translateY(8px)}.modal-title{color:#111827;letter-spacing:.01em;margin-bottom:8px;font-size:16px;font-weight:700;line-height:1.2}.modal-status{color:#6b7280;margin-bottom:12px;font-size:13px}.modal-actions{flex-wrap:wrap;gap:10px;display:flex}.empty{color:#6b7280;text-align:center;padding:12px;font-size:14px;font-style:italic}.favorites-list{flex-direction:column;gap:8px;margin-top:6px;transition:opacity .2s;display:flex}.favorites-list.loading{opacity:.6}.favorites-loading{color:#6b7280;background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;align-items:center;gap:8px;padding:10px 12px;font-size:14px;display:inline-flex}.spinner{border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;width:16px;height:16px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.favorites-item{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex;box-shadow:0 1px 2px #0f172a14}.favorites-item-name{color:#1f2937;font-size:14px;font-weight:600;line-height:1.35}.danger-button{color:#374151;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:5px 10px;font-size:12px;font-weight:600;transition:transform .2s,box-shadow .2s,border-color .2s,background .2s}.danger-button:hover{color:#9f1239;background:#fef2f2;border-color:#fca5a5;transform:translateY(-1px);box-shadow:0 4px 10px #f871712e}.favorites-modal .modal-content{will-change:transform, opacity;background:linear-gradient(#fff 0%,#f8fafc 100%);border:1px solid #e5e7eb;border-radius:14px;max-width:360px;padding:18px 20px 16px;transition:transform .35s,opacity .35s;position:absolute;box-shadow:0 18px 36px #0f172a2e}.favorites-modal .modal-title{padding-right:34px}.modal-icon-close{color:#9ca3af;cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;width:20px;height:20px;padding:0;font-size:20px;line-height:1;transition:color .2s,transform .2s;display:inline-flex;position:absolute;top:10px;right:10px}.modal-icon-close:hover{color:#111827;transform:scale(1.05)}.favorites-modal{opacity:0;visibility:hidden;pointer-events:none;background:0 0;transition:opacity .35s,visibility 0s linear .35s}.favorites-modal.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .35s}.favorites-modal .modal-content{opacity:0;transform:translateY(10px)scale(.98)}.favorites-modal.open .modal-content{opacity:1;transform:translateY(0)scale(1)}.mobile-menu-overlay{opacity:0;visibility:hidden;pointer-events:none;z-index:950;background:#11182766;transition:opacity .2s,visibility 0s linear .2s;position:fixed;inset:0}.mobile-menu-overlay.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .2s}.mobile-menu{z-index:960;box-sizing:border-box;width:min(320px,86vw);height:100dvh;padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom));background:#fff;flex-direction:column;gap:12px;transition:transform .25s;display:flex;position:fixed;top:0;right:0;transform:translate(100%);box-shadow:-18px 0 36px #0f172a2e}.mobile-menu.open{transform:translate(0)}.mobile-menu-button{justify-content:center;width:100%}.mobile-menu-button.gcalendar-sync-button{justify-content:flex-start}.gcalendar-sync-button{text-align:left;border-radius:12px;align-items:stretch;padding:10px 12px;font-weight:600;transition:border-color .2s,background .2s,box-shadow .2s,transform .2s;display:inline-flex}.gcalendar-sync-button.secondary-button:hover:not(:disabled){transform:translateY(-1px)}.gcalendar-sync-button.secondary-button:hover:disabled{transform:none}.gcalendar-sync-button__inner{align-items:flex-start;gap:10px;width:100%;display:flex}.gcalendar-sync-button__icon{background:#ffffffa6;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.gcalendar-sync-button__text{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.gcalendar-sync-button__title{letter-spacing:.02em;text-transform:uppercase;color:inherit;opacity:.92;font-size:13px;font-weight:800}.gcalendar-sync-button__state{color:inherit;font-size:14px;font-weight:700;line-height:1.3}.gcalendar-sync-button__hint{opacity:.82;margin-top:2px;font-size:12px;font-weight:500;line-height:1.25}.gcalendar-sync-button--on{color:#14532d;background:linear-gradient(135deg,#fafdfb 0%,#f0faf5 100%);border:1px solid #d8f0e5;box-shadow:0 4px 12px #0f172a0f}.gcalendar-sync-button--on .gcalendar-sync-button__icon{color:#15803d;background:#10b98117}.gcalendar-sync-button--on:hover:not(:disabled){background:linear-gradient(135deg,#f7fcfa 0%,#e8f7ef 100%);border-color:#c5e8d8;box-shadow:0 6px 14px #0f172a14}.gcalendar-sync-button--off{color:#334155;background:linear-gradient(135deg,#f8fafc 0%,#f1f5f9 100%);border:1px solid #cbd5e1;box-shadow:0 4px 12px #0f172a14}.gcalendar-sync-button--off .gcalendar-sync-button__icon{color:#475569;background:#94a3b833}.gcalendar-sync-button--off:hover:not(:disabled){background:linear-gradient(135deg,#f1f5f9 0%,#e2e8f0 100%);border-color:#94a3b8;box-shadow:0 6px 14px #0f172a1f}.gcalendar-sync-button--unavailable{color:#6b7280;box-shadow:none;cursor:not-allowed;background:#f3f4f6;border:1px dashed #d1d5db}.gcalendar-sync-button--unavailable .gcalendar-sync-button__icon{color:#6b7280;background:#9ca3af40}.gcalendar-sync-button:disabled{cursor:not-allowed;opacity:1}.mobile-menu-footer{flex-direction:column;gap:10px;width:100%;padding-top:8px;display:flex}.logout-button{color:#9f1239;background:#fff1f2;border:1px solid #fecaca;font-weight:700}.logout-button:hover{color:#881337;background:#ffe4e6;border-color:#fda4af;box-shadow:0 6px 14px #f43f5e2e}@media (width<=820px){.container{padding:12px 14px}.header-row{gap:8px}header h1{white-space:nowrap;text-overflow:ellipsis;max-width:44vw;font-size:16px;line-height:1.2;overflow:hidden}.header-actions{flex-wrap:nowrap;gap:6px}.auth-button{padding:6px 10px;font-size:12px}.filters{flex-direction:row;align-items:center;height:38px}.header-actions .filters{width:auto}.favorites-modal .modal-content{width:min(360px,100% - 32px);min-width:0;max-width:calc(100% - 32px)}.filters-body{box-sizing:border-box;z-index:980;grid-template-columns:1fr;width:auto;max-width:none;max-height:0;padding-top:34px;position:fixed;top:62px;left:12px;right:16px;overflow:hidden}.header-actions .filters-body{left:12px;right:16px}.filters-body.open{max-height:calc(100dvh - 74px);overflow:auto}.filter-item{flex-wrap:nowrap;align-items:center;width:100%;min-width:0}.filter-item:not(.checkbox){flex-direction:row}.filter-item label{text-align:left;flex:0 0 70px}.filter-item.checkbox{flex-direction:row;align-items:center}.dropdown{flex:auto;width:100%;min-width:0}#schedule{flex-direction:column}.week-row{flex-direction:column;width:100%}.day{flex:none;width:100%;max-width:none}.day .lesson:last-child{margin-bottom:0}.year-header{margin-top:12px}}@media (width>=821px){.mobile-menu{opacity:0;visibility:hidden;pointer-events:none;z-index:980;border:1px solid #e5e7eb;border-radius:14px;gap:10px;width:240px;max-width:calc(100vw - 48px);height:auto;padding:12px;transition:opacity .2s,transform .2s,visibility 0s linear .2s;top:66px;right:24px;transform:translateY(-8px)scale(.98);box-shadow:0 22px 44px #0f172a33}.mobile-menu.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .2s,transform .2s;transform:translateY(0)scale(1)}.mobile-menu-overlay{display:none}}#site-header .header-actions[data-v-df668024]{align-items:center}#site-header .header-actions .ghost-button[data-v-df668024],#site-header .header-actions .auth-button[data-v-df668024]{box-sizing:border-box;justify-content:center;align-items:center;height:38px;min-height:38px;display:inline-flex}#site-header .header-actions .ghost-button[data-v-df668024]{padding-block:0}#site-header .header-actions .filters-toggle[data-v-df668024],#site-header .header-actions .menu-toggle[data-v-df668024],#site-header .header-actions .favorites-button.icon-only[data-v-df668024]{width:38px;min-width:38px;padding-inline:0}.day-title .day-name[data-v-e4ac1496]{font-size:18px}.day-empty[data-v-e4ac1496]{color:#6b7280;margin:12px 0 0;font-size:14px}.day-skeleton[data-v-c06196df]{pointer-events:none}.day-skeleton__title-row[data-v-c06196df]{margin-bottom:12px}.day-skeleton__bar[data-v-c06196df]{background:linear-gradient(90deg,#e5e7eb 0%,#f3f4f6 45%,#e5e7eb 90%) 0 0/200% 100%;border-radius:8px;animation:1.3s ease-in-out infinite day-skeleton-shimmer-c06196df}.day-skeleton__bar--wide[data-v-c06196df]{width:55%;min-width:120px;height:20px}.day-skeleton__bar--narrow[data-v-c06196df]{width:36%;min-width:88px;height:16px}.day-skeleton__body[data-v-c06196df]{flex-direction:column;gap:10px;display:flex}.day-skeleton__lesson[data-v-c06196df]{border-top:1px solid #f3f4f6;flex-direction:column;gap:6px;padding:10px 0;display:flex}.day-skeleton__lesson[data-v-c06196df]:first-of-type{border-top:none;padding-top:0}.day-skeleton__bar--lesson-title[data-v-c06196df]{width:85%;height:14px}.day-skeleton__bar--lesson-meta[data-v-c06196df]{width:50%;height:12px}@keyframes day-skeleton-shimmer-c06196df{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.day-skeleton__bar[data-v-c06196df]{background:#e5e7eb;animation:none}}.schedule-empty[data-v-54aea14a]{color:#6b7280;margin:16px 0 0;font-size:15px}.layout[data-v-2f15e484]{min-height:100vh}
