{"id":7,"date":"2025-09-04T11:07:27","date_gmt":"2025-09-04T10:07:27","guid":{"rendered":"https:\/\/focus-tracker.panshiny.ru\/?page_id=7"},"modified":"2025-09-05T15:18:10","modified_gmt":"2025-09-05T14:18:10","slug":"h","status":"publish","type":"page","link":"https:\/\/focus-tracker.panshiny.ru\/","title":{"rendered":"H"},"content":{"rendered":"<p>[et_pb_section fb_built=&#187;1&#8243; _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;][et_pb_row _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;][et_pb_column type=&#187;4_4&#8243; _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;][et_pb_code _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; hover_enabled=&#187;0&#8243; global_colors_info=&#187;{}&#187; sticky_enabled=&#187;0&#8243;]<!doctype html><!-- [et_pb_line_break_holder] --><html lang=\"ru\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] --><meta charset=\"utf-8\" \/><!-- [et_pb_line_break_holder] --><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" \/><!-- [et_pb_line_break_holder] --><title>FocusScore \u2014 v12.9 (Smart Habits)<\/title><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->  :root{<!-- [et_pb_line_break_holder] -->    --bg:#f6f7fb; --card:#fff; --muted:#6b7280; --text:#0f172a; --accent:#2563eb; --accent2:#0ea5e9; --ok:#10b981; --warn:#f59e0b; --border:#e5e7eb; --danger:#ef4444;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  *{box-sizing:border-box}<!-- [et_pb_line_break_holder] -->  html,body{height:100%}<!-- [et_pb_line_break_holder] -->  body{margin:0;font:14px\/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}<!-- [et_pb_line_break_holder] -->  .wrap{max-width:1240px;margin:0 auto;padding:20px}<!-- [et_pb_line_break_holder] -->  header{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}<!-- [et_pb_line_break_holder] -->  .title{font-weight:700;font-size:22px;letter-spacing:.2px}<!-- [et_pb_line_break_holder] -->  .cards{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:12px}<!-- [et_pb_line_break_holder] -->  .card{background:var(--card);border:1px solid var(--border);border-radius:14px;box-shadow:0 1px 2px rgba(0,0,0,.03)}<!-- [et_pb_line_break_holder] -->  .card h4{margin:12px 12px 0 12px;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}<!-- [et_pb_line_break_holder] -->  .card .val{padding:6px 12px 14px 12px;font-size:28px;font-weight:700}<!-- [et_pb_line_break_holder] -->  .section{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:16px}<!-- [et_pb_line_break_holder] -->  .muted{color:var(--muted)}<!-- [et_pb_line_break_holder] -->  .btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);background:transparent;border-radius:10px;padding:8px 12px;cursor:pointer;color:inherit; font-family: inherit; font-size: inherit;}<!-- [et_pb_line_break_holder] -->  .btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}<!-- [et_pb_line_break_holder] -->  .btn.small{padding:6px 10px;font-size:12px}<!-- [et_pb_line_break_holder] -->  .btn.danger{border-color:var(--danger); color:var(--danger)}<!-- [et_pb_line_break_holder] -->  .btn[disabled]{opacity:.5;cursor:not-allowed}<!-- [et_pb_line_break_holder] -->  .btnbar{display:flex;gap:8px;flex-wrap:wrap}<!-- [et_pb_line_break_holder] -->  .input, select{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:transparent;color:inherit; font-family: inherit; font-size: inherit;}<!-- [et_pb_line_break_holder] -->  .hr{height:1px;background:var(--border);margin:12px 0}<!-- [et_pb_line_break_holder] -->  input[type=range]{width:100%}<!-- [et_pb_line_break_holder] -->  input[type=number]{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:transparent;color:inherit}<!-- [et_pb_line_break_holder] -->  canvas{width:100%;height:280px;border:1px solid var(--border);border-radius:10px;background:transparent}<!-- [et_pb_line_break_holder] -->  #datePicker{border:1px solid var(--border); background:transparent; border-radius:10px; padding:5px 8px; color:inherit; font-family:inherit; font-size:12px;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  #syncStatus{position:fixed;bottom:0;left:0;width:100%;padding:8px;text-align:center;font-size:12px;color:#fff;z-index:2000;transition:transform .3s ease;transform:translateY(100%)}<!-- [et_pb_line_break_holder] -->  #syncStatus.visible{transform:translateY(0)}<!-- [et_pb_line_break_holder] -->  #syncStatus.syncing{background-color:var(--warn)}<!-- [et_pb_line_break_holder] -->  #syncStatus.synced{background-color:var(--ok)}<!-- [et_pb_line_break_holder] -->  #syncStatus.error{background-color:var(--danger)}<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  .grid{display:grid;grid-template-columns:2fr 1fr;gap:12px;margin-top:12px}<!-- [et_pb_line_break_holder] -->  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-top:8px}<!-- [et_pb_line_break_holder] -->  .cal-head{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-top:6px;color:var(--muted);font-size:12px; text-align:center;}<!-- [et_pb_line_break_holder] -->  .cal-cell{padding:10px 8px 20px;border:1px solid var(--border);border-radius:10px;background:#fff;cursor:pointer;position:relative;min-height:64px;display:flex;align-items:flex-start;justify-content:flex-start}<!-- [et_pb_line_break_holder] -->  .cal-cell:hover{box-shadow:0 1px 2px rgba(0,0,0,.03)}<!-- [et_pb_line_break_holder] -->  .cal-cell.dim{opacity:.5}<!-- [et_pb_line_break_holder] -->  .cal-cell.active{outline:2px solid var(--accent)}<!-- [et_pb_line_break_holder] -->  .cal-day{font-weight:600;font-size:14px}<!-- [et_pb_line_break_holder] -->  .cal-chip{position:absolute;bottom:6px;left:50%;transform:translateX(-50%);font-size:11px;border:1px solid var(--border);background:#fff;border-radius:999px;padding:2px 8px}<!-- [et_pb_line_break_holder] -->  .cal-bar{position:absolute;bottom:0;left:0;height:4px;background:var(--accent2);border-bottom-left-radius:10px;border-bottom-right-radius:10px}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  #rows .row{display:grid;grid-template-columns:1fr 4fr 90px;gap:10px;align-items:center;margin:10px 0}<!-- [et_pb_line_break_holder] -->  .warn{background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.35)}<!-- [et_pb_line_break_holder] -->  .legend{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px;font-size:12px;color:var(--muted)}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .habits-toolbar{display:flex;gap:8px;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap}<!-- [et_pb_line_break_holder] -->  .habits-toolbar .search{flex:1;min-width:200px}<!-- [et_pb_line_break_holder] -->  .habits{display:grid;grid-template-columns:1fr 1fr;gap:10px}<!-- [et_pb_line_break_holder] -->  .habit{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;padding:10px;border:1px solid var(--border);border-radius:12px;background:linear-gradient(180deg,#fff, #fafcff)}<!-- [et_pb_line_break_holder] -->  .habit .title{font-weight:600;margin-bottom:2px}<!-- [et_pb_line_break_holder] -->  .habit .meta{font-size:12px;color:var(--muted); display: flex; flex-wrap: wrap; gap: 6px; align-items: center;}<!-- [et_pb_line_break_holder] -->  .habit .desc{font-size:12px;color:var(--muted); margin-top:4px;}<!-- [et_pb_line_break_holder] -->  .lvl-badge{font-size:12px;border:1px solid var(--border);padding:2px 8px;border-radius:999px;background:#fff}<!-- [et_pb_line_break_holder] -->  .hbar{height:8px;border-radius:999px;overflow:hidden;border:1px solid var(--border);background:rgba(2,132,199,.12)}<!-- [et_pb_line_break_holder] -->  .hbar>div{height:100%;background:var(--accent2)}<!-- [et_pb_line_break_holder] -->  .hab-group{margin-top:8px}<!-- [et_pb_line_break_holder] -->  .hab-group>summary, details.qa-group > summary {font-weight:600; cursor: pointer;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .hab-progress{display:flex;align-items:center;gap:10px;margin:8px 0 12px}<!-- [et_pb_line_break_holder] -->  .hab-progress .bar{flex:1;height:12px;border:1px solid var(--border);border-radius:999px;overflow:hidden;background:rgba(16,185,129,.12)}<!-- [et_pb_line_break_holder] -->  .hab-progress .bar>div{height:100%;background:linear-gradient(90deg,var(--ok),var(--accent2))}<!-- [et_pb_line_break_holder] -->  .hab-progress .stat{width:84px;text-align:right;font-weight:700}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .modal{position:fixed;inset:0;background:rgba(0,0,0,.45);display:none;align-items:center;justify-content:center;padding:20px; z-index: 1000;}<!-- [et_pb_line_break_holder] -->  .modal.open{display:flex}<!-- [et_pb_line_break_holder] -->  .modal-card{background:var(--card);color:var(--text);border:1px solid var(--border);border-radius:16px;max-width:980px;width:100%;max-height:90vh;overflow:auto;padding:16px}<!-- [et_pb_line_break_holder] -->  .kbar{display:grid;grid-template-columns:32px 1fr 90px 90px 110px 90px;gap:8px;align-items:center; margin-bottom: 6px;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  @media (max-width: 1024px){<!-- [et_pb_line_break_holder] -->    .cards{grid-template-columns:repeat(2,1fr)}<!-- [et_pb_line_break_holder] -->    .grid{grid-template-columns:1fr}<!-- [et_pb_line_break_holder] -->    .grid2{grid-template-columns:1fr}<!-- [et_pb_line_break_holder] -->    #rows .row{grid-template-columns:1fr 1fr 80px}<!-- [et_pb_line_break_holder] -->    canvas{height:240px}<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  @media (max-width: 640px){<!-- [et_pb_line_break_holder] -->    .wrap{padding:14px; margin-bottom: 30px;}<!-- [et_pb_line_break_holder] -->    .title{font-size:18px}<!-- [et_pb_line_break_holder] -->    .cards{grid-template-columns:1fr}<!-- [et_pb_line_break_holder] -->    .btn.small{padding:8px 10px}<!-- [et_pb_line_break_holder] -->    #rows .row{grid-template-columns:1fr;gap:8px}<!-- [et_pb_line_break_holder] -->    #rows .row input[type=range]{height:34px}<!-- [et_pb_line_break_holder] -->    input[type=number]{max-width:120px}<!-- [et_pb_line_break_holder] -->    .habits{grid-template-columns:1fr}<!-- [et_pb_line_break_holder] -->    .calendar{gap:6px}<!-- [et_pb_line_break_holder] -->    .cal-cell{min-height:56px}<!-- [et_pb_line_break_holder] -->    canvas{height:200px}<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] -->  <\/p>\n<div id=\"syncStatus\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"wrap\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<header><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"title\">FocusScore \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"btnbar\"><!-- [et_pb_line_break_holder] -->        <button id=\"openHabitStats\" class=\"btn\">\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043a<\/button><!-- [et_pb_line_break_holder] -->        <button id=\"openSettings\" class=\"btn\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/button><!-- [et_pb_line_break_holder] -->        <button id=\"exportCSV\" class=\"btn\">\u042d\u043a\u0441\u043f\u043e\u0440\u0442 CSV<\/button><!-- [et_pb_line_break_holder] -->        <button id=\"exportJSON\" class=\"btn\">\u042d\u043a\u0441\u043f\u043e\u0440\u0442 JSON<\/button><!-- [et_pb_line_break_holder] -->        <label class=\"btn\" for=\"importFile\">\u0418\u043c\u043f\u043e\u0440\u0442 JSON<\/label><!-- [et_pb_line_break_holder] -->        <input id=\"importFile\" type=\"file\" accept=\"application\/json\" style=\"display:none\" \/><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/header>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"cards\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"card\">\n<h4>\u0418\u0442\u043e\u0433 \u0437\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f<\/h4>\n<div class=\"val\" id=\"kpiToday\">\u2014<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"card\">\n<h4>\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u0430 7 \u0434\u043d\u0435\u0439<\/h4>\n<div class=\"val\" id=\"kpiWeek\">\u2014<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"card\">\n<h4>\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446<\/h4>\n<div class=\"val\" id=\"kpiMonth\">\u2014<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"card\">\n<h4>\u0414\u0435\u0444\u0438\u0446\u0438\u0442\u043e\u0432 \u0441\u0435\u0433\u043e\u0434\u043d\u044f<\/h4>\n<div class=\"val\" id=\"kpiDef\">\u2014<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"section\" style=\"margin-top:12px\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"btnbar\" style=\"align-items:center\"><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" id=\"prevDay\">\u25c0<\/button><!-- [et_pb_line_break_holder] -->        <input type=\"date\" id=\"datePicker\" \/><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" id=\"nextDay\">\u25b6<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" id=\"todayBtn\">\u0421\u0435\u0433\u043e\u0434\u043d\u044f<\/button><!-- [et_pb_line_break_holder] -->        <span class=\"muted\" id=\"todayLabel\"><\/span><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"miniCalendar\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"grid\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<section class=\"section\" id=\"input\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 style=\"margin:0 0 8px 0\">\u0412\u0432\u043e\u0434 \u0437\u0430 \u0434\u0435\u043d\u044c (\u0430\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435)<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"muted\" style=\"margin-bottom:8px\">\u0428\u043a\u0430\u043b\u0430 0\u2013100. \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"rows\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/section>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<aside class=\"section\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 style=\"margin:0 0 8px 0\">\u0427\u0442\u043e \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u0441\u0435\u0433\u043e\u0434\u043d\u044f<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"deficitsBox\" class=\"list\">\n<div class=\"muted\">\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<h4 style=\"margin:0 0 8px 0\">\u0411\u044b\u0441\u0442\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u043a\u0430\u0436\u0434\u043e\u0435 \u2014 1 \u0440\u0430\u0437\/\u0434\u0435\u043d\u044c)<\/h4>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"quickBox\" class=\"list\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/aside>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<section class=\"section\" id=\"habits\" style=\"margin-top:12px\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"habits-toolbar\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"muted\">\u0422\u0440\u0435\u043a\u0435\u0440 \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043a<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <input id=\"habSearch\" class=\"input search\" placeholder=\"\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430\u043c\" \/><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"btnbar\"><!-- [et_pb_line_break_holder] -->          <button class=\"btn small\" id=\"habCollapse\">\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"btn small\" id=\"habExpand\">\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"hab-progress\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"bar\">\n<div id=\"habitsProgressBar\" style=\"width:0%\"><\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"stat\" id=\"habitsProgressStat\">0\/0<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83e\udde0 \u0423\u043c \u0438 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"habits\" id=\"group-mind\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83d\udcac \u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f<\/summary>\n<div class=\"habits\" id=\"group-comm\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83c\udfaf \u0420\u0430\u0431\u043e\u0442\u0430 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c<\/summary>\n<div class=\"habits\" id=\"group-work\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83d\udcaa \u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 \u0438 \u0442\u0435\u043b\u043e<\/summary>\n<div class=\"habits\" id=\"group-body\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83e\uddd8 \u042d\u043c\u043e\u0446\u0438\u0438 \u0438 \u043f\u0441\u0438\u0445\u043e\u043b\u043e\u0433\u0438\u044f<\/summary>\n<div class=\"habits\" id=\"group-psy\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83c\udf00 \u0422\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u0430<\/summary>\n<div class=\"habits\" id=\"group-crea\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83d\udcc8 \u0421\u0430\u043c\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"habits\" id=\"group-learn\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83c\udfe0 \u0411\u044b\u0442 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a<\/summary>\n<div class=\"habits\" id=\"group-home\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83d\udcb5 \u0424\u0438\u043d\u0430\u043d\u0441\u044b \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b<\/summary>\n<div class=\"habits\" id=\"group-fin\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<details class=\"hab-group\" open>\n<summary>\ud83c\udf0d \u0411\u0430\u043b\u0430\u043d\u0441 \u0438 \u0434\u0443\u0445\u043e\u0432\u043d\u043e\u0441\u0442\u044c<\/summary>\n<div class=\"habits\" id=\"group-spirit\"><\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] -->    <\/section>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<section class=\"section\" style=\"margin-top:12px\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"periodbar\" style=\"display:flex;gap:6px;align-items:center;margin:6px 0 12px 0\"><!-- [et_pb_line_break_holder] -->        <span class=\"muted\">\u041f\u0435\u0440\u0438\u043e\u0434:<\/span><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" data-period=\"7\">7\u0434<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" data-period=\"14\">14\u0434<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" data-period=\"30\">30\u0434<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" data-period=\"90\">90\u0434<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"btn small\" data-period=\"180\">180\u0434<\/button><!-- [et_pb_line_break_holder] -->        <span class=\"muted\" id=\"periodHint\"><\/span><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"grid2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"muted\" style=\"margin-bottom:6px\">\u041b\u0438\u043d\u0438\u0438 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <canvas id=\"chartMulti\"><\/canvas><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"legend\" id=\"lineLegend\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"muted\" style=\"margin-bottom:6px\">\u041f\u0430\u0443\u0442\u0438\u043d\u0430: \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <canvas id=\"radarWeek\"><\/canvas><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"grid2\" style=\"margin-top:12px\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"muted\" style=\"margin-bottom:6px\">\u0421\u0440\u0435\u0434\u043d\u0438\u0435 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div id=\"weekBars\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"muted\" style=\"margin-bottom:6px\">\u0421\u0440\u0435\u0434\u043d\u0438\u0435 \u0437\u0430 30 \u0434\u043d\u0435\u0439 (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c)<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div id=\"monthBars\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/section>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"muted\" style=\"margin-top:14px; text-align:center;\">\u00a9 2025 FocusScore<\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/p>\n<div id=\"settingsModal\" class=\"modal\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"modal-card\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:8px\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 style=\"margin:0\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"btnbar\"><button id=\"closeSettings\" class=\"btn\">\u0417\u0430\u043a\u0440\u044b\u0442\u044c<\/button><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<h4 style=\"margin:8px 0\">\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<\/h4>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"catList\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"btnbar\" style=\"margin-top:8px\"><!-- [et_pb_line_break_holder] -->        <input id=\"newCatName\" class=\"input\" placeholder=\"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438\" style=\"max-width:240px\" \/><!-- [et_pb_line_break_holder] -->        <input id=\"newCatDaily\" class=\"input\" type=\"number\" placeholder=\"\u041c\u0438\u043d\/\u0434\u0435\u043d\u044c (0-100)\" style=\"max-width:160px\" \/><!-- [et_pb_line_break_holder] -->        <input id=\"newCatWeekly\" class=\"input\" type=\"number\" placeholder=\"\u041c\u0438\u043d\/\u043d\u0435\u0434 (0-100)\" style=\"max-width:160px\" \/><!-- [et_pb_line_break_holder] -->        <button id=\"addCat\" class=\"btn primary\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e<\/button><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<h4 style=\"margin:8px 0\">\u0411\u044b\u0441\u0442\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u0444\u043e\u0440\u043c\u0430\u0442: \u00ab\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (+10)\u00bb)<\/h4>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"qaEditor\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<h4 style=\"margin:8px 0\">\u041f\u0440\u0438\u0432\u044b\u0447\u043a\u0438<\/h4>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"habEditor\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"addHabitForm\" style=\"display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 8px; margin-top: 8px; border: 1px solid var(--border); border-radius: 12px; padding: 10px;\"><!-- [et_pb_line_break_holder] -->          <input id=\"newHabName\" class=\"input\" placeholder=\"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0438\" style=\"grid-column: 1 \/ -1;\" \/><!-- [et_pb_line_break_holder] -->          <select id=\"newHabGroup\" class=\"input\" style=\"grid-column: 1 \/ span 2;\"><\/select><!-- [et_pb_line_break_holder] -->          <select id=\"newHabFrequency\" class=\"input\"><\/select><!-- [et_pb_line_break_holder] -->          <textarea id=\"newHabDesc\" class=\"input\" placeholder=\"\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)\" style=\"grid-column: 1 \/ -1; height: 60px;\"><\/textarea><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"btnbar\" style=\"margin-top:8px\"><!-- [et_pb_line_break_holder] -->        <button id=\"addHabit\" class=\"btn primary\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0443<\/button><!-- [et_pb_line_break_holder] -->        <button id=\"bulkHabits\" class=\"btn\">\u0418\u043c\u043f\u043e\u0440\u0442 \u0441\u043f\u0438\u0441\u043a\u043e\u043c<\/button><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"muted\">\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443. \u042d\u043a\u0441\u043f\u043e\u0440\u0442\/\u0438\u043c\u043f\u043e\u0440\u0442 \u2014 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439.<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u041d\u043e\u0432\u043e\u0435 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043a --><!-- [et_pb_line_break_holder] -->  <\/p>\n<div id=\"habitStatsModal\" class=\"modal\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"modal-card\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:8px\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 style=\"margin:0\">\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043a<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"btnbar\"><button id=\"closeHabitStats\" class=\"btn\">\u0417\u0430\u043a\u0440\u044b\u0442\u044c<\/button><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"habit-stats-content\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->\/\/ ====== \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438 \u0441\u0442\u0430\u0440\u0442 ======<!-- [et_pb_line_break_holder] -->let focus_score_ajax = {};<!-- [et_pb_line_break_holder] -->\/\/ \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u043d\u0430\u0439\u0434\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 WordPress, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0430<!-- [et_pb_line_break_holder] -->document.addEventListener('DOMContentLoaded', function() {<!-- [et_pb_line_break_holder] -->    const dataElement = document.getElementById('focus-score-ajax-data');<!-- [et_pb_line_break_holder] -->    if (dataElement && dataElement.textContent.trim().startsWith('{')) {<!-- [et_pb_line_break_holder] -->        focus_score_ajax = JSON.parse(dataElement.textContent);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    init(); \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a DOM \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const DEFAULT_CATS=[<!-- [et_pb_line_break_holder] -->  {id:'family', name:'\u0421\u0435\u043c\u044c\u044f', dailyMin:50, weeklyMin:60},<!-- [et_pb_line_break_holder] -->  {id:'health', name:'\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435', dailyMin:50, weeklyMin:60},<!-- [et_pb_line_break_holder] -->  {id:'sport', name:'\u0421\u043f\u043e\u0440\u0442', dailyMin:50, weeklyMin:60},<!-- [et_pb_line_break_holder] -->  {id:'leisure', name:'\u0414\u043e\u0441\u0443\u0433\/\u043e\u0442\u0434\u044b\u0445', dailyMin:40, weeklyMin:55},<!-- [et_pb_line_break_holder] -->  {id:'network', name:'\u041d\u0435\u0442\u0432\u043e\u0440\u043a\u0438\u043d\u0433', dailyMin:50, weeklyMin:60},<!-- [et_pb_line_break_holder] -->  {id:'invest', name:'\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0438', dailyMin:50, weeklyMin:60},<!-- [et_pb_line_break_holder] -->  {id:'pension', name:'\u041f\u0435\u043d\u0441\u0438\u044f\/\u0431\u0443\u0434\u0443\u0449\u0435\u0435', dailyMin:40, weeklyMin:55},<!-- [et_pb_line_break_holder] -->];<!-- [et_pb_line_break_holder] -->const DEFAULT_IDEAS={<!-- [et_pb_line_break_holder] -->  family:['\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u044b\u0439 \u0443\u0436\u0438\u043d 30 \u043c\u0438\u043d (+30)','\u0417\u0432\u043e\u043d\u043e\u043a \u0431\u043b\u0438\u0437\u043a\u043e\u043c\u0443 15 \u043c\u0438\u043d (+15)','\u041f\u0440\u043e\u0433\u0443\u043b\u043a\u0430 \u0432\u0434\u0432\u043e\u0451\u043c 20 \u043c\u0438\u043d (+20)'],<!-- [et_pb_line_break_holder] -->  health:['8 \u0441\u0442\u0430\u043a\u0430\u043d\u043e\u0432 \u0432\u043e\u0434\u044b (+10)','\u0421\u043e\u043d +30 \u043c\u0438\u043d (+20)','\u0414\u044b\u0445\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 10 \u043c\u0438\u043d (+10)'],<!-- [et_pb_line_break_holder] -->  sport:['\u0420\u0430\u0437\u043c\u0438\u043d\u043a\u0430 15 \u043c\u0438\u043d (+10)','\u0425\u043e\u0434\u044c\u0431\u0430 3\u043a \u0448\u0430\u0433\u043e\u0432 (+15)','\u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430 25 \u043c\u0438\u043d (+25)'],<!-- [et_pb_line_break_holder] -->  leisure:['\u041a\u043d\u0438\u0433\u0430 20 \u043c\u0438\u043d (+15)','\u041c\u0443\u0437\u044b\u043a\u0430\/\u043c\u0435\u0434\u0438\u0442\u0430\u0446\u0438\u044f 10 \u043c\u0438\u043d (+10)','\u0424\u0438\u043b\u044c\u043c\/\u0441\u0435\u0440\u0438\u044f \u0441 \u0441\u0435\u043c\u044c\u0451\u0439 (+20)'],<!-- [et_pb_line_break_holder] -->  network:['1 \u0437\u0432\u043e\u043d\u043e\u043a\/\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (+20)','\u041f\u043e\u0441\u0442 \u0432 \u043f\u0440\u043e\u0444.\u0447\u0430\u0442\u0435 (+10)','\u041a\u043e\u0444\u0435-\u0432\u0441\u0442\u0440\u0435\u0447\u0430 (+25)'],<!-- [et_pb_line_break_holder] -->  invest:['\u0420\u0435\u0432\u0438\u0437\u0438\u044f \u043f\u043e\u0440\u0442\u0444\u0435\u043b\u044f 15 \u043c\u0438\u043d (+15)','\u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0432\u0435\u0441\u0442-\u043f\u043b\u0430\u043d (+20)','\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0435 \u0432\u0438\u0434\u0435\u043e 20 \u043c\u0438\u043d (+15)'],<!-- [et_pb_line_break_holder] -->  pension:['\u041e\u0442\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432 \u0434\u043e\u043b\u0433\u043e\u0441\u0447\u0451\u0442 (+20)','\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e \u043f\u0435\u043d\u0441\u0438\u0438 (+10)','\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u0435\u0439 (+15)'],<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const ENTP_GROUPS={<!-- [et_pb_line_break_holder] -->  mind:'\ud83e\udde0 \u0423\u043c \u0438 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435',<!-- [et_pb_line_break_holder] -->  comm:'\ud83d\udcac \u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f',<!-- [et_pb_line_break_holder] -->  work:'\ud83c\udfaf \u0420\u0430\u0431\u043e\u0442\u0430 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c',<!-- [et_pb_line_break_holder] -->  body:'\ud83d\udcaa \u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435 \u0438 \u0442\u0435\u043b\u043e',<!-- [et_pb_line_break_holder] -->  psy:'\ud83e\uddd8 \u042d\u043c\u043e\u0446\u0438\u0438 \u0438 \u043f\u0441\u0438\u0445\u043e\u043b\u043e\u0433\u0438\u044f',<!-- [et_pb_line_break_holder] -->  crea:'\ud83c\udf00 \u0422\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u0430',<!-- [et_pb_line_break_holder] -->  learn:'\ud83d\udcc8 \u0421\u0430\u043c\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435',<!-- [et_pb_line_break_holder] -->  home:'\ud83c\udfe0 \u0411\u044b\u0442 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a',<!-- [et_pb_line_break_holder] -->  fin:'\ud83d\udcb5 \u0424\u0438\u043d\u0430\u043d\u0441\u044b \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b',<!-- [et_pb_line_break_holder] -->  spirit:'\ud83c\udf0d \u0411\u0430\u043b\u0430\u043d\u0441 \u0438 \u0434\u0443\u0445\u043e\u0432\u043d\u043e\u0441\u0442\u044c'<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const DEFAULT_HABIT_LISTS={<!-- [et_pb_line_break_holder] -->  mind:[{name:'\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c 3 \u043d\u043e\u0432\u044b\u0435 \u0438\u0434\u0435\u0438', frequency: 'daily'}],<!-- [et_pb_line_break_holder] -->  comm:[{name:'\u0420\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u0443', frequency: 'weekly'}],<!-- [et_pb_line_break_holder] -->  work:[{name:'\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044e \u0432 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435', frequency: 'weekly'}],<!-- [et_pb_line_break_holder] -->  body:[{name:'\u0421\u043f\u0430\u0442\u044c 7\u20138 \u0447\u0430\u0441\u043e\u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e', frequency: 'daily'}],<!-- [et_pb_line_break_holder] -->  psy:[{name:'\u041c\u0435\u0434\u0438\u0442\u0430\u0446\u0438\u044f \u0445\u043e\u0442\u044f \u0431\u044b 5 \u043c\u0438\u043d\u0443\u0442', frequency: 'daily'}],<!-- [et_pb_line_break_holder] -->  crea:[{name:'\u0420\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u043c\u0443 \u043d\u0430\u0432\u044b\u043a\u0443', frequency: 'monthly'}],<!-- [et_pb_line_break_holder] -->  learn:[{name:'\u0414\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e', frequency: 'weekly'}],<!-- [et_pb_line_break_holder] -->  home:[{name:'\u0414\u0435\u043b\u0430\u0442\u044c \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u00ab\u0434\u0435\u043d\u044c \u0437\u0430\u0431\u043e\u0442\u044b \u043e \u0434\u043e\u043c\u0435\u00bb', frequency: 'weekly'}],<!-- [et_pb_line_break_holder] -->  fin:[{name:'\u0420\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446 \u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0439 \u043e\u0431\u0437\u043e\u0440', frequency: 'monthly'}],<!-- [et_pb_line_break_holder] -->  spirit:[{name:'\u0420\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446 \u0443\u0435\u0437\u0436\u0430\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e', frequency: 'monthly'}]<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u0423\u0442\u0438\u043b\u0438\u0442\u044b ======<!-- [et_pb_line_break_holder] -->function fmtDate(d){<!-- [et_pb_line_break_holder] -->    const year = d.getFullYear();<!-- [et_pb_line_break_holder] -->    const month = String(d.getMonth() + 1).padStart(2, '0');<!-- [et_pb_line_break_holder] -->    const day = String(d.getDate()).padStart(2, '0');<!-- [et_pb_line_break_holder] -->    return `${year}-${month}-${day}`;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function clamp(v,a,b){ return Math.max(a, Math.min(b, v)); }<!-- [et_pb_line_break_holder] -->function colorForScore(v){ v=clamp(v,0,100); const hue = v * 1.2; return `hsl(${hue}, 75%, 45%)`; }<!-- [et_pb_line_break_holder] -->function colorByIndex(i){ const hue=(i*57)%360; return `hsl(${hue}, 80%, 45%)`; }<!-- [et_pb_line_break_holder] -->function avg(arr){ return Math.round(arr.reduce((s,v)=>s+v,0)\/Math.max(arr.length,1)); }<!-- [et_pb_line_break_holder] -->function todayISO(){ return fmtDate(new Date()); }<!-- [et_pb_line_break_holder] -->function daysBack(n){ const d=new Date(); d.setDate(d.getDate()-n); return d; }<!-- [et_pb_line_break_holder] -->function monthStart(d){ return new Date(d.getFullYear(), d.getMonth(), 1); }<!-- [et_pb_line_break_holder] -->function addDays(d, n){ const x=new Date(d); x.setDate(x.getDate()+n); return x; }<!-- [et_pb_line_break_holder] -->function debounce(fn, ms){ let t; return (...args)=>{ clearTimeout(t); t=setTimeout(()=>fn(...args), ms); }; }<!-- [et_pb_line_break_holder] -->function actionKey(catId,label){ return `${catId}||${label}`; }<!-- [et_pb_line_break_holder] -->function getFrequencyText(freq) {<!-- [et_pb_line_break_holder] -->    switch(freq) {<!-- [et_pb_line_break_holder] -->        case 'weekly': return '\u0415\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e';<!-- [et_pb_line_break_holder] -->        case 'monthly': return '\u0415\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e';<!-- [et_pb_line_break_holder] -->        default: return '\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e';<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const syncIndicator = document.getElementById('syncStatus');<!-- [et_pb_line_break_holder] -->let syncTimeout;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function showSyncStatus(status, message) {<!-- [et_pb_line_break_holder] -->    clearTimeout(syncTimeout);<!-- [et_pb_line_break_holder] -->    syncIndicator.className = status;<!-- [et_pb_line_break_holder] -->    syncIndicator.textContent = message;<!-- [et_pb_line_break_holder] -->    syncIndicator.classList.add('visible');<!-- [et_pb_line_break_holder] -->    if (status !== 'syncing') {<!-- [et_pb_line_break_holder] -->        syncTimeout = setTimeout(() => {<!-- [et_pb_line_break_holder] -->            syncIndicator.classList.remove('visible');<!-- [et_pb_line_break_holder] -->        }, 3000);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== WordPress Integration: Data Storage ======<!-- [et_pb_line_break_holder] -->async function loadStore() {<!-- [et_pb_line_break_holder] -->    if (typeof focus_score_ajax === 'undefined' || !focus_score_ajax.ajax_url) {<!-- [et_pb_line_break_holder] -->        showSyncStatus('error', '\u041e\u0448\u0438\u0431\u043a\u0430! \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.');<!-- [et_pb_line_break_holder] -->        try { return JSON.parse(localStorage.getItem('focusScoreData_v12')) || {}; } catch (e) { return {}; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->        const url = new URL(focus_score_ajax.ajax_url);<!-- [et_pb_line_break_holder] -->        url.searchParams.append('timestamp', new Date().getTime());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const response = await fetch(url, {<!-- [et_pb_line_break_holder] -->            method: 'POST',<!-- [et_pb_line_break_holder] -->            headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },<!-- [et_pb_line_break_holder] -->            body: new URLSearchParams({<!-- [et_pb_line_break_holder] -->                'action': 'load_focus_score_data',<!-- [et_pb_line_break_holder] -->                'security': focus_score_ajax.nonce<!-- [et_pb_line_break_holder] -->            })<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        const result = await response.json();<!-- [et_pb_line_break_holder] -->        if (result.success) {<!-- [et_pb_line_break_holder] -->            return JSON.parse(result.data || '{}') || {};<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->             showSyncStatus('error', '\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438! \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.');<!-- [et_pb_line_break_holder] -->            return JSON.parse(localStorage.getItem('focusScoreData_v12')) || {};<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    } catch (e) {<!-- [et_pb_line_break_holder] -->        showSyncStatus('error', '\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0438! \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.');<!-- [et_pb_line_break_holder] -->        return JSON.parse(localStorage.getItem('focusScoreData_v12')) || {};<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const saveStore = debounce(function(obj) {<!-- [et_pb_line_break_holder] -->    const dataToSave = JSON.stringify(obj);<!-- [et_pb_line_break_holder] -->    showSyncStatus('syncing', '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435...');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (typeof focus_score_ajax === 'undefined' || !focus_score_ajax.ajax_url) {<!-- [et_pb_line_break_holder] -->        localStorage.setItem('focusScoreData_v12', dataToSave);<!-- [et_pb_line_break_holder] -->        showSyncStatus('error', '\u041e\u0448\u0438\u0431\u043a\u0430! \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.');<!-- [et_pb_line_break_holder] -->        return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    fetch(focus_score_ajax.ajax_url, {<!-- [et_pb_line_break_holder] -->        method: 'POST',<!-- [et_pb_line_break_holder] -->        headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },<!-- [et_pb_line_break_holder] -->        body: new URLSearchParams({<!-- [et_pb_line_break_holder] -->            'action': 'save_focus_score_data',<!-- [et_pb_line_break_holder] -->            'security': focus_score_ajax.nonce,<!-- [et_pb_line_break_holder] -->            'data': dataToSave<!-- [et_pb_line_break_holder] -->        })<!-- [et_pb_line_break_holder] -->    })<!-- [et_pb_line_break_holder] -->    .then(response => response.json())<!-- [et_pb_line_break_holder] -->    .then(result => {<!-- [et_pb_line_break_holder] -->        if (result.success) {<!-- [et_pb_line_break_holder] -->            showSyncStatus('synced', '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u043e\u043d\u043b\u0430\u0439\u043d');<!-- [et_pb_line_break_holder] -->            localStorage.removeItem('focusScoreData_v12_unsynced');<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->            localStorage.setItem('focusScoreData_v12_unsynced', dataToSave);<!-- [et_pb_line_break_holder] -->            showSyncStatus('error', '\u041e\u0448\u0438\u0431\u043a\u0430! \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    })<!-- [et_pb_line_break_holder] -->    .catch(e => {<!-- [et_pb_line_break_holder] -->        localStorage.setItem('focusScoreData_v12_unsynced', dataToSave);<!-- [et_pb_line_break_holder] -->        showSyncStatus('error', '\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0438! \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.');<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->}, 1500);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 ======<!-- [et_pb_line_break_holder] -->let currentDate = todayISO();<!-- [et_pb_line_break_holder] -->let currentScores = {};<!-- [et_pb_line_break_holder] -->let statsPeriod = 30;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c ======<!-- [et_pb_line_break_holder] -->function renderMiniCalendar(dateISO){<!-- [et_pb_line_break_holder] -->  const root=document.querySelector('#miniCalendar'); root.innerHTML='';<!-- [et_pb_line_break_holder] -->  const d = new Date(dateISO.replace(\/-\/g, '\/'));<!-- [et_pb_line_break_holder] -->  const ms=monthStart(d);<!-- [et_pb_line_break_holder] -->  const start = addDays(ms, -((ms.getDay()+6)%7));<!-- [et_pb_line_break_holder] -->  const titleDiv=document.createElement('div'); titleDiv.className='btnbar'; titleDiv.style.justifyContent = 'space-between';<!-- [et_pb_line_break_holder] -->  titleDiv.innerHTML=`<button class=\"btn small\" id=\"mcPrev\">\u25c0<\/button><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"muted\">${d.toLocaleString('ru-RU',{month:'long'})} ${d.getFullYear()}<\/div>\n<p><!-- [et_pb_line_break_holder] -->  <button class=\"btn small\" id=\"mcNext\">\u25b6<\/button>`;<!-- [et_pb_line_break_holder] -->  root.appendChild(titleDiv);<!-- [et_pb_line_break_holder] -->  const head=document.createElement('div'); head.className='cal-head'; head.innerHTML=['\u041f\u043d','\u0412\u0442','\u0421\u0440','\u0427\u0442','\u041f\u0442','\u0421\u0431','\u0412\u0441'].map(x=>`<\/p>\n<div>${x}<\/div>\n<p>`).join(''); root.appendChild(head);<!-- [et_pb_line_break_holder] -->  const grid=document.createElement('div'); grid.className='calendar'; root.appendChild(grid);<!-- [et_pb_line_break_holder] -->  const days=[]; for(let i=0;i<42;i++){ days.push(addDays(start,i)); }<!-- [et_pb_line_break_holder] -->  days.forEach(day=>{<!-- [et_pb_line_break_holder] -->    const iso=fmtDate(day);<!-- [et_pb_line_break_holder] -->    const cell=document.createElement('div'); cell.className='cal-cell';<!-- [et_pb_line_break_holder] -->    if(day.getMonth()!==d.getMonth()) cell.classList.add('dim');<!-- [et_pb_line_break_holder] -->    if(iso===currentDate) cell.classList.add('active');<!-- [et_pb_line_break_holder] -->    const scoreAvg = store.days[iso] ? catAvg(store.days[iso]) : 0;<!-- [et_pb_line_break_holder] -->    cell.innerHTML = `<\/p>\n<div class=\"cal-day\">${day.getDate()}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"cal-chip\">${scoreAvg}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"cal-bar\" style=\"width:${scoreAvg}%; background:${colorForScore(scoreAvg)}\"><\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->    cell.title=iso; cell.onclick=()=>{ loadDay(iso); };<!-- [et_pb_line_break_holder] -->    grid.appendChild(cell);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  document.querySelector('#mcPrev').onclick=()=>{ const prev=new Date(d.getFullYear(), d.getMonth()-1, 1); renderMiniCalendar(fmtDate(prev)); };<!-- [et_pb_line_break_holder] -->  document.querySelector('#mcNext').onclick=()=>{ const next=new Date(d.getFullYear(), d.getMonth()+1, 1); renderMiniCalendar(fmtDate(next)); };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u0414\u0435\u043d\u044c: ensure, load, setScore ======<!-- [et_pb_line_break_holder] -->function ensureDay(date){<!-- [et_pb_line_break_holder] -->  if(!store.days[date]){<!-- [et_pb_line_break_holder] -->    const scores={};<!-- [et_pb_line_break_holder] -->    store.cats.forEach(c => { scores[c.id] = 0; });<!-- [et_pb_line_break_holder] -->    store.days[date]=scores;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if(!store.quickApplied[date] || typeof store.quickApplied[date] !== 'object'){ store.quickApplied[date] = {}; }<!-- [et_pb_line_break_holder] -->  if(!store.habitDone[date]) store.habitDone[date] = {};<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function loadDay(date){<!-- [et_pb_line_break_holder] -->  ensureDay(date); currentDate=date; currentScores={...store.days[date]};<!-- [et_pb_line_break_holder] -->  document.querySelector('#datePicker').value=date; document.querySelector('#todayLabel').textContent=date;<!-- [et_pb_line_break_holder] -->  renderRows(); recompute(); renderMiniCalendar(date); drawAll(); renderHabits(); updateHabitsProgress();<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function setScore(catId, value){<!-- [et_pb_line_break_holder] -->  currentScores[catId]=value;<!-- [et_pb_line_break_holder] -->  store.days[currentDate]={...currentScores};<!-- [et_pb_line_break_holder] -->  saveStore(store);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const rowToUpdate = document.querySelector(`#rows .row[data-cat-id=\"${catId}\"]`);<!-- [et_pb_line_break_holder] -->  if (rowToUpdate) {<!-- [et_pb_line_break_holder] -->    const range = rowToUpdate.querySelector('input[type=range]');<!-- [et_pb_line_break_holder] -->    const num = rowToUpdate.querySelector('input[type=number]');<!-- [et_pb_line_break_holder] -->    if (range && range.value != value) { range.value = value; }<!-- [et_pb_line_break_holder] -->    if (num && num.value != value) { num.value = value; }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  recompute();<!-- [et_pb_line_break_holder] -->  drawAll();<!-- [et_pb_line_break_holder] -->  renderMiniCalendar(currentDate);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->const setScoreDebounced = debounce(setScore, 200);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function renderRows(){<!-- [et_pb_line_break_holder] -->  const rowsEl=document.querySelector('#rows'); rowsEl.innerHTML='';<!-- [et_pb_line_break_holder] -->  store.cats.forEach(c=>{<!-- [et_pb_line_break_holder] -->    const row=document.createElement('div');<!-- [et_pb_line_break_holder] -->    row.className='row';<!-- [et_pb_line_break_holder] -->    row.dataset.catId = c.id;<!-- [et_pb_line_break_holder] -->    row.innerHTML=`<\/p>\n<div>${c.name}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <input type=\"range\" min=\"0\" max=\"100\" step=\"5\" value=\"${currentScores[c.id]||0}\"><!-- [et_pb_line_break_holder] -->      <input type=\"number\" min=\"0\" max=\"100\" value=\"${currentScores[c.id]||0}\">`;<!-- [et_pb_line_break_holder] -->    const range=row.children[1]; const num=row.children[2];<!-- [et_pb_line_break_holder] -->    range.addEventListener('input',()=>{ num.value=range.value; setScoreDebounced(c.id, +range.value); });<!-- [et_pb_line_break_holder] -->    num.addEventListener('input',()=>{ const v=clamp(+num.value,0,100); num.value=v; range.value=v; setScoreDebounced(c.id, v); });<!-- [et_pb_line_break_holder] -->    rowsEl.appendChild(row);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->document.querySelector('#datePicker').onchange=(e)=> loadDay(e.target.value);<!-- [et_pb_line_break_holder] -->document.querySelector('#todayBtn').onclick=()=> loadDay(todayISO());<!-- [et_pb_line_break_holder] -->document.querySelector('#prevDay').onclick=()=>{ const nd=fmtDate(addDays(new Date(currentDate.replace(\/-\/g, '\/')), -1)); loadDay(nd); };<!-- [et_pb_line_break_holder] -->document.querySelector('#nextDay').onclick=()=>{ const nd=fmtDate(addDays(new Date(currentDate.replace(\/-\/g, '\/')), 1)); loadDay(nd); };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u041f\u043e\u0434\u0441\u0447\u0451\u0442\u044b ======<!-- [et_pb_line_break_holder] -->function catAvg(scores){ return avg(Object.values(scores)); }<!-- [et_pb_line_break_holder] -->function getLastNDays(n){ const out=[]; for(let i=n-1;i>=0;i--){ const d=fmtDate(daysBack(i)); ensureDay(d); out.push({date:d, scores: store.days[d]}); } return out; }<!-- [et_pb_line_break_holder] -->function categoryAverages(period){ const last=getLastNDays(period); return store.cats.map(c=> ({id:c.id,name:c.name, avg: avg(last.map(d=> (d.scores[c.id]||0))) })); }<!-- [et_pb_line_break_holder] -->function deficitsToday(){ return store.cats.map(c=> ({c, v: currentScores[c.id]||0, min:c.dailyMin})).filter(x=> x.v<x.min).sort((a,b)=> a.v-b.v); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== Quick Actions ======<!-- [et_pb_line_break_holder] -->function isActionUsed(date, key){ const qa=store.quickApplied[date]; return !!(qa && qa[key]); }<!-- [et_pb_line_break_holder] -->function markActionUsed(date, key){ if(!store.quickApplied[date]) store.quickApplied[date]={}; store.quickApplied[date][key]=true; saveStore(store); }<!-- [et_pb_line_break_holder] -->function applyQuickAction(catId, add, label){ const key=actionKey(catId,label); if(isActionUsed(currentDate, key)) return; setScore(catId, clamp((currentScores[catId]||0)+add,0,100)); markActionUsed(currentDate, key); recompute(); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== KPI\/\u0434\u0435\u0444\u0438\u0446\u0438\u0442\u044b\/\u0431\u044b\u0441\u0442\u0440\u044b\u0435 ======<!-- [et_pb_line_break_holder] -->function renderKPIs(){<!-- [et_pb_line_break_holder] -->  const openStates = new Map();<!-- [et_pb_line_break_holder] -->  document.querySelectorAll('#quickBox details').forEach(d => {<!-- [et_pb_line_break_holder] -->      if (d.dataset.catId) {<!-- [et_pb_line_break_holder] -->          openStates.set(d.dataset.catId, d.open);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelector('#kpiToday').textContent = catAvg(currentScores);<!-- [et_pb_line_break_holder] -->  document.querySelector('#kpiWeek').textContent = avg(getLastNDays(7).map(d=>catAvg(d.scores)));<!-- [et_pb_line_break_holder] -->  document.querySelector('#kpiMonth').textContent = avg(getLastNDays(30).map(d=>catAvg(d.scores)));<!-- [et_pb_line_break_holder] -->  const def=deficitsToday(); document.querySelector('#kpiDef').textContent = def.length;<!-- [et_pb_line_break_holder] -->  const box=document.querySelector('#deficitsBox'); box.innerHTML='';<!-- [et_pb_line_break_holder] -->  if(def.length===0){ box.innerHTML='<\/p>\n<div class=\"muted\">\u0412\u0441\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432 \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0437\u043e\u043d\u0435<\/div>\n<p>'; }<!-- [et_pb_line_break_holder] -->  else { def.forEach(({c,v,min})=>{ const item=document.createElement('div'); item.className='section warn'; item.style.padding='10px'; item.style.marginBottom='8px';<!-- [et_pb_line_break_holder] -->      item.innerHTML=`<\/p>\n<div class=\"btnbar\" style=\"justify-content:space-between\">\n<div><b>${c.name}<\/b> \u2014 ${v}\/${min}<\/div>\n<\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->      box.appendChild(item); }); }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  const qb=document.querySelector('#quickBox'); qb.innerHTML='';<!-- [et_pb_line_break_holder] -->  store.cats.forEach(c=>{<!-- [et_pb_line_break_holder] -->    const ideas=(store.ideas[c.id]||[]);<!-- [et_pb_line_break_holder] -->    if (ideas.length === 0) return;<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    const details = document.createElement('details');<!-- [et_pb_line_break_holder] -->    details.className = 'qa-group';<!-- [et_pb_line_break_holder] -->    details.dataset.catId = c.id;<!-- [et_pb_line_break_holder] -->    if (openStates.get(c.id)) {<!-- [et_pb_line_break_holder] -->        details.open = true;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const summary = document.createElement('summary');<!-- [et_pb_line_break_holder] -->    summary.textContent = c.name;<!-- [et_pb_line_break_holder] -->    details.appendChild(summary);<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    const btnContainer = document.createElement('div');<!-- [et_pb_line_break_holder] -->    btnContainer.className = 'btnbar';<!-- [et_pb_line_break_holder] -->    btnContainer.style.marginTop = '8px';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    ideas.forEach(txt=>{<!-- [et_pb_line_break_holder] -->        const key=actionKey(c.id, txt); const used=isActionUsed(currentDate, key);<!-- [et_pb_line_break_holder] -->        const b=document.createElement('button'); b.className='btn small';<!-- [et_pb_line_break_holder] -->        b.textContent= used ? `${txt} \u2713` : txt;<!-- [et_pb_line_break_holder] -->        if(used) b.disabled=true;<!-- [et_pb_line_break_holder] -->        b.onclick=()=>{<!-- [et_pb_line_break_holder] -->            if(isActionUsed(currentDate,key)) return;<!-- [et_pb_line_break_holder] -->            const m=txt.match(\/\\(\\s*\\+\\s*(\\d+)\\s*\\)\/);<!-- [et_pb_line_break_holder] -->            const add=m ? +m[1] : 10;<!-- [et_pb_line_break_holder] -->            applyQuickAction(c.id, add, txt);<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] -->        btnContainer.appendChild(b);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    details.appendChild(btnContainer);<!-- [et_pb_line_break_holder] -->    qb.appendChild(details);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function recompute(){ renderKPIs(); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u0413\u0440\u0430\u0444\u0438\u043a\u0438 ======<!-- [et_pb_line_break_holder] -->const cMulti=document.querySelector('#chartMulti'); const ctxM=cMulti.getContext('2d');<!-- [et_pb_line_break_holder] -->function resizeCanvas(cv, ctx){ const dpr=window.devicePixelRatio||1; const w=cv.clientWidth, h=cv.clientHeight; cv.width=w*dpr; cv.height=h*dpr; ctx.setTransform(dpr,0,0,dpr,0,0); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function perCategorySeries(period){ const days=getLastNDays(period); return store.cats.map(c=>({ name:c.name, values: days.map(d=> (d.scores[c.id]||0)) })); }<!-- [et_pb_line_break_holder] -->function drawMultiLine(cv, ctx, series){ resizeCanvas(cv, ctx); const w=cv.clientWidth, h=cv.clientHeight; ctx.clearRect(0,0,w,h); ctx.strokeStyle=getComputedStyle(document.documentElement).getPropertyValue('--border'); ctx.lineWidth=1; for(let i=0;i<=5;i++){ const y=h-(h*i\/5); ctx.beginPath(); ctx.moveTo(0,y); ctx.lineTo(w,y); ctx.stroke(); } const maxLen=Math.max(...series.map(s=>s.values.length)); series.forEach((s,idx)=>{ ctx.beginPath(); ctx.lineWidth=2; ctx.strokeStyle=colorByIndex(idx); s.values.forEach((v,i)=>{ const x=(i*(w\/Math.max(1,maxLen-1))); const y=h-(clamp(v,0,100)\/100)*h; if(i===0) ctx.moveTo(x,y); else ctx.lineTo(x,y); }); ctx.stroke(); }); const legend=document.querySelector('#lineLegend'); legend.innerHTML=''; series.forEach((s,idx)=>{ const span=document.createElement('span'); span.innerHTML=`<i class=\"dot\" style=\"width:10px;height:10px;border-radius:2px;display:inline-block;background:${colorByIndex(idx)}; margin-right: 4px;\"><\/i>${s.name}`; legend.appendChild(span); }); }<!-- [et_pb_line_break_holder] -->const rW=document.querySelector('#radarWeek'); const rCtx=rW.getContext('2d');<!-- [et_pb_line_break_holder] -->function drawRadar(cv, ctx, labels, values){ const root=document.documentElement; const gridColor=getComputedStyle(root).getPropertyValue('--border').trim()||'#e5e7eb'; const labelColor=getComputedStyle(root).getPropertyValue('--muted').trim()||'#6b7280'; const fillColor=getComputedStyle(root).getPropertyValue('--accent2').trim()||'#0ea5e9'; resizeCanvas(cv, ctx); const w=cv.clientWidth, h=cv.clientHeight; ctx.clearRect(0,0,w,h); const cx=w\/2, cy=h\/2; const radius=Math.min(w,h)*0.38; const steps=5; ctx.strokeStyle=gridColor; ctx.lineWidth=1; ctx.fillStyle='transparent'; for(let s=1;s<=steps;s++){ const r=radius*(s\/steps); ctx.beginPath(); labels.forEach((_,i)=>{ const a=(i\/labels.length)*Math.PI*2 - Math.PI\/2; const x=cx + Math.cos(a)*r; const y=cy + Math.sin(a)*r; if(i===0) ctx.moveTo(x,y); else ctx.lineTo(x,y); }); ctx.closePath(); ctx.stroke(); } ctx.strokeStyle=gridColor; ctx.fillStyle=labelColor; ctx.font='12px system-ui'; ctx.textBaseline='middle'; labels.forEach((label,i)=>{ const a=(i\/labels.length)*Math.PI*2 - Math.PI\/2; const x=cx + Math.cos(a)*radius; const y=cy + Math.sin(a)*radius; ctx.beginPath(); ctx.moveTo(cx,cy); ctx.lineTo(x,y); ctx.stroke(); const lx=cx + Math.cos(a)*(radius+14); const ly=cy + Math.sin(a)*(radius+14); const tw=ctx.measureText(label).width; ctx.fillText(label, lx - tw\/2, ly); }); ctx.globalAlpha=0.25; ctx.fillStyle=fillColor; ctx.strokeStyle=fillColor; ctx.beginPath(); values.forEach((v,i)=>{ const a=(i\/labels.length)*Math.PI*2 - Math.PI\/2; const r=radius*(clamp(v,0,100)\/100); const x=cx + Math.cos(a)*r; const y=cy + Math.sin(a)*r; if(i===0) ctx.moveTo(x,y); else ctx.lineTo(x,y); }); ctx.closePath(); ctx.fill(); ctx.globalAlpha=1; ctx.stroke(); }<!-- [et_pb_line_break_holder] -->function drawBars(containerId, data){ const container=document.querySelector(containerId); container.innerHTML=''; data.sort((a,b)=> b.avg-a.avg).forEach(r=>{ const line=document.createElement('div'); line.style.margin='6px 0'; line.innerHTML=`<\/p>\n<div style=\"display:flex;align-items:center;gap:10px\">\n<div style=\"width:160px\">${r.name}<\/div>\n<div style=\"flex:1;background:rgba(2,132,199,.12);border:1px solid var(--border);height:12px;border-radius:999px;overflow:hidden\">\n<div style=\"width:${r.avg}%;height:100%;background:var(--accent2)\"><\/div>\n<\/div>\n<div style=\"width:40px;text-align:right\"><b>${r.avg}<\/b><\/div>\n<\/div>\n<p>`; container.appendChild(line); }); }<!-- [et_pb_line_break_holder] -->function drawAll(){ document.querySelector('#periodHint').textContent=`(${statsPeriod} \u0434\u043d\u0435\u0439)`; drawMultiLine(cMulti, ctxM, perCategorySeries(statsPeriod)); const avgs=categoryAverages(statsPeriod); drawRadar(rW, rCtx, avgs.map(x=>x.name), avgs.map(x=>x.avg)); drawBars('#weekBars', avgs); drawBars('#monthBars', categoryAverages(30)); }<!-- [et_pb_line_break_holder] -->[...document.querySelectorAll('.periodbar [data-period]')].forEach(b=> b.onclick=()=>{ statsPeriod=+b.dataset.period; drawAll(); });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u042d\u043a\u0441\u043f\u043e\u0440\u0442\/\u0438\u043c\u043f\u043e\u0440\u0442 ======<!-- [et_pb_line_break_holder] -->function download(filename, content, type='text\/plain'){ const blob=new Blob([content],{type}); const url=URL.createObjectURL(blob); const a=document.createElement('a'); a.href=url; a.download=filename; document.body.appendChild(a); a.click(); setTimeout(()=>{ URL.revokeObjectURL(url); a.remove(); },0); }<!-- [et_pb_line_break_holder] -->document.querySelector('#exportJSON').onclick=()=> download('focusscore.json', JSON.stringify(store,null,2), 'application\/json');<!-- [et_pb_line_break_holder] -->document.querySelector('#exportCSV').onclick=()=>{ const allDates=Object.keys(store.days).sort(); const cats=store.cats.map(c=>c.id); let csv='date,'+store.cats.map(c=>c.name).join(',')+'\\n'; allDates.forEach(d=>{ const row=[d]; cats.forEach(id=> row.push(store.days[d]?.[id]??0)); csv+=row.join(',')+'\\n'; }); download('focusscore.csv', csv, 'text\/csv'); };<!-- [et_pb_line_break_holder] -->document.querySelector('#importFile').onchange=(e)=>{ const file=e.target.files[0]; if(!file) return; const reader=new FileReader(); reader.onload=()=>{ try{ const data=JSON.parse(reader.result); if(data.cats && data.days){ store=data; if(!store.quickApplied) store.quickApplied={}; if(!store.ideas) store.ideas={}; if(!store.habits) store.habits=[]; if(!store.habitDone) store.habitDone={}; saveStore(store); loadDay(todayISO()); } }catch(err){ alert('\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 JSON'); } }; reader.readAsText(file); };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u041f\u0440\u0438\u0432\u044b\u0447\u043a\u0438 ======<!-- [et_pb_line_break_holder] -->function daysBetweenISO(aISO,bISO){ const a=new Date(aISO.replace(\/-\/g, '\/')); const b=new Date(bISO.replace(\/-\/g, '\/')); return Math.round((b-a)\/86400000); }<!-- [et_pb_line_break_holder] -->function habitLevel(streak){ if(streak>=91) return {name:'\u0413\u0443\u0440\u0443 \u0445\u0430\u043e\u0441\u0430 \ud83d\udd2e', idx:4}; if(streak>=31) return {name:'\u041c\u0430\u044d\u0441\u0442\u0440\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \ud83c\udfb6', idx:3}; if(streak>=8) return {name:'\u042d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u043a\u2011\u0434\u0436\u0435\u0434\u0430\u0439 \u26a1\ufe0f', idx:2}; if(streak>=1) return {name:'\u041d\u043e\u0432\u0438\u0447\u043e\u043a\u2011\u0444\u043e\u043a\u0443\u0441\u043d\u0438\u043a \ud83c\udfa9', idx:1}; return {name:'\u2014', idx:0}; }<!-- [et_pb_line_break_holder] -->function ensureHabitDay(date){ if(!store.habitDone[date]) store.habitDone[date]={}; }<!-- [et_pb_line_break_holder] -->function isHabitDoneToday(id){ ensureHabitDay(currentDate); return !!store.habitDone[currentDate][id]; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function markHabitDone(id){<!-- [et_pb_line_break_holder] -->  ensureHabitDay(currentDate);<!-- [et_pb_line_break_holder] -->  if(store.habitDone[currentDate][id]) return;<!-- [et_pb_line_break_holder] -->  const h=store.habits.find(x=>x.id===id);<!-- [et_pb_line_break_holder] -->  if(!h) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const today = new Date(currentDate.replace(\/-\/g, '\/'));<!-- [et_pb_line_break_holder] -->  let streak = h.streak || 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (h.lastDoneDate) {<!-- [et_pb_line_break_holder] -->      const last = new Date(h.lastDoneDate.replace(\/-\/g, '\/'));<!-- [et_pb_line_break_holder] -->      const frequency = h.frequency || 'daily';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      switch (frequency) {<!-- [et_pb_line_break_holder] -->          case 'weekly':<!-- [et_pb_line_break_holder] -->              const lastWeekStart = addDays(last, -(last.getDay() + 6) % 7);<!-- [et_pb_line_break_holder] -->              const thisWeekStart = addDays(today, -(today.getDay() + 6) % 7);<!-- [et_pb_line_break_holder] -->              const weekDiff = Math.round((thisWeekStart - lastWeekStart) \/ (1000 * 60 * 60 * 24));<!-- [et_pb_line_break_holder] -->              <!-- [et_pb_line_break_holder] -->              if (weekDiff === 7) {<!-- [et_pb_line_break_holder] -->                  streak++;<!-- [et_pb_line_break_holder] -->              } else if (weekDiff > 7) {<!-- [et_pb_line_break_holder] -->                  streak = 1;<!-- [et_pb_line_break_holder] -->              }<!-- [et_pb_line_break_holder] -->              break;<!-- [et_pb_line_break_holder] -->              <!-- [et_pb_line_break_holder] -->          case 'monthly':<!-- [et_pb_line_break_holder] -->              const monthDiff = (today.getFullYear() * 12 + today.getMonth()) - (last.getFullYear() * 12 + last.getMonth());<!-- [et_pb_line_break_holder] -->              if (monthDiff === 1) {<!-- [et_pb_line_break_holder] -->                  streak++;<!-- [et_pb_line_break_holder] -->              } else if (monthDiff > 1) {<!-- [et_pb_line_break_holder] -->                  streak = 1;<!-- [et_pb_line_break_holder] -->              }<!-- [et_pb_line_break_holder] -->              break;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->          default: \/\/ 'daily'<!-- [et_pb_line_break_holder] -->              const dayDiff = daysBetweenISO(h.lastDoneDate, currentDate);<!-- [et_pb_line_break_holder] -->              if (dayDiff === 1) {<!-- [et_pb_line_break_holder] -->                  streak++;<!-- [et_pb_line_break_holder] -->              } else if (dayDiff > 1) {<!-- [et_pb_line_break_holder] -->                  streak = 1;<!-- [et_pb_line_break_holder] -->              }<!-- [et_pb_line_break_holder] -->              break;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->      streak = 1;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  h.streak = streak;<!-- [et_pb_line_break_holder] -->  h.total = (h.total || 0) + 1;<!-- [et_pb_line_break_holder] -->  h.lastDoneDate = currentDate;<!-- [et_pb_line_break_holder] -->  store.habitDone[currentDate][id]=true;<!-- [et_pb_line_break_holder] -->  saveStore(store);<!-- [et_pb_line_break_holder] -->  renderHabits();<!-- [et_pb_line_break_holder] -->  updateHabitsProgress();<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function renderHabitCard(h){<!-- [et_pb_line_break_holder] -->  const lvl=habitLevel(h.streak||0);<!-- [et_pb_line_break_holder] -->  const done=isHabitDoneToday(h.id);<!-- [et_pb_line_break_holder] -->  const card=document.createElement('div'); card.className='habit';<!-- [et_pb_line_break_holder] -->  const descriptionHTML = h.description ? `<\/p>\n<div class=\"desc\">${h.description}<\/div>\n<p>` : '';<!-- [et_pb_line_break_holder] -->  const freqText = getFrequencyText(h.frequency);<!-- [et_pb_line_break_holder] -->  card.innerHTML=`<!-- [et_pb_line_break_holder] -->    <\/p>\n<div><input type=\"checkbox\" style=\"width:20px;height:20px\" ${done?'checked':''}><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"title\">${h.name}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      ${descriptionHTML}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"meta\"><!-- [et_pb_line_break_holder] -->        <span>${lvl.name}<\/span> \u2022 <!-- [et_pb_line_break_holder] -->        <span class=\"lvl-badge\">${freqText}<\/span> \u2022 <!-- [et_pb_line_break_holder] -->        <span>\u0441\u0435\u0440\u0438\u044f ${h.streak||0}<\/span> \u2022 <!-- [et_pb_line_break_holder] -->        <span>\u0432\u0441\u0435\u0433\u043e ${h.total||0}<\/span><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"hbar\" style=\"margin-top:6px\">\n<div style=\"width:${Math.min(100,(h.streak||0))}%\"><\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->  const cb=card.querySelector('input');<!-- [et_pb_line_break_holder] -->  cb.onchange=()=>{<!-- [et_pb_line_break_holder] -->    if (cb.checked) {<!-- [et_pb_line_break_holder] -->      markHabitDone(h.id);<!-- [et_pb_line_break_holder] -->      cb.disabled = true;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->  if (done) cb.disabled = true;<!-- [et_pb_line_break_holder] -->  return card;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function renderHabits(){<!-- [et_pb_line_break_holder] -->  Object.keys(ENTP_GROUPS).forEach(key => {<!-- [et_pb_line_break_holder] -->      const el = document.querySelector(`#group-${key}`);<!-- [et_pb_line_break_holder] -->      if(el) el.innerHTML='';<!-- [et_pb_line_break_holder] -->      const summary = el?.parentElement.querySelector('summary');<!-- [et_pb_line_break_holder] -->      if(summary) summary.textContent = ENTP_GROUPS[key];<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const q=(document.querySelector('#habSearch').value||'').toLowerCase();<!-- [et_pb_line_break_holder] -->  store.habits.forEach(h=>{<!-- [et_pb_line_break_holder] -->    if(q && !h.name.toLowerCase().includes(q)) return;<!-- [et_pb_line_break_holder] -->    const targetSel = `#group-${h.group}`;<!-- [et_pb_line_break_holder] -->    const host=document.querySelector(targetSel);<!-- [et_pb_line_break_holder] -->    if(host) host.appendChild(renderHabitCard(h));<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->document.querySelector('#habSearch').oninput=()=> { renderHabits(); };<!-- [et_pb_line_break_holder] -->document.querySelector('#habCollapse').onclick=()=>{ document.querySelectorAll('.hab-group').forEach(d=> d.removeAttribute('open')); };<!-- [et_pb_line_break_holder] -->document.querySelector('#habExpand').onclick=()=>{ document.querySelectorAll('.hab-group').forEach(d=> d.setAttribute('open','')); };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function updateHabitsProgress(){<!-- [et_pb_line_break_holder] -->  ensureHabitDay(currentDate);<!-- [et_pb_line_break_holder] -->  const today=store.habitDone[currentDate]||{}; const doneCnt=Object.keys(today).length; const total=store.habits.length||0; const pct= total? Math.round((doneCnt\/total)*100) : 0;<!-- [et_pb_line_break_holder] -->  document.querySelector('#habitsProgressBar').style.width = pct+'%';<!-- [et_pb_line_break_holder] -->  document.querySelector('#habitsProgressStat').textContent = `${doneCnt}\/${total}`;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 ======<!-- [et_pb_line_break_holder] -->const settingsModal=document.querySelector('#settingsModal');<!-- [et_pb_line_break_holder] -->const habitStatsModal = document.querySelector('#habitStatsModal');<!-- [et_pb_line_break_holder] -->document.querySelector('#openSettings').onclick=()=>{ renderSettings(); settingsModal.classList.add('open'); };<!-- [et_pb_line_break_holder] -->document.querySelector('#closeSettings').onclick=()=> settingsModal.classList.remove('open');<!-- [et_pb_line_break_holder] -->document.querySelector('#openHabitStats').onclick=()=>{ renderHabitStats(); habitStatsModal.classList.add('open'); };<!-- [et_pb_line_break_holder] -->document.querySelector('#closeHabitStats').onclick=()=> habitStatsModal.classList.remove('open');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function renderHabitStats() {<!-- [et_pb_line_break_holder] -->    const content = document.getElementById('habit-stats-content');<!-- [et_pb_line_break_holder] -->    content.innerHTML = '';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const todayDone = Object.keys(store.habitDone[todayISO()] || {}).length;<!-- [et_pb_line_break_holder] -->    const totalHabits = store.habits.length;<!-- [et_pb_line_break_holder] -->    const todayProgress = totalHabits > 0 ? Math.round((todayDone \/ totalHabits) * 100) : 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const topStreaks = [...store.habits].sort((a, b) => (b.streak || 0) - (a.streak || 0)).slice(0, 3);<!-- [et_pb_line_break_holder] -->    const topTotals = [...store.habits].sort((a, b) => (b.total || 0) - (a.total || 0)).slice(0, 3);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let html = `<!-- [et_pb_line_break_holder] -->        <\/p>\n<h4>\u041e\u0431\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0441\u0435\u0433\u043e\u0434\u043d\u044f: ${todayDone} \u0438\u0437 ${totalHabits} (${todayProgress}%)<\/h4>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<h4>\u0422\u043e\u043f-3 \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0435\u0440\u0438\u0438:<\/h4>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<ul><!-- [et_pb_line_break_holder] -->            ${topStreaks.map(h => `<\/p>\n<li>${h.name} (${h.streak || 0} ${getFrequencyText(h.frequency).toLowerCase().replace(\/.$\/, '\u044c')})<\/li>\n<p>`).join('')}<!-- [et_pb_line_break_holder] -->        <\/ul>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<h4>\u0422\u043e\u043f-3 \u043f\u043e \u043e\u0431\u0449\u0435\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e:<\/h4>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<ul><!-- [et_pb_line_break_holder] -->            ${topTotals.map(h => `<\/p>\n<li>${h.name} (${h.total || 0} \u0440\u0430\u0437)<\/li>\n<p>`).join('')}<!-- [et_pb_line_break_holder] -->        <\/ul>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"hr\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<h4>\u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0438:<\/h4>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: center;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"muted\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"muted\">\u0421\u0435\u0440\u0438\u044f<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"muted\">\u0412\u0441\u0435\u0433\u043e<\/div>\n<p><!-- [et_pb_line_break_holder] -->            ${store.habits.map(h => `<!-- [et_pb_line_break_holder] -->                <\/p>\n<div>${h.name}<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div style=\"text-align: right;\">${h.streak || 0}<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div style=\"text-align: right;\">${h.total || 0}<\/div>\n<p><!-- [et_pb_line_break_holder] -->            `).join('')}<!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    `;<!-- [et_pb_line_break_holder] -->    content.innerHTML = html;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function renderSettings(){<!-- [et_pb_line_break_holder] -->    renderCatList();<!-- [et_pb_line_break_holder] -->    renderIdeasEditor();<!-- [et_pb_line_break_holder] -->    renderHabitsEditor();<!-- [et_pb_line_break_holder] -->    const newHabGroupSelect = document.querySelector('#newHabGroup');<!-- [et_pb_line_break_holder] -->    newHabGroupSelect.innerHTML = '';<!-- [et_pb_line_break_holder] -->    for (const [key, value] of Object.entries(ENTP_GROUPS)) {<!-- [et_pb_line_break_holder] -->        newHabGroupSelect.innerHTML += `<option value=\"${key}\">${value}<\/option>`;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const newHabFreqSelect = document.querySelector('#newHabFrequency');<!-- [et_pb_line_break_holder] -->    newHabFreqSelect.innerHTML = `<!-- [et_pb_line_break_holder] --><option value=\"daily\">\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e<\/option><!-- [et_pb_line_break_holder] --><option value=\"weekly\">\u0415\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e<\/option><!-- [et_pb_line_break_holder] --><option value=\"monthly\">\u0415\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e<\/option><!-- [et_pb_line_break_holder] -->    `;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function renderCatList(){ const wrap=document.querySelector('#catList'); wrap.innerHTML=''; store.cats.forEach((c, idx)=>{ const line=document.createElement('div'); line.className='kbar'; line.innerHTML=`<\/p>\n<div>${idx+1}<\/div>\n<p><!-- [et_pb_line_break_holder] -->  <input class=\"input\" value=\"${c.name}\" \/><!-- [et_pb_line_break_holder] -->  <input class=\"input\" type=\"number\" value=\"${c.dailyMin}\" \/><!-- [et_pb_line_break_holder] -->  <input class=\"input\" type=\"number\" value=\"${c.weeklyMin}\" \/><!-- [et_pb_line_break_holder] -->  <\/p>\n<div><button class=\"btn small danger\">\u0423\u0434\u0430\u043b\u0438\u0442\u044c<\/button><\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/p>\n<div><button class=\"btn small\">\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c<\/button><\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->  const nameEl=line.children[1]; const dEl=line.children[2]; const wEl=line.children[3]; const del=line.children[4].firstChild; const save=line.children[5].firstChild;<!-- [et_pb_line_break_holder] -->  del.onclick=()=>{<!-- [et_pb_line_break_holder] -->      const id=c.id;<!-- [et_pb_line_break_holder] -->      store.cats.splice(idx,1);<!-- [et_pb_line_break_holder] -->      Object.keys(store.days).forEach(date=>{ if(store.days[date]) delete store.days[date][id]; });<!-- [et_pb_line_break_holder] -->      delete store.ideas[id];<!-- [et_pb_line_break_holder] -->      Object.keys(store.quickApplied).forEach(dt=>{ if(store.quickApplied[dt]){ Object.keys(store.quickApplied[dt]).forEach(k=>{ if(k.startsWith(id+'||')||k.startsWith('DEF||'+id)) delete store.quickApplied[dt][k]; }); } });<!-- [et_pb_line_break_holder] -->      saveStore(store); renderSettings(); loadDay(currentDate);<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->  save.onclick=()=>{ c.name=nameEl.value.trim()||c.name; c.dailyMin=clamp(+dEl.value||0,0,100); c.weeklyMin=clamp(+wEl.value||0,0,100); saveStore(store); renderSettings(); loadDay(currentDate); };<!-- [et_pb_line_break_holder] -->  wrap.appendChild(line); }); }<!-- [et_pb_line_break_holder] -->document.querySelector('#addCat').onclick=()=>{ const name=document.querySelector('#newCatName').value.trim(); if(!name) return; const daily=clamp(+document.querySelector('#newCatDaily').value||0,0,100); const weekly=clamp(+document.querySelector('#newCatWeekly').value||0,0,100); const id = name.toLowerCase().replace(\/[^a-z\u0430-\u044f0-9]+\/gi,'_') + '_' + Math.random().toString(36).slice(2,6); store.cats.push({id,name, dailyMin:daily, weeklyMin:weekly}); Object.keys(store.days).forEach(date=>{ if(!store.days[date]) store.days[date]={}; store.days[date][id]=0; }); store.ideas[id]=[]; saveStore(store); document.querySelector('#newCatName').value=''; document.querySelector('#newCatDaily').value=''; document.querySelector('#newCatWeekly').value=''; renderSettings(); loadDay(currentDate); drawAll(); };<!-- [et_pb_line_break_holder] -->function renderIdeasEditor(){<!-- [et_pb_line_break_holder] -->    const wrap=document.querySelector('#qaEditor');<!-- [et_pb_line_break_holder] -->    wrap.innerHTML='';<!-- [et_pb_line_break_holder] -->    store.cats.forEach(c => {<!-- [et_pb_line_break_holder] -->        const catContainer = document.createElement('div');<!-- [et_pb_line_break_holder] -->        catContainer.style.margin = '12px 0';<!-- [et_pb_line_break_holder] -->        catContainer.innerHTML = `<\/p>\n<div class=\"muted\" style=\"margin-bottom:6px\">${c.name}<\/div>\n<p>`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const list = document.createElement('div');<!-- [et_pb_line_break_holder] -->        list.style.display = 'flex';<!-- [et_pb_line_break_holder] -->        list.style.flexDirection = 'column';<!-- [et_pb_line_break_holder] -->        list.style.gap = '6px';<!-- [et_pb_line_break_holder] -->        (store.ideas[c.id] || []).forEach((idea, idx) => {<!-- [et_pb_line_break_holder] -->            const item = document.createElement('div');<!-- [et_pb_line_break_holder] -->            item.style.display = 'flex';<!-- [et_pb_line_break_holder] -->            item.style.gap = '8px';<!-- [et_pb_line_break_holder] -->            item.innerHTML = `<input class=\"input\" value=\"${idea}\" style=\"flex:1;\" \/><!-- [et_pb_line_break_holder] -->                              <button class=\"btn small danger\">\u0423\u0434\u0430\u043b\u0438\u0442\u044c<\/button>`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const inputEl = item.querySelector('input');<!-- [et_pb_line_break_holder] -->            const deleteBtn = item.querySelector('button');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            inputEl.onblur = () => {<!-- [et_pb_line_break_holder] -->                if (store.ideas[c.id]) {<!-- [et_pb_line_break_holder] -->                    store.ideas[c.id][idx] = inputEl.value.trim();<!-- [et_pb_line_break_holder] -->                    saveStore(store);<!-- [et_pb_line_break_holder] -->                    recompute();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            deleteBtn.onclick = () => {<!-- [et_pb_line_break_holder] -->                if (store.ideas[c.id]) {<!-- [et_pb_line_break_holder] -->                    store.ideas[c.id].splice(idx, 1);<!-- [et_pb_line_break_holder] -->                    saveStore(store);<!-- [et_pb_line_break_holder] -->                    renderIdeasEditor();<!-- [et_pb_line_break_holder] -->                    recompute();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            };<!-- [et_pb_line_break_holder] -->            list.appendChild(item);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        catContainer.appendChild(list);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const addContainer = document.createElement('div');<!-- [et_pb_line_break_holder] -->        addContainer.style.display = 'flex';<!-- [et_pb_line_break_holder] -->        addContainer.style.gap = '8px';<!-- [et_pb_line_break_holder] -->        addContainer.style.marginTop = '8px';<!-- [et_pb_line_break_holder] -->        addContainer.innerHTML = `<input class=\"input\" placeholder=\"\u041d\u043e\u0432\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u0430\u043f\u0440. \u041f\u0440\u043e\u0433\u0443\u043b\u043a\u0430 (+15)\" style=\"flex:1;\" \/><!-- [et_pb_line_break_holder] -->                                <button class=\"btn small primary\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c<\/button>`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const addInput = addContainer.querySelector('input');<!-- [et_pb_line_break_holder] -->        const addBtn = addContainer.querySelector('button');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        addBtn.onclick = () => {<!-- [et_pb_line_break_holder] -->            const newIdea = addInput.value.trim();<!-- [et_pb_line_break_holder] -->            if (newIdea) {<!-- [et_pb_line_break_holder] -->                if (!store.ideas[c.id]) {<!-- [et_pb_line_break_holder] -->                    store.ideas[c.id] = [];<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                store.ideas[c.id].push(newIdea);<!-- [et_pb_line_break_holder] -->                saveStore(store);<!-- [et_pb_line_break_holder] -->                renderIdeasEditor();<!-- [et_pb_line_break_holder] -->                recompute();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        catContainer.appendChild(addContainer);<!-- [et_pb_line_break_holder] -->        wrap.appendChild(catContainer);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function renderHabitsEditor() {<!-- [et_pb_line_break_holder] -->    const wrap = document.querySelector('#habEditor');<!-- [et_pb_line_break_holder] -->    wrap.innerHTML = '';<!-- [et_pb_line_break_holder] -->    if (!store.habits || store.habits.length === 0) {<!-- [et_pb_line_break_holder] -->        wrap.innerHTML = '<\/p>\n<div class=\"muted\">\u041d\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043a \u2014 \u0434\u043e\u0431\u0430\u0432\u044c \u043d\u0438\u0436\u0435<\/div>\n<p>';<!-- [et_pb_line_break_holder] -->        return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    store.habits.forEach((h, idx) => {<!-- [et_pb_line_break_holder] -->        const line = document.createElement('div');<!-- [et_pb_line_break_holder] -->        line.style.cssText = `<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border);<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            padding: 10px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 8px;<!-- [et_pb_line_break_holder] -->            display: grid;<!-- [et_pb_line_break_holder] -->            grid-template-columns: 1fr;<!-- [et_pb_line_break_holder] -->            gap: 8px;<!-- [et_pb_line_break_holder] -->        `;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const row1 = document.createElement('div');<!-- [et_pb_line_break_holder] -->        row1.style.display = 'grid';<!-- [et_pb_line_break_holder] -->        row1.style.gridTemplateColumns = '2fr 1fr 1fr';<!-- [et_pb_line_break_holder] -->        row1.style.gap = '8px';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const nameInput = document.createElement('input');<!-- [et_pb_line_break_holder] -->        nameInput.className = 'input';<!-- [et_pb_line_break_holder] -->        nameInput.value = h.name;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const groupSelect = document.createElement('select');<!-- [et_pb_line_break_holder] -->        groupSelect.className = 'input';<!-- [et_pb_line_break_holder] -->        for (const [key, value] of Object.entries(ENTP_GROUPS)) {<!-- [et_pb_line_break_holder] -->            const option = document.createElement('option');<!-- [et_pb_line_break_holder] -->            option.value = key;<!-- [et_pb_line_break_holder] -->            option.textContent = value;<!-- [et_pb_line_break_holder] -->            if (h.group === key) option.selected = true;<!-- [et_pb_line_break_holder] -->            groupSelect.appendChild(option);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        const freqSelect = document.createElement('select');<!-- [et_pb_line_break_holder] -->        freqSelect.className = 'input';<!-- [et_pb_line_break_holder] -->        freqSelect.innerHTML = `<!-- [et_pb_line_break_holder] --><option value=\"daily\">\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e<\/option><!-- [et_pb_line_break_holder] --><option value=\"weekly\">\u0415\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e<\/option><!-- [et_pb_line_break_holder] --><option value=\"monthly\">\u0415\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e<\/option>`;<!-- [et_pb_line_break_holder] -->        freqSelect.value = h.frequency || 'daily';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        row1.appendChild(nameInput);<!-- [et_pb_line_break_holder] -->        row1.appendChild(groupSelect);<!-- [et_pb_line_break_holder] -->        row1.appendChild(freqSelect);<!-- [et_pb_line_break_holder] -->        line.appendChild(row1);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const descInput = document.createElement('textarea');<!-- [et_pb_line_break_holder] -->        descInput.className = 'input';<!-- [et_pb_line_break_holder] -->        descInput.placeholder = '\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435';<!-- [et_pb_line_break_holder] -->        descInput.value = h.description || '';<!-- [et_pb_line_break_holder] -->        descInput.style.height = '60px';<!-- [et_pb_line_break_holder] -->        line.appendChild(descInput);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const buttonBar = document.createElement('div');<!-- [et_pb_line_break_holder] -->        buttonBar.className = 'btnbar';<!-- [et_pb_line_break_holder] -->        buttonBar.style.justifyContent = 'flex-end';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const deleteBtn = document.createElement('button');<!-- [et_pb_line_break_holder] -->        deleteBtn.className = 'btn small danger';<!-- [et_pb_line_break_holder] -->        deleteBtn.textContent = '\u0423\u0434\u0430\u043b\u0438\u0442\u044c';<!-- [et_pb_line_break_holder] -->        deleteBtn.onclick = () => {<!-- [et_pb_line_break_holder] -->            store.habits.splice(idx, 1);<!-- [et_pb_line_break_holder] -->            saveStore(store);<!-- [et_pb_line_break_holder] -->            renderHabitsEditor();<!-- [et_pb_line_break_holder] -->            renderHabits();<!-- [et_pb_line_break_holder] -->            updateHabitsProgress();<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const saveBtn = document.createElement('button');<!-- [et_pb_line_break_holder] -->        saveBtn.className = 'btn small primary';<!-- [et_pb_line_break_holder] -->        saveBtn.textContent = '\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c';<!-- [et_pb_line_break_holder] -->        saveBtn.onclick = () => {<!-- [et_pb_line_break_holder] -->            h.name = nameInput.value.trim() || h.name;<!-- [et_pb_line_break_holder] -->            h.group = groupSelect.value;<!-- [et_pb_line_break_holder] -->            h.frequency = freqSelect.value;<!-- [et_pb_line_break_holder] -->            h.description = descInput.value.trim();<!-- [et_pb_line_break_holder] -->            saveStore(store);<!-- [et_pb_line_break_holder] -->            renderHabitsEditor();<!-- [et_pb_line_break_holder] -->            renderHabits();<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        buttonBar.appendChild(deleteBtn);<!-- [et_pb_line_break_holder] -->        buttonBar.appendChild(saveBtn);<!-- [et_pb_line_break_holder] -->        line.appendChild(buttonBar);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        wrap.appendChild(line);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->document.querySelector('#addHabit').onclick=()=>{<!-- [et_pb_line_break_holder] -->    const name = document.querySelector('#newHabName').value.trim();<!-- [et_pb_line_break_holder] -->    if(!name) return;<!-- [et_pb_line_break_holder] -->    const group = document.querySelector('#newHabGroup').value;<!-- [et_pb_line_break_holder] -->    const frequency = document.querySelector('#newHabFrequency').value;<!-- [et_pb_line_break_holder] -->    const description = document.querySelector('#newHabDesc').value.trim();<!-- [et_pb_line_break_holder] -->    const id = 'hab_'+Math.random().toString(36).slice(2,8);<!-- [et_pb_line_break_holder] -->    store.habits.push({id, name, group, frequency, description, streak:0, total:0, lastDoneDate:null});<!-- [et_pb_line_break_holder] -->    saveStore(store);<!-- [et_pb_line_break_holder] -->    document.querySelector('#newHabName').value='';<!-- [et_pb_line_break_holder] -->    document.querySelector('#newHabDesc').value='';<!-- [et_pb_line_break_holder] -->    renderHabitsEditor();<!-- [et_pb_line_break_holder] -->    renderHabits();<!-- [et_pb_line_break_holder] -->    updateHabitsProgress();<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] -->document.querySelector('#bulkHabits').onclick=()=>{ const raw=prompt('\u0412\u0441\u0442\u0430\u0432\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043a, \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435'); if(!raw) return; const lines=raw.split(\/\\n+\/).map(s=>s.trim()).filter(Boolean).slice(0,200); lines.forEach(name=>{ const id='hab_'+Math.random().toString(36).slice(2,8); store.habits.push({id,name,group:'mind',frequency:'daily',description:'',streak:0,total:0,lastDoneDate:null}); }); saveStore(store); renderHabitsEditor(); renderHabits(); updateHabitsProgress(); };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ====== \u0421\u0442\u0430\u0440\u0442 ======<!-- [et_pb_line_break_holder] -->let store = {};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->async function init(){<!-- [et_pb_line_break_holder] -->  store = await loadStore();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if(!store.cats || store.cats.length === 0) store.cats=DEFAULT_CATS;<!-- [et_pb_line_break_holder] -->  if(!store.days) store.days={};<!-- [et_pb_line_break_holder] -->  if(!store.ideas) store.ideas = JSON.parse(JSON.stringify(DEFAULT_IDEAS));<!-- [et_pb_line_break_holder] -->  if(!store.quickApplied) store.quickApplied={};<!-- [et_pb_line_break_holder] -->  if(!store.habits) store.habits=[];<!-- [et_pb_line_break_holder] -->  if(!store.habitDone) store.habitDone={};<!-- [et_pb_line_break_holder] -->  if(store.habits.length===0){<!-- [et_pb_line_break_holder] -->    const pushMany=(group, arr)=> arr.forEach(h_info=> store.habits.push({id:'hab_'+Math.random().toString(36).slice(2,8), name: h_info.name, frequency: h_info.frequency, group, description: '', streak:0,total:0,lastDoneDate:null}));<!-- [et_pb_line_break_holder] -->    for (const group in DEFAULT_HABIT_LISTS) {<!-- [et_pb_line_break_holder] -->      if (DEFAULT_HABIT_LISTS.hasOwnProperty(group)) {<!-- [et_pb_line_break_holder] -->          pushMany(group, DEFAULT_HABIT_LISTS[group]);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const d=todayISO();<!-- [et_pb_line_break_holder] -->  ensureDay(d);<!-- [et_pb_line_break_holder] -->  loadDay(currentDate);<!-- [et_pb_line_break_holder] -->  window.addEventListener('resize', debounce(drawAll, 200));<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->[\/et_pb_code][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;][et_pb_column type=&#187;4_4&#8243; _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;][et_pb_text _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;]<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/focus-tracker.panshiny.ru\/wp-admin\">\u0412\u0425\u041e\u0414<\/a><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#187;1&#8243; fullwidth=&#187;on&#187; _builder_version=&#187;4.27.4&#8243; _module_preset=&#187;default&#187; global_colors_info=&#187;{}&#187;][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0425\u041e\u0414<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/comments?post=7"}],"version-history":[{"count":17,"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/pages\/7\/revisions\/35"}],"wp:attachment":[{"href":"https:\/\/focus-tracker.panshiny.ru\/index.php\/wp-json\/wp\/v2\/media?parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}