:root,.theme-light{--bg:#f8f5f0;--surface:#fff;--surface2:#fcfaf8;--border:#ece6df;--border2:#e8dfd6;--border-light:#f5f0eb;--text:#2d2a24;--text2:#6a5f52;--text3:#9a8f85;--accent:#c4956a;--accent-hover:#b08055;--accent-text:#fff;--danger:#c0392b;--danger-bg:#fdf0ed;--shadow:#0000000f;--header-bg:#fcfaf8;--cell-hover:#fdfbf9;--scrollbar:#d5c8bc;--today-bg:#f5ede4}.theme-dark{--bg:#1a1a2e;--surface:#16213e;--surface2:#1a2744;--border:#2a3a5a;--border2:#2a3a5a;--border-light:#1e2e4e;--text:#e0e0e0;--text2:#a0b0c0;--text3:#607080;--accent:#7eb8da;--accent-hover:#5a9ec4;--accent-text:#0a0a1a;--danger:#e74c5e;--danger-bg:#2a1a1e;--shadow:#00000040;--header-bg:#1a2744;--cell-hover:#1e3050;--scrollbar:#3a4a6a;--today-bg:#1e3050}.theme-pink{--bg:#fce4ec;--surface:#fff0f5;--surface2:#fef5f8;--border:#f0d0dc;--border2:#e8c8d4;--border-light:#f8e4ec;--text:#4a2030;--text2:#a06070;--text3:#c090a0;--accent:#e8829a;--accent-hover:#d46880;--accent-text:#fff;--danger:#d4536a;--danger-bg:#fce8ec;--shadow:#c8507814;--header-bg:#fef5f8;--cell-hover:#fef8fa;--scrollbar:#e8c0cc;--today-bg:#fef0f4}.theme-blue{--bg:#e3f2fd;--surface:#f0f8ff;--surface2:#f5faff;--border:#c8dce8;--border2:#b8d0e0;--border-light:#dceaf4;--text:#1a3050;--text2:#507090;--text3:#80a0b8;--accent:#5a9ec8;--accent-hover:#4080b0;--accent-text:#fff;--danger:#c0392b;--danger-bg:#f0e8e8;--shadow:#3c78b414;--header-bg:#f5faff;--cell-hover:#f8fcff;--scrollbar:#b8d0e0;--today-bg:#eef6fc}.theme-purple{--bg:#f3e5f5;--surface:#faf0fc;--surface2:#fcf5fd;--border:#e0c8e8;--border2:#d4b8dc;--border-light:#ecdff0;--text:#3a2050;--text2:#8060a0;--text3:#b090c8;--accent:#a878c8;--accent-hover:#9060b0;--accent-text:#fff;--danger:#b84a8a;--danger-bg:#f8eaf2;--shadow:#8c50b414;--header-bg:#fcf5fd;--cell-hover:#fdf8fe;--scrollbar:#d8c0e4;--today-bg:#faf0fc}.theme-green{--bg:#e8f5e9;--surface:#f2faf3;--surface2:#f6fcf7;--border:#c0d8c4;--border2:#b0ccb4;--border-light:#d8ecd8;--text:#1a3a20;--text2:#508060;--text3:#80b090;--accent:#68a87a;--accent-hover:#4e9060;--accent-text:#fff;--danger:#3a9a4a;--danger-bg:#e8f4ea;--shadow:#3c8c5014;--header-bg:#f6fcf7;--cell-hover:#f8fdf9;--scrollbar:#b8d8c0;--today-bg:#f0faf2}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Segoe UI,system-ui,-apple-system,sans-serif}.app{background:var(--bg);color:var(--text);min-height:100vh;transition:background .3s,color .3s}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--scrollbar);border-radius:4px}::selection{background:var(--accent);color:var(--accent-text)}.auth-page{justify-content:center;align-items:center;min-height:100vh;padding:1.5rem;display:flex}.auth-card{background:var(--surface);width:100%;max-width:380px;box-shadow:0 8px 40px var(--shadow);border-radius:20px;padding:2.5rem;animation:.4s fadeUp}@keyframes fadeUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.auth-logo{color:var(--text);text-align:center;font-size:1.6rem;font-weight:600}.auth-sub{color:var(--text2);text-align:center;margin-bottom:1.5rem;font-size:.85rem}.auth-card h2{color:var(--text);text-align:center;margin-bottom:1rem;font-size:1rem}.auth-card form{flex-direction:column;gap:.5rem;display:flex}.auth-card label{color:var(--text2);font-size:.75rem;font-weight:500}.auth-card input{border:1px solid var(--border);background:var(--surface2);color:var(--text);border-radius:10px;padding:.6rem .75rem;font-size:.85rem;transition:all .2s}.auth-card input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);outline:none}.auth-footer{text-align:center;color:var(--text2);margin-top:1rem;font-size:.8rem}.auth-footer a{color:var(--accent);font-weight:500;text-decoration:none}.error{background:var(--danger-bg);color:var(--danger);text-align:center;border:1px solid color-mix(in srgb, var(--danger) 30%, transparent);border-radius:8px;padding:.5rem .75rem;font-size:.78rem}.btn,.btn-primary,.btn-outline,.btn-danger{cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;align-items:center;gap:.3rem;padding:.45rem .9rem;font-family:inherit;font-size:.8rem;line-height:1.3;transition:all .2s;display:inline-flex}.btn:hover{background:var(--cell-hover);border-color:var(--accent)}.btn-primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.btn-primary:hover{background:var(--accent-hover)}.btn-outline{background:0 0}.btn-sm{border-radius:6px;padding:.3rem .6rem;font-size:.72rem}.btn-danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 40%, transparent)}.btn-danger:hover{background:var(--danger-bg)}.header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.8rem;max-width:1200px;margin:0 auto 1rem;display:flex}.header h1{color:var(--text);font-size:1.4rem;font-weight:600}.header h1 span{color:var(--accent)}.header-sub{color:var(--text2);font-size:.82rem}.header-actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.user-badge{color:var(--text2);background:var(--surface2);border:1px solid var(--border-light);border-radius:20px;align-items:center;gap:.3rem;padding:.25rem .65rem;font-size:.78rem;display:inline-flex}.week-bar{align-items:center;gap:.6rem;max-width:1200px;margin:0 auto .8rem;display:flex}.week-bar button{border:1px solid var(--border);cursor:pointer;color:var(--text);background:0 0;border-radius:6px;padding:.25rem .6rem;font-size:.9rem;transition:all .2s}.week-bar button:hover{background:var(--cell-hover);border-color:var(--accent)}.week-label{color:var(--text2);font-size:.85rem;font-weight:500}.theme-picker{gap:3px;display:flex}.theme-dot{border:2px solid var(--border);cursor:pointer;border-radius:50%;width:20px;height:20px;padding:0;transition:all .2s}.theme-dot.active{border-color:var(--accent);box-shadow:0 0 0 2px var(--surface);transform:scale(1.15)}.theme-dot:hover{transform:scale(1.1)}.calendar-wrap{background:var(--surface);max-width:1200px;box-shadow:0 2px 20px var(--shadow);border-radius:16px;margin:0 auto;overflow-x:auto}.calendar{grid-template-columns:65px repeat(5,1fr);min-width:700px;display:grid;position:relative}.cal-header{text-align:center;color:var(--text);background:var(--header-bg);border-bottom:2px solid var(--border2);z-index:2;padding:.55rem .2rem;font-size:.82rem;font-weight:600;position:sticky;top:0}.cal-header small{color:var(--text3);font-size:.68rem;font-weight:400;display:block}.cal-header.today{background:var(--today-bg)}.cal-time{border-bottom:1px solid var(--border-light);height:50px;color:var(--text3);background:var(--surface2);justify-content:center;align-items:center;font-size:.72rem;font-weight:500;display:flex}.cal-cell{border-bottom:1px solid var(--border-light);border-right:1px solid var(--border-light);cursor:pointer;height:50px;transition:background .1s}.cal-cell:hover{background:var(--cell-hover)}.cal-cell.today-col{background:var(--today-bg)}.cal-overlay{z-index:3;pointer-events:none;grid-row:2/span 18;position:relative}.cal-event{pointer-events:auto;cursor:pointer;border:1px solid #0000;border-radius:8px;flex-direction:column;justify-content:center;min-height:24px;padding:3px 6px;font-size:.65rem;line-height:1.25;transition:box-shadow .15s;display:flex;position:absolute;left:3px;right:3px;overflow:hidden}.cal-event:hover{z-index:10;box-shadow:0 2px 8px #00000026}.cal-event-title{white-space:nowrap;text-overflow:ellipsis;font-size:.65rem;font-weight:600;overflow:hidden}.cal-event-time{opacity:.7;font-size:.52rem}.legend{max-width:1200px;color:var(--text2);flex-wrap:wrap;gap:.5rem 1rem;margin:.8rem auto 0;font-size:.72rem;display:flex}.legend-item{align-items:center;gap:.35rem;display:flex}.legend-swatch{border:1px solid #00000014;border-radius:4px;flex-shrink:0;width:12px;height:12px}.legend-hint{opacity:.5;margin-left:auto;font-size:.7rem}.modal-overlay{z-index:100;background:#00000059;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:16px;width:100%;max-width:440px;max-height:90vh;padding:1.5rem;animation:.2s fadeUp;overflow-y:auto;box-shadow:0 8px 40px #00000026}.modal h2{color:var(--text);margin-bottom:1rem;font-size:1.1rem}.modal label{color:var(--text2);margin-bottom:.2rem;font-size:.75rem;font-weight:500;display:block}.modal input,.modal select,.modal textarea{border:1px solid var(--border);background:var(--surface2);width:100%;color:var(--text);border-radius:8px;margin-bottom:.75rem;padding:.5rem .65rem;font-family:inherit;font-size:.82rem;transition:all .2s}.modal input:focus,.modal select:focus,.modal textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);outline:none}.form-row{gap:.6rem;display:flex}.form-row>*{flex:1}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:.5rem;display:flex}.cat-manage{margin-bottom:.75rem}.cat-manage summary{cursor:pointer;color:var(--accent);padding:.2rem 0;font-size:.75rem;font-weight:500}.cat-manage details{border:1px solid var(--border-light);border-radius:8px;padding:.5rem}.cat-manager-modal{max-width:480px}.cat-list{flex-direction:column;gap:.3rem;margin-bottom:.8rem;display:flex}.cat-row{background:var(--surface2);border-radius:6px;align-items:center;gap:.4rem;padding:.3rem .5rem;font-size:.8rem;display:flex}.cat-row .cat-color{border-radius:4px;flex-shrink:0;width:14px;height:14px}.cat-row .cat-name{flex:1}.cat-row button{cursor:pointer;color:var(--text3);background:0 0;border:none;padding:.15rem;font-size:.8rem}.cat-row button:hover{color:var(--danger)}.add-cat-form{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.add-cat-form input[type=text]{flex:1;min-width:100px;margin-bottom:0;padding:.35rem .5rem;font-size:.78rem}.add-cat-form input[type=color]{border:1px solid var(--border);cursor:pointer;border-radius:6px;width:36px;height:32px;margin-bottom:0;padding:2px}.color-swatches{flex-wrap:wrap;gap:4px;margin-bottom:.75rem;display:flex}.color-swatch{border:2px solid var(--border);cursor:pointer;border-radius:6px;width:28px;height:28px;padding:0;font-size:.5rem;transition:all .15s}.color-swatch.active{border-color:var(--accent);transform:scale(1.1)}.color-swatch:hover{transform:scale(1.08)}.app-loading{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;color:var(--text3);padding:3rem 1rem}.empty-state p{margin-bottom:.3rem;font-size:.9rem}.tag{border-radius:12px;align-items:center;gap:.25rem;padding:.15rem .5rem;font-size:.7rem;font-weight:500;display:inline-flex}input[type=file]::file-selector-button{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:6px;padding:.3rem .6rem;font-size:.78rem}@media (width<=900px){.calendar{min-width:unset;grid-template-columns:50px repeat(5,1fr)}.cal-time{height:44px;font-size:.6rem}.cal-cell{height:44px}.cal-event{padding:2px 4px;font-size:.55rem}.cal-event-title{font-size:.55rem}.cal-event-time{display:none}.cal-header{font-size:.7rem}.cal-header small{font-size:.6rem}}@media (width<=600px){.header{flex-direction:column;align-items:flex-start}.header-actions{justify-content:flex-start;width:100%}.auth-card{padding:1.5rem}.calendar{grid-template-columns:35px repeat(5,1fr)}.cal-time{height:38px;font-size:.5rem}.cal-cell{height:38px}.cal-event{min-height:18px;padding:1px 3px;font-size:.45rem}.cal-event-title{font-size:.45rem}.cal-header{padding:.35rem .1rem;font-size:.6rem}.cal-header small{display:none}.header h1{font-size:1.1rem}.modal{padding:1rem}.modal .form-row{flex-direction:column;gap:0}}
