  :root{
    /* Organic — тёплый овсяный ground, шалфей как основной голос */
    --bg:#F5EAD8;
    --bg-elev:#EBDDC5;
    --bg-sunk:#E3D3B8;
    --ink:#201E1D;
    --ink-soft:#645C50;
    --ink-faint:#82796A;
    --line:#DCD3C4;
    --line-soft:#EEE7DB;
    --primary:#728157;
    --primary-dark:#56633F;
    --primary-soft:#E1EECC;
    --primary-ink:#F5EAD8;
    --amber:#B2622D;
    --amber-soft:#FFE1D0;
    --brick:#8C491A;
    --brick-soft:#FFC6A5;
    --moss:#8FA073;
    --moss-soft:#F0FAE1;
    --radius-s:12px;
    --radius:20px;
    --radius-l:28px;
    --pill:999px;
    --shadow-s:0 1px 2px rgba(46,43,37,.14);
    --shadow:0 3px 10px rgba(46,43,37,.16);
    --font-display:'Newsreader', Georgia, 'Iowan Old Style', serif;
    --font-body:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;
    --font-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
  }
  html[data-theme="dark"]{
    --bg:#23211E;
    --bg-elev:#2D2A26;
    --bg-sunk:#35312B;
    --ink:#F2ECE1;
    --ink-soft:#C3B9A8;
    --ink-faint:#9C9384;
    --line:#403B34;
    --line-soft:#332F29;
    --primary:#A8BB87;
    --primary-dark:#8CA06B;
    --primary-soft:#3A4230;
    --primary-ink:#23211E;
    --amber:#E0A06E;
    --amber-soft:#4A3A2C;
    --brick:#E08A63;
    --brick-soft:#4A322A;
    --moss:#A8BB87;
    --moss-soft:#333B2A;
    --shadow-s:0 1px 2px rgba(0,0,0,.35);
    --shadow:0 6px 20px rgba(0,0,0,.45);
  }
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;}
  body{
    background:var(--bg);
    color:var(--ink);
    font-family:var(--font-body);
    font-size:14.5px;
    line-height:1.5;
    min-height:100vh;
  }
  ::selection{background:var(--primary-soft);}
  a{color:var(--primary);}
  button{font-family:inherit;}
  h1,h2,h3{font-family:var(--font-display);font-weight:600;margin:0;color:var(--ink);}
  .app{display:grid;grid-template-columns:220px 1fr;min-height:100vh;}
  /* ---------- Sidebar ---------- */
  .sidebar{
    background:var(--primary-dark);
    color:#EAF0EC;
    padding:22px 14px;
    display:flex;
    flex-direction:column;
    gap:4px;
    position:sticky;top:0;height:100vh;
  }
  .brand{
    font-family:var(--font-display);
    font-size:20px;
    color:#fff;
    margin-bottom:4px;
    padding:0 10px;
    display:flex;align-items:center;gap:8px;
  }
  .brand svg{flex:none;}
  .brand-sub{
    font-size:11px;color:#B9CCC3;padding:0 10px 18px;letter-spacing:.03em;
  }
  .nav-btn{
    display:flex;align-items:center;gap:10px;
    background:transparent;border:none;color:#D7E4DD;
    text-align:left;padding:10px 10px;border-radius:var(--radius-s);
    cursor:pointer;font-size:14px;transition:background .15s, color .15s;
  }
  .nav-btn:hover{background:rgba(255,255,255,.08);color:#fff;}
  .nav-btn.active{background:#fff;color:var(--primary-dark);font-weight:600;}
  .nav-ic{width:16px;height:16px;flex:none;}
  .sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:6px;}
  .mini-timer{
    background:rgba(255,255,255,.08);border-radius:var(--radius-s);
    padding:10px;font-size:12px;color:#EAF0EC;cursor:pointer;
  }
  .mini-timer b{display:block;font-family:var(--font-mono);font-size:17px;letter-spacing:.02em;}
  /* ---------- Main ---------- */
  .main{padding:26px 34px 60px;max-width:1180px;}
  .topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap;}
  .topbar h1{font-size:26px;}
  .topbar .desc{color:var(--ink-soft);font-size:13px;margin-top:4px;}
  .icon-btn{
    background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-s);
    padding:8px 12px;cursor:pointer;font-size:13px;color:var(--ink);display:inline-flex;align-items:center;gap:6px;
    transition:border-color .15s, box-shadow .15s;
  }
  .icon-btn:hover{border-color:var(--primary);box-shadow:var(--shadow-s);}
  .btn{
    background:var(--primary);color:#fff;border:none;border-radius:var(--radius-s);
    padding:9px 16px;cursor:pointer;font-size:13.5px;font-weight:600;transition:background .15s, transform .1s;
  }
  .btn:hover{background:var(--primary-dark);}
  .btn:active{transform:scale(.98);}
  .btn.secondary{background:var(--bg-elev);color:var(--primary);border:1px solid var(--primary);}
  .btn.secondary:hover{background:var(--primary-soft);}
  .btn.danger{background:var(--brick);}
  .btn.danger:hover{background:#94402D;}
  .btn.ghost{background:transparent;color:var(--ink-soft);border:1px solid var(--line);}
  .btn.small{padding:6px 11px;font-size:12.5px;}
  .card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow-s);}
  .row{display:flex;align-items:center;gap:10px;}
  .between{justify-content:space-between;}
  .wrap{flex-wrap:wrap;}
  .muted{color:var(--ink-soft);}
  .faint{color:var(--ink-faint);font-size:12px;}
  .tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:3px 8px;border-radius:20px;font-weight:600;letter-spacing:.01em;}
  .tag.high{background:var(--brick-soft);color:var(--brick);}
  .tag.medium{background:var(--amber-soft);color:var(--amber);}
  .tag.low{background:var(--moss-soft);color:var(--moss);}
  .tag.deadline{background:#EFE3F6;color:#7A4FA0;}
  .tag.overdue{background:var(--brick-soft);color:var(--brick);}
  .tag.neutral{background:var(--bg-sunk);color:var(--ink-soft);}
  .tag.backdated{background:#EFE3F6;color:#7A4FA0;}
  /* ---------- Load meter (signature element) ---------- */
  .load-meter{display:flex;align-items:center;gap:10px;}
  .load-track{
    flex:1;height:14px;border-radius:20px;background:var(--bg-sunk);
    position:relative;overflow:hidden;border:1px solid var(--line);
  }
  .load-fill{height:100%;border-radius:20px 0 0 20px;transition:width .4s ease, background .4s ease;}
  .load-fill.zone-green{background:linear-gradient(90deg,#7FA876,var(--moss));}
  .load-fill.zone-amber{background:linear-gradient(90deg,#DBA45F,var(--amber));}
  .load-fill.zone-red{background:linear-gradient(90deg,#C96A53,var(--brick));}
  .load-leaf{position:absolute;top:-3px;width:20px;height:20px;transform:translateX(-10px);transition:left .4s ease;}
  .load-pct{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);min-width:38px;text-align:right;}
  /* ---------- Task list ---------- */
  .task{
    background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);
    padding:12px 14px;margin-bottom:8px;transition:border-color .15s;
  }
  .task:hover{border-color:var(--primary);}
  .task.done{opacity:.6;}
  .task.done .task-title{text-decoration:line-through;}
  .task-top{display:flex;align-items:flex-start;gap:10px;}
  .check{
    flex:none;width:22px;height:22px;border-radius:7px;border:2px solid var(--line);
    background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;
    font-size:13px;color:#fff;margin-top:1px;transition:all .15s;
  }
  .check.state-done{background:var(--moss);border-color:var(--moss);}
  .check.state-partial{background:var(--amber);border-color:var(--amber);}
  .check.state-undone{background:#fff;}
  .task-body{flex:1;min-width:0;}
  .task-title{font-size:14.5px;font-weight:600;color:var(--ink);cursor:pointer;}
  .task-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;}
  .task-notes{font-size:12.5px;color:var(--ink-soft);margin-top:6px;white-space:pre-wrap;}
  .task-actions{display:flex;gap:4px;flex:none;}
  .icon-mini{
    background:none;border:none;cursor:pointer;color:var(--ink-faint);padding:4px;border-radius:6px;font-size:14px;
  }
  .icon-mini:hover{background:var(--bg-sunk);color:var(--ink);}
  .subtasks{margin:8px 0 0 32px;display:flex;flex-direction:column;gap:5px;}
  .subtasks.collapsed{display:none;}
  .subtask{display:flex;align-items:flex-start;gap:8px;font-size:13px;}
  .subtask .check{width:17px;height:17px;border-radius:5px;font-size:10px;margin-top:1px;}
  .subtask-title{cursor:text;}
  .subtask-title.done{text-decoration:line-through;color:var(--ink-faint);}
  .subtask-title.partial{color:var(--amber);}
  .subtask-note{font-size:11px;color:var(--ink-faint);margin-top:2px;}
  .subtask-meta{display:flex;gap:4px;flex-wrap:wrap;margin-top:3px;align-items:center;}
  .subtask-meta .tag{font-size:10.5px;padding:2px 7px;cursor:pointer;}
  .subtask-edit-input{font-size:13px;padding:3px 6px;width:100%;}
  .add-subtask-row{display:flex;gap:6px;margin:8px 0 0 32px;}
  .add-subtask-row input{flex:1;font-size:12.5px;padding:5px 8px;border-radius:6px;border:1px solid var(--line);}
  /* ---------- Forms ---------- */
  input[type=text],input[type=number],input[type=date],input[type=time],input[type=search],textarea,select{
    font-family:inherit;font-size:13.5px;padding:8px 10px;border-radius:var(--radius-s);
    border:1px solid var(--line);background:#fff;color:var(--ink);width:100%;
  }
  textarea{resize:vertical;min-height:60px;}
  label{font-size:12px;color:var(--ink-soft);font-weight:600;display:block;margin-bottom:4px;}
  .field{margin-bottom:12px;}
  .field-row{display:flex;gap:10px;}
  .field-row>.field{flex:1;}
  .chip-select{display:flex;gap:6px;flex-wrap:wrap;}
  .chip-opt{
    padding:6px 12px;border-radius:20px;border:1px solid var(--line);background:#fff;
    cursor:pointer;font-size:12.5px;color:var(--ink-soft);
  }
  .chip-opt.sel{background:var(--primary);color:#fff;border-color:var(--primary);}
  /* ---------- Modal ---------- */
  .overlay{
    position:fixed;inset:0;background:rgba(31,42,36,.45);display:none;align-items:center;justify-content:center;
    z-index:100;padding:20px;backdrop-filter:blur(1px);
  }
  .overlay.open{display:flex;}
  .modal{
    background:#fff;border-radius:var(--radius-l);padding:24px 26px;max-width:520px;width:100%;
    max-height:88vh;overflow:auto;box-shadow:0 20px 50px rgba(0,0,0,.25);
  }
  .modal h3{font-size:18px;margin-bottom:16px;}
  .modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px;}
  /* ---------- Views ---------- */
  .view{display:none;}
  .view.active{display:block;}
  .section-title{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);margin:22px 0 10px;font-weight:700;}
  .section-title:first-child{margin-top:0;}
  .empty{
    border:1.5px dashed var(--line);border-radius:var(--radius);padding:26px;text-align:center;color:var(--ink-faint);font-size:13px;
  }
  /* week view */
  /* minmax(0,1fr), а не 1fr: длинное название задачи в колонке иначе
     раздвигает всю сетку и уводит неделю за край экрана. */
  .week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px;}
  .week-day{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:10px;min-height:160px;cursor:pointer;transition:border-color .15s;}
  .week-day:hover{border-color:var(--primary);}
  .week-day.today{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft);}
  .week-day-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px;}
  .week-day-num{font-family:var(--font-display);font-size:16px;font-weight:700;}
  .week-day-dow{font-size:10.5px;color:var(--ink-faint);text-transform:uppercase;}
  .mini-task{font-size:11.5px;padding:3px 6px;border-radius:6px;background:var(--bg-sunk);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .mini-task.done{text-decoration:line-through;color:var(--ink-faint);}
  .mini-dot-row{display:flex;gap:4px;margin-top:4px;}
  .mini-dot{width:6px;height:6px;border-radius:50%;}
  /* month view */
  .month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;}
  .month-dow{text-align:center;font-size:11px;color:var(--ink-faint);text-transform:uppercase;padding-bottom:4px;}
  .month-cell{
    background:var(--bg-elev);border:1px solid var(--line);border-radius:10px;min-height:78px;padding:6px 8px;
    cursor:pointer;transition:border-color .15s;
  }
  .month-cell:hover{border-color:var(--primary);}
  .month-cell.other-month{opacity:.35;}
  .month-cell.today{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft);}
  .month-num{font-size:13px;font-weight:700;font-family:var(--font-display);}
  .month-dots{display:flex;gap:3px;margin-top:6px;flex-wrap:wrap;}
  .dot{width:7px;height:7px;border-radius:50%;}
  /* pomodoro */
  .pomo-wrap{display:flex;gap:26px;flex-wrap:wrap;align-items:flex-start;}
  .pomo-ring-box{position:relative;width:230px;height:230px;flex:none;}
  .pomo-ring-box svg{width:100%;height:100%;transform:rotate(-90deg);}
  .pomo-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
  .pomo-time{font-family:var(--font-mono);font-size:38px;font-weight:600;letter-spacing:.01em;}
  .pomo-phase{font-size:12px;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.06em;margin-top:4px;}
  .pomo-ring-box.breathing .pomo-center{animation:breathe 4s ease-in-out infinite;}
  @keyframes breathe{0%,100%{transform:scale(1);}50%{transform:scale(1.035);}}
  .pomo-controls{display:flex;gap:8px;margin-top:16px;justify-content:center;flex-wrap:wrap;}
  .pomo-side{flex:1;min-width:260px;}
  .notice{background:var(--amber-soft);color:#8A5B21;border-radius:var(--radius-s);padding:10px 12px;font-size:12.5px;margin-bottom:12px;}
  .notice.info{background:var(--primary-soft);color:var(--primary-dark);}
  .stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:10px;}
  .stat-box{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:12px;text-align:center;}
  .stat-num{font-family:var(--font-display);font-size:24px;font-weight:700;color:var(--primary);}
  .stat-lbl{font-size:11px;color:var(--ink-soft);margin-top:2px;}
  /* achievements */
  .ach-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;}
  .ach-card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:14px;display:flex;gap:12px;align-items:flex-start;}
  .ach-card.locked{opacity:.42;}
  .ach-badge{flex:none;width:42px;height:42px;}
  .ach-name{font-weight:700;font-size:13.5px;}
  .ach-desc{font-size:11.5px;color:var(--ink-soft);margin-top:3px;}
  .ach-date{font-size:10.5px;color:var(--primary);margin-top:4px;font-weight:600;}
  /* toast */
  #toast-host{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:8px;z-index:200;}
  .toast{
    background:var(--ink);color:#fff;padding:12px 16px;border-radius:var(--radius-s);font-size:13px;
    box-shadow:var(--shadow);max-width:300px;animation:toast-in .25s ease;display:flex;gap:10px;align-items:center;
  }
  .toast.ach{background:var(--primary-dark);}
  @keyframes toast-in{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
  /* misc */
  .divider{height:1px;background:var(--line);margin:16px 0;border:none;}
  .flex-1{flex:1;}
  .events-list{display:flex;flex-direction:column;gap:6px;margin-top:6px;}
  .event-chip{
    display:flex;align-items:center;gap:8px;font-size:12.5px;background:var(--bg-elev);
    border:1px solid var(--line);border-left:4px solid var(--primary);border-radius:8px;padding:7px 10px;
  }
  .event-chip.type-routine{border-left-color:var(--moss);}
  .event-chip.done{opacity:.65;}
  .event-time{font-family:var(--font-mono);color:var(--ink-soft);font-size:11.5px;}
  .backlog-empty-cta{margin-top:8px;}
  .modal.wide{max-width:620px;}
  .summary-hero{text-align:center;padding:6px 0 18px;}
  .summary-hero .big-num{font-family:var(--font-display);font-size:44px;font-weight:700;color:var(--primary);}
  .summary-hero .big-lbl{font-size:12.5px;color:var(--ink-soft);margin-top:2px;}
  .praise-box{
    background:linear-gradient(135deg,var(--primary-soft),var(--moss-soft));
    border-radius:var(--radius);padding:14px 16px;margin-bottom:14px;
  }
  .praise-line{font-size:13.5px;color:var(--primary-dark);font-weight:600;display:flex;gap:8px;align-items:flex-start;margin-bottom:6px;}
  .praise-line:last-child{margin-bottom:0;}
  .reco-list{display:flex;flex-direction:column;gap:8px;}
  .reco-line{
    display:flex;gap:10px;align-items:flex-start;font-size:13px;background:var(--bg-sunk);
    border-radius:var(--radius-s);padding:10px 12px;color:var(--ink);
  }
  .reco-line .reco-ic{flex:none;font-size:15px;}
  .summary-minigrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0;}
  .summary-minigrid .stat-box{padding:10px 6px;}
  .summary-minigrid .stat-num{font-size:19px;}
  .modal.analysis{max-width:740px;}
  .burn-track{height:10px;border-radius:20px;background:var(--bg-sunk);overflow:hidden;border:1px solid var(--line);margin-top:8px;}
  .burn-fill{height:100%;border-radius:20px;}
  .analysis-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0;}
  .analysis-card{background:var(--bg-sunk);border-radius:var(--radius-s);padding:12px;}
  .analysis-card h4{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);margin:0 0 8px;font-family:var(--font-body);}
  .action-row{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;}
  .quick-add{margin:0 0 16px;}
  .quick-add .row{align-items:stretch;}
  .quick-add input{flex:1;}
  .team-row{
    display:flex;align-items:center;gap:8px;flex-wrap:wrap;
    padding:8px 0;border-bottom:1px solid var(--line-soft);
  }
  .team-row:last-child{border-bottom:none;}
  .tag.kind-talk{background:var(--primary-soft);color:var(--primary-dark);}
  .tag.kind-align{background:var(--amber-soft);color:var(--amber);}
  .tag.kind-ops{background:var(--moss-soft);color:var(--moss);}
  .tag.kind-outreach{background:#EFE3F6;color:#7A4FA0;}
  .tag.mode-do{background:var(--primary-soft);color:var(--primary-dark);}
  .tag.mode-delegate{background:#EFE3F6;color:#7A4FA0;}
  .tag.mode-review{background:var(--amber-soft);color:var(--amber);}
  .tag.mode-wait{background:var(--bg-sunk);color:var(--ink-faint);}
  .nav-btn.panel-toggle.on{background:rgba(255,255,255,.16);color:#fff;}
  .float-panel{
    position:fixed;width:360px;max-width:calc(100vw - 16px);
    max-height:min(520px, calc(100vh - 24px));
    background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);
    box-shadow:var(--shadow);z-index:80;display:none;flex-direction:column;overflow:hidden;
  }
  .float-panel.open{display:flex;}
  .float-panel.minimized{max-height:none;}
  .float-panel.minimized .float-body{display:none;}
  /* Начальные места окон — только на широком экране: на телефоне та же
     разметка становится шторкой, и координаты с ноутбука увели бы её за край.
     Задано через min-width, чтобы селектор по id не пересилил мобильный слой. */
  @media (min-width:881px){
    #panel-notes{top:72px;right:20px;}
    #panel-routines{bottom:20px;right:20px;}
  }
  .float-head{
    display:flex;align-items:center;justify-content:space-between;gap:8px;
    padding:10px 12px;background:var(--primary-dark);color:#EAF0EC;
    cursor:move;user-select:none;flex:none;
  }
  .float-head-title{font-weight:600;font-size:13.5px;}
  .float-head-actions{display:flex;gap:2px;flex:none;}
  .float-head-actions button{
    background:transparent;border:none;color:#EAF0EC;width:28px;height:28px;
    border-radius:6px;cursor:pointer;font-size:16px;line-height:1;
  }
  .float-head-actions button:hover{background:rgba(255,255,255,.12);}
  .float-body{padding:12px;overflow:auto;flex:1;min-height:0;background:#fff;}
  .note-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
  .note-tab{
    padding:4px 10px;border-radius:16px;border:1px solid var(--line);background:var(--bg-sunk);
    font-size:12px;cursor:pointer;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  }
  .note-tab.sel{background:var(--primary);color:#fff;border-color:var(--primary);}
  .note-title-input{font-weight:600;margin-bottom:8px;}
  .note-body-input{min-height:200px;width:100%;}
  .routine-row{
    display:flex;align-items:flex-start;gap:8px;padding:8px 0;
    border-bottom:1px solid var(--line-soft);
  }
  .routine-row:last-child{border-bottom:none;}
  .routine-row.done .routine-title{text-decoration:line-through;color:var(--ink-faint);}
  .routine-title{font-weight:600;font-size:13px;}
  .routine-meta{font-size:11.5px;color:var(--ink-faint);margin-top:2px;}
  .routine-actions{display:flex;gap:2px;flex:none;margin-left:auto;}
  .nav-row{display:flex;flex-direction:column;gap:4px;}
  /* Мобильный слой целиком собран в конце файла: там боковая панель уходит,
     а её место занимают нижние вкладки и шторки. */

  /* ═══ Organic layer — скругления, пилюли, мягкие состояния ═══ */
  h1,h2,h3{font-weight:500;letter-spacing:-.01em;}
  .sidebar{background:var(--primary-dark);color:var(--primary-ink);border-right:none;}
  html[data-theme="dark"] .sidebar{background:#2A2721;color:#F2ECE1;}
  .brand,.brand-sub{color:inherit;}
  .brand-sub{opacity:.72;}
  .nav-btn{border-radius:var(--pill);color:inherit;opacity:.86;transition:background .25s ease,color .25s ease,opacity .25s ease;}
  .nav-btn:hover{background:rgba(255,255,255,.1);opacity:1;}
  .nav-btn.active{background:var(--bg);color:var(--primary-dark);font-weight:600;opacity:1;}
  html[data-theme="dark"] .nav-btn.active{background:var(--primary);color:#23211E;}
  .mini-timer,.theme-switch{border-radius:var(--radius-s);}
  .theme-switch{
    background:rgba(255,255,255,.1);border:none;color:inherit;cursor:pointer;
    padding:10px 12px;border-radius:var(--pill);font-size:12.5px;text-align:left;
    transition:background .25s ease;
  }
  .theme-switch:hover{background:rgba(255,255,255,.18);}
  .btn,.icon-btn,.chip-opt,.tag,.note-tab,
  input[type=text],input[type=number],input[type=date],input[type=time],input[type=search],select{border-radius:var(--pill);}
  .btn{padding:11px 20px;font-weight:600;white-space:nowrap;flex:none;transition:background .25s ease,transform .25s ease;}
  .btn:hover{transform:translateY(-1px);}
  .btn:active{transform:translateY(0) scale(.99);}
  .btn.small{padding:7px 14px;}
  .icon-btn{padding:9px 15px;background:transparent;}
  .icon-btn:hover{background:color-mix(in srgb, var(--ink) 7%, transparent);border-color:var(--line);box-shadow:none;}
  .chip-opt{padding:8px 15px;transition:background .25s ease,color .25s ease,border-color .25s ease;}
  .chip-opt:hover{background:var(--primary-soft);}
  .card,.stat-box,.ach-card,.analysis-card,.float-panel,.empty{border-radius:var(--radius-l);border-color:transparent;}
  .week-day{border-radius:var(--radius);border-color:transparent;}
  .card{padding:24px 26px;box-shadow:var(--shadow-s);}
  .load-track{height:26px;}
  .topbar h1{font-size:34px;}
  .main{padding:36px 42px 64px;}
  .section-title{font-size:12px;letter-spacing:.08em;font-weight:600;color:var(--ink-faint);}
  .modal{border-radius:var(--radius-l);background:var(--bg-elev);color:var(--ink);}
  .month-cell{border-radius:var(--radius-s);}
  .task{padding:14px 16px;transition:border-color .3s ease,box-shadow .3s ease,opacity .45s ease;}
  .task:hover{box-shadow:var(--shadow-s);}
  .task.done{box-shadow:none;}
  .check{
    width:26px;height:26px;border-radius:var(--pill);border-width:2px;background:transparent;
    color:var(--bg-elev);transition:background .35s ease,border-color .35s ease,transform .3s cubic-bezier(.34,1.56,.64,1);
  }
  .check:hover{transform:scale(1.06);}
  .check.state-undone{background:transparent;}
  .check.state-done{background:var(--primary);border-color:var(--primary);color:var(--primary-ink);}
  .check.state-partial{background:var(--amber);border-color:var(--amber);color:var(--bg-elev);}
  .subtask .check{width:19px;height:19px;}
  .load-track{height:22px;border-radius:var(--pill);border-color:transparent;background:color-mix(in srgb, var(--ink) 8%, transparent);}
  .load-fill{border-radius:var(--pill);transition:width .7s cubic-bezier(.4,0,.2,1),background .5s ease;}
  .load-fill.zone-green{background:linear-gradient(90deg,#AEBF92,var(--primary));}
  .load-fill.zone-amber{background:linear-gradient(90deg,#E1C79B,#C58F53);}
  .load-fill.zone-red{background:linear-gradient(90deg,#E0A06E,#B2622D);}
  .load-pct{font-family:var(--font-display);font-size:15px;color:var(--ink-soft);min-width:46px;}
  .tag{padding:5px 11px;font-weight:600;}
  .notice{background:var(--primary-soft);color:var(--ink);border-radius:var(--radius-s);padding:14px 16px;}
  .notice.info{background:var(--primary-soft);color:var(--ink);}
  .reco-line,.analysis-card{border-radius:var(--radius-s);}
  .praise-box{background:var(--primary-soft);border-radius:var(--radius);}
  .praise-line{color:var(--ink);}
  textarea{border-radius:var(--radius-s);}
  input[type=text],input[type=number],input[type=date],input[type=time],input[type=search],select,textarea{
    background:color-mix(in srgb, var(--bg) 78%, #fff);border-color:var(--line);color:var(--ink);
    padding:11px 16px;transition:border-color .25s ease;
  }
  html[data-theme="dark"] input[type=text],html[data-theme="dark"] input[type=number],
  html[data-theme="dark"] input[type=date],html[data-theme="dark"] input[type=time],
  html[data-theme="dark"] input[type=search],
  html[data-theme="dark"] select,html[data-theme="dark"] textarea{background:color-mix(in srgb, var(--bg) 70%, #000);}
  input:focus,textarea:focus,select:focus{border-color:var(--primary);}
  :focus-visible{outline:2px solid var(--primary);outline-offset:2px;}
  .event-chip{border-radius:var(--radius-s);}
  .stat-num,.week-day-num,.month-num,.summary-hero .big-num{font-family:var(--font-display);font-weight:600;}
  .overlay{background:rgba(32,30,29,.42);}
  .float-head{background:var(--primary-dark);color:var(--primary-ink);}
  .float-body{background:var(--bg-elev);}
  .toast{border-radius:var(--pill);background:var(--ink);color:var(--bg);}
  .toast.ach{background:var(--primary-dark);color:var(--primary-ink);}
  /* Виджет паузы */
  .pause-widget{
    position:relative;overflow:hidden;display:flex;gap:16px;align-items:flex-start;
    background:var(--primary-soft);border:1px solid transparent;border-radius:var(--radius-l);
    padding:18px 20px;
  }
  .pause-widget .pause-blob{
    position:absolute;right:-30px;top:-28px;width:110px;height:110px;border-radius:50%;
    background:color-mix(in srgb, var(--primary) 26%, transparent);
    animation:pause-breathe 7s ease-in-out infinite;pointer-events:none;
  }
  @keyframes pause-breathe{0%,100%{transform:scale(1);opacity:.55;}50%{transform:scale(1.07);opacity:.8;}}
  .pause-widget .pause-inner{position:relative;flex:1;min-width:0;}
  .pause-widget .pause-kicker{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:6px;}
  .pause-widget .pause-title{font-family:var(--font-display);font-size:18px;font-weight:600;margin-bottom:4px;}
  .pause-widget .pause-text{font-size:13px;color:var(--ink-soft);margin-bottom:12px;max-width:60ch;}
  .pause-widget .row{gap:8px;flex-wrap:wrap;}
  /* ═══ Карточка задачи — 1:1 с концептом ═══ */
  .task{
    background:var(--bg-elev);border:none;border-radius:var(--radius-l);
    padding:20px 22px;margin-bottom:12px;box-shadow:var(--shadow-s);
  }
  .task:hover{box-shadow:var(--shadow);}
  .task.done{opacity:.62;box-shadow:none;background:color-mix(in srgb, var(--bg-elev) 60%, transparent);}
  .task-top{gap:14px;}
  .task-title{font-family:var(--font-body);font-size:16px;font-weight:500;line-height:1.35;text-wrap:pretty;}
  .task-meta{gap:8px;margin-top:9px;align-items:center;}
  .task-notes{font-size:13px;margin-top:8px;}
  .task-actions .icon-mini{border-radius:var(--pill);width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;}
  .task-actions .icon-mini:hover{background:color-mix(in srgb, var(--ink) 8%, transparent);}
  .task .tag{font-size:12px;font-weight:500;padding:5px 12px;letter-spacing:0;}
  .tag.high{background:color-mix(in srgb, var(--primary) 26%, transparent);color:var(--primary-dark);}
  .tag.medium{background:color-mix(in srgb, var(--ink) 10%, transparent);color:var(--ink-soft);}
  .tag.low{background:color-mix(in srgb, var(--amber) 24%, transparent);color:var(--brick);}
  html[data-theme="dark"] .tag.high{color:var(--primary);}
  html[data-theme="dark"] .tag.low{color:var(--amber);}
  .tag.neutral{background:color-mix(in srgb, var(--ink) 7%, transparent);color:var(--ink-soft);}
  .tag.deadline,.tag.backdated{background:color-mix(in srgb, var(--primary) 16%, transparent);color:var(--primary-dark);}
  html[data-theme="dark"] .tag.deadline,html[data-theme="dark"] .tag.backdated{color:var(--primary);}
  .tag.overdue{background:color-mix(in srgb, var(--amber) 20%, transparent);color:var(--brick);}
  .tag.mode-do{background:var(--primary-soft);color:var(--primary-dark);}
  html[data-theme="dark"] .tag.mode-do{color:var(--primary);}
  .tag.mode-delegate,.tag.mode-review,.tag.mode-wait{background:color-mix(in srgb, var(--ink) 8%, transparent);color:var(--ink-soft);}
  .subtasks{margin-left:40px;gap:7px;}
  .subtask-title{font-size:13.5px;}
  .add-subtask-row{margin-left:40px;}
  .add-subtask-row input{border-radius:var(--pill);padding:8px 14px;}
  .mini-task{border-radius:var(--radius-s);padding:5px 9px;font-size:11.5px;}
  .tag.imp-must{background:color-mix(in srgb, var(--primary) 34%, transparent);color:var(--primary-dark);}
  html[data-theme="dark"] .tag.imp-must{color:var(--bg);}
  .tag.imp-later{background:transparent;border:1px solid var(--line);color:var(--ink-faint);}
  /* ═══ Гармонизация остальных элементов ═══ */
  .brand{color:inherit;}
  .mini-timer{background:rgba(255,255,255,.12);color:inherit;border-radius:var(--radius);padding:12px 14px;}
  .mini-timer b{font-family:var(--font-display);font-size:19px;}
  .nav-btn.panel-toggle.on{background:rgba(255,255,255,.2);color:inherit;}
  .btn{color:var(--primary-ink);}
  .btn.secondary{background:transparent;color:var(--primary-dark);border:1px solid var(--primary);}
  html[data-theme="dark"] .btn.secondary{color:var(--primary);}
  .btn.ghost{border-color:var(--line);color:var(--ink-soft);}
  .btn.ghost:hover{background:color-mix(in srgb, var(--ink) 7%, transparent);}
  .btn.danger{background:var(--brick);color:var(--bg);}
  .btn.danger:hover{background:color-mix(in srgb, var(--brick) 85%, #000);}
  .chip-opt{background:transparent;color:var(--ink-soft);}
  .chip-opt.sel{background:var(--primary);color:var(--primary-ink);border-color:var(--primary);}
  .check{background:transparent;color:var(--primary-ink);}
  .check.state-done{color:var(--primary-ink);}
  .modal{box-shadow:0 24px 60px rgba(32,30,29,.32);}
  .modal h3{font-size:24px;margin-bottom:18px;}
  .modal-actions{margin-top:22px;}
  .notice{background:var(--primary-soft);color:var(--ink);border-radius:var(--radius);padding:14px 18px;font-size:13px;}
  .notice.info{background:color-mix(in srgb, var(--primary) 16%, transparent);color:var(--ink);}
  .notice b{font-family:var(--font-display);font-weight:600;}
  .empty{border:1.5px dashed var(--line);color:var(--ink-faint);padding:30px;background:transparent;}
  .divider,.hr{background:var(--line);}
  label{font-weight:500;color:var(--ink-soft);font-size:12.5px;letter-spacing:.01em;}
  .week-day,.month-cell{background:var(--bg-elev);border:1px solid transparent;box-shadow:var(--shadow-s);}
  .week-day:hover,.month-cell:hover{border-color:transparent;box-shadow:var(--shadow);}
  .week-day.today,.month-cell.today{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);}
  .week-day-dow,.month-dow{color:var(--ink-faint);letter-spacing:.06em;}
  .dot,.mini-dot{border-radius:var(--pill);}
  .stat-box{background:var(--bg-elev);border:none;box-shadow:var(--shadow-s);padding:16px 12px;}
  .stat-num{color:var(--primary-dark);font-size:28px;}
  html[data-theme="dark"] .stat-num{color:var(--primary);}
  .stat-lbl{color:var(--ink-soft);}
  .pomo-time{font-family:var(--font-display);font-weight:600;font-size:44px;}
  .pomo-phase{color:var(--ink-soft);letter-spacing:.08em;}
  .ach-card{background:var(--bg-elev);border:none;box-shadow:var(--shadow-s);padding:18px;}
  .ach-name{font-family:var(--font-display);font-weight:600;font-size:15px;}
  .ach-date{color:var(--primary-dark);}
  html[data-theme="dark"] .ach-date{color:var(--primary);}
  .event-chip{background:var(--bg-elev);border:none;border-left:5px solid var(--primary);border-radius:var(--radius-s);padding:10px 14px;}
  .event-chip.type-routine{border-left-color:var(--moss);}
  .event-time{font-family:var(--font-display);font-size:12.5px;}
  .tag.deadline,.tag.kind-outreach,.tag.mode-delegate{background:color-mix(in srgb, var(--primary) 14%, transparent);color:var(--ink-soft);}
  .tag.kind-talk{background:var(--primary-soft);color:var(--primary-dark);}
  html[data-theme="dark"] .tag.kind-talk{color:var(--primary);}
  .tag.kind-align,.tag.mode-review{background:color-mix(in srgb, var(--amber) 20%, transparent);color:var(--brick);}
  html[data-theme="dark"] .tag.kind-align,html[data-theme="dark"] .tag.mode-review{color:var(--amber);}
  .tag.kind-ops{background:var(--moss-soft);color:var(--primary-dark);}
  html[data-theme="dark"] .tag.kind-ops{color:var(--primary);}
  .float-panel{border:none;box-shadow:var(--shadow);}
  .float-head{border-radius:0;}
  .float-head-title{font-family:var(--font-display);font-weight:600;}
  .float-head-actions button{border-radius:var(--pill);color:inherit;}
  .note-tab{background:transparent;color:var(--ink-soft);padding:6px 13px;}
  .note-tab.sel{background:var(--primary);color:var(--primary-ink);border-color:var(--primary);}
  .toast{padding:13px 20px;}
  .summary-hero .big-num{font-size:52px;color:var(--primary-dark);}
  html[data-theme="dark"] .summary-hero .big-num{color:var(--primary);}
  .praise-box{padding:18px 20px;}
  .reco-line{background:color-mix(in srgb, var(--ink) 6%, transparent);border-radius:var(--radius-s);padding:12px 16px;}
  .burn-track{height:12px;border-radius:var(--pill);border:none;background:color-mix(in srgb, var(--ink) 8%, transparent);}
  .burn-fill{border-radius:var(--pill);transition:width .7s cubic-bezier(.4,0,.2,1);}
  .team-row,.routine-row{border-bottom:1px solid var(--line-soft);}
  .routine-title{font-weight:600;}
  .quick-add input{padding:13px 18px;}
  .icon-mini{border-radius:var(--pill);}
  /* --- Борды (сферы) --- */
  .space-switch{display:flex;flex-direction:column;gap:2px;padding:0 0 14px;margin-bottom:4px;border-bottom:1px solid rgba(255,255,255,.13);}
  .space-switch-cap{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;opacity:.55;padding:0 10px 6px;}
  .space-btn{display:flex;align-items:center;gap:9px;background:transparent;border:none;color:inherit;opacity:.82;
    text-align:left;padding:7px 10px;border-radius:var(--pill);cursor:pointer;font:inherit;font-size:13px;
    transition:background .15s, opacity .15s;}
  .space-btn:hover{background:rgba(255,255,255,.1);opacity:1;}
  .space-btn.active{background:rgba(255,255,255,.94);color:var(--primary-dark);font-weight:600;opacity:1;}
  html[data-theme="dark"] .space-btn.active{background:var(--primary);color:#23211E;}
  .space-dot{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 0 0 2px rgba(255,255,255,.22);}
  .space-btn.active .space-dot{box-shadow:none;filter:brightness(.55) saturate(1.4);}
  .tag.space{background:var(--bg-sunk);color:var(--ink-soft);display:inline-flex;align-items:center;gap:5px;}
  .tag.space .space-dot{width:7px;height:7px;box-shadow:none;}
  .tag.urgent{background:var(--brick-soft);color:var(--brick);font-weight:600;}
  #quick-urgent{flex:none;align-self:center;}
  .split-bar{display:flex;height:9px;border-radius:var(--pill);overflow:hidden;background:var(--bg-sunk);margin-top:10px;}
  .split-seg{height:100%;}
  .split-legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:12px;color:var(--ink-soft);}
  .split-legend span{display:inline-flex;align-items:center;gap:6px;}
  .split-legend i{width:8px;height:8px;border-radius:50%;display:inline-block;}
  .space-admin{padding:12px 0;}
  .space-admin + .space-admin{border-top:1px solid var(--line-soft);}
  .space-admin-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
  .space-admin-top input[type=text]{flex:1;min-width:150px;}
  .swatches{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0 0 19px;}
  .swatch{width:22px;height:22px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0;
    box-shadow:inset 0 0 0 1px rgba(0,0,0,.12);transition:transform .12s ease, border-color .12s ease;}
  .swatch:hover{transform:scale(1.12);}
  .swatch.sel{border-color:var(--ink);transform:scale(1.12);}
  .sync-line{display:flex;align-items:center;gap:8px;font-size:11.5px;opacity:.7;padding:0 10px 4px;}
  .sync-dot{width:8px;height:8px;border-radius:50%;flex:none;background:#8B978F;transition:background .3s ease;}
  .sync-dot.state-ok{background:#8FBF7A;}
  .sync-dot.state-syncing{background:#E0C07A;animation:sync-pulse 1.1s ease-in-out infinite;}
  .sync-dot.state-offline{background:#B9A88E;}
  .sync-dot.state-auth,.sync-dot.state-error{background:#D98A63;}
  @keyframes sync-pulse{0%,100%{opacity:1;}50%{opacity:.35;}}
  ::-webkit-scrollbar{width:10px;height:10px;}
  ::-webkit-scrollbar-track{background:transparent;}
  ::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--ink) 18%, transparent);border-radius:var(--pill);}
  ::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb, var(--ink) 28%, transparent);}
/* ═════════════════════════════════════════════════════════════════════
   Оболочка: шапка, нижние вкладки, шторки, выпадающий список сфер
   ═════════════════════════════════════════════════════════════════════ */

/* --- Шапка над содержимым --- */
.appbar{
  display:flex;align-items:center;gap:10px;margin:0 0 18px;min-width:0;
}
.space-pick{
  display:none;align-items:center;gap:8px;min-width:0;max-width:60%;
  background:var(--bg-elev);border:1px solid var(--line);color:var(--ink);
  border-radius:var(--pill);padding:9px 14px;font:inherit;font-size:14px;cursor:pointer;
}
.space-pick .space-dot{box-shadow:none;}
.space-pick-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;}
.space-pick-caret{opacity:.6;flex:none;}
.search-top{
  flex:1;min-width:0;max-width:440px;
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--pill);
  padding:10px 18px;font-size:13.5px;
}
.appbar-btn{
  display:none;flex:none;width:44px;height:44px;align-items:center;justify-content:center;
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--pill);
  color:var(--ink);font-size:17px;cursor:pointer;
}
.appbar-btn:hover{border-color:var(--primary);}
/* На широком экране в шапке остаётся только поиск — и он уходит вправо,
   чтобы не спорить с заголовком экрана за левый край. */
@media (min-width:881px){
  .appbar{justify-content:flex-end;margin-bottom:10px;}
}

/* --- Мини-таймер строкой (телефон) --- */
.mini-timer-bar{
  display:none;align-items:center;gap:10px;width:100%;
  background:var(--primary-soft);border:none;border-radius:var(--radius);
  color:var(--ink);padding:10px 16px;margin:0 0 14px;font:inherit;font-size:13px;
  cursor:pointer;text-align:left;min-height:46px;
}
.mini-timer-bar[hidden]{display:none !important;}
.mtb-dot{width:9px;height:9px;border-radius:50%;background:var(--primary);flex:none;animation:sync-pulse 1.8s ease-in-out infinite;}
.mini-timer-bar.break .mtb-dot{background:var(--amber);}
.mtb-time{font-family:var(--font-display);font-size:17px;letter-spacing:.01em;flex:none;}
.mtb-task{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-soft);}
.mtb-go{flex:none;opacity:.6;}

/* --- «Ещё» в боковой панели --- */
.nav-ic{width:20px;flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:14px;}
.nav-label{min-width:0;overflow:hidden;text-overflow:ellipsis;}
.nav-more{display:flex;flex-direction:column;gap:4px;margin-left:12px;}
.nav-more[hidden]{display:none;}
.nav-more-toggle.on{background:rgba(255,255,255,.14);}

/* --- Нижние вкладки --- */
.tabbar{display:none;}
.tab-btn{
  flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  background:none;border:none;color:var(--ink-soft);font:inherit;font-size:13px;cursor:pointer;
  padding:6px 2px;min-height:52px;position:relative;border-radius:var(--radius-s);
  transition:color .2s ease;
}
.tab-ic{font-size:19px;line-height:1;}
.tab-lbl{font-size:13px;letter-spacing:.01em;overflow:hidden;text-overflow:ellipsis;max-width:100%;white-space:nowrap;}
.tab-btn.active{color:var(--primary-dark);font-weight:600;}
html[data-theme="dark"] .tab-btn.active{color:var(--primary);}
.tab-btn.active .tab-ic{transform:translateY(-1px);}
/* Идёт сессия — на вкладке вместо значка виден остаток времени. */
.tab-badge{
  position:absolute;top:4px;left:50%;transform:translateX(-50%);
  background:var(--primary);color:var(--primary-ink);border-radius:var(--pill);
  font-family:var(--font-display);font-size:13px;font-weight:600;padding:0 7px;line-height:1.5;
}
.tab-btn:has(.tab-badge:not([hidden])) .tab-ic{visibility:hidden;}
.tab-badge.break{background:var(--amber);}
.tab-badge[hidden]{display:none;}

/* --- Затемнение под шторками --- */
.scrim{
  position:fixed;inset:0;background:rgba(32,30,29,.42);z-index:90;
  opacity:0;pointer-events:none;transition:opacity .22s ease;
}
.scrim.open{opacity:1;pointer-events:auto;}

/* --- Шторка снизу --- */
.sheet{
  position:fixed;left:0;right:0;bottom:0;z-index:95;
  background:var(--bg-elev);border-radius:var(--radius-l) var(--radius-l) 0 0;
  box-shadow:0 -10px 40px rgba(0,0,0,.28);
  max-height:min(78vh, 640px);display:flex;flex-direction:column;
  transform:translateY(102%);transition:transform .26s cubic-bezier(.32,.72,0,1);
  padding-bottom:env(safe-area-inset-bottom);
}
.sheet.open{transform:translateY(0);}
.sheet.dragging{transition:none;}
.sheet-grip{
  flex:none;display:flex;align-items:center;justify-content:center;
  padding:10px 0 4px;cursor:grab;touch-action:none;
}
.sheet-grip>span{display:block;width:44px;height:5px;border-radius:var(--pill);background:color-mix(in srgb, var(--ink) 22%, transparent);}
.sheet-head{
  flex:none;font-family:var(--font-display);font-size:17px;font-weight:600;
  padding:4px 20px 10px;color:var(--ink);touch-action:none;
}
.sheet-body{overflow:auto;padding:0 12px 14px;-webkit-overflow-scrolling:touch;}
.sheet-item{
  display:flex;align-items:center;gap:14px;width:100%;min-height:52px;
  background:none;border:none;color:var(--ink);font:inherit;font-size:15px;
  padding:10px 12px;border-radius:var(--radius);cursor:pointer;text-align:left;
}
.sheet-item:hover,.sheet-item:active{background:color-mix(in srgb, var(--ink) 6%, transparent);}
.sheet-item.on{background:var(--primary-soft);}
.sheet-ic{flex:none;width:26px;text-align:center;font-size:17px;opacity:.85;}
.sheet-text{flex:1;min-width:0;display:flex;flex-direction:column;}
.sheet-text b{font-weight:600;font-size:15px;}
.sheet-text i{font-style:normal;font-size:12.5px;color:var(--ink-faint);margin-top:1px;}
.sheet-go{flex:none;opacity:.4;font-size:18px;}

/* --- Выпадающий список сфер --- */
.space-menu{
  position:fixed;z-index:96;display:none;flex-direction:column;gap:2px;
  min-width:210px;max-width:calc(100vw - 24px);max-height:60vh;overflow:auto;
  background:var(--bg-elev);border-radius:var(--radius);box-shadow:var(--shadow);padding:8px;
}
.space-menu.open{display:flex;}
.space-menu-item{
  display:flex;align-items:center;gap:10px;width:100%;min-height:44px;
  background:none;border:none;color:var(--ink);font:inherit;font-size:14px;
  padding:8px 12px;border-radius:var(--pill);cursor:pointer;text-align:left;
}
.space-menu-item:hover{background:color-mix(in srgb, var(--ink) 7%, transparent);}
.space-menu-item.active{background:var(--primary-soft);font-weight:600;}
.space-menu-item .space-dot{box-shadow:none;}
.space-menu-check{margin-left:auto;color:var(--primary-dark);}
html[data-theme="dark"] .space-menu-check{color:var(--primary);}

/* --- Место под помощника --- */
.ai-slot{margin:0 0 18px;}
.ai-slot:empty{display:none;}
.ai-slot-empty{
  display:flex;align-items:center;gap:10px;
  border:1.5px dashed var(--line);border-radius:var(--radius-l);
  padding:16px 20px;color:var(--ink-faint);font-size:13px;
}
.ai-slot-mark{font-size:15px;opacity:.7;flex:none;}

/* --- Карточка помощника ---
   Отличается от обычной карточки ровно одним: тонкой рамкой цвета сферы
   слева. Этого хватает, чтобы совет читался как чужая реплика, а не как
   ещё один посчитанный блок приложения. */
.ai-card{
  background:var(--bg-elev);border:1px solid var(--line);
  border-left:3px solid var(--primary);
  border-radius:var(--radius);padding:14px 18px;box-shadow:var(--shadow-s);
}
.ai-card.is-plain{border-left-width:1px;}
.ai-card.is-plain>.ai-block,.ai-card.is-plain>.ai-tip{margin-top:12px;}
.ai-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.ai-mark{color:var(--primary);font-size:14px;flex:none;}
.ai-kicker{font-weight:700;font-size:13px;letter-spacing:.01em;}
/* Знак и заголовок держатся вместе: на узком экране переносится
   всё остальное, а не заголовок от своей звёздочки. */
.ai-title{display:flex;align-items:baseline;gap:8px;min-width:0;}
.ai-meta{font-size:12px;color:var(--ink-faint);}
.ai-mini{
  background:none;border:none;padding:4px 6px;margin:0;cursor:pointer;
  color:var(--ink-faint);font:inherit;font-size:12px;text-decoration:underline;
  text-underline-offset:3px;border-radius:6px;
}
.ai-mini:hover{color:var(--ink);}
.ai-head .ai-mini{margin-left:auto;}
.ai-body{margin-top:10px;display:flex;flex-direction:column;gap:12px;}
.ai-card.is-collapsed .ai-body,.ai-card.is-collapsed .ai-foot{display:none;}
.ai-focus{font-size:15px;line-height:1.45;overflow-wrap:anywhere;}
.ai-block{display:flex;flex-direction:column;gap:6px;}
.ai-lbl{font-size:12px;color:var(--ink-faint);text-transform:lowercase;letter-spacing:.02em;}
.ai-order{margin:0;padding-left:20px;font-size:13.5px;line-height:1.6;overflow-wrap:anywhere;}
.ai-move-row{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:space-between;
  background:var(--bg);border-radius:10px;padding:8px 12px;
}
.ai-move-text{font-size:13.5px;overflow-wrap:anywhere;flex:1;min-width:0;}
.ai-tip{display:flex;gap:8px;font-size:13.5px;line-height:1.5;color:var(--ink-soft);overflow-wrap:anywhere;}
.ai-tip-ic{color:var(--primary);flex:none;}
.ai-mood{font-size:13px;color:var(--ink-faint);font-style:italic;overflow-wrap:anywhere;}
.ai-foot{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-top:12px;padding-top:10px;border-top:1px solid var(--line-soft);
}
.ai-rate-lbl,.ai-rated{font-size:12.5px;color:var(--ink-faint);}
.ai-rated{color:var(--moss);}
.ai-foot .ai-mini{margin-left:auto;}
.ai-learn{flex-basis:100%;font-size:12px;color:var(--ink-faint);line-height:1.45;}
.ai-quiet-text{margin-top:8px;font-size:13.5px;color:var(--ink-soft);line-height:1.5;overflow-wrap:anywhere;}
.ai-card.is-quiet{border-left-color:var(--line);}
.ai-card.is-waiting{border-left-color:var(--line);}
/* Ожидание — не мигающий скелет, а медленный вдох-выдох одного знака.
   Тем, кто просил меньше движения, не мигает ничего. */
.ai-breathe{animation:ai-breathe 2.6s ease-in-out infinite;}
@keyframes ai-breathe{0%,100%{opacity:.35;}50%{opacity:1;}}
@media (prefers-reduced-motion:reduce){.ai-breathe{animation:none;opacity:.6;}}

/* Экран «Помощник» */
.ai-modes{display:flex;gap:8px;flex-wrap:wrap;}
.ai-mode-btn{
  flex:1;min-width:120px;cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;
  padding:10px 14px;border-radius:12px;border:1px solid var(--line);
  background:var(--bg);color:var(--ink-soft);transition:border-color .15s,color .15s;
}
.ai-mode-btn:hover{border-color:var(--primary);color:var(--ink);}
.ai-mode-btn.sel{background:var(--primary-soft);border-color:var(--primary);color:var(--primary-dark);}
html[data-theme="dark"] .ai-mode-btn.sel{color:var(--ink);}
.ai-facts{margin-top:14px;padding-top:12px;border-top:1px solid var(--line-soft);display:flex;flex-direction:column;gap:5px;}
.ai-fact{font-size:13px;color:var(--ink-soft);overflow-wrap:anywhere;}
#view-ai textarea{width:100%;resize:vertical;line-height:1.5;}

/* Напоминания в настройках */
/* Подписи у полей разной длины — выравниваем по нижнему краю,
   иначе одно поле уезжает вниз на высоту второй строки подписи. */
.notif-opts{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-end;margin-top:14px;}
.notif-opts.is-off{opacity:.5;}

/* --- Поиск --- */
.search-list{display:flex;flex-direction:column;gap:8px;}
.search-hit{
  display:block;width:100%;text-align:left;cursor:pointer;
  background:var(--bg-elev);border:none;border-radius:var(--radius-l);
  padding:16px 18px;box-shadow:var(--shadow-s);color:var(--ink);font:inherit;
  transition:box-shadow .2s ease;
}
.search-hit:hover{box-shadow:var(--shadow);}
.search-hit-title{font-size:15px;font-weight:600;line-height:1.35;overflow-wrap:anywhere;}
.search-hit-snip{font-size:13px;color:var(--ink-soft);margin-top:5px;overflow-wrap:anywhere;}
.search-hit .task-meta{margin-top:9px;}

/* --- Повторяющееся --- */
.rep-card{padding:6px 18px;}
.rep-row{
  display:flex;align-items:flex-start;gap:12px;padding:14px 0;
  border-bottom:1px solid var(--line-soft);
}
.rep-row:last-child{border-bottom:none;}
.rep-row.done .rep-title{color:var(--ink-faint);text-decoration:line-through;}
.rep-dot{width:10px;height:10px;border-radius:50%;flex:none;margin-top:6px;}
.rep-main{flex:1;min-width:0;}
.rep-title{font-size:15px;font-weight:600;line-height:1.35;overflow-wrap:anywhere;}
.rep-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;}
.rep-meta .tag{font-size:12px;font-weight:500;}
.rep-actions{display:flex;gap:4px;flex:none;}
.rep-actions .icon-mini{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;}

/* Кнопка «▶» на карточке задачи */
.icon-mini.icon-focus{color:var(--primary-dark);}
html[data-theme="dark"] .icon-mini.icon-focus{color:var(--primary);}

/* Длинные слова не должны распирать карточки ни на одной ширине. */
.task-title,.task-notes,.subtask-title,.note-tab,.mini-task,.rep-title,.sheet-text b{overflow-wrap:anywhere;}

/* ═══ Телефон: боковая панель уходит, снизу появляются вкладки ═══
   Раньше на узком экране боковая панель разворачивалась в две полосы,
   которые прокручивались вбок: до «Настроек» приходилось листать вслепую,
   и куда именно листать — не подсказывало ничего. Теперь пять вкладок
   внизу, всё остальное — в «Ещё», а борды — списком из шапки. */
@media (max-width:880px){
  html,body{overscroll-behavior-y:none;}
  body{padding-bottom:calc(58px + env(safe-area-inset-bottom));}
  html.kb-open body{padding-bottom:0;}
  .app{min-width:0;grid-template-columns:1fr;}
  .sidebar{display:none;}
  .main{padding:12px 14px 24px;max-width:100%;min-width:0;}

  .appbar{
    position:sticky;top:0;z-index:70;margin:-12px -14px 14px;padding:8px 14px;
    background:var(--bg);border-bottom:1px solid var(--line-soft);
  }
  .space-pick{display:inline-flex;flex:1;max-width:none;min-height:44px;}
  .search-top{display:none;}
  .appbar-btn{display:inline-flex;}
  .mini-timer-bar{display:flex;}
  .mini-timer-bar[hidden]{display:none !important;}

  .tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:88;
    gap:2px;padding:4px 6px calc(4px + env(safe-area-inset-bottom));
    background:var(--bg-elev);border-top:1px solid var(--line);
    box-shadow:0 -2px 14px rgba(0,0,0,.10);
    transition:transform .18s ease;
  }
  html[data-theme="dark"] .tabbar{box-shadow:0 -2px 14px rgba(0,0,0,.35);}
  /* Клавиатура поднимает низ окна: вместо прыгающей панели убираем её,
     пока идёт ввод, и возвращаем, как только поле отпустили. */
  html.kb-open .tabbar{transform:translateY(120%);}

  .topbar{flex-direction:column;align-items:stretch;gap:12px;margin-bottom:18px;}
  .topbar h1{font-size:27px;}
  .topbar .row{flex-wrap:wrap;}
  /* Главное действие занимает строку целиком, вторичные делят её пополам:
     иначе три кнопки подряд съедают экран до самой шкалы загрузки. */
  .topbar .icon-btn{flex:1 1 auto;min-height:44px;justify-content:center;text-align:center;}
  .topbar .btn{flex:1 1 100%;min-height:44px;justify-content:center;text-align:center;white-space:normal;}
  .topbar .btn.secondary{flex:1 1 44%;}
  .card{padding:18px 16px;}
  .week-grid{grid-template-columns:1fr;}
  .pomo-wrap{flex-direction:column;align-items:stretch;}
  .pomo-main{display:flex;flex-direction:column;align-items:center;}
  .pomo-side{min-width:0;width:100%;}
  .analysis-grid{grid-template-columns:1fr;}
  .summary-minigrid{grid-template-columns:repeat(2,1fr);}
  .field-row{flex-wrap:wrap;}
  .field-row>.field{flex:1 1 140px;min-width:0;}
  .month-grid{gap:4px;}
  .month-cell{min-height:62px;padding:5px 4px;}
  .ach-grid{grid-template-columns:1fr;}
  .stat-grid{gap:6px;}
  .stat-box{padding:12px 6px;}
  .modal{max-height:86vh;padding:20px 18px;}
  .modal h3{font-size:20px;}
  #toast-host{left:12px;right:12px;bottom:calc(70px + env(safe-area-inset-bottom));}
  .toast{max-width:none;}
  .space-menu{left:12px !important;right:12px;min-width:0;width:auto;}
  /* Строка сферы в настройках: название занимает всю ширину, остальное —
     следующей строкой. Иначе поле, счётчик, «скрыть» и крестик рвутся
     по одному на строку и читаются как четыре разных элемента. */
  .space-admin-top{gap:10px;}
  .space-admin-top input[type=text]{flex:1 1 160px;min-width:0;}
  .space-admin-top>.faint{flex:1 1 100%;}
  .swatches{margin-left:0;}

  /* Цели нажатия не меньше 44 точек и текст не мельче 13 px. */
  .btn,.icon-btn{min-height:44px;font-size:14px;}
  .btn.small{min-height:44px;min-width:44px;font-size:13px;}
  .icon-mini,.task-actions .icon-mini,.rep-actions .icon-mini,.routine-actions .icon-mini{
    width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;font-size:16px;
  }
  .subtask .icon-mini{width:44px;height:44px;}
  /* Кнопки карточки уезжают отдельной строкой вниз: пальцевые 44 точки
     на двух кнопках съедали бы треть ширины, и название с метками
     ломалось бы по одному слову в строку. */
  .task-top{flex-wrap:wrap;gap:10px;}
  .task-actions{order:3;width:100%;justify-content:flex-end;gap:2px;margin-top:2px;}
  .task .tag,.rep-meta .tag{padding:5px 10px;}
  .task-meta{gap:6px;}
  /* Кружки цвета сферы — тоже цель для пальца, а не только для мыши. */
  .swatch{width:44px;height:44px;}
  .swatches{gap:8px;}
  /* У флажков цель нажатия — обрамляющая метка: сам квадратик остаётся
     квадратиком, но нажать можно по всей строке. */
  input[type=checkbox]{width:24px;height:24px;flex:none;}
  label.row{min-height:44px;}
  .chip-opt{min-height:44px;display:inline-flex;align-items:center;font-size:13.5px;}
  .faint,.stat-lbl,.week-day-dow,.month-dow,.subtask-note,.routine-meta,
  .section-title,.brand-sub,.ach-desc,.ach-date,.mini-task,.space-switch-cap,.sync-line,
  .pause-widget .pause-kicker,.pomo-phase,.event-chip,.event-time,label,.note-tab,
  .summary-hero .big-lbl,.analysis-card h4,.stat-lbl{font-size:13px;}
  .check{font-size:15px;}
  .subtask .check{font-size:13px;}
  .tag{font-size:13px;}
  .task .tag,.rep-meta .tag,.subtask-meta .tag{font-size:13px;}
  .check{width:30px;height:30px;}
  .subtask .check{width:24px;height:24px;}
  .subtasks,.add-subtask-row{margin-left:22px;}
  input[type=text],input[type=number],input[type=date],input[type=time],input[type=search],select,textarea,.search-top{
    font-size:16px;min-height:44px;
  }

  /* Плавающее окно превращается в шторку: снизу, во всю ширину, с ручкой. */
  .float-panel.as-sheet{
    position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;max-width:none;
    max-height:min(80vh, calc(100vh - 56px));
    border-radius:var(--radius-l) var(--radius-l) 0 0;z-index:95;
    box-shadow:0 -10px 40px rgba(0,0,0,.28);
    padding-bottom:env(safe-area-inset-bottom);
    transform:translateY(102%);transition:transform .26s cubic-bezier(.32,.72,0,1);
  }
  .float-panel.as-sheet.open{display:flex;transform:translateY(0);}
  .float-panel.as-sheet.dragging{transition:none;}
  .float-panel.as-sheet .float-head{
    background:transparent;color:var(--ink);padding:0 18px 12px;cursor:default;touch-action:none;
  }
  .float-panel.as-sheet .float-head-title{font-size:17px;}
  .float-panel.as-sheet .float-head-actions button{width:40px;height:40px;font-size:20px;color:var(--ink-soft);}
  .float-panel.as-sheet .float-head-actions button:hover{background:color-mix(in srgb, var(--ink) 8%, transparent);}
  /* Свернуть шторку некуда — она и так внизу. */
  .float-panel.as-sheet #notes-min,.float-panel.as-sheet #routines-min{display:none;}
  .float-panel.as-sheet .float-body{padding:0 18px 18px;background:transparent;}
  .note-body-input{min-height:150px;}
}

/* Ручка шторки нужна только на телефоне: у окна её роль играет шапка. */
.float-panel>.sheet-grip{display:none;}
@media (max-width:880px){
  .float-panel.as-sheet>.sheet-grip{display:flex;}
}

/* Совсем узкие экраны: подписи вкладок ужимаются, но не исчезают. */
@media (max-width:359px){
  .tab-btn{padding-left:0;padding-right:0;}
  .main{padding-left:10px;padding-right:10px;}
  .appbar{margin-left:-10px;margin-right:-10px;padding-left:10px;padding-right:10px;}
}

/* ═══════════════ Безопасность: второй шаг, устройства, журнал ═══════════════
   Экран рисуется целиком из views/security.js, поэтому все его классы
   собраны здесь одним куском. Ни одного inline-обработчика в разметке нет —
   политика безопасности сервера таких не пропускает. */

.sec-alarm{border-color:var(--brick);background:var(--brick-soft);color:var(--brick);margin-bottom:12px;}
.sec-note{font-size:13px;line-height:1.5;color:var(--ink-soft);}
.sec-error{color:var(--brick);font-size:13px;margin:2px 0 10px;min-height:0;}
.sec-form{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);}

/* ── настройка второго шага: QR и секрет ── */
.sec-setup{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap;}
.sec-setup-qr{flex:none;background:#fff;padding:10px;border-radius:var(--radius-s);
  border:1px solid var(--line);line-height:0;}
.sec-setup-body{flex:1 1 260px;min-width:0;}
.qr-svg{display:block;width:220px;height:220px;max-width:100%;}
/* Секрет — крупным моноширинным и с разбивкой по четыре: его набирают
   руками, глядя то на экран, то на телефон. */
.sec-secret{font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;
  background:var(--bg-sunk);border-radius:var(--radius-s);padding:10px 12px;
  overflow-wrap:break-word;user-select:all;flex:1 1 200px;}

/* ── резервные коды ── */
.sec-codes{border:2px solid var(--primary);background:var(--primary-soft);margin-bottom:14px;}
html[data-theme="dark"] .sec-codes{background:var(--primary-soft);}
.sec-codes-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));
  gap:8px 14px;margin:0;padding-left:24px;}
.sec-codes-list li{font-family:var(--font-mono);font-size:16px;letter-spacing:.06em;
  user-select:all;color:var(--ink);}

/* ── устройства ── */
.sec-list{display:flex;flex-direction:column;}
.sec-row{display:flex;align-items:center;gap:12px;justify-content:space-between;
  padding:12px 0;border-bottom:1px solid var(--line-soft);flex-wrap:wrap;}
.sec-row:last-child{border-bottom:none;}
.sec-row.is-current{background:var(--primary-soft);margin:0 -10px;padding-left:10px;padding-right:10px;
  border-radius:var(--radius-s);border-bottom-color:transparent;}
.sec-row-main{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:3px;}
.sec-row-main .tag{align-self:flex-start;}

/* ── журнал ──
   Таблица не ужимается до нечитаемого: на узком экране она прокручивается
   вбок в своём окне, а страница при этом стоит на месте. */
.sec-log-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.sec-log{width:100%;border-collapse:collapse;font-size:13px;min-width:420px;}
.sec-log th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.06em;
  color:var(--ink-faint);font-weight:700;padding:0 10px 8px 0;white-space:nowrap;}
.sec-log td{padding:7px 10px 7px 0;border-top:1px solid var(--line-soft);vertical-align:top;}
.sec-log tr.bad td{background:var(--brick-soft);}
.sec-log tr.bad td:first-child{border-radius:var(--radius-s) 0 0 var(--radius-s);}
.sec-log tr.bad td:last-child{border-radius:0 var(--radius-s) var(--radius-s) 0;}
.sec-ip{font-family:var(--font-mono);font-size:12px;white-space:nowrap;}
.sec-outcome{font-weight:600;white-space:nowrap;}
.sec-outcome.success{color:var(--primary-dark);}
html[data-theme="dark"] .sec-outcome.success{color:var(--primary);}
.sec-outcome.password_ok{color:var(--amber);}
.sec-outcome.bad_password,.sec-outcome.bad_code,.sec-outcome.blocked{color:var(--brick);}

@media (max-width:880px){
  .sec-setup{gap:14px;}
  .sec-setup-qr{margin:0 auto;}
  .qr-svg{width:min(240px,72vw);height:min(240px,72vw);}
  .sec-secret{font-size:16px;flex:1 1 100%;}
  .sec-codes-list li{font-size:17px;}
  .sec-row{padding:14px 0;}
  .sec-row .btn{min-height:44px;}
  .sec-log{font-size:14px;}
}
