body{color:#222;background:#f5f5f5;margin:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.app{max-width:1500px;margin:auto;padding:32px}.app-header{justify-content:space-between;align-items:center;gap:24px;display:flex}.app-header h1{margin:0}.app-introduction{color:#5a6472;margin:10px 0 0;line-height:1.6}.auth-modal{z-index:1000;background:#00000073;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.auth-modal-content{box-sizing:border-box;background:#fff;border-radius:12px;width:min(100%,480px);max-height:calc(100vh - 40px);padding:24px;overflow-y:auto;box-shadow:0 16px 48px #0003}.auth-modal-header{justify-content:space-between;align-items:center;display:flex}.auth-modal-header h2{margin:0}.auth-modal-close{color:#555;cursor:pointer;background:0 0;border:0;font-size:28px;line-height:1}.auth-modal .auth-form-container{box-shadow:none;border:0;margin:20px 0 0;padding:0}body.modal-open{overflow:hidden}.search-area{background:#fff;border-radius:8px;margin-top:24px;padding:16px}.search-area label{margin-bottom:8px;font-weight:600;display:block}.search-area input{box-sizing:border-box;width:100%;padding:10px 12px;font-size:16px}.course-list{grid-template-columns:1fr;gap:16px;margin-top:24px;display:grid}@media (width>=680px){.course-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=1100px){.course-list{grid-template-columns:repeat(3,minmax(0,1fr))}}.auth-form-container{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffffff2;border:1px solid #ffffff4d;border-radius:12px;max-width:400px;margin:32px auto;padding:24px;transition:all .3s;box-shadow:0 8px 32px #00000014}.auth-tabs{border-bottom:2px solid #eaeaea;margin-bottom:20px;display:flex}.auth-tab-btn{color:#666;cursor:pointer;background:0 0;border:none;flex:1;padding:10px;font-size:16px;font-weight:600;transition:all .3s}.auth-tab-btn:hover{color:#007aff}.auth-tab-btn.active{color:#007aff;border-bottom:2px solid #007aff;margin-bottom:-2px}.auth-form{flex-direction:column;gap:16px;display:flex}.form-group{flex-direction:column;gap:6px;display:flex}.form-group label{color:#444;font-size:14px;font-weight:600}.form-group input{border:1px solid #ccc;border-radius:6px;padding:12px;font-size:16px;transition:border-color .3s}.form-group input:focus{border-color:#007aff;outline:none;box-shadow:0 0 0 3px #007aff26}.auth-submit-btn{color:#fff;cursor:pointer;background:#007aff;border:none;border-radius:6px;padding:12px;font-size:16px;font-weight:600;transition:background-color .3s}.auth-submit-btn:hover:not(:disabled){background:#0056b3}.auth-submit-btn:disabled{cursor:not-allowed;background:#a0cfff}.auth-error-message,.auth-success-message{border-radius:6px;padding:10px 12px;font-size:14px;line-height:1.4}.auth-error-message{color:#c00;background:#ffe5e5;border:1px solid #fcc}.auth-success-message{color:#080;background:#e5ffe5;border:1px solid #cfc}.hidden{display:none!important}.auth-status-container{background:#fffc;border-radius:20px;align-items:center;gap:12px;padding:6px 12px;font-size:14px;display:inline-flex;box-shadow:0 2px 8px #0000000d}.auth-status-email{color:#333;font-weight:600}.auth-status-guest{color:#666}.auth-status-btn{cursor:pointer;border:none;border-radius:14px;padding:6px 12px;font-size:12px;font-weight:600;transition:all .2s}.auth-status-btn.signin{color:#fff;background:#007aff}.auth-status-btn.signin:hover{background:#0056b3}.auth-status-btn.signout{color:#ff3b30;background:#f5f5f7;border:1px solid #ffe5e5}.auth-status-btn.signout:hover{background:#ffe5e5}.course-detail{background:#fff;border-radius:16px;grid-column:1/-1;padding:28px;box-shadow:0 2px 8px #0000001a}.detail-header{justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.detail-heading{min-width:0}.detail-heading h2{margin:12px 0 6px;font-size:clamp(1.6rem,3vw,2.25rem);line-height:1.25}.detail-instructor{color:#555;margin:0;font-size:1.05rem}.detail-section{background:#fbfcfe;border:1px solid #e3e7ee;border-radius:12px;margin-top:24px;padding:20px}.detail-section h3{margin:0 0 16px;font-size:1.15rem}.detail-info-grid{background:#e2e5ea;border:1px solid #e2e5ea;border-radius:10px;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;margin:0;display:grid;overflow:hidden}.detail-info-grid div{background:#fff;min-width:0;padding:12px 14px}.detail-info-grid dt{color:#667085;margin-bottom:4px;font-size:.78rem;font-weight:700}.detail-info-grid dd{overflow-wrap:anywhere;margin:0;font-weight:600}.detail-pre-line{white-space:pre-line;margin:12px 0 0;line-height:1.75}.detail-assessment-badges:empty{display:none}.koan-section p{margin:0 0 14px}.koan-syllabus-button{color:#fff;font:inherit;cursor:pointer;background:#075fcb;border:0;border-radius:8px;padding:11px 16px;font-weight:700}.koan-syllabus-button:hover{background:#064ea5}.koan-syllabus-button:focus-visible{outline-offset:2px;outline:3px solid #075fcb4d}.koan-code-fallback{background:#fff4d6;border-radius:8px;padding:10px 12px}.koan-code-fallback code{-webkit-user-select:all;user-select:all;font-size:1rem;font-weight:700}.koan-copy-message{color:#2457a6;min-height:1.5em;font-size:.9rem}.review-section{margin-top:32px}.review-list-container{margin-top:16px}.review-item h4{margin:12px 0 4px}.review-item p{white-space:pre-wrap}.review-post-container{border-top:1px solid #ddd;margin-top:24px;padding-top:20px}.review-form{gap:16px;display:grid}.review-form h4{margin:0}.review-form-group{gap:6px;display:grid}.review-form textarea{box-sizing:border-box;resize:vertical;width:100%;font:inherit;border:1px solid #ccc;border-radius:6px;padding:10px 12px}.review-form textarea:focus{border-color:#007aff;outline:none;box-shadow:0 0 0 3px #007aff26}.review-submit-button{color:#fff;font:inherit;cursor:pointer;background:#007aff;border:0;border-radius:6px;justify-self:start;padding:10px 18px;font-weight:600}.review-submit-button:disabled{cursor:not-allowed;opacity:.65}.review-form-error{color:#c00;margin:0}.review-login-message{color:#666}#back-button{cursor:pointer;margin-bottom:20px;padding:8px 16px}.course-card{cursor:pointer;background:#fff;border:1px solid #e6e9ef;border-radius:14px;flex-direction:column;gap:11px;min-width:0;min-height:150px;padding:16px;transition:transform .18s,box-shadow .18s;display:flex;box-shadow:0 3px 12px #0000000d}.course-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px #00000017}.course-card-top,.course-card-footer,.course-card-main{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.category-tag{color:#2457a6;text-overflow:ellipsis;white-space:nowrap;background:#e7efff;border-radius:999px;max-width:100%;padding:4px 9px;font-size:.72rem;font-weight:700;line-height:1.25;display:inline-flex;overflow:hidden}.period{color:#344054;background:#f2f4f7;border-radius:6px;flex:none;padding:3px 7px;font-size:.78rem;font-weight:700}.course-card-heading{flex:1;min-width:0}.course-card h2{overflow-wrap:anywhere;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:1rem;font-weight:800;line-height:1.35;display:-webkit-box;overflow:hidden}.teacher{color:#667085;text-overflow:ellipsis;white-space:nowrap;margin:5px 0 0;font-size:.82rem;overflow:hidden}.score-box{flex:none;gap:5px;display:flex}.score-card{box-sizing:border-box;background:#fafafa;border:1px solid #d6dae1;border-radius:7px;flex-direction:column;justify-content:center;align-items:center;width:38px;height:42px;padding:3px;display:flex}.score-card small{color:#667085;font-size:.6rem;font-weight:600;line-height:1}.score-card strong{margin-top:3px;font-size:1rem;line-height:1}.score-card.S{background:#fffbea;border-color:#dac37e}.score-card.A{background:#fff1f1;border-color:#f6a0a0}.score-card.B{background:#eef5ff;border-color:#8db8ff}.score-card.C{background:#effaf0;border-color:#8fd19e}.score-card.F{background:#f3f3f3;border-color:#bfbfbf}.course-card-footer{align-items:center;min-height:22px;margin-top:auto}.assessment-badges{flex-wrap:wrap;gap:5px;min-width:0;display:flex}.assessment-badge{color:#475467;background:#f7f8fa;border:1px solid #d9dee7;border-radius:999px;padding:3px 7px;font-size:.68rem;font-weight:700;line-height:1.2}.assessment-badge.test{color:#a63d35;background:#fff1f0;border-color:#f1b2ae}.assessment-badge.report{color:#2457a6;background:#eef5ff;border-color:#a9c8f5}.assessment-badge.attendance{color:#367443;background:#effaf0;border-color:#a9d8b1}.assessment-badge.presentation{color:#71469a;background:#f7efff;border-color:#d1b4ee}.review-count{color:#667085;white-space:nowrap;flex:none;font-size:.72rem}@media (width<=640px){.app{padding:18px}.app-header{flex-direction:column;align-items:flex-start}.course-detail{padding:18px}.detail-header{flex-direction:column}.detail-info-grid{grid-template-columns:1fr}}.filter-area{background:#fff;border-radius:18px;flex-wrap:wrap;align-items:center;gap:16px;margin-bottom:28px;padding:20px 24px;display:flex;box-shadow:0 3px 12px #0000000d}.filter-area label{align-items:center;gap:8px;font-weight:600;display:flex}.filter-area select{cursor:pointer;background:#fff;border:1px solid #ddd;border-radius:10px;padding:10px 16px;font-size:15px}.filter-area input[type=checkbox]{transform:scale(1.15)}.schedule-button{cursor:pointer;background:#fff;border:1px solid #ccc;border-radius:8px;padding:8px 18px;font-size:15px}.schedule-button:hover{background:#f5f5f5}.schedule-filter{width:100%;margin:15px 0}.schedule-actions{gap:8px;margin-bottom:10px;display:flex}.schedule-actions button{font:inherit;cursor:pointer;background:#fff;border:1px solid #ccd1d9;border-radius:7px;padding:7px 12px;font-size:.85rem}.schedule-actions button:hover{background:#f2f4f7}.schedule-help{color:#344054;background:#eef5ff;border-left:4px solid #1769c2;border-radius:6px;margin:0 0 12px;padding:10px 12px;font-size:.86rem;line-height:1.55}.schedule-table{border-collapse:collapse;table-layout:fixed;touch-action:none;-webkit-user-select:none;user-select:none;background:#fff;width:100%}.schedule-table th,.schedule-table td{text-align:center;border:1px solid #ddd;padding:0}.schedule-table th{background:#f5f5f5}.schedule-header-button{color:#344054;width:100%;min-height:42px;font:inherit;cursor:pointer;background:0 0;border:0;padding:8px 4px;font-weight:700;transition:background .15s,color .15s}.schedule-header-button:hover{color:#174f91;background:#dce9fb}.schedule-header-button:focus-visible{z-index:1;outline-offset:-3px;outline:3px solid #075fcb59;position:relative}.schedule-cell{background:#fff;height:46px;transition:background .12s}.schedule-cell:hover{background:#eef5ff}.schedule-cell:has(input:checked){background:#dbeaff}.schedule-cell:has(input:checked):hover{background:#c9defa}.schedule-cell-label{cursor:crosshair;place-items:center;width:100%;height:100%;min-height:46px;display:grid}.schedule-cell-label input{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden;transform:none}.schedule-cell-indicator{box-sizing:border-box;color:#0000;background:#fff;border:2px solid #b5bdc9;border-radius:6px;place-items:center;width:22px;height:22px;font-size:.8rem;font-weight:800;transition:background .12s,border-color .12s,color .12s;display:grid}.schedule-cell-label input:checked+.schedule-cell-indicator{color:#fff;background:#1769c2;border-color:#1769c2}.schedule-cell-label:focus-within{z-index:1;outline-offset:-3px;outline:3px solid #075fcb59;position:relative}.filter-row{flex-wrap:wrap;align-items:center;gap:18px;display:flex}.schedule-filter{margin-top:18px}.review-item{border-bottom:1px solid #ccc;margin-bottom:1rem;padding-bottom:1rem}.review-item-footer{justify-content:flex-end;align-items:center;gap:12px;margin-top:.5em;display:flex}.review-item-date{color:#666;margin:0}.review-delete-button{color:#c0392b;cursor:pointer;background:#fff;border:1px solid #c0392b;border-radius:4px;padding:2px 10px}.review-delete-button:hover{color:#fff;background:#c0392b}.review-delete-button:disabled{opacity:.5;cursor:default}.auth-status-error{color:#c0392b;font-size:.85em}
