*{box-sizing:border-box;margin:0;padding:0}:root{--primary:#e63946;--primary-dark:#c1121f;--dark:#1d2634;--dark-2:#2a3648;--text:#2b2d42;--muted:#8d99ae;--bg:#f4f6fb;--border:#e2e6ee;--success:#2a9d8f;--warn:#e9a13b;--danger:#d62828;--radius:10px}body{background:var(--bg);color:var(--text);font-family:Segoe UI,Microsoft JhengHei,PingFang TC,sans-serif;font-size:14px}.login-page{background:linear-gradient(135deg,#1d2634 0%,#2a3648 60%,#3a4a63 100%);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-box{text-align:center;background:#fff;border-radius:16px;width:380px;padding:40px 44px;box-shadow:0 20px 60px #00000059}.login-logo{margin-bottom:8px;font-size:48px}.login-box h1{color:var(--dark);font-size:22px}.login-sub{color:var(--muted);margin:6px 0 24px;font-size:13px}.login-box form{text-align:left}.login-hint{color:var(--muted);text-align:left;background:#f4f6fb;border-radius:8px;margin-top:20px;padding:10px;font-size:12px;line-height:1.6}.app-shell{min-height:100vh;display:flex}.sidebar{background:var(--dark);color:#fff;flex-direction:column;width:230px;height:100vh;display:flex;position:sticky;top:0}.sidebar-brand{border-bottom:1px solid #ffffff14;align-items:center;gap:10px;padding:20px 18px;display:flex}.sidebar-logo{font-size:28px}.sidebar-title{font-size:16px;font-weight:700}.sidebar-sub{color:#8fa3bf;font-size:11px}.sidebar-nav{flex:1;padding:12px 0}.nav-item{color:#b9c4d4;border-left:3px solid #0000;padding:12px 20px;font-size:14px;text-decoration:none;transition:all .15s;display:block}.nav-item:hover{color:#fff;background:#ffffff0f}.nav-item.active{color:#fff;border-left-color:var(--primary);background:#e6394626}.sidebar-user{border-top:1px solid #ffffff14;align-items:center;gap:10px;padding:14px 18px;display:flex}.user-avatar{background:var(--primary);border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;font-size:16px;font-weight:700;display:flex}.user-info{flex-direction:column;gap:4px;display:flex}.user-name{align-items:center;gap:6px;font-size:13px;display:flex}.role-badge{border-radius:20px;padding:2px 7px;font-size:10px;font-weight:600}.role-admin{color:#ffb3b8;background:#e6394640}.role-trainer{color:#8fd6cb;background:#2a9d8f40}.btn-logout{color:#8fa3bf;cursor:pointer;text-align:left;background:0 0;border:none;padding:0;font-size:12px;text-decoration:underline}.btn-logout:hover{color:#fff}.main-content{flex:1;max-width:1400px;padding:28px 32px}.page-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2{font-size:22px}.btn{border:1px solid var(--border);color:var(--text);cursor:pointer;background:#fff;border-radius:8px;padding:8px 16px;font-family:inherit;font-size:13px;transition:all .15s}.btn:hover{border-color:var(--muted)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark)}.btn-block{width:100%;margin-top:8px;padding:11px;font-size:15px}.btn-sm{border-radius:6px;padding:4px 10px;font-size:12px}.btn-success{background:var(--success);border-color:var(--success);color:#fff}.btn-warn{border-color:var(--warn);color:#a4701a;background:#fff}.btn-outline-danger{color:var(--danger);background:#fff;border-color:#f1b6b6}.btn-outline-danger:hover{background:#fdf0f0}.card{border-radius:var(--radius);border:1px solid var(--border);background:#fff;margin-bottom:20px;padding:20px;box-shadow:0 1px 3px #0000000a}.form-card{max-width:700px}.form-card h3{margin-bottom:16px}.table{border-collapse:collapse;width:100%}.table th{text-align:left;color:var(--muted);border-bottom:2px solid var(--border);padding:10px 12px;font-size:12px;font-weight:600}.table td{border-bottom:1px solid var(--border);padding:10px 12px}.table tr:last-child td{border-bottom:none}.table-inner{background:#f8f9fc;border-radius:8px}.table-inner td{font-size:13px}.clickable-row{cursor:pointer}.clickable-row:hover td{background:#f8f9fc}.expand-row td{background:#f4f6fb;padding:16px}.expand-content{flex-direction:column;gap:12px;display:flex}.actions-cell{white-space:nowrap;gap:6px;display:flex}.actions-cell .btn{white-space:nowrap}.muted{color:var(--muted)}.form-group{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.form-group label{font-size:13px;font-weight:600}.form-row{flex-wrap:wrap;align-items:flex-end;gap:14px;display:flex}.form-row .form-group{flex:1;min-width:160px}input,select,textarea{border:1px solid var(--border);color:var(--text);background:#fff;border-radius:8px;width:100%;padding:9px 12px;font-family:inherit;font-size:14px}input:focus,select:focus,textarea:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #e639461f}select:disabled{color:var(--muted);cursor:not-allowed;background:#f1f3f8}textarea{resize:vertical}.form-actions{gap:10px;margin-top:8px;display:flex}.alert{border-radius:8px;margin-bottom:14px;padding:10px 14px;font-size:13px}.alert-error{color:var(--danger);background:#fdeaea;border:1px solid #f5c2c2}.alert-success{color:var(--success);background:#e8f6f4;border:1px solid #b8e0da}.page-state{min-height:50vh;color:var(--muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex}.page-state h2{color:var(--text)}.form-hint,.text-muted{color:var(--muted);font-size:12px}.form-hint{margin-top:4px}.btn-link{color:var(--primary);font-size:inherit;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.upload-progress{color:var(--muted);margin-top:6px;font-size:12px}.customer-checkboxes{flex-wrap:wrap;gap:8px;display:flex}.checkbox-chip{border:1px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:20px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;transition:all .12s;display:flex}.checkbox-chip input{width:auto}.checkbox-chip.checked{border-color:var(--primary);color:var(--primary-dark);background:#e6394614;font-weight:600}.chip-name{font-weight:500}.chip-phone{color:var(--muted);font-size:11px}.checkbox-chip.checked .chip-phone{color:var(--primary-dark);opacity:.7}.selected-count{color:var(--muted);margin-left:8px;font-size:12px;font-weight:400}.customer-search{border:1px solid var(--border);background:#fafbfd;border-radius:8px;align-items:center;gap:8px;margin-bottom:10px;padding:6px 10px;display:flex}.customer-search:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px #e639461a}.customer-search input{box-shadow:none;background:0 0;border:none;outline:none;padding:2px 0;font-size:13px}.customer-search .search-icon{font-size:12px}.calendar-container{border-radius:var(--radius);border:1px solid var(--border);background:#fff;padding:16px;box-shadow:0 1px 3px #0000000a}.calendar-filters{border-top:1px dashed var(--border);flex-wrap:wrap;align-items:center;gap:16px;margin-top:12px;padding-top:12px;display:flex}.calendar-filters label{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.calendar-filters select{width:180px}.fc .fc-toolbar-title{font-weight:700;font-size:18px!important}.fc .fc-button-primary{border-color:var(--border);color:var(--text);background:#fff}.fc .fc-button-primary:hover{border-color:var(--muted);background:#f4f6fb}.fc .fc-button-primary:not(:disabled).fc-button-active{background:var(--primary);border-color:var(--primary);color:#fff}.fc .fc-col-header-cell-cushion{color:var(--muted);font-size:12px;font-weight:600}.fc .fc-daygrid-day-number{color:var(--muted);font-size:12px}.fc .fc-event{cursor:pointer;white-space:pre-line;border:none;border-radius:6px;padding:2px 6px;font-size:12px;line-height:1.35}.fc .fc-event:hover{filter:brightness(1.08)}.fc .fc-event.status-cancelled{opacity:.6;text-decoration:line-through}.fc .fc-event.status-completed{opacity:.75}.fc .fc-timegrid-slot{height:2.2em}.fc .fc-daygrid-day.fc-day-today{background:#e639460a!important}.fc .fc-highlight{background:#e6394614!important}.legend{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px 18px;margin-top:14px;font-size:13px;display:flex}.legend .dot{border-radius:3px;width:10px;height:10px;margin-right:5px;display:inline-block}.modal-overlay{z-index:1000;background:#1419238c;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:#fff;border-radius:14px;flex-direction:column;width:100%;max-height:90vh;animation:.18s modalIn;display:flex;box-shadow:0 24px 60px #00000059}@keyframes modalIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.modal-lg{max-width:560px}.modal-xl{max-width:780px}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 22px;display:flex}.modal-header h3{font-size:17px}.modal-close{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:6px;padding:4px 8px;font-size:16px}.modal-close:hover{color:var(--text);background:#f4f6fb}.modal-body{padding:20px 22px;overflow-y:auto}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:10px;padding:14px 22px;display:flex}.detail-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:20px;display:grid}.detail-card{border:1px solid var(--border);background:#f8f9fc;border-radius:10px;padding:14px}.detail-label{color:var(--muted);margin-bottom:6px;font-size:12px}.detail-value{font-size:16px;font-weight:700}.detail-sub{color:var(--muted);margin-top:4px;font-size:12px}.section{margin-bottom:20px}.section-title{border-bottom:1px solid var(--border);margin-bottom:10px;padding-bottom:8px;font-size:14px;font-weight:700}.training-content{white-space:pre-wrap;background:#f8f9fc;border-radius:8px;padding:14px;font-family:inherit;font-size:13px;line-height:1.7}.status-badge,.att-badge{border-radius:20px;margin-top:6px;padding:3px 9px;font-size:11px;font-weight:600;display:inline-block}.status-scheduled{color:#1a5fd0;background:#e3edff}.status-completed{color:var(--success);background:#e8f6f4}.status-cancelled{color:var(--muted);background:#eee}.att-pending{color:#b26a00;background:#fff3e0}.att-present{color:var(--success);background:#e8f6f4}.att-absent{color:var(--danger);background:#fdeaea}.enroll-row{background:#f8f9fc;border-radius:8px;align-items:center;gap:10px;margin-top:12px;padding:10px 12px;display:flex}.enroll-row select{width:260px}.course-add{border-top:1px dashed var(--border);margin-top:10px;padding-top:10px}.course-add input{flex:1;min-width:120px}.search-bar{border:1px solid var(--border);background:#fff;border-radius:10px;align-items:center;gap:10px;max-width:520px;margin-bottom:16px;padding:8px 14px;display:flex;box-shadow:0 1px 3px #0000000a}.search-icon{opacity:.7;font-size:14px}.search-input{box-shadow:none;background:0 0;border:none;outline:none;flex:1;padding:6px 0;font-size:14px}.search-input:focus{box-shadow:none;border:none}.search-clear{cursor:pointer;width:22px;height:22px;color:var(--muted);background:#f1f3f8;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:11px;display:flex}.search-clear:hover{color:var(--text);background:#e2e6ee}.search-count{color:var(--muted);white-space:nowrap;font-size:12px}.day-list{flex-direction:column;gap:10px;display:flex}.day-card{border:1px solid var(--border);cursor:pointer;background:#fff;border-radius:10px;align-items:center;gap:14px;padding:12px 16px;transition:all .15s;display:flex}.day-card:hover{border-color:var(--primary);transform:translateY(-1px);box-shadow:0 3px 12px #e639461f}.day-card-cancelled{opacity:.55;text-decoration:line-through}.day-time{color:var(--primary);white-space:nowrap;font-variant-numeric:tabular-nums;min-width:110px;font-size:15px;font-weight:700}.day-main{flex-direction:column;flex:1;gap:4px;display:flex}.day-course{align-items:center;gap:8px;font-size:15px;font-weight:700;display:flex}.day-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:10px;font-size:12px;display:flex}.room-chip{border-radius:20px;padding:1px 8px;font-size:11px;font-weight:600;display:inline-block}.day-arrow{color:var(--muted);font-size:22px;font-weight:300}.day-add-row{margin-top:16px}.empty-day{text-align:center;color:var(--muted);padding:32px 0}.empty-icon{margin-bottom:10px;font-size:40px}.rank-badge{color:#fff;border-radius:12px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.rank-intern{background:#94a3b8}.rank-senior{background:#0ea5e9}.rank-partner{background:#d97706}.request-badge{border-radius:12px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.request-badge.pending{color:#92400e;background:#fef3c7}.request-badge.approved{color:#166534;background:#dcfce7}.request-badge.rejected{color:#991b1b;background:#fee2e2}.small{font-size:12px}.btn-xs{padding:1px 6px;font-size:11px}.video-grid{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px;display:grid}.video-card{flex-direction:column;gap:8px;display:flex}.video-header{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.video-title{font-size:15px;font-weight:700}.video-placeholder{color:#fff;cursor:pointer;background:#0f172a;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;height:180px;display:flex}.video-play-icon{font-size:36px}.video-player{background:#000;border-radius:8px;width:100%;max-height:300px}.video-actions{gap:8px;display:flex}.video-desc{color:var(--muted);border-left:3px solid var(--primary);padding-left:10px;font-size:13px}.comment-section{border-top:1px solid var(--border);padding-top:8px}.comment-toggle{cursor:pointer;color:var(--primary);font-size:13px;font-weight:600}.comment-list{flex-direction:column;gap:6px;margin-top:8px;display:flex}.comment-item{background:var(--bg);border-radius:6px;align-items:center;gap:6px;padding:6px 10px;font-size:13px;display:flex}.comment-user{font-weight:700}.comment-input-row{gap:6px;margin-top:6px;display:flex}.comment-input-row input{flex:1}.trainer-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;display:grid}.trainer-card{border:1px solid var(--border);text-align:center;cursor:pointer;border-radius:10px;flex-direction:column;align-items:center;gap:6px;padding:14px;transition:box-shadow .15s;display:flex}.trainer-card:hover{box-shadow:0 2px 10px #0000001f}.trainer-avatar{background:var(--primary);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:48px;height:48px;font-size:22px;font-weight:700;display:flex}.trainer-card-name{font-weight:700}.progress-bar{background:#e2e8f0;border-radius:4px;width:120px;height:8px;overflow:hidden}.progress-fill{background:var(--primary);border-radius:4px;height:100%}.tabs{gap:8px;margin-bottom:14px;display:flex}.completion-list{flex-direction:column;gap:14px;display:flex}.completion-card{flex-direction:column;gap:10px;display:flex}.completion-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.completion-meta{color:var(--muted);font-size:13px}.completion-comment{background:var(--bg);border-left:3px solid var(--primary);white-space:pre-wrap;border-radius:8px;padding:10px 12px;font-size:13px}.completion-videos{font-size:13px}.video-inline a{color:var(--primary);font-weight:600;text-decoration:none}.completion-review{background:var(--bg);border-radius:8px;flex-direction:column;gap:8px;padding:12px;display:flex}.salary-total td{background:var(--bg);font-weight:700}.color-picker{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.color-swatch{cursor:pointer;border:2px solid #0000;border-radius:50%;width:26px;height:26px;padding:0}.color-swatch.is-selected{border-color:var(--text);box-shadow:inset 0 0 0 2px #fff}.color-input{cursor:pointer;background:#fff;border:1px solid #d7dce5;border-radius:6px;width:40px;height:30px;padding:2px}.room-name-cell{align-items:center;gap:8px;display:inline-flex}.room-color-dot{border-radius:50%;flex-shrink:0;width:12px;height:12px}.course-group{margin-bottom:16px}.course-group-head{cursor:pointer;justify-content:space-between;align-items:center;gap:10px;padding:2px 0;list-style:none;display:flex}.course-group-head::-webkit-details-marker{display:none}.course-group-head:before{content:"▸";color:var(--muted);transition:transform .15s}.course-group[open]>.course-group-head:before{transform:rotate(90deg)}.course-number{word-break:break-all;font-size:15px;font-weight:700}.student-group{border-left:2px solid var(--bg);margin:10px 0 0 14px;padding-left:12px}.student-group-head{cursor:pointer;align-items:center;gap:6px;padding:4px 0;font-size:13px;font-weight:600;list-style:none;display:flex}.student-group-head::-webkit-details-marker{display:none}.media-list{flex-direction:column;gap:12px;margin-top:8px;display:flex}.media-item{background:var(--bg);border-radius:10px;flex-direction:column;gap:8px;padding:12px;display:flex}.media-item-head{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}
