:root{--color-primary: #4A6FA5;--color-primary-hover: #3D5E8C;--color-primary-light: #E8EEF5;--color-primary-ghost: rgba(74, 111, 165, .08);--color-secondary-bg: #EDF0F4;--color-secondary-bg-hover: #E0E4EA;--color-danger: #D45B5B;--color-danger-hover: #BF4848;--color-danger-light: #FEF0F0;--color-warning: #D4863A;--color-warning-hover: #BD7330;--color-success: #4A9B7F;--color-success-bg: #EEFAF4;--color-info: #4A90D9;--color-info-bg: #E6F4FC;--color-bg: #F5F6F8;--color-bg-card: #FFFFFF;--color-bg-elevated: #FFFFFF;--color-text: #2D3748;--color-text-secondary: #606A78;--color-text-muted: #99A3B0;--color-text-inverse: #FFFFFF;--color-border: #E2E6EC;--color-border-light: #EEF0F4;--color-divider: #F0F2F5;--color-heading: #1A2536;--color-stat-1: linear-gradient(135deg, #4A6FA5 0%, #6B8DBF 100%);--color-stat-2: linear-gradient(135deg, #4A9B7F 0%, #6DBFA6 100%);--color-stat-3: linear-gradient(135deg, #D4863A 0%, #E0A56A 100%);--color-stat-4: linear-gradient(135deg, #7B8EC8 0%, #A3B4DE 100%);--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-xs: 12px;--font-sm: 13px;--font-base: 14px;--font-md: 15px;--font-lg: 16px;--font-xl: 18px;--font-2xl: 20px;--font-3xl: 24px;--font-4xl: 28px;--line-height: 1.6;--space-2xs: 4px;--space-xs: 6px;--space-sm: 8px;--space-md: 12px;--space-lg: 16px;--space-xl: 20px;--space-2xl: 24px;--space-3xl: 32px;--space-4xl: 40px;--space-5xl: 60px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--radius-full: 9999px;--shadow-xs: 0 1px 2px rgba(0, 0, 0, .04);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .04);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .12);--shadow-xl: 0 12px 40px rgba(0, 0, 0, .16);--transition-fast: .15s ease;--transition-normal: .2s ease;--z-nav: 200;--z-dropdown: 300;--z-modal: 1000;--z-tooltip: 10000;--z-context-menu: 10001}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-family);font-size:var(--font-base);line-height:var(--line-height);background-color:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{max-width:1200px;margin:0 auto;padding:var(--space-2xl)}.nav{position:sticky;top:0;z-index:var(--z-nav);background:var(--color-bg-card);padding:var(--space-lg) var(--space-2xl);box-shadow:var(--shadow-sm)}.nav-content{max-width:1200px;margin:0 auto;display:flex;justify-content:space-between;align-items:center}.nav h1{font-size:var(--font-2xl);font-weight:600;color:var(--color-heading);letter-spacing:-.02em}.nav-links{display:flex;gap:var(--space-xs);align-items:center}.nav-links a{text-decoration:none;color:var(--color-text-secondary);padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-lg);font-size:var(--font-base);font-weight:500;transition:all var(--transition-normal)}.nav-links a:hover{background:var(--color-primary-ghost);color:var(--color-primary)}.nav-links a.active{background:var(--color-primary);color:var(--color-text-inverse)}.nav-user{position:relative;cursor:pointer;padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-lg);background:var(--color-secondary-bg);transition:background var(--transition-normal);-webkit-user-select:none;user-select:none;margin-left:var(--space-lg)}.nav-user:hover{background:var(--color-secondary-bg-hover)}.nav-user-name{font-weight:600;color:var(--color-text);font-size:var(--font-base)}.nav-user-name:after{content:" ▾";font-size:10px;color:var(--color-text-muted)}.nav-dropdown{position:absolute;top:calc(100% + 8px);right:0;background:var(--color-bg-elevated);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);min-width:160px;overflow:hidden;z-index:var(--z-dropdown);border:1px solid var(--color-border-light)}.nav-dropdown-item{display:block;width:100%;padding:var(--space-md) var(--space-lg);text-decoration:none;color:var(--color-text);font-size:var(--font-base);border:none;background:none;cursor:pointer;text-align:left;transition:background var(--transition-fast)}.nav-dropdown-item:hover{background:var(--color-primary-ghost);color:var(--color-primary)}.card{background:var(--color-bg-card);border-radius:var(--radius-xl);padding:var(--space-2xl);box-shadow:var(--shadow-sm);margin-bottom:var(--space-xl);border:1px solid var(--color-border-light)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-xl)}.card-header h2{font-size:var(--font-xl);font-weight:600;color:var(--color-heading);letter-spacing:-.01em}.btn{padding:10px 20px;border:none;border-radius:var(--radius-lg);cursor:pointer;font-size:var(--font-base);font-weight:500;font-family:var(--font-family);transition:all var(--transition-normal);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-xs)}.btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.btn-primary{background:var(--color-primary);color:var(--color-text-inverse)}.btn-primary:hover{background:var(--color-primary-hover)}.btn-primary:active{transform:translateY(1px)}.btn-secondary{background:var(--color-secondary-bg);color:var(--color-text-secondary)}.btn-secondary:hover{background:var(--color-secondary-bg-hover)}.btn-danger{background:var(--color-danger);color:var(--color-text-inverse)}.btn-danger:hover{background:var(--color-danger-hover)}.btn-warning{background:var(--color-warning);color:var(--color-text-inverse)}.btn-warning:hover{background:var(--color-warning-hover)}.btn-sm{padding:var(--space-xs) var(--space-md);font-size:var(--font-xs)}.btn-small{padding:var(--space-xs) var(--space-md);font-size:var(--font-xs);border-radius:var(--radius-md);border:none;cursor:pointer;font-family:var(--font-family);font-weight:500;transition:all var(--transition-normal)}.form-group{margin-bottom:var(--space-lg)}.form-group label{display:block;margin-bottom:var(--space-xs);font-size:var(--font-base);font-weight:600;color:var(--color-text)}.form-group input,.form-group select,.form-group textarea{width:100%;padding:10px var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-lg);font-size:var(--font-base);font-family:var(--font-family);color:var(--color-text);background:var(--color-bg-card);transition:border-color var(--transition-normal),box-shadow var(--transition-normal)}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-ghost)}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--color-text-muted)}.form-group input:disabled,.form-group select:disabled{background:var(--color-secondary-bg);cursor:not-allowed}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--space-lg)}.form-hint{color:var(--color-text-muted);font-size:var(--font-xs);margin-top:var(--space-2xs)}.form-actions{display:flex;gap:var(--space-sm)}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:var(--space-md) var(--space-lg);text-align:left;border-bottom:1px solid var(--color-border-light)}.table th{font-weight:600;color:var(--color-text-muted);font-size:var(--font-xs);text-transform:uppercase;letter-spacing:.04em}.table tr:hover{background:var(--color-primary-ghost)}.table tr:last-child td{border-bottom:none}.data-table{width:100%;border-collapse:collapse}.data-table th{background:var(--color-divider);padding:var(--space-md) var(--space-lg);text-align:left;font-weight:600;color:var(--color-text-secondary);font-size:var(--font-xs);text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--color-border)}.data-table td{padding:var(--space-md) var(--space-lg);border-bottom:1px solid var(--color-border-light);color:var(--color-text);font-size:var(--font-base)}.data-table tr:hover{background:var(--color-primary-ghost)}.project-badge{display:inline-block;padding:var(--space-2xs) 10px;border-radius:var(--radius-full);font-size:var(--font-xs);color:var(--color-text-inverse);font-weight:500}.status{padding:var(--space-2xs) var(--space-md);border-radius:var(--radius-full);font-size:var(--font-xs);font-weight:600}.status.active,.status.enabled{background:var(--color-success-bg);color:var(--color-success)}.status.inactive,.status.disabled{background:var(--color-danger-light);color:var(--color-danger)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--space-xl);margin-bottom:var(--space-2xl)}.stat-card{background:var(--color-stat-1);color:var(--color-text-inverse);padding:var(--space-2xl);border-radius:var(--radius-xl);border:none}.stat-card.green{background:var(--color-stat-2)}.stat-card.orange{background:var(--color-stat-3)}.stat-card.blue{background:var(--color-stat-4)}.stat-value{font-size:32px;font-weight:700;margin-bottom:var(--space-sm);letter-spacing:-.02em}.stat-label{font-size:var(--font-base);opacity:.9}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:var(--color-bg-elevated);border-radius:var(--radius-xl);padding:var(--space-2xl);width:90%;max-width:500px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-xl)}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-xl)}.modal-header h3{font-size:var(--font-xl);font-weight:600;color:var(--color-heading)}.modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:var(--color-text-muted);width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);transition:all var(--transition-fast)}.modal-close:hover{background:var(--color-secondary-bg);color:var(--color-text)}.modal-actions{display:flex;gap:var(--space-md);justify-content:flex-end;margin-top:var(--space-2xl)}.empty-state{text-align:center;padding:var(--space-5xl) var(--space-xl);color:var(--color-text-muted)}.empty-state p{margin-bottom:var(--space-xl)}.date-nav{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-xl)}.date-nav button{padding:var(--space-sm) var(--space-lg);background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-base);color:var(--color-text-secondary);transition:all var(--transition-normal)}.date-nav button:hover{border-color:var(--color-primary);color:var(--color-primary)}.date-nav span{font-size:var(--font-lg);font-weight:600;min-width:200px;text-align:center;color:var(--color-heading)}.actions{display:flex;gap:var(--space-sm)}.date-picker-row{display:flex;gap:var(--space-lg);align-items:flex-end;margin-bottom:var(--space-xl)}.date-picker-row .form-group{margin-bottom:0}.error-message{background:var(--color-danger-light);color:var(--color-danger);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-xl);border:1px solid var(--color-danger);font-size:var(--font-base)}.success-message{background:var(--color-success-bg);color:var(--color-success);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-xl);border:1px solid var(--color-success);font-size:var(--font-base)}.info-message{background:var(--color-info-bg);color:var(--color-info);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-xl);border:1px solid var(--color-info);font-size:var(--font-base)}.loading{text-align:center;padding:var(--space-5xl);font-size:var(--font-lg);color:var(--color-primary)}.calendar-view{display:flex;flex-direction:column;gap:var(--space-lg)}.calendar-toolbar{display:flex;justify-content:space-between;align-items:center;background:var(--color-bg-card);padding:var(--space-lg) var(--space-xl);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm);border:1px solid var(--color-border-light)}.toolbar-left{display:flex;align-items:center;gap:var(--space-md)}.toolbar-right{display:flex;align-items:center;gap:var(--space-lg)}.calendar-title{font-size:var(--font-xl);font-weight:600;color:var(--color-heading);min-width:200px}.view-switcher{display:flex;gap:var(--space-2xs);background:var(--color-secondary-bg);padding:var(--space-2xs);border-radius:var(--radius-lg)}.view-switcher .btn{padding:var(--space-sm) var(--space-lg);font-size:var(--font-sm)}.calendar-container{min-height:600px;padding:var(--space-lg)}.fc{font-family:var(--font-family)}.fc .fc-toolbar-title{font-size:var(--font-xl);font-weight:600;color:var(--color-heading)}.fc .fc-button{background:var(--color-secondary-bg);border:none;color:var(--color-text-secondary);padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-md);font-weight:500;transition:all var(--transition-normal)}.fc .fc-button:hover{background:var(--color-secondary-bg-hover)}.fc .fc-button-active{background:var(--color-primary)!important;color:var(--color-text-inverse)!important}.fc .fc-button-primary:not(:disabled).fc-button-active{background:var(--color-primary)}.fc-theme-standard td,.fc-theme-standard th,.fc-theme-standard .fc-scrollgrid{border-color:var(--color-border-light)}.fc .fc-daygrid-day-top{justify-content:center;padding:var(--space-sm)}.fc .fc-col-header-cell-cushion{color:var(--color-text-secondary);font-weight:500;text-decoration:none;padding:var(--space-md) var(--space-2xs)}.fc .fc-daygrid-day-number{color:var(--color-text);text-decoration:none;font-weight:500;font-size:var(--font-base)}.fc .fc-day-today{background:var(--color-primary-ghost)!important}.fc .fc-day-today .fc-daygrid-day-number{background:var(--color-primary);color:var(--color-text-inverse);width:28px;height:28px;min-width:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--font-sm);box-sizing:border-box}.fc .fc-event{border-radius:var(--radius-sm);border:none!important;padding:2px var(--space-xs);font-size:var(--font-xs);cursor:pointer;transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.fc .fc-event:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.fc .fc-event .fc-event-title{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fc .fc-event .fc-event-time{font-size:11px;opacity:.9}.fc .fc-daygrid-event{white-space:nowrap;margin:2px var(--space-2xs)}.fc .fc-timegrid-event{min-height:24px}.fc .fc-timegrid-slot{height:48px}.fc .fc-timegrid-slot-label-cushion{color:var(--color-text-muted);font-size:var(--font-xs)}.fc .fc-timegrid-now-indicator-line{border-color:var(--color-danger);border-width:2px}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--color-danger);border-width:6px}.fc .fc-highlight{background:#4a6fa51f}.fc .fc-daygrid-day.fc-day-today.fc-highlight{background:#4a6fa533!important}.fc .fc-more-link{color:var(--color-primary);font-weight:500;text-decoration:none}.fc .fc-more-link:hover{text-decoration:underline}.fc .fc-day-sat,.fc .fc-day-sun{background:var(--color-divider)}.calendar-tooltip{position:fixed;background:var(--color-heading);color:var(--color-text-inverse);padding:var(--space-md) var(--space-lg);border-radius:var(--radius-lg);font-size:var(--font-sm);z-index:var(--z-tooltip);max-width:280px;box-shadow:var(--shadow-lg);display:none;animation:tooltipFade var(--transition-normal);line-height:var(--line-height)}@keyframes tooltipFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.tooltip-title{font-weight:600;margin-bottom:var(--space-xs);font-size:var(--font-base)}.tooltip-time{color:#ffffffbf;margin-bottom:var(--space-2xs)}.tooltip-project{font-weight:500;margin-top:var(--space-2xs)}.tooltip-desc{color:#ffffffa6;font-size:var(--font-xs);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid rgba(255,255,255,.1)}.task-context-menu{position:fixed;background:var(--color-bg-elevated);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:var(--z-context-menu);padding:var(--space-2xs) 0;min-width:120px;border:1px solid var(--color-border-light)}.task-context-menu .context-menu-item{padding:var(--space-sm) var(--space-lg);cursor:pointer;font-size:var(--font-sm);color:var(--color-danger);transition:background var(--transition-fast)}.task-context-menu .context-menu-item:hover{background:var(--color-danger-light)}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;background:linear-gradient(135deg,var(--color-primary) 0%,#3D5E8C 100%);padding:var(--space-xl)}.login-card{background:var(--color-bg-card);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);padding:var(--space-4xl);width:100%;max-width:400px}.login-card h1{color:var(--color-primary);text-align:center;margin:0 0 10px;font-size:var(--font-4xl);font-weight:700;letter-spacing:-.02em}.login-card h2{color:var(--color-text-secondary);text-align:center;margin:0 0 var(--space-3xl) 0;font-size:var(--font-xl);font-weight:500}.login-form{display:flex;flex-direction:column;gap:var(--space-xl)}.login-form .form-group{display:flex;flex-direction:column;gap:var(--space-sm)}.login-form .form-group label{font-weight:600;color:var(--color-text);font-size:var(--font-base)}.login-form .form-group input{padding:var(--space-md);border:2px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-md);transition:all var(--transition-normal)}.login-form .form-group input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-ghost)}.login-form .form-group input:disabled{background:var(--color-secondary-bg);cursor:not-allowed}.login-form .btn-primary{background:var(--color-primary);color:var(--color-text-inverse);border:none;padding:14px;border-radius:var(--radius-md);font-size:var(--font-lg);font-weight:600;cursor:pointer;transition:all var(--transition-normal)}.login-form .btn-primary:hover:not(:disabled){background:var(--color-primary-hover);box-shadow:var(--shadow-md)}.login-form .btn-primary:disabled{background:var(--color-text-muted);cursor:not-allowed}.login-alt-actions{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm)}.btn-link{background:none;border:none;color:var(--color-primary);cursor:pointer;font-size:var(--font-base);padding:var(--space-2xs) var(--space-sm);font-family:var(--font-family)}.btn-link:hover{text-decoration:underline}.login-footer{margin-top:var(--space-3xl);text-align:center;color:var(--color-text-muted);font-size:var(--font-base)}.settings-page{padding:var(--space-xl) 0}.settings-page h1{font-size:var(--font-4xl);color:var(--color-heading);margin-bottom:var(--space-3xl);font-weight:700;letter-spacing:-.02em}.settings-section{background:var(--color-bg-card);border-radius:var(--radius-xl);padding:var(--space-3xl);box-shadow:var(--shadow-sm);border:1px solid var(--color-border-light)}.settings-section h2{font-size:var(--font-2xl);color:var(--color-heading);margin-bottom:var(--space-sm);font-weight:600}.settings-section h3{font-size:var(--font-lg);color:var(--color-heading);margin-bottom:var(--space-md);font-weight:600}.settings-desc{color:var(--color-text-secondary);font-size:var(--font-base);margin-bottom:var(--space-xl);line-height:1.7}.settings-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-2xl);margin-top:var(--space-lg)}.status-badge{display:inline-block;padding:var(--space-2xs) var(--space-lg);border-radius:var(--radius-full);font-size:var(--font-sm);font-weight:600;margin-bottom:var(--space-lg)}.status-badge.enabled{background:var(--color-success-bg);color:var(--color-success)}.status-badge.disabled{background:var(--color-danger-light);color:var(--color-danger)}.settings-form{display:flex;flex-direction:column;gap:var(--space-lg)}.settings-form .form-group{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-form label{font-weight:600;color:var(--color-text);font-size:var(--font-base)}.settings-form input{padding:10px 14px;border:2px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-md);max-width:320px;transition:all var(--transition-normal)}.settings-form input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-ghost)}.qr-container{display:flex;justify-content:center;padding:var(--space-xl);background:var(--color-divider);border-radius:var(--radius-lg);margin:var(--space-lg) 0}.manual-key{margin:var(--space-md) 0}.manual-key summary{cursor:pointer;color:var(--color-primary);font-size:var(--font-base)}.secret-key{display:block;margin-top:var(--space-sm);padding:var(--space-md);background:var(--color-divider);border-radius:var(--radius-sm);font-size:var(--font-lg);letter-spacing:2px;word-break:break-all;-webkit-user-select:all;user-select:all;font-family:SF Mono,Consolas,monospace}.backup-codes-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin:var(--space-lg) 0}.backup-code{padding:10px 14px;background:var(--color-divider);border:1px dashed var(--color-border);border-radius:var(--radius-md);font-family:SF Mono,Consolas,monospace;font-size:var(--font-sm);text-align:center;-webkit-user-select:all;user-select:all;word-break:break-all;overflow-wrap:break-word;overflow:hidden}.user-management{padding:var(--space-xl) 0}.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-3xl);gap:var(--space-lg);flex-wrap:wrap}.page-header h1{margin:0;font-size:var(--font-4xl);color:var(--color-heading);font-weight:700;letter-spacing:-.02em}.user-form{display:flex;flex-direction:column;gap:var(--space-xl)}.user-list{background:var(--color-bg-card);border-radius:var(--radius-lg);padding:var(--space-xl);box-shadow:var(--shadow-sm);border:1px solid var(--color-border-light)}.modal-content{background:var(--color-bg-elevated);border-radius:var(--radius-xl);padding:var(--space-3xl);width:90%;max-width:500px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-xl)}.modal-content h2{margin:0 0 var(--space-xl) 0;color:var(--color-heading);font-size:var(--font-2xl);font-weight:600}@media (max-width: 768px){.calendar-toolbar{flex-direction:column;gap:var(--space-md);padding:var(--space-md)}.toolbar-left,.toolbar-right{width:100%;justify-content:center}.calendar-title{min-width:auto;text-align:center;order:-1;width:100%}.view-switcher{width:100%;justify-content:center}.fc .fc-toolbar-title{font-size:var(--font-lg)}.calendar-container{min-height:500px;padding:var(--space-md)}}
