*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--bg:linear-gradient(135deg,#ff9a6c,#e63e00);--bg2:#fef3ed;--card:rgba(255,255,255,0.15);--card2:#fff;--text:rgba(255,255,255,0.92);--text2:#444;--text3:#999;--primary:#e63e00;--primary-light:#ff9a6c;--shadow:0 8px 32px rgba(0,0,0,0.2);--radius:20px;--radius-sm:12px;--urgent:#e74c3c;--not-urgent:#27ae60;--important:#2980b9;--not-important:#95a5a6;--learning:#8e44ad}
body{font-family:'Nunito','Noto Sans SC','PingFang SC','Microsoft YaHei UI',sans-serif;font-weight:400;background:var(--bg);color:var(--text);min-height:100vh;padding:0;display:flex;flex-direction:column;align-items:center;overflow-x:hidden;-webkit-font-smoothing:antialiased}
/* Nav */
.nav{display:flex;gap:6px;width:100%;max-width:500px;background:rgba(255,255,255,0.12);backdrop-filter:blur(8px);padding:6px;border-radius:0 0 20px 20px;margin-bottom:12px;animation:slideDown .5s ease-out}
.nav-btn{flex:1;padding:10px 8px;border:none;background:transparent;color:rgba(255,255,255,0.75);font-size:15px;cursor:pointer;border-radius:14px;transition:all .3s;font-weight:500;font-family:inherit}
.nav-btn:hover{background:rgba(255,255,255,0.12);transform:translateY(-1px)}
.nav-btn.active{background:rgba(255,255,255,0.25);color:#fff;box-shadow:0 2px 8px rgba(0,0,0,0.1)}
/* Views */
.view{display:none;width:100%;max-width:480px;padding:0 16px 24px;animation:fadeIn .4s ease-out}
.view.active{display:block}
/* Timer */
.modes{display:flex;gap:8px;justify-content:center;margin-bottom:16px;animation:bounceIn .6s ease-out}
.mode-btn{padding:8px 22px;border:2.5px solid rgba(255,255,255,0.35);border-radius:25px;background:transparent;color:#fff;cursor:pointer;font-size:14px;transition:all .25s;font-weight:500;font-family:inherit}
.mode-btn:hover{background:rgba(255,255,255,0.15);transform:translateY(-2px)}
.mode-btn.active{background:#fff;color:var(--primary);border-color:#fff;box-shadow:0 4px 12px rgba(0,0,0,0.15)}
/* Tomato */
.tomato-wrap{position:relative;width:230px;height:280px;margin:0 auto 8px;cursor:default;animation:bounceIn .8s ease-out}
.tomato-svg{width:100%;height:100%;filter:drop-shadow(0 8px 24px rgba(0,0,0,0.2))}
.tomato-wrap.pulse{animation:tomatoPulse .6s ease-in-out}
.tomato-wrap.complete{animation:tomatoComplete .6s ease-out}
.timer-text{position:absolute;top:41%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;width:100%}
.timer-text .time{font-size:42px;font-weight:600;letter-spacing:2px;font-variant-numeric:tabular-nums;color:#fff;background:rgba(0,0,0,0.18);display:inline-block;padding:4px 18px;border-radius:14px;backdrop-filter:blur(4px);line-height:1.2;text-shadow:0 1px 4px rgba(0,0,0,0.2)}
.timer-text .timer-label{font-size:13px;font-weight:500;margin-top:6px;color:rgba(255,255,255,0.9);background:rgba(0,0,0,0.15);display:inline-block;padding:3px 16px;border-radius:12px;backdrop-filter:blur(4px);letter-spacing:0.5px}
.controls{display:flex;gap:12px;justify-content:center;margin-bottom:12px;animation:bounceIn .9s ease-out}
.ctrl-btn{width:56px;height:56px;border-radius:50%;border:none;background:rgba(255,255,255,0.18);color:#fff;font-size:22px;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px rgba(0,0,0,0.08)}
.ctrl-btn:hover{background:rgba(255,255,255,0.3);transform:translateY(-3px) scale(1.05)}
.ctrl-btn:active{transform:translateY(0) scale(.95)}
.ctrl-btn.primary{background:linear-gradient(135deg,#fff,#f0f0f0);color:var(--primary);width:72px;height:72px;font-size:30px;box-shadow:0 6px 20px rgba(0,0,0,0.15)}
.ctrl-btn.primary:hover{background:linear-gradient(135deg,#fff,#fff);transform:translateY(-3px) scale(1.05)}
.current-task{text-align:center;font-size:13px;opacity:.85;margin-bottom:10px;padding:8px 16px;background:rgba(255,255,255,0.1);border-radius:var(--radius-sm);backdrop-filter:blur(4px);animation:fadeIn 1s ease-out}
.settings{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;animation:fadeIn 1.2s ease-out}
.setting{background:rgba(255,255,255,0.08);padding:6px 12px 10px;border-radius:var(--radius-sm);backdrop-filter:blur(4px)}
.setting label{font-size:11px;opacity:.8;display:block;margin-bottom:2px;font-weight:500}
.setting input{width:60px;padding:6px;border-radius:10px;border:2px solid rgba(255,255,255,0.2);text-align:center;font-size:14px;background:rgba(255,255,255,0.15);color:#fff;font-weight:500;font-family:inherit}
.setting input:focus{outline:none;border-color:#fff}
/* Sound */
.sound-section{margin-top:12px;text-align:center;animation:fadeIn 1.4s ease-out}
.sound-label{font-size:13px;font-weight:500;margin-bottom:6px;opacity:.85}
.sound-btns{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;margin-bottom:6px}
.sound-btn{padding:6px 14px;border:2px solid rgba(255,255,255,0.25);border-radius:16px;background:transparent;color:#fff;font-size:12px;cursor:pointer;font-family:inherit;font-weight:500;transition:all .2s}
.sound-btn:hover{background:rgba(255,255,255,0.12);transform:translateY(-1px)}
.sound-btn.active{background:rgba(255,255,255,0.25);border-color:#fff;box-shadow:0 2px 8px rgba(0,0,0,0.1)}
.sound-volume{display:flex;align-items:center;gap:6px;justify-content:center}
.sound-volume span{font-size:11px;opacity:.6}
.sound-volume input[type=range]{width:100px;height:4px;-webkit-appearance:none;appearance:none;background:rgba(255,255,255,0.2);border-radius:2px;outline:none}
.sound-volume input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer;border:none}
.sound-volume input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer;border:none}
/* Tasks */
.tasks-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;animation:bounceIn .5s ease-out}
.tasks-header h2{font-size:18px;font-weight:500}
.btn-sm{padding:8px 18px;border:none;border-radius:14px;cursor:pointer;font-size:13px;font-weight:500;background:rgba(255,255,255,0.2);color:#fff;transition:all .25s;font-family:inherit}
.btn-sm:hover{background:rgba(255,255,255,0.35);transform:translateY(-2px)}
.btn-sm:active{transform:translateY(0)}
.btn-sm.primary{background:#fff;color:var(--primary);box-shadow:0 4px 12px rgba(0,0,0,0.1)}
.quadrant-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;animation:fadeIn .6s ease-out}
.quadrant{background:rgba(255,255,255,0.1);border-radius:var(--radius-sm);padding:10px;min-height:110px;backdrop-filter:blur(4px);transition:all .2s}
.quadrant:hover{background:rgba(255,255,255,0.15);transform:translateY(-1px)}
.quadrant-tag{display:inline-block;font-size:10px;padding:2px 10px;border-radius:12px;margin-right:4px;margin-bottom:6px;font-weight:500}
.quadrant-tag.urgent{background:var(--urgent);color:#fff}
.quadrant-tag.not-urgent{background:var(--not-urgent);color:#fff}
.quadrant-tag.important{background:var(--important);color:#fff}
.quadrant-tag.not-important{background:var(--not-important);color:#fff}
.quadrant-tasks{display:flex;flex-direction:column;gap:4px}
.task-chip{background:rgba(255,255,255,0.18);border-radius:10px;padding:6px 10px;font-size:12px;display:flex;align-items:center;justify-content:space-between;gap:4px;cursor:pointer;transition:all .2s;animation:slideIn .3s ease-out}
.task-chip:hover{background:rgba(255,255,255,0.3);transform:translateX(3px)}
.task-chip .task-name{flex:1;word-break:break-all}
.task-chip .task-type{font-size:10px;padding:1px 8px;border-radius:10px;background:var(--learning);color:#fff;flex-shrink:0}
.task-chip .task-done-btn{background:none;border:none;color:rgba(255,255,255,0.5);cursor:pointer;font-size:16px;padding:0 4px;flex-shrink:0;transition:all .2s}
.task-chip .task-done-btn:hover{color:#2ecc71;transform:scale(1.2)}
.task-chip.done{opacity:.4;text-decoration:line-through}
/* Modal */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:100;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(4px)}
.modal-overlay.active{display:flex}
.modal-overlay.active .modal{animation:bounceIn .3s ease-out}
.modal{background:#fff;color:var(--text2);border-radius:20px;padding:24px;width:100%;max-width:360px;box-shadow:0 16px 48px rgba(0,0,0,0.2)}
.modal h3{margin-bottom:16px;font-size:18px;font-weight:700}
.modal input[type=text],.modal select{width:100%;padding:12px 14px;border:2px solid #eee;border-radius:12px;font-size:14px;margin-bottom:12px;font-family:inherit;transition:border-color .2s}
.modal input[type=text]:focus,.modal select:focus{outline:none;border-color:var(--primary)}
.modal-row{margin-bottom:12px;font-size:14px}
.modal-row label{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:600}
.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}
.modal .btn-sm{color:#333}
.modal .btn-sm.primary{color:#fff;background:var(--primary)}
/* PWA Install Banner */
.pwa-banner{display:none;position:fixed;bottom:0;left:0;right:0;z-index:200;background:rgba(255,255,255,0.95);backdrop-filter:blur(12px);padding:16px 20px 20px;border-radius:20px 20px 0 0;box-shadow:0 -4px 24px rgba(0,0,0,0.15);animation:slideUp .4s ease-out;color:#333;max-width:500px;margin:0 auto}
@keyframes slideUp{0%{transform:translateY(100%)}100%{transform:translateY(0)}}
.pwa-banner-content{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.pwa-icon{font-size:36px;flex-shrink:0;width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:#ee5a24;border-radius:12px}
.pwa-text{flex:1;min-width:0}
.pwa-title{font-size:15px;font-weight:600;color:#222}
.pwa-desc{font-size:12px;color:#666;margin-top:2px}
.pwa-close{background:none;border:none;font-size:18px;color:#999;cursor:pointer;padding:4px;flex-shrink:0;line-height:1}
.pwa-close:hover{color:#333}
.pwa-install-btn{display:block;width:100%;padding:12px;border:none;border-radius:14px;background:linear-gradient(135deg,#ee5a24,#ff8a5c);color:#fff;font-size:15px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .2s;text-align:center}
.pwa-install-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(238,90,36,0.3)}
.pwa-install-btn:active{transform:translateY(0)}
/* Progress */
.big-tomato-area{text-align:center;margin-bottom:10px;animation:bounceIn .6s ease-out}
.big-tomato{font-size:72px;transition:all .5s;cursor:default;display:inline-block}
.big-tomato:hover{animation:wobble .5s ease-in-out}
.big-tomato.earned{animation:pop .6s ease-out}
.big-tomato-label{font-size:14px;opacity:.75;font-weight:500}
.daily-tomatoes{display:flex;justify-content:center;gap:6px;margin-bottom:14px;flex-wrap:wrap}
.small-tomato{font-size:26px;opacity:.35;transition:all .4s;cursor:default}
.small-tomato:hover{transform:scale(1.2)}
.small-tomato.earned{opacity:1;animation:popIn .4s ease-out}
.progress-bar-wrap{background:rgba(255,255,255,0.12);border-radius:14px;height:26px;overflow:hidden;margin-bottom:16px;box-shadow:inset 0 2px 4px rgba(0,0,0,0.1)}
.progress-bar{height:100%;background:linear-gradient(90deg,var(--primary),#ff7a5e,#ffbb6e);border-radius:14px;width:0%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:500;transition:width .6s cubic-bezier(.34,1.56,.64,1);min-width:40px;color:#fff}
.stats-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}
.stat-card{background:rgba(255,255,255,0.1);border-radius:var(--radius-sm);padding:12px;text-align:center;backdrop-filter:blur(4px);transition:all .2s;animation:fadeIn .5s ease-out}
.stat-card:hover{background:rgba(255,255,255,0.18);transform:translateY(-2px)}
.stat-num{font-size:28px;font-weight:500}
.stat-label{font-size:11px;opacity:.7;margin-top:2px;font-weight:400}
.history-section h3{font-size:15px;margin-bottom:8px;font-weight:500}
.week-chart{display:flex;gap:6px;justify-content:center;animation:fadeIn .8s ease-out}
.week-bar{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1}
.week-bar .bar{width:100%;background:linear-gradient(to top,var(--primary-light),#ffcc44);border-radius:8px 8px 0 0;min-height:4px;transition:height .6s cubic-bezier(.34,1.56,.64,1);cursor:pointer}
.week-bar .bar:hover{opacity:.8}
.week-bar .bar-label{font-size:10px;opacity:.6;font-weight:600}
/* ====== Floating decorations ====== */
.floating-tomatoes{position:fixed;inset:0;pointer-events:none;z-index:-1;overflow:hidden}
.floating-tomato{position:absolute;font-size:20px;opacity:.15;animation:floatAround linear infinite}
.floating-tomato:nth-child(1){left:5%;top:10%;animation-duration:12s;font-size:24px}
.floating-tomato:nth-child(2){left:80%;top:20%;animation-duration:15s;font-size:18px;animation-delay:2s}
.floating-tomato:nth-child(3){left:15%;top:60%;animation-duration:10s;font-size:22px;animation-delay:4s}
.floating-tomato:nth-child(4){left:85%;top:70%;animation-duration:14s;font-size:16px;animation-delay:1s}
.floating-tomato:nth-child(5){left:50%;top:5%;animation-duration:11s;font-size:20px;animation-delay:3s}
.floating-tomato:nth-child(6){left:90%;top:50%;animation-duration:13s;font-size:15px;animation-delay:5s}
/* ====== Confetti ====== */
.confetti-container{position:fixed;inset:0;pointer-events:none;z-index:50;overflow:hidden}
.confetti-piece{position:absolute;width:10px;height:10px;opacity:.8;animation:confettiFall linear forwards}
/* ====== Animations ====== */
@keyframes bounceIn{0%{opacity:0;transform:scale(.5)}60%{transform:scale(1.05)}100%{opacity:1;transform:scale(1)}}
@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}
@keyframes slideDown{0%{opacity:0;transform:translateY(-20px)}100%{opacity:1;transform:translateY(0)}}
@keyframes slideIn{0%{opacity:0;transform:translateX(-10px)}100%{opacity:1;transform:translateX(0)}}
@keyframes popIn{0%{transform:scale(0)}60%{transform:scale(1.3)}100%{transform:scale(1)}}
@keyframes pop{0%{transform:scale(1)}40%{transform:scale(1.4)}60%{transform:scale(.9)}100%{transform:scale(1)}}
@keyframes wobble{0%,100%{transform:rotate(0)}25%{transform:rotate(-8deg)}50%{transform:rotate(8deg)}75%{transform:rotate(-4deg)}}
@keyframes tomatoPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.03)}}
@keyframes tomatoComplete{0%{transform:scale(1)}30%{transform:scale(1.2)}50%{transform:scale(.9)}70%{transform:scale(1.05)}100%{transform:scale(1)}}
@keyframes floatAround{0%{transform:translateY(0) rotate(0)}25%{transform:translateY(-20px) rotate(90deg)}50%{transform:translateY(0) rotate(180deg)}75%{transform:translateY(-15px) rotate(270deg)}100%{transform:translateY(0) rotate(360deg)}}
@keyframes confettiFall{0%{transform:translateY(-20px) rotate(0);opacity:1}100%{transform:translateY(100vh) rotate(720deg);opacity:0}}
@keyframes blushGlow{0%,100%{opacity:.4}50%{opacity:.6}}
@keyframes eyeBlink{0%,100%{opacity:1}95%{opacity:1}96%{opacity:0}97%{opacity:1}}
.quadrant .task-chip:nth-child(1){animation-delay:0s}
.quadrant .task-chip:nth-child(2){animation-delay:.05s}
.quadrant .task-chip:nth-child(3){animation-delay:.1s}
