:root{--bg: #ffffff;--bg-subtle: #f4f4f5;--surface: #ffffff;--surface-elevated: #ffffff;--surface-hover: #fafafa;--text: #1a1918;--text-secondary: #6b6966;--text-muted: #a8a29e;--text-placeholder: #c4c1ba;--border: #e8e6e1;--border-subtle: #f0eeea;--border-focus: #d4d1ca;--primary: #4f46e5;--primary-light: #6366f1;--primary-dark: #4338ca;--primary-faint: #eef2ff;--primary-faint-hover: #e5e7ff;--success: #16a34a;--success-light: #22c55e;--success-faint: #f0fdf4;--success-faint-hover: #dcfce7;--warning: #d97706;--warning-faint: #fffbeb;--danger: #dc2626;--danger-faint: #fef2f2;--danger-hover: #b91c1c;--project-red: #e11d48;--project-green: #16a34a;--project-blue: #2563eb;--project-yellow: #ca8a04;--project-purple: #9333ea;--project-teal: #0d9488;--font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--shadow-xs: 0 1px 2px rgba(26, 25, 24, .04);--shadow-sm: 0 1px 3px rgba(26, 25, 24, .06), 0 1px 2px rgba(26, 25, 24, .04);--shadow-md: 0 4px 6px -1px rgba(26, 25, 24, .06), 0 2px 4px -1px rgba(26, 25, 24, .04);--shadow-lg: 0 10px 15px -3px rgba(26, 25, 24, .08), 0 4px 6px -2px rgba(26, 25, 24, .04);--shadow-xl: 0 20px 25px -5px rgba(26, 25, 24, .1), 0 10px 10px -5px rgba(26, 25, 24, .04);--shadow-inner: inset 0 1px 2px rgba(26, 25, 24, .04);--radius-xs: 4px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-2xl: 28px;--radius-full: 9999px;--sidebar-w: 272px;--detail-panel-w: 420px;--app-footer-h: 48px;--fab-size: 56px;--fab-offset: 24px;--mobile-tab-h: 56px;--content-bottom-safe: calc(var(--fab-offset) + var(--fab-size) + 16px + env(safe-area-inset-bottom, 0));--ease-out-expo: cubic-bezier(.16, 1, .3, 1);--ease-out-back: cubic-bezier(.34, 1.56, .64, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--duration-fast: .15s;--duration-normal: .25s;--duration-slow: .4s}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{font-size:16px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-body);font-size:15px;line-height:1.6;color:var(--text);background:var(--bg);min-height:100vh}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:600;line-height:1.3;letter-spacing:-.02em}::selection{background:var(--primary-faint);color:var(--primary-dark)}html{scroll-behavior:smooth}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-full);border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--text-placeholder);background-clip:padding-box}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}a{color:var(--primary);text-decoration:none;transition:color var(--duration-fast) var(--ease-out-expo)}a:hover{color:var(--primary-dark)}button{font-family:inherit;cursor:pointer;border:none;background:none}input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}@keyframes fadeInUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInScale{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-stagger>*{animation:fadeInUp var(--duration-slow) var(--ease-out-expo) backwards}.animate-stagger>*:nth-child(1){animation-delay:0ms}.animate-stagger>*:nth-child(2){animation-delay:50ms}.animate-stagger>*:nth-child(3){animation-delay:.1s}.animate-stagger>*:nth-child(4){animation-delay:.15s}.animate-stagger>*:nth-child(5){animation-delay:.2s}.animate-stagger>*:nth-child(6){animation-delay:.25s}.animate-stagger>*:nth-child(7){animation-delay:.3s}.animate-stagger>*:nth-child(8){animation-delay:.35s}.animate-stagger>*:nth-child(9){animation-delay:.4s}.animate-stagger>*:nth-child(10){animation-delay:.45s}.app-layout{display:flex;min-height:100vh}.app-main{flex:1;margin-left:var(--sidebar-w);min-width:0;transition:margin-left var(--duration-slow) var(--ease-out-expo);background:var(--bg)}.app-main.full{margin-left:0}.my-day-header{padding:36px 32px 24px;background:linear-gradient(180deg,var(--surface) 0%,transparent 100%);border-bottom:1px solid var(--border-subtle);animation:fadeIn var(--duration-slow) var(--ease-out-expo)}.my-day-title{font-family:var(--font-display);font-size:32px;font-weight:700;color:var(--text);letter-spacing:-.03em;margin-bottom:6px;position:relative}.my-day-title:after{content:"";position:absolute;bottom:-4px;left:0;width:48px;height:3px;background:linear-gradient(90deg,var(--primary),var(--primary-light));border-radius:var(--radius-full)}.my-day-stats{display:flex;gap:24px;flex-wrap:wrap;margin-top:20px}.my-day-stat{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-secondary);transition:color var(--duration-fast)}.my-day-stat:hover{color:var(--text)}.my-day-stat-icon{width:16px;height:16px;display:flex;align-items:center;justify-content:center;opacity:.8}.my-day-stat-icon svg{width:100%;height:100%;stroke:currentColor}.my-day-stat-value{font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--text);transition:transform var(--duration-fast) var(--ease-out-back)}.my-day-stat:hover .my-day-stat-value{transform:scale(1.1)}.my-day-stat-value.important{color:var(--primary)}.my-day-stat-value.planned{color:var(--project-blue)}.main-content{padding:24px 32px;padding-bottom:var(--content-bottom-safe);max-width:900px;margin:0 auto;animation:fadeInUp var(--duration-slow) var(--ease-out-expo) .1s backwards}.task-search-bar{margin-bottom:24px}.task-search-input{width:100%;padding:14px 20px 14px 48px;border:1.5px solid var(--border);border-radius:var(--radius-xl);font-family:var(--font-body);font-size:15px;background:var(--surface);box-sizing:border-box;transition:all var(--duration-normal) var(--ease-out-expo);box-shadow:var(--shadow-sm)}.task-search-input::placeholder{color:var(--text-placeholder)}.task-search-input:focus{outline:none;border-color:var(--primary);box-shadow:var(--shadow-md),0 0 0 4px var(--primary-faint);transform:translateY(-1px)}.search-history-container{display:flex;flex-wrap:wrap;gap:8px;padding:0 4px;margin-top:10px}.search-history-chip{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-full);font-size:12px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration-fast)}.search-history-chip:hover{background:var(--border);color:var(--text)}.search-history-chip .chip-icon{opacity:.6}.search-history-chip .chip-remove{background:none;border:none;cursor:pointer;color:var(--text-muted);padding:0;margin-left:2px;font-size:14px;line-height:1}.search-history-chip .chip-remove:hover{color:var(--danger)}.task-bucket{margin-bottom:32px;animation:fadeInUp var(--duration-slow) var(--ease-out-expo) backwards}.task-bucket:nth-child(1){animation-delay:.15s}.task-bucket:nth-child(2){animation-delay:.2s}.task-bucket:nth-child(3){animation-delay:.25s}.task-bucket:nth-child(4){animation-delay:.3s}.task-bucket:nth-child(5){animation-delay:.35s}.task-bucket-title{font-family:var(--font-display);font-size:12px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:14px;padding-left:4px;display:flex;align-items:center;gap:8px}.task-bucket-title:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--border) 0%,transparent 100%)}.detail-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.my-day-header-row{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:8px}.my-day-date{font-size:14px;color:var(--text-muted);font-weight:500;margin-top:4px}.my-day-progress-ring{width:64px;height:64px;flex-shrink:0;position:relative}.progress-ring-svg{width:100%;height:100%;transform:rotate(-90deg)}.progress-ring-bg{fill:none;stroke:var(--border);stroke-width:2.5}.progress-ring-fill{fill:none;stroke:var(--primary);stroke-width:2.5;stroke-linecap:round;transition:stroke-dasharray .6s cubic-bezier(.4,0,.2,1)}.progress-ring-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-family:var(--font-display);font-size:11px;font-weight:700;color:var(--primary)}.my-day-progress-bar{margin-top:16px;animation:fadeInUp var(--duration-slow) var(--ease-out-expo) .2s backwards}.progress-bar-track{height:6px;background:var(--border);border-radius:var(--radius-full);overflow:hidden}.progress-bar-fill{height:100%;background:linear-gradient(90deg,var(--primary),var(--primary-light));border-radius:var(--radius-full);transition:width .6s cubic-bezier(.4,0,.2,1);min-width:0}.progress-bar-label{display:flex;justify-content:flex-end;margin-top:8px;font-size:13px;color:var(--text-muted);font-weight:500}.progress-bar-label span{color:var(--text);font-weight:700}.my-day-suggestions{margin-top:32px;animation:fadeInUp var(--duration-slow) var(--ease-out-expo) .3s backwards}.my-day-suggestions-title{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:13px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:16px}.my-day-suggestions-title svg{width:16px;height:16px;stroke:var(--warning)}.suggestion-item{display:flex;align-items:center;gap:12px;padding:14px 16px;background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-xl);margin-bottom:10px;transition:all var(--duration-normal) var(--ease-out-expo);cursor:pointer;animation:fadeInUp var(--duration-slow) var(--ease-out-expo) backwards}.suggestion-item:hover{border-color:var(--primary);box-shadow:var(--shadow-md);transform:translateY(-2px)}.suggestion-item-icon{width:32px;height:32px;border-radius:var(--radius-lg);background:var(--warning-faint);display:flex;align-items:center;justify-content:center;flex-shrink:0}.suggestion-item-icon svg{width:18px;height:18px;stroke:var(--warning)}.suggestion-item-content{flex:1;min-width:0}.suggestion-item-title{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.suggestion-item-meta{font-size:12px;color:var(--text-muted);margin-top:2px}.suggestion-add-btn{padding:8px 16px;background:var(--warning);color:#fff;border:none;border-radius:var(--radius-full);font-size:13px;font-weight:600;cursor:pointer;transition:all var(--duration-fast);white-space:nowrap;box-shadow:0 2px 8px #d977064d}.suggestion-add-btn:hover{background:var(--warning-dark, #b45309);transform:scale(1.05)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,var(--border) 25%,var(--bg) 50%,var(--border) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-lg)}.skeleton-card{display:flex;align-items:center;gap:12px;padding:14px 16px;margin-bottom:10px}.skeleton-checkbox{width:22px;height:22px;border-radius:50%;flex-shrink:0}.skeleton-lines{flex:1;display:flex;flex-direction:column;gap:8px}.skeleton-line{height:14px;border-radius:var(--radius-sm)}.skeleton-line.title{width:70%;height:16px}.skeleton-line.sub{width:40%}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.sidebar{width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:110;transition:transform var(--duration-slow) var(--ease-out-expo),box-shadow var(--duration-normal) var(--ease-out-expo);box-shadow:var(--shadow-lg)}.sidebar.hidden{transform:translate(-100%)}.sidebar:after{content:"";position:absolute;bottom:0;left:0;right:0;height:120px;background:linear-gradient(180deg,transparent 0%,rgba(0,0,0,.02) 100%);pointer-events:none}.sidebar-header{padding:20px 20px 16px;border-bottom:1px solid var(--border-subtle);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.app-logo{font-family:var(--font-display);font-size:20px;font-weight:700;color:var(--text);letter-spacing:-.02em;display:flex;align-items:center;gap:10px}.app-logo:before{content:"";width:28px;height:28px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-light) 100%);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);position:relative}.app-logo:before{content:"\2713";display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:700}.offline-badge{display:none;font-size:11px;font-weight:600;padding:5px 10px;background:var(--warning-faint);color:var(--warning);border-radius:var(--radius-full);border:1px solid rgba(217,119,6,.15);letter-spacing:.02em}.offline-badge.show{display:inline-flex;align-items:center;gap:5px;animation:fadeInScale var(--duration-normal) var(--ease-out-back)}/* review #17（spec §10 风险 mitigation）：sidebar-meta + last-sync-ago */.sidebar-meta{padding:8px 20px 4px;font-size:11px;color:var(--text-muted);display:flex;justify-content:flex-end}.last-sync-ago{font-variant-numeric:tabular-nums;opacity:.7;transition:opacity var(--duration-fast)}.last-sync-ago:hover{opacity:1}.smart-list{padding:12px;border-bottom:1px solid var(--border-subtle)}.smart-tab{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--duration-normal) var(--ease-out-expo);user-select:none;position:relative;color:var(--text-secondary);font-weight:500;margin-bottom:2px}.smart-tab:hover{background:var(--bg);color:var(--text);transform:translate(2px)}.smart-tab.active{background:var(--primary-faint);color:var(--primary-dark);font-weight:600;box-shadow:var(--shadow-inner)}.smart-tab.active:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:4px;height:24px;background:linear-gradient(180deg,var(--primary) 0%,var(--primary-light) 100%);border-radius:0 var(--radius-full) var(--radius-full) 0}.smart-tab-icon{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:transform var(--duration-normal) var(--ease-out-back)}.smart-tab-icon svg{width:100%;height:100%;stroke:currentColor}.smart-tab:hover .smart-tab-icon{transform:scale(1.15)}.smart-tab-label{flex:1;font-size:14px}.smart-tab-count{font-size:12px;font-weight:700;color:var(--text-muted);background:var(--bg);padding:3px 10px;border-radius:var(--radius-full);transition:all var(--duration-normal) var(--ease-out-expo)}.smart-tab:hover .smart-tab-count{background:var(--border)}.smart-tab.active .smart-tab-count{background:var(--primary);color:#fff;box-shadow:var(--shadow-sm)}.smart-tab-myday .smart-tab-icon svg{stroke:var(--warning)}.smart-tab-myday.active{background:var(--warning-faint);color:var(--warning-dark, #b45309)}.smart-tab-myday.active:before{background:linear-gradient(180deg,var(--warning) 0%,#f59e0b 100%)}.smart-tab-myday.active .smart-tab-icon svg{stroke:var(--warning)}.project-section{flex:1;overflow-y:auto;padding:12px 12px 80px}.project-section-header{font-family:var(--font-display);font-size:11px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;padding:8px 14px 6px;margin-bottom:4px}.project-item{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--duration-normal) var(--ease-out-expo);user-select:none;position:relative;margin-bottom:2px}.project-item:hover{background:var(--bg);transform:translate(2px)}.project-item.active{background:var(--primary-faint);box-shadow:var(--shadow-inner)}.project-item.active:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:20px;background:var(--primary);border-radius:0 var(--radius-full) var(--radius-full) 0}.project-item.active .project-name{color:var(--primary-dark);font-weight:600}.project-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0;box-shadow:0 0 0 2.5px var(--surface),inset 0 1px 2px #0000001a;transition:transform var(--duration-normal) var(--ease-out-back)}.project-icon{font-size:14px;flex-shrink:0;line-height:1}.project-item:hover .project-dot{transform:scale(1.2)}.project-name{flex:1;font-size:14px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-count{font-size:11px;font-weight:700;color:var(--text-muted);background:var(--bg);padding:3px 10px;border-radius:var(--radius-full);transition:all var(--duration-normal)}.project-item:hover .project-count{background:var(--border)}.project-sort-handle{display:flex;flex-direction:column;gap:2px;opacity:0;transition:opacity var(--duration-fast) var(--ease-out);flex-shrink:0}.project-item:hover .project-sort-handle,.project-item.active .project-sort-handle{opacity:1}.project-sort-btn{width:18px;height:14px;display:flex;align-items:center;justify-content:center;font-size:9px;line-height:1;padding:0;border:none;background:transparent;color:var(--text-muted);cursor:pointer;border-radius:4px;transition:all var(--duration-fast) var(--ease-out)}.project-sort-btn:hover:not(:disabled){background:var(--primary-faint);color:var(--primary)}.project-sort-btn:disabled{opacity:.3;cursor:not-allowed}.sidebar-footer{padding:16px;border-top:1px solid var(--border-subtle);background:linear-gradient(180deg,var(--surface-elevated) 0%,var(--surface) 100%);position:relative;z-index:1}.btn-new-project{width:100%;padding:12px 16px;border:1.5px dashed var(--border);border-radius:var(--radius-lg);background:transparent;cursor:pointer;font-family:var(--font-body);font-size:13px;font-weight:600;color:var(--text-secondary);transition:all var(--duration-normal) var(--ease-out-expo);display:flex;align-items:center;justify-content:center;gap:8px}.btn-new-project svg{width:16px;height:16px;transition:transform var(--duration-normal) var(--ease-out-back)}.btn-new-project:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-faint);transform:translateY(-1px);box-shadow:var(--shadow-sm)}.btn-new-project:hover svg{transform:rotate(90deg)}.sidebar-overlay{display:none;position:fixed;inset:0;background:#1a191859;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:105;animation:fadeIn var(--duration-normal) var(--ease-out-expo)}.template-section{padding:12px 12px 80px}.sidebar-section-header{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-display);font-size:11px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;padding:8px 14px 6px;margin-bottom:4px;cursor:pointer}.sidebar-section-toggle{transition:transform var(--duration-normal) var(--ease-out)}.template-tab{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;border-radius:var(--radius-md);transition:background var(--duration-fast)}.template-tab:hover{background:var(--bg)}.template-edit-btn{margin-left:auto;background:none;border:none;cursor:pointer;color:var(--text-muted);padding:4px;border-radius:var(--radius-sm);display:flex;align-items:center;opacity:0;transition:opacity var(--duration-fast),color var(--duration-fast)}.template-tab:hover .template-edit-btn{opacity:1}.template-edit-btn:hover{color:var(--text)}.task-list{display:flex;flex-direction:column;gap:8px}.task-card{background:var(--surface);border-radius:var(--radius-lg);padding:14px 16px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:8px;transition:all var(--duration-normal) var(--ease-out-expo);border:1px solid var(--border-subtle);cursor:pointer;position:relative;overflow:hidden}.task-card-main{display:flex;align-items:center;gap:12px;min-width:0}.task-card:before{content:"";position:absolute;top:0;left:0;width:3px;height:100%;background:var(--border);transition:background var(--duration-normal) var(--ease-out-expo)}.task-card:hover{background:var(--surface-hover);border-color:var(--border);box-shadow:var(--shadow-md);transform:translateY(-2px)}.task-card:hover:before{background:var(--primary)}.task-card.completed{opacity:.65}.task-card.completed:hover{opacity:.85}.task-card.overdue .task-due{color:var(--danger);font-weight:600}.task-card.overdue:before{background:var(--danger)!important}.task-checkbox{width:22px;height:22px;min-width:22px;border-radius:50%;border:2px solid var(--border-focus);cursor:pointer;flex-shrink:0;transition:all var(--duration-normal) var(--ease-out-back);display:flex;align-items:center;justify-content:center;background:var(--surface);position:relative;order:0}.task-checkbox:hover{border-color:var(--primary);background:var(--primary-faint);transform:scale(1.1);box-shadow:0 0 0 4px var(--primary-faint)}.task-card.completed .task-checkbox{background:var(--primary);border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-faint)}.task-card.completed .task-checkbox:after{content:"\2713";color:#fff;font-size:12px;font-weight:700;animation:fadeInScale var(--duration-normal) var(--ease-out-back)}.task-card.completed .task-checkbox svg{color:#fff;width:12px;height:12px}.sync-badge{flex-shrink:0;font-size:14px;opacity:.7;transition:opacity var(--duration-fast)}.sync-badge:hover{opacity:1}.task-title{flex:1;min-width:0;font-size:15px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color var(--duration-fast)}.task-card:hover .task-title{color:var(--text)}.task-card.completed .task-title{text-decoration:line-through;color:var(--text-muted)}.task-star{font-size:16px;flex-shrink:0;transition:transform var(--duration-normal) var(--ease-out-back)}.task-star:hover{transform:scale(1.3) rotate(15deg)}.task-repeat{font-size:14px;flex-shrink:0}.task-subtask-count{font-size:12px;color:var(--text-secondary);background:var(--bg-tertiary);padding:2px 8px;border-radius:10px;flex-shrink:0}.task-due{font-size:12px;color:var(--text-secondary);display:flex;align-items:center;gap:5px;flex-shrink:0;white-space:nowrap;padding:4px 10px;background:var(--bg);border-radius:var(--radius-full);transition:all var(--duration-normal) var(--ease-out-expo)}.task-due svg{width:13px;height:13px;opacity:.7}.task-card:hover .task-due{background:var(--border)}.task-subtask-count{cursor:pointer;user-select:none}.task-subtask-count.expanded{background:var(--primary);color:#fff}.inline-subtasks{width:100%;margin-top:12px;padding-top:12px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:8px}.inline-subtask-item{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--bg);border-radius:var(--radius);cursor:pointer;transition:background var(--duration-fast) var(--ease-out)}.inline-subtask-item:hover{background:var(--bg-tertiary)}.inline-subtask-item.sub-done{opacity:.5}.inline-subtask-item.sub-done .inline-subtask-title{text-decoration:line-through}.inline-subtask-check{width:18px;height:18px;border-radius:50%;border:2px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--duration-fast) var(--ease-out)}.inline-subtask-item.sub-done .inline-subtask-check{background:var(--primary);border-color:var(--primary);color:#fff}.inline-subtask-check svg{width:12px;height:12px}.inline-subtask-title{font-size:14px;color:var(--text)}.empty-state{text-align:center;padding:80px 32px;animation:fadeInUp var(--duration-slow) var(--ease-out-expo)}.empty-icon{margin-bottom:24px;display:flex;justify-content:center}.empty-icon svg{width:72px;height:72px;color:var(--text-placeholder);opacity:.5}.empty-message{font-family:var(--font-display);font-size:18px;font-weight:600;color:var(--text-secondary);margin-bottom:10px}.empty-hint{font-size:14px;color:var(--text-muted);margin-bottom:24px}.empty-action{color:var(--primary);cursor:pointer;font-weight:600;font-size:14px;display:inline-flex;align-items:center;gap:6px;padding:10px 20px;background:var(--primary-faint);border-radius:var(--radius-full);transition:all var(--duration-normal) var(--ease-out-expo)}.empty-action:hover{background:var(--primary);color:#fff;transform:translateY(-2px);box-shadow:var(--shadow-md)}mark.search-highlight{background:var(--warning, #fef08a);color:var(--text, #1c1917);border-radius:2px;padding:0 2px}.detail-overlay{display:none;position:fixed;inset:0;background:#1a191859;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);z-index:200;opacity:0;transition:opacity var(--duration-normal) var(--ease-out-expo)}.detail-overlay.show{opacity:1}.detail-panel{position:fixed;top:0;right:0;bottom:0;width:var(--detail-panel-w);max-width:100vw;background:var(--surface);box-shadow:var(--shadow-xl);z-index:210;transform:translate(100%);transition:transform var(--duration-slow) var(--ease-out-expo);display:flex;flex-direction:column;overflow:hidden}.detail-panel.show{transform:translate(0)}.detail-header{padding:20px 24px;border-bottom:1px solid var(--border-subtle);display:flex;align-items:center;justify-content:space-between;background:linear-gradient(180deg,var(--surface) 0%,var(--bg) 100%)}.detail-close{background:none;border:none;cursor:pointer;color:var(--text-muted);padding:10px;border-radius:var(--radius-md);transition:all var(--duration-normal) var(--ease-out-expo);display:flex;align-items:center;justify-content:center}.detail-close:hover{background:var(--bg);color:var(--text);transform:rotate(90deg)}.detail-close svg{width:20px;height:20px}.detail-body{flex:1;overflow-y:auto;padding:24px}.detail-title{font-family:var(--font-display);font-size:22px;font-weight:700;color:var(--text);margin-bottom:24px;line-height:1.35;letter-spacing:-.02em}.detail-field{margin-bottom:24px}.detail-label{font-family:var(--font-display);font-size:11px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;margin-bottom:10px}.detail-value{font-size:14px;color:var(--text);line-height:1.6}.detail-star-btn{background:none;border:none;cursor:pointer;font-size:26px;padding:6px;transition:all var(--duration-normal) var(--ease-out-back);display:inline-block}.detail-star-btn:hover{transform:scale(1.25) rotate(15deg)}.detail-star-btn.active{color:var(--warning);animation:starPop var(--duration-normal) var(--ease-out-back)}@keyframes starPop{0%{transform:scale(1)}50%{transform:scale(1.4) rotate(20deg)}to{transform:scale(1) rotate(0)}}.detail-input{width:100%;padding:13px 16px;border:1.5px solid var(--border);border-radius:var(--radius-lg);font-family:var(--font-body);font-size:15px;transition:all var(--duration-normal) var(--ease-out-expo);background:var(--surface);color:var(--text);box-shadow:var(--shadow-inner)}.detail-input:focus{outline:none;border-color:var(--primary);box-shadow:var(--shadow-sm),0 0 0 4px var(--primary-faint);transform:translateY(-1px)}.detail-textarea{width:100%;padding:13px 16px;border:1.5px solid var(--border);border-radius:var(--radius-lg);font-family:var(--font-body);font-size:15px;resize:vertical;min-height:100px;transition:all var(--duration-normal) var(--ease-out-expo);background:var(--surface);color:var(--text);box-shadow:var(--shadow-inner);line-height:1.6}.detail-textarea:focus{outline:none;border-color:var(--primary);box-shadow:var(--shadow-sm),0 0 0 4px var(--primary-faint);transform:translateY(-1px)}.detail-subtasks{margin-top:28px;padding-top:24px;border-top:1px solid var(--border-subtle)}.detail-subtask-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.detail-subtask-title{font-family:var(--font-display);font-size:13px;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}.detail-subtask-item{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--border-subtle);transition:all var(--duration-normal)}.detail-subtask-item:last-child{border-bottom:none}.detail-subtask-item:hover{padding-left:8px}.detail-subtask-check{width:22px;height:22px;border-radius:var(--radius-sm);border:2px solid var(--border-focus);cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all var(--duration-normal) var(--ease-out-back);background:var(--surface)}.detail-subtask-check:hover{border-color:var(--success);transform:scale(1.1);background:var(--success-faint)}.detail-subtask-item.done .detail-subtask-check{background:var(--success);border-color:var(--success);box-shadow:0 0 0 3px var(--success-faint)}.detail-subtask-item.done .detail-subtask-check svg{color:#fff}.detail-subtask-title{flex:1;font-size:14px;color:var(--text);transition:all var(--duration-fast)}.detail-subtask-item.done .detail-subtask-title{text-decoration:line-through;color:var(--text-muted)}.detail-subtask-add{display:flex;gap:10px;margin-top:16px}.detail-subtask-add input{flex:1;padding:12px 16px;border:1.5px solid var(--border);border-radius:var(--radius-lg);font-size:14px;background:var(--surface);color:var(--text);transition:all var(--duration-normal) var(--ease-out-expo);box-shadow:var(--shadow-inner)}.detail-subtask-add input:focus{outline:none;border-color:var(--primary);box-shadow:var(--shadow-sm),0 0 0 4px var(--primary-faint)}.detail-subtask-add button{padding:12px 20px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-lg);font-size:14px;font-weight:600;cursor:pointer;transition:all var(--duration-normal) var(--ease-out-expo);box-shadow:var(--shadow-sm)}.detail-subtask-add button:hover{background:var(--primary-dark);transform:translateY(-1px);box-shadow:var(--shadow-md)}.detail-footer{padding:20px 24px;border-top:1px solid var(--border-subtle);display:flex;gap:12px;background:linear-gradient(0deg,var(--surface) 0%,var(--bg) 100%)}.detail-footer .btn{flex:1;justify-content:center}.modal-overlay{position:fixed;inset:0;background:#1a191866;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);z-index:300;display:flex;align-items:flex-end;justify-content:center;opacity:0;pointer-events:none;transition:opacity var(--duration-normal) var(--ease-out-expo)}.modal-overlay.show{opacity:1;pointer-events:all}@media(min-width:640px){.modal-overlay{align-items:center}}.modal{background:var(--surface);border-radius:var(--radius-2xl) var(--radius-2xl) 0 0;width:100%;max-width:480px;max-height:90vh;padding:28px;transform:translateY(100%);transition:transform var(--duration-slow) var(--ease-out-expo);overflow-y:auto;box-shadow:var(--shadow-xl);position:relative}.modal:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:40px;height:4px;background:var(--border);border-radius:0 0 var(--radius-full) var(--radius-full);margin-top:12px}@media(min-width:640px){.modal{border-radius:var(--radius-2xl);transform:translateY(20px) scale(.97)}}.modal-overlay.show .modal{transform:translateY(0)}@media(min-width:640px){.modal-overlay.show .modal{transform:translateY(0) scale(1)}}.modal h2{font-family:var(--font-display);font-size:22px;font-weight:700;margin-bottom:24px;color:var(--text);letter-spacing:-.02em;padding-top:8px}.form-group{margin-bottom:20px}.form-group label{display:block;font-family:var(--font-display);font-size:12px;font-weight:700;color:var(--text-secondary);margin-bottom:8px;text-transform:uppercase;letter-spacing:.06em}.form-group input,.form-group textarea,.form-group select{width:100%;padding:13px 16px;border:1.5px solid var(--border);border-radius:var(--radius-lg);font-family:var(--font-body);font-size:15px;transition:all var(--duration-normal) var(--ease-out-expo);background:var(--surface);color:var(--text);box-shadow:var(--shadow-inner)}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text-placeholder)}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{outline:none;border-color:var(--primary);box-shadow:var(--shadow-sm),0 0 0 4px var(--primary-faint);transform:translateY(-1px)}.form-group textarea{resize:vertical;min-height:100px}.tag-options{display:flex;gap:6px;flex-wrap:wrap}.tag-category{display:flex;align-items:center;gap:10px}.tag-category-label{font-size:12px;font-weight:500;color:var(--text-secondary);min-width:48px}.tag-options-row{display:flex;gap:6px;flex-wrap:wrap}.tag-option{padding:6px 14px;border-radius:var(--radius-full);font-size:13px;font-weight:600;cursor:pointer;border:1.5px solid transparent;transition:all var(--duration-normal) var(--ease-out-expo);opacity:.7}.tag-option:hover{opacity:1;transform:translateY(-1px)}.tag-option.selected{border-color:currentColor;opacity:1;box-shadow:var(--shadow-sm)}.tag-option.none-option{background:var(--bg);color:var(--text-muted);border:1.5px dashed var(--border)}.tag-option.none-option.selected{border-style:solid}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:28px;padding-top:20px;border-top:1px solid var(--border-subtle)}.color-picker{display:flex;gap:12px;flex-wrap:wrap;padding:4px 0}.color-radio-input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.color-swatch{width:38px;height:38px;border-radius:50%;cursor:pointer;border:3px solid transparent;transition:all var(--duration-normal) var(--ease-out-back);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-sm),inset 0 1px 2px #0000001a;position:relative}.color-swatch:hover{transform:scale(1.15);box-shadow:var(--shadow-md)}.color-swatch:focus-visible{outline:none;box-shadow:var(--shadow-lg),0 0 0 3px var(--primary-faint),0 0 0 5px var(--primary)}.color-swatch.selected{border-color:var(--text);box-shadow:var(--shadow-lg),0 0 0 3px var(--surface)}.color-swatch.selected svg{color:#fff;width:18px;height:18px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3))}.confirm-body{margin-bottom:24px}.confirm-body p{font-size:14px;margin-bottom:10px;color:var(--text-secondary)}.confirm-body .warn{color:var(--danger);font-weight:600}.radio-group{display:flex;flex-direction:column;gap:10px}.radio-option{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border:1.5px solid var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:all var(--duration-normal) var(--ease-out-expo)}.radio-option:hover{border-color:var(--primary-light);background:var(--primary-faint);transform:translateY(-1px)}.radio-option.selected{border-color:var(--primary);background:var(--primary-faint)}.radio-option input[type=radio]{margin-top:3px;accent-color:var(--primary);width:18px;height:18px}.radio-option .radio-label{font-size:14px;font-weight:600;color:var(--text)}.radio-option .radio-desc{font-size:13px;color:var(--text-secondary);margin-top:4px;line-height:1.5}.btn{border:none;cursor:pointer;border-radius:var(--radius-lg);font-family:var(--font-body);font-size:14px;font-weight:600;transition:all var(--duration-normal) var(--ease-out-expo);display:inline-flex;align-items:center;gap:8px;padding:10px 18px}.btn svg{width:16px;height:16px;flex-shrink:0}.btn-primary{background:var(--primary);color:#fff;box-shadow:var(--shadow-sm)}.btn-primary:hover{background:var(--primary-dark);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.btn-primary:active{transform:translateY(0)}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--bg);color:var(--text)}.btn-danger{background:var(--danger);color:#fff;box-shadow:var(--shadow-sm)}.btn-danger:hover{background:var(--danger-hover);transform:translateY(-2px);box-shadow:var(--shadow-md)}.btn-sm{padding:8px 14px;font-size:13px;border-radius:var(--radius-md)}.fab-container{position:fixed;bottom:calc(var(--fab-offset) + env(safe-area-inset-bottom,0));right:32px;z-index:90;display:flex;flex-direction:column;align-items:center;gap:8px}.btn-icon{width:56px;height:56px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);color:#fff;box-shadow:var(--shadow-lg),0 4px 12px #4f46e559;transition:all var(--duration-normal) var(--ease-out-back)}.btn-icon:hover{transform:scale(1.08) translateY(-3px);box-shadow:var(--shadow-xl),0 8px 20px #4f46e566}.btn-icon:active{transform:scale(.96)}.btn-icon svg{width:26px;height:26px}.fab-hint{font-size:11px;color:var(--text-muted);background:var(--surface);padding:4px 8px;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);opacity:0;transform:translateY(4px);transition:all var(--duration-normal) var(--ease-out-expo);pointer-events:none;white-space:nowrap}.fab-container:hover .fab-hint{opacity:1;transform:translateY(0)}.toast-container{position:fixed;top:24px;left:50%;transform:translate(-50%);z-index:400;display:flex;flex-direction:column;align-items:center;gap:12px;pointer-events:none;padding:0 20px;width:max-content;max-width:min(420px,calc(100vw - 40px))}.toast{width:fit-content;max-width:min(380px,calc(100vw - 40px));background:var(--text);color:#fff;padding:14px 20px;border-radius:var(--radius-lg);font-size:14px;font-weight:500;white-space:nowrap;animation:toastIn var(--duration-slow) var(--ease-out-back);box-shadow:var(--shadow-xl);display:inline-flex;align-items:center;gap:10px;backdrop-filter:blur(8px)}.toast-success{background:var(--success)}.toast svg{width:18px;height:18px;flex-shrink:0}.toast-error{background:var(--danger)}.toast-warning{background:var(--warning);color:#000}@keyframes toastIn{0%{transform:translateY(-20px) scale(.9);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.sync-indicator{position:fixed;top:24px;right:24px;z-index:150;background:var(--surface);border-radius:var(--radius-lg);padding:12px 18px;box-shadow:var(--shadow-lg);font-size:13px;font-weight:600;display:none;align-items:center;gap:10px;border:1px solid var(--border);animation:slideInRight var(--duration-slow) var(--ease-out-expo)}.sync-indicator.show{display:flex}.sync-dot{width:10px;height:10px;border-radius:50%;background:var(--warning);animation:pulse 1.5s infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1);box-shadow:0 0 #d9770666}50%{opacity:.7;transform:scale(.9);box-shadow:0 0 0 6px #d9770600}}.subtask-section{margin-top:16px;border-top:1px solid var(--border-subtle);padding-top:12px}.subtask-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.subtask-header-title{font-family:var(--font-display);font-size:12px;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;display:flex;align-items:center;gap:8px;cursor:pointer;transition:color var(--duration-fast)}.subtask-header-title:hover{color:var(--text)}.subtask-progress{font-size:12px;color:var(--text-muted);font-weight:500}.subtask-list{display:flex;flex-direction:column;gap:6px;max-height:200px;overflow-y:auto;padding-right:4px}.subtask-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--radius-md);background:var(--bg);transition:all var(--duration-normal) var(--ease-out-expo);position:relative}.subtask-item:hover{background:var(--border-subtle)}.subtask-check{width:22px;height:22px;border-radius:var(--radius-sm);border:2px solid var(--border-focus);cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all var(--duration-normal) var(--ease-out-back);background:var(--surface)}.subtask-check:hover{border-color:var(--success);transform:scale(1.1);background:var(--success-faint)}.subtask-item.done .subtask-check{background:var(--success);border-color:var(--success);box-shadow:0 0 0 3px var(--success-faint)}.subtask-title-wrap{flex:1;min-width:0}.subtask-title{font-size:14px;color:var(--text);transition:all var(--duration-fast)}.subtask-item.done .subtask-title{color:var(--text-muted);text-decoration:line-through}.subtask-actions{display:flex;gap:2px;opacity:.4;transition:opacity var(--duration-fast)}.subtask-item:hover .subtask-actions{opacity:1}.subtask-complete,.subtask-delete{background:none;border:none;cursor:pointer;padding:6px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;color:var(--text-muted);transition:all var(--duration-fast)}.subtask-complete:hover{color:var(--success);background:var(--success-faint)}.subtask-delete:hover{color:var(--danger);background:var(--danger-faint)}.subtask-add{display:flex;gap:10px;margin-top:10px;position:relative}.subtask-add input{flex:1;padding:13px 16px 13px 44px;border:1.5px solid var(--border);border-radius:var(--radius-lg);font-family:var(--font-body);font-size:14px;background:var(--surface);color:var(--text);transition:all var(--duration-normal) var(--ease-out-expo);box-shadow:var(--shadow-inner)}.subtask-add input:focus{outline:none;border-color:var(--primary);box-shadow:var(--shadow-sm),0 0 0 4px var(--primary-faint);transform:translateY(-1px)}.subtask-add-input-wrap{position:relative;flex:1}.subtask-add-input-wrap .input-icon{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.subtask-add button{padding:13px 22px;border:none;border-radius:var(--radius-lg);background:var(--primary);color:#fff;font-family:var(--font-body);font-size:14px;font-weight:600;cursor:pointer;transition:all var(--duration-normal) var(--ease-out-expo);box-shadow:var(--shadow-sm)}.subtask-add button:hover{background:var(--primary-dark);transform:translateY(-2px);box-shadow:var(--shadow-md)}.subtask-add button:disabled{opacity:.7;cursor:not-allowed;transform:none}.btn-loading{display:inline-block;animation:pulse .6s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.subtask-empty{display:flex;flex-direction:column;align-items:center;padding:32px;color:var(--text-muted);gap:10px;font-size:14px}.subtask-empty-hint{font-size:12px;color:var(--text-placeholder)}.subtask-badge{display:none}@media(max-width:768px){.main-content{padding:16px;padding-bottom:calc(var(--content-bottom-safe) + var(--mobile-tab-h))}.my-day-header{padding:20px 16px 16px}.my-day-title{font-size:26px}.my-day-stats{gap:16px}.my-day-stat{font-size:13px}.task-card{padding:14px 16px;gap:12px}.task-title{font-size:14px}.sidebar{width:100%;max-width:320px;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.app-main{margin-left:0}.btn-icon{width:52px;height:52px}.btn-icon svg{width:24px;height:24px}.detail-panel{width:100%;max-width:100%}.modal-overlay{align-items:flex-end}.modal{border-radius:var(--radius-2xl) var(--radius-2xl) 0 0;max-height:85vh;padding:24px 20px;padding-bottom:calc(24px + env(safe-area-inset-bottom))}.modal h2{font-size:20px}.mobile-tabs{display:flex;position:fixed;bottom:0;left:0;right:0;background:#ffffffe6;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--border);z-index:120;padding:8px 16px;padding-bottom:calc(8px + env(safe-area-inset-bottom));box-shadow:0 -4px 20px #0000000f}.mobile-tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;padding:10px 12px;cursor:pointer;color:var(--text-muted);transition:all var(--duration-normal) var(--ease-out-expo);border:none;background:none;font-size:11px;font-weight:600;border-radius:var(--radius-lg)}.mobile-tab:hover,.mobile-tab.active{color:var(--primary);background:var(--primary-faint)}.mobile-tab-icon{width:24px;height:24px;display:flex;align-items:center;justify-content:center;transition:transform var(--duration-normal) var(--ease-out-back)}.mobile-tab-icon svg{width:100%;height:100%;stroke:currentColor}.mobile-tab.active .mobile-tab-icon{transform:scale(1.1)}.mobile-tab-label{font-size:11px}.toast-container{inset:auto 16px 110px;transform:none;width:auto;max-width:none}.sync-indicator{top:16px;right:16px;padding:10px 14px;font-size:12px}.task-search-input{padding:12px 16px 12px 44px;font-size:14px}.task-bucket-title{font-size:11px}}@media(max-width:380px){.my-day-title{font-size:22px}.my-day-stats{flex-direction:column;gap:8px}.task-card{padding:12px 14px}}@media(hover:none)and (pointer:coarse){.task-card:hover,.smart-tab:hover,.project-item:hover,.btn-icon:hover{transform:none}.task-checkbox,.detail-subtask-check,.subtask-check{width:26px;height:26px}.color-swatch{width:42px;height:42px}.btn{padding:12px 20px}.mobile-tab:active{transform:scale(.95)}.fab-hint{display:none}.fab-container{bottom:calc(var(--mobile-tab-h) + var(--fab-offset) + env(safe-area-inset-bottom,0));right:20px}}.kanban-container{display:flex;gap:16px;padding:16px;height:calc(100vh - 120px);overflow-x:auto}.kanban-column{flex:0 0 300px;display:flex;flex-direction:column;background:var(--bg-tertiary);border-radius:var(--radius-lg);max-height:100%}.kanban-column-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:2px solid var(--border)}.kanban-column-header.todo{border-bottom-color:var(--text-muted)}.kanban-column-header.in-progress{border-bottom-color:var(--warning, #f59e0b)}.kanban-column-header.done{border-bottom-color:var(--success, #22c55e)}.kanban-column-title{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px}.kanban-column-count{font-size:12px;font-weight:600;padding:2px 8px;border-radius:var(--radius-full);background:var(--bg);color:var(--text-secondary)}.kanban-column-body{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px;min-height:100px}.kanban-column-body.drag-over{background:var(--primary-faint)}.kanban-card{background:var(--surface);border-radius:var(--radius);padding:12px;box-shadow:var(--shadow-sm);border:1px solid var(--border-subtle);cursor:grab;transition:all var(--duration-fast) var(--ease-out)}.kanban-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px);border-color:var(--border)}.kanban-card:active{cursor:grabbing}.kanban-card.dragging{opacity:.5;transform:rotate(3deg)}.kanban-card-title{font-size:14px;font-weight:500;color:var(--text);margin-bottom:8px;word-break:break-word}.kanban-card-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.kanban-card-date{font-size:12px;color:var(--text-secondary);display:flex;align-items:center;gap:4px}.kanban-card-tags{display:flex;gap:4px;flex-wrap:wrap}.kanban-card-tag{font-size:11px;padding:2px 6px;border-radius:var(--radius-sm);font-weight:500}.kanban-card-subtasks{font-size:12px;color:var(--text-muted);margin-top:8px;display:flex;align-items:center;gap:4px}.kanban-empty{text-align:center;padding:24px 12px;color:var(--text-muted);font-size:13px}.kanban-empty-icon{margin-bottom:8px;opacity:.4}.smart-tab.kanban-active{background:var(--primary-faint);border-left:3px solid var(--primary)}@media(max-width:768px){.kanban-container{padding:12px}.kanban-column{flex:0 0 280px}}.login-gate{position:fixed;top:0;left:0;right:0;bottom:calc(var(--app-footer-h) + env(safe-area-inset-bottom,0));z-index:500;display:flex;align-items:center;justify-content:center;padding:32px 24px 24px;overflow:hidden;background:radial-gradient(ellipse 90% 70% at 8% 0%,rgba(99,102,241,.22) 0%,transparent 58%),radial-gradient(ellipse 80% 60% at 92% 85%,rgba(251,146,60,.16) 0%,transparent 55%),radial-gradient(ellipse 70% 50% at 50% 100%,rgba(79,70,229,.1) 0%,transparent 50%),linear-gradient(155deg,#eef2ff,#faf8f5 38%,#f5f2ec 68%,#e8eafc)}.login-gate:before,.login-gate:after{content:"";position:absolute;border-radius:50%;pointer-events:none;z-index:0}.login-gate:before{width:min(680px,90vw);height:min(680px,90vw);top:-28%;left:-22%;background:radial-gradient(circle,rgba(79,70,229,.2) 0%,rgba(99,102,241,.06) 45%,transparent 72%);filter:blur(40px);animation:floatBlob1 22s ease-in-out infinite}.login-gate:after{width:min(560px,80vw);height:min(560px,80vw);bottom:-24%;right:-18%;background:radial-gradient(circle,rgba(234,88,12,.14) 0%,rgba(251,191,36,.05) 50%,transparent 72%);filter:blur(48px);animation:floatBlob2 26s ease-in-out infinite}@keyframes floatBlob1{0%,to{transform:translate(0) scale(1)}50%{transform:translate(28px,20px) scale(1.06)}}@keyframes floatBlob2{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-24px,-28px) scale(1.05)}}.login-gate.hidden{display:none}body.login-required #sidebar,body.login-required #appMain,body.login-required .fab-container,body.login-required .mobile-tabs{visibility:hidden;pointer-events:none}.login-card{position:relative;z-index:1;width:100%;max-width:420px;background:#ffffffeb;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:24px;padding:40px 36px 36px;border:1px solid rgba(255,255,255,.8);box-shadow:0 1px 2px #1a19180a,0 8px 24px #1a191814,0 24px 64px #4f46e51f;animation:cardEntry .55s cubic-bezier(.16,1,.3,1) both;display:flex;flex-direction:column;align-items:stretch}@keyframes cardEntry{0%{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.login-brand{display:flex;flex-direction:column;align-items:center;gap:16px;margin-bottom:12px}.login-brand-mark{width:56px;height:56px;border-radius:16px;background:linear-gradient(135deg,#4f46e5,#6366f1,#818cf8);display:flex;align-items:center;justify-content:center;box-shadow:0 1px #ffffff80 inset,0 8px 20px #4f46e552}.login-brand-mark:after{content:"\2713";color:#fff;font-size:28px;font-weight:700;line-height:1}.login-title{margin:0;font-family:var(--font-display);font-size:28px;font-weight:700;color:var(--text, #1a1918);letter-spacing:-.03em;line-height:1.15;text-align:center}.login-subtitle{margin:0 0 28px;color:var(--text-secondary, #6b6966);font-size:15px;font-weight:400;line-height:1.55;text-align:center;max-width:100%}.login-error{color:var(--danger, #dc2626);font-size:14px;margin-bottom:16px;background:var(--danger-faint, #fef2f2);border-radius:10px;padding:12px 14px;text-align:left;line-height:1.45}.login-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:48px;padding:0 20px;font-size:16px;font-weight:600;letter-spacing:.01em;border-radius:12px;transition:all .2s cubic-bezier(.16,1,.3,1);font-family:inherit;cursor:pointer;border:none;outline:none;box-sizing:border-box;line-height:1.2}.login-btn+.login-btn{margin-top:12px}.login-btn svg{flex-shrink:0;width:20px;height:20px}.login-card .login-btn.btn-primary{background:linear-gradient(135deg,#4f46e5,#6366f1);color:#fff;box-shadow:0 4px 14px #4f46e559}.login-card .login-btn.btn-primary:hover{background:linear-gradient(135deg,#4338ca,#5c5ce0);transform:translateY(-1px);box-shadow:0 6px 18px #4f46e566}.login-card .login-btn.btn-primary:active{transform:translateY(0) scale(.99)}.login-btn-secondary,.login-card .login-btn.btn-ghost{background:#fff;color:var(--text-secondary, #6b6966);border:1px solid var(--border, #e8e6e1);font-weight:500}.login-btn-secondary:hover,.login-card .login-btn.btn-ghost:hover{background:var(--surface-hover, #fafaf9);color:var(--text, #1a1918);border-color:var(--border-focus, #d4d1ca)}#qr-login-modal{position:fixed;inset:0;z-index:600;display:flex;align-items:center;justify-content:center;background:#1a19188c;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fadeIn .22s ease both}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}#qr-login-modal .qr-modal-content{background:var(--surface, #fff);border-radius:20px;padding:32px 28px 24px;text-align:center;max-width:340px;width:92%;border:1px solid var(--border, #e8e6e1);box-shadow:var(--shadow-xl);animation:modalEntry .32s cubic-bezier(.16,1,.3,1) both}@keyframes modalEntry{0%{opacity:0;transform:translateY(12px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}#qr-login-modal h3{margin:0 0 8px;font-family:var(--font-display);font-size:20px;font-weight:600;color:var(--text, #1a1918)}#qr-login-modal img{width:200px;height:200px;border-radius:12px;background:var(--bg, #fafaf9);padding:8px;border:1px solid var(--border, #e8e6e1);display:block}#qr-login-modal .qr-image-wrap{position:relative;width:200px;height:200px;margin:0 auto 12px}#qr-login-modal .qr-expired-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;border-radius:12px;background:#fafaf9eb;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);border:1px solid var(--border, #e8e6e1);animation:fadeIn .2s ease both}#qr-login-modal .qr-expired-overlay[hidden]{display:none}#qr-login-modal .qr-expired-text{font-size:15px;font-weight:600;color:var(--text, #1a1918);letter-spacing:.02em}#qr-login-modal .qr-countdown{font-size:12px;color:var(--text-secondary, #6b6966);margin-bottom:14px;min-height:16px;font-variant-numeric:tabular-nums}#qr-login-modal .qr-error{font-size:13px;color:#b53b3b;margin-bottom:12px;line-height:1.5;padding:0 4px}#qr-login-modal .qr-error[hidden]{display:none}#qr-login-modal .btn-primary{min-height:36px;padding:0 18px;border-radius:8px;font-size:14px;font-weight:500;color:#fff;background:var(--accent, #2a2826);border:1px solid var(--accent, #2a2826);cursor:pointer;font-family:inherit;transition:opacity .15s ease}#qr-login-modal .btn-primary:hover{opacity:.85}#qr-login-modal .qr-hint{font-size:14px;color:var(--text-secondary, #6b6966);margin-bottom:16px;line-height:1.5}#qr-login-modal .btn-ghost{min-height:44px;padding:0 20px;border-radius:10px;font-size:15px;font-weight:500;color:var(--text-secondary, #6b6966);background:transparent;border:1px solid var(--border, #e8e6e1);cursor:pointer;font-family:inherit}#qr-login-modal .btn-ghost:hover{background:var(--surface-hover, #fafaf9);color:var(--text, #1a1918)}.sidebar-login-status{font-size:12px;color:var(--text-secondary, #6b6966);margin-bottom:8px;text-align:center;width:100%}.app-footer{display:flex;align-items:center;justify-content:center;min-height:var(--app-footer-h);padding:12px 16px calc(12px + env(safe-area-inset-bottom,0));background:var(--surface, #fff);border-top:1px solid var(--border-subtle, #f0eeea)}body.login-required .app-footer{position:fixed;bottom:0;left:0;right:0;z-index:600;background:#ffffffeb;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.app-footer-link{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-secondary, #6b6966);text-decoration:none;font-family:var(--font-body)}.app-footer-link:hover{color:var(--text, #1a1918)}.footer-icp-shield{width:14px;height:14px;flex-shrink:0}@media(max-width:480px){.login-gate{padding:24px 16px 16px}.login-card{padding:32px 24px 28px;border-radius:20px}.login-title{font-size:24px}.login-subtitle{font-size:14px;margin-bottom:24px}.login-btn{min-height:46px;font-size:15px}}@media(prefers-reduced-motion:reduce){.login-card,.login-gate:before,.login-gate:after{animation:none}}/* review T4（spec §5 P1 + §11.1）：刷新按钮 + rate-limit 倒计时 */.icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:34px;height:34px;padding:0;border-radius:var(--radius-md);background:transparent;color:var(--text-secondary);transition:all var(--duration-fast) var(--ease-out-expo);position:relative}.icon-btn svg{width:16px;height:16px;stroke:currentColor}.icon-btn:hover{background:var(--bg);color:var(--primary);transform:translateY(-1px)}.icon-btn:active{transform:scale(.94)}.icon-btn:disabled,.icon-btn.refresh-disabled{opacity:.5;cursor:not-allowed;background:var(--bg)}.icon-btn:disabled:hover,.icon-btn.refresh-disabled:hover{transform:none;background:var(--bg);color:var(--text-secondary)}.refresh-countdown{position:absolute;bottom:-2px;right:-2px;background:var(--warning);color:#fff;font-size:10px;font-weight:700;padding:1px 4px;border-radius:var(--radius-full);min-width:18px;text-align:center;line-height:1.2;font-variant-numeric:tabular-nums;box-shadow:var(--shadow-sm);pointer-events:none}.refresh-countdown[hidden]{display:none}
/* §16.3 #2：跨端 UX 提示徽标 */.refresh-hint{display:inline-flex;align-items:center;margin-left:12px;padding:4px 10px;border-radius:var(--radius-full);font-size:12px;color:var(--primary);background:var(--primary-faint);border:1px solid rgba(79,70,229,.2);cursor:pointer;transition:background var(--duration-fast) var(--ease-out)}.refresh-hint:hover{background:var(--primary-faint-hover)}.refresh-hint.hidden{display:none}/* T4 刷新中 spinner 旋转动画 */.icon-btn.refreshing svg{animation:refreshSpin .8s linear infinite}@keyframes refreshSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
