:root{
    --c-primary:#2D8CF0;
    --c-primary-d:#1B6FD6;
    --c-accent:#19BE6B;
    --c-accent-d:#0F9B57;
    --c-danger:#ED4014;
    --c-warn:#FF9900;
    --c-bg:#F5F7FA;
    --c-card:#FFFFFF;
    --c-text:#1F2733;
    --c-sub:#7A869A;
    --c-line:#E8EDF3;
    --c-p0:#ED4014;
    --c-p1:#FF9900;
    --c-p2:#2D8CF0;
    --radius:14px;
    --shadow:0 2px 10px rgba(31,39,51,.06);
  }
  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
  html,body{margin:0;padding:0;}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
    background:var(--c-bg);color:var(--c-text);font-size:15px;line-height:1.5;
    padding-bottom:calc(env(safe-area-inset-bottom) + 12px);
  }
  .wrap{max-width:1120px;margin:0 auto;padding:14px 16px 40px;}

  /* Header */
  header{
    display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;
    background:linear-gradient(120deg,var(--c-primary),var(--c-accent));
    color:#fff;border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);
  }
  .brand{display:flex;align-items:center;gap:10px;font-size:19px;font-weight:700;}
  .brand svg{width:26px;height:26px;}
  .hbtns{display:flex;gap:8px;flex-wrap:wrap;}
  .btn{
    border:none;border-radius:10px;padding:0 14px;min-height:42px;font-size:14px;cursor:pointer;
    display:inline-flex;align-items:center;gap:6px;font-weight:600;transition:.15s;
    background:rgba(255,255,255,.18);color:#fff;
  }
  .btn:hover{background:rgba(255,255,255,.3);}
  .btn svg{width:16px;height:16px;}
  .btn-solid{background:#fff;color:var(--c-primary-d);}
  .btn-solid:hover{background:#eef5ff;}
  .auth-mini{background:#ffd54a;color:#3a2c00;font-weight:700;}
  .auth-mini:hover{background:#ffe082;}
  .auth-box{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.18);padding:4px 8px 4px 10px;border-radius:10px;color:#fff;}
  .auth-box .auth-email{font-size:13px;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .auth-box .auth-sync{font-size:12px;color:rgba(255,255,255,.85);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .auth-dot{width:8px;height:8px;border-radius:50%;background:#cfe8ff;flex:none;}
  .auth-dot.ok{background:#4be08a;}
  .auth-dot.err{background:#ff7a7a;}
  .auth-logout{padding:0 10px;min-height:30px;font-size:13px;}

  .tip{
    margin:12px 0 0;background:#FFF7E6;border:1px solid #FFE0A3;color:#9A6700;
    border-radius:10px;padding:10px 14px;font-size:13px;display:none;align-items:center;gap:8px;
  }
  .tip.show{display:flex;}

  /* Section */
  .sec-title{display:flex;align-items:center;gap:10px;margin:22px 0 14px;font-size:17px;font-weight:700;flex-wrap:wrap;}
  .sec-title>span{display:flex;align-items:center;gap:8px;}
  .sec-title svg{width:20px;height:20px;color:var(--c-primary);}
  .sec-title .warn-cfg{margin-left:auto;font-weight:400;}
  .board-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin:0;flex-wrap:wrap;}
  .tb-btn{border:1px solid var(--c-line);background:#fff;color:var(--c-text);font-size:13px;font-weight:600;min-height:34px;padding:0 16px;border-radius:9px;cursor:pointer;transition:border-color .15s,color .15s,background .15s;}
  .tb-btn:hover:not(:disabled){border-color:var(--c-primary);color:var(--c-primary-d);}
  .tb-btn:disabled{opacity:.4;cursor:default;}
  .tb-btn.tb-del{border-color:#F6C6C6;color:var(--c-danger);}
  .tb-btn.tb-del:hover:not(:disabled){background:#FDECEC;}
  .sec-add{display:inline-flex;align-items:center;gap:5px;background:var(--c-primary);color:#fff;border:none;border-radius:10px;padding:0 14px;min-height:34px;font-size:13px;font-weight:700;cursor:pointer;box-shadow:0 2px 6px rgba(45,122,255,.25);transition:transform .05s,background .15s;}
  .sec-add:hover{background:var(--c-primary-d);}
  .sec-add:active{transform:translateY(1px);}
  .sec-add svg{width:14px;height:14px;}

  /* Board tabs */
  .board-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 2px 0;flex-wrap:wrap;}
  .board-tabs{display:inline-flex;align-items:center;gap:2px;background:#F5F7FA;border-radius:20px;padding:3px;margin:0;}
  .board-tab{border:none;background:transparent;color:var(--c-sub);font-size:13px;font-weight:600;border-radius:18px;padding:6px 16px;cursor:pointer;display:flex;align-items:center;gap:5px;transition:all .15s;}
  .board-tab.active{background:#fff;color:var(--c-primary);box-shadow:0 1px 3px rgba(0,0,0,.08);}
  .tab-cnt{font-size:11px;font-weight:700;padding:1px 6px;border-radius:10px;font-variant-numeric:tabular-nums;background:var(--c-line);color:var(--c-sub);line-height:1;}
  .board-tab.active .tab-cnt{background:#E6F0FF;color:var(--c-primary-d);}

  .today-box{background:var(--c-card);border-radius:var(--radius);box-shadow:var(--shadow);padding:4px;}
  .today-empty{padding:26px;text-align:center;color:var(--c-sub);font-size:14px;}
  .link{color:#2D8CF0;cursor:pointer;text-decoration:underline;font-weight:600;}
  .today-item{display:flex;align-items:flex-start;gap:12px;padding:13px 14px;border-bottom:1px solid var(--c-line);cursor:pointer;transition:background .15s,border-radius .15s;}
  .today-item:last-child{border-bottom:none;}
  .today-item:hover{background:#F7FAFD;}
  .today-item.sel{background:#F0F7FF;box-shadow:inset 3px 0 0 var(--c-primary);}
  .today-item.done{background:#FAFBFC;}
  .today-item.done .ti-title{text-decoration:line-through;color:var(--c-sub);}
  .ti-flag{font-size:12px;font-weight:700;padding:4px 9px;border-radius:20px;white-space:nowrap;flex-shrink:0;margin-top:1px;}
  .flag-over{background:#FDECEC;color:var(--c-danger);}
  .flag-today{background:#E6F0FF;color:var(--c-primary-d);}
  .flag-soon{background:#FFF4E5;color:#C77B00;}
  .flag-doing{background:#E9F9F0;color:var(--c-accent-d);}
  .flag-done{background:#EEF3FB;color:var(--c-sub);}
  .flag-none{background:#F5F7FA;color:var(--c-sub);}
  .ti-main{flex:1;min-width:0;}
  .ti-head{display:flex;align-items:center;gap:8px;}
  .ti-title{font-weight:600;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;}
  .ti-pri{font-size:11px;font-weight:700;padding:2px 7px;border-radius:6px;white-space:nowrap;flex-shrink:0;}
  .ti-pri.p0{background:#FDECEC;color:var(--c-danger);}
  .ti-pri.p1{background:#FFF4E5;color:#C77B00;}
  .ti-pri.p2{background:#EEF3FB;color:var(--c-sub);}
  .ti-meta{font-size:12px;color:var(--c-sub);margin-top:5px;display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
  .ti-chip{display:inline-flex;align-items:center;padding:1px 7px;border-radius:6px;font-size:11px;font-weight:600;line-height:1.6;}
  .ti-chip.work{background:#E6F0FF;color:var(--c-primary-d);}
  .ti-chip.personal{background:#F3EEFF;color:#7A5AF0;}
  .ti-chip.owner{background:#F5F7FA;color:var(--c-text);}
  .ti-chip.date{background:#F5F7FA;color:var(--c-sub);}
  .ti-chip.tag{background:#EAFBF1;color:var(--c-accent-d);}

  /* 显示模式：固定紧凑 */
  .today-box.view-compact .today-item{padding:9px 12px;}
  .today-box.view-compact .ti-line2{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:5px;}
  .today-box.view-compact .ti-prog{flex:1;min-width:120px;}
  .today-box.view-compact .ti-prog .progress-row{margin-top:0;}
  @media (max-width:640px){
    .board-bar{flex-wrap:wrap;}
  }

  /* Progress bar (绿->红) */
  .progress-row{display:flex;align-items:center;gap:8px;margin-top:7px;}
  .progress-bar{flex:1;height:8px;background:var(--c-line);border-radius:10px;overflow:hidden;min-width:60px;}
  .progress-fill{height:100%;border-radius:10px;background:linear-gradient(90deg,var(--c-accent),var(--c-danger));transition:width .3s ease;}
  .progress-text{font-size:12px;color:var(--c-sub);min-width:36px;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;}

  /* Form fields (shared) */
  .fld{display:flex;flex-direction:column;gap:4px;}
  .fld label{font-size:12px;color:var(--c-sub);padding-left:2px;}
  input,select,textarea{
    font-size:16px;font-family:inherit;color:var(--c-text);border:1px solid var(--c-line);
    border-radius:10px;padding:0 12px;min-height:44px;background:#fff;outline:none;width:100%;
  }
  textarea{padding:10px 12px;min-height:44px;resize:vertical;line-height:1.5;}
  input:focus,select:focus,textarea:focus{border-color:var(--c-primary);}

  input[type=range]{-webkit-appearance:none;background:transparent;padding:0;min-height:24px;width:100%;}
  input[type=range]::-webkit-slider-runnable-track{height:6px;background:var(--c-line);border-radius:10px;}
  input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--c-primary);border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.15);margin-top:-6px;cursor:pointer;transition:.1s;}
  input[type=range]::-webkit-slider-thumb:active{transform:scale(1.1);}
  .range-val{font-size:13px;color:var(--c-primary-d);font-weight:700;margin-left:6px;}

  /* Dashboard */
  .dash{display:grid;grid-template-columns:300px 1fr;gap:14px;}
  .panel{background:var(--c-card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;}
  .panel h3{margin:0 0 12px;font-size:15px;display:flex;align-items:center;gap:7px;}
  .panel h3 svg{width:18px;height:18px;color:var(--c-primary);}
  .ring-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;}
  .ring-num{font-size:26px;font-weight:800;}
  .stat-row{display:flex;justify-content:space-around;margin-top:10px;width:100%;text-align:center;}
  .stat-row .v{font-size:20px;font-weight:700;}
  .stat-row .l{font-size:12px;color:var(--c-sub);}
  .type-stat{display:flex;justify-content:center;gap:18px;margin-top:12px;font-size:13px;color:var(--c-sub);border-top:1px dashed var(--c-line);padding-top:10px;}
  .type-stat b{font-size:15px;}
  .ts-work b{color:var(--c-primary-d);}.ts-per b{color:var(--c-accent-d);}
  .weekly-out{width:100%;min-height:90px;border:1px solid var(--c-line);border-radius:9px;padding:10px;font-size:13px;font-family:inherit;resize:vertical;color:var(--c-text);}
  .cp-btn{margin-top:10px;background:var(--c-accent);color:#fff;border:none;border-radius:9px;min-height:42px;padding:0 16px;font-weight:600;cursor:pointer;width:100%;}

  /* Memo */
  .memo-card{background:var(--c-card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;margin-top:6px;}
  .memo-cfg{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--c-sub);margin-bottom:10px;flex-wrap:wrap;}
  .memo-cfg input{width:60px;min-height:36px;padding:0 8px;font-size:15px;text-align:center;}
  .memo-warn-tip{display:none;background:#FFF4E5;color:#C77B00;border:1px solid #FFE0A3;border-radius:9px;padding:8px 12px;font-size:13px;margin-bottom:10px;align-items:center;gap:6px;}
  .memo-warn-tip.show{display:flex;}
  .memo-add{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;}
  .memo-add textarea{flex:1;min-width:160px;}
  .memo-add .fld-due{width:160px;}
  .memo-add button{background:var(--c-primary);color:#fff;border:none;border-radius:10px;min-height:44px;padding:0 18px;font-weight:700;cursor:pointer;white-space:nowrap;}
  .memo-list{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:12px;}
  .memo-item{border:1px solid var(--c-line);border-left:3px solid var(--c-primary);border-radius:10px;padding:10px 12px;background:#fff;display:flex;flex-direction:column;gap:8px;}
  .memo-item.m-over{border-left-color:var(--c-danger);}
  .memo-item.m-warn{border-left-color:var(--c-warn);}
  .memo-content{font-size:14px;word-break:break-word;white-space:pre-wrap;}
  .memo-foot{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--c-sub);gap:6px;}
  .m-badge{font-size:11px;font-weight:700;padding:1px 7px;border-radius:20px;white-space:nowrap;}
  .m-over .m-badge{background:#FDECEC;color:var(--c-danger);}
  .m-warn .m-badge{background:#FFF4E5;color:#C77B00;}
  .m-ok .m-badge{background:#E6F0FF;color:var(--c-primary-d);}
  .memo-del{border:none;background:#FDECEC;color:var(--c-danger);border-radius:7px;min-height:32px;padding:0 12px;font-size:12px;font-weight:600;cursor:pointer;}
  .memo-edit{border:none;background:#E6F0FF;color:var(--c-primary-d);border-radius:7px;min-height:32px;padding:0 12px;font-size:12px;font-weight:600;cursor:pointer;margin-right:6px;}
  .memo-empty{grid-column:1/-1;color:var(--c-sub);font-size:13px;text-align:center;padding:14px;}

  /* Modal */
  .mask{position:fixed;inset:0;background:rgba(15,23,35,.5);display:none;align-items:center;justify-content:center;padding:20px;z-index:50;}
  .mask.show{display:flex;}
  .modal{background:#fff;border-radius:14px;padding:22px;max-width:340px;width:100%;box-shadow:0 10px 40px rgba(0,0,0,.2);}
  .modal h3{margin:0 0 8px;font-size:17px;}
  .modal p{margin:0 0 16px;color:var(--c-sub);font-size:14px;}
  .modal .mbtns{display:flex;gap:10px;}
  .modal button{flex:1;min-height:44px;border:none;border-radius:10px;font-weight:700;font-size:15px;cursor:pointer;}
  .mb-ok{background:var(--c-danger);color:#fff;}
  .mb-cancel{background:var(--c-bg);color:var(--c-text);}
  .mb-sec{background:var(--c-primary);color:#fff;}
  .edit-modal{max-width:430px;}
  .edit-fld{display:flex;flex-direction:column;gap:4px;margin-bottom:10px;}
  .edit-fld label{font-size:12px;color:var(--c-sub);padding-left:2px;}
  .edit-fld .hint{font-size:12px;color:var(--c-sub);font-weight:400;padding-left:2px;}
  .edit-row{display:flex;gap:10px;}
  .edit-row .edit-fld{flex:1;min-width:0;}
  .edit-modal h3{margin:0 0 14px;font-size:17px;}
  .auth-modal{max-width:320px;}
  .auth-tabs{display:flex;gap:6px;margin-bottom:14px;}
  .auth-tab{flex:1;min-height:38px;border:1px solid var(--c-line);background:var(--c-bg);color:var(--c-sub);border-radius:9px;font-size:14px;font-weight:600;cursor:pointer;}
  .auth-tab.active{background:var(--c-primary);color:#fff;border-color:var(--c-primary);}
  .auth-hint{margin:10px 0 0;font-size:12px;color:var(--c-sub);min-height:16px;}

  @media (max-width:768px){
    .dash{grid-template-columns:1fr;}
    .memo-list{grid-template-columns:1fr;}
    .wrap{padding:10px 12px 32px;}
    header{flex-direction:column;align-items:stretch;}
    .hbtns{justify-content:space-between;}
    .btn{flex:1;justify-content:center;}
    .fld{min-width:120px;}
    .memo-add .fld-due{width:100%;}
  }

  /* Toolbar: 筛选 + 临期提醒 */
  .toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:10px 2px 0;flex-wrap:wrap;}
  .filter-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .filter-bar input[type=text]{width:170px;min-height:38px;font-size:14px;}
  .filter-bar select{width:auto;min-height:38px;font-size:14px;padding:0 8px;cursor:pointer;}
  .warn-cfg{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--c-sub);white-space:nowrap;}
  .warn-cfg input{width:52px;min-height:34px;padding:0 6px;font-size:14px;text-align:center;}
  .task-warn-tip{display:none;align-items:center;gap:6px;background:#FFF4E5;color:#C77B00;border:1px solid #FFE0A3;border-radius:9px;padding:8px 12px;font-size:13px;margin:10px 2px 0;}
  .task-warn-tip.show{display:flex;}
  @media (max-width:768px){
    .toolbar{flex-direction:column;align-items:stretch;}
    .filter-bar{justify-content:flex-start;}
    .filter-bar input[type=text]{flex:1;min-width:120px;}
  }

  /* 同步卡片 */
  .sync-card{margin:12px 0 0;background:#fff;border:1px solid var(--c-line);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 14px;}
  .sync-row{display:flex;align-items:center;justify-content:space-between;gap:10px;}
  .sync-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;}
  .sync-title svg{color:var(--c-primary);}
  .sync-status{font-size:13px;color:var(--c-sub);padding:2px 10px;border-radius:12px;background:#F5F7FA;white-space:nowrap;}
  .sync-status.ok{color:var(--c-accent-d);background:#EAFBF1;}
  .sync-status.err{color:var(--c-danger);background:#FDECEC;}
  .sync-ctl{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap;}
  .sync-sel{height:34px;border:1px solid var(--c-line);border-radius:8px;padding:0 10px;background:#fff;color:var(--c-text);font-size:13px;}
  .sync-form{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;}
  .sync-form input[type=text],.sync-form input[type=password]{flex:1;min-width:140px;height:34px;border:1px solid var(--c-line);border-radius:8px;padding:0 10px;font-size:13px;}
  .sync-hint{margin-top:8px;font-size:12px;color:var(--c-sub);line-height:1.5;}
  .btn-ghost{background:#fff;color:var(--c-sub);border:1px solid var(--c-line);}
  .btn-ghost:hover{border-color:var(--c-danger);color:var(--c-danger);}
  @media (max-width:768px){
    .sync-form input[type=text],.sync-form input[type=password]{max-width:100%;}
  }
