*{margin:0;padding:0;box-sizing:border-box}body{font-family:Microsoft YaHei,sans-serif;background-color:#f5f5f5;color:#333}h1{text-align:center;color:#2c3e50;margin-bottom:20px}.container{max-width:1400px;width:95%;margin:40px auto;padding:20px;background-color:#fff;border-radius:12px;box-shadow:0 2px 18px #00000014}.top-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.calendar-actions{display:flex;gap:10px}.top-actions button{padding:8px 14px;border:1px solid #e2e8f0;border-radius:8px;background:#fff;color:#334155;cursor:pointer;transition:all .2s ease}.top-actions button:hover{background:#f1f5f9}.calendar-section{margin-bottom:24px}.calendar-header{font-weight:600;color:#0f172a;margin-bottom:10px}.split{display:grid;grid-template-columns:1fr;gap:20px}.app-nav{max-width:1100px;margin:20px auto 0;padding:0 20px}.back-link{display:inline-flex;align-items:center;gap:8px;color:#64748b;text-decoration:none;font-size:14px;font-weight:500;transition:all .2s ease;padding:8px 0}.back-link:hover{color:#0f172a;transform:translate(-4px)}.course-reminder-panel{margin-bottom:16px;padding:14px;border:1px solid #e2e8f0;border-radius:12px;background:linear-gradient(180deg,#fbfdff,#fff)}.course-reminder-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}.course-reminder-header-right{display:inline-flex;align-items:center;gap:10px}.course-reminder-title h3{font-size:17px;color:#0f172a;margin:0}.course-reminder-title p{margin-top:4px;color:#64748b;font-size:13px}.course-reminder-permission{display:inline-flex;align-items:center;height:28px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid #dbeafe;background:#eff6ff;color:#1d4ed8}.course-reminder-permission.pending{border-color:#e2e8f0;background:#f8fafc;color:#475569}.course-reminder-grid{display:grid;grid-template-columns:repeat(2,minmax(320px,1fr));gap:12px}.course-reminder-card{border:1px solid #e2e8f0;border-radius:10px;background:#fff;padding:12px}.course-reminder-card-title{font-size:14px;font-weight:700;color:#1e293b}.course-reminder-controls{margin-top:10px;display:flex;flex-wrap:wrap;align-items:center;gap:10px}.course-reminder-switch{display:inline-flex;align-items:center;gap:6px;color:#334155;font-size:13px}.course-reminder-switch input[type=checkbox]{width:15px;height:15px;accent-color:#2563eb;cursor:pointer}.course-reminder-inline{display:inline-flex;align-items:center;gap:6px;color:#334155;font-size:13px}.course-reminder-input{width:74px;height:32px;border:1px solid #dbe3ee;border-radius:8px;padding:0 10px;color:#334155;outline:none;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.course-reminder-input:focus{border-color:#60a5fa;box-shadow:0 0 0 3px #3b82f624}.course-reminder-actions{margin-top:10px;display:flex;flex-wrap:wrap;gap:10px}.course-reminder-btn{height:34px;padding:0 12px;border-radius:8px;border:1px solid rgb(59,130,246);background:#3b82f6;color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s ease}.course-reminder-btn:hover{background:#2563eb;border-color:#2563eb}.course-reminder-btn.primary{border-color:#3b82f6;background:#3b82f6}.course-reminder-btn.primary:hover{background:#2563eb;border-color:#2563eb}.course-reminder-toggle{height:30px;font-size:12px;padding:0 10px}.course-reminder-foot{margin-top:12px;border-top:1px solid #f1f5f9;padding-top:10px;color:#475569;font-size:13px;display:grid;gap:6px}.course-reminder-last{color:#0f766e}@media (max-width: 980px){.course-reminder-grid{grid-template-columns:1fr}.course-reminder-header{flex-direction:column;align-items:flex-start}.course-reminder-header-right{width:100%;justify-content:space-between}}.calendar-grid{display:grid;grid-template-columns:80px repeat(7,1fr);gap:8px}.time-col{border-right:1px dashed #e2e8f0;padding-right:6px;position:relative}.time-slot{height:48px;font-size:12px;color:#94a3b8;position:relative}.time-slot:after{content:"";position:absolute;right:-6px;left:0;bottom:0;height:1px;background:#f1f5f9}.time-end{position:absolute;bottom:0;left:0;font-size:12px;color:#94a3b8}.day-col{background:#fafafa;border:1px solid #f1f5f9;border-radius:10px;overflow:hidden;display:flex;flex-direction:column}.day-header{text-align:center;padding:8px 6px;background:#fff;border-bottom:1px solid #f1f5f9;font-weight:600;color:#334155}.day-col.today .day-header{background:#e6f4ff;color:#1d4ed8}.day-body{position:relative;height:768px;min-height:768px;background-image:linear-gradient(#f8fafc 1px,#fff0 1px);background-size:100% 48px}.event{position:absolute;left:6px;right:6px;border-radius:8px;padding:8px;font-size:12px;line-height:1.2;overflow:hidden;transition:box-shadow .2s,z-index 0s}.event:hover{height:auto!important;min-height:fit-content;z-index:100;overflow:visible;box-shadow:0 4px 12px #00000026}.event .title{font-weight:700;display:block;margin-bottom:4px}.event .meta{color:#475569;font-size:11px}.event.course{background:#eef6ff;border:1px solid #bfdbfe;color:#1e40af}.day-col.today .event.course{box-shadow:0 0 0 2px #1d4ed826 inset}.event.focus{background:#ecfdf5;border:1px solid #a7f3d0;color:#065f46}.now-line{position:absolute;left:0;right:0;height:2px;background:#ef4444;box-shadow:0 0 0 1px #ef444440}.todo-section h2{margin-bottom:10px}.todo-input{display:flex;gap:10px;margin-bottom:12px}#taskInput{flex:1;padding:10px;border:1px solid #e2e8f0;border-radius:8px;font-size:16px}#addTask{padding:10px 16px;background-color:#2563eb;color:#fff;border:none;border-radius:8px;cursor:pointer;transition:background-color .2s}#addTask:hover{background-color:#1d4ed8}.task-list{list-style:none}.task-item{display:flex;align-items:center;padding:10px;background-color:#f8fafc;border-radius:8px;margin-bottom:8px;border:1px solid #e2e8f0}.task-item.completed{background-color:#ecfdf5;text-decoration:line-through;color:#64748b}.task-item.legacy{background-color:#fef3c7;border-left:3px solid #f59e0b}.task-item.legacy .task-text{color:#92400e;font-weight:500}.task-checkbox{margin-right:10px;cursor:pointer}.task-text{flex:1}.delete-btn,.focus-btn{padding:6px 10px;border:none;border-radius:6px;cursor:pointer;margin-left:8px}.delete-btn{background-color:#ef4444;color:#fff}.delete-btn:hover{background-color:#dc2626}.focus-btn{background-color:#10b981;color:#fff}.focus-btn:hover{background-color:#059669}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:50;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .24s ease}.modal[aria-hidden=false]{opacity:1;visibility:visible;pointer-events:auto}.modal-content{width:420px;background:#fff;border-radius:12px;box-shadow:0 10px 30px #00000026;overflow:hidden;transform:translateY(-6px);transition:transform .24s ease}.modal[aria-hidden=false] .modal-content{transform:translateY(0)}.modal-wide{width:80vw;max-width:1000px}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #f1f5f9}.modal-body{padding:16px}.modal-body label{display:block;font-size:14px;color:#334155;margin-bottom:10px}.modal-body input,.modal-body select{width:100%;margin-top:6px;padding:8px 10px;border:1px solid #e2e8f0;border-radius:8px}.modal-actions{text-align:right;margin-top:8px}.modal-actions button{padding:8px 14px;border-radius:8px;border:none;background:#2563eb;color:#fff}.close-modal{background:transparent;border:none;font-size:20px;cursor:pointer;color:#64748b}.close-modal:hover{color:#0f172a}.hint{font-size:12px;color:#64748b;margin-top:8px}.timer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:none;align-items:center;justify-content:center;z-index:60}.timer-overlay[aria-hidden=false]{display:flex}.timer-panel{width:520px;background:#0b1220;color:#e2e8f0;border-radius:16px;box-shadow:0 20px 60px #0006;overflow:hidden}.timer-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#0f172a}.timer-body{padding:18px}.timer-mode label{margin-right:12px;cursor:pointer}.countdown-setup{font-size:42px;text-align:center;margin:8px 0 10px;color:#e2e8f0}.time-number{display:inline-block;min-width:88px;padding:4px 8px;border-radius:8px;background:#111827;outline:none}.time-suffix{margin-left:6px;font-size:16px;color:#94a3b8}.running-time{text-align:center;font-size:48px;font-weight:700;margin:14px 0;letter-spacing:1px}.timer-actions{display:flex;gap:8px;justify-content:center}.timer-actions button{padding:10px 14px;border-radius:10px;border:none;cursor:pointer}#startTimer{background:#22c55e;color:#052e16}#pauseTimer{background:#fde68a;color:#78350f}#resetTimer{background:#c7d2fe;color:#1e1b4b}#finishTimer{background:#93c5fd;color:#082f49}#stopTimer{background:#fecaca;color:#7f1d1d}@media (max-width: 960px){.calendar-grid{grid-template-columns:60px repeat(7,1fr)}.container{margin:20px auto;padding:14px}}@media (max-width: 768px){.container{margin:10px;padding:12px;border-radius:8px}h1{font-size:20px;margin-bottom:15px}.top-actions{flex-wrap:wrap;gap:8px;margin-bottom:12px}.top-actions button{padding:6px 10px;font-size:12px;flex:1;min-width:80px}.calendar-grid{grid-template-columns:50px repeat(7,1fr);gap:4px}.time-slot{height:40px;font-size:10px}.time-end{font-size:10px}.day-body{height:640px;min-height:640px;background-size:100% 40px}.day-header{padding:6px 2px;font-size:11px;font-weight:500}.event{left:2px;right:2px;padding:4px;font-size:10px;border-radius:4px}.event .title{font-size:10px;font-weight:600;margin-bottom:2px;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event .meta{font-size:9px;line-height:1}.split{grid-template-columns:1fr;gap:15px}.todo-section h2{font-size:16px;margin-bottom:8px}.todo-input{flex-direction:column;gap:8px}#taskInput{padding:8px;font-size:14px}#addTask{padding:8px 12px;font-size:14px}.task-item{padding:8px;font-size:14px}.delete-btn,.focus-btn{padding:4px 8px;font-size:12px;margin-left:4px}.modal-content{width:95vw;margin:10px}.modal-wide{width:95vw;height:90vh}.timer-panel{width:95vw;margin:10px}.countdown-setup{font-size:28px}.running-time{font-size:32px}.timer-actions{flex-wrap:wrap;gap:6px}.timer-actions button{flex:1;min-width:80px;padding:8px 10px;font-size:12px}}@media (max-width: 480px){.container{margin:5px;padding:8px}.calendar-grid{grid-template-columns:40px repeat(7,1fr);gap:2px}.time-slot{height:35px;font-size:9px}.time-end{font-size:9px}.day-body{height:560px;min-height:560px;background-size:100% 35px}.day-header{padding:4px 1px;font-size:10px}.event{left:1px;right:1px;padding:2px;font-size:9px}.event .title{font-size:9px;margin-bottom:1px}.event .meta{font-size:8px}.top-actions button{padding:4px 6px;font-size:11px}}
