:root{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Sarabun,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.5}body{background-color:#f4f6f9;width:100%;min-width:320px;min-height:100vh;margin:0;padding:0}#root{width:100%;min-height:100vh;margin:0;padding:0}h1{font-size:3.2em;line-height:1.1}button{cursor:pointer;border:1px solid #0000;border-radius:8px;padding:.6em 1.2em;font-family:inherit;font-size:1em;font-weight:500;transition:border-color .25s}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.sidebar{color:#ecf0f1;z-index:1000;background-color:#2c3e50;flex-direction:column;width:260px;height:100vh;font-family:Sarabun,sans-serif;display:flex;position:fixed;top:0;left:0;box-shadow:2px 0 10px #0000001a}.sidebar-header{background-color:#1a252f;border-bottom:1px solid #34495e;align-items:center;gap:15px;padding:20px;display:flex}.logo-icon{color:#3498db;font-size:2rem}.app-name h3{margin:0;font-size:1.1rem;font-weight:600}.app-name small{color:#7f8c8d;font-size:.75rem}.user-info{background-color:#243342;align-items:center;gap:15px;margin-bottom:10px;padding:20px;display:flex}.user-avatar{color:#fff;background-color:#3498db;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;font-size:1.2rem;font-weight:700;display:flex}.user-details{flex-direction:column;display:flex}.user-name{font-size:.9rem;font-weight:500}.user-role{color:#f1c40f;background:#f1c40f1a;border-radius:4px;width:fit-content;padding:2px 6px;font-size:.75rem}.sidebar-menu{flex:1;padding:10px 0;overflow-y:auto}.sidebar-menu::-webkit-scrollbar{width:5px}.sidebar-menu::-webkit-scrollbar-thumb{background:#34495e;border-radius:5px}.menu-group{text-transform:uppercase;color:#7f8c8d;letter-spacing:.5px;padding:15px 20px 5px;font-size:.75rem;font-weight:700}.sidebar-link{color:#bdc3c7;border-left:4px solid #0000;align-items:center;padding:12px 20px;font-size:.95rem;text-decoration:none;transition:all .2s;display:flex}.sidebar-link svg{text-align:center;width:20px;margin-right:15px;font-size:1.1rem}.sidebar-link:hover{color:#fff;background-color:#34495e}.sidebar-link.active{color:#fff;background:linear-gradient(90deg,#3498db33 0%,#0000 100%);border-left-color:#3498db}.sidebar-footer{background-color:#1a252f;border-top:1px solid #34495e;padding:15px}.btn-logout{color:#fff;cursor:pointer;background-color:#c0392b;border:none;border-radius:6px;justify-content:center;align-items:center;gap:8px;width:100%;padding:10px;font-weight:700;transition:background .2s;display:flex}.btn-logout:hover{background-color:#e74c3c}.app-layout{background-color:#f4f6f9;flex-direction:row;width:100vw;height:100vh;display:flex;overflow:hidden}.layout-sidebar{z-index:10;background-color:#2c3e50;flex-shrink:0;width:260px;min-width:260px;height:100vh;overflow-y:auto}.layout-content{flex-direction:column;flex-grow:1;height:100vh;display:flex;position:relative;overflow-y:auto}.content-inner{box-sizing:border-box;width:100%;max-width:1600px;margin:0 auto;padding:30px}.login-container{background:linear-gradient(135deg,#74ebd5 0%,#acb6e5 100%);justify-content:center;align-items:center;width:100vw;height:100vh;font-family:Sarabun,sans-serif;display:flex}.login-box{text-align:center;background:#fff;border-radius:15px;width:100%;max-width:400px;padding:40px;box-shadow:0 10px 25px #0000001a}.login-box h2{color:#2c3e50;margin-bottom:25px;font-weight:700}.form-group{text-align:left;margin-bottom:20px}.form-group label{color:#7f8c8d;margin-bottom:8px;font-size:.9rem;display:block}.form-group input{box-sizing:border-box;border:1px solid #ddd;border-radius:6px;width:100%;padding:12px;font-size:1rem;transition:border .3s}.form-group input:focus{border-color:#3498db;outline:none;box-shadow:0 0 0 3px #3498db1a}.btn-login{color:#fff;cursor:pointer;background-color:#3498db;border:none;border-radius:6px;width:100%;padding:12px;font-size:1rem;font-weight:700;transition:background .2s}.btn-login:hover{background-color:#2980b9}.error-message{color:#c62828;background-color:#ffebee;border:1px solid #ffcdd2;border-radius:4px;margin-bottom:20px;padding:10px;font-size:.9rem}.dashboard-container{width:100%;padding-bottom:50px;font-family:Sarabun,sans-serif}.dashboard-header,div[class*=dashboard-header]{border-left:5px solid #2c3e50;border-radius:8px;margin-bottom:20px;padding:20px;color:#2c3e50!important;background:#fff!important;box-shadow:0 2px 5px #0000000d!important}.dashboard-header svg{color:#2c3e50!important}.dashboard-container{background-color:#0000!important}.dashboard-subtitle{color:#7f8c8d;margin-top:5px}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px;margin-bottom:30px;display:grid}.stat-card{background:#fff;border:1px solid #f0f0f0;border-radius:12px;justify-content:space-between;align-items:center;padding:20px;transition:transform .2s;display:flex;box-shadow:0 4px 15px #0000000d}.stat-card:hover{transform:translateY(-5px);box-shadow:0 8px 25px #0000001a}.stat-info h3{color:#2c3e50;margin:0;font-size:2rem;font-weight:700}.stat-info p{color:#7f8c8d;margin:5px 0 0;font-size:.9rem}.stat-icon{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:60px;height:60px;font-size:1.8rem;display:flex}.charts-grid{grid-template-columns:2fr 1fr;gap:20px;display:grid}@media (max-width:900px){.charts-grid{grid-template-columns:1fr}}.chart-card{background:#fff;border:1px solid #f0f0f0;border-radius:12px;padding:25px;box-shadow:0 4px 15px #0000000d}.chart-header{border-bottom:1px solid #eee;margin-bottom:20px;padding-bottom:10px}.chart-header h3{color:#2c3e50;margin:0;font-size:1.1rem}.main-schedule-area{width:100%;min-height:500px;padding-top:10px;overflow-x:auto}.scheduler-container{background:#fff;border:1px solid #e0e0e0;border-radius:8px;min-width:1000px;padding:15px;box-shadow:0 4px 10px #0000000d}.sticky-header-wrapper{z-index:1000;background-color:#f8f9fa;padding:15px 20px;position:sticky;top:0;box-shadow:0 4px 6px -2px #0000001a}.control-bar-manual{background-color:#fff;border:1px solid #dce1e6;border-radius:8px;justify-content:space-between;align-items:center;margin-bottom:10px;padding:10px 15px;display:flex}.input-group{align-items:center;width:300px;display:flex;position:relative}.input-icon{color:#7f8c8d;z-index:2;pointer-events:none;position:absolute;left:12px}.control-bar-manual select{cursor:pointer;border:1px solid #bdc3c7;border-radius:6px;outline:none;width:100%;padding:10px 15px 10px 40px;font-size:1rem}.btn-load-schedule{color:#fff;cursor:pointer;background-color:#3498db;border:none;border-radius:6px;padding:10px 20px;font-weight:600}.holding-status-box{color:#155724;background:#d4edda;border:1px solid #c3e6cb;border-radius:20px;align-items:center;gap:10px;padding:5px 15px;font-size:.9rem;animation:.3s fadeIn;display:flex}.btn-cancel-select{color:#fff;cursor:pointer;background:#dc3545;border:none;border-radius:12px;align-items:center;gap:4px;padding:4px 10px;font-size:.8rem;display:flex}.unscheduled-horizontal-bar{background:#fff;border:1px solid #dce1e6;border-radius:8px;flex-direction:column;padding:10px 15px;transition:all .3s;display:flex}.unscheduled-horizontal-bar.remove-zone{cursor:pointer;background-color:#ffecec;border:2px dashed #e74c3c}.unscheduled-horizontal-bar.remove-zone:hover{background-color:#fcc}.unscheduled-label{color:#d35400;align-items:center;gap:8px;margin-bottom:8px;font-size:.95rem;font-weight:700;display:flex}.unscheduled-row{align-items:center;gap:10px;min-height:80px;padding-bottom:5px;display:flex;overflow-x:auto}.unscheduled-card-h{cursor:pointer;background:#fff;border:1px solid #eee;border-left:4px solid #f39c12;border-radius:5px;flex-shrink:0;min-width:130px;max-width:130px;padding:8px;transition:transform .2s;box-shadow:0 2px 4px #0000000d}.unscheduled-card-h:hover{transform:translateY(-2px)}.unscheduled-card-h.selected-h{background-color:#eafaf1;border:2px solid #27ae60;transform:scale(1.05);box-shadow:0 4px 8px #27ae6033}.u-code{color:#d35400;font-size:.85rem;font-weight:700}.u-name{white-space:nowrap;text-overflow:ellipsis;font-size:.8rem;overflow:hidden}.u-teacher{color:#7f8c8d;font-size:.75rem}.manual-grid{border-collapse:separate;border-spacing:4px;table-layout:fixed;width:100%}.manual-grid th{color:#fff;text-align:center;background-color:#2c3e50;border-radius:4px;padding:8px}.th-period-badge{background:#fff3;border-radius:4px;padding:2px 6px;display:inline-block}.day-cell{text-align:center;vertical-align:middle;background-color:#ecf0f1;border-radius:4px;width:80px;font-weight:700}.manual-cell{vertical-align:top;cursor:pointer;background-color:#f8fafc;border:1px dashed #cbd5e0;border-radius:4px;height:90px;padding:0;transition:background .2s;position:relative}.manual-cell:hover{background-color:#f1f5f9}.manual-cell.fixed{cursor:not-allowed;background-image:repeating-linear-gradient(45deg,#eee 0 5px,#fff 5px 10px)}.manual-cell.source-cell{opacity:.5;background-color:#ddd;border-style:dotted}.manual-cell.teacher-busy{cursor:not-allowed;color:#c62828;background-color:#ffebee}.manual-cell.restricted{cursor:not-allowed;color:#546e7a;background-color:#eceff1}.cell-break-manual{color:#757575;text-align:center;vertical-align:middle;cursor:default;background-color:#e0e0e0;border-radius:4px;font-size:.85rem}.subject-card-grid{background:#fff;border-radius:4px;flex-direction:column;justify-content:center;height:calc(100% - 4px);margin:2px;padding:6px;display:flex;position:relative;box-shadow:0 1px 3px #0000001a}.subject-card-grid.card-fixed{background-color:#fffc;border-left-color:#7f8c8d!important}.lock-icon{color:#7f8c8d;font-size:10px;position:absolute;top:3px;right:3px}.warn-icon{font-size:12px;position:absolute;top:3px;right:3px}.cell-placeholder{color:#ddd;text-align:center;opacity:0;font-size:2rem;line-height:90px}.manual-cell:hover .cell-placeholder{opacity:1}.restricted-overlay{opacity:.8;pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;font-size:.8rem;font-weight:700;display:flex;position:absolute;top:0;left:0}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.viewer-container{box-sizing:border-box;background-color:#f0f2f5;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif}.viewer-controls{background:#fff;border-radius:8px;align-items:center;gap:15px;margin-bottom:20px;padding:12px 20px;display:flex;box-shadow:0 2px 8px #00000014}.control-group select{border:1px solid #ddd;border-radius:4px;outline:none;padding:6px 10px;font-family:Sarabun,sans-serif}.btn-print{color:#fff;cursor:pointer;background-color:#2c3e50;border:none;border-radius:4px;align-items:center;gap:6px;margin-left:auto;padding:8px 16px;font-size:14px;font-weight:700;transition:background .2s;display:flex}.btn-print:hover{background-color:#1a252f}.btn-print:disabled{cursor:not-allowed;background-color:#ccc}.timetable-paper{box-sizing:border-box;background:#fff;width:297mm;margin:0 auto;padding:10mm;position:relative;box-shadow:0 0 15px #0000001a}.text-area p{color:#000;margin:4px 0;font-size:15px;line-height:1.2}.timetable-grid th{background-color:#e0e0e0;height:40px;font-size:15px;font-weight:700;line-height:1.2}.time-range{margin-top:2px;font-size:12px;font-weight:400}.slot-cell,.break-cell,.merged-break{vertical-align:middle;height:80px}.slot-info{flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;line-height:1;display:flex}.subj-code{margin-bottom:2px;font-size:11px;font-weight:700}.subj-name{white-space:normal;word-wrap:break-word;-webkit-line-clamp:2;text-align:center;-webkit-box-orient:vertical;width:95%;margin-bottom:2px;font-size:11px;font-weight:700;line-height:1.1;display:-webkit-box;overflow:hidden}.subj-detail{color:#333;white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.dots{color:#000;margin-bottom:5px;font-size:14px;font-weight:700}@media print{@page{margin:5mm;size:landscape!important}html,body{width:100%;height:100%;margin:0!important;padding:0!important;overflow:visible!important}.no-print,.viewer-controls,.control-group,button{display:none!important}.viewer-container,.timetable-paper{width:100%!important;max-width:none!important;box-shadow:none!important;background:#fff!important;border:none!important;margin:0!important;padding:0!important}.timetable-grid th,.timetable-grid td{border:1px solid #000!important;padding:4px!important;font-size:11pt!important}*{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}}.teachers-container{padding-bottom:50px;font-family:Sarabun,sans-serif}.header-actions{gap:15px;display:flex}.search-box{position:relative}.search-input{border:1px solid #ddd;border-radius:8px;outline:none;width:250px;padding:10px 15px 10px 35px;font-family:Sarabun,sans-serif}.search-icon{color:#999;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.btn-add{color:#fff;cursor:pointer;background-color:#2ecc71;border:none;border-radius:8px;align-items:center;gap:8px;padding:10px 20px;font-weight:600;transition:background .2s;display:flex}.btn-add:hover{background-color:#27ae60}.table-container{background:#fff;border-radius:10px;overflow:hidden;box-shadow:0 4px 15px #0000000d}.data-table{border-collapse:collapse;width:100%}.data-table th,.data-table td{text-align:left;border-bottom:1px solid #eee;padding:15px 20px}.data-table th{color:#2c3e50;background-color:#f8f9fa;font-weight:600}.teacher-avatar{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;font-size:1.1rem;font-weight:700;display:flex}.action-btn{cursor:pointer;background:0 0;border:none;margin-right:5px;padding:5px;font-size:1.1rem;transition:color .2s}.btn-edit{color:#f39c12}.btn-edit:hover{color:#d35400}.btn-delete:hover{color:#c0392b}.modal-overlay{z-index:2000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background:#fff;border-radius:12px;width:400px;padding:30px;animation:.3s slideDown;box-shadow:0 10px 30px #0003}@keyframes slideDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.form-group label{color:#555;margin-bottom:5px;font-weight:600;display:block}.settings-container{background-color:#f4f6f9;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif}.tabs{border-bottom:2px solid #2980b9;gap:5px;margin-bottom:0;display:flex}.tab-btn{cursor:pointer;color:#555;background-color:#ecf0f1;border:none;border-radius:8px 8px 0 0;align-items:center;gap:8px;padding:12px 20px;font-family:Sarabun,sans-serif;font-weight:700;transition:all .2s;display:flex}.tab-btn.active{color:#fff;background-color:#2980b9}.tab-content{background-color:#fff;border-radius:0 0 8px 8px;padding:30px;box-shadow:0 4px 10px #0000000d}.form-group label{color:#34495e;margin-bottom:5px;font-size:14px;font-weight:600;display:block}.form-control{box-sizing:border-box;border:1px solid #ddd;border-radius:4px;width:100%;padding:10px;font-family:Sarabun,sans-serif}.form-control:focus{border-color:#3498db;outline:none}.grid-2{grid-template-columns:1fr 1fr;gap:20px;display:grid}.divider{border:none;border-top:1px solid #eee;margin:25px 0}.hint-text{color:#7f8c8d;margin-bottom:15px;font-size:14px}.btn-save{color:#fff;cursor:pointer;background-color:#27ae60;border:none;border-radius:5px;align-items:center;gap:5px;padding:10px 25px;font-weight:700;display:flex}.btn-save:hover{background-color:#219150}.btn-save:disabled{cursor:not-allowed;background-color:#95a5a6}.btn-blue{color:#fff;cursor:pointer;background-color:#3498db;border:none;border-radius:4px;padding:8px 15px}.btn-gray{color:#fff;cursor:pointer;background-color:#95a5a6;border:none;border-radius:4px;padding:8px 15px}.btn-icon-del{color:#e74c3c;cursor:pointer;background:0 0;border:none;font-size:16px}.config-box{background-color:#f8f9fa;border:1px solid #eee;border-radius:8px;margin-bottom:20px;padding:20px}.flex-row{flex-wrap:wrap;align-items:flex-end;gap:15px;display:flex}.data-table{border-collapse:collapse;width:100%;margin-top:10px;font-size:14px}.data-table th{color:#2c3e50;text-align:left;background-color:#ecf0f1;padding:12px}.data-table td{vertical-align:middle;border-bottom:1px solid #eee;padding:10px}.no-data{text-align:center;color:#999;padding:20px}.row-current{background-color:#f0fdf4}.date-input{border:1px solid #ddd;border-radius:4px;width:100%;max-width:160px;padding:6px}.badge-active{color:#fff;background-color:#27ae60;border-radius:12px;padding:4px 10px;font-size:11px}.badge-history{color:#95a5a6;justify-content:center;align-items:center;gap:4px;font-size:11px;display:flex}.constraints-layout{gap:30px;display:flex}.constraint-form{background-color:#fcfcfc;border:1px solid #eee;border-radius:8px;flex:1;padding:20px}.constraint-list{flex:2}.btn-submit-constraint{color:#fff;cursor:pointer;background-color:#e67e22;border:none;border-radius:5px;width:100%;margin-top:20px;padding:12px;font-weight:700}.btn-submit-constraint:hover{background-color:#d35400}.grid-selector{margin-top:15px}.text-red{color:#c0392b;margin-bottom:5px;font-weight:700;display:block}.table-responsive{overflow-x:auto}.grid-table{border-collapse:collapse;width:100%;margin-top:5px}.grid-table th{text-align:center;background:#ecf0f1;border:1px solid #ccc;padding:8px;font-size:13px}.grid-table .day-head{text-align:center;background:#f9f9f9;width:80px;font-weight:700}.grid-cell{text-align:center;cursor:pointer;background:#fff;border:1px solid #ccc;height:35px;transition:all .1s}.grid-cell:hover{background-color:#fbecec}.grid-cell.selected{color:#fff;background-color:#c0392b;font-size:16px}.badge{border-radius:4px;padding:3px 8px;font-size:11px;font-weight:700}.badge.AVOID_SLOT{color:#c62828;background-color:#fce4ec}.badge.MAX_PER_DAY{color:#1565c0;background-color:#e3f2fd}.badge.CONSECUTIVE{color:#2e7d32;background-color:#e8f5e9}.badge-avoid{color:#c0392b;font-weight:700}.text-green{color:#27ae60}.text-blue{color:#2980b9}.btn-set-active{color:#7f8c8d;cursor:pointer;background:#fff;border:1px solid #bdc3c7;border-radius:20px;align-items:center;gap:5px;margin:0 auto;padding:5px 12px;font-size:.85rem;transition:all .2s;display:flex}.btn-set-active:hover{color:#3498db;background:#ebf5fb;border-color:#3498db;transform:scale(1.05)}.badge-active{color:#fff;background-color:#27ae60;border-radius:20px;align-items:center;gap:5px;padding:6px 12px;font-size:.85rem;font-weight:700;display:inline-flex;box-shadow:0 2px 5px #27ae604d}.row-current{border-left:4px solid #27ae60;background-color:#f0fdf4!important}.substitution-container{background-color:#f8f9fa;min-height:100vh;padding:30px;font-family:Sarabun,sans-serif}.page-title{color:#2c3e50;align-items:center;gap:10px;margin-bottom:25px;font-size:24px;font-weight:700;display:flex}.sub-card{background:#fff;border:1px solid #eef2f7;border-radius:12px;margin-bottom:30px;padding:25px;box-shadow:0 4px 6px #0000000d}.card-header{color:#34495e;border-bottom:2px solid #f0f2f5;align-items:center;gap:10px;margin-bottom:20px;padding-bottom:10px;font-size:18px;font-weight:700;display:flex}.input-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:20px;margin-bottom:20px;display:grid}.form-group{flex-direction:column;gap:8px;display:flex}.form-group label{color:#555;font-size:14px;font-weight:600}.form-control{border:1px solid #ddd;border-radius:6px;padding:10px 12px;font-family:Sarabun,sans-serif;font-size:14px;transition:border-color .2s}.form-control:focus{border-color:#3498db;outline:none;box-shadow:0 0 0 3px #3498db1a}.radio-group{gap:20px;padding:10px 0;display:flex}.radio-label{cursor:pointer;color:#333;align-items:center;gap:8px;font-size:15px;display:flex}.radio-label input[type=radio]{accent-color:#3498db;transform:scale(1.2)}.btn-submit{color:#fff;cursor:pointer;background-color:#27ae60;border:none;border-radius:6px;justify-content:center;align-items:center;gap:8px;width:100%;padding:12px 25px;font-size:15px;font-weight:700;transition:all .2s;display:flex}.btn-submit:hover{background-color:#219150;transform:translateY(-1px)}.sub-table{border-collapse:separate;border-spacing:0;width:100%}.sub-table th{color:#7f8c8d;text-align:left;background-color:#f8f9fa;border-bottom:2px solid #eef2f7;padding:15px;font-weight:600}.sub-table td{vertical-align:middle;border-bottom:1px solid #f0f2f5;padding:15px}.sub-table tr:hover td{background-color:#fbfbfb}.period-badge{color:#fff;background-color:#3498db;border-radius:20px;padding:4px 10px;font-size:13px;font-weight:700;display:inline-block}.status-badge{border-radius:4px;align-items:center;gap:5px;padding:4px 10px;font-size:13px;font-weight:600;display:inline-flex}.status-empty{color:#e74c3c;background-color:#fbecec}.status-assigned{color:#27ae60;background-color:#e8f8f5}.btn-assign{color:#fff;cursor:pointer;text-shadow:0 1px 1px #0000001a;background-color:#f1c40f;border:none;border-radius:4px;align-items:center;gap:5px;padding:6px 12px;font-size:13px;font-weight:700;transition:all .2s;display:flex}.btn-assign:hover{background-color:#f39c12}.modal-overlay{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#00000080;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0}.modal-content{background:#fff;border-radius:12px;flex-direction:column;width:450px;max-height:85vh;padding:30px;animation:.3s ease-out slideUp;display:flex;box-shadow:0 10px 25px #0003}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.teacher-list{border:1px solid #eee;border-radius:8px;flex:1;margin:15px 0;overflow-y:auto}.teacher-option{cursor:pointer;border-bottom:1px solid #f0f0f0;align-items:center;gap:10px;padding:12px 15px;transition:all .2s;display:flex}.teacher-option:hover{color:#3498db;background-color:#f5f9ff}.teacher-option:last-child{border-bottom:none}.btn-close{color:#fff;cursor:pointer;background-color:#95a5a6;border:none;border-radius:6px;width:100%;margin-top:10px;padding:10px}.btn-close:hover{background-color:#7f8c8d}.printable-report{display:none}@media print{@page{margin:20mm;size:A4 portrait!important}body{visibility:hidden;background:#fff}.sidebar,.navbar,.sub-card,.page-title,.modal-overlay,.no-print{display:none!important}.printable-report{visibility:visible;color:#000;background:#fff;width:100%;margin:0;padding:0;font-family:Sarabun,sans-serif;position:absolute;top:0;left:0;display:block!important}.printable-report *{visibility:visible}.memo-header-top{justify-content:center;align-items:flex-end;height:60px;margin-bottom:15px;display:flex;position:relative}.report-logo{width:60px;height:auto;position:absolute;bottom:0;left:0}.memo-title-text{font-size:28px;font-weight:700;line-height:1}.gov-header{border-top:none;margin-bottom:15px;padding-top:5px;font-size:16px;line-height:1.6}.gov-line{flex-wrap:wrap;margin-bottom:2px;display:flex}.gov-label{min-width:80px;margin-right:10px;font-weight:700}.gov-content{border-bottom:1px dotted #999;flex-grow:1;padding-left:5px}.gov-row-split{justify-content:space-between;display:flex}.gov-left,.gov-right{width:45%;display:flex}.report-body{text-indent:2.5cm;text-align:justify;margin-top:25px;margin-bottom:20px;font-size:16px;line-height:1.6}.print-table{border-collapse:collapse;width:100%;margin:10px 0;font-size:14px}.print-table th,.print-table td{text-align:center;vertical-align:middle;border:1px solid #000;padding:8px}.print-table th{-webkit-print-color-adjust:exact;font-weight:700;background-color:#f0f0f0!important}.print-footer{page-break-inside:avoid;justify-content:space-between;margin-top:40px;padding:0 20px;display:flex}.print-sign-box{text-align:center;width:40%}}.print-only-section{display:none!important}.official-table{border-collapse:collapse;background-color:#fff;width:100%;margin-top:10px;font-size:14px}.official-table th{color:#333;text-align:center;background-color:#f8f9fa;border:1px solid #ddd;padding:10px;font-weight:700}.official-table td{vertical-align:middle;border:1px solid #ddd;padding:10px}.period-badge{color:#fff;text-align:center;background:#34495e;border-radius:50%;width:25px;height:25px;font-weight:700;line-height:25px;display:inline-block}.tutoring-container{background-color:#f0f2f5;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif}.sub-card{background:#fff;border-radius:8px;margin-bottom:20px;padding:20px;box-shadow:0 2px 4px #0000001a}.level-checkbox-grid{grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:10px;display:grid}.level-box{cursor:pointer;border:1px solid #ddd;border-radius:4px;align-items:center;gap:5px;padding:8px;display:flex}.level-box.selected{color:#27ae60;background:#eafaf1;border-color:#27ae60}.level-box.selected-joint{color:#e67e22;background:#fdf2e9;border-color:#e67e22}.subject-pool{background:#f8f9fa;border:2px dashed #ccc;border-radius:8px;gap:10px;min-height:80px;margin-top:10px;padding:10px;display:flex;overflow-x:auto}.pool-item{text-align:center;background:#fff;border:1px solid #ccc;border-radius:4px;min-width:110px;padding:8px;box-shadow:0 2px 4px #0000000d}.schedule-grid td{text-align:center;vertical-align:top;border:1px solid #eee;min-width:100px;height:70px}.slot-item{color:#fff;border-radius:4px;flex-direction:column;justify-content:center;height:90%;padding:5px;display:flex}.modal-content.sub-modal{background:#fff;border-radius:8px;flex-direction:column;width:210mm;height:90vh;display:flex;overflow:hidden}.modal-header{background:#f8f9fa;border-bottom:1px solid #ddd;justify-content:space-between;align-items:center;padding:15px;display:flex}.modal-body{background:#fff;flex:1;padding:20px;overflow-y:auto}.modal-footer{text-align:right;background:#f8f9fa;border-top:1px solid #ddd;padding:10px}.btn-icon{cursor:pointer;color:#fff;border:none;border-radius:4px;align-items:center;gap:5px;padding:6px 12px;display:flex}.btn-icon.view{background:#3498db}.btn-icon.delete{background:#e74c3c}.btn-icon.print-btn{background:#34495e}.btn-close,.btn-close-icon{cursor:pointer;background:0 0;border:none;font-size:16px}.btn-close{color:#fff;background:#95a5a6;border-radius:4px;padding:8px 20px}@media print{@page{size:A4 portrait!important;margin:10mm!important}*,:before,:after{box-sizing:border-box!important}body{visibility:hidden!important;background:#fff!important;margin:0!important;padding:0!important}.modal-overlay{visibility:visible!important;z-index:9999!important;background:#fff!important;width:100%!important;height:auto!important;margin:0!important;padding:0!important;display:block!important;position:absolute!important;top:0!important;left:0!important}.modal-content.sub-modal{visibility:visible!important;width:100%!important;max-width:100%!important;box-shadow:none!important;border:none!important;margin:0!important;padding:0!important;position:static!important;overflow:visible!important}.modal-body{visibility:visible!important;width:100%!important;padding:0!important;overflow:visible!important}.modal-body *{visibility:visible!important}.no-print,.modal-header,.modal-footer,.btn-close,.sidebar,.navbar{display:none!important}.print-only-section{display:block!important}.official-doc-header{text-align:center;border-bottom:2px solid #000;width:100%;margin-bottom:15px;padding-bottom:10px}.doc-title{color:#000;margin:0;font-size:20px;font-weight:700;line-height:1.2}.doc-subtitle{color:#000;margin:5px 0;font-size:16px}.date-group{page-break-inside:avoid;width:100%;margin-bottom:20px}.official-table{border-collapse:collapse;color:#000;table-layout:fixed;font-size:13px;width:100%!important}.official-table th{white-space:nowrap;padding:6px 4px;color:#000!important;background-color:#eee!important;border:1px solid #000!important}.official-table td{word-wrap:break-word;padding:6px 4px;color:#000!important;border:1px solid #000!important}.official-footer{page-break-inside:avoid;margin-top:30px;flex-direction:row!important;justify-content:space-between!important;align-items:flex-start!important;width:100%!important;display:flex!important}.sign-block{text-align:center;width:45%!important}.sign-line{border-bottom:1px dotted #000;width:80%;height:1px;margin:30px auto 10px}}.viewer-container{box-sizing:border-box;background-color:#f0f2f5;flex-direction:column;align-items:center;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif;display:flex}.viewer-controls{z-index:10;background:#fff;border-radius:8px;flex-wrap:wrap;align-items:center;gap:15px;margin-bottom:20px;padding:12px 20px;display:flex;box-shadow:0 2px 8px #00000014}.control-group{color:#333;align-items:center;gap:8px;font-size:14px;display:flex}.control-group select{border:1px solid #ddd;border-radius:4px;outline:none;min-width:160px;padding:6px 10px;font-family:Sarabun,sans-serif}.btn-search{color:#fff;cursor:pointer;background:#3498db;border:none;border-radius:4px;padding:8px 15px}.btn-print{color:#fff;cursor:pointer;background:#2c3e50;border:none;border-radius:4px;padding:8px 15px}.timetable-paper{box-sizing:border-box;background:#fff;border-radius:2px;width:297mm;min-height:210mm;margin:0 auto;padding:15mm;position:relative;box-shadow:0 0 15px #0000001a}.paper-header{justify-content:center;align-items:center;gap:20px;margin-bottom:15px;padding-bottom:5px;display:flex}.logo-area img{width:auto;height:70px}.text-area{text-align:center;color:#000}.text-area h1{margin:0;font-size:22px;font-weight:700;line-height:1.2}.text-area h2{margin:2px 0;font-size:16px;font-weight:700}.text-area h3{color:#333;margin:2px 0;font-size:16px;font-weight:700}.text-area p{color:#000;margin:2px 0;font-size:14px}.timetable-grid{border-collapse:collapse;table-layout:fixed;width:100%;margin-bottom:20px}.timetable-grid th,.timetable-grid td{text-align:center;vertical-align:middle;box-sizing:border-box;border:1px solid #000;padding:0;overflow:hidden}.timetable-grid th{background-color:#e0e0e0;height:40px;padding:5px;font-size:14px;font-weight:700}.day-header{width:70px}.day-cell{background-color:#f5f5f5;width:70px;font-size:16px;font-weight:700}.slot-cell{vertical-align:top;height:80px}.cell-content{box-sizing:border-box;text-align:center;border-radius:0;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;padding:5px;font-size:13px;display:flex}.project-cell{border:2px solid #fff;box-shadow:inset 0 0 0 1px #eee}.tutor-cell{color:#e65100;background:#fff3e0;border:1px solid #ffe0b2;font-weight:700}.regular-cell{color:#33691e;background:#f1f8e9;border:1px solid #c5e1a5}.break-header{background-color:#dcdcdc!important}.merged-break{border:1px solid #000;padding:0;background-color:#f0f0f0!important}.vertical-text{writing-mode:vertical-rl;white-space:nowrap;color:#333;letter-spacing:2px;justify-content:center;align-items:center;height:100%;margin:0 auto;font-size:16px;font-weight:700;display:flex;transform:rotate(180deg)}.time-range{color:#555;margin-top:2px;font-size:11px;font-weight:400}.paper-footer{justify-content:space-around;margin-top:30px;padding-top:10px;display:flex}.sign-box{text-align:center;min-width:200px}.dots{margin-bottom:5px;font-size:14px;font-weight:700}.sign-name{margin-bottom:2px;font-size:13px}.sign-role{font-size:13px;font-weight:700}.sub-list-section{border-top:2px dashed #ccc;margin-top:20px;padding-top:10px;font-size:14px}.sub-list-section ul{padding-left:20px}.sub-list-section li{margin-bottom:5px}@media print{@page{size:A4 landscape;margin:5mm}.sidebar,.navbar,.viewer-controls,.no-print{display:none!important}html,body,#root,.app-container,.main-content,.viewer-container{background:#fff!important;width:100%!important;height:auto!important;min-height:0!important;margin:0!important;padding:0!important;display:block!important;overflow:visible!important}.timetable-paper{width:100%!important;max-width:100%!important;min-height:0!important;box-shadow:none!important;page-break-inside:avoid!important;break-inside:avoid!important;visibility:visible!important;border:none!important;margin:0!important;padding:0!important}.timetable-paper *{visibility:visible!important}*{-webkit-print-color-adjust:economy!important;print-color-adjust:economy!important}.day-cell{width:70px!important}.slot-cell,.break-cell{height:80px!important}.project-cell,.tutor-cell,.regular-cell{color:#000!important;box-shadow:none!important;background-color:#fff!important;border:1px solid #999!important}.timetable-grid th,.day-cell,.break-header,.merged-break{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important;background-color:#e0e0e0!important}}.workload-container{background-color:#eef2f5;flex-direction:column;height:100vh;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif;display:flex;overflow:hidden}.setup-card{background:#fff;border-radius:8px;width:100%;max-width:800px;margin:20px auto;padding:30px;overflow-y:auto;box-shadow:0 4px 15px #0000000d}.selection-group{margin-bottom:25px}.selection-group label{color:#2c3e50;margin-bottom:10px;font-weight:700;display:block}.checkbox-grid{grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:10px;display:grid}.checkbox-grid.teachers{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.check-box{text-align:center;cursor:pointer;background-color:#fff;border:1px solid #ddd;border-radius:6px;padding:10px;transition:all .2s}.check-box:hover{background-color:#f9f9f9}.check-box.active{color:#27ae60;background-color:#e8f6f3;border-color:#27ae60;font-weight:700}.btn-link{color:#3498db;cursor:pointer;background:0 0;border:none;font-size:13px;text-decoration:underline}.btn-next{color:#fff;cursor:pointer;background-color:#2c3e50;border:none;border-radius:6px;align-items:center;gap:10px;margin:0 auto;padding:12px 30px;font-size:16px;display:flex}.btn-next:hover{background-color:#34495e}.planning-board-wrapper{flex-direction:column;flex:1;height:100%;display:flex;overflow:hidden}.board-toolbar{background:#fff;border-radius:8px;flex-shrink:0;justify-content:space-between;align-items:center;margin-bottom:10px;padding:10px 20px;display:flex;box-shadow:0 2px 5px #0000000d}.summary-text{color:#555;font-size:14px}.btn-back,.btn-save-plan{cursor:pointer;border:none;border-radius:4px;align-items:center;gap:5px;padding:8px 15px;font-weight:700;display:flex}.btn-back{color:#fff;background:#95a5a6}.btn-save-plan{color:#fff;background:#27ae60}.board-layout{flex-direction:column;flex:1;gap:15px;padding-right:5px;display:flex;overflow-y:auto}.unassigned-zone{z-index:100;background:#fff8e1;border:1px solid #ffe0b2;border-radius:8px;flex-direction:column;min-height:140px;max-height:140px;margin-bottom:5px;padding:10px;display:flex;position:sticky;top:0;box-shadow:0 4px 10px #0000001a}.zone-header-row{justify-content:space-between;align-items:center;margin-bottom:8px;padding:0 5px;display:flex}.zone-title{color:#d35400;white-space:nowrap;font-size:13px;font-weight:700}.filter-box{align-items:center;width:250px;max-width:40%;display:flex;position:relative}.filter-box input{color:#333;background-color:#fff;border:1px solid #f39c12;border-radius:15px;outline:none;width:100%;padding:5px 30px;font-size:12px}.filter-box .search-icon{color:#f39c12;pointer-events:none;font-size:12px;position:absolute;left:10px}.filter-box .clear-btn{color:#666;cursor:pointer;background:#eee;border:none;border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;font-size:12px;display:flex;position:absolute;right:8px}.filter-box .clear-btn:hover{background:#ccc}.unassigned-row{flex:1;align-items:center;gap:10px;padding-bottom:5px;display:flex;overflow-x:auto}.unassigned-row.dragging-over{background-color:#fff9}.teachers-zone{flex-wrap:wrap;gap:15px;padding-bottom:20px;display:flex}.teacher-column{background:#fff;border-radius:8px;flex-direction:column;min-width:260px;max-width:260px;margin-bottom:15px;display:flex;box-shadow:0 2px 5px #0000000d}.teacher-header{background:#f8f9fa;border-bottom:1px solid #eee;border-radius:8px 8px 0 0;justify-content:space-between;align-items:center;padding:10px;display:flex}.t-name{color:#2c3e50;font-size:14px;font-weight:700}.load-badge{color:#1565c0;background:#e3f2fd;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:700}.load-badge.overload{color:#c62828;background:#ffebee}.teacher-body{background:#fdfdfd;flex:1;min-height:100px;max-height:500px;padding:10px;transition:background .2s;overflow-y:auto}.teacher-body.active{background-color:#f0f7ff}.task-card{cursor:grab;background:#fff;border:1px solid #ddd;border-radius:6px;transition:transform .1s,box-shadow .1s;box-shadow:0 1px 2px #0000000d}.task-card:hover{transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.task-card.compact{border-left-style:solid;border-left-width:5px;flex-direction:column;justify-content:space-between;min-width:150px;max-width:150px;height:75px;padding:8px;display:flex}.compact-top{justify-content:space-between;font-size:10px;display:flex}.badge-room{border-radius:3px;padding:1px 5px;font-size:10px;font-weight:700}.badge-credit{color:#666;font-size:10px}.compact-title{color:#333;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:700;line-height:1.3;display:-webkit-box;overflow:hidden}.task-card.full{border-left-style:solid;border-left-width:5px;margin-bottom:10px;padding:10px}.task-header{color:#888;justify-content:space-between;margin-bottom:5px;font-size:11px;display:flex}.task-code{color:#555;background:#f0f0f0;border-radius:3px;padding:1px 4px;font-weight:700}.task-room{font-size:11px;font-weight:700}.task-name{color:#333;margin-bottom:5px;font-size:13px;font-weight:700}.task-footer{text-align:right;color:#2980b9;font-size:11px;font-weight:700}.empty-placeholder{color:#aaa;margin:auto;font-size:14px;font-style:italic}.teacher-header{background:#f8f9fa;border-bottom:1px solid #eee;border-radius:8px 8px 0 0;justify-content:space-between;align-items:flex-start;gap:10px;padding:10px;display:flex}.btn-return-all{color:#e74c3c;cursor:pointer;background:0 0;border:1px solid #ddd;border-radius:4px;justify-content:center;align-items:center;padding:4px 8px;font-size:12px;transition:all .2s;display:flex}.btn-return-all:hover{background-color:#ffebee;border-color:#e74c3c}.t-name{color:#2c3e50;margin-bottom:3px;font-size:14px;font-weight:700}.load-badge{color:#1565c0;background:#e3f2fd;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:700;display:inline-block}.users-page-container{background-color:#f8f9fa;min-height:100vh;padding:20px}.page-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.btn-add-user{color:#fff;cursor:pointer;background-color:#27ae60;border:none;border-radius:6px;align-items:center;gap:8px;padding:10px 20px;font-weight:700;display:flex;box-shadow:0 2px 5px #0000001a}.users-table-wrapper{background:#fff;border-radius:8px;padding:20px;box-shadow:0 2px 8px #0000000d}.users-table{border-collapse:collapse;width:100%}.users-table th,.users-table td{text-align:left;border-bottom:1px solid #eee;padding:12px 15px}.users-table th{color:#fff;background-color:#2c3e50}.role-badge{border-radius:12px;padding:4px 10px;font-size:.85rem;font-weight:700}.role-badge.ADMIN{color:#fff;background-color:#e74c3c}.role-badge.TEACHER{color:#fff;background-color:#3498db}.linked-teacher{color:#2c3e50;align-items:center;gap:5px;font-weight:500;display:flex}.action-btn{cursor:pointer;background:0 0;border:none;border-radius:4px;margin-right:10px;padding:5px;font-size:1.1rem;transition:all .2s}.action-btn.edit{color:#f39c12}.action-btn.edit:hover{background-color:#feb}.action-btn.delete{color:#c0392b}.action-btn.delete:hover{background-color:#fcc}.modal-overlay{z-index:1000;background:#00000080;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0}.modal-box{background:#fff;border-radius:8px;width:450px;padding:30px;box-shadow:0 5px 15px #0003}.modal-box h3{color:#2c3e50;margin-top:0;margin-bottom:20px}.form-group{margin-bottom:15px}.form-group label{margin-bottom:5px;font-size:.9rem;font-weight:700;display:block}.form-group input,.form-group select{box-sizing:border-box;border:1px solid #ddd;border-radius:4px;width:100%;padding:10px;font-family:inherit}.modal-actions{justify-content:flex-end;gap:10px;margin-top:25px;display:flex}.btn-cancel{color:#fff;cursor:pointer;background:#95a5a6;border:none;border-radius:4px;padding:10px 20px}.btn-save{color:#fff;cursor:pointer;background:#3498db;border:none;border-radius:4px;padding:10px 20px}.teacher-dashboard{padding-bottom:50px;font-family:Sarabun,sans-serif}.teacher-dashboard .dashboard-header{color:#fff;background:linear-gradient(135deg,#3498db,#2980b9);border-radius:12px;margin-bottom:30px;padding:30px;box-shadow:0 4px 10px #3498db4d}.teacher-dashboard .dashboard-header h1{margin:0;font-size:1.8rem}.teacher-dashboard .date-badge{opacity:.9;margin-top:10px;font-size:1rem}.teacher-dashboard .stats-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin-bottom:30px;display:grid}.teacher-dashboard .stat-card{background:#fff;border:1px solid #f0f0f0;border-radius:12px;justify-content:space-between;align-items:center;padding:20px;transition:transform .2s;display:flex;box-shadow:0 4px 15px #0000000d}.teacher-dashboard .stat-card:hover{transform:translateY(-5px);box-shadow:0 8px 25px #0000001a}.teacher-dashboard .stat-info h3{color:#2c3e50;margin:0;font-size:2rem;font-weight:700}.teacher-dashboard .stat-info p{color:#7f8c8d;margin:5px 0 0;font-size:.9rem}.teacher-dashboard .stat-icon{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:60px;height:60px;font-size:1.8rem;display:flex}.schedule-section{margin-bottom:30px}.schedule-section h2{color:#2c3e50;align-items:center;gap:8px;margin-bottom:15px;font-size:1.3rem;display:flex}.timeline-container{flex-direction:column;gap:15px;display:flex}.timeline-card{background:#fff;border-left:5px solid #3498db;border-radius:10px;align-items:center;padding:20px;transition:transform .2s;display:flex;box-shadow:0 2px 5px #0000000d}.timeline-card:hover{transform:translateY(-3px)}.time-box{color:#555;align-items:center;gap:8px;min-width:150px;font-weight:700;display:flex}.info-box{flex-grow:1}.info-box h3{color:#2c3e50;margin:0 0 5px;font-size:1.1rem}.code-badge{color:#7f8c8d;background:#ecf0f1;border-radius:4px;padding:2px 6px;font-size:.8rem}.room-info{color:#7f8c8d;align-items:center;gap:5px;margin:0;font-size:.9rem;display:flex}.btn-check-in{color:#fff;cursor:pointer;white-space:nowrap;background:#27ae60;border:none;border-radius:20px;align-items:center;gap:5px;padding:8px 15px;font-size:.9rem;text-decoration:none;display:flex}.btn-check-in:hover{background:#219150}.empty-schedule{text-align:center;color:#7f8c8d;background:#fff;border-radius:10px;padding:40px;font-size:1.1rem;box-shadow:0 2px 5px #0000000d}.quick-actions-section h2{color:#2c3e50;margin-bottom:15px;font-size:1.3rem}.quick-actions-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:20px;display:grid}.action-card{color:#fff;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:30px 20px;font-size:1.1rem;font-weight:600;text-decoration:none;transition:transform .2s,box-shadow .2s;display:flex;box-shadow:0 4px 15px #0000001a}.action-card:hover{color:#fff;transform:translateY(-5px);box-shadow:0 8px 25px #00000026}.action-icon{font-size:2rem}.action-green{background:linear-gradient(135deg,#27ae60,#2ecc71)}.action-blue{background:linear-gradient(135deg,#2980b9,#3498db)}.action-purple{background:linear-gradient(135deg,#8e44ad,#9b59b6)}@media (max-width:768px){.teacher-dashboard .stats-grid{grid-template-columns:repeat(2,1fr)}.timeline-card{flex-direction:column;align-items:flex-start;gap:10px}.time-box{min-width:auto}.btn-check-in{align-self:flex-end}.quick-actions-grid{grid-template-columns:1fr}}@media (max-width:480px){.teacher-dashboard .stats-grid{grid-template-columns:1fr}.teacher-dashboard .dashboard-header h1{font-size:1.4rem}}.score-entry-container{background-color:#f4f6f9;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif}.filter-card{background:#fff;border-left:5px solid #3498db;border-radius:8px;margin-bottom:20px;padding:20px;box-shadow:0 2px 4px #0000000d}.subject-select{border:1px solid #ddd;border-radius:4px;outline:none;width:100%;max-width:500px;padding:10px;font-size:1rem}.toolbar{justify-content:space-between;margin-bottom:15px;display:flex}.btn-tool{cursor:pointer;border:none;border-radius:6px;align-items:center;gap:8px;padding:10px 20px;font-size:.95rem;transition:transform .2s;display:flex}.btn-tool:hover{transform:translateY(-2px)}.btn-add{color:#fff;background-color:#f39c12}.btn-save{color:#fff;background-color:#27ae60}.table-responsive{background:#fff;border-radius:8px;max-height:70vh;overflow-x:auto;box-shadow:0 4px 10px #0000000d}.score-table{border-collapse:separate;border-spacing:0;width:100%}.score-table-container{max-height:70vh;overflow:auto}.score-table th{color:#fff;z-index:10;text-align:center;background:#2c3e50;border-right:1px solid #ffffff1a;padding:12px 8px;font-size:.9rem;position:sticky;top:0}.col-header{flex-direction:column;align-items:center;display:flex}.max-score{opacity:.8;font-size:.75rem}.score-table td{border-bottom:1px solid #eee;padding:5px}.fixed-col{z-index:5;background:#fff;border-right:2px solid #ddd;position:sticky;left:0}.score-table th.fixed-col{z-index:15}.name-col{min-width:180px;left:50px;text-align:left!important;padding-left:10px!important}.score-input{text-align:center;border:1px solid #ddd;border-radius:4px;width:60px;padding:8px;transition:all .2s}.score-input:focus{background-color:#eafaf1;border-color:#3498db;outline:none;transform:scale(1.1)}.grade-badge{color:#fff;border-radius:12px;padding:4px 10px;font-size:.85rem;font-weight:700;display:inline-block}.sum-col{background-color:#f8f9fa;font-weight:700}.text-center{text-align:center}.btn-import{color:#fff;background-color:#9b59b6;margin-left:10px}.btn-import:hover{background-color:#8e44ad}.toolbar-left{gap:10px;display:flex}.btn-icon-fill{color:#bdc3c7;cursor:pointer;background:0 0;border:none;margin-top:4px;padding:2px;font-size:.8rem;transition:all .2s}.btn-icon-fill:hover{color:#f1c40f;transform:scale(1.2)}.col-header{flex-direction:column;align-items:center;gap:4px;display:flex}.col-title{white-space:nowrap;text-overflow:ellipsis;max-width:100px;font-weight:700;display:block;overflow:hidden}.header-actions{background:#ffffff1a;border-radius:10px;gap:8px;margin-top:4px;padding:2px 8px;display:flex}.btn-icon-action{cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;font-size:.85rem;transition:all .2s;display:flex}.btn-fill{color:#bdc3c7}.btn-fill:hover{color:#f1c40f;background:#ffffff1a}.btn-delete{color:#bdc3c7}.btn-delete:hover{color:#e74c3c;background:#ffffff1a;transform:scale(1.1)}.attendance-container{background-color:#f4f6f9;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif}.page-title{color:#2c3e50;align-items:center;gap:10px;margin-bottom:20px;display:flex}.filter-bar{background:#fff;border-left:5px solid #3498db;border-radius:8px;align-items:flex-end;gap:20px;margin-bottom:20px;padding:20px;display:flex;box-shadow:0 2px 5px #0000000d}.form-control{border:1px solid #ddd;border-radius:4px;min-width:200px;padding:8px 12px;font-size:1rem}.date-picker.holiday-highlight{color:#c0392b;background-color:#ffebee;border:2px solid #e74c3c;font-weight:700}.term-info-badge{color:#16a085;background:#e8f6f3;border:1px solid #16a085;border-radius:20px;align-self:center;height:fit-content;padding:5px 15px}.holiday-banner{color:#856404;background-color:#fff3cd;border:1px solid #ffeeba;border-radius:8px;align-items:center;gap:10px;margin-bottom:20px;padding:15px;animation:2s infinite pulse;display:flex}@keyframes pulse{0%{opacity:1}50%{opacity:.8}to{opacity:1}}.action-bar{justify-content:space-between;align-items:center;margin-bottom:15px;display:flex}.bulk-btn-group{gap:10px;display:flex}.btn-bulk{cursor:pointer;border:none;border-radius:20px;align-items:center;gap:5px;padding:8px 15px;font-size:.9rem;transition:transform .2s;display:flex}.btn-bulk:hover{transform:translateY(-2px)}.btn-bulk.present{color:#27ae60;background:#d4efdf}.btn-bulk.absent{color:#c0392b;background:#fadbd8}.btn-save-main{color:#fff;cursor:pointer;background-color:#3498db;border:none;border-radius:6px;align-items:center;gap:8px;padding:10px 25px;font-size:1rem;display:flex;box-shadow:0 4px 6px #3498db33}.btn-save-main:hover{background-color:#2980b9}.table-responsive{background:#fff;border-bottom:1px solid #eee;border-radius:8px;max-height:65vh;overflow-y:auto;box-shadow:0 2px 10px #0000000d}.attendance-table th{color:#fff;text-align:left;z-index:10;background:#2c3e50;padding:12px;position:sticky;top:0}.attendance-table{border-collapse:collapse;width:100%}.attendance-table th{color:#fff;text-align:left;background:#2c3e50;padding:12px}.attendance-table td{vertical-align:middle;border-bottom:1px solid #eee;padding:10px}.radio-group{background:#f8f9fa;border-radius:25px;justify-content:center;gap:5px;width:fit-content;margin:0 auto;padding:4px;display:flex}.radio-opt{cursor:pointer;color:#7f8c8d;-webkit-user-select:none;user-select:none;border-radius:20px;padding:6px 15px;font-size:.85rem;font-weight:700;transition:all .2s}.radio-opt input{display:none}.radio-opt:hover{background:#0000000d}.radio-opt.present.active{color:#fff;background:#27ae60}.radio-opt.late.active{color:#fff;background:#f39c12}.radio-opt.leave.active{color:#fff;background:#8e44ad}.radio-opt.absent.active{color:#fff;background:#c0392b}.row-absent{background-color:#fff5f5}.row-late{background-color:#fffaf0}.row-leave{background-color:#fcf0ff}.remark-input{border:1px solid #ddd;border-radius:4px;width:100%;padding:6px}.grade-report-container{font-family:Sarabun,sans-serif}.grade-report-container .page-title{color:#2c3e50;align-items:center;gap:10px;margin-bottom:20px;display:flex}.grade-report-container .filter-card{background:#fff;border-radius:12px;align-items:center;gap:15px;margin-bottom:20px;padding:20px;display:flex;box-shadow:0 2px 8px #0000000d}.grade-report-container .filter-card select{border:1px solid #ddd;border-radius:8px;flex:1;padding:10px;font-size:1rem}.grade-summary-cards{grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:20px;display:grid}.summary-card{text-align:center;background:#fff;border-top:4px solid #3498db;border-radius:12px;padding:20px;box-shadow:0 2px 8px #0000000d}.summary-card.pass{border-top-color:#27ae60}.summary-card.fail{border-top-color:#e74c3c}.summary-card.gpa{border-top-color:#f39c12}.summary-card h3{color:#2c3e50;margin:0;font-size:2rem}.summary-card p{color:#7f8c8d;margin:5px 0 0;font-size:.9rem}.grade-table-wrapper{background:#fff;border-radius:12px;overflow-x:auto;box-shadow:0 2px 8px #0000000d}.grade-table{border-collapse:collapse;width:100%;font-size:.9rem}.grade-table th{text-align:center;white-space:nowrap;color:#2c3e50;background:#f8f9fa;border-bottom:2px solid #dee2e6;padding:12px 8px;font-weight:600}.grade-table td{text-align:center;border-bottom:1px solid #eee;padding:10px 8px}.grade-table tbody tr:hover{background:#f8f9fa}.name-cell{white-space:nowrap;text-align:left!important}.total-cell{font-weight:700}.grade-badge{color:#fff;border-radius:12px;min-width:60px;padding:4px 10px;font-size:.85rem;font-weight:700;display:inline-block}@media (max-width:768px){.grade-summary-cards{grid-template-columns:repeat(2,1fr)}}.attendance-report-container{font-family:Sarabun,sans-serif}.attendance-report-container .page-title{color:#2c3e50;align-items:center;gap:10px;margin-bottom:20px;display:flex}.attendance-report-container .filter-card{background:#fff;border-radius:12px;margin-bottom:20px;padding:20px;box-shadow:0 2px 8px #0000000d}.filter-row{flex-wrap:wrap;align-items:flex-end;gap:15px;display:flex}.filter-group{flex-direction:column;gap:5px;display:flex}.filter-group:first-child{flex:1}.filter-group label{color:#2c3e50;font-size:.9rem;font-weight:600}.filter-group select,.filter-group input{border:1px solid #ddd;border-radius:8px;padding:10px;font-size:1rem}.warning-box{color:#856404;background:#fff3cd;border:1px solid #ffeeba;border-radius:8px;align-items:center;gap:10px;margin-bottom:20px;padding:15px 20px;font-size:1rem;display:flex}.att-table-wrapper{background:#fff;border-radius:12px;overflow-x:auto;box-shadow:0 2px 8px #0000000d}.att-table{border-collapse:collapse;width:100%;font-size:.95rem}.att-table th{text-align:center;color:#2c3e50;background:#f8f9fa;border-bottom:2px solid #dee2e6;padding:12px 10px;font-weight:600}.att-table td{text-align:center;border-bottom:1px solid #eee;padding:10px}.att-table tbody tr:hover{background:#f8f9fa}.att-table .name-cell{text-align:left;white-space:nowrap}.row-warning{background:#fff8f0!important}.status-present{color:#27ae60;font-weight:700}.status-late{color:#f39c12;font-weight:700}.status-leave{color:#3498db;font-weight:700}.status-absent{color:#e74c3c;font-weight:700}.pct-badge{border-radius:12px;min-width:55px;padding:4px 10px;font-size:.85rem;font-weight:700;display:inline-block}.pct-good{color:#155724;background:#d4edda}.pct-bad{color:#721c24;background:#f8d7da}@media (max-width:768px){.filter-row{flex-direction:column}}.report-card-container{font-family:Sarabun,sans-serif}.report-card-container .page-title{color:#2c3e50;align-items:center;gap:10px;margin-bottom:20px;display:flex}.report-card-container .filter-card{background:#fff;border-radius:12px;margin-bottom:20px;padding:20px;box-shadow:0 2px 8px #0000000d}.report-card-container .filter-row{align-items:flex-end;gap:15px;display:flex}.report-card-container .filter-group select{border:1px solid #ddd;border-radius:8px;width:100%;padding:10px;font-size:1rem}.report-card-container .filter-group label{color:#2c3e50;margin-bottom:5px;font-size:.9rem;font-weight:600;display:block}.btn-export{color:#fff;cursor:pointer;white-space:nowrap;background:#e74c3c;border:none;border-radius:8px;align-items:center;gap:8px;padding:10px 20px;font-size:1rem;font-weight:600;display:flex}.btn-export:hover{background:#c0392b}.report-print-area{background:#fff;border-radius:12px;padding:30px;box-shadow:0 2px 8px #0000000d}.report-header-info{text-align:center;margin-bottom:20px}.report-header-info h3{color:#2c3e50;margin:0;font-size:1.4rem}.report-header-info p{color:#7f8c8d;margin:5px 0 0}.report-table{border-collapse:collapse;width:100%;font-size:.8rem}.report-table th{color:#fff;text-align:center;background:#2c3e50;border:1px solid #34495e;padding:8px 5px;font-weight:600}.report-table .subject-header{writing-mode:horizontal-tb;word-break:break-all;max-width:60px;font-size:.75rem}.report-table .credit-header{background:#34495e;font-size:.7rem;font-weight:400}.report-table td{text-align:center;border:1px solid #dee2e6;padding:6px 5px}.report-table tbody tr:nth-child(2n){background:#f8f9fa}.report-table tbody tr:hover{background:#eef2f7}.report-table .name-cell{text-align:left;white-space:nowrap;font-size:.8rem}.report-table .code-cell{color:#7f8c8d;white-space:nowrap;font-size:.75rem}.report-table .gpa-cell{color:#2c3e50;font-weight:700}.report-table .grade-fail{color:#e74c3c;font-weight:700}@media (max-width:768px){.report-card-container .filter-row{flex-direction:column}.report-print-area{padding:10px}.report-table{font-size:.7rem}}.health-container{background-color:#f4f6f9;min-height:100vh;padding:20px;font-family:Sarabun,sans-serif}.health-container .page-title{color:#2c3e50;align-items:center;gap:10px;margin-bottom:20px;display:flex}.health-container .filter-card{background:#fff;border-left:5px solid #27ae60;border-radius:8px;margin-bottom:20px;padding:20px;box-shadow:0 2px 4px #0000000d}.health-container .filter-row{flex-wrap:wrap;align-items:center;gap:15px;display:flex}.health-container .class-select{border:1px solid #ddd;border-radius:4px;outline:none;width:100%;max-width:400px;padding:10px;font-size:1rem}.health-container .toolbar{justify-content:flex-end;margin-bottom:15px;display:flex}.health-container .btn-save{cursor:pointer;color:#fff;background-color:#27ae60;border:none;border-radius:6px;align-items:center;gap:8px;padding:10px 25px;font-size:.95rem;transition:transform .2s;display:flex}.health-container .btn-save:hover{transform:translateY(-2px)}.health-container .table-responsive{background:#fff;border-radius:8px;max-height:70vh;overflow:auto;box-shadow:0 4px 10px #0000000d}.health-table{border-collapse:separate;border-spacing:0;width:100%}.health-table th{color:#fff;z-index:10;text-align:center;background:#2c3e50;padding:12px 8px;font-size:.9rem;position:sticky;top:0}.health-table td{text-align:center;border-bottom:1px solid #eee;padding:8px}.health-table tbody tr:hover{background-color:#f0faf4}.health-input{text-align:center;border:1px solid #ddd;border-radius:4px;width:80px;padding:8px;transition:all .2s}.health-input:focus{background-color:#eafaf1;border-color:#27ae60;outline:none;transform:scale(1.05)}.bmi-badge{color:#fff;border-radius:12px;padding:4px 10px;font-size:.85rem;font-weight:700;display:inline-block}.bmi-under{background-color:#3498db}.bmi-normal{background-color:#27ae60}.bmi-over{background-color:#f39c12}.bmi-obese{background-color:#e74c3c}.name-left{text-align:left!important;padding-left:15px!important}.animate-fade-in{animation:.5s healthFadeIn}@keyframes healthFadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
