  :root{
    --paper:#EFEEE7;
    --paper-line:#DEDCCF;
    --card:#FBFAF6;
    --ink:#1B1F2A;
    --ink-soft:#5B5F6B;
    --ink-faint:#8B8E96;
    --teal:#1F6F5C;
    --teal-deep:#154E41;
    --teal-tint:#E1EEE9;
    --brick:#C1442D;
    --brick-tint:#F8E3DE;
    --ochre:#B8791F;
    --ochre-tint:#F6E8D2;
    --slate:#3E6E90;
    --slate-tint:#DFEAF1;
    --border:#D8D6C9;
    --shadow: 0 1px 2px rgba(27,31,42,0.04), 0 8px 24px rgba(27,31,42,0.06);
    --radius: 14px;
  }
  [data-theme="dark"]{
    --paper:#14171C;
    --paper-line:#20242C;
    --card:#1B1F27;
    --ink:#EEEDE6;
    --ink-soft:#A8ACB6;
    --ink-faint:#6D7178;
    --teal:#4FBF9F;
    --teal-deep:#7BD6BB;
    --teal-tint:#183028;
    --brick:#E07359;
    --brick-tint:#33221D;
    --ochre:#E0A94E;
    --ochre-tint:#332812;
    --slate:#7BAAC9;
    --slate-tint:#1B2A33;
    --border:#2A2E36;
    --shadow: 0 1px 2px rgba(0,0,0,0.3), 0 8px 24px rgba(0,0,0,0.35);
  }
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;}
  body{
    background:var(--paper);
    color:var(--ink);
    font-family:'Inter',sans-serif;
    min-height:100vh;
    transition:background .25s ease, color .25s ease;
  }
  .wrap{
    max-width:920px;
    margin:0 auto;
    padding:40px 24px 80px;
  }
  header.top{
    display:flex;
    justify-content:space-between;
    align-items:flex-start;
    gap:20px;
    margin-bottom:28px;
  }
  .brand{display:flex; align-items:center; gap:14px;}
  .brand-mark{
    width:40px;height:40px;border-radius:10px;
    background:var(--teal);
    display:flex;align-items:center;justify-content:center;
    flex-shrink:0;
  }
  .brand-mark svg{width:20px;height:20px;}
  .brand h1{
    font-family:'Fraunces',serif;
    font-weight:600;
    font-size:26px;
    margin:0;
    letter-spacing:-0.01em;
  }
  .brand p{
    margin:2px 0 0;
    font-size:13px;
    color:var(--ink-soft);
  }
  .top-actions{display:flex; align-items:center; gap:10px;}
  .icon-btn{
    width:38px;height:38px;
    border-radius:10px;
    border:1px solid var(--border);
    background:var(--card);
    display:flex;align-items:center;justify-content:center;
    cursor:pointer;
    color:var(--ink);
    transition:all .15s ease;
  }
  .icon-btn:hover{border-color:var(--teal); color:var(--teal);}
  .icon-btn svg{width:18px;height:18px;}

  /* progress ring card */
  .stat-strip{
    display:grid;
    grid-template-columns:auto 1fr 1fr 1fr;
    gap:16px;
    background:var(--card);
    border:1px solid var(--border);
    border-radius:var(--radius);
    padding:18px 22px;
    box-shadow:var(--shadow);
    margin-bottom:26px;
    align-items:center;
  }
  .ring-cell{display:flex; align-items:center; gap:12px;}
  .ring-cell .ring-label{font-size:12px; color:var(--ink-soft); line-height:1.3;}
  .ring-cell .ring-label b{display:block; font-family:'Fraunces',serif; font-size:20px; color:var(--ink); font-weight:600;}
  .stat-cell{
    border-left:1px solid var(--border);
    padding-left:16px;
  }
  .stat-cell .num{font-family:'IBM Plex Mono',monospace; font-size:22px; font-weight:500;}
  .stat-cell .lab{font-size:12px; color:var(--ink-soft); margin-top:2px;}
  .stat-cell.done .num{color:var(--teal);}
  .stat-cell.pending .num{color:var(--ochre);}
  .stat-cell.overdue .num{color:var(--brick);}

  /* composer */
  .composer{
    background:var(--card);
    border:1px solid var(--border);
    border-radius:var(--radius);
    padding:16px;
    box-shadow:var(--shadow);
    margin-bottom:22px;
  }
  .composer-row1{display:flex; gap:10px;}
  .composer input[type=text]{
    flex:1;
    border:1px solid var(--border);
    background:var(--paper);
    color:var(--ink);
    border-radius:10px;
    padding:11px 14px;
    font-size:15px;
    font-family:'Inter',sans-serif;
    outline:none;
    transition:border-color .15s ease;
  }
  .composer input[type=text]:focus{border-color:var(--teal);}
  .add-btn{
    background:var(--teal);
    color:#fff;
    border:none;
    border-radius:10px;
    padding:0 20px;
    font-size:14px;
    font-weight:600;
    cursor:pointer;
    display:flex;align-items:center;gap:6px;
    transition:background .15s ease;
    white-space:nowrap;
  }
  .add-btn:hover{background:var(--teal-deep);}
  .composer-row2{
    display:flex;
    gap:10px;
    margin-top:10px;
    flex-wrap:wrap;
  }
  .composer select, .composer input[type=date]{
    border:1px solid var(--border);
    background:var(--paper);
    color:var(--ink-soft);
    border-radius:8px;
    padding:7px 10px;
    font-size:13px;
    font-family:'Inter',sans-serif;
    outline:none;
  }
  .error-msg{
    color:var(--brick);
    font-size:12.5px;
    margin-top:8px;
    display:none;
  }
  .error-msg.show{display:block;}

  /* filter bar */
  .filter-bar{
    display:flex;
    align-items:center;
    gap:10px;
    margin-bottom:16px;
    flex-wrap:wrap;
  }
  .search-box{
    position:relative;
    flex:1;
    min-width:180px;
  }
  .search-box svg{
    position:absolute; left:12px; top:50%; transform:translateY(-50%);
    width:15px;height:15px; color:var(--ink-faint);
  }
  .search-box input{
    width:100%;
    padding:9px 12px 9px 34px;
    border:1px solid var(--border);
    background:var(--card);
    color:var(--ink);
    border-radius:9px;
    font-size:13.5px;
    outline:none;
    font-family:'Inter',sans-serif;
  }
  .search-box input:focus{border-color:var(--teal);}
  .chip-row{display:flex; gap:6px; flex-wrap:wrap;}
  .chip{
    border:1px solid var(--border);
    background:var(--card);
    color:var(--ink-soft);
    padding:7px 13px;
    border-radius:999px;
    font-size:12.5px;
    font-weight:500;
    cursor:pointer;
    white-space:nowrap;
    transition:all .15s ease;
  }
  .chip.active{
    background:var(--teal);
    border-color:var(--teal);
    color:#fff;
  }
  select.sort-select{
    border:1px solid var(--border);
    background:var(--card);
    color:var(--ink-soft);
    border-radius:9px;
    padding:8px 10px;
    font-size:12.5px;
    outline:none;
  }

  /* task list — ruled paper feel */
  .list{
    background:var(--card);
    border:1px solid var(--border);
    border-radius:var(--radius);
    box-shadow:var(--shadow);
    overflow:hidden;
  }
  .task{
    display:flex;
    align-items:flex-start;
    gap:12px;
    padding:15px 18px;
    border-bottom:1px solid var(--paper-line);
    transition:background .12s ease;
  }
  .task:last-child{border-bottom:none;}
  .task:hover{background:rgba(31,111,92,0.04);}
  .task.done .task-title{ text-decoration:line-through; color:var(--ink-faint); }
  .check{
    width:21px;height:21px;
    border-radius:6px;
    border:2px solid var(--border);
    flex-shrink:0;
    margin-top:2px;
    cursor:pointer;
    display:flex;align-items:center;justify-content:center;
    transition:all .15s ease;
    background:transparent;
  }
  .check:hover{border-color:var(--teal);}
  .check.checked{background:var(--teal); border-color:var(--teal);}
  .check svg{width:13px;height:13px; color:#fff; opacity:0; transition:opacity .1s ease;}
  .check.checked svg{opacity:1;}
  .task-body{flex:1; min-width:0;}
  .task-title{
    font-size:15px;
    font-weight:500;
    word-break:break-word;
  }
  .task-meta{
    display:flex;
    gap:8px;
    margin-top:6px;
    flex-wrap:wrap;
    align-items:center;
  }
  .badge{
    font-size:11px;
    font-weight:600;
    padding:3px 9px;
    border-radius:999px;
    display:inline-flex;
    align-items:center;
    gap:4px;
  }
  .badge.prio-high{background:var(--brick-tint); color:var(--brick);}
  .badge.prio-medium{background:var(--ochre-tint); color:var(--ochre);}
  .badge.prio-low{background:var(--slate-tint); color:var(--slate);}
  .badge.cat{background:var(--teal-tint); color:var(--teal-deep);}
  .badge.due{background:transparent; color:var(--ink-faint); padding-left:0; font-weight:500;}
  .badge.due.late{color:var(--brick); font-weight:600;}
  .badge svg{width:11px;height:11px;}
  .task-actions{display:flex; gap:4px; flex-shrink:0;}
  .task-actions button{
    width:30px;height:30px;
    border:none;background:transparent;
    border-radius:8px;
    color:var(--ink-faint);
    cursor:pointer;
    display:flex;align-items:center;justify-content:center;
    transition:all .12s ease;
  }
  .task-actions button:hover{background:var(--paper); color:var(--ink);}
  .task-actions button.del:hover{color:var(--brick);}
  .task-actions svg{width:16px;height:16px;}

  .empty{
    text-align:center;
    padding:60px 20px;
    color:var(--ink-soft);
  }
  .empty svg{width:44px;height:44px; color:var(--ink-faint); margin-bottom:14px;}
  .empty h3{font-family:'Fraunces',serif; font-weight:500; font-size:18px; margin:0 0 6px; color:var(--ink);}
  .empty p{font-size:13.5px; margin:0;}

  /* edit modal */
  .modal-overlay{
    position:fixed; inset:0;
    background:rgba(20,22,26,0.45);
    display:none;
    align-items:center; justify-content:center;
    z-index:50;
    padding:20px;
  }
  .modal-overlay.show{display:flex;}
  .modal{
    background:var(--card);
    border-radius:16px;
    padding:24px;
    width:100%;
    max-width:420px;
    box-shadow:0 20px 60px rgba(0,0,0,0.25);
    border:1px solid var(--border);
  }
  .modal h3{
    font-family:'Fraunces',serif;
    font-weight:600;
    font-size:19px;
    margin:0 0 16px;
  }
  .field{margin-bottom:14px;}
  .field label{
    display:block;
    font-size:12px;
    font-weight:600;
    color:var(--ink-soft);
    margin-bottom:6px;
  }
  .field input, .field select{
    width:100%;
    border:1px solid var(--border);
    background:var(--paper);
    color:var(--ink);
    border-radius:9px;
    padding:9px 12px;
    font-size:14px;
    font-family:'Inter',sans-serif;
    outline:none;
  }
  .field input:focus, .field select:focus{border-color:var(--teal);}
  .field-row{display:flex; gap:10px;}
  .field-row .field{flex:1;}
  .modal-actions{display:flex; justify-content:flex-end; gap:10px; margin-top:18px;}
  .btn-ghost{
    background:transparent; border:1px solid var(--border); color:var(--ink);
    padding:9px 16px; border-radius:9px; font-size:13.5px; font-weight:500; cursor:pointer;
  }
  .btn-ghost:hover{background:var(--paper);}
  .btn-solid{
    background:var(--teal); border:none; color:#fff;
    padding:9px 16px; border-radius:9px; font-size:13.5px; font-weight:600; cursor:pointer;
  }
  .btn-solid:hover{background:var(--teal-deep);}

  @media (max-width:600px){
    .stat-strip{grid-template-columns:auto 1fr; row-gap:14px;}
    .stat-cell{border-left:none; padding-left:0; border-top:1px solid var(--border); padding-top:10px;}
    .composer-row1{flex-direction:column;}
    .add-btn{padding:11px 20px; justify-content:center;}
  }
