:root{--color-text-primary: #1c1c1e;--color-text-secondary: #8e8e93;--color-text-tertiary: #aeaeb2;--color-bg: #ffffff;--color-bg-secondary: #f5f5f7;--color-bg-tertiary: #f2f2f7;--color-border: rgba(0, 0, 0, .08);--color-border-strong: rgba(0, 0, 0, .15);--color-accent: #007aff;--color-accent-bg: rgba(0, 122, 255, .06);--color-danger: #ff3b30;--color-danger-bg: rgba(255, 59, 48, .08);--space-xs: 4px;--space-sm: 8px;--space-md: 12px;--space-lg: 16px;--space-xl: 20px;--space-2xl: 24px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 10px;--radius-xl: 14px;--radius-sheet: 20px;--font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, sans-serif;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-base: 13px;--font-size-md: 14px;--font-size-lg: 16px;--font-size-xl: 18px;--font-size-2xl: 24px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--transition-fast: .15s ease;--transition-normal: .25s ease;--transition-slow: .35s cubic-bezier(.25, .46, .45, .94);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 3px rgba(0, 0, 0, .08);--shadow-md: 0 2px 4px rgba(0, 0, 0, .04), 0 4px 12px rgba(0, 0, 0, .1);--shadow-lg: 0 4px 8px rgba(0, 0, 0, .04), 0 8px 24px rgba(0, 0, 0, .12);--shadow-sheet: 0 -2px 8px rgba(0, 0, 0, .04), 0 -4px 24px rgba(0, 0, 0, .12);--safe-area-top: env(safe-area-inset-top, 0px);--safe-area-bottom: env(safe-area-inset-bottom, 0px);--safe-area-left: env(safe-area-inset-left, 0px);--safe-area-right: env(safe-area-inset-right, 0px)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-family);background-color:var(--color-bg);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@media(max-width:768px){:root{--font-size-xs: 13px;--font-size-sm: 14px;--font-size-base: 15px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 28px}}.calendar{padding:var(--space-xl);min-width:1200px;margin:0 auto;font-family:var(--font-family);overflow-x:auto}.calendar-grid{display:grid;grid-template-columns:repeat(6,minmax(180px,1fr));column-gap:0;row-gap:24px;border-radius:var(--radius-lg)}.month-column{background:var(--color-bg);border-right:1px solid var(--color-border)}.month-column:nth-child(6n){border-right:none}.month-header{font-weight:var(--font-weight-semibold);font-size:var(--font-size-base);padding:var(--space-sm) var(--space-sm);background:var(--color-bg-tertiary);text-align:center;text-transform:uppercase;letter-spacing:.3px;color:var(--color-text-primary)}.month-days{display:flex;flex-direction:column}.day-row{display:flex;align-items:flex-start;padding:2px 6px;min-height:24px;font-size:var(--font-size-sm);position:relative;background:var(--color-bg);cursor:pointer;overflow:hidden;transition:background-color var(--transition-fast)}.day-row:hover,.day-row.odd-week{background-color:var(--color-bg-secondary)}.day-row.odd-week:hover{background-color:var(--color-bg-tertiary)}.day-row.week-end{border-bottom:1px solid var(--color-border)}.day-row.today{background-color:var(--color-accent-bg);border-left:3px solid var(--color-accent)}.day-row.today.odd-week{background-color:var(--color-accent-bg)}.day-row.today:hover{background-color:#007aff1a}.day-weekday{width:12px;flex-shrink:0;color:var(--color-text-secondary);font-size:var(--font-size-xs)}.day-number{width:18px;flex-shrink:0;text-align:right;margin-right:6px;color:var(--color-text-primary);font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums}.day-events{flex:1;min-width:0;display:flex;flex-direction:column;align-items:stretch;gap:1px;font-size:var(--font-size-xs)}.week-number{position:absolute;right:4px;font-size:10px;color:var(--color-text-tertiary);font-weight:var(--font-weight-normal)}.event-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.event-dot.lecture{background-color:var(--course-color, #4CAF50)}.event-dot.deliverable{background-color:transparent;border:1.5px solid var(--course-color, #d32f2f)}.event-dot.exam{background-color:var(--course-color, #1976d2)}.event-dot.presentation{background-color:transparent;border:1.5px solid var(--course-color, #4CAF50)}.event-dot.meeting{background-color:var(--course-color, #00897b)}.event-item{display:flex;align-items:center;gap:3px;cursor:pointer;padding:1px 3px;border-radius:2px;min-width:0;position:relative;transition:background var(--transition-fast)}.event-item:hover{background:#00000009}.event-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.event-item.has-notes .event-label{text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.day-row.drag-over{background-color:var(--color-accent-bg);outline:2px dashed var(--color-accent);outline-offset:-2px}.day-row.drag-over.odd-week{background-color:#007aff1f}.event-item[draggable=true]{cursor:grab}.event-item[draggable=true]:active{cursor:grabbing}.event-item.dragging{opacity:.5;background:var(--color-accent-bg)}.calendar.touch-dragging{user-select:none;-webkit-user-select:none}.calendar.touch-dragging .day-row{touch-action:none}@media(max-width:768px)and (orientation:portrait){.calendar{min-width:unset;padding:var(--space-xs) var(--space-sm);overflow-x:hidden;overflow-y:auto}.calendar-grid{display:flex;transition:transform var(--transition-slow);background:transparent;gap:0;border-radius:0;overflow:visible}.calendar-grid .month-column{min-width:50%;flex:0 0 50%;border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--color-border)}.calendar-grid .month-column:nth-child(odd){border-right:none;border-radius:var(--radius-md) 0 0 var(--radius-md)}.calendar-grid .month-column:nth-child(2n){border-radius:0 var(--radius-md) var(--radius-md) 0}.month-header{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);padding:var(--space-sm) var(--space-sm);letter-spacing:.3px}.day-row{min-height:24px;padding:2px var(--space-xs);font-size:var(--font-size-sm)}.day-weekday{font-size:var(--font-size-xs);width:14px}.day-number{font-size:var(--font-size-sm);width:20px}.day-events{font-size:var(--font-size-xs)}.event-item{padding:1px 3px;gap:4px}}@media(max-width:960px)and (orientation:landscape){.calendar{min-width:unset;padding:var(--space-sm)}.calendar-grid{grid-template-columns:repeat(6,1fr)}.month-header{font-size:10px;padding:2px 4px}.day-row{min-height:14px;padding:0 3px;font-size:10px}.day-weekday{width:8px;font-size:9px}.day-number{width:14px;margin-right:2px;font-size:9px}.day-events{font-size:9px}.event-dot{width:5px;height:5px}.week-number{display:none}}.month-indicator{display:none}@media(max-width:768px)and (orientation:portrait){.month-indicator{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-md) 0 var(--space-sm)}.month-indicator-dots{display:flex;gap:var(--space-sm)}.month-indicator-dot{width:8px;height:8px;border-radius:50%;background:var(--color-border-strong);border:none;padding:0;cursor:pointer;transition:all var(--transition-fast)}.month-indicator-dot.active{background:var(--color-accent);transform:scale(1.2)}.month-indicator-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.calendar.single-month .calendar-grid .month-column{min-width:100%;flex:0 0 100%;border-radius:var(--radius-md);border-right:1px solid var(--color-border)}.calendar.single-month .calendar-grid .month-column:nth-child(odd){border-radius:var(--radius-md)}.calendar.single-month .calendar-grid .month-column:nth-child(2n){border-radius:var(--radius-md)}}.view-toggle-btn{display:none}@media(max-width:768px)and (orientation:portrait){.view-toggle-btn{display:flex;align-items:center;justify-content:center;position:fixed;bottom:calc(var(--safe-area-bottom) + 16px);left:16px;width:36px;height:36px;border-radius:50%;border:none;background:#ffffffd9;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:var(--shadow-md);cursor:pointer;z-index:90;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);-webkit-tap-highlight-color:transparent;transition:all var(--transition-fast)}.view-toggle-btn:active{transform:scale(.9)}}.course-filter{position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:var(--space-md);padding:calc(var(--safe-area-top) + var(--space-md)) var(--space-xl) var(--space-md);border-bottom:1px solid var(--color-border);font-size:var(--font-size-base);background:#ffffffd9;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}.filter-label{font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.filter-items{display:flex;flex-wrap:wrap;gap:var(--space-lg)}.filter-item{display:flex;align-items:center;gap:var(--space-sm);cursor:grab;-webkit-user-select:none;user-select:none;min-height:32px}.filter-item.dragging{opacity:.5}.drag-handle{color:var(--color-text-tertiary);font-size:10px;cursor:grab;letter-spacing:-2px}.drag-handle:active{cursor:grabbing}.filter-item input[type=checkbox]{cursor:pointer}.color-dot{width:10px;height:10px;border-radius:50%}.course-name{color:var(--color-text-primary);cursor:pointer;transition:color var(--transition-fast)}.course-name:hover{color:var(--color-accent)}.live-badge{font-size:9px;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.5px;color:var(--color-accent);background:#007aff1a;padding:1px 5px;border-radius:3px;line-height:1.4}.add-course-btn{background:none;border:1px dashed var(--color-border-strong);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-sm);font-size:var(--font-size-sm);cursor:pointer;color:var(--color-text-secondary);transition:all var(--transition-fast)}.add-course-btn:hover{border-color:var(--color-accent);color:var(--color-accent)}.user-section{margin-left:auto;display:flex;align-items:center;gap:var(--space-md)}.user-email{color:var(--color-text-secondary);font-size:var(--font-size-sm)}.icon-btn{width:32px;height:32px;border-radius:50%;border:none;background:var(--color-bg-tertiary);cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent;transition:all var(--transition-fast);color:var(--color-text-secondary)}.icon-btn:hover{background:var(--color-border-strong);color:var(--color-text-primary)}.avatar-btn{width:32px;height:32px;border-radius:50%;border:none;background:var(--color-accent);cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent;transition:opacity var(--transition-fast)}.avatar-btn:hover{opacity:.85}.avatar-initials{color:#fff;font-size:13px;font-weight:var(--font-weight-semibold);letter-spacing:.3px;line-height:1}.avatar-img{width:100%;height:100%;object-fit:cover;border-radius:50%}.top-bar-month-label{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);letter-spacing:.2px}.mobile-top-bar{position:sticky;top:0;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:calc(var(--safe-area-top) + var(--space-sm)) var(--space-md) var(--space-sm);background:#ffffffd9;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-bottom:1px solid var(--color-border);min-height:calc(44px + var(--safe-area-top))}.hamburger-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;background:none;border:none;cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent}.hamburger-btn svg{color:var(--color-text-primary)}.drawer-overlay{position:fixed;inset:0;z-index:500;background:#0006;opacity:0;pointer-events:none;transition:opacity .35s cubic-bezier(.25,.46,.45,.94)}.drawer-overlay.open{opacity:1;pointer-events:auto}.drawer-panel{position:fixed;top:0;left:0;bottom:0;width:280px;max-width:80vw;z-index:501;background:#fffffff7;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:var(--shadow-lg);transform:translate(-100%);transition:transform .35s cubic-bezier(.25,.46,.45,.94);display:flex;flex-direction:column;padding-top:var(--safe-area-top)}.drawer-panel.open{transform:translate(0)}.drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg) var(--space-xl);border-bottom:1px solid var(--color-border);flex-shrink:0}.drawer-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);letter-spacing:-.3px}.drawer-close-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;font-size:24px;color:var(--color-text-secondary);cursor:pointer;border-radius:var(--radius-sm);-webkit-tap-highlight-color:transparent}.drawer-close-btn:active{background:var(--color-bg-tertiary)}.drawer-body{flex:1;overflow-y:auto;padding:var(--space-md) var(--space-xl);display:flex;flex-direction:column;gap:var(--space-xs)}.drawer-body .filter-item{min-height:44px;padding:var(--space-sm) 0;border-radius:var(--radius-sm);font-size:var(--font-size-base)}.drawer-body .filter-item:active{background:var(--color-bg-tertiary)}.drawer-body .add-course-btn{margin-top:var(--space-sm);align-self:flex-start}.drawer-footer{flex-shrink:0;border-top:1px solid var(--color-border);padding:var(--space-lg) var(--space-xl) calc(var(--safe-area-bottom) + var(--space-lg));display:flex;flex-direction:column;gap:var(--space-sm)}.drawer-share-btn,.drawer-settings-btn,.drawer-notification-btn,.drawer-profile-btn{display:flex;align-items:center;gap:var(--space-md);width:100%;background:none;border:none;padding:var(--space-sm) 0;font-size:var(--font-size-base);font-family:inherit;color:var(--color-text-primary);cursor:pointer;-webkit-tap-highlight-color:transparent}.drawer-share-btn:active,.drawer-settings-btn:active,.drawer-notification-btn:active,.drawer-profile-btn:active{opacity:.7}.drawer-share-btn{color:var(--color-accent)}.drawer-share-btn svg{flex-shrink:0}.drawer-settings-btn svg{flex-shrink:0;color:var(--color-text-secondary)}.drawer-notification-btn svg{flex-shrink:0;color:var(--color-text-secondary)}.avatar-initials-small{width:28px;height:28px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:var(--font-weight-semibold);letter-spacing:.3px;flex-shrink:0}.avatar-img-small{width:28px;height:28px;border-radius:50%;object-fit:cover;flex-shrink:0}.modal-overlay{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-content{background:var(--color-bg);padding:var(--space-2xl);border-radius:var(--radius-xl);width:100%;max-width:400px;box-shadow:var(--shadow-lg);animation:scaleIn .25s ease}.modal-content h3{margin:0 0 var(--space-xl);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.modal-header{display:flex;align-items:center;gap:var(--space-sm);margin:0 0 var(--space-xl)}.modal-header h3{margin:0}.modal-back-btn{background:none;border:none;padding:0;cursor:pointer;color:var(--color-text-tertiary);display:flex;align-items:center;-webkit-tap-highlight-color:transparent;transition:color var(--transition-fast)}.modal-back-btn:hover{color:var(--color-text-primary)}.form-group{margin-bottom:var(--space-lg)}.form-group label{display:block;margin-bottom:var(--space-sm);font-size:var(--font-size-base);color:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.form-group input,.form-group select,.form-group textarea{width:100%;padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:var(--font-size-md);font-family:inherit;box-sizing:border-box;background:var(--color-bg);color:var(--color-text-primary);transition:border-color var(--transition-fast)}.form-group textarea{resize:vertical;min-height:60px}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 2px #007aff26}.modal-actions{display:flex;justify-content:space-between;align-items:center;margin-top:var(--space-2xl);gap:var(--space-md)}.right-actions{display:flex;gap:var(--space-sm);margin-left:auto}.modal-actions button{padding:var(--space-sm) var(--space-lg);border:none;border-radius:var(--radius-sm);background:var(--color-bg-tertiary);cursor:pointer;font-size:var(--font-size-base);font-family:inherit;color:var(--color-text-primary);font-weight:var(--font-weight-medium);transition:all var(--transition-fast)}.modal-actions button:hover{background:#00000014}.modal-actions .save-btn{background:var(--color-accent);color:#fff}.modal-actions .save-btn:hover{background:#0066d6}.modal-actions .delete-btn{color:var(--color-danger);background:var(--color-danger-bg)}.modal-actions .delete-btn:hover{background:#ff3b3026}.time-input-wrapper{position:relative}.time-input-wrapper input{padding-right:32px}.time-clear-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:var(--color-bg-tertiary);border:none;border-radius:50%;width:22px;height:22px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-text-secondary);font-size:12px;line-height:1;padding:0;-webkit-tap-highlight-color:transparent}.time-clear-btn:hover{background:var(--color-border-strong);color:var(--color-text-primary)}.form-group-row{display:flex;gap:var(--space-md)}.form-group-row .form-group{flex:1}.color-picker{display:flex;gap:var(--space-sm);flex-wrap:wrap}.color-option{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0;transition:transform var(--transition-fast)}.color-option:hover{transform:scale(1.1)}.color-option.selected{border-color:var(--color-text-primary)}@media(max-width:768px){.modal-overlay{align-items:flex-end}.modal-content{max-width:100%;border-radius:var(--radius-sheet) var(--radius-sheet) 0 0;padding:var(--space-md) var(--space-xl) calc(var(--safe-area-bottom) + var(--space-xl));max-height:75vh;overflow-y:auto;animation:slideUp .35s cubic-bezier(.25,.46,.45,.94);box-shadow:var(--shadow-sheet)}.modal-content:before{content:"";display:block;width:36px;height:5px;background:var(--color-border-strong);border-radius:3px;margin:0 auto var(--space-lg)}.modal-content h3{text-align:center;font-size:var(--font-size-lg);margin-bottom:var(--space-lg)}.form-group input,.form-group select,.form-group textarea{font-size:16px;padding:var(--space-md)}.modal-actions{flex-direction:column-reverse;gap:var(--space-sm)}.right-actions{display:flex;flex-direction:column;width:100%;gap:var(--space-sm);margin-left:0}.modal-actions button{width:100%;min-height:48px;font-size:var(--font-size-lg);border-radius:var(--radius-md)}.modal-actions .delete-btn{width:100%}}.event-detail-modal{display:flex;flex-direction:column;gap:var(--space-md)}.event-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}.event-detail-header h3{margin:0;flex:1}.event-detail-type{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.5px;padding:2px 8px;border-radius:var(--radius-sm);flex-shrink:0;line-height:1.4}.event-detail-type.lecture{color:#2e7d32;background:#4caf501f}.event-detail-type.deliverable{color:#c62828;background:#d32f2f1a}.event-detail-type.exam{color:#1565c0;background:#1976d21a}.event-detail-type.presentation{color:#6a1b9a;background:#9c27b01a}.event-detail-type.meeting{color:#00897b;background:#0096881a}.event-detail-type.holiday{color:#e65100;background:#ff98001a}.event-detail-date,.event-detail-time,.event-detail-location{font-size:var(--font-size-base);color:var(--color-text-secondary)}.event-detail-course{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--font-size-base);color:var(--color-text-primary)}.event-detail-color{width:12px;height:12px;border-radius:50%;flex-shrink:0}.event-detail-notes{font-size:var(--font-size-base);color:var(--color-text-secondary);line-height:1.5;padding:var(--space-md);background:var(--color-bg-secondary);border-radius:var(--radius-sm);white-space:pre-wrap}@media(max-width:768px){.event-detail-header{flex-direction:column;gap:var(--space-sm)}}.share-section{margin-bottom:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--color-border)}.share-label{display:block;margin-bottom:var(--space-sm);font-size:var(--font-size-base);color:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.share-enable-btn{background:none;border:1px dashed var(--color-border-strong);padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-sm);font-size:var(--font-size-base);cursor:pointer;color:var(--color-accent);font-family:inherit;transition:all var(--transition-fast);width:100%}.share-enable-btn:hover:not(:disabled){border-color:var(--color-accent);background:var(--color-accent-bg)}.share-enable-btn:disabled{opacity:.6;cursor:not-allowed}.share-details{display:flex;flex-direction:column;gap:var(--space-md)}.share-toggle-row{display:flex;align-items:center;justify-content:space-between}.share-status{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.share-toggle-btn{background:none;border:1px solid var(--color-border-strong);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-sm);font-size:var(--font-size-sm);cursor:pointer;color:var(--color-text-secondary);font-family:inherit;transition:all var(--transition-fast)}.share-toggle-btn:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}.share-urls{display:flex;flex-direction:column;gap:var(--space-md)}.share-url-group{display:flex;flex-direction:column;gap:var(--space-xs)}.share-url-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.5px}.share-url-row{display:flex;gap:var(--space-xs)}.share-url-input{flex:1;min-width:0;padding:var(--space-sm)!important;font-size:var(--font-size-xs)!important;background:var(--color-bg-tertiary)!important;border:1px solid var(--color-border)!important;border-radius:var(--radius-sm);color:var(--color-text-secondary)}.share-copy-btn{flex-shrink:0;padding:var(--space-sm) var(--space-md);border:none;border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);cursor:pointer;font-family:inherit;transition:background var(--transition-fast);min-width:56px}.share-copy-btn:hover{background:#0066d6}.course-modal-tabs{display:flex;gap:0;margin-bottom:var(--space-lg);border-radius:var(--radius-sm);background:var(--color-bg-tertiary);padding:2px}.course-modal-tab{flex:1;padding:var(--space-sm) var(--space-md);border:none;border-radius:calc(var(--radius-sm) - 1px);background:transparent;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);font-family:inherit;cursor:pointer;color:var(--color-text-secondary);transition:all var(--transition-fast)}.course-modal-tab.active{background:var(--color-bg);color:var(--color-text-primary);box-shadow:var(--shadow-sm)}.subscribe-mode-selector{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-lg)}.subscribe-mode-option{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--transition-fast)}.subscribe-mode-option:has(input:checked){border-color:var(--color-accent);background:var(--color-accent-bg, rgba(0, 122, 255, .05))}.subscribe-mode-option input[type=radio]{margin-top:3px;flex-shrink:0}.subscribe-mode-label{display:flex;flex-direction:column;gap:1px}.subscribe-mode-title{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.subscribe-mode-desc{font-size:var(--font-size-sm);color:var(--color-text-tertiary);line-height:1.3}.subscribed-notice{font-size:var(--font-size-sm);color:var(--color-text-tertiary);line-height:1.4;margin-bottom:var(--space-lg);padding:var(--space-sm) var(--space-md);background:var(--color-bg-tertiary);border-radius:var(--radius-sm)}.subscribe-error-msg{background:var(--color-danger-bg);color:var(--color-danger);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);font-size:var(--font-size-sm);margin-bottom:var(--space-md)}.profile-modal{max-width:380px}.profile-avatar-section{display:flex;justify-content:center;margin-bottom:var(--space-xl)}.profile-avatar-large{width:80px;height:80px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:var(--font-weight-semibold);letter-spacing:.5px;border:none;padding:0;cursor:pointer;position:relative;overflow:hidden;font-family:inherit;-webkit-tap-highlight-color:transparent}.profile-avatar-img{width:100%;height:100%;object-fit:cover;border-radius:50%}.profile-avatar-overlay{position:absolute;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;color:#fff;opacity:0;transition:opacity var(--transition-fast);border-radius:50%}.profile-avatar-large:hover .profile-avatar-overlay{opacity:1}.profile-avatar-large.uploading{opacity:.6;pointer-events:none}.profile-avatar-large.uploading .profile-avatar-overlay{opacity:1}.profile-avatar-input{display:none}.profile-message{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);font-size:var(--font-size-sm);margin-bottom:var(--space-lg)}.profile-message.success{background:#34c7591a;color:#248a3d}.profile-message.error{background:var(--color-danger-bg);color:var(--color-danger)}.profile-save-row{display:flex;justify-content:flex-end;margin-bottom:var(--space-md)}.profile-save-row .save-btn{padding:var(--space-sm) var(--space-xl);border:none;border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-size:var(--font-size-base);font-family:inherit;font-weight:var(--font-weight-medium);cursor:pointer;transition:background var(--transition-fast)}.profile-save-row .save-btn:hover{background:#0066d6}.profile-save-row .save-btn:disabled{opacity:.5;cursor:not-allowed}.profile-divider{height:1px;background:var(--color-border);margin:var(--space-lg) 0}.profile-sign-out-btn{width:100%;padding:var(--space-sm) var(--space-lg);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:none;font-size:var(--font-size-base);font-family:inherit;font-weight:var(--font-weight-medium);color:var(--color-danger);cursor:pointer;transition:all var(--transition-fast)}.profile-sign-out-btn:hover{background:var(--color-danger-bg);border-color:var(--color-danger)}@media(max-width:768px){.profile-modal{max-width:100%}.profile-save-row{justify-content:stretch}.profile-save-row .save-btn{width:100%;min-height:48px;font-size:var(--font-size-lg);border-radius:var(--radius-md)}.profile-sign-out-btn{min-height:48px;font-size:var(--font-size-lg);border-radius:var(--radius-md)}}.settings-modal{display:flex;flex-direction:column;gap:var(--space-md)}.settings-modal-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);min-height:40px}.settings-modal-label{font-size:var(--font-size-base);color:var(--color-text-secondary);font-weight:var(--font-weight-medium);flex-shrink:0}.settings-modal-range-group{display:flex;align-items:center;gap:4px}.settings-modal select{font-family:inherit;font-size:var(--font-size-sm);padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text-primary);cursor:pointer}.settings-modal select:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 2px #007aff26}.settings-modal-link{cursor:pointer;-webkit-tap-highlight-color:transparent}.settings-modal-link:active{opacity:.7}.settings-modal-chevron{font-size:20px;color:var(--color-text-tertiary);line-height:1}@media(max-width:768px){.settings-modal select{font-size:16px}}.notification-settings-modal{display:flex;flex-direction:column;gap:var(--space-md)}.notification-section{display:flex;flex-direction:column;gap:var(--space-sm)}.notification-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.8px;color:var(--color-text-tertiary);padding-bottom:var(--space-xs);border-bottom:1px solid var(--color-border)}.notification-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);min-height:40px}.notification-row-label{font-size:var(--font-size-base);color:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.notification-toggle{position:relative;width:44px;height:24px;background:var(--color-border-strong);border-radius:12px;border:none;cursor:pointer;padding:0;transition:background var(--transition-fast);flex-shrink:0;-webkit-tap-highlight-color:transparent}.notification-toggle.active{background:var(--color-accent)}.notification-toggle:after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform var(--transition-fast);box-shadow:0 1px 3px #00000026}.notification-toggle.active:after{transform:translate(20px)}.notification-webhook-input{width:100%;font-family:inherit;font-size:var(--font-size-sm);padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text-primary);box-sizing:border-box}.notification-webhook-input:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 2px #007aff26}.notification-webhook-input::placeholder{color:var(--color-text-tertiary)}.notification-test-btn{align-self:flex-start;font-family:inherit;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--space-xs) var(--space-md);border:1px solid var(--color-accent);border-radius:var(--radius-sm);background:none;color:var(--color-accent);cursor:pointer;transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent}.notification-test-btn:hover{background:var(--color-accent);color:#fff}.notification-test-btn:disabled{opacity:.5;cursor:not-allowed}.notification-test-btn:disabled:hover{background:none;color:var(--color-accent)}.notification-test-result{font-size:var(--font-size-sm);padding:var(--space-xs) 0}.notification-test-result.success{color:var(--color-success, #34c759)}.notification-test-result.error{color:var(--color-danger, #ff3b30)}.notification-email-label{font-size:var(--font-size-sm);color:var(--color-text-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification-time-input{font-family:inherit;font-size:var(--font-size-sm);padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text-primary)}.notification-time-input:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 2px #007aff26}.notification-event-types{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.notification-event-type-pill{font-family:inherit;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border-strong);border-radius:999px;background:none;color:var(--color-text-tertiary);cursor:pointer;transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent}.notification-event-type-pill.selected{background:var(--color-accent);border-color:var(--color-accent);color:#fff}@media(max-width:768px){.notification-webhook-input,.notification-time-input{font-size:16px}}.event-types-settings-modal{display:flex;flex-direction:column;gap:var(--space-md)}.event-types-pills{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.event-type-pill{font-family:inherit;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border-strong);border-radius:999px;background:none;color:var(--color-text-tertiary);cursor:pointer;transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent}.event-type-pill.selected{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.about-modal{display:flex;flex-direction:column;gap:var(--space-md)}.about-app-name{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.about-description{font-size:var(--font-size-base);color:var(--color-text-secondary);line-height:1.5;margin:0}.about-section{display:flex;flex-direction:column;gap:var(--space-sm)}.about-section-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.5px}.about-stack-list{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.about-stack-item{font-size:var(--font-size-sm);color:var(--color-text-secondary);background:var(--color-bg-secondary);padding:2px 10px;border-radius:var(--radius-sm)}.about-github-link{display:inline-flex;align-items:center;gap:var(--space-sm);font-size:var(--font-size-base);color:var(--color-text-secondary);text-decoration:none;transition:color var(--transition-fast)}.about-github-link:hover{color:var(--color-text-primary)}.share-modal{display:flex;flex-direction:column;gap:var(--space-lg)}.share-modal-section{display:flex;flex-direction:column;gap:var(--space-sm)}.share-modal-section-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.share-modal-desc{font-size:var(--font-size-sm);color:var(--color-text-tertiary);line-height:1.4;margin:0}.share-modal-courses{display:flex;flex-direction:column;gap:var(--space-md)}.share-modal-course{display:flex;flex-direction:column;gap:var(--space-sm)}.share-modal-course-header{display:flex;align-items:center;gap:var(--space-sm)}.share-modal-course-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.share-modal-course-name{flex:1;font-size:var(--font-size-base);color:var(--color-text-primary);font-weight:var(--font-weight-medium)}.share-modal-toggle,.share-modal-enable{padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:none;font-size:var(--font-size-xs);font-family:inherit;cursor:pointer;color:var(--color-text-secondary);transition:all var(--transition-fast)}.share-modal-toggle.active{border-color:var(--color-accent);color:var(--color-accent);background:var(--color-accent-bg)}.share-modal-enable{border-color:var(--color-accent);color:var(--color-accent)}.share-modal-enable:hover{background:var(--color-accent-bg)}.share-modal-course-urls{padding-left:calc(10px + var(--space-sm))}.share-modal .share-url-row{display:flex;gap:var(--space-xs)}.share-modal .share-url-input{flex:1;min-width:0;padding:var(--space-sm)!important;font-size:var(--font-size-xs)!important;background:var(--color-bg-tertiary)!important;border:1px solid var(--color-border)!important;border-radius:var(--radius-sm);color:var(--color-text-secondary);font-family:inherit;box-sizing:border-box}.share-modal .share-copy-btn{flex-shrink:0;padding:var(--space-sm) var(--space-md);border:none;border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);cursor:pointer;font-family:inherit;transition:background var(--transition-fast);min-width:56px}.share-modal .share-copy-btn:hover{background:#0066d6}.share-modal .share-enable-btn{background:none;border:1px dashed var(--color-border-strong);padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-sm);font-size:var(--font-size-base);cursor:pointer;color:var(--color-accent);font-family:inherit;transition:all var(--transition-fast);width:100%}.share-modal .share-enable-btn:hover:not(:disabled){border-color:var(--color-accent);background:var(--color-accent-bg)}.share-modal .share-enable-btn:disabled{opacity:.6;cursor:not-allowed}@media(max-width:768px){.share-modal .share-url-input{font-size:14px!important}}.offline-indicator{position:fixed;top:0;left:0;right:0;background:#f59e0bf2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:#fff;padding:calc(var(--safe-area-top) + 8px) var(--space-lg) var(--space-sm);display:flex;align-items:center;justify-content:center;gap:var(--space-sm);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);z-index:1001}.offline-icon{font-size:var(--font-size-lg)}.login-page{min-height:100dvh;display:flex;align-items:center;justify-content:center;background:var(--color-bg-tertiary);font-family:var(--font-family);padding:var(--space-xl)}.login-container{text-align:center;max-width:400px;width:100%}.login-container h1{margin:0 0 var(--space-sm) 0;font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.login-container p{margin:0 0 var(--space-2xl) 0;color:var(--color-text-secondary);font-size:var(--font-size-md)}.login-error{background:var(--color-danger-bg);color:var(--color-danger);padding:var(--space-md);border-radius:var(--radius-sm);margin-bottom:var(--space-lg);font-size:var(--font-size-md)}.login-message{background:#34c7591a;color:#248a3d;padding:var(--space-md);border-radius:var(--radius-sm);margin-bottom:var(--space-lg);font-size:var(--font-size-md)}.login-container form{display:flex;flex-direction:column;gap:var(--space-md)}.login-container input{padding:var(--space-md);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:16px;background:var(--color-bg);color:var(--color-text-primary);transition:border-color var(--transition-fast)}.login-container input:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px #007aff1f}.login-container form button{padding:var(--space-md);border:none;border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-size:var(--font-size-md);font-weight:var(--font-weight-medium);cursor:pointer;transition:background var(--transition-fast)}.login-container form button:hover:not(:disabled){background:#0066d6}.login-container form button:disabled{opacity:.6;cursor:not-allowed}.toggle-mode{margin-top:var(--space-xl);font-size:var(--font-size-base);color:var(--color-text-secondary)}.toggle-mode button{background:none;border:none;color:var(--color-accent);font-weight:var(--font-weight-medium);cursor:pointer;margin-left:var(--space-xs)}.subscribe-page{min-height:100dvh;display:flex;align-items:flex-start;justify-content:center;background:var(--color-bg-tertiary);font-family:var(--font-family);padding:var(--space-xl);padding-top:calc(var(--safe-area-top) + 48px)}.subscribe-container{max-width:480px;width:100%}.subscribe-loading{text-align:center;color:var(--color-text-secondary);font-size:var(--font-size-md)}.subscribe-error{text-align:center;color:var(--color-danger);font-size:var(--font-size-md);margin-bottom:var(--space-xl)}.subscribe-header{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-sm)}.subscribe-header h1{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.subscribe-color-dot{width:16px;height:16px;border-radius:50%;flex-shrink:0}.subscribe-subtitle{color:var(--color-text-secondary);font-size:var(--font-size-md);margin-bottom:var(--space-2xl)}.subscribe-actions{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-2xl)}.subscribe-btn{display:block;text-align:center;padding:var(--space-md) var(--space-xl);border-radius:var(--radius-md);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);text-decoration:none;transition:all var(--transition-fast)}.subscribe-btn-primary{background:var(--color-accent);color:#fff}.subscribe-btn-primary:hover{background:#0066d6}.subscribe-btn-secondary{background:var(--color-bg);color:var(--color-text-primary);border:1px solid var(--color-border-strong)}.subscribe-btn-secondary:hover{border-color:var(--color-accent);color:var(--color-accent)}.subscribe-btn-tertiary{background:none;color:var(--color-accent)}.subscribe-btn-tertiary:hover{background:var(--color-accent-bg)}.subscribe-home-link{display:block;text-align:center;color:var(--color-accent);text-decoration:none;font-size:var(--font-size-md)}.subscribe-events h2{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-md)}.subscribe-event-list{display:flex;flex-direction:column;background:var(--color-bg);border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--color-border)}.subscribe-event-item{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);font-size:var(--font-size-base);border-bottom:1px solid var(--color-border)}.subscribe-event-item:last-child{border-bottom:none}.subscribe-event-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.subscribe-event-date{color:var(--color-text-secondary);font-size:var(--font-size-sm);min-width:56px;font-variant-numeric:tabular-nums}.subscribe-event-title{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.subscribe-event-type{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.3px;flex-shrink:0}.app.loading,.app.error{min-height:100dvh;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-md);color:var(--color-text-secondary)}.fab{position:fixed;bottom:calc(var(--safe-area-bottom, 0px) + 16px);right:16px;width:52px;height:52px;border-radius:50%;border:none;background:#007affe6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:#fff;cursor:pointer;z-index:90;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #007aff4d,0 2px 4px #0000001a;-webkit-tap-highlight-color:transparent;transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.fab:hover{box-shadow:0 6px 16px #007aff59,0 2px 6px #0000001f}.fab:active{transform:scale(.92)}
