:root{--bg-primary:#fff;--bg-secondary:#fbfbfb;--bg-tertiary:#f5f5f7;--border-color:#e5e7eb;--border-color-light:#f3f4f6;--text-primary:#1d1d1f;--text-secondary:#6e6e73;--text-tertiary:#86868b;--primary:#0071e3;--primary-hover:#0077ed;--primary-light:#f5f8ff;--success:#34c759;--success-light:#eafaf1;--success-border:#a3e9b9;--error:#ff3b30;--error-light:#fff2f2;--error-border:#ffccc7;--warning:#ff9500;--warning-light:#fff9f0;--warning-border:#ffe8cc;--shadow-sm:0 2px 8px #0000000a;--shadow-md:0 8px 30px #0000000f;--shadow-lg:0 16px 40px #00000014;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:24px}*{box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;padding:0;font-family:Outfit,Noto Sans JP,-apple-system,BlinkMacSystemFont,sans-serif}body{background-color:var(--bg-primary);color:var(--text-primary);line-height:1.5;overflow-x:hidden}.app-container{background-color:var(--bg-primary);flex-direction:column;min-height:100vh;display:flex}.main-content{flex:1;width:100%;max-width:1600px;margin:0 auto;padding:24px;animation:.4s ease-out fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.navbar{-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border-color-light);z-index:100;background-color:#fffc;justify-content:space-between;align-items:center;padding:16px 24px;display:flex;position:sticky;top:0}.navbar-brand{letter-spacing:-.5px;color:var(--text-primary);align-items:center;gap:10px;font-size:1.25rem;font-weight:700;display:flex}.navbar-brand span{background:linear-gradient(135deg, var(--primary), #5856d6);-webkit-text-fill-color:transparent;-webkit-background-clip:text}.navbar-controls{align-items:center;gap:16px;display:flex}.btn{border-radius:var(--radius-md);cursor:pointer;border:1px solid var(--border-color);background-color:var(--bg-primary);color:var(--text-primary);justify-content:center;align-items:center;gap:8px;padding:10px 18px;font-size:.9rem;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1);display:inline-flex}.btn:hover{background-color:var(--bg-tertiary);border-color:var(--text-tertiary)}.btn-primary{background-color:var(--primary);color:#fff;border-color:var(--primary)}.btn-primary:hover{background-color:var(--primary-hover);border-color:var(--primary-hover);box-shadow:0 4px 12px #0071e333}.btn-danger{background-color:var(--error-light);color:var(--error);border-color:var(--error-border)}.btn-danger:hover{background-color:var(--error);color:#fff;border-color:var(--error)}.role-selector{background-color:var(--bg-tertiary);border-radius:var(--radius-lg);border:1px solid var(--border-color-light);padding:4px;display:flex}.role-btn{border-radius:var(--radius-md);color:var(--text-secondary);cursor:pointer;background:0 0;border:none;padding:6px 16px;font-size:.85rem;font-weight:500;transition:all .2s}.role-btn.active{background-color:var(--bg-primary);color:var(--text-primary);box-shadow:var(--shadow-sm);font-weight:600}.date-picker-wrapper{background-color:var(--bg-tertiary);border-radius:var(--radius-lg);align-items:center;gap:8px;padding:4px 12px;display:flex}.date-input{color:var(--text-primary);cursor:pointer;background:0 0;border:none;outline:none;font-family:inherit;font-size:.9rem;font-weight:600}.dashboard-grid{grid-template-columns:1fr;gap:24px;display:grid}.card{background-color:var(--bg-primary);border-radius:var(--radius-lg);border:1px solid var(--border-color-light);box-shadow:var(--shadow-sm);padding:24px;transition:box-shadow .3s}.card:hover{box-shadow:var(--shadow-md)}.card-title{color:var(--text-primary);justify-content:space-between;align-items:center;margin-bottom:20px;font-size:1.2rem;font-weight:700;display:flex}.timetable-wrapper{border-radius:var(--radius-lg);border:1px solid var(--border-color);background-color:var(--bg-primary);margin-top:16px;overflow-x:auto}.timetable-matrix{border-collapse:collapse;table-layout:fixed}.timetable-matrix th,.timetable-matrix td{border:1px solid var(--border-color-light);text-align:center;vertical-align:middle;padding:10px}.timetable-matrix th:not(:first-child),.timetable-matrix td:not(:first-child){width:160px;min-width:160px}.timetable-matrix th{background-color:var(--bg-secondary);color:var(--text-secondary);padding:16px 12px;font-size:.85rem;font-weight:600}.timetable-matrix tr:first-child th{border-top:none}.timetable-matrix th:first-child,.timetable-matrix td:first-child{z-index:20;width:90px;min-width:90px;color:var(--text-primary);border-right:2px solid var(--border-color);font-weight:700;position:sticky;left:0;box-shadow:2px 0 5px #00000008;background-color:var(--bg-secondary)!important}.timetable-matrix td.period-label span{color:var(--text-secondary);font-size:.75rem;font-weight:400;display:block}.slot{border-radius:var(--radius-md);background-color:var(--bg-secondary);border:2px dashed #0000;flex-direction:column;justify-content:center;align-items:center;height:90px;padding:8px;transition:all .2s;display:flex;position:relative}.slot.drag-over-active{border-color:var(--primary);background-color:var(--primary-light)}.slot.drag-over-invalid{border-color:var(--error);background-color:var(--error-light)}.slot-empty{color:var(--text-tertiary);font-size:.75rem;font-weight:400}.lesson-card{background-color:var(--bg-primary);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);border:1px solid var(--border-color-light);cursor:grab;z-index:10;border-left-width:4px;flex-direction:column;justify-content:space-between;align-items:flex-start;padding:8px;transition:transform .2s,box-shadow .2s,opacity .2s;display:flex;position:absolute;inset:4px}.lesson-card:active{cursor:grabbing;opacity:.8;box-shadow:var(--shadow-md);transform:scale(.96)}.lesson-card.is-modified{background-color:var(--warning-light);border-left-color:var(--warning)!important}.lesson-subject{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;width:100%;font-size:.85rem;font-weight:700;overflow:hidden}.lesson-teacher{color:var(--text-secondary);font-size:.75rem;font-weight:500}.lesson-room{color:var(--text-tertiary);background-color:var(--bg-tertiary);border-radius:4px;padding:2px 6px;font-size:.7rem;font-weight:400}.modified-tag{background-color:var(--warning);border-radius:50%;width:6px;height:6px;position:absolute;top:2px;right:2px}.subject-math{border-left-color:#ff9500}.subject-english{border-left-color:#0071e3}.subject-japanese{border-left-color:#ff2d55}.subject-science{border-left-color:#34c759}.subject-social{border-left-color:#af52de}.subject-pe{border-left-color:#5856d6}.subject-art{border-left-color:#fc0}.subject-music{border-left-color:#4cd964}.subject-default{border-left-color:var(--text-secondary)}.toast-container{z-index:1000;flex-direction:column;gap:12px;width:100%;max-width:420px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background-color:var(--bg-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);border:1px solid var(--border-color);border-left:6px solid var(--primary);align-items:flex-start;gap:12px;padding:16px 20px;animation:.3s cubic-bezier(.16,1,.3,1) slideIn;display:flex;position:relative}@keyframes slideIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.toast-error{border-left-color:var(--error);background-color:var(--error-light);border-color:var(--error-border)}.toast-success{border-left-color:var(--success);background-color:var(--success-light);border-color:var(--success-border)}.toast-warning{border-left-color:var(--warning);background-color:var(--warning-light);border-color:var(--warning-border)}.toast-icon{flex-shrink:0;margin-top:2px}.toast-content{flex:1}.toast-title{color:var(--text-primary);margin-bottom:4px;font-size:.9rem;font-weight:700}.toast-message{color:var(--text-secondary);white-space:pre-wrap;font-size:.8rem}.toast-close{cursor:pointer;color:var(--text-tertiary);background:0 0;border:none;font-size:1.1rem}.toast-close:hover{color:var(--text-primary)}.modal-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:500;background-color:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background-color:var(--bg-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:90%;max-width:600px;padding:32px;animation:.3s cubic-bezier(.34,1.56,.64,1) modalScale}@keyframes modalScale{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.modal-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.modal-header h3{font-size:1.3rem;font-weight:800}.form-group{margin-bottom:20px}.form-label{color:var(--text-secondary);margin-bottom:8px;font-size:.85rem;font-weight:600;display:block}.form-select,.form-input{border-radius:var(--radius-md);border:1px solid var(--border-color);width:100%;color:var(--text-primary);background-color:var(--bg-primary);outline:none;padding:12px 16px;font-size:.95rem;transition:border-color .2s}.form-select:focus,.form-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #0071e31a}.form-actions{justify-content:flex-end;gap:12px;margin-top:28px;display:flex}.tabs{border-bottom:1px solid var(--border-color-light);margin-bottom:24px;display:flex}.tab{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;padding:12px 24px;font-size:.95rem;font-weight:500;transition:color .2s;position:relative}.tab:hover{color:var(--text-primary)}.tab.active{color:var(--primary);font-weight:600}.tab.active:after{content:"";background-color:var(--primary);border-radius:3px 3px 0 0;height:3px;position:absolute;bottom:0;left:24px;right:24px}.admin-table{border-collapse:collapse;width:100%;margin-bottom:24px}.admin-table th,.admin-table td{border-bottom:1px solid var(--border-color-light);text-align:left;padding:14px 16px}.admin-table th{color:var(--text-secondary);background-color:var(--bg-secondary);font-size:.85rem;font-weight:600}.admin-table tr:hover td{background-color:var(--bg-secondary)}.badge{background-color:var(--bg-tertiary);color:var(--text-secondary);border-radius:12px;align-items:center;padding:2px 8px;font-size:.75rem;font-weight:500;display:inline-flex}.badge-primary{background-color:var(--primary-light);color:var(--primary)}.drag-handle{color:var(--text-tertiary);cursor:grab;justify-content:center;align-items:center;display:flex}.admin-grid{grid-template-columns:280px 1fr;gap:24px;display:grid}.admin-sidebar{flex-direction:column;gap:8px;display:flex}.admin-menu-item{border-radius:var(--radius-md);text-align:left;color:var(--text-secondary);cursor:pointer;background:0 0;border:none;align-items:center;gap:12px;padding:12px 16px;font-size:.9rem;font-weight:500;transition:all .2s;display:flex}.admin-menu-item:hover{background-color:var(--bg-tertiary);color:var(--text-primary)}.admin-menu-item.active{background-color:var(--primary-light);color:var(--primary);font-weight:600}.empty-state{text-align:center;color:var(--text-secondary);flex-direction:column;justify-content:center;align-items:center;padding:48px;display:flex}.empty-state svg{color:var(--text-tertiary);margin-bottom:16px}.day-changer{align-items:center;gap:4px;display:flex}.day-btn{cursor:pointer;width:32px;height:32px;color:var(--text-secondary);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;transition:background-color .2s;display:flex}.day-btn:hover{background-color:var(--bg-tertiary);color:var(--text-primary)}.class-grid-student{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin-top:12px;display:grid}.class-btn-student{border-radius:var(--radius-md);border:1px solid var(--border-color);background-color:var(--bg-primary);color:var(--text-primary);cursor:pointer;text-align:center;padding:14px 20px;font-size:.95rem;font-weight:600;transition:all .2s}.class-btn-student:hover{border-color:var(--primary);background-color:var(--primary-light);transform:translateY(-2px)}.class-btn-student.active{background-color:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 4px 12px #0071e333}.grade-section{margin-bottom:32px}.grade-title{color:var(--text-primary);border-left:4px solid var(--primary);margin-bottom:16px;padding-left:12px;font-size:1.1rem;font-weight:700}.classes-cards-grid{grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:20px;display:grid}.class-overview-card{background-color:var(--bg-primary);border-radius:var(--radius-md);border:1px solid var(--border-color-light);box-shadow:var(--shadow-sm);flex-direction:column;padding:16px;display:flex}.class-overview-header{border-bottom:1px solid var(--border-color-light);justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;display:flex}.class-overview-name{font-size:1rem;font-weight:700}.class-overview-grid{grid-template-columns:40px repeat(6,1fr);gap:4px;display:grid}.class-overview-cell{background-color:var(--bg-secondary);border-radius:4px;flex-direction:column;justify-content:center;align-items:center;height:48px;font-size:.7rem;font-weight:500;display:flex;position:relative}.class-overview-cell.has-lesson{background-color:var(--bg-primary);border:1px solid var(--border-color-light);border-left:3px solid var(--primary)}.class-overview-cell.is-modified{border-left-color:var(--warning);background-color:var(--warning-light)}.class-overview-period-label{color:var(--text-secondary);background-color:var(--bg-tertiary);justify-content:center;align-items:center;font-size:.7rem;font-weight:700;display:flex}.class-overview-subject-name{text-overflow:ellipsis;white-space:nowrap;text-align:center;width:100%;padding:0 2px;font-weight:700;overflow:hidden}.class-overview-teacher-name{color:var(--text-secondary);font-size:.6rem}.legend-container{flex-wrap:wrap;gap:16px;margin-bottom:16px;display:flex}.legend-item{color:var(--text-secondary);align-items:center;gap:6px;font-size:.8rem;display:flex}.legend-color{background-color:var(--bg-secondary);border-left:3px solid #0000;border-radius:2px;width:12px;height:12px}.day-drag-btn{border:1px solid var(--border-color);background-color:var(--bg-primary);color:var(--text-primary);cursor:pointer;border-radius:20px;outline:none;padding:8px 16px;font-size:.8rem;font-weight:600;transition:all .2s}.day-drag-btn:hover{background-color:var(--bg-secondary);border-color:var(--text-tertiary)}.day-drag-btn.active{border:1px solid var(--primary)!important;background-color:var(--primary)!important;color:#fff!important;box-shadow:0 4px 12px #0071e333!important}
