Mbonea commited on
Commit
5deec6e
·
1 Parent(s): cc4e53a

Redesign: Refined Warm design system (clay accent)

Browse files

Port the Refined Warm visual redesign into the app's style layer
(CSS-only; no component, route, or backend changes):

- tokens.css: gold (#e8a317) -> clay (#9b6b43) accent system; add
--ink, --accent-ink, --accent-tint, 3-tier shadow scale, type and
spacing tokens; retune result-state hues to pair with clay.
- app.css: ink primary buttons, frosted top bar + tab bar, dark
gradient hero-score card, clay week-calendar cells, retuned
timeline blocks / chips / tip-cards / progress; remove all
hardcoded old-palette colors.
- materials.css: warm-white surfaces + frosted material bar.

Rebuild static/ bundle (CSS+JS hash bumped).

frontend/src/styles/app.css CHANGED
@@ -18,6 +18,10 @@
18
  gap: 0.75rem;
19
  min-height: calc(var(--hit) + var(--safe-top));
20
  padding: calc(0.5rem + var(--safe-top)) var(--pad) 0.75rem;
 
 
 
 
21
  }
22
 
23
  .top-bar h1,
@@ -197,7 +201,10 @@
197
  touch-action: manipulation;
198
  -webkit-tap-highlight-color: transparent;
199
  transform-origin: center;
 
 
200
  }
 
201
 
202
  .btn {
203
  display: inline-flex;
@@ -207,6 +214,7 @@
207
  padding: 0 1.25rem;
208
  border-radius: 999px;
209
  font-weight: 600;
 
210
  }
211
 
212
  .btn:disabled {
@@ -215,20 +223,22 @@
215
  }
216
 
217
  .btn-primary {
218
- background: var(--accent);
219
- color: #202020;
 
220
  }
221
 
222
  .btn-secondary {
223
  background: var(--card);
224
  border: 1px solid var(--separator);
225
  color: var(--text);
 
226
  }
227
 
228
  .btn-destructive {
229
  background: var(--danger-bg);
230
  color: var(--danger);
231
- border: 1px solid rgba(139, 58, 52, 0.25);
232
  }
233
 
234
  .btn-plain {
@@ -254,7 +264,9 @@
254
  z-index: 30;
255
  min-height: calc(var(--tab-h) + var(--safe-bottom));
256
  padding-bottom: var(--safe-bottom);
257
- background: var(--card);
 
 
258
  border-top: 1px solid var(--separator);
259
  }
260
 
@@ -280,8 +292,8 @@
280
  }
281
 
282
  .tab-item.active {
283
- color: var(--text);
284
- font-weight: 600;
285
  }
286
 
287
  .tab-item.active svg {
@@ -295,13 +307,15 @@
295
  .tab-fab {
296
  position: absolute;
297
  left: 50%;
298
- top: -10px;
299
  transform: translateX(-50%);
300
  width: var(--fab-size);
301
  height: var(--fab-size);
302
  border-radius: 999px;
303
- background: var(--accent);
304
- box-shadow: 0 10px 24px rgba(232, 163, 23, 0.35);
 
 
305
  display: grid;
306
  place-items: center;
307
  }
@@ -332,8 +346,8 @@
332
  width: 48px;
333
  height: 48px;
334
  border-radius: 999px;
335
- background: var(--accent-soft);
336
- color: var(--text);
337
  display: grid;
338
  place-items: center;
339
  font-weight: 700;
@@ -353,12 +367,22 @@
353
  gap: 0.25rem;
354
  padding: 0.55rem 0.2rem;
355
  border-radius: 16px;
356
- background: transparent;
 
 
357
  }
358
 
 
 
 
 
 
 
359
  .week-cal-cell.today {
360
- background: var(--accent);
361
- color: #202020;
 
 
362
  }
363
 
364
  .week-cal-label {
@@ -367,6 +391,7 @@
367
  color: inherit;
368
  opacity: 0.7;
369
  }
 
370
 
371
  .week-cal-num {
372
  font-size: 15px;
@@ -378,15 +403,18 @@
378
  height: 6px;
379
  border-radius: 999px;
380
  background: transparent;
 
381
  }
382
 
383
  .week-cal-cell.filled .week-cal-dot {
384
  background: var(--accent);
 
385
  }
386
 
387
  .week-cal-cell.today.filled .week-cal-dot,
388
  .week-cal-cell.today .week-cal-dot {
389
- background: #202020;
 
390
  }
391
 
392
  .pending-banner-card {
@@ -430,12 +458,18 @@
430
  gap: 0.5rem;
431
  padding: 18px;
432
  overflow: hidden;
 
 
 
 
433
  }
434
 
435
  .hero-score-label {
436
- color: var(--text-secondary);
437
- font-size: 14px;
438
- font-weight: 500;
 
 
439
  }
440
 
441
  .hero-score-value {
@@ -448,7 +482,7 @@
448
 
449
  .hero-score-sub {
450
  margin: 0;
451
- color: var(--text-secondary);
452
  font-size: 14px;
453
  }
454
 
@@ -491,7 +525,7 @@
491
  .progress-fill {
492
  height: 100%;
493
  border-radius: inherit;
494
- background: var(--accent);
495
  }
496
 
497
  .scores-illu {
@@ -791,7 +825,7 @@
791
  font-weight: 700;
792
  }
793
  .source-badge.rules { background: var(--warn-bg); color: var(--warn); }
794
- .source-badge.model { background: var(--accent-soft); color: #8a6408; }
795
  .flags { color: var(--text-tertiary); font-size: 0.68rem; text-align: right; }
796
 
797
  .pick-list {
@@ -859,7 +893,7 @@
859
  /* Daily plain-English check-in */
860
  .daily-header { justify-content: space-between; align-items: center; }
861
  .daily-date { font-size: 13px; color: var(--text-secondary); }
862
- .daily-points { font-size: 1.35rem; font-weight: 700; color: var(--warn); }
863
 
864
  .tip-card {
865
  position: relative;
@@ -868,17 +902,18 @@
868
  gap: 0.5rem;
869
  padding: 12px 44px 12px 16px;
870
  border-radius: var(--radius);
871
- background: var(--accent-soft);
 
872
  font-size: 14px;
873
  color: var(--text-secondary);
874
  }
875
- .tip-card p { margin: 0; }
876
  .indoors-nudge {
877
  flex-direction: column;
878
  align-items: flex-start;
879
  padding-right: 16px;
880
  gap: 0.35rem;
881
- background: #f3e8d8;
882
  color: var(--text);
883
  }
884
  .warning-chip {
@@ -889,8 +924,8 @@
889
  text-transform: uppercase;
890
  padding: 0.2rem 0.5rem;
891
  border-radius: 6px;
892
- background: #e8a31733;
893
- color: #8a5a00;
894
  }
895
  .tip-dismiss {
896
  position: absolute;
@@ -1037,11 +1072,11 @@
1037
  }
1038
  .timeline-block strong { font-size: 13px; font-weight: 600; }
1039
  .timeline-block span { font-size: 11px; opacity: 0.85; }
1040
- .timeline-block.duty { background: #e8eef3; color: #243447; }
1041
- .timeline-block.explore { background: #e5f3ea; color: #1f4d32; }
1042
- .timeline-block.restore { background: #f3e8f0; color: #4a2f45; }
1043
- .timeline-block.stabilize { background: #f7ecd8; color: #5a4418; }
1044
- .timeline-block.flex { background: var(--surface-secondary); color: var(--text); }
1045
  .timeline-block.p0 { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
1046
  .timeline-block.done { opacity: 0.55; }
1047
  .timeline-block.skipped { opacity: 0.4; text-decoration: line-through; }
 
18
  gap: 0.75rem;
19
  min-height: calc(var(--hit) + var(--safe-top));
20
  padding: calc(0.5rem + var(--safe-top)) var(--pad) 0.75rem;
21
+ background: rgba(235, 231, 224, 0.82);
22
+ backdrop-filter: saturate(1.4) blur(12px);
23
+ -webkit-backdrop-filter: saturate(1.4) blur(12px);
24
+ border-bottom: 1px solid var(--separator);
25
  }
26
 
27
  .top-bar h1,
 
201
  touch-action: manipulation;
202
  -webkit-tap-highlight-color: transparent;
203
  transform-origin: center;
204
+ cursor: pointer;
205
+ transition: transform 0.12s ease;
206
  }
207
+ .pressable:active { transform: scale(0.97); }
208
 
209
  .btn {
210
  display: inline-flex;
 
214
  padding: 0 1.25rem;
215
  border-radius: 999px;
216
  font-weight: 600;
217
+ transition: transform 0.12s ease, box-shadow 0.16s ease;
218
  }
219
 
220
  .btn:disabled {
 
223
  }
224
 
225
  .btn-primary {
226
+ background: var(--ink);
227
+ color: #fbf9f5;
228
+ box-shadow: var(--shadow-2);
229
  }
230
 
231
  .btn-secondary {
232
  background: var(--card);
233
  border: 1px solid var(--separator);
234
  color: var(--text);
235
+ box-shadow: var(--shadow-1);
236
  }
237
 
238
  .btn-destructive {
239
  background: var(--danger-bg);
240
  color: var(--danger);
241
+ border: 1px solid rgba(168, 82, 62, 0.25);
242
  }
243
 
244
  .btn-plain {
 
264
  z-index: 30;
265
  min-height: calc(var(--tab-h) + var(--safe-bottom));
266
  padding-bottom: var(--safe-bottom);
267
+ background: rgba(251, 249, 245, 0.9);
268
+ backdrop-filter: saturate(1.4) blur(16px);
269
+ -webkit-backdrop-filter: saturate(1.4) blur(16px);
270
  border-top: 1px solid var(--separator);
271
  }
272
 
 
292
  }
293
 
294
  .tab-item.active {
295
+ color: var(--accent-ink);
296
+ font-weight: 700;
297
  }
298
 
299
  .tab-item.active svg {
 
307
  .tab-fab {
308
  position: absolute;
309
  left: 50%;
310
+ top: -12px;
311
  transform: translateX(-50%);
312
  width: var(--fab-size);
313
  height: var(--fab-size);
314
  border-radius: 999px;
315
+ background: var(--ink);
316
+ color: #fbf9f5;
317
+ box-shadow: var(--shadow-3);
318
+ border: 4px solid var(--bg);
319
  display: grid;
320
  place-items: center;
321
  }
 
346
  width: 48px;
347
  height: 48px;
348
  border-radius: 999px;
349
+ background: var(--accent-tint);
350
+ color: var(--accent-ink);
351
  display: grid;
352
  place-items: center;
353
  font-weight: 700;
 
367
  gap: 0.25rem;
368
  padding: 0.55rem 0.2rem;
369
  border-radius: 16px;
370
+ background: var(--card);
371
+ border: 1px solid var(--separator);
372
+ box-shadow: var(--shadow-1);
373
  }
374
 
375
+ .week-cal-cell.filled {
376
+ background: var(--accent-fill);
377
+ border-color: var(--accent-tint);
378
+ }
379
+ .week-cal-cell.filled .week-cal-num { color: var(--accent-ink); }
380
+
381
  .week-cal-cell.today {
382
+ background: var(--ink);
383
+ border-color: var(--ink);
384
+ box-shadow: var(--shadow-2);
385
+ color: #fbf9f5;
386
  }
387
 
388
  .week-cal-label {
 
391
  color: inherit;
392
  opacity: 0.7;
393
  }
394
+ .week-cal-cell.today .week-cal-label { opacity: 0.85; }
395
 
396
  .week-cal-num {
397
  font-size: 15px;
 
403
  height: 6px;
404
  border-radius: 999px;
405
  background: transparent;
406
+ border: 1px solid var(--separator);
407
  }
408
 
409
  .week-cal-cell.filled .week-cal-dot {
410
  background: var(--accent);
411
+ border-color: var(--accent);
412
  }
413
 
414
  .week-cal-cell.today.filled .week-cal-dot,
415
  .week-cal-cell.today .week-cal-dot {
416
+ background: var(--accent);
417
+ border-color: var(--accent);
418
  }
419
 
420
  .pending-banner-card {
 
458
  gap: 0.5rem;
459
  padding: 18px;
460
  overflow: hidden;
461
+ background: linear-gradient(135deg, var(--ink) 0%, #3a3833 100%);
462
+ border-color: var(--ink);
463
+ color: #fbf9f5;
464
+ box-shadow: var(--shadow-3);
465
  }
466
 
467
  .hero-score-label {
468
+ color: var(--accent-tint);
469
+ font-size: 11px;
470
+ font-weight: 700;
471
+ letter-spacing: 0.08em;
472
+ text-transform: uppercase;
473
  }
474
 
475
  .hero-score-value {
 
482
 
483
  .hero-score-sub {
484
  margin: 0;
485
+ color: rgba(251, 249, 245, 0.7);
486
  font-size: 14px;
487
  }
488
 
 
525
  .progress-fill {
526
  height: 100%;
527
  border-radius: inherit;
528
+ background: linear-gradient(90deg, var(--accent), var(--accent-ink));
529
  }
530
 
531
  .scores-illu {
 
825
  font-weight: 700;
826
  }
827
  .source-badge.rules { background: var(--warn-bg); color: var(--warn); }
828
+ .source-badge.model { background: var(--accent-tint); color: var(--accent-ink); }
829
  .flags { color: var(--text-tertiary); font-size: 0.68rem; text-align: right; }
830
 
831
  .pick-list {
 
893
  /* Daily plain-English check-in */
894
  .daily-header { justify-content: space-between; align-items: center; }
895
  .daily-date { font-size: 13px; color: var(--text-secondary); }
896
+ .daily-points { font-size: 1.35rem; font-weight: 700; color: var(--accent-ink); }
897
 
898
  .tip-card {
899
  position: relative;
 
902
  gap: 0.5rem;
903
  padding: 12px 44px 12px 16px;
904
  border-radius: var(--radius);
905
+ background: var(--accent-fill);
906
+ border: 1px solid var(--accent-tint);
907
  font-size: 14px;
908
  color: var(--text-secondary);
909
  }
910
+ .tip-card p { margin: 0; color: var(--text); }
911
  .indoors-nudge {
912
  flex-direction: column;
913
  align-items: flex-start;
914
  padding-right: 16px;
915
  gap: 0.35rem;
916
+ background: var(--accent-fill);
917
  color: var(--text);
918
  }
919
  .warning-chip {
 
924
  text-transform: uppercase;
925
  padding: 0.2rem 0.5rem;
926
  border-radius: 6px;
927
+ background: var(--accent-tint);
928
+ color: var(--accent-ink);
929
  }
930
  .tip-dismiss {
931
  position: absolute;
 
1072
  }
1073
  .timeline-block strong { font-size: 13px; font-weight: 600; }
1074
  .timeline-block span { font-size: 11px; opacity: 0.85; }
1075
+ .timeline-block.duty { background: var(--accent-fill); color: var(--accent-ink); border-color: var(--accent-tint); }
1076
+ .timeline-block.explore { background: var(--ok-bg); color: var(--ok); border-color: rgba(79, 122, 92, 0.2); }
1077
+ .timeline-block.restore { background: var(--danger-bg); color: var(--danger); border-color: rgba(168, 82, 62, 0.2); }
1078
+ .timeline-block.stabilize { background: var(--warn-bg); color: var(--warn); border-color: rgba(176, 126, 47, 0.2); }
1079
+ .timeline-block.flex { background: var(--surface-secondary); color: var(--text); border-color: var(--separator); }
1080
  .timeline-block.p0 { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
1081
  .timeline-block.done { opacity: 0.55; }
1082
  .timeline-block.skipped { opacity: 0.4; text-decoration: line-through; }
frontend/src/styles/materials.css CHANGED
@@ -1,19 +1,21 @@
1
  .material-bar {
2
- background: rgba(248, 246, 242, 0.92);
 
 
3
  border-bottom: 1px solid var(--separator);
4
  }
5
 
6
  .sheet-material {
7
  background: var(--card);
8
  border-radius: 20px 20px 0 0;
9
- box-shadow: 0 -8px 40px rgba(32, 32, 32, 0.12);
10
  }
11
 
12
  .surface-card {
13
  background: var(--card);
14
  border: 1px solid var(--separator);
15
  border-radius: var(--radius);
16
- box-shadow: var(--shadow);
17
  }
18
 
19
  @media (prefers-reduced-transparency: reduce) {
 
1
  .material-bar {
2
+ background: rgba(235, 231, 224, 0.82);
3
+ backdrop-filter: saturate(1.4) blur(12px);
4
+ -webkit-backdrop-filter: saturate(1.4) blur(12px);
5
  border-bottom: 1px solid var(--separator);
6
  }
7
 
8
  .sheet-material {
9
  background: var(--card);
10
  border-radius: 20px 20px 0 0;
11
+ box-shadow: 0 -8px 40px rgba(43, 42, 38, 0.14);
12
  }
13
 
14
  .surface-card {
15
  background: var(--card);
16
  border: 1px solid var(--separator);
17
  border-radius: var(--radius);
18
+ box-shadow: var(--shadow-1);
19
  }
20
 
21
  @media (prefers-reduced-transparency: reduce) {
frontend/src/styles/tokens.css CHANGED
@@ -1,33 +1,69 @@
1
  :root {
2
  color-scheme: light;
 
 
3
  --bg: #ebe7e0;
4
- --bg-elevated: #f1eee8;
5
- --card: #f8f6f2;
6
- --surface: #f8f6f2;
7
- --surface-solid: #f8f6f2;
8
- --surface-secondary: #f1eee8;
9
- --text: #202020;
10
- --text-secondary: #666666;
11
- --text-tertiary: #9a9a9a;
12
- --separator: rgba(32, 32, 32, 0.08);
13
- --accent: #e8a317;
14
- --accent-soft: rgba(232, 163, 23, 0.16);
15
- --ok: #2f6b3c;
16
- --ok-bg: #e4f0e6;
17
- --warn: #8a6a10;
18
- --warn-bg: #f5ebcc;
19
- --danger: #8b3a34;
20
- --danger-bg: #f0e0de;
21
- --pending-bg: #faf3e3;
22
- --pending-border: #e8a317;
23
- --scrim: rgba(32, 32, 32, 0.35);
24
- --shadow: 0 8px 24px rgba(32, 32, 32, 0.06);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  --radius: 20px;
 
 
26
  --pad: 1.25rem;
27
  --hit: 44px;
28
- --btn-h: 56px;
29
- --fab-size: 60px;
30
- --tab-h: 76px;
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  --font: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
32
  --safe-top: env(safe-area-inset-top, 0px);
33
  --safe-bottom: env(safe-area-inset-bottom, 0px);
@@ -42,5 +78,8 @@
42
  --separator: rgba(32, 32, 32, 0.28);
43
  --text-secondary: #444444;
44
  --shadow: none;
 
 
 
45
  }
46
  }
 
1
  :root {
2
  color-scheme: light;
3
+
4
+ /* —— Base surfaces (Refined Warm, built on the original #ebe7e0) —— */
5
  --bg: #ebe7e0;
6
+ --bg-elevated: #f1ede6;
7
+ --card: #ffffff; /* crisp white surfaces */
8
+ --surface: #ffffff;
9
+ --surface-solid: #ffffff;
10
+ --surface-secondary: #f6f3ed;
11
+ --ink: #2b2a26; /* near-black warm ink */
12
+
13
+ /* —— Text —— */
14
+ --text: #2b2a26;
15
+ --text-secondary: #5c574f;
16
+ --text-tertiary: #8b8579;
17
+ --separator: rgba(43, 42, 38, 0.08);
18
+
19
+ /* —— Accent: clay (replaces the old gold #e8a317) —— */
20
+ --accent: #9b6b43;
21
+ --accent-ink: #6e4a2e;
22
+ --accent-soft: rgba(155, 107, 67, 0.16);
23
+ --accent-tint: #e8d9c9; /* opaque clay tint for solid fills */
24
+ --accent-fill: #f3e8da; /* softest clay wash */
25
+
26
+ /* —— Result states (paired hue + tint, retuned to sit with clay) —— */
27
+ --ok: #4f7a5c; /* sage */
28
+ --ok-bg: #e3ede6;
29
+ --warn: #b07e2f; /* amber */
30
+ --warn-bg: #f3e8d2;
31
+ --danger: #a8523e; /* clay-red */
32
+ --danger-bg: #f2e0da;
33
+ --pending-bg: #f3e8da;
34
+ --pending-border: #9b6b43;
35
+
36
+ /* —— Layering —— */
37
+ --scrim: rgba(43, 42, 38, 0.42);
38
+
39
+ /* —— Shadows: 3 soft tiers —— */
40
+ --shadow: 0 8px 28px rgba(43, 42, 38, 0.10), 0 2px 6px rgba(43, 42, 38, 0.05);
41
+ --shadow-1: 0 1px 2px rgba(43, 42, 38, 0.05);
42
+ --shadow-2: 0 4px 16px rgba(43, 42, 38, 0.06), 0 1px 3px rgba(43, 42, 38, 0.04);
43
+ --shadow-3: 0 8px 28px rgba(43, 42, 38, 0.10), 0 2px 6px rgba(43, 42, 38, 0.05);
44
+
45
+ /* —— Geometry —— */
46
  --radius: 20px;
47
+ --radius-sm: 12px;
48
+ --radius-md: 16px;
49
  --pad: 1.25rem;
50
  --hit: 44px;
51
+ --btn-h: 52px;
52
+ --fab-size: 58px;
53
+ --tab-h: 72px;
54
+
55
+ /* —— Type scale —— */
56
+ --fs-display: 30px;
57
+ --fs-h1: 24px;
58
+ --fs-section: 17px;
59
+ --fs-body: 15px;
60
+ --fs-caption: 13px;
61
+ --fs-micro: 11px;
62
+
63
+ /* —— Spacing scale (4px base) —— */
64
+ --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px;
65
+ --s-5: 20px; --s-6: 24px; --s-7: 32px;
66
+
67
  --font: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
68
  --safe-top: env(safe-area-inset-top, 0px);
69
  --safe-bottom: env(safe-area-inset-bottom, 0px);
 
78
  --separator: rgba(32, 32, 32, 0.28);
79
  --text-secondary: #444444;
80
  --shadow: none;
81
+ --shadow-1: none;
82
+ --shadow-2: none;
83
+ --shadow-3: none;
84
  }
85
  }
static/assets/index-CK7MU-TQ.css DELETED
@@ -1 +0,0 @@
1
- :root{color-scheme:light;--bg: #ebe7e0;--bg-elevated: #f1eee8;--card: #f8f6f2;--surface: #f8f6f2;--surface-solid: #f8f6f2;--surface-secondary: #f1eee8;--text: #202020;--text-secondary: #666666;--text-tertiary: #9a9a9a;--separator: rgba(32, 32, 32, .08);--accent: #e8a317;--accent-soft: rgba(232, 163, 23, .16);--ok: #2f6b3c;--ok-bg: #e4f0e6;--warn: #8a6a10;--warn-bg: #f5ebcc;--danger: #8b3a34;--danger-bg: #f0e0de;--pending-bg: #faf3e3;--pending-border: #e8a317;--scrim: rgba(32, 32, 32, .35);--shadow: 0 8px 24px rgba(32, 32, 32, .06);--radius: 20px;--pad: 1.25rem;--hit: 44px;--btn-h: 56px;--fab-size: 60px;--tab-h: 76px;--font: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);font:400 16px/1.47 var(--font);background:var(--bg);color:var(--text);letter-spacing:0}@media(prefers-contrast:more){:root{--separator: rgba(32, 32, 32, .28);--text-secondary: #444444;--shadow: none}}*,*:before,*:after{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer;border:none;background:none}a{color:var(--accent);text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}img{max-width:100%}.material-bar{background:#f8f6f2eb;border-bottom:1px solid var(--separator)}.sheet-material{background:var(--card);border-radius:20px 20px 0 0;box-shadow:0 -8px 40px #2020201f}.surface-card{background:var(--card);border:1px solid var(--separator);border-radius:var(--radius);box-shadow:var(--shadow)}@media(prefers-reduced-transparency:reduce){.material-bar,.sheet-material,.surface-card{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--surface-solid)}}@media(prefers-contrast:more){.material-bar,.sheet-material,.surface-card{border-color:#20202047;box-shadow:none}}.app-shell{min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.top-bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:.75rem;min-height:calc(var(--hit) + var(--safe-top));padding:calc(.5rem + var(--safe-top)) var(--pad) .75rem}.top-bar h1,.page-title{margin:0;font-size:28px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.page{flex:1;width:min(40rem,100%);margin:0 auto;padding:1.25rem var(--pad) calc(1.5rem + var(--safe-bottom) + var(--tab-h) + .75rem)}.home-page{gap:16px;animation:card-in .18s ease both}.stack{display:flex;flex-direction:column;gap:16px}.field-label{display:block;margin-bottom:.4rem;color:var(--text-secondary);font-size:13px;font-weight:500}.field-input,.field-textarea{width:100%;min-height:var(--hit);padding:.85rem 1rem;border-radius:16px;border:1px solid var(--separator);background:var(--card);color:var(--text)}.field-textarea{min-height:7rem;resize:vertical;line-height:1.47}.muted{color:var(--text-secondary)}.tertiary{color:var(--text-tertiary)}.error-text{color:var(--danger);font-size:.9rem}.chip-row{display:flex;flex-wrap:wrap;gap:.5rem}.chip{min-height:var(--hit);padding:0 .95rem;border-radius:999px;border:1px solid var(--separator);background:var(--card);color:var(--text-secondary);font-weight:500;display:inline-flex;align-items:center;gap:.35rem}.chip[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--text)}.chip.result-worked[aria-pressed=true]{border-color:var(--ok);background:var(--ok-bg);color:var(--ok)}.chip.result-partial[aria-pressed=true]{border-color:var(--warn);background:var(--warn-bg);color:var(--warn)}.chip.result-failed[aria-pressed=true]{border-color:var(--danger);background:var(--danger-bg);color:var(--danger)}.chip.result-pending[aria-pressed=true]{border-color:var(--pending-border);background:var(--pending-bg);color:var(--accent)}.slider-wrap{display:grid;gap:.5rem}.slider-wrap input[type=range]{width:100%;accent-color:var(--accent)}.more-block{border-top:1px solid var(--separator);padding-top:1rem}.login-page{min-height:100dvh;display:grid;place-items:center;padding:var(--pad);padding-top:calc(var(--pad) + var(--safe-top));padding-bottom:calc(var(--pad) + var(--safe-bottom));background:var(--bg)}.login-card{width:min(22rem,100%);padding:1.5rem}.login-card h1{margin:0 0 .35rem;font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.toast-host{position:fixed;left:0;right:0;top:calc(.75rem + var(--safe-top));z-index:50;display:flex;justify-content:center;pointer-events:none;padding:0 var(--pad)}.toast{pointer-events:auto;max-width:24rem;width:100%;padding:.85rem 1rem;border-radius:16px;background:var(--card);border:1px solid var(--separator);box-shadow:var(--shadow);color:var(--text);font-weight:500}.toast.error{border-color:var(--danger);background:var(--danger-bg)}.pressable{touch-action:manipulation;-webkit-tap-highlight-color:transparent;transform-origin:center}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:var(--btn-h);padding:0 1.25rem;border-radius:999px;font-weight:600}.btn:disabled{opacity:.4;pointer-events:none}.btn-primary{background:var(--accent);color:#202020}.btn-secondary{background:var(--card);border:1px solid var(--separator);color:var(--text)}.btn-destructive{background:var(--danger-bg);color:var(--danger);border:1px solid rgba(139,58,52,.25)}.btn-plain{color:var(--text-secondary);min-height:var(--hit);padding:0 .35rem;justify-content:flex-start;font-weight:500}.btn-large{min-height:var(--btn-h);width:100%;font-size:1.0625rem}.tab-bar{position:fixed;left:0;right:0;bottom:0;z-index:30;min-height:calc(var(--tab-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:var(--card);border-top:1px solid var(--separator)}.tab-bar-inner{display:grid;grid-template-columns:1fr 1fr 60px 1fr 1fr;align-items:stretch;min-height:var(--tab-h);padding:0 .35rem}.tab-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;min-height:var(--tab-h);color:var(--text-tertiary);font-size:11px;font-weight:500;letter-spacing:.01em}.tab-item.active{color:var(--text);font-weight:600}.tab-item.active svg{color:var(--accent)}.tab-fab-slot{width:var(--fab-size)}.tab-fab{position:absolute;left:50%;top:-10px;transform:translate(-50%);width:var(--fab-size);height:var(--fab-size);border-radius:999px;background:var(--accent);box-shadow:0 10px 24px #e8a31759;display:grid;place-items:center}.home-greeting{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.greeting-title{margin:0;font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.greeting-sub{margin:.35rem 0 0;color:var(--text-secondary);font-size:15px}.avatar-circle{width:48px;height:48px;border-radius:999px;background:var(--accent-soft);color:var(--text);display:grid;place-items:center;font-weight:700;font-size:14px;flex-shrink:0}.week-calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:.35rem}.week-cal-cell{display:grid;justify-items:center;gap:.25rem;padding:.55rem .2rem;border-radius:16px;background:transparent}.week-cal-cell.today{background:var(--accent);color:#202020}.week-cal-label{font-size:11px;font-weight:600;color:inherit;opacity:.7}.week-cal-num{font-size:15px;font-weight:700}.week-cal-dot{width:6px;height:6px;border-radius:999px;background:transparent}.week-cal-cell.filled .week-cal-dot{background:var(--accent)}.week-cal-cell.today.filled .week-cal-dot,.week-cal-cell.today .week-cal-dot{background:#202020}.pending-banner-card{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.75rem;min-height:100px;padding:.75rem 1rem;border-radius:var(--radius);background:var(--pending-bg);border:1.5px solid var(--pending-border);text-align:left;box-shadow:var(--shadow)}.pending-illu{width:88px;height:auto}.pending-copy{display:grid;gap:.15rem}.pending-copy strong{font-size:18px;font-weight:600}.pending-copy span{color:var(--text-secondary);font-size:14px}.hero-score-card{display:grid;grid-template-columns:1fr 38%;align-items:center;gap:.5rem;padding:18px;overflow:hidden}.hero-score-label{color:var(--text-secondary);font-size:14px;font-weight:500}.hero-score-value{margin:.15rem 0;font-size:54px;font-weight:700;letter-spacing:-.03em;line-height:1}.hero-score-sub{margin:0;color:var(--text-secondary);font-size:14px}.hero-illu{width:100%;height:auto;justify-self:end}.week-progress-card{display:grid;grid-template-columns:1fr auto;gap:.75rem;align-items:center;padding:16px 18px}.week-progress-row{display:flex;justify-content:space-between;gap:.75rem;margin-bottom:.45rem;color:var(--text-secondary);font-size:14px}.week-progress-row strong{color:var(--text);font-size:18px}.progress-track{height:8px;border-radius:999px;background:var(--surface-secondary);overflow:hidden;margin-top:.35rem}.progress-fill{height:100%;border-radius:inherit;background:var(--accent)}.scores-illu{width:72px;height:auto}.section-title{margin:0;font-size:20px;font-weight:600}.entry-list{display:grid;gap:.65rem}.entry-row{display:grid;grid-template-columns:auto 1fr;gap:.75rem;align-items:start;padding:16px;min-height:var(--hit);text-align:left;border-radius:var(--radius);background:var(--card);border:1px solid var(--separator);box-shadow:var(--shadow)}.entry-row.pending-row{background:var(--pending-bg);border-color:var(--pending-border)}.entry-row-main{display:grid;gap:.25rem;min-width:0}.entry-preview{color:var(--text);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.entry-row time{color:var(--text-tertiary);font-size:13px}.result-chip{display:inline-flex;align-items:center;gap:.25rem;padding:.3rem .55rem;border-radius:999px;font-size:12px;font-weight:600;text-transform:capitalize;white-space:nowrap}.result-chip.result-worked{background:var(--ok-bg);color:var(--ok)}.result-chip.result-partial{background:var(--warn-bg);color:var(--warn)}.result-chip.result-failed{background:var(--danger-bg);color:var(--danger)}.result-chip.result-pending{background:var(--pending-bg);color:var(--accent);border:1px solid var(--pending-border)}.quick-actions{display:flex;flex-wrap:wrap;gap:.5rem}.quick-chip{min-height:40px;padding:0 1rem;border-radius:999px;background:var(--surface-secondary);color:var(--text);font-weight:500;font-size:14px}.search-field{position:relative;display:block}.search-field svg{position:absolute;left:.9rem;top:50%;transform:translateY(-50%);color:var(--text-tertiary);pointer-events:none}.search-input{padding-left:2.4rem}.empty-state{padding:2rem 1.25rem;text-align:center;display:grid;gap:.75rem;justify-items:center}.detail-card,.form-card,.stats-card,.settings-card,.coach-result,.score-card{padding:16px 18px}.detail-snippet{margin:0;font-size:18px;font-weight:600;line-height:1.35}.meta-grid{display:grid;gap:.75rem}.section-head{display:flex;align-items:center;justify-content:space-between}.linkish{display:inline-flex;align-items:center;gap:.15rem;color:var(--accent);font-weight:600;font-size:14px;background:none;border:none;padding:0}.pending-focus{border:1.5px solid var(--pending-border);background:var(--pending-bg)}.resolve-snippet{padding:1rem}.resolve-activity{margin:0 0 .35rem;font-size:13px}.resolve-sticky{position:sticky;bottom:0;padding-top:.5rem;padding-bottom:.25rem;background:linear-gradient(transparent,var(--card) 28%)}.sheet-tall{max-height:85dvh!important}.gate-loading{min-height:100dvh;display:grid;place-items:center;color:var(--text-secondary);background:var(--bg)}.top-action{margin-left:auto;min-width:var(--hit);min-height:var(--hit);color:var(--accent);font-weight:600}.sheet-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100}.sheet-scrim{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background:#202020;opacity:0}.sheet-panel{position:absolute;left:0;right:0;bottom:0;max-height:min(82dvh,44rem);overflow:auto;padding-bottom:var(--safe-bottom);will-change:transform}.sheet-handle-zone{position:sticky;top:0;z-index:1;display:grid;justify-items:center;gap:.45rem;padding:.5rem var(--pad) .75rem;background:inherit;touch-action:none;-webkit-user-select:none;user-select:none}.sheet-handle{width:2.25rem;height:.3rem;border-radius:99px;background:var(--text-tertiary)}.sheet-handle-zone h2{margin:0;font-size:20px;font-weight:600}.sheet-content{padding:0 var(--pad) 1.25rem}.menu-list{display:grid}.menu-row{min-height:3.25rem;width:100%;text-align:left;border-bottom:1px solid var(--separator);color:var(--text)}.destructive-text{color:var(--danger)}.result-label{font-size:.75rem;font-weight:600;text-transform:capitalize}.result-worked{color:var(--ok)}.result-partial{color:var(--warn)}.result-failed{color:var(--danger)}.result-pending{color:var(--accent)}.detail-card p,.coach-text{margin:0;white-space:pre-wrap}.result-heading,.status-row,.score-card,.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.source-badge{padding:.2rem .55rem;border-radius:99px;font-size:.75rem;font-weight:700}.source-badge.rules{background:var(--warn-bg);color:var(--warn)}.source-badge.model{background:var(--accent-soft);color:#8a6408}.flags{color:var(--text-tertiary);font-size:.68rem;text-align:right}.pick-list{display:grid;overflow:hidden;border-radius:var(--radius);background:var(--surface-secondary)}.pick-row{display:flex;justify-content:space-between;gap:.75rem;min-height:3rem;padding:.65rem .85rem;text-align:left;border-bottom:1px solid var(--separator)}.pick-row span:last-child{white-space:nowrap;font-size:.75rem}.disclaimer{font-size:.8rem;text-align:center}.coach-input{min-height:9rem}.segment-row{display:flex;flex-wrap:wrap;gap:.4rem}.segment{min-width:var(--hit);min-height:var(--hit);padding:0 .75rem;border:1px solid var(--separator);border-radius:999px;color:var(--text-secondary);background:var(--card)}.segment[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--text);font-weight:600}.toggle-row{min-height:var(--hit)}.toggle-row input{width:1.4rem;height:1.4rem;accent-color:var(--accent)}.score-card>div{display:grid}.score-card strong,.score-readout{font-size:1.5rem;font-weight:700}.stats-card{display:grid;gap:.85rem}.outcome-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem}.outcome-grid div{display:grid;text-align:center;gap:.2rem}.outcome-grid strong,.large-number{font-size:1.5rem}.stat-row{display:grid;gap:.35rem}.stat-row>div:first-child{display:flex;justify-content:space-between;gap:.5rem}.bar-track{height:.35rem;border-radius:99px;background:var(--surface-secondary);overflow:hidden}.bar-track span{display:block;height:100%;border-radius:inherit;background:var(--accent)}.install-steps{margin:0;padding-left:1.4rem;display:grid;gap:.5rem}.daily-header{justify-content:space-between;align-items:center}.daily-date{font-size:13px;color:var(--text-secondary)}.daily-points{font-size:1.35rem;font-weight:700;color:var(--warn)}.tip-card{position:relative;display:flex;align-items:flex-start;gap:.5rem;padding:12px 44px 12px 16px;border-radius:var(--radius);background:var(--accent-soft);font-size:14px;color:var(--text-secondary)}.tip-card p{margin:0}.indoors-nudge{flex-direction:column;align-items:flex-start;padding-right:16px;gap:.35rem;background:#f3e8d8;color:var(--text)}.warning-chip{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;padding:.2rem .5rem;border-radius:6px;background:#e8a31733;color:#8a5a00}.tip-dismiss{position:absolute;top:6px;right:6px;display:grid;place-items:center;width:32px;height:32px;border-radius:999px;color:var(--text-secondary)}.choice-list{display:grid;gap:.5rem}.choice-item{min-height:var(--hit);padding:.7rem 1rem;text-align:left;border:1px solid var(--separator);border-radius:14px;background:var(--card);color:var(--text-secondary);font-size:15px}.choice-item[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--text);font-weight:600}.stepper-row{display:flex;align-items:center;gap:1rem}.stepper-btn{width:48px;height:48px;border-radius:999px;border:1px solid var(--separator);background:var(--card);font-size:1.4rem;line-height:1}.stepper-btn[disabled]{opacity:.4}.stepper-value{min-width:2.5rem;text-align:center;font-size:1.6rem;font-weight:700}.points-breakdown{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.points-breakdown li{display:flex;justify-content:space-between;gap:.75rem;font-size:14px}.points-breakdown li.missed{color:var(--text-tertiary)}.points-breakdown .points-pts{font-weight:700}.points-breakdown li.earned .points-pts{color:var(--ok)}.how-points{padding:14px 18px;font-size:14px;color:var(--text-secondary)}.how-points summary{cursor:pointer;font-weight:600;color:var(--text);min-height:var(--hit);display:flex;align-items:center}.how-points ul{margin:.5rem 0 0;padding-left:1.2rem;display:grid;gap:.4rem}.daily-sticky{position:sticky;bottom:0;padding:.5rem 0 .25rem;background:linear-gradient(to top,var(--bg) 70%,transparent)}.plan-header{flex-wrap:wrap;gap:.5rem}.plan-day-nav{display:flex;align-items:center;gap:.35rem}.icon-btn{width:44px;height:44px;display:grid;place-items:center;border-radius:999px;color:var(--text)}.chip-btn{min-height:36px;padding:0 .85rem;border-radius:999px;background:var(--accent-soft);color:var(--text);font-weight:600;font-size:13px}.plan-meta-row{display:flex;justify-content:space-between;gap:.75rem}.caption{font-size:13px;color:var(--text-secondary)}.plan-actions{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}.timeline-card{padding:12px 8px 12px 0;overflow:hidden}.timeline{position:relative;display:grid;grid-template-columns:56px 1fr}.timeline-gutter{position:relative}.timeline-hour-label{position:absolute;right:8px;transform:translateY(-50%);font-size:11px;color:var(--text-tertiary)}.timeline-canvas{position:relative;border-left:1px solid var(--separator)}.timeline-hour-line{position:absolute;left:0;right:0;height:1px;background:var(--separator)}.timeline-now{position:absolute;left:0;right:0;height:2px;background:var(--accent);z-index:3}.timeline-now-dot{position:absolute;left:-5px;top:-4px;width:10px;height:10px;border-radius:999px;background:var(--accent)}.timeline-block{position:absolute;left:8px;right:8px;z-index:2;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:.1rem;padding:6px 10px;border-radius:12px;border:1px solid transparent;text-align:left;overflow:hidden}.timeline-block strong{font-size:13px;font-weight:600}.timeline-block span{font-size:11px;opacity:.85}.timeline-block.duty{background:#e8eef3;color:#243447}.timeline-block.explore{background:#e5f3ea;color:#1f4d32}.timeline-block.restore{background:#f3e8f0;color:#4a2f45}.timeline-block.stabilize{background:#f7ecd8;color:#5a4418}.timeline-block.flex{background:var(--surface-secondary);color:var(--text)}.timeline-block.p0{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.timeline-block.done{opacity:.55}.timeline-block.skipped{opacity:.4;text-decoration:line-through}.plan-time-row{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.btn-secondary{min-height:var(--btn-h);width:100%;border-radius:999px;background:var(--card);border:1px solid var(--separator);color:var(--text);font-weight:600}.meta-line{margin:0;color:var(--text-secondary);font-size:14px}.empty-card{text-align:center}@keyframes card-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.home-page,.surface-card,.entry-row,.pending-banner-card{animation:none!important;transition:opacity .2s ease}.toast{transition:opacity .2s ease}}@media(prefers-reduced-transparency:reduce){.sheet-scrim{background:#202020cc}}@media(prefers-contrast:more){.tab-bar,.pending-banner-card,.segment,.entry-row{border-color:#20202059}}
 
 
static/assets/{index-DYDM6L-p.js → index-DGsuIBXN.js} RENAMED
@@ -99,4 +99,4 @@ var Vr=Object.defineProperty;var Rr=(t,e,n)=>e in t?Vr(t,e,{enumerable:!0,config
99
  * This source code is licensed under the ISC license.
100
  * See the LICENSE file in the root directory of this source tree.
101
  */const jc=ge("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function Hs(t){const e=t.replace(/^#/,"")||"/",[n="/",s=""]=e.split("?"),i=new URLSearchParams(s);return n==="/login"?{name:"login"}:n==="/"||n===""?{name:"home"}:n==="/log"?{name:"log",remedy:i.get("remedy")||void 0,happened:i.get("happened")||void 0}:n==="/history"?{name:"history"}:n.startsWith("/entry/")?{name:"entry",id:decodeURIComponent(n.slice(7))}:n==="/daily"?{name:"daily"}:n==="/plan"?{name:"plan"}:n.startsWith("/plan/")?{name:"plan",date:decodeURIComponent(n.slice(6))}:n==="/stats"?{name:"stats"}:n==="/coach"?{name:"coach"}:n==="/remedies"?{name:"remedies"}:n==="/settings"?{name:"settings"}:{name:"unknown",path:n}}function H(t){const e=t.startsWith("#")?t:`#${t.startsWith("/")?t:`/${t}`}`;if(window.location.hash===e){window.dispatchEvent(new HashChangeEvent("hashchange"));return}window.location.hash=e}function zc(){const[t,e]=b(()=>Hs(typeof window<"u"?window.location.hash:"#/"));return se(()=>{const n=()=>e(Hs(window.location.hash));return window.addEventListener("hashchange",n),window.location.hash||(window.location.hash="#/"),()=>window.removeEventListener("hashchange",n)},[]),t}const Ks=[{name:"home",label:"Home",path:"/",Icon:Bc},{name:"plan",label:"Plan",path:"/plan",Icon:Fc},{name:"daily",label:"Daily",path:"/daily",Icon:Oc},{name:"settings",label:"Settings",path:"/settings",Icon:Kc}];function qc({route:t}){const e=Ks.slice(0,2),n=Ks.slice(2);return r("nav",{class:"tab-bar","aria-label":"Main",children:[r("div",{class:"tab-bar-inner",children:[e.map(s=>{const i=t.name===s.name,a=s.Icon;return r(I,{className:`tab-item ${i?"active":""}`.trim(),ariaLabel:s.label,onClick:()=>H(s.path),children:[r(a,{size:22,strokeWidth:i?2.4:2,"aria-hidden":"true"}),r("span",{"aria-current":i?"page":void 0,children:s.label})]},s.name)}),r("div",{class:"tab-fab-slot","aria-hidden":"true"}),n.map(s=>{const i=t.name===s.name,a=s.Icon;return r(I,{className:`tab-item ${i?"active":""}`.trim(),ariaLabel:s.label,onClick:()=>H(s.path),children:[r(a,{size:22,strokeWidth:i?2.4:2,"aria-hidden":"true"}),r("span",{"aria-current":i?"page":void 0,children:s.label})]},s.name)})]}),r(I,{className:"tab-fab",ariaLabel:"Log",onClick:()=>H("/log"),children:r(Wc,{size:28,strokeWidth:2.5,color:"#202020","aria-hidden":"true"})})]})}function de(t){const e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0");return`${e}-${n}-${s}`}function Yc(t,e){const n=[];for(let s=e-1;s>=0;s-=1){const i=new Date(t.getFullYear(),t.getMonth(),t.getDate()-s);n.push(de(i))}return n}function Us(t=new Date){const e=new Date(t.getFullYear(),t.getMonth(),t.getDate()),n=e.getDay(),s=n===0?-6:1-n,i=new Date(e.getFullYear(),e.getMonth(),e.getDate()+s);return Yc(new Date(i.getFullYear(),i.getMonth(),i.getDate()+6),7)}function Gc(t){return de(new Date(t))}const js={primary_brick:"none",brick_done:!1,corn_sessions:0,delay_ok:!0,daydream:"none",rerun:"clean",court:"closed",stayed_indoors_all_day:!1,left_room:!1,left_home:!1,movement_minutes:0,interrupt_walk_minutes:0,fantasy_walk_minutes:0,headphones_on_walk:!1,music_cinematic_on_walk:!1,proof_brick_done:!1,proof_brick_kind:null,fantasy_minutes_scheduled:0,fantasy_minutes_unplanned:0,note:""};function Xc({open:t,onClose:e,indoorsStreak:n=0}){const s=be(),[i,a]=b(!1),[o,l]=b(!0),[u,c]=b("interrupt"),[h,p]=b(20),[d,f]=b(!1),m=async y=>{f(!0);const g=de(new Date);try{let _={...js};try{const w=await bn(g);_={primary_brick:w.primary_brick,brick_done:w.brick_done,corn_sessions:w.corn_sessions,delay_ok:w.delay_ok,daydream:w.daydream,rerun:w.rerun,court:w.court,stayed_indoors_all_day:!1,left_room:i||!!w.left_room,left_home:!!w.left_home||h>=15,movement_minutes:w.movement_minutes??0,interrupt_walk_minutes:w.interrupt_walk_minutes??0,fantasy_walk_minutes:w.fantasy_walk_minutes??0,headphones_on_walk:u==="interrupt"?!1:!!w.headphones_on_walk,music_cinematic_on_walk:u==="interrupt"?!1:!!w.music_cinematic_on_walk,proof_brick_done:!0,proof_brick_kind:"interrupt_walk",fantasy_minutes_scheduled:w.fantasy_minutes_scheduled??0,fantasy_minutes_unplanned:w.fantasy_minutes_unplanned??0,note:w.note||""}}catch{_={...js,left_room:i,left_home:h>=15,proof_brick_done:!0,proof_brick_kind:"interrupt_walk",headphones_on_walk:u!=="interrupt"}}if(u==="interrupt"?(_.interrupt_walk_minutes=Math.max(_.interrupt_walk_minutes||0,h),_.headphones_on_walk=!1,_.music_cinematic_on_walk=!1):_.fantasy_walk_minutes=Math.max(_.fantasy_walk_minutes||0,h),_.movement_minutes=(_.interrupt_walk_minutes||0)+(_.fantasy_walk_minutes||0),_.stayed_indoors_all_day=!1,await wn(g,_),s.show("Movement saved on Daily"),e(),y){const w=encodeURIComponent(u==="interrupt"?`Interrupt walk ${h} min — wallet home, first 15 no headphones`:`Music / fantasy walk ${h} min — leisure, not medicine`);H(`/log?happened=${w}&remedy=${encodeURIComponent("Interrupt walk")}`)}}catch(_){s.show(_ instanceof ye?_.message:"Could not save movement","error")}finally{f(!1)}};return r(Ie,{open:t,title:"Move now",onClose:e,children:r("div",{class:"stack",children:[r("p",{class:"muted",children:["Preview, not proof. Interrupt walk: no headphones, eyes outside.",n>=2?` ${n} days indoors — 20 min out, wallet home, first 15 min no headphones.`:""]}),r("label",{class:"toggle-row",children:[r("input",{type:"checkbox",checked:i,onChange:y=>a(y.target.checked)}),r("span",{children:"Left bed / room"})]}),r("label",{class:"toggle-row",children:[r("input",{type:"checkbox",checked:o,onChange:y=>l(y.target.checked)}),r("span",{children:"Wallet stays home (no spend needed)"})]}),r("span",{class:"field-label",children:"Walk type"}),r("div",{class:"chip-row",role:"group","aria-label":"Walk type",children:[r(I,{className:"chip",ariaPressed:u==="interrupt",onClick:()=>c("interrupt"),children:"Interrupt (medicine)"}),r(I,{className:"chip",ariaPressed:u==="fantasy",onClick:()=>c("fantasy"),children:"Music walk (leisure)"})]}),u==="interrupt"?r("p",{class:"muted",children:"Interrupt walk: no headphones, eyes outside."}):r("p",{class:"muted",children:"Music walk: leisure, not medicine."}),r("label",{class:"field-label",for:"move-min",children:["Minutes · ",h]}),r("input",{id:"move-min",type:"range",min:5,max:60,step:5,value:h,onInput:y=>p(Number(y.target.value))}),r(B,{disabled:d||!i,onClick:()=>void m(!1),children:"Save to Daily"}),r(B,{variant:"secondary",disabled:d||!i,onClick:()=>void m(!0),children:"Save + open Log"})]})})}const zs=42;function yt(t){const[e,n]=t.split(":").map(Number);return e*60+n}function Jc(){const{openResolve:t,refreshPendingSignal:e}=Et(),[n,s]=b([]),[i,a]=b(null),[o,l]=b([]),[u,c]=b(new Set),[h,p]=b([]),[d,f]=b(null),[m,y]=b(0),[g,_]=b(!1),w=async()=>{const M=Us(new Date),$=de(new Date);try{const U=await Ze({result:"pending",limit:50});s(U.items)}catch{s([])}try{const U=await hs(M[0],M[6]);a(U);const O=de(new Date(new Date(`${$}T00:00:00`).getTime()-13*864e5)),W=await hs(O,$),ee=new Map(W.items.map(ie=>[ie.date,ie]));let re=0;const G=new Date(`${$}T00:00:00`);for(let ie=0;ie<14;ie+=1){const oe=de(G),S=ee.get(oe);if(!(S!=null&&S.stayed_indoors_all_day))break;re+=1,G.setDate(G.getDate()-1)}y(re)}catch{a(null),y(0)}try{const U=await Ze({limit:8});l(U.items);const O=await Ze({start:M[0],end:M[6],limit:100});c(new Set(O.items.map(W=>Gc(W.ts))))}catch{l([])}try{const U=await _i($),O=new Date,W=O.getHours()*60+O.getMinutes(),ee=U.blocks.filter(G=>G.status==="planned"&&yt(G.end)>=W).sort((G,ie)=>yt(G.start)-yt(ie.start)).slice(0,2);p(ee);const re=U.blocks.find(G=>G.status==="planned"&&yt(G.end)<W&&!G.feedback)||null;f(re)}catch{p([]),f(null)}};se(()=>{w()},[e]);const x=de(new Date),N=Us(new Date),P=new Map(((i==null?void 0:i.items)??[]).map(M=>[M.date,M])),A=(i==null?void 0:i.week_points)??0,V=P.get(x),D=(V==null?void 0:V.points)??0,R=Math.min(1,A/zs),T=new Set(["shame","urge","anxiety","anger","lonely","freeze"]),E=!!V&&!(V!=null&&V.proof_brick_done)&&[...n,...o].some(M=>{const $=(M.emotions||[]).map(O=>O.toLowerCase()),U=(M.tags||[]).map(O=>O.toLowerCase());return(M.intensity??0)>=7&&(M.result==="pending"||M.result==="failed")&&($.some(O=>T.has(O))||U.some(O=>["freeze","indoors","shame","rerun"].includes(O)))}),J=!!V&&(V.fantasy_walk_minutes??0)>=15&&(V.headphones_on_walk||V.music_cinematic_on_walk),Q=M=>{const $=P.get(M);return!!($!=null&&$.brick_done)||u.has(M)};return r("div",{class:"app-shell journal-home",children:[r("main",{class:"page home-page stack",children:[r("header",{class:"home-greeting",children:[r("div",{children:[r("h1",{class:"greeting-title",children:"Hi, there"}),r("p",{class:"greeting-sub",children:"Here's your progress this week"})]}),r("div",{class:"avatar-circle","aria-hidden":"true",children:"HJ"})]}),r("section",{class:"week-calendar","aria-label":"This week",children:N.map(M=>{const $=new Date(`${M}T00:00:00`),U=new Intl.DateTimeFormat(void 0,{weekday:"narrow"}).format($),O=$.getDate(),W=M===x,ee=Q(M);return r("div",{class:`week-cal-cell ${W?"today":""} ${ee?"filled":""}`.trim(),children:[r("span",{class:"week-cal-label",children:U}),r("span",{class:"week-cal-num",children:O}),r("span",{class:"week-cal-dot","aria-hidden":"true"})]},M)})}),m>=2&&r(I,{className:"tip-card indoors-nudge",onClick:()=>_(!0),ariaLabel:`${m} days indoors — take a short walk`,children:[r("span",{class:"warning-chip",children:[m," days indoors"]}),r("p",{children:[m," days indoors — 20 min out, wallet home, first 15 min no headphones"]})]}),n.length>0?r(I,{className:"pending-banner-card",ariaLabel:`${n.length} pending. Tap to finish.`,onClick:()=>t(n),children:[r("img",{class:"pending-illu",src:"/illustrations/pending.svg",alt:"",width:"88",height:"72"}),r("div",{class:"pending-copy",children:[r("strong",{children:[n.length," pending"]}),r("span",{children:"Tap to finish"})]}),r(Wn,{size:22,"aria-hidden":"true"})]}):null,E&&r(I,{className:"tip-card indoors-nudge",onClick:()=>H("/log"),ariaLabel:"Add one proof brick",children:[r("span",{class:"warning-chip",children:"Proof missing"}),r("p",{children:"High spike logged — one proof brick today. Label once (30s). Proof is visible outside your head."})]}),d&&r(I,{className:"tip-card",onClick:()=>H("/plan"),ariaLabel:`Finish feedback for ${d.title}`,children:r("p",{children:["Finish feedback for: ",r("strong",{children:d.title})]})}),J&&r("div",{class:"tip-card",role:"status",children:r("p",{children:"Music walk: leisure, not medicine. Interrupt walk: no headphones, eyes outside."})}),r("section",{class:"surface-card form-card stack","aria-label":"Today's plan",children:[r("div",{class:"week-progress-row",children:[r("h2",{class:"section-title",style:{margin:0},children:"Today’s plan"}),r(I,{className:"chip-btn",onClick:()=>H("/plan"),children:"Open"})]}),h.length?r("div",{class:"stack",children:h.map(M=>r(I,{className:"entry-row",onClick:()=>H("/plan"),children:r("span",{class:"entry-row-main",children:[r("span",{class:"entry-preview",children:[M.status==="planned"?"○ ":"✓ ",M.priority==="P0"?"P0 · ":"",M.title]}),r("time",{children:[M.start,"–",M.end]})]})},M.id))}):r("div",{class:"stack",children:[r("p",{class:"muted",children:"No upcoming blocks."}),r(I,{className:"chip-btn",onClick:()=>H("/plan"),children:"Paste plan from chat"})]})]}),r("section",{class:"hero-score-card surface-card","aria-label":"Week points",children:[r("div",{class:"hero-score-copy",children:[r("span",{class:"hero-score-label",children:"Week points"}),r("p",{class:"hero-score-value",children:A}),r("p",{class:"hero-score-sub",children:"Logged days compound."})]}),r("img",{class:"hero-illu",src:"/illustrations/hero-home.svg",alt:"",width:"140",height:"120"})]}),r("section",{class:"week-progress-card surface-card","aria-label":"Week progress",children:[r("div",{class:"week-progress-copy",children:[r("div",{class:"week-progress-row",children:[r("span",{children:"Weekly total"}),r("strong",{children:A})]}),r("div",{class:"week-progress-row",children:[r("span",{children:"Today"}),r("strong",{children:D})]}),r("div",{class:"progress-track",role:"progressbar","aria-valuenow":A,"aria-valuemin":0,"aria-valuemax":zs,children:r("div",{class:"progress-fill",style:{width:`${R*100}%`}})})]}),r("img",{class:"scores-illu",src:"/illustrations/scores.svg",alt:"",width:"72",height:"72"})]}),r("section",{class:"stack recent-section","aria-label":"Recent entries",children:[r("div",{class:"week-progress-row",children:[r("h2",{class:"section-title",style:{margin:0},children:"Recent"}),r(I,{className:"chip-btn",onClick:()=>H("/history"),children:"See all"})]}),o.length?r("div",{class:"entry-list",children:o.map(M=>r(I,{className:`entry-row ${M.result==="pending"?"pending-row":""}`.trim(),onClick:()=>H(`/entry/${encodeURIComponent(M.id)}`),children:[r("span",{class:`result-chip result-${M.result}`,children:[M.result==="pending"?r(Lc,{size:14,"aria-hidden":"true"}):null,M.result]}),r("span",{class:"entry-row-main",children:[r("span",{class:"entry-preview",children:[M.happened.slice(0,80),M.happened.length>80?"…":""]}),r("time",{children:new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}).format(new Date(M.ts))})]})]},M.id))}):r("p",{class:"muted",children:"No entries yet."})]}),r("section",{class:"quick-actions","aria-label":"Quick actions",children:[r(I,{className:"quick-chip",onClick:()=>H("/plan"),children:"Plan"}),r(I,{className:"quick-chip",onClick:()=>H("/history"),children:"History"}),r(I,{className:"quick-chip",onClick:()=>H("/daily"),children:"Daily"}),r(I,{className:"quick-chip",onClick:()=>H("/coach"),children:"Coach"})]})]}),r(Xc,{open:g,onClose:()=>_(!1),indoorsStreak:m})]})}const Zc=40;function Qc(){const{refreshPendingSignal:t}=Et(),[e,n]=b([]),[s,i]=b(0),[a,o]=b(""),[l,u]=b(""),[c,h]=b(!1),p=async(m=0,y=!1)=>{h(!0);try{const g=await Ze({result:a||void 0,limit:Zc,offset:m});n(_=>y?g.items:[..._,...g.items]),i(g.total)}finally{h(!1)}};se(()=>{p(0,!0)},[a,t]);const d=Ve(()=>{const m=l.trim().toLowerCase();return m?e.filter(y=>y.happened.toLowerCase().includes(m)||y.activity.toLowerCase().includes(m)||y.remedy.toLowerCase().includes(m)||y.tags.some(g=>g.includes(m))):e},[e,l]);return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{class:"page-title",children:"History"})}),r("main",{class:"page stack",children:[r("label",{class:"search-field",children:[r(Hc,{size:18,"aria-hidden":"true"}),r("input",{class:"field-input search-input",type:"search",placeholder:"Search entries",value:l,onInput:m=>u(m.target.value)})]}),r("div",{class:"chip-row filter-chips",role:"group","aria-label":"Filter",children:[{value:"",label:"All"},{value:"worked",label:"Worked"},{value:"partial",label:"Partial"},{value:"failed",label:"Failed"},{value:"pending",label:"Pending"}].map(m=>r(I,{className:"chip",ariaPressed:a===m.value,onClick:()=>o(m.value),children:[m.value==="pending"?r(Uc,{size:14,"aria-hidden":"true"}):null,m.label]},m.label))}),!d.length&&!c?r("div",{class:"empty-state surface-card",children:[r("img",{src:"/illustrations/empty.svg",alt:"",width:"120",height:"100"}),r("p",{children:"No entries yet."}),r(B,{onClick:()=>H("/log"),children:"Log entry"})]}):null,r("div",{class:"entry-list",children:d.map(m=>r(I,{className:`entry-row ${m.result==="pending"?"pending-row":""}`.trim(),onClick:()=>{H(`/entry/${encodeURIComponent(m.id)}`)},children:[r("span",{class:`result-chip result-${m.result}`,children:m.result}),r("span",{class:"entry-row-main",children:[r("span",{class:"entry-preview",children:[m.happened.slice(0,80),m.happened.length>80?"…":""]}),r("time",{children:new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}).format(new Date(m.ts))})]})]},m.id))}),e.length<s?r(B,{variant:"secondary",disabled:c,onClick:()=>p(e.length),children:c?"Loading…":"Load more"}):null]})]})}function qs(t){return t==="model"?"Model":"Rules"}function ed({picks:t}){return t.length?r("section",{class:"stack compact",children:[r("h3",{class:"section-title",children:"From your data"}),r("div",{class:"pick-list",children:t.map(e=>r(I,{className:"pick-row",onClick:()=>H(`/log?remedy=${encodeURIComponent(e.remedy_key)}`),children:[r("span",{children:e.remedy_key}),r("span",{class:"muted",children:["n=",e.n," · ",Math.round(e.p_helped*100),"% helped"]})]},e.remedy_key))})]}):null}function Pr({result:t}){const e=Se(null),n=be();se(()=>{e.current&&(rt()?Re(e.current,{opacity:[0,1]},{duration:.18}):Re(e.current,{opacity:[0,1],y:[12,0]},We.snap))},[t.trace_id]);const s=async()=>{try{await navigator.clipboard.writeText(await ta()),n.show("Debug copied")}catch(o){n.show(o instanceof Error?o.message:"Copy failed","error")}},i=/LOOP:\s*</i.test(t.text)||/<(?:tag|word|one concrete action)/i.test(t.text),a=i?"Coach returned an empty template — using Rules backup on retry. Tap Coach again or force Rules.":t.text;return r("article",{ref:e,class:"surface-card coach-result stack",children:[r("div",{class:"result-heading",children:[r("span",{class:`source-badge ${qs(t.source).toLowerCase()}`,children:i?"Rules":qs(t.source)}),t.flags.length?r("span",{class:"flags",children:t.flags.join(" · ")}):null]}),r("p",{class:"coach-text",children:a}),r(ed,{picks:t.server_picks}),r(B,{variant:"secondary",onClick:s,children:"Copy debug"})]})}function td({id:t}){const e=be(),{openResolveId:n,refreshPendingSignal:s}=Et(),[i,a]=b(null),[o,l]=b(null),[u,c]=b(!1),[h,p]=b(null),[d,f]=b(!1);if(se(()=>{let y=!1;return ds(t).then(g=>{y||(a(g),l(g),g.result==="pending"&&n(g.id,g))}).catch(g=>{y||e.show(g.message,"error")}),()=>{y=!0}},[t]),se(()=>{s&&ds(t).then(y=>{a(y),l(y)}).catch(()=>{})},[s,t]),!i||!o)return r("div",{class:"gate-loading",children:"Loading…"});const m=async()=>{f(!0);try{const y=await gi(t,{activity:o.activity,happened:o.happened,emotions:o.emotions,intensity:o.intensity,remedy:o.remedy,result:o.result,tags:o.tags,notes:o.notes});a(y),l(y),e.show("Saved")}catch(y){e.show(y instanceof Error?y.message:"Update failed","error")}finally{f(!1)}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:[r(B,{variant:"plain",onClick:()=>H("/history"),children:"‹ Back"}),r("h1",{class:"page-title",children:"Entry"}),r("span",{})]}),r("main",{class:"page stack",children:[r("article",{class:"surface-card detail-card stack",children:[r("p",{class:"detail-snippet",children:o.happened}),r("div",{class:"meta-grid",children:[r("div",{children:[r("span",{class:"field-label",children:"Date"}),new Date(i.ts).toLocaleString()]}),r("div",{children:[r("span",{class:"field-label",children:"Activity"}),o.activity||"—"]}),r("div",{children:[r("span",{class:"field-label",children:"Emotions"}),o.emotions.join(", ")||"—"]}),r("div",{children:[r("span",{class:"field-label",children:"Intensity"}),o.intensity,"/10"]}),r("div",{children:[r("span",{class:"field-label",children:"Tags"}),o.tags.join(", ")||"—"]})]})]}),r("section",{class:`surface-card form-card stack ${o.result==="pending"?"pending-focus":""}`.trim(),children:[r("div",{class:"section-head",children:[r("span",{class:"field-label",children:"Result"}),i.result==="pending"?r(nd,{onClick:()=>n(i.id,i)}):null]}),r(Bn,{value:o.result,onChange:y=>l({...o,result:y})}),r("label",{class:"field-label",for:"entry-remedy",children:"Remedy"}),r("input",{id:"entry-remedy",class:"field-input",value:o.remedy,onInput:y=>l({...o,remedy:y.target.value})}),r(B,{disabled:d,onClick:m,children:d?"Saving…":"Save"})]}),r(B,{variant:"secondary",disabled:d,onClick:async()=>{f(!0);try{p(await Xr(t))}catch(y){e.show(y instanceof Error?y.message:"Suggestion failed","error")}finally{f(!1)}},children:"Get suggestion"}),h?r(Pr,{result:h}):null,r(B,{variant:"destructive",onClick:()=>c(!0),children:"Delete entry"})]}),r(Ie,{open:u,title:"Delete entry?",onClose:()=>c(!1),children:r("div",{class:"stack",children:[r("p",{children:"This permanently deletes this entry."}),r(B,{variant:"destructive",onClick:async()=>{await Yr(t),e.show("Entry deleted"),H("/history")},children:"Delete"}),r(B,{variant:"secondary",onClick:()=>c(!1),children:"Cancel"})]})})]})}function nd({onClick:t}){return r("button",{type:"button",class:"linkish",onClick:t,children:["Finish now ",r(Wn,{size:16,"aria-hidden":"true"})]})}const Ys={primary_brick:"none",brick_done:!1,corn_sessions:0,delay_ok:!0,daydream:"none",rerun:"clean",court:"closed",stayed_indoors_all_day:!1,left_room:!1,left_home:!1,movement_minutes:0,interrupt_walk_minutes:0,fantasy_walk_minutes:0,headphones_on_walk:!1,music_cinematic_on_walk:!1,proof_brick_done:!1,proof_brick_kind:null,fantasy_minutes_scheduled:0,fantasy_minutes_unplanned:0,note:""},sd=[{value:"interrupt_walk",label:"Interrupt walk"},{value:"body_or_room",label:"Body or room"},{value:"trip_admin",label:"Trip admin"},{value:"earn",label:"Earn"},{value:"boundary",label:"Boundary"},{value:"food",label:"Food"},{value:"survive",label:"Survive"},{value:"other",label:"Other"}],id=[{value:"A",label:"Admin / trip task"},{value:"B",label:"Body or room care"},{value:"C",label:"Work / skill"},{value:"D",label:"Home exit plan"},{value:"E",label:"Held a boundary"},{value:"S",label:"Just survived the day"},{value:"none",label:"Nothing yet"}],rd=[{value:"none",label:"No"},{value:"done",label:"Yes, and I still did one real step"},{value:"fc",label:"Yes, and I didn’t do a real step"}],ad=[{value:"clean",label:"I cut it short or didn’t go there"},{value:"R",label:"I stayed stuck in it"}],od=[{value:"closed",label:"I closed it"},{value:"court",label:"I kept prosecuting the case"}],Gs="daily-tip-dismissed";function ue({options:t,value:e,onChange:n}){return r("div",{class:"choice-list",role:"radiogroup",children:t.map(s=>r(I,{className:"choice-item",ariaPressed:s.value===e,onClick:()=>n(s.value),children:s.label},s.value))})}function ld({value:t,onChange:e}){return r("div",{class:"stepper-row",children:[r(I,{className:"stepper-btn",ariaLabel:"One less",disabled:t<=0,onClick:()=>e(Math.max(0,t-1)),children:"−"}),r("strong",{class:"stepper-value",children:t>=3?`${t}`:t}),r(I,{className:"stepper-btn",ariaLabel:"One more",disabled:t>=10,onClick:()=>e(Math.min(10,t+1)),children:"+"})]})}function cd(t){return new Date(`${t}T00:00:00`).toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric"})}function dd(t){const e=t.corn_sessions===0||t.corn_sessions<=1&&t.delay_ok;return[{label:"Did the main action",earned:t.brick_done,pts:2},{label:"No escapes — or just one, after waiting",earned:e,pts:1},{label:"Fantasy didn’t replace a real step",earned:t.daydream!=="fc",pts:1},{label:"Cut the mental replay short",earned:t.rerun==="clean",pts:1},{label:"Kept the case closed",earned:t.court==="closed",pts:1}]}function ud(){const t=be(),[e,n]=b(de(new Date)),[s,i]=b(Ys),[a,o]=b(null),[l,u]=b(!1),[c,h]=b(()=>localStorage.getItem(Gs)==="1"),p=async f=>{o(null);try{const m=await bn(f);i({primary_brick:m.primary_brick,brick_done:m.brick_done,corn_sessions:m.corn_sessions,delay_ok:m.delay_ok,daydream:m.daydream,rerun:m.rerun,court:m.court,stayed_indoors_all_day:!!m.stayed_indoors_all_day,left_room:!!m.left_room,left_home:!!m.left_home,movement_minutes:m.movement_minutes??0,interrupt_walk_minutes:m.interrupt_walk_minutes??0,fantasy_walk_minutes:m.fantasy_walk_minutes??0,headphones_on_walk:!!m.headphones_on_walk,music_cinematic_on_walk:!!m.music_cinematic_on_walk,proof_brick_done:!!m.proof_brick_done,proof_brick_kind:m.proof_brick_kind??null,fantasy_minutes_scheduled:m.fantasy_minutes_scheduled??0,fantasy_minutes_unplanned:m.fantasy_minutes_unplanned??0,note:m.note}),o(m)}catch{i(Ys)}};se(()=>{p(e)},[e]);const d=async()=>{u(!0);try{const f=await wn(e,s);o(f),t.show("Saved")}catch(f){t.show(f instanceof Error?f.message:"Save failed","error")}finally{u(!1)}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar daily-header",children:[r("div",{children:[r("h1",{class:"page-title",children:"Today"}),r("span",{class:"daily-date",children:cd(e)})]}),r("strong",{class:"daily-points","aria-label":"Points today",children:a?`${a.points}/6`:"–/6"})]}),r("main",{class:"page stack",children:[!c&&r("div",{class:"tip-card",role:"note",children:[r("p",{children:["This page is your day’s scoreboard. Use ",r("strong",{children:"Log"})," for what happened and what you tried."]}),r(I,{className:"tip-dismiss",ariaLabel:"Dismiss tip",onClick:()=>{localStorage.setItem(Gs,"1"),h(!0)},children:r(jc,{size:16})})]}),r("label",{class:"field-label",children:["Date",r("input",{class:"field-input",type:"date",value:e,onInput:f=>n(f.target.value)})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"What was today’s one real thing?"}),r(ue,{options:id,value:s.primary_brick,onChange:f=>i({...s,primary_brick:f})}),r("label",{class:"toggle-row",children:[r("span",{children:"I actually did this today"}),r("input",{type:"checkbox",checked:s.brick_done,onChange:f=>i({...s,brick_done:f.target.checked})})]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Escapes"}),r("span",{class:"field-label",children:"How many times did you use porn/masturbation to escape today?"}),r(ld,{value:s.corn_sessions,onChange:f=>i({...s,corn_sessions:f})}),s.corn_sessions>=1&&r(_e,{children:[r("span",{class:"field-label",children:"Before that, did you wait about 10 minutes and do one small real task first?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.delay_ok?"yes":"no",onChange:f=>i({...s,delay_ok:f==="yes"})})]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Did you drift into fantasy today?"}),r(ue,{options:rd,value:s.daydream,onChange:f=>i({...s,daydream:f})})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Replaying painful scenes?"}),r(ue,{options:ad,value:s.rerun,onChange:f=>i({...s,rerun:f})}),r("span",{class:"section-title",children:"Arguing the family case in your head?"}),r(ue,{options:od,value:s.court,onChange:f=>i({...s,court:f})})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Movement"}),r("span",{class:"field-label",children:"Did you stay indoors the whole day?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.stayed_indoors_all_day?"yes":"no",onChange:f=>i({...s,stayed_indoors_all_day:f==="yes"})}),r("span",{class:"field-label",children:"Did you leave the bedroom / room?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.left_room?"yes":"no",onChange:f=>i({...s,left_room:f==="yes"})}),r("span",{class:"field-label",children:"Did you leave the house/compound?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.left_home?"yes":"no",onChange:f=>i({...s,left_home:f==="yes"})}),r("label",{class:"field-label",children:["Interrupt walk minutes (attention break — better without headphones)",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.interrupt_walk_minutes,onInput:f=>{const m=Math.max(0,Number(f.target.value)||0);i({...s,interrupt_walk_minutes:m,movement_minutes:m+s.fantasy_walk_minutes})}})]}),r("label",{class:"field-label",children:["Fantasy / music walk minutes (honest log OK)",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.fantasy_walk_minutes,onInput:f=>{const m=Math.max(0,Number(f.target.value)||0);i({...s,fantasy_walk_minutes:m,movement_minutes:s.interrupt_walk_minutes+m})}})]}),r("span",{class:"field-label",children:"Headphones on a walk?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.headphones_on_walk?"yes":"no",onChange:f=>i({...s,headphones_on_walk:f==="yes"})}),r("span",{class:"field-label",children:"Cinematic / movie music on a walk?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.music_cinematic_on_walk?"yes":"no",onChange:f=>i({...s,music_cinematic_on_walk:f==="yes"})}),r("p",{class:"caption muted",children:["Compound laps and short walks count — no spend needed. Total moving:"," ",s.interrupt_walk_minutes+s.fantasy_walk_minutes,"m"]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Proof brick"}),r("span",{class:"field-label",children:"Did you do one real proof step today?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.proof_brick_done?"yes":"no",onChange:f=>i({...s,proof_brick_done:f==="yes",proof_brick_kind:f==="yes"?s.proof_brick_kind:null})}),s.proof_brick_done&&r(_e,{children:[r("span",{class:"field-label",children:"What kind?"}),r(ue,{options:sd,value:s.proof_brick_kind||"other",onChange:f=>i({...s,proof_brick_kind:f})})]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Movie / fantasy time"}),r("label",{class:"field-label",children:["Minutes in a scheduled slot",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.fantasy_minutes_scheduled,onInput:f=>i({...s,fantasy_minutes_scheduled:Math.max(0,Number(f.target.value)||0)})})]}),r("label",{class:"field-label",children:["Minutes unplanned (drifted into it)",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.fantasy_minutes_unplanned,onInput:f=>i({...s,fantasy_minutes_unplanned:Math.max(0,Number(f.target.value)||0)})})]}),r("p",{class:"caption muted",children:"Containment beats guilt. Log honestly."})]}),r("label",{class:"field-label",children:["Note (optional)",r("input",{class:"field-input",type:"text",placeholder:"One line about today",value:s.note,onInput:f=>i({...s,note:f.target.value})})]}),a&&r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:["Points: ",a.points,"/6"]}),r("ul",{class:"points-breakdown",children:dd(a).map(f=>r("li",{class:f.earned?"earned":"missed",children:[r("span",{children:f.label}),r("span",{class:"points-pts",children:f.earned?`+${f.pts}`:"0"})]},f.label))})]}),r("details",{class:"how-points surface-card",children:[r("summary",{children:"How points work"}),r("ul",{children:[r("li",{children:"Doing your one real thing earns 2 points."}),r("li",{children:"No escape sessions — or a single one after the 10-minute wait — earns 1 point."}),r("li",{children:"Fantasy is fine if you still did a real step: 1 point."}),r("li",{children:"Cutting mental replays short earns 1 point."}),r("li",{children:"Keeping the family case closed earns 1 point."})]})]}),r("div",{class:"daily-sticky",children:r(B,{className:"btn-large",disabled:l,onClick:d,children:l?"Saving…":"Save today’s check-in"})})]})]})}const hd=[{value:"earn_ship",label:"Work / earn"},{value:"admin_spain",label:"Trip / admin"},{value:"body_care",label:"Body or room"},{value:"move_out",label:"Move-out step"},{value:"food_out",label:"Food"},{value:"stabilize",label:"Stabilize / reset"},{value:"explore",label:"Try something new"},{value:"restore_fun",label:"Fun recharge"},{value:"boundary",label:"Boundary practice"},{value:"sleep_window",label:"Sleep wind-down"},{value:"other",label:"Other"}];function fd(t,e){const[n,s]=t.split(":").map(Number),i=n*60+s+e,a=Math.floor((i%1440+1440)%1440/60),o=(i%1440+1440)%1440%60;return`${String(a).padStart(2,"0")}:${String(o).padStart(2,"0")}`}function pd({open:t,day:e,block:n,mode:s,onClose:i,onChanged:a}){const o=be(),[l,u]=b("done"),[c,h]=b(30),[p,d]=b(3),[f,m]=b(3),[y,g]=b(0),[_,w]=b(""),[x,N]=b(""),[P,A]=b(""),[V,D]=b(""),[R,T]=b([]),[E,J]=b(""),[Q,M]=b(5),[$,U]=b(!1),[O,W]=b(!1),[ee,re]=b([]),[G,ie]=b("New block"),[oe,S]=b("other"),[K,L]=b("09:00"),[le,k]=b("09:30"),[F,Y]=b("P2"),[j,fe]=b("duty");se(()=>{var v,Te,ht,Hn,Kn,Un,jn,zn,qn,Yn,Gn,Xn;t&&(s==="create"&&aa().then(Nr=>re(Nr.items||[])).catch(()=>re([])),s==="view"&&n&&(h(((v=n.feedback)==null?void 0:v.actual_min)??n.planned_min??30),u(((Te=n.feedback)==null?void 0:Te.did)||(n.status==="skipped"?"skipped":"done")),d(((ht=n.feedback)==null?void 0:ht.quality)??3),m(((Hn=n.feedback)==null?void 0:Hn.fun)??3),g(((Kn=n.feedback)==null?void 0:Kn.energy_after)??0),w(((Un=n.feedback)==null?void 0:Un.would_repeat)||""),N(((jn=n.feedback)==null?void 0:jn.skip_reason)||""),A(((zn=n.feedback)==null?void 0:zn.note)||""),D(((qn=n.feedback)==null?void 0:qn.money_amount)!=null?String(n.feedback.money_amount):""),T(((Yn=n.feedback)==null?void 0:Yn.emotions)||[]),J(((Gn=n.feedback)==null?void 0:Gn.fse_event)||""),M(((Xn=n.feedback)==null?void 0:Xn.intensity)??5),U(!1)),s==="create"&&(ie("New block"),S("other"),L("09:00"),k("09:30"),Y("P2"),fe("duty")))},[t,s,n==null?void 0:n.id]);const ct=v=>{ie(v.title),S(v.kind),Y(v.priority||"P2"),fe(v.intent||(v.kind==="explore"?"explore":v.kind==="restore_fun"?"restore_fun":"duty")),k(fd(K,v.default_min||30))},dt=async()=>{if(n){W(!0);try{await ra(e,n.id,{did:l,actual_min:l==="skipped"?null:c,quality:l==="skipped"||!$?null:p,fun:l==="skipped"||!$?null:f,energy_after:$?y:null,money_amount:V?Number(V):null,would_repeat:_||null,skip_reason:l==="skipped"?x||"other":null,note:P,emotions:R,fse_event:E,intensity:l==="skipped"?null:Q}),o.show("Saved"),a(),i()}catch(v){o.show(v instanceof Error?v.message:"Save failed","error")}finally{W(!1)}}},Ft=async()=>{W(!0);try{await sa(e,{title:G,kind:oe,start:K,end:le,priority:F,intent:oe==="explore"?"explore":oe==="restore_fun"?"restore_fun":oe==="stabilize"?"measure":j,locked:F==="P0"}),o.show("Block added"),a(),i()}catch(v){o.show(v instanceof Error?v.message:"Could not add","error")}finally{W(!1)}},ut=async()=>{if(!(!n||!confirm("Remove this block?"))){W(!0);try{await ia(e,n.id),o.show("Removed"),a(),i()}catch(v){o.show(v instanceof Error?v.message:"Delete failed","error")}finally{W(!1)}}};return r(Ie,{open:t,tall:!0,title:s==="create"?"Add block":(n==null?void 0:n.title)||"Block",onClose:i,children:s==="create"?r("div",{class:"stack",children:[ee.length>0&&r(_e,{children:[r("span",{class:"field-label",children:"From template"}),r("div",{class:"choice-list",children:ee.slice(0,8).map(v=>r(I,{className:"choice-item",onClick:()=>ct(v),children:v.title},v.id))})]}),r("label",{class:"field-label",children:["Title",r("input",{class:"field-input",value:G,onInput:v=>ie(v.target.value)})]}),r("span",{class:"field-label",children:"Type"}),r("div",{class:"choice-list",children:hd.map(v=>r(I,{className:"choice-item",ariaPressed:oe===v.value,onClick:()=>S(v.value),children:v.label},v.value))}),r("div",{class:"plan-time-row",children:[r("label",{class:"field-label",children:["Start",r("input",{class:"field-input",type:"time",value:K,onInput:v=>L(v.target.value)})]}),r("label",{class:"field-label",children:["End",r("input",{class:"field-input",type:"time",value:le,onInput:v=>k(v.target.value)})]})]}),r("span",{class:"field-label",children:"Priority"}),r("div",{class:"segment-row",children:["P0","P1","P2"].map(v=>r(I,{className:"segment",ariaPressed:F===v,onClick:()=>Y(v),children:v==="P0"?"Locked":v==="P1"?"Important":"Flex"},v))}),r("div",{class:"resolve-sticky",children:r(B,{className:"btn-large",disabled:O,onClick:Ft,children:O?"Saving…":"Add block"})})]}):n?r("div",{class:"stack",children:[r("p",{class:"meta-line",children:[n.start,"–",n.end," · ",n.label||n.kind," ·"," ",n.priority==="P0"?"Locked":n.priority,n.locked?" · locked":""]}),r("span",{class:"section-title",children:"How did it go?"}),r("div",{class:"segment-row",children:[["done","Done"],["partial","Partial"],["skipped","Skipped"]].map(([v,Te])=>r(I,{className:"segment",ariaPressed:l===v,onClick:()=>u(v),children:Te},v))}),l!=="skipped"&&r("label",{class:"field-label",children:["Actual minutes",r("input",{class:"field-input",type:"number",min:0,max:1440,value:c,onInput:v=>h(Number(v.target.value))})]}),r("label",{class:"field-label",children:["Comment",r("textarea",{class:"field-textarea",value:P,onInput:v=>A(v.target.value),placeholder:"What happened?"})]}),r("span",{class:"field-label",children:"Emotions"}),r("div",{class:"chip-row",role:"group",children:["calm","shame","urge","anxiety","anger","lonely","tired","hope"].map(v=>r(I,{className:"chip",ariaPressed:R.includes(v),onClick:()=>T(Te=>Te.includes(v)?Te.filter(ht=>ht!==v):[...Te,v]),children:v},v))}),r("label",{class:"field-label",children:["FSE event (short phrase)",r("input",{class:"field-input",value:E,onInput:v=>J(v.target.value),placeholder:"What spiked?"})]}),l!=="skipped"&&r("label",{class:"field-label",children:["Intensity · ",Q,r("input",{type:"range",min:1,max:10,value:Q,onInput:v=>M(Number(v.target.value))})]}),l==="skipped"&&r(_e,{children:[r("span",{class:"field-label",children:"Why skipped?"}),r("div",{class:"segment-row",children:["time","fear","urge","boring","fse","other"].map(v=>r(I,{className:"segment",ariaPressed:x===v,onClick:()=>N(v),children:v},v))})]}),r(I,{className:"btn btn-plain",onClick:()=>U(v=>!v),children:$?"Hide quality / fun / energy":"More: quality, fun, energy, money"}),$&&l!=="skipped"&&r(_e,{children:[r("span",{class:"field-label",children:"Quality"}),r("div",{class:"segment-row",children:[1,2,3,4,5].map(v=>r(I,{className:"segment",ariaPressed:p===v,onClick:()=>d(v),children:v},v))}),r("span",{class:"field-label",children:"Fun"}),r("div",{class:"segment-row",children:[1,2,3,4,5].map(v=>r(I,{className:"segment",ariaPressed:f===v,onClick:()=>m(v),children:v},v))}),r("span",{class:"field-label",children:"Energy after"}),r("div",{class:"segment-row",children:[-2,-1,0,1,2].map(v=>r(I,{className:"segment",ariaPressed:y===v,onClick:()=>g(v),children:v>0?`+${v}`:String(v)},String(v)))}),r("span",{class:"field-label",children:"Would repeat?"}),r("div",{class:"segment-row",children:["yes","maybe","no"].map(v=>r(I,{className:"segment",ariaPressed:_===v,onClick:()=>w(v),children:v},v))}),r("label",{class:"field-label",children:["Money (optional)",r("input",{class:"field-input",type:"number",value:V,onInput:v=>D(v.target.value)})]})]}),r("div",{class:"resolve-sticky",children:[r(B,{className:"btn-large",disabled:O,onClick:dt,children:O?"Saving…":"Save how it went"}),r(B,{className:"btn-secondary",disabled:O,onClick:ut,children:"Remove block"})]})]}):null})}const Ar=6,Dr=23,Xs=64;function Js(t){const[e,n]=t.split(":").map(Number);return e*60+n}function md(){const t=Ar*60,e=Dr*60;return{startMin:t,endMin:e,hourPx:Xs,totalPx:(e-t)/60*Xs}}function yd(t){const e=["timeline-block"];return t.priority==="P0"||t.locked?e.push("p0"):t.intent==="explore"?e.push("explore"):t.intent==="restore_fun"?e.push("restore"):t.kind==="stabilize"?e.push("stabilize"):t.priority==="P1"?e.push("duty"):e.push("flex"),(t.status==="done"||t.status==="partial")&&e.push("done"),(t.status==="skipped"||t.status==="cancelled")&&e.push("skipped"),e.join(" ")}function gd({blocks:t,onSelect:e,now:n=new Date}){const{startMin:s,endMin:i,hourPx:a,totalPx:o}=md(),l=[];for(let p=Ar;p<=Dr;p+=1)l.push(p);const u=n.getHours()*60+n.getMinutes(),c=u>=s&&u<=i,h=(u-s)/60*a;return r("div",{class:"timeline",style:{height:`${o}px`},children:[r("div",{class:"timeline-gutter","aria-hidden":"true",children:l.map(p=>r("div",{class:"timeline-hour-label",style:{top:`${(p*60-s)/60*a}px`},children:`${String(p).padStart(2,"0")}:00`},p))}),r("div",{class:"timeline-canvas",children:[l.map(p=>r("div",{class:"timeline-hour-line",style:{top:`${(p*60-s)/60*a}px`}},p)),c&&r("div",{class:"timeline-now",style:{top:`${h}px`},children:r("span",{class:"timeline-now-dot"})}),t.map(p=>{const d=Math.max(Js(p.start),s),f=Math.min(Js(p.end),i);if(f<=d)return null;const m=(d-s)/60*a,y=Math.max(28,(f-d)/60*a-4);return r("button",{type:"button",class:yd(p),style:{top:`${m}px`,height:`${y}px`},onClick:()=>e(p),children:[r("strong",{children:p.title}),r("span",{children:[p.start,"–",p.end," · ",p.planned_min,"m"]})]},p.id)})]})]})}function Zs(t,e){const n=new Date(`${t}T00:00:00`);return n.setDate(n.getDate()+e),de(n)}function _d(t){return new Date(`${t}T00:00:00`).toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"})}function Ut(t){const[e,n]=t.split(":").map(Number);return e*60+n}const gt={comment:"",emotions:[],fse_events:"",what_moved:"",what_avoided:"",tomorrow_change:""};function vd({initialDate:t}){const e=be(),[n,s]=b(t||de(new Date)),[i,a]=b(null),[o,l]=b(!1),[u,c]=b(null),[h,p]=b("view"),[d,f]=b(!1),[m,y]=b(!1),[g,_]=b(""),[w,x]=b("replace"),[N,P]=b(""),[A,V]=b(gt),D=async S=>{try{const K=await _i(S);a(K),V({...gt,...K.day_review||{}})}catch{a(null),V(gt)}};se(()=>{t&&t!==n&&s(t)},[t]),se(()=>{D(n),H(`/plan/${n}`)},[n]);const R=Ve(()=>{const S=(i==null?void 0:i.blocks)??[],K=S.length,L=S.filter(F=>F.status==="done"||F.status==="partial").length,le=S.filter(F=>F.priority==="P0"),k=le.filter(F=>F.status==="planned").length;return{total:K,done:L,p0Left:k,p0Total:le.length}},[i]),T=S=>{c(S),p("view"),f(!0)},E=()=>{c(null),p("create"),f(!0)},J=async()=>{l(!0);try{a(await la(n)),e.show("Starter day added")}catch(S){e.show(S instanceof Error?S.message:"Seed failed","error")}finally{l(!1)}},Q=async()=>{if(confirm("Reschedule the rest of this day? Locked blocks stay put.")){l(!0);try{const S=await oa(n,{reason:"user",force:!0});a(S.plan),e.show(S.source==="rules"?"Rescheduled (rules)":"Rescheduled")}catch(S){e.show(S instanceof Error?S.message:"Reschedule failed","error")}finally{l(!1)}}},M=async()=>{l(!0);try{const S=await da(n);await navigator.clipboard.writeText(JSON.stringify(S,null,2)),e.show("Copied — paste to your chat")}catch(S){e.show(S instanceof Error?S.message:"Export failed","error")}finally{l(!1)}},$=async()=>{var K;P("");let S;try{S=JSON.parse(g)}catch{P("Not valid JSON");return}l(!0);try{const L=await ca(n,S,w);a(L),V({...gt,...L.day_review||{}}),y(!1),_(""),e.show("Plan pasted"),(K=L.import_warnings)!=null&&K.length&&e.show(L.import_warnings[0],"error")}catch(L){const le=L instanceof ye||L instanceof Error?L.message:"Import failed";P(le)}finally{l(!1)}},U=async S=>{const K=S.status==="done"||S.status==="partial"?"planned":"done";l(!0);try{a(await fs(n,S.id,{status:K}))}catch(L){e.show(L instanceof Error?L.message:"Check failed","error")}finally{l(!1)}},O=async S=>{l(!0);try{a(await fs(n,S.id,{status:"skipped",skip_reason:"other"}))}catch(K){e.show(K instanceof Error?K.message:"Skip failed","error")}finally{l(!1)}},W=async()=>{l(!0);try{const S=await ua(n,{day_review:A});a(S),e.show("Day review saved")}catch(S){e.show(S instanceof Error?S.message:"Save failed","error")}finally{l(!1)}},ee=(i==null?void 0:i.capacity_hint)??1,re=i==null?void 0:i.health,G=!(i!=null&&i.blocks.length),ie=new Date().getHours()*60+new Date().getMinutes(),oe=[...(i==null?void 0:i.blocks)??[]].sort((S,K)=>Ut(S.start)-Ut(K.start));return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar plan-header",children:[r("div",{class:"plan-day-nav",children:[r(I,{className:"icon-btn",ariaLabel:"Previous day",onClick:()=>s(Zs(n,-1)),children:r($c,{size:22})}),r("div",{children:[r("h1",{class:"page-title",children:"Plan"}),r("span",{class:"daily-date",children:_d(n)})]}),r(I,{className:"icon-btn",ariaLabel:"Next day",onClick:()=>s(Zs(n,1)),children:r(Wn,{size:22})})]}),r(I,{className:"chip-btn",onClick:()=>s(de(new Date)),children:"Today"})]}),r("main",{class:"page stack plan-page",children:[r("div",{class:"plan-meta-row",children:[r("span",{class:"caption",children:["Capacity ",Math.round(ee*100),"%"]}),re&&r("span",{class:"caption",children:["Health ",Math.round(re.score*100),"% · v",(i==null?void 0:i.version)??1]}),!G&&r("span",{class:"caption",children:[R.done,"/",R.total,R.p0Total?` · P0 left ${R.p0Left}`:""]})]}),((i==null?void 0:i.title)||(i==null?void 0:i.intention))&&r("section",{class:"tip-card",role:"status",children:[i!=null&&i.title?r("strong",{children:i.title}):null,i!=null&&i.intention?r("p",{class:"muted",children:i.intention}):null]}),ee<.55&&r("div",{class:"tip-card",role:"status",children:r("p",{children:"High load risk — lighter plan recommended."})}),r("div",{class:"plan-actions",children:[r(B,{className:"btn-secondary",disabled:o,onClick:()=>y(!0),children:"Paste plan"}),r(B,{className:"btn-secondary",disabled:o||G,onClick:M,children:"Export / Copy"}),r(B,{className:"btn-secondary",disabled:o,onClick:E,children:"+ Block"}),r(B,{className:"btn-secondary",disabled:o,onClick:Q,children:"Reschedule"})]}),r("p",{class:"muted",children:"Paste the JSON your chat wrote. Check off when done in the real world. Export and paste back for review."}),G?r("section",{class:"surface-card empty-card stack",children:[r("p",{children:"No blocks yet. Paste a plan from chat, seed a starter day, or add one block."}),r(B,{disabled:o,onClick:()=>y(!0),children:"Paste plan from chat"}),r(B,{className:"btn-secondary",disabled:o,onClick:J,children:"Seed starter day"}),r(B,{className:"btn-secondary",disabled:o,onClick:E,children:"Add block"})]}):r(_e,{children:[r("section",{class:"surface-card stack","aria-label":"Checklist",children:[r("h2",{class:"section-title",children:"Checklist"}),oe.map(S=>{const K=n===de(new Date)&&S.status==="planned"&&Ut(S.end)<ie,L=S.status==="done"||S.status==="partial";return r("div",{class:`entry-row ${K?"indoors-nudge":""}`.trim(),children:[r(I,{className:"chip",ariaPressed:L,ariaLabel:L?"Mark planned":"Mark done",onClick:()=>void U(S),children:L?"✓":"○"}),r(I,{className:"entry-row-main",onClick:()=>T(S),children:[r("span",{class:"entry-preview",children:[S.priority==="P0"?"P0 · ":"",S.title]}),r("time",{children:[S.start,"–",S.end,K?" · overdue":""]})]}),S.status==="planned"&&r(I,{className:"chip-btn",onClick:()=>void O(S),children:"Skip"})]},S.id)})]}),r("section",{class:"surface-card timeline-card",children:r(gd,{blocks:i.blocks,onSelect:T})})]}),r("section",{class:"surface-card form-card stack","aria-label":"Day review",children:[r("h2",{class:"section-title",children:"Day review"}),r("p",{class:"muted",children:"One line is enough. FSE = fear / shame / embarrassment spike — short phrase."}),r("label",{class:"field-label",for:"dr-comment",children:"Comment"}),r("textarea",{id:"dr-comment",class:"field-textarea",value:A.comment,onInput:S=>V({...A,comment:S.target.value})}),r("label",{class:"field-label",for:"dr-fse",children:"FSE events"}),r("input",{id:"dr-fse",class:"field-input",value:A.fse_events,onInput:S=>V({...A,fse_events:S.target.value})}),r("label",{class:"field-label",for:"dr-moved",children:"What moved"}),r("input",{id:"dr-moved",class:"field-input",value:A.what_moved,onInput:S=>V({...A,what_moved:S.target.value})}),r("label",{class:"field-label",for:"dr-avoided",children:"What avoided"}),r("input",{id:"dr-avoided",class:"field-input",value:A.what_avoided,onInput:S=>V({...A,what_avoided:S.target.value})}),r("label",{class:"field-label",for:"dr-tomorrow",children:"Tomorrow change"}),r("input",{id:"dr-tomorrow",class:"field-input",value:A.tomorrow_change,onInput:S=>V({...A,tomorrow_change:S.target.value})}),r(B,{disabled:o,onClick:()=>void W(),children:"Save day review"})]})]}),r(pd,{open:d,day:n,block:u,mode:h,onClose:()=>f(!1),onChanged:()=>void D(n)}),r(Ie,{open:m,title:"Paste plan",onClose:()=>y(!1),tall:!0,children:r("div",{class:"stack",children:[r("p",{class:"muted",children:"Paste the JSON your chat wrote."}),r("textarea",{class:"field-textarea",rows:14,value:g,onInput:S=>_(S.target.value),placeholder:'{ "schema_version": 1, "blocks": [ ... ] }'}),r("span",{class:"field-label",children:"Mode"}),r("div",{class:"chip-row",role:"group",children:[r(I,{className:"chip",ariaPressed:w==="replace",onClick:()=>x("replace"),children:"Replace"}),r(I,{className:"chip",ariaPressed:w==="merge",onClick:()=>x("merge"),children:"Merge"})]}),N?r("p",{class:"muted",role:"alert",children:N}):null,r(B,{disabled:o||!g.trim(),onClick:()=>void $(),children:"Import plan"})]})})]})}const Qs=(t=0)=>`${Math.round(t*100)}%`;function Ye({title:t,rows:e,metric:n}){return r("section",{class:"surface-card stats-card",children:[r("h2",{children:t}),e.length?e.map(s=>{const i=s[n]||0;return r("div",{class:"stat-row",children:[r("div",{children:[r("span",{children:s.key}),r("span",{class:"muted",children:["n=",s.n," · ",Qs(i)]})]}),r("div",{class:"bar-track",children:r("span",{style:{width:Qs(i)}})})]},s.key)}):r("p",{class:"muted",children:"No qualifying data."})]})}function bd(){const[t,e]=b(null);if(se(()=>{Jr().then(e).catch(()=>{})},[]),!t)return r("div",{class:"gate-loading",children:"Loading…"});const n=Object.entries(t.outcomes),s=[{key:"Brick done",n:0,p_helped:t.daily.p_brick_done},{key:"Corn okay",n:0,p_helped:t.daily.p_corn_ok},{key:"No FC",n:0,p_helped:t.daily.p_no_fc},{key:"Clean rerun",n:0,p_helped:t.daily.p_rerun_clean},{key:"Court closed",n:0,p_helped:t.daily.p_court_closed}];return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Stats"})}),r("main",{class:"page stack",children:[r("section",{class:"surface-card stats-card",children:[r("h2",{children:"Outcomes"}),r("div",{class:"outcome-grid",children:n.map(([i,a])=>r("div",{children:[r("strong",{children:a}),r("span",{class:`result-label result-${i}`,children:i})]},i))}),r("p",{class:"muted",children:[t.n_entries_scored," scored · ",t.n_entries_total," total"]})]}),r(Ye,{title:"Remedies",rows:t.by_remedy,metric:"p_helped"}),r(Ye,{title:"Tags · failed",rows:t.by_tag,metric:"p_failed"}),r(Ye,{title:"Emotions",rows:t.by_emotion,metric:"p_helped"}),r(Ye,{title:"Intensity",rows:t.by_intensity_bucket,metric:"p_helped"}),r(Ye,{title:"Daily rates",rows:s,metric:"p_helped"}),r("section",{class:"surface-card stats-card",children:[r("h2",{children:"Average daily points"}),r("strong",{class:"large-number",children:[t.daily.avg_points.toFixed(1),"/6"]})]})]})]})}function wd(){const[t,e]=b([]);return se(()=>{Zr().then(n=>e(n.items)).catch(()=>{})},[]),r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Remedies"})}),r("main",{class:"page stack",children:t.length?r("div",{class:"surface-card pick-list",children:t.map((n,s)=>r(I,{className:"pick-row",onClick:()=>H(`/log?remedy=${encodeURIComponent(n.key)}`),children:[r("span",{children:[r("strong",{children:[s+1,"."]})," ",n.key]}),r("span",{class:"muted",children:["n=",n.n," · ",Math.round((n.p_helped||0)*100),"% helped"]})]},n.key))}):r("div",{class:"empty-state surface-card",children:r("p",{children:"No qualifying remedies."})})})]})}function kd(){const t=be(),[e,n]=b(""),[s,i]=b(null),[a,o]=b(!1);return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Coach"})}),r("main",{class:"page stack",children:[r("img",{src:"/illustrations/coach.svg",alt:"",width:"96",height:"80"}),r("label",{class:"field-label",for:"coach-text",children:"What's going on"}),r("textarea",{id:"coach-text",class:"field-textarea coach-input",value:e,onInput:l=>n(l.target.value),placeholder:"Describe the situation"}),r(B,{disabled:!e.trim()||a,onClick:async()=>{o(!0);try{i(await Gr({text:e.trim()}))}catch(l){t.show(l instanceof Error?l.message:"Analysis failed","error")}finally{o(!1)}},children:a?"Analyzing…":"Analyze"}),s?r(Pr,{result:s}):null,r("p",{class:"tertiary disclaimer",children:"Suggestions use rules and your logged data. You choose the result."})]})]})}const Sd=[["/api/export/entries.csv","entries.csv"],["/api/export/entries.jsonl","entries.jsonl"],["/api/export/daily.jsonl","daily.jsonl"]];function Td(){const t=be(),[e,n]=b(null);se(()=>{Qr().then(n).catch(()=>{})},[]);const s=async(i,a)=>{try{const o=await na(i),l=URL.createObjectURL(o),u=document.createElement("a");u.href=l,u.download=a,u.click(),URL.revokeObjectURL(l)}catch(o){t.show(o instanceof Error?o.message:"Export failed","error")}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Settings"})}),r("main",{class:"page stack",children:[r("section",{class:"surface-card settings-card stack",children:[r("h2",{children:"Status"}),r("div",{class:"status-row",children:[r("span",{children:"App"}),r("strong",{children:(e==null?void 0:e.app_name)||"Habit Journal"})]}),r("div",{class:"status-row",children:[r("span",{children:"Data"}),r("strong",{children:e?e.data_ok?"Ready":"Unavailable":"Loading…"})]}),r("div",{class:"status-row",children:[r("span",{children:"Coach"}),r("strong",{children:e?e.coach_configured?"Configured":"Rules only":"Loading…"})]}),r("div",{class:"status-row",children:[r("span",{children:"Model"}),r("strong",{children:(e==null?void 0:e.model)||"—"})]}),r("div",{class:"status-row",children:[r("span",{children:"Version"}),r("strong",{children:(e==null?void 0:e.app_version)||"—"})]})]}),r("section",{class:"surface-card settings-card stack",children:[r("h2",{children:"Export"}),Sd.map(([i,a])=>r(B,{variant:"secondary",onClick:()=>s(i,a),children:["Download ",a]},i))]}),r("section",{class:"surface-card settings-card stack",children:[r("h2",{children:"Install on iPhone"}),r("ol",{class:"install-steps",children:[r("li",{children:"Open this page in Safari."}),r("li",{children:"Tap Share."}),r("li",{children:"Tap Add to Home Screen."}),r("li",{children:"Tap Add."})]})]}),r(B,{variant:"destructive",onClick:async()=>{await ea(),H("/login")},children:"Logout"})]})]})}const Cd=["calm","shame","urge","anxiety","anger","lonely","tired","hope"],xd=["indoors","freeze","movement","interrupt_walk","fantasy_walk","headphones","proof"],Md=new Set(["shame","urge","anxiety","anger","lonely"]),Pd=new Set(["freeze","indoors","rerun","court","daydream","fantasy","fantasy_walk"]),Ad=["freeze","bed","scroll","fantasy","headphones","court","rerun"],Dd=[{value:"interrupt_walk",label:"Interrupt walk"},{value:"body_or_room",label:"Body or room"},{value:"trip_admin",label:"Trip admin"},{value:"earn",label:"Earn"},{value:"boundary",label:"Boundary"},{value:"food",label:"Food"},{value:"survive",label:"Survive"},{value:"other",label:"Other"}];function Nd(t,e,n){if(t<7)return!1;const s=e.map(a=>a.toLowerCase()),i=n.map(a=>a.toLowerCase());return s.some(a=>Md.has(a))||i.some(a=>Pd.has(a))}function Vd(t){return/\blabel(?:ing|ling)?\b/i.test(t.trim())}const ei={primary_brick:"none",brick_done:!1,corn_sessions:0,delay_ok:!0,daydream:"none",rerun:"clean",court:"closed",stayed_indoors_all_day:!1,left_room:!1,left_home:!1,movement_minutes:0,interrupt_walk_minutes:0,fantasy_walk_minutes:0,headphones_on_walk:!1,music_cinematic_on_walk:!1,proof_brick_done:!1,proof_brick_kind:null,fantasy_minutes_scheduled:0,fantasy_minutes_unplanned:0,note:""};function Rd({initialRemedy:t="",initialHappened:e=""}){const n=be(),{openResolveId:s}=Et(),[i,a]=b(e),[o,l]=b([]),[u,c]=b(5),[h,p]=b("pending"),[d,f]=b(t),[m,y]=b(""),[g,_]=b(""),[w,x]=b(""),[N,P]=b(!1),[A,V]=b(!1),[D,R]=b(null),[T,E]=b(!1),[J,Q]=b(!1),[M,$]=b([]),[U,O]=b(null);se(()=>{f(t)},[t]),se(()=>{e&&a(e)},[e]);const W=Ve(()=>i.trim().length>0&&!A,[i,A]),ee=Ve(()=>g.split(",").map(k=>k.trim()).filter(Boolean),[g]),re=k=>{l(F=>F.includes(k)?F.filter(Y=>Y!==k):F.length>=12?F:[...F,k])},G=k=>{const F=ee;F.map(j=>j.toLowerCase()).includes(k)?_(F.filter(j=>j.toLowerCase()!==k).join(", ")):_([...F,k].join(", "))},ie=(k,F)=>{F?R({id:k}):H("/")},oe=u>=7&&d.trim().length>0&&Vd(d),S=k=>{$(F=>F.includes(k)?F.filter(Y=>Y!==k):[...F,k])},K=async()=>{if(W){V(!0);try{const k=Nd(u,o,ee),F=await cs({activity:m.trim()||"Log",happened:i.trim(),emotions:o,intensity:u,remedy:d.trim(),result:h,tags:ee,notes:w.trim(),fse_spike:k||u>=7?!0:null,avoidance_types:M,walk_type:ee.includes("interrupt_walk")?"interrupt":ee.includes("fantasy_walk")?"fantasy":null});n.show("Saved"),typeof navigator<"u"&&"vibrate"in navigator&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&navigator.vibrate(10);const Y=F.result==="pending";k?(O({id:F.id,pending:Y}),E(!0)):ie(F.id,Y)}catch(k){const F=k instanceof ye?k.message:"Could not save entry";n.show(F,"error")}finally{V(!1)}}},L=()=>{E(!1);const k=U;O(null),k?ie(k.id,k.pending):H("/")},le=async k=>{Q(!0);const F=de(new Date);try{let Y={...ei};try{const j=await bn(F);Y={primary_brick:j.primary_brick,brick_done:j.brick_done,corn_sessions:j.corn_sessions,delay_ok:j.delay_ok,daydream:j.daydream,rerun:j.rerun,court:j.court,stayed_indoors_all_day:!!j.stayed_indoors_all_day,left_room:!!j.left_room||k==="body_or_room"||k==="leave_room",left_home:!!j.left_home,movement_minutes:j.movement_minutes??0,interrupt_walk_minutes:j.interrupt_walk_minutes??0,fantasy_walk_minutes:j.fantasy_walk_minutes??0,headphones_on_walk:!!j.headphones_on_walk,music_cinematic_on_walk:!!j.music_cinematic_on_walk,proof_brick_done:!0,proof_brick_kind:k,fantasy_minutes_scheduled:j.fantasy_minutes_scheduled??0,fantasy_minutes_unplanned:j.fantasy_minutes_unplanned??0,note:j.note||""}}catch{Y={...ei,left_room:k==="body_or_room"||k==="leave_room",proof_brick_done:!0,proof_brick_kind:k}}k==="interrupt_walk"&&!Y.interrupt_walk_minutes&&(Y.interrupt_walk_minutes=10,Y.movement_minutes=(Y.interrupt_walk_minutes||0)+(Y.fantasy_walk_minutes||0)),await wn(F,Y),n.show("Proof noted on Daily"),L()}catch{try{await cs({activity:"Proof brick",happened:`Proof step: ${k}`,emotions:[],intensity:Math.min(u,5),remedy:k.replace(/_/g," "),result:"worked",tags:["proof",k]}),n.show("Proof logged"),L()}catch(Y){n.show(Y instanceof ye?Y.message:"Could not save proof","error")}}finally{Q(!1)}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:[r(I,{className:"btn btn-plain",ariaLabel:"Back",onClick:()=>H("/"),children:"‹ Back"}),r("h1",{class:"page-title",children:"Log"})]}),r("main",{class:"page stack",children:[r("div",{children:[r("label",{class:"field-label",for:"happened",children:"Happened"}),r("textarea",{id:"happened",class:"field-textarea",autofocus:!0,required:!0,value:i,onInput:k=>a(k.target.value),placeholder:"What happened?"})]}),r("div",{children:[r("span",{class:"field-label",id:"emotions-label",children:"Emotions"}),r("div",{class:"chip-row",role:"group","aria-labelledby":"emotions-label",children:Cd.map(k=>r(I,{className:"chip",ariaPressed:o.includes(k),onClick:()=>re(k),children:k},k))})]}),r("div",{class:"slider-wrap",children:[r("label",{class:"field-label",for:"intensity",children:["Intensity · ",u]}),r("input",{id:"intensity",type:"range",min:1,max:10,step:1,value:u,onInput:k=>c(Number(k.target.value))})]}),r("div",{children:[r("span",{class:"field-label",children:"Result"}),r(Bn,{value:h,onChange:p})]}),r("div",{children:[r("label",{class:"field-label",for:"remedy",children:"Remedy"}),r("input",{id:"remedy",class:"field-input",type:"text",value:d,onInput:k=>f(k.target.value),placeholder:"One concrete action — not more labeling at high heat"}),oe?r("p",{class:"muted",role:"status",children:["Label once (30s). Proof is visible outside your head. At intensity"," ",u,", pick a proof brick — not labeling-only."]}):null]}),u>=7?r("div",{children:[r("span",{class:"field-label",children:"Avoidance (optional)"}),r("div",{class:"chip-row",role:"group","aria-label":"Avoidance",children:Ad.map(k=>r(I,{className:"chip",ariaPressed:M.includes(k),onClick:()=>S(k),children:k},k))}),r("p",{class:"muted",children:"Preview, not proof. Proof brick comes after save."})]}):null,r("div",{children:[r("span",{class:"field-label",children:"Tags"}),r("div",{class:"chip-row",role:"group","aria-label":"Suggested tags",children:xd.map(k=>r(I,{className:"chip",ariaPressed:ee.map(F=>F.toLowerCase()).includes(k),onClick:()=>G(k),children:k},k))})]}),r(B,{disabled:!W,onClick:K,className:"btn-large",children:A?"Saving…":"Save entry"}),r(I,{className:"btn btn-plain",ariaPressed:N,onClick:()=>P(k=>!k),children:N?"Hide more":"More"}),N?r("div",{class:"more-block stack",children:[r("div",{children:[r("label",{class:"field-label",for:"activity",children:"Activity"}),r("input",{id:"activity",class:"field-input",type:"text",value:m,onInput:k=>y(k.target.value)})]}),r("div",{children:[r("label",{class:"field-label",for:"tags",children:"More tags"}),r("input",{id:"tags",class:"field-input",type:"text",value:g,onInput:k=>_(k.target.value),placeholder:"comma,separated"})]}),r("div",{children:[r("label",{class:"field-label",for:"notes",children:"Notes"}),r("textarea",{id:"notes",class:"field-textarea",value:w,onInput:k=>x(k.target.value)})]})]}):null]}),r(Ie,{open:T,title:"One proof step (not more labeling)",onClose:L,children:r("div",{class:"stack",children:[r("p",{class:"muted",children:"High spike logged. Pick one small real step you can do now — body, room, message, or interrupt walk."}),r("div",{class:"choice-list",children:Dd.map(k=>r(I,{className:"choice-item",disabled:J,onClick:()=>void le(k.value),children:k.label},k.value))}),r(B,{className:"btn-secondary",disabled:J,onClick:L,children:"Skip for now"})]})}),r(Ie,{open:!!D,title:"Finish now?",onClose:()=>{R(null),H("/")},children:r("div",{class:"stack",children:[r("p",{class:"muted",children:"Set a result for this entry, or leave it pending."}),r(B,{className:"btn-large",onClick:()=>{const k=D==null?void 0:D.id;R(null),k&&s(k),H("/")},children:"Finish now"}),r(B,{variant:"secondary",onClick:()=>{R(null),H("/")},children:"Later"})]})})]})}function Id({appName:t,onAuthenticated:e}){const[n,s]=b(""),[i,a]=b(null),[o,l]=b(!1);return r("main",{class:"login-page",children:r("form",{class:"login-card surface-card stack",onSubmit:async c=>{c.preventDefault(),a(null),l(!0);try{await zr(n),e(),H("/")}catch(h){const p=h instanceof ye?h.message:"Could not log in";a(p==="Login required"?"Invalid credentials":p)}finally{l(!1)}},children:[r("div",{children:[r("h1",{children:t||"Habit Journal"}),r("p",{class:"muted",children:"Personal habit journal"})]}),r("div",{children:[r("label",{class:"field-label",for:"password",children:"Password"}),r("input",{id:"password",class:"field-input",type:"password",name:"password",autoComplete:"current-password",required:!0,value:n,onInput:c=>s(c.target.value)})]}),i?r("p",{class:"error-text",children:i}):null,r(B,{type:"submit",disabled:o||!n,children:o?"Logging in…":"Log in"})]})})}function Ed(){const t=zc(),[e,n]=b(!1),[s,i]=b(!1),[a,o]=b("Habit Journal"),l=Je(async()=>{try{const c=await jr();return i(c.authenticated),o(c.app_name||"Habit Journal"),c.authenticated}catch{return i(!1),!1}finally{n(!0)}},[]);if(se(()=>{l()},[l]),se(()=>{e&&!s&&t.name!=="login"&&H("/login")},[e,s,t.name]),!e)return r("div",{class:"gate-loading",children:"Loading…"});if(!s||t.name==="login")return r(Id,{appName:a,onAuthenticated:()=>{i(!0)}});let u;return t.name==="log"?u=r(Rd,{initialRemedy:t.remedy,initialHappened:t.happened}):t.name==="home"?u=r(Jc,{}):t.name==="history"?u=r(Qc,{}):t.name==="entry"?u=r(td,{id:t.id}):t.name==="daily"?u=r(ud,{}):t.name==="plan"?u=r(vd,{initialDate:t.date}):t.name==="stats"?u=r(bd,{}):t.name==="coach"?u=r(kd,{}):t.name==="remedies"?u=r(wd,{}):t.name==="settings"?u=r(Td,{}):u=r("div",{class:"app-shell",children:r("main",{class:"page stack",children:[r("p",{children:"Unknown page."}),r("button",{type:"button",class:"btn btn-primary",onClick:()=>H("/"),children:"Home"})]})}),r(Ac,{children:[u,r(qc,{route:t})]})}Br(r(Mc,{children:r(Ed,{})}),document.getElementById("app"));"serviceWorker"in navigator&&window.addEventListener("load",()=>navigator.serviceWorker.register("/sw.js"));
102
- //# sourceMappingURL=index-DYDM6L-p.js.map
 
99
  * This source code is licensed under the ISC license.
100
  * See the LICENSE file in the root directory of this source tree.
101
  */const jc=ge("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function Hs(t){const e=t.replace(/^#/,"")||"/",[n="/",s=""]=e.split("?"),i=new URLSearchParams(s);return n==="/login"?{name:"login"}:n==="/"||n===""?{name:"home"}:n==="/log"?{name:"log",remedy:i.get("remedy")||void 0,happened:i.get("happened")||void 0}:n==="/history"?{name:"history"}:n.startsWith("/entry/")?{name:"entry",id:decodeURIComponent(n.slice(7))}:n==="/daily"?{name:"daily"}:n==="/plan"?{name:"plan"}:n.startsWith("/plan/")?{name:"plan",date:decodeURIComponent(n.slice(6))}:n==="/stats"?{name:"stats"}:n==="/coach"?{name:"coach"}:n==="/remedies"?{name:"remedies"}:n==="/settings"?{name:"settings"}:{name:"unknown",path:n}}function H(t){const e=t.startsWith("#")?t:`#${t.startsWith("/")?t:`/${t}`}`;if(window.location.hash===e){window.dispatchEvent(new HashChangeEvent("hashchange"));return}window.location.hash=e}function zc(){const[t,e]=b(()=>Hs(typeof window<"u"?window.location.hash:"#/"));return se(()=>{const n=()=>e(Hs(window.location.hash));return window.addEventListener("hashchange",n),window.location.hash||(window.location.hash="#/"),()=>window.removeEventListener("hashchange",n)},[]),t}const Ks=[{name:"home",label:"Home",path:"/",Icon:Bc},{name:"plan",label:"Plan",path:"/plan",Icon:Fc},{name:"daily",label:"Daily",path:"/daily",Icon:Oc},{name:"settings",label:"Settings",path:"/settings",Icon:Kc}];function qc({route:t}){const e=Ks.slice(0,2),n=Ks.slice(2);return r("nav",{class:"tab-bar","aria-label":"Main",children:[r("div",{class:"tab-bar-inner",children:[e.map(s=>{const i=t.name===s.name,a=s.Icon;return r(I,{className:`tab-item ${i?"active":""}`.trim(),ariaLabel:s.label,onClick:()=>H(s.path),children:[r(a,{size:22,strokeWidth:i?2.4:2,"aria-hidden":"true"}),r("span",{"aria-current":i?"page":void 0,children:s.label})]},s.name)}),r("div",{class:"tab-fab-slot","aria-hidden":"true"}),n.map(s=>{const i=t.name===s.name,a=s.Icon;return r(I,{className:`tab-item ${i?"active":""}`.trim(),ariaLabel:s.label,onClick:()=>H(s.path),children:[r(a,{size:22,strokeWidth:i?2.4:2,"aria-hidden":"true"}),r("span",{"aria-current":i?"page":void 0,children:s.label})]},s.name)})]}),r(I,{className:"tab-fab",ariaLabel:"Log",onClick:()=>H("/log"),children:r(Wc,{size:28,strokeWidth:2.5,color:"#202020","aria-hidden":"true"})})]})}function de(t){const e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0");return`${e}-${n}-${s}`}function Yc(t,e){const n=[];for(let s=e-1;s>=0;s-=1){const i=new Date(t.getFullYear(),t.getMonth(),t.getDate()-s);n.push(de(i))}return n}function Us(t=new Date){const e=new Date(t.getFullYear(),t.getMonth(),t.getDate()),n=e.getDay(),s=n===0?-6:1-n,i=new Date(e.getFullYear(),e.getMonth(),e.getDate()+s);return Yc(new Date(i.getFullYear(),i.getMonth(),i.getDate()+6),7)}function Gc(t){return de(new Date(t))}const js={primary_brick:"none",brick_done:!1,corn_sessions:0,delay_ok:!0,daydream:"none",rerun:"clean",court:"closed",stayed_indoors_all_day:!1,left_room:!1,left_home:!1,movement_minutes:0,interrupt_walk_minutes:0,fantasy_walk_minutes:0,headphones_on_walk:!1,music_cinematic_on_walk:!1,proof_brick_done:!1,proof_brick_kind:null,fantasy_minutes_scheduled:0,fantasy_minutes_unplanned:0,note:""};function Xc({open:t,onClose:e,indoorsStreak:n=0}){const s=be(),[i,a]=b(!1),[o,l]=b(!0),[u,c]=b("interrupt"),[h,p]=b(20),[d,f]=b(!1),m=async y=>{f(!0);const g=de(new Date);try{let _={...js};try{const w=await bn(g);_={primary_brick:w.primary_brick,brick_done:w.brick_done,corn_sessions:w.corn_sessions,delay_ok:w.delay_ok,daydream:w.daydream,rerun:w.rerun,court:w.court,stayed_indoors_all_day:!1,left_room:i||!!w.left_room,left_home:!!w.left_home||h>=15,movement_minutes:w.movement_minutes??0,interrupt_walk_minutes:w.interrupt_walk_minutes??0,fantasy_walk_minutes:w.fantasy_walk_minutes??0,headphones_on_walk:u==="interrupt"?!1:!!w.headphones_on_walk,music_cinematic_on_walk:u==="interrupt"?!1:!!w.music_cinematic_on_walk,proof_brick_done:!0,proof_brick_kind:"interrupt_walk",fantasy_minutes_scheduled:w.fantasy_minutes_scheduled??0,fantasy_minutes_unplanned:w.fantasy_minutes_unplanned??0,note:w.note||""}}catch{_={...js,left_room:i,left_home:h>=15,proof_brick_done:!0,proof_brick_kind:"interrupt_walk",headphones_on_walk:u!=="interrupt"}}if(u==="interrupt"?(_.interrupt_walk_minutes=Math.max(_.interrupt_walk_minutes||0,h),_.headphones_on_walk=!1,_.music_cinematic_on_walk=!1):_.fantasy_walk_minutes=Math.max(_.fantasy_walk_minutes||0,h),_.movement_minutes=(_.interrupt_walk_minutes||0)+(_.fantasy_walk_minutes||0),_.stayed_indoors_all_day=!1,await wn(g,_),s.show("Movement saved on Daily"),e(),y){const w=encodeURIComponent(u==="interrupt"?`Interrupt walk ${h} min — wallet home, first 15 no headphones`:`Music / fantasy walk ${h} min — leisure, not medicine`);H(`/log?happened=${w}&remedy=${encodeURIComponent("Interrupt walk")}`)}}catch(_){s.show(_ instanceof ye?_.message:"Could not save movement","error")}finally{f(!1)}};return r(Ie,{open:t,title:"Move now",onClose:e,children:r("div",{class:"stack",children:[r("p",{class:"muted",children:["Preview, not proof. Interrupt walk: no headphones, eyes outside.",n>=2?` ${n} days indoors — 20 min out, wallet home, first 15 min no headphones.`:""]}),r("label",{class:"toggle-row",children:[r("input",{type:"checkbox",checked:i,onChange:y=>a(y.target.checked)}),r("span",{children:"Left bed / room"})]}),r("label",{class:"toggle-row",children:[r("input",{type:"checkbox",checked:o,onChange:y=>l(y.target.checked)}),r("span",{children:"Wallet stays home (no spend needed)"})]}),r("span",{class:"field-label",children:"Walk type"}),r("div",{class:"chip-row",role:"group","aria-label":"Walk type",children:[r(I,{className:"chip",ariaPressed:u==="interrupt",onClick:()=>c("interrupt"),children:"Interrupt (medicine)"}),r(I,{className:"chip",ariaPressed:u==="fantasy",onClick:()=>c("fantasy"),children:"Music walk (leisure)"})]}),u==="interrupt"?r("p",{class:"muted",children:"Interrupt walk: no headphones, eyes outside."}):r("p",{class:"muted",children:"Music walk: leisure, not medicine."}),r("label",{class:"field-label",for:"move-min",children:["Minutes · ",h]}),r("input",{id:"move-min",type:"range",min:5,max:60,step:5,value:h,onInput:y=>p(Number(y.target.value))}),r(B,{disabled:d||!i,onClick:()=>void m(!1),children:"Save to Daily"}),r(B,{variant:"secondary",disabled:d||!i,onClick:()=>void m(!0),children:"Save + open Log"})]})})}const zs=42;function yt(t){const[e,n]=t.split(":").map(Number);return e*60+n}function Jc(){const{openResolve:t,refreshPendingSignal:e}=Et(),[n,s]=b([]),[i,a]=b(null),[o,l]=b([]),[u,c]=b(new Set),[h,p]=b([]),[d,f]=b(null),[m,y]=b(0),[g,_]=b(!1),w=async()=>{const M=Us(new Date),$=de(new Date);try{const U=await Ze({result:"pending",limit:50});s(U.items)}catch{s([])}try{const U=await hs(M[0],M[6]);a(U);const O=de(new Date(new Date(`${$}T00:00:00`).getTime()-13*864e5)),W=await hs(O,$),ee=new Map(W.items.map(ie=>[ie.date,ie]));let re=0;const G=new Date(`${$}T00:00:00`);for(let ie=0;ie<14;ie+=1){const oe=de(G),S=ee.get(oe);if(!(S!=null&&S.stayed_indoors_all_day))break;re+=1,G.setDate(G.getDate()-1)}y(re)}catch{a(null),y(0)}try{const U=await Ze({limit:8});l(U.items);const O=await Ze({start:M[0],end:M[6],limit:100});c(new Set(O.items.map(W=>Gc(W.ts))))}catch{l([])}try{const U=await _i($),O=new Date,W=O.getHours()*60+O.getMinutes(),ee=U.blocks.filter(G=>G.status==="planned"&&yt(G.end)>=W).sort((G,ie)=>yt(G.start)-yt(ie.start)).slice(0,2);p(ee);const re=U.blocks.find(G=>G.status==="planned"&&yt(G.end)<W&&!G.feedback)||null;f(re)}catch{p([]),f(null)}};se(()=>{w()},[e]);const x=de(new Date),N=Us(new Date),P=new Map(((i==null?void 0:i.items)??[]).map(M=>[M.date,M])),A=(i==null?void 0:i.week_points)??0,V=P.get(x),D=(V==null?void 0:V.points)??0,R=Math.min(1,A/zs),T=new Set(["shame","urge","anxiety","anger","lonely","freeze"]),E=!!V&&!(V!=null&&V.proof_brick_done)&&[...n,...o].some(M=>{const $=(M.emotions||[]).map(O=>O.toLowerCase()),U=(M.tags||[]).map(O=>O.toLowerCase());return(M.intensity??0)>=7&&(M.result==="pending"||M.result==="failed")&&($.some(O=>T.has(O))||U.some(O=>["freeze","indoors","shame","rerun"].includes(O)))}),J=!!V&&(V.fantasy_walk_minutes??0)>=15&&(V.headphones_on_walk||V.music_cinematic_on_walk),Q=M=>{const $=P.get(M);return!!($!=null&&$.brick_done)||u.has(M)};return r("div",{class:"app-shell journal-home",children:[r("main",{class:"page home-page stack",children:[r("header",{class:"home-greeting",children:[r("div",{children:[r("h1",{class:"greeting-title",children:"Hi, there"}),r("p",{class:"greeting-sub",children:"Here's your progress this week"})]}),r("div",{class:"avatar-circle","aria-hidden":"true",children:"HJ"})]}),r("section",{class:"week-calendar","aria-label":"This week",children:N.map(M=>{const $=new Date(`${M}T00:00:00`),U=new Intl.DateTimeFormat(void 0,{weekday:"narrow"}).format($),O=$.getDate(),W=M===x,ee=Q(M);return r("div",{class:`week-cal-cell ${W?"today":""} ${ee?"filled":""}`.trim(),children:[r("span",{class:"week-cal-label",children:U}),r("span",{class:"week-cal-num",children:O}),r("span",{class:"week-cal-dot","aria-hidden":"true"})]},M)})}),m>=2&&r(I,{className:"tip-card indoors-nudge",onClick:()=>_(!0),ariaLabel:`${m} days indoors — take a short walk`,children:[r("span",{class:"warning-chip",children:[m," days indoors"]}),r("p",{children:[m," days indoors — 20 min out, wallet home, first 15 min no headphones"]})]}),n.length>0?r(I,{className:"pending-banner-card",ariaLabel:`${n.length} pending. Tap to finish.`,onClick:()=>t(n),children:[r("img",{class:"pending-illu",src:"/illustrations/pending.svg",alt:"",width:"88",height:"72"}),r("div",{class:"pending-copy",children:[r("strong",{children:[n.length," pending"]}),r("span",{children:"Tap to finish"})]}),r(Wn,{size:22,"aria-hidden":"true"})]}):null,E&&r(I,{className:"tip-card indoors-nudge",onClick:()=>H("/log"),ariaLabel:"Add one proof brick",children:[r("span",{class:"warning-chip",children:"Proof missing"}),r("p",{children:"High spike logged — one proof brick today. Label once (30s). Proof is visible outside your head."})]}),d&&r(I,{className:"tip-card",onClick:()=>H("/plan"),ariaLabel:`Finish feedback for ${d.title}`,children:r("p",{children:["Finish feedback for: ",r("strong",{children:d.title})]})}),J&&r("div",{class:"tip-card",role:"status",children:r("p",{children:"Music walk: leisure, not medicine. Interrupt walk: no headphones, eyes outside."})}),r("section",{class:"surface-card form-card stack","aria-label":"Today's plan",children:[r("div",{class:"week-progress-row",children:[r("h2",{class:"section-title",style:{margin:0},children:"Today’s plan"}),r(I,{className:"chip-btn",onClick:()=>H("/plan"),children:"Open"})]}),h.length?r("div",{class:"stack",children:h.map(M=>r(I,{className:"entry-row",onClick:()=>H("/plan"),children:r("span",{class:"entry-row-main",children:[r("span",{class:"entry-preview",children:[M.status==="planned"?"○ ":"✓ ",M.priority==="P0"?"P0 · ":"",M.title]}),r("time",{children:[M.start,"–",M.end]})]})},M.id))}):r("div",{class:"stack",children:[r("p",{class:"muted",children:"No upcoming blocks."}),r(I,{className:"chip-btn",onClick:()=>H("/plan"),children:"Paste plan from chat"})]})]}),r("section",{class:"hero-score-card surface-card","aria-label":"Week points",children:[r("div",{class:"hero-score-copy",children:[r("span",{class:"hero-score-label",children:"Week points"}),r("p",{class:"hero-score-value",children:A}),r("p",{class:"hero-score-sub",children:"Logged days compound."})]}),r("img",{class:"hero-illu",src:"/illustrations/hero-home.svg",alt:"",width:"140",height:"120"})]}),r("section",{class:"week-progress-card surface-card","aria-label":"Week progress",children:[r("div",{class:"week-progress-copy",children:[r("div",{class:"week-progress-row",children:[r("span",{children:"Weekly total"}),r("strong",{children:A})]}),r("div",{class:"week-progress-row",children:[r("span",{children:"Today"}),r("strong",{children:D})]}),r("div",{class:"progress-track",role:"progressbar","aria-valuenow":A,"aria-valuemin":0,"aria-valuemax":zs,children:r("div",{class:"progress-fill",style:{width:`${R*100}%`}})})]}),r("img",{class:"scores-illu",src:"/illustrations/scores.svg",alt:"",width:"72",height:"72"})]}),r("section",{class:"stack recent-section","aria-label":"Recent entries",children:[r("div",{class:"week-progress-row",children:[r("h2",{class:"section-title",style:{margin:0},children:"Recent"}),r(I,{className:"chip-btn",onClick:()=>H("/history"),children:"See all"})]}),o.length?r("div",{class:"entry-list",children:o.map(M=>r(I,{className:`entry-row ${M.result==="pending"?"pending-row":""}`.trim(),onClick:()=>H(`/entry/${encodeURIComponent(M.id)}`),children:[r("span",{class:`result-chip result-${M.result}`,children:[M.result==="pending"?r(Lc,{size:14,"aria-hidden":"true"}):null,M.result]}),r("span",{class:"entry-row-main",children:[r("span",{class:"entry-preview",children:[M.happened.slice(0,80),M.happened.length>80?"…":""]}),r("time",{children:new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}).format(new Date(M.ts))})]})]},M.id))}):r("p",{class:"muted",children:"No entries yet."})]}),r("section",{class:"quick-actions","aria-label":"Quick actions",children:[r(I,{className:"quick-chip",onClick:()=>H("/plan"),children:"Plan"}),r(I,{className:"quick-chip",onClick:()=>H("/history"),children:"History"}),r(I,{className:"quick-chip",onClick:()=>H("/daily"),children:"Daily"}),r(I,{className:"quick-chip",onClick:()=>H("/coach"),children:"Coach"})]})]}),r(Xc,{open:g,onClose:()=>_(!1),indoorsStreak:m})]})}const Zc=40;function Qc(){const{refreshPendingSignal:t}=Et(),[e,n]=b([]),[s,i]=b(0),[a,o]=b(""),[l,u]=b(""),[c,h]=b(!1),p=async(m=0,y=!1)=>{h(!0);try{const g=await Ze({result:a||void 0,limit:Zc,offset:m});n(_=>y?g.items:[..._,...g.items]),i(g.total)}finally{h(!1)}};se(()=>{p(0,!0)},[a,t]);const d=Ve(()=>{const m=l.trim().toLowerCase();return m?e.filter(y=>y.happened.toLowerCase().includes(m)||y.activity.toLowerCase().includes(m)||y.remedy.toLowerCase().includes(m)||y.tags.some(g=>g.includes(m))):e},[e,l]);return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{class:"page-title",children:"History"})}),r("main",{class:"page stack",children:[r("label",{class:"search-field",children:[r(Hc,{size:18,"aria-hidden":"true"}),r("input",{class:"field-input search-input",type:"search",placeholder:"Search entries",value:l,onInput:m=>u(m.target.value)})]}),r("div",{class:"chip-row filter-chips",role:"group","aria-label":"Filter",children:[{value:"",label:"All"},{value:"worked",label:"Worked"},{value:"partial",label:"Partial"},{value:"failed",label:"Failed"},{value:"pending",label:"Pending"}].map(m=>r(I,{className:"chip",ariaPressed:a===m.value,onClick:()=>o(m.value),children:[m.value==="pending"?r(Uc,{size:14,"aria-hidden":"true"}):null,m.label]},m.label))}),!d.length&&!c?r("div",{class:"empty-state surface-card",children:[r("img",{src:"/illustrations/empty.svg",alt:"",width:"120",height:"100"}),r("p",{children:"No entries yet."}),r(B,{onClick:()=>H("/log"),children:"Log entry"})]}):null,r("div",{class:"entry-list",children:d.map(m=>r(I,{className:`entry-row ${m.result==="pending"?"pending-row":""}`.trim(),onClick:()=>{H(`/entry/${encodeURIComponent(m.id)}`)},children:[r("span",{class:`result-chip result-${m.result}`,children:m.result}),r("span",{class:"entry-row-main",children:[r("span",{class:"entry-preview",children:[m.happened.slice(0,80),m.happened.length>80?"…":""]}),r("time",{children:new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}).format(new Date(m.ts))})]})]},m.id))}),e.length<s?r(B,{variant:"secondary",disabled:c,onClick:()=>p(e.length),children:c?"Loading…":"Load more"}):null]})]})}function qs(t){return t==="model"?"Model":"Rules"}function ed({picks:t}){return t.length?r("section",{class:"stack compact",children:[r("h3",{class:"section-title",children:"From your data"}),r("div",{class:"pick-list",children:t.map(e=>r(I,{className:"pick-row",onClick:()=>H(`/log?remedy=${encodeURIComponent(e.remedy_key)}`),children:[r("span",{children:e.remedy_key}),r("span",{class:"muted",children:["n=",e.n," · ",Math.round(e.p_helped*100),"% helped"]})]},e.remedy_key))})]}):null}function Pr({result:t}){const e=Se(null),n=be();se(()=>{e.current&&(rt()?Re(e.current,{opacity:[0,1]},{duration:.18}):Re(e.current,{opacity:[0,1],y:[12,0]},We.snap))},[t.trace_id]);const s=async()=>{try{await navigator.clipboard.writeText(await ta()),n.show("Debug copied")}catch(o){n.show(o instanceof Error?o.message:"Copy failed","error")}},i=/LOOP:\s*</i.test(t.text)||/<(?:tag|word|one concrete action)/i.test(t.text),a=i?"Coach returned an empty template — using Rules backup on retry. Tap Coach again or force Rules.":t.text;return r("article",{ref:e,class:"surface-card coach-result stack",children:[r("div",{class:"result-heading",children:[r("span",{class:`source-badge ${qs(t.source).toLowerCase()}`,children:i?"Rules":qs(t.source)}),t.flags.length?r("span",{class:"flags",children:t.flags.join(" · ")}):null]}),r("p",{class:"coach-text",children:a}),r(ed,{picks:t.server_picks}),r(B,{variant:"secondary",onClick:s,children:"Copy debug"})]})}function td({id:t}){const e=be(),{openResolveId:n,refreshPendingSignal:s}=Et(),[i,a]=b(null),[o,l]=b(null),[u,c]=b(!1),[h,p]=b(null),[d,f]=b(!1);if(se(()=>{let y=!1;return ds(t).then(g=>{y||(a(g),l(g),g.result==="pending"&&n(g.id,g))}).catch(g=>{y||e.show(g.message,"error")}),()=>{y=!0}},[t]),se(()=>{s&&ds(t).then(y=>{a(y),l(y)}).catch(()=>{})},[s,t]),!i||!o)return r("div",{class:"gate-loading",children:"Loading…"});const m=async()=>{f(!0);try{const y=await gi(t,{activity:o.activity,happened:o.happened,emotions:o.emotions,intensity:o.intensity,remedy:o.remedy,result:o.result,tags:o.tags,notes:o.notes});a(y),l(y),e.show("Saved")}catch(y){e.show(y instanceof Error?y.message:"Update failed","error")}finally{f(!1)}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:[r(B,{variant:"plain",onClick:()=>H("/history"),children:"‹ Back"}),r("h1",{class:"page-title",children:"Entry"}),r("span",{})]}),r("main",{class:"page stack",children:[r("article",{class:"surface-card detail-card stack",children:[r("p",{class:"detail-snippet",children:o.happened}),r("div",{class:"meta-grid",children:[r("div",{children:[r("span",{class:"field-label",children:"Date"}),new Date(i.ts).toLocaleString()]}),r("div",{children:[r("span",{class:"field-label",children:"Activity"}),o.activity||"—"]}),r("div",{children:[r("span",{class:"field-label",children:"Emotions"}),o.emotions.join(", ")||"—"]}),r("div",{children:[r("span",{class:"field-label",children:"Intensity"}),o.intensity,"/10"]}),r("div",{children:[r("span",{class:"field-label",children:"Tags"}),o.tags.join(", ")||"—"]})]})]}),r("section",{class:`surface-card form-card stack ${o.result==="pending"?"pending-focus":""}`.trim(),children:[r("div",{class:"section-head",children:[r("span",{class:"field-label",children:"Result"}),i.result==="pending"?r(nd,{onClick:()=>n(i.id,i)}):null]}),r(Bn,{value:o.result,onChange:y=>l({...o,result:y})}),r("label",{class:"field-label",for:"entry-remedy",children:"Remedy"}),r("input",{id:"entry-remedy",class:"field-input",value:o.remedy,onInput:y=>l({...o,remedy:y.target.value})}),r(B,{disabled:d,onClick:m,children:d?"Saving…":"Save"})]}),r(B,{variant:"secondary",disabled:d,onClick:async()=>{f(!0);try{p(await Xr(t))}catch(y){e.show(y instanceof Error?y.message:"Suggestion failed","error")}finally{f(!1)}},children:"Get suggestion"}),h?r(Pr,{result:h}):null,r(B,{variant:"destructive",onClick:()=>c(!0),children:"Delete entry"})]}),r(Ie,{open:u,title:"Delete entry?",onClose:()=>c(!1),children:r("div",{class:"stack",children:[r("p",{children:"This permanently deletes this entry."}),r(B,{variant:"destructive",onClick:async()=>{await Yr(t),e.show("Entry deleted"),H("/history")},children:"Delete"}),r(B,{variant:"secondary",onClick:()=>c(!1),children:"Cancel"})]})})]})}function nd({onClick:t}){return r("button",{type:"button",class:"linkish",onClick:t,children:["Finish now ",r(Wn,{size:16,"aria-hidden":"true"})]})}const Ys={primary_brick:"none",brick_done:!1,corn_sessions:0,delay_ok:!0,daydream:"none",rerun:"clean",court:"closed",stayed_indoors_all_day:!1,left_room:!1,left_home:!1,movement_minutes:0,interrupt_walk_minutes:0,fantasy_walk_minutes:0,headphones_on_walk:!1,music_cinematic_on_walk:!1,proof_brick_done:!1,proof_brick_kind:null,fantasy_minutes_scheduled:0,fantasy_minutes_unplanned:0,note:""},sd=[{value:"interrupt_walk",label:"Interrupt walk"},{value:"body_or_room",label:"Body or room"},{value:"trip_admin",label:"Trip admin"},{value:"earn",label:"Earn"},{value:"boundary",label:"Boundary"},{value:"food",label:"Food"},{value:"survive",label:"Survive"},{value:"other",label:"Other"}],id=[{value:"A",label:"Admin / trip task"},{value:"B",label:"Body or room care"},{value:"C",label:"Work / skill"},{value:"D",label:"Home exit plan"},{value:"E",label:"Held a boundary"},{value:"S",label:"Just survived the day"},{value:"none",label:"Nothing yet"}],rd=[{value:"none",label:"No"},{value:"done",label:"Yes, and I still did one real step"},{value:"fc",label:"Yes, and I didn’t do a real step"}],ad=[{value:"clean",label:"I cut it short or didn’t go there"},{value:"R",label:"I stayed stuck in it"}],od=[{value:"closed",label:"I closed it"},{value:"court",label:"I kept prosecuting the case"}],Gs="daily-tip-dismissed";function ue({options:t,value:e,onChange:n}){return r("div",{class:"choice-list",role:"radiogroup",children:t.map(s=>r(I,{className:"choice-item",ariaPressed:s.value===e,onClick:()=>n(s.value),children:s.label},s.value))})}function ld({value:t,onChange:e}){return r("div",{class:"stepper-row",children:[r(I,{className:"stepper-btn",ariaLabel:"One less",disabled:t<=0,onClick:()=>e(Math.max(0,t-1)),children:"−"}),r("strong",{class:"stepper-value",children:t>=3?`${t}`:t}),r(I,{className:"stepper-btn",ariaLabel:"One more",disabled:t>=10,onClick:()=>e(Math.min(10,t+1)),children:"+"})]})}function cd(t){return new Date(`${t}T00:00:00`).toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric"})}function dd(t){const e=t.corn_sessions===0||t.corn_sessions<=1&&t.delay_ok;return[{label:"Did the main action",earned:t.brick_done,pts:2},{label:"No escapes — or just one, after waiting",earned:e,pts:1},{label:"Fantasy didn’t replace a real step",earned:t.daydream!=="fc",pts:1},{label:"Cut the mental replay short",earned:t.rerun==="clean",pts:1},{label:"Kept the case closed",earned:t.court==="closed",pts:1}]}function ud(){const t=be(),[e,n]=b(de(new Date)),[s,i]=b(Ys),[a,o]=b(null),[l,u]=b(!1),[c,h]=b(()=>localStorage.getItem(Gs)==="1"),p=async f=>{o(null);try{const m=await bn(f);i({primary_brick:m.primary_brick,brick_done:m.brick_done,corn_sessions:m.corn_sessions,delay_ok:m.delay_ok,daydream:m.daydream,rerun:m.rerun,court:m.court,stayed_indoors_all_day:!!m.stayed_indoors_all_day,left_room:!!m.left_room,left_home:!!m.left_home,movement_minutes:m.movement_minutes??0,interrupt_walk_minutes:m.interrupt_walk_minutes??0,fantasy_walk_minutes:m.fantasy_walk_minutes??0,headphones_on_walk:!!m.headphones_on_walk,music_cinematic_on_walk:!!m.music_cinematic_on_walk,proof_brick_done:!!m.proof_brick_done,proof_brick_kind:m.proof_brick_kind??null,fantasy_minutes_scheduled:m.fantasy_minutes_scheduled??0,fantasy_minutes_unplanned:m.fantasy_minutes_unplanned??0,note:m.note}),o(m)}catch{i(Ys)}};se(()=>{p(e)},[e]);const d=async()=>{u(!0);try{const f=await wn(e,s);o(f),t.show("Saved")}catch(f){t.show(f instanceof Error?f.message:"Save failed","error")}finally{u(!1)}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar daily-header",children:[r("div",{children:[r("h1",{class:"page-title",children:"Today"}),r("span",{class:"daily-date",children:cd(e)})]}),r("strong",{class:"daily-points","aria-label":"Points today",children:a?`${a.points}/6`:"–/6"})]}),r("main",{class:"page stack",children:[!c&&r("div",{class:"tip-card",role:"note",children:[r("p",{children:["This page is your day’s scoreboard. Use ",r("strong",{children:"Log"})," for what happened and what you tried."]}),r(I,{className:"tip-dismiss",ariaLabel:"Dismiss tip",onClick:()=>{localStorage.setItem(Gs,"1"),h(!0)},children:r(jc,{size:16})})]}),r("label",{class:"field-label",children:["Date",r("input",{class:"field-input",type:"date",value:e,onInput:f=>n(f.target.value)})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"What was today’s one real thing?"}),r(ue,{options:id,value:s.primary_brick,onChange:f=>i({...s,primary_brick:f})}),r("label",{class:"toggle-row",children:[r("span",{children:"I actually did this today"}),r("input",{type:"checkbox",checked:s.brick_done,onChange:f=>i({...s,brick_done:f.target.checked})})]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Escapes"}),r("span",{class:"field-label",children:"How many times did you use porn/masturbation to escape today?"}),r(ld,{value:s.corn_sessions,onChange:f=>i({...s,corn_sessions:f})}),s.corn_sessions>=1&&r(_e,{children:[r("span",{class:"field-label",children:"Before that, did you wait about 10 minutes and do one small real task first?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.delay_ok?"yes":"no",onChange:f=>i({...s,delay_ok:f==="yes"})})]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Did you drift into fantasy today?"}),r(ue,{options:rd,value:s.daydream,onChange:f=>i({...s,daydream:f})})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Replaying painful scenes?"}),r(ue,{options:ad,value:s.rerun,onChange:f=>i({...s,rerun:f})}),r("span",{class:"section-title",children:"Arguing the family case in your head?"}),r(ue,{options:od,value:s.court,onChange:f=>i({...s,court:f})})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Movement"}),r("span",{class:"field-label",children:"Did you stay indoors the whole day?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.stayed_indoors_all_day?"yes":"no",onChange:f=>i({...s,stayed_indoors_all_day:f==="yes"})}),r("span",{class:"field-label",children:"Did you leave the bedroom / room?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.left_room?"yes":"no",onChange:f=>i({...s,left_room:f==="yes"})}),r("span",{class:"field-label",children:"Did you leave the house/compound?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.left_home?"yes":"no",onChange:f=>i({...s,left_home:f==="yes"})}),r("label",{class:"field-label",children:["Interrupt walk minutes (attention break — better without headphones)",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.interrupt_walk_minutes,onInput:f=>{const m=Math.max(0,Number(f.target.value)||0);i({...s,interrupt_walk_minutes:m,movement_minutes:m+s.fantasy_walk_minutes})}})]}),r("label",{class:"field-label",children:["Fantasy / music walk minutes (honest log OK)",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.fantasy_walk_minutes,onInput:f=>{const m=Math.max(0,Number(f.target.value)||0);i({...s,fantasy_walk_minutes:m,movement_minutes:s.interrupt_walk_minutes+m})}})]}),r("span",{class:"field-label",children:"Headphones on a walk?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.headphones_on_walk?"yes":"no",onChange:f=>i({...s,headphones_on_walk:f==="yes"})}),r("span",{class:"field-label",children:"Cinematic / movie music on a walk?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.music_cinematic_on_walk?"yes":"no",onChange:f=>i({...s,music_cinematic_on_walk:f==="yes"})}),r("p",{class:"caption muted",children:["Compound laps and short walks count — no spend needed. Total moving:"," ",s.interrupt_walk_minutes+s.fantasy_walk_minutes,"m"]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Proof brick"}),r("span",{class:"field-label",children:"Did you do one real proof step today?"}),r(ue,{options:[{value:"yes",label:"Yes"},{value:"no",label:"No"}],value:s.proof_brick_done?"yes":"no",onChange:f=>i({...s,proof_brick_done:f==="yes",proof_brick_kind:f==="yes"?s.proof_brick_kind:null})}),s.proof_brick_done&&r(_e,{children:[r("span",{class:"field-label",children:"What kind?"}),r(ue,{options:sd,value:s.proof_brick_kind||"other",onChange:f=>i({...s,proof_brick_kind:f})})]})]}),r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:"Movie / fantasy time"}),r("label",{class:"field-label",children:["Minutes in a scheduled slot",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.fantasy_minutes_scheduled,onInput:f=>i({...s,fantasy_minutes_scheduled:Math.max(0,Number(f.target.value)||0)})})]}),r("label",{class:"field-label",children:["Minutes unplanned (drifted into it)",r("input",{class:"field-input",type:"number",min:0,max:1440,value:s.fantasy_minutes_unplanned,onInput:f=>i({...s,fantasy_minutes_unplanned:Math.max(0,Number(f.target.value)||0)})})]}),r("p",{class:"caption muted",children:"Containment beats guilt. Log honestly."})]}),r("label",{class:"field-label",children:["Note (optional)",r("input",{class:"field-input",type:"text",placeholder:"One line about today",value:s.note,onInput:f=>i({...s,note:f.target.value})})]}),a&&r("section",{class:"surface-card form-card stack",children:[r("span",{class:"section-title",children:["Points: ",a.points,"/6"]}),r("ul",{class:"points-breakdown",children:dd(a).map(f=>r("li",{class:f.earned?"earned":"missed",children:[r("span",{children:f.label}),r("span",{class:"points-pts",children:f.earned?`+${f.pts}`:"0"})]},f.label))})]}),r("details",{class:"how-points surface-card",children:[r("summary",{children:"How points work"}),r("ul",{children:[r("li",{children:"Doing your one real thing earns 2 points."}),r("li",{children:"No escape sessions — or a single one after the 10-minute wait — earns 1 point."}),r("li",{children:"Fantasy is fine if you still did a real step: 1 point."}),r("li",{children:"Cutting mental replays short earns 1 point."}),r("li",{children:"Keeping the family case closed earns 1 point."})]})]}),r("div",{class:"daily-sticky",children:r(B,{className:"btn-large",disabled:l,onClick:d,children:l?"Saving…":"Save today’s check-in"})})]})]})}const hd=[{value:"earn_ship",label:"Work / earn"},{value:"admin_spain",label:"Trip / admin"},{value:"body_care",label:"Body or room"},{value:"move_out",label:"Move-out step"},{value:"food_out",label:"Food"},{value:"stabilize",label:"Stabilize / reset"},{value:"explore",label:"Try something new"},{value:"restore_fun",label:"Fun recharge"},{value:"boundary",label:"Boundary practice"},{value:"sleep_window",label:"Sleep wind-down"},{value:"other",label:"Other"}];function fd(t,e){const[n,s]=t.split(":").map(Number),i=n*60+s+e,a=Math.floor((i%1440+1440)%1440/60),o=(i%1440+1440)%1440%60;return`${String(a).padStart(2,"0")}:${String(o).padStart(2,"0")}`}function pd({open:t,day:e,block:n,mode:s,onClose:i,onChanged:a}){const o=be(),[l,u]=b("done"),[c,h]=b(30),[p,d]=b(3),[f,m]=b(3),[y,g]=b(0),[_,w]=b(""),[x,N]=b(""),[P,A]=b(""),[V,D]=b(""),[R,T]=b([]),[E,J]=b(""),[Q,M]=b(5),[$,U]=b(!1),[O,W]=b(!1),[ee,re]=b([]),[G,ie]=b("New block"),[oe,S]=b("other"),[K,L]=b("09:00"),[le,k]=b("09:30"),[F,Y]=b("P2"),[j,fe]=b("duty");se(()=>{var v,Te,ht,Hn,Kn,Un,jn,zn,qn,Yn,Gn,Xn;t&&(s==="create"&&aa().then(Nr=>re(Nr.items||[])).catch(()=>re([])),s==="view"&&n&&(h(((v=n.feedback)==null?void 0:v.actual_min)??n.planned_min??30),u(((Te=n.feedback)==null?void 0:Te.did)||(n.status==="skipped"?"skipped":"done")),d(((ht=n.feedback)==null?void 0:ht.quality)??3),m(((Hn=n.feedback)==null?void 0:Hn.fun)??3),g(((Kn=n.feedback)==null?void 0:Kn.energy_after)??0),w(((Un=n.feedback)==null?void 0:Un.would_repeat)||""),N(((jn=n.feedback)==null?void 0:jn.skip_reason)||""),A(((zn=n.feedback)==null?void 0:zn.note)||""),D(((qn=n.feedback)==null?void 0:qn.money_amount)!=null?String(n.feedback.money_amount):""),T(((Yn=n.feedback)==null?void 0:Yn.emotions)||[]),J(((Gn=n.feedback)==null?void 0:Gn.fse_event)||""),M(((Xn=n.feedback)==null?void 0:Xn.intensity)??5),U(!1)),s==="create"&&(ie("New block"),S("other"),L("09:00"),k("09:30"),Y("P2"),fe("duty")))},[t,s,n==null?void 0:n.id]);const ct=v=>{ie(v.title),S(v.kind),Y(v.priority||"P2"),fe(v.intent||(v.kind==="explore"?"explore":v.kind==="restore_fun"?"restore_fun":"duty")),k(fd(K,v.default_min||30))},dt=async()=>{if(n){W(!0);try{await ra(e,n.id,{did:l,actual_min:l==="skipped"?null:c,quality:l==="skipped"||!$?null:p,fun:l==="skipped"||!$?null:f,energy_after:$?y:null,money_amount:V?Number(V):null,would_repeat:_||null,skip_reason:l==="skipped"?x||"other":null,note:P,emotions:R,fse_event:E,intensity:l==="skipped"?null:Q}),o.show("Saved"),a(),i()}catch(v){o.show(v instanceof Error?v.message:"Save failed","error")}finally{W(!1)}}},Ft=async()=>{W(!0);try{await sa(e,{title:G,kind:oe,start:K,end:le,priority:F,intent:oe==="explore"?"explore":oe==="restore_fun"?"restore_fun":oe==="stabilize"?"measure":j,locked:F==="P0"}),o.show("Block added"),a(),i()}catch(v){o.show(v instanceof Error?v.message:"Could not add","error")}finally{W(!1)}},ut=async()=>{if(!(!n||!confirm("Remove this block?"))){W(!0);try{await ia(e,n.id),o.show("Removed"),a(),i()}catch(v){o.show(v instanceof Error?v.message:"Delete failed","error")}finally{W(!1)}}};return r(Ie,{open:t,tall:!0,title:s==="create"?"Add block":(n==null?void 0:n.title)||"Block",onClose:i,children:s==="create"?r("div",{class:"stack",children:[ee.length>0&&r(_e,{children:[r("span",{class:"field-label",children:"From template"}),r("div",{class:"choice-list",children:ee.slice(0,8).map(v=>r(I,{className:"choice-item",onClick:()=>ct(v),children:v.title},v.id))})]}),r("label",{class:"field-label",children:["Title",r("input",{class:"field-input",value:G,onInput:v=>ie(v.target.value)})]}),r("span",{class:"field-label",children:"Type"}),r("div",{class:"choice-list",children:hd.map(v=>r(I,{className:"choice-item",ariaPressed:oe===v.value,onClick:()=>S(v.value),children:v.label},v.value))}),r("div",{class:"plan-time-row",children:[r("label",{class:"field-label",children:["Start",r("input",{class:"field-input",type:"time",value:K,onInput:v=>L(v.target.value)})]}),r("label",{class:"field-label",children:["End",r("input",{class:"field-input",type:"time",value:le,onInput:v=>k(v.target.value)})]})]}),r("span",{class:"field-label",children:"Priority"}),r("div",{class:"segment-row",children:["P0","P1","P2"].map(v=>r(I,{className:"segment",ariaPressed:F===v,onClick:()=>Y(v),children:v==="P0"?"Locked":v==="P1"?"Important":"Flex"},v))}),r("div",{class:"resolve-sticky",children:r(B,{className:"btn-large",disabled:O,onClick:Ft,children:O?"Saving…":"Add block"})})]}):n?r("div",{class:"stack",children:[r("p",{class:"meta-line",children:[n.start,"–",n.end," · ",n.label||n.kind," ·"," ",n.priority==="P0"?"Locked":n.priority,n.locked?" · locked":""]}),r("span",{class:"section-title",children:"How did it go?"}),r("div",{class:"segment-row",children:[["done","Done"],["partial","Partial"],["skipped","Skipped"]].map(([v,Te])=>r(I,{className:"segment",ariaPressed:l===v,onClick:()=>u(v),children:Te},v))}),l!=="skipped"&&r("label",{class:"field-label",children:["Actual minutes",r("input",{class:"field-input",type:"number",min:0,max:1440,value:c,onInput:v=>h(Number(v.target.value))})]}),r("label",{class:"field-label",children:["Comment",r("textarea",{class:"field-textarea",value:P,onInput:v=>A(v.target.value),placeholder:"What happened?"})]}),r("span",{class:"field-label",children:"Emotions"}),r("div",{class:"chip-row",role:"group",children:["calm","shame","urge","anxiety","anger","lonely","tired","hope"].map(v=>r(I,{className:"chip",ariaPressed:R.includes(v),onClick:()=>T(Te=>Te.includes(v)?Te.filter(ht=>ht!==v):[...Te,v]),children:v},v))}),r("label",{class:"field-label",children:["FSE event (short phrase)",r("input",{class:"field-input",value:E,onInput:v=>J(v.target.value),placeholder:"What spiked?"})]}),l!=="skipped"&&r("label",{class:"field-label",children:["Intensity · ",Q,r("input",{type:"range",min:1,max:10,value:Q,onInput:v=>M(Number(v.target.value))})]}),l==="skipped"&&r(_e,{children:[r("span",{class:"field-label",children:"Why skipped?"}),r("div",{class:"segment-row",children:["time","fear","urge","boring","fse","other"].map(v=>r(I,{className:"segment",ariaPressed:x===v,onClick:()=>N(v),children:v},v))})]}),r(I,{className:"btn btn-plain",onClick:()=>U(v=>!v),children:$?"Hide quality / fun / energy":"More: quality, fun, energy, money"}),$&&l!=="skipped"&&r(_e,{children:[r("span",{class:"field-label",children:"Quality"}),r("div",{class:"segment-row",children:[1,2,3,4,5].map(v=>r(I,{className:"segment",ariaPressed:p===v,onClick:()=>d(v),children:v},v))}),r("span",{class:"field-label",children:"Fun"}),r("div",{class:"segment-row",children:[1,2,3,4,5].map(v=>r(I,{className:"segment",ariaPressed:f===v,onClick:()=>m(v),children:v},v))}),r("span",{class:"field-label",children:"Energy after"}),r("div",{class:"segment-row",children:[-2,-1,0,1,2].map(v=>r(I,{className:"segment",ariaPressed:y===v,onClick:()=>g(v),children:v>0?`+${v}`:String(v)},String(v)))}),r("span",{class:"field-label",children:"Would repeat?"}),r("div",{class:"segment-row",children:["yes","maybe","no"].map(v=>r(I,{className:"segment",ariaPressed:_===v,onClick:()=>w(v),children:v},v))}),r("label",{class:"field-label",children:["Money (optional)",r("input",{class:"field-input",type:"number",value:V,onInput:v=>D(v.target.value)})]})]}),r("div",{class:"resolve-sticky",children:[r(B,{className:"btn-large",disabled:O,onClick:dt,children:O?"Saving…":"Save how it went"}),r(B,{className:"btn-secondary",disabled:O,onClick:ut,children:"Remove block"})]})]}):null})}const Ar=6,Dr=23,Xs=64;function Js(t){const[e,n]=t.split(":").map(Number);return e*60+n}function md(){const t=Ar*60,e=Dr*60;return{startMin:t,endMin:e,hourPx:Xs,totalPx:(e-t)/60*Xs}}function yd(t){const e=["timeline-block"];return t.priority==="P0"||t.locked?e.push("p0"):t.intent==="explore"?e.push("explore"):t.intent==="restore_fun"?e.push("restore"):t.kind==="stabilize"?e.push("stabilize"):t.priority==="P1"?e.push("duty"):e.push("flex"),(t.status==="done"||t.status==="partial")&&e.push("done"),(t.status==="skipped"||t.status==="cancelled")&&e.push("skipped"),e.join(" ")}function gd({blocks:t,onSelect:e,now:n=new Date}){const{startMin:s,endMin:i,hourPx:a,totalPx:o}=md(),l=[];for(let p=Ar;p<=Dr;p+=1)l.push(p);const u=n.getHours()*60+n.getMinutes(),c=u>=s&&u<=i,h=(u-s)/60*a;return r("div",{class:"timeline",style:{height:`${o}px`},children:[r("div",{class:"timeline-gutter","aria-hidden":"true",children:l.map(p=>r("div",{class:"timeline-hour-label",style:{top:`${(p*60-s)/60*a}px`},children:`${String(p).padStart(2,"0")}:00`},p))}),r("div",{class:"timeline-canvas",children:[l.map(p=>r("div",{class:"timeline-hour-line",style:{top:`${(p*60-s)/60*a}px`}},p)),c&&r("div",{class:"timeline-now",style:{top:`${h}px`},children:r("span",{class:"timeline-now-dot"})}),t.map(p=>{const d=Math.max(Js(p.start),s),f=Math.min(Js(p.end),i);if(f<=d)return null;const m=(d-s)/60*a,y=Math.max(28,(f-d)/60*a-4);return r("button",{type:"button",class:yd(p),style:{top:`${m}px`,height:`${y}px`},onClick:()=>e(p),children:[r("strong",{children:p.title}),r("span",{children:[p.start,"–",p.end," · ",p.planned_min,"m"]})]},p.id)})]})]})}function Zs(t,e){const n=new Date(`${t}T00:00:00`);return n.setDate(n.getDate()+e),de(n)}function _d(t){return new Date(`${t}T00:00:00`).toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"})}function Ut(t){const[e,n]=t.split(":").map(Number);return e*60+n}const gt={comment:"",emotions:[],fse_events:"",what_moved:"",what_avoided:"",tomorrow_change:""};function vd({initialDate:t}){const e=be(),[n,s]=b(t||de(new Date)),[i,a]=b(null),[o,l]=b(!1),[u,c]=b(null),[h,p]=b("view"),[d,f]=b(!1),[m,y]=b(!1),[g,_]=b(""),[w,x]=b("replace"),[N,P]=b(""),[A,V]=b(gt),D=async S=>{try{const K=await _i(S);a(K),V({...gt,...K.day_review||{}})}catch{a(null),V(gt)}};se(()=>{t&&t!==n&&s(t)},[t]),se(()=>{D(n),H(`/plan/${n}`)},[n]);const R=Ve(()=>{const S=(i==null?void 0:i.blocks)??[],K=S.length,L=S.filter(F=>F.status==="done"||F.status==="partial").length,le=S.filter(F=>F.priority==="P0"),k=le.filter(F=>F.status==="planned").length;return{total:K,done:L,p0Left:k,p0Total:le.length}},[i]),T=S=>{c(S),p("view"),f(!0)},E=()=>{c(null),p("create"),f(!0)},J=async()=>{l(!0);try{a(await la(n)),e.show("Starter day added")}catch(S){e.show(S instanceof Error?S.message:"Seed failed","error")}finally{l(!1)}},Q=async()=>{if(confirm("Reschedule the rest of this day? Locked blocks stay put.")){l(!0);try{const S=await oa(n,{reason:"user",force:!0});a(S.plan),e.show(S.source==="rules"?"Rescheduled (rules)":"Rescheduled")}catch(S){e.show(S instanceof Error?S.message:"Reschedule failed","error")}finally{l(!1)}}},M=async()=>{l(!0);try{const S=await da(n);await navigator.clipboard.writeText(JSON.stringify(S,null,2)),e.show("Copied — paste to your chat")}catch(S){e.show(S instanceof Error?S.message:"Export failed","error")}finally{l(!1)}},$=async()=>{var K;P("");let S;try{S=JSON.parse(g)}catch{P("Not valid JSON");return}l(!0);try{const L=await ca(n,S,w);a(L),V({...gt,...L.day_review||{}}),y(!1),_(""),e.show("Plan pasted"),(K=L.import_warnings)!=null&&K.length&&e.show(L.import_warnings[0],"error")}catch(L){const le=L instanceof ye||L instanceof Error?L.message:"Import failed";P(le)}finally{l(!1)}},U=async S=>{const K=S.status==="done"||S.status==="partial"?"planned":"done";l(!0);try{a(await fs(n,S.id,{status:K}))}catch(L){e.show(L instanceof Error?L.message:"Check failed","error")}finally{l(!1)}},O=async S=>{l(!0);try{a(await fs(n,S.id,{status:"skipped",skip_reason:"other"}))}catch(K){e.show(K instanceof Error?K.message:"Skip failed","error")}finally{l(!1)}},W=async()=>{l(!0);try{const S=await ua(n,{day_review:A});a(S),e.show("Day review saved")}catch(S){e.show(S instanceof Error?S.message:"Save failed","error")}finally{l(!1)}},ee=(i==null?void 0:i.capacity_hint)??1,re=i==null?void 0:i.health,G=!(i!=null&&i.blocks.length),ie=new Date().getHours()*60+new Date().getMinutes(),oe=[...(i==null?void 0:i.blocks)??[]].sort((S,K)=>Ut(S.start)-Ut(K.start));return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar plan-header",children:[r("div",{class:"plan-day-nav",children:[r(I,{className:"icon-btn",ariaLabel:"Previous day",onClick:()=>s(Zs(n,-1)),children:r($c,{size:22})}),r("div",{children:[r("h1",{class:"page-title",children:"Plan"}),r("span",{class:"daily-date",children:_d(n)})]}),r(I,{className:"icon-btn",ariaLabel:"Next day",onClick:()=>s(Zs(n,1)),children:r(Wn,{size:22})})]}),r(I,{className:"chip-btn",onClick:()=>s(de(new Date)),children:"Today"})]}),r("main",{class:"page stack plan-page",children:[r("div",{class:"plan-meta-row",children:[r("span",{class:"caption",children:["Capacity ",Math.round(ee*100),"%"]}),re&&r("span",{class:"caption",children:["Health ",Math.round(re.score*100),"% · v",(i==null?void 0:i.version)??1]}),!G&&r("span",{class:"caption",children:[R.done,"/",R.total,R.p0Total?` · P0 left ${R.p0Left}`:""]})]}),((i==null?void 0:i.title)||(i==null?void 0:i.intention))&&r("section",{class:"tip-card",role:"status",children:[i!=null&&i.title?r("strong",{children:i.title}):null,i!=null&&i.intention?r("p",{class:"muted",children:i.intention}):null]}),ee<.55&&r("div",{class:"tip-card",role:"status",children:r("p",{children:"High load risk — lighter plan recommended."})}),r("div",{class:"plan-actions",children:[r(B,{className:"btn-secondary",disabled:o,onClick:()=>y(!0),children:"Paste plan"}),r(B,{className:"btn-secondary",disabled:o||G,onClick:M,children:"Export / Copy"}),r(B,{className:"btn-secondary",disabled:o,onClick:E,children:"+ Block"}),r(B,{className:"btn-secondary",disabled:o,onClick:Q,children:"Reschedule"})]}),r("p",{class:"muted",children:"Paste the JSON your chat wrote. Check off when done in the real world. Export and paste back for review."}),G?r("section",{class:"surface-card empty-card stack",children:[r("p",{children:"No blocks yet. Paste a plan from chat, seed a starter day, or add one block."}),r(B,{disabled:o,onClick:()=>y(!0),children:"Paste plan from chat"}),r(B,{className:"btn-secondary",disabled:o,onClick:J,children:"Seed starter day"}),r(B,{className:"btn-secondary",disabled:o,onClick:E,children:"Add block"})]}):r(_e,{children:[r("section",{class:"surface-card stack","aria-label":"Checklist",children:[r("h2",{class:"section-title",children:"Checklist"}),oe.map(S=>{const K=n===de(new Date)&&S.status==="planned"&&Ut(S.end)<ie,L=S.status==="done"||S.status==="partial";return r("div",{class:`entry-row ${K?"indoors-nudge":""}`.trim(),children:[r(I,{className:"chip",ariaPressed:L,ariaLabel:L?"Mark planned":"Mark done",onClick:()=>void U(S),children:L?"✓":"○"}),r(I,{className:"entry-row-main",onClick:()=>T(S),children:[r("span",{class:"entry-preview",children:[S.priority==="P0"?"P0 · ":"",S.title]}),r("time",{children:[S.start,"–",S.end,K?" · overdue":""]})]}),S.status==="planned"&&r(I,{className:"chip-btn",onClick:()=>void O(S),children:"Skip"})]},S.id)})]}),r("section",{class:"surface-card timeline-card",children:r(gd,{blocks:i.blocks,onSelect:T})})]}),r("section",{class:"surface-card form-card stack","aria-label":"Day review",children:[r("h2",{class:"section-title",children:"Day review"}),r("p",{class:"muted",children:"One line is enough. FSE = fear / shame / embarrassment spike — short phrase."}),r("label",{class:"field-label",for:"dr-comment",children:"Comment"}),r("textarea",{id:"dr-comment",class:"field-textarea",value:A.comment,onInput:S=>V({...A,comment:S.target.value})}),r("label",{class:"field-label",for:"dr-fse",children:"FSE events"}),r("input",{id:"dr-fse",class:"field-input",value:A.fse_events,onInput:S=>V({...A,fse_events:S.target.value})}),r("label",{class:"field-label",for:"dr-moved",children:"What moved"}),r("input",{id:"dr-moved",class:"field-input",value:A.what_moved,onInput:S=>V({...A,what_moved:S.target.value})}),r("label",{class:"field-label",for:"dr-avoided",children:"What avoided"}),r("input",{id:"dr-avoided",class:"field-input",value:A.what_avoided,onInput:S=>V({...A,what_avoided:S.target.value})}),r("label",{class:"field-label",for:"dr-tomorrow",children:"Tomorrow change"}),r("input",{id:"dr-tomorrow",class:"field-input",value:A.tomorrow_change,onInput:S=>V({...A,tomorrow_change:S.target.value})}),r(B,{disabled:o,onClick:()=>void W(),children:"Save day review"})]})]}),r(pd,{open:d,day:n,block:u,mode:h,onClose:()=>f(!1),onChanged:()=>void D(n)}),r(Ie,{open:m,title:"Paste plan",onClose:()=>y(!1),tall:!0,children:r("div",{class:"stack",children:[r("p",{class:"muted",children:"Paste the JSON your chat wrote."}),r("textarea",{class:"field-textarea",rows:14,value:g,onInput:S=>_(S.target.value),placeholder:'{ "schema_version": 1, "blocks": [ ... ] }'}),r("span",{class:"field-label",children:"Mode"}),r("div",{class:"chip-row",role:"group",children:[r(I,{className:"chip",ariaPressed:w==="replace",onClick:()=>x("replace"),children:"Replace"}),r(I,{className:"chip",ariaPressed:w==="merge",onClick:()=>x("merge"),children:"Merge"})]}),N?r("p",{class:"muted",role:"alert",children:N}):null,r(B,{disabled:o||!g.trim(),onClick:()=>void $(),children:"Import plan"})]})})]})}const Qs=(t=0)=>`${Math.round(t*100)}%`;function Ye({title:t,rows:e,metric:n}){return r("section",{class:"surface-card stats-card",children:[r("h2",{children:t}),e.length?e.map(s=>{const i=s[n]||0;return r("div",{class:"stat-row",children:[r("div",{children:[r("span",{children:s.key}),r("span",{class:"muted",children:["n=",s.n," · ",Qs(i)]})]}),r("div",{class:"bar-track",children:r("span",{style:{width:Qs(i)}})})]},s.key)}):r("p",{class:"muted",children:"No qualifying data."})]})}function bd(){const[t,e]=b(null);if(se(()=>{Jr().then(e).catch(()=>{})},[]),!t)return r("div",{class:"gate-loading",children:"Loading…"});const n=Object.entries(t.outcomes),s=[{key:"Brick done",n:0,p_helped:t.daily.p_brick_done},{key:"Corn okay",n:0,p_helped:t.daily.p_corn_ok},{key:"No FC",n:0,p_helped:t.daily.p_no_fc},{key:"Clean rerun",n:0,p_helped:t.daily.p_rerun_clean},{key:"Court closed",n:0,p_helped:t.daily.p_court_closed}];return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Stats"})}),r("main",{class:"page stack",children:[r("section",{class:"surface-card stats-card",children:[r("h2",{children:"Outcomes"}),r("div",{class:"outcome-grid",children:n.map(([i,a])=>r("div",{children:[r("strong",{children:a}),r("span",{class:`result-label result-${i}`,children:i})]},i))}),r("p",{class:"muted",children:[t.n_entries_scored," scored · ",t.n_entries_total," total"]})]}),r(Ye,{title:"Remedies",rows:t.by_remedy,metric:"p_helped"}),r(Ye,{title:"Tags · failed",rows:t.by_tag,metric:"p_failed"}),r(Ye,{title:"Emotions",rows:t.by_emotion,metric:"p_helped"}),r(Ye,{title:"Intensity",rows:t.by_intensity_bucket,metric:"p_helped"}),r(Ye,{title:"Daily rates",rows:s,metric:"p_helped"}),r("section",{class:"surface-card stats-card",children:[r("h2",{children:"Average daily points"}),r("strong",{class:"large-number",children:[t.daily.avg_points.toFixed(1),"/6"]})]})]})]})}function wd(){const[t,e]=b([]);return se(()=>{Zr().then(n=>e(n.items)).catch(()=>{})},[]),r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Remedies"})}),r("main",{class:"page stack",children:t.length?r("div",{class:"surface-card pick-list",children:t.map((n,s)=>r(I,{className:"pick-row",onClick:()=>H(`/log?remedy=${encodeURIComponent(n.key)}`),children:[r("span",{children:[r("strong",{children:[s+1,"."]})," ",n.key]}),r("span",{class:"muted",children:["n=",n.n," · ",Math.round((n.p_helped||0)*100),"% helped"]})]},n.key))}):r("div",{class:"empty-state surface-card",children:r("p",{children:"No qualifying remedies."})})})]})}function kd(){const t=be(),[e,n]=b(""),[s,i]=b(null),[a,o]=b(!1);return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Coach"})}),r("main",{class:"page stack",children:[r("img",{src:"/illustrations/coach.svg",alt:"",width:"96",height:"80"}),r("label",{class:"field-label",for:"coach-text",children:"What's going on"}),r("textarea",{id:"coach-text",class:"field-textarea coach-input",value:e,onInput:l=>n(l.target.value),placeholder:"Describe the situation"}),r(B,{disabled:!e.trim()||a,onClick:async()=>{o(!0);try{i(await Gr({text:e.trim()}))}catch(l){t.show(l instanceof Error?l.message:"Analysis failed","error")}finally{o(!1)}},children:a?"Analyzing…":"Analyze"}),s?r(Pr,{result:s}):null,r("p",{class:"tertiary disclaimer",children:"Suggestions use rules and your logged data. You choose the result."})]})]})}const Sd=[["/api/export/entries.csv","entries.csv"],["/api/export/entries.jsonl","entries.jsonl"],["/api/export/daily.jsonl","daily.jsonl"]];function Td(){const t=be(),[e,n]=b(null);se(()=>{Qr().then(n).catch(()=>{})},[]);const s=async(i,a)=>{try{const o=await na(i),l=URL.createObjectURL(o),u=document.createElement("a");u.href=l,u.download=a,u.click(),URL.revokeObjectURL(l)}catch(o){t.show(o instanceof Error?o.message:"Export failed","error")}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:r("h1",{children:"Settings"})}),r("main",{class:"page stack",children:[r("section",{class:"surface-card settings-card stack",children:[r("h2",{children:"Status"}),r("div",{class:"status-row",children:[r("span",{children:"App"}),r("strong",{children:(e==null?void 0:e.app_name)||"Habit Journal"})]}),r("div",{class:"status-row",children:[r("span",{children:"Data"}),r("strong",{children:e?e.data_ok?"Ready":"Unavailable":"Loading…"})]}),r("div",{class:"status-row",children:[r("span",{children:"Coach"}),r("strong",{children:e?e.coach_configured?"Configured":"Rules only":"Loading…"})]}),r("div",{class:"status-row",children:[r("span",{children:"Model"}),r("strong",{children:(e==null?void 0:e.model)||"—"})]}),r("div",{class:"status-row",children:[r("span",{children:"Version"}),r("strong",{children:(e==null?void 0:e.app_version)||"—"})]})]}),r("section",{class:"surface-card settings-card stack",children:[r("h2",{children:"Export"}),Sd.map(([i,a])=>r(B,{variant:"secondary",onClick:()=>s(i,a),children:["Download ",a]},i))]}),r("section",{class:"surface-card settings-card stack",children:[r("h2",{children:"Install on iPhone"}),r("ol",{class:"install-steps",children:[r("li",{children:"Open this page in Safari."}),r("li",{children:"Tap Share."}),r("li",{children:"Tap Add to Home Screen."}),r("li",{children:"Tap Add."})]})]}),r(B,{variant:"destructive",onClick:async()=>{await ea(),H("/login")},children:"Logout"})]})]})}const Cd=["calm","shame","urge","anxiety","anger","lonely","tired","hope"],xd=["indoors","freeze","movement","interrupt_walk","fantasy_walk","headphones","proof"],Md=new Set(["shame","urge","anxiety","anger","lonely"]),Pd=new Set(["freeze","indoors","rerun","court","daydream","fantasy","fantasy_walk"]),Ad=["freeze","bed","scroll","fantasy","headphones","court","rerun"],Dd=[{value:"interrupt_walk",label:"Interrupt walk"},{value:"body_or_room",label:"Body or room"},{value:"trip_admin",label:"Trip admin"},{value:"earn",label:"Earn"},{value:"boundary",label:"Boundary"},{value:"food",label:"Food"},{value:"survive",label:"Survive"},{value:"other",label:"Other"}];function Nd(t,e,n){if(t<7)return!1;const s=e.map(a=>a.toLowerCase()),i=n.map(a=>a.toLowerCase());return s.some(a=>Md.has(a))||i.some(a=>Pd.has(a))}function Vd(t){return/\blabel(?:ing|ling)?\b/i.test(t.trim())}const ei={primary_brick:"none",brick_done:!1,corn_sessions:0,delay_ok:!0,daydream:"none",rerun:"clean",court:"closed",stayed_indoors_all_day:!1,left_room:!1,left_home:!1,movement_minutes:0,interrupt_walk_minutes:0,fantasy_walk_minutes:0,headphones_on_walk:!1,music_cinematic_on_walk:!1,proof_brick_done:!1,proof_brick_kind:null,fantasy_minutes_scheduled:0,fantasy_minutes_unplanned:0,note:""};function Rd({initialRemedy:t="",initialHappened:e=""}){const n=be(),{openResolveId:s}=Et(),[i,a]=b(e),[o,l]=b([]),[u,c]=b(5),[h,p]=b("pending"),[d,f]=b(t),[m,y]=b(""),[g,_]=b(""),[w,x]=b(""),[N,P]=b(!1),[A,V]=b(!1),[D,R]=b(null),[T,E]=b(!1),[J,Q]=b(!1),[M,$]=b([]),[U,O]=b(null);se(()=>{f(t)},[t]),se(()=>{e&&a(e)},[e]);const W=Ve(()=>i.trim().length>0&&!A,[i,A]),ee=Ve(()=>g.split(",").map(k=>k.trim()).filter(Boolean),[g]),re=k=>{l(F=>F.includes(k)?F.filter(Y=>Y!==k):F.length>=12?F:[...F,k])},G=k=>{const F=ee;F.map(j=>j.toLowerCase()).includes(k)?_(F.filter(j=>j.toLowerCase()!==k).join(", ")):_([...F,k].join(", "))},ie=(k,F)=>{F?R({id:k}):H("/")},oe=u>=7&&d.trim().length>0&&Vd(d),S=k=>{$(F=>F.includes(k)?F.filter(Y=>Y!==k):[...F,k])},K=async()=>{if(W){V(!0);try{const k=Nd(u,o,ee),F=await cs({activity:m.trim()||"Log",happened:i.trim(),emotions:o,intensity:u,remedy:d.trim(),result:h,tags:ee,notes:w.trim(),fse_spike:k||u>=7?!0:null,avoidance_types:M,walk_type:ee.includes("interrupt_walk")?"interrupt":ee.includes("fantasy_walk")?"fantasy":null});n.show("Saved"),typeof navigator<"u"&&"vibrate"in navigator&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&navigator.vibrate(10);const Y=F.result==="pending";k?(O({id:F.id,pending:Y}),E(!0)):ie(F.id,Y)}catch(k){const F=k instanceof ye?k.message:"Could not save entry";n.show(F,"error")}finally{V(!1)}}},L=()=>{E(!1);const k=U;O(null),k?ie(k.id,k.pending):H("/")},le=async k=>{Q(!0);const F=de(new Date);try{let Y={...ei};try{const j=await bn(F);Y={primary_brick:j.primary_brick,brick_done:j.brick_done,corn_sessions:j.corn_sessions,delay_ok:j.delay_ok,daydream:j.daydream,rerun:j.rerun,court:j.court,stayed_indoors_all_day:!!j.stayed_indoors_all_day,left_room:!!j.left_room||k==="body_or_room"||k==="leave_room",left_home:!!j.left_home,movement_minutes:j.movement_minutes??0,interrupt_walk_minutes:j.interrupt_walk_minutes??0,fantasy_walk_minutes:j.fantasy_walk_minutes??0,headphones_on_walk:!!j.headphones_on_walk,music_cinematic_on_walk:!!j.music_cinematic_on_walk,proof_brick_done:!0,proof_brick_kind:k,fantasy_minutes_scheduled:j.fantasy_minutes_scheduled??0,fantasy_minutes_unplanned:j.fantasy_minutes_unplanned??0,note:j.note||""}}catch{Y={...ei,left_room:k==="body_or_room"||k==="leave_room",proof_brick_done:!0,proof_brick_kind:k}}k==="interrupt_walk"&&!Y.interrupt_walk_minutes&&(Y.interrupt_walk_minutes=10,Y.movement_minutes=(Y.interrupt_walk_minutes||0)+(Y.fantasy_walk_minutes||0)),await wn(F,Y),n.show("Proof noted on Daily"),L()}catch{try{await cs({activity:"Proof brick",happened:`Proof step: ${k}`,emotions:[],intensity:Math.min(u,5),remedy:k.replace(/_/g," "),result:"worked",tags:["proof",k]}),n.show("Proof logged"),L()}catch(Y){n.show(Y instanceof ye?Y.message:"Could not save proof","error")}}finally{Q(!1)}};return r("div",{class:"app-shell",children:[r("header",{class:"top-bar material-bar",children:[r(I,{className:"btn btn-plain",ariaLabel:"Back",onClick:()=>H("/"),children:"‹ Back"}),r("h1",{class:"page-title",children:"Log"})]}),r("main",{class:"page stack",children:[r("div",{children:[r("label",{class:"field-label",for:"happened",children:"Happened"}),r("textarea",{id:"happened",class:"field-textarea",autofocus:!0,required:!0,value:i,onInput:k=>a(k.target.value),placeholder:"What happened?"})]}),r("div",{children:[r("span",{class:"field-label",id:"emotions-label",children:"Emotions"}),r("div",{class:"chip-row",role:"group","aria-labelledby":"emotions-label",children:Cd.map(k=>r(I,{className:"chip",ariaPressed:o.includes(k),onClick:()=>re(k),children:k},k))})]}),r("div",{class:"slider-wrap",children:[r("label",{class:"field-label",for:"intensity",children:["Intensity · ",u]}),r("input",{id:"intensity",type:"range",min:1,max:10,step:1,value:u,onInput:k=>c(Number(k.target.value))})]}),r("div",{children:[r("span",{class:"field-label",children:"Result"}),r(Bn,{value:h,onChange:p})]}),r("div",{children:[r("label",{class:"field-label",for:"remedy",children:"Remedy"}),r("input",{id:"remedy",class:"field-input",type:"text",value:d,onInput:k=>f(k.target.value),placeholder:"One concrete action — not more labeling at high heat"}),oe?r("p",{class:"muted",role:"status",children:["Label once (30s). Proof is visible outside your head. At intensity"," ",u,", pick a proof brick — not labeling-only."]}):null]}),u>=7?r("div",{children:[r("span",{class:"field-label",children:"Avoidance (optional)"}),r("div",{class:"chip-row",role:"group","aria-label":"Avoidance",children:Ad.map(k=>r(I,{className:"chip",ariaPressed:M.includes(k),onClick:()=>S(k),children:k},k))}),r("p",{class:"muted",children:"Preview, not proof. Proof brick comes after save."})]}):null,r("div",{children:[r("span",{class:"field-label",children:"Tags"}),r("div",{class:"chip-row",role:"group","aria-label":"Suggested tags",children:xd.map(k=>r(I,{className:"chip",ariaPressed:ee.map(F=>F.toLowerCase()).includes(k),onClick:()=>G(k),children:k},k))})]}),r(B,{disabled:!W,onClick:K,className:"btn-large",children:A?"Saving…":"Save entry"}),r(I,{className:"btn btn-plain",ariaPressed:N,onClick:()=>P(k=>!k),children:N?"Hide more":"More"}),N?r("div",{class:"more-block stack",children:[r("div",{children:[r("label",{class:"field-label",for:"activity",children:"Activity"}),r("input",{id:"activity",class:"field-input",type:"text",value:m,onInput:k=>y(k.target.value)})]}),r("div",{children:[r("label",{class:"field-label",for:"tags",children:"More tags"}),r("input",{id:"tags",class:"field-input",type:"text",value:g,onInput:k=>_(k.target.value),placeholder:"comma,separated"})]}),r("div",{children:[r("label",{class:"field-label",for:"notes",children:"Notes"}),r("textarea",{id:"notes",class:"field-textarea",value:w,onInput:k=>x(k.target.value)})]})]}):null]}),r(Ie,{open:T,title:"One proof step (not more labeling)",onClose:L,children:r("div",{class:"stack",children:[r("p",{class:"muted",children:"High spike logged. Pick one small real step you can do now — body, room, message, or interrupt walk."}),r("div",{class:"choice-list",children:Dd.map(k=>r(I,{className:"choice-item",disabled:J,onClick:()=>void le(k.value),children:k.label},k.value))}),r(B,{className:"btn-secondary",disabled:J,onClick:L,children:"Skip for now"})]})}),r(Ie,{open:!!D,title:"Finish now?",onClose:()=>{R(null),H("/")},children:r("div",{class:"stack",children:[r("p",{class:"muted",children:"Set a result for this entry, or leave it pending."}),r(B,{className:"btn-large",onClick:()=>{const k=D==null?void 0:D.id;R(null),k&&s(k),H("/")},children:"Finish now"}),r(B,{variant:"secondary",onClick:()=>{R(null),H("/")},children:"Later"})]})})]})}function Id({appName:t,onAuthenticated:e}){const[n,s]=b(""),[i,a]=b(null),[o,l]=b(!1);return r("main",{class:"login-page",children:r("form",{class:"login-card surface-card stack",onSubmit:async c=>{c.preventDefault(),a(null),l(!0);try{await zr(n),e(),H("/")}catch(h){const p=h instanceof ye?h.message:"Could not log in";a(p==="Login required"?"Invalid credentials":p)}finally{l(!1)}},children:[r("div",{children:[r("h1",{children:t||"Habit Journal"}),r("p",{class:"muted",children:"Personal habit journal"})]}),r("div",{children:[r("label",{class:"field-label",for:"password",children:"Password"}),r("input",{id:"password",class:"field-input",type:"password",name:"password",autoComplete:"current-password",required:!0,value:n,onInput:c=>s(c.target.value)})]}),i?r("p",{class:"error-text",children:i}):null,r(B,{type:"submit",disabled:o||!n,children:o?"Logging in…":"Log in"})]})})}function Ed(){const t=zc(),[e,n]=b(!1),[s,i]=b(!1),[a,o]=b("Habit Journal"),l=Je(async()=>{try{const c=await jr();return i(c.authenticated),o(c.app_name||"Habit Journal"),c.authenticated}catch{return i(!1),!1}finally{n(!0)}},[]);if(se(()=>{l()},[l]),se(()=>{e&&!s&&t.name!=="login"&&H("/login")},[e,s,t.name]),!e)return r("div",{class:"gate-loading",children:"Loading…"});if(!s||t.name==="login")return r(Id,{appName:a,onAuthenticated:()=>{i(!0)}});let u;return t.name==="log"?u=r(Rd,{initialRemedy:t.remedy,initialHappened:t.happened}):t.name==="home"?u=r(Jc,{}):t.name==="history"?u=r(Qc,{}):t.name==="entry"?u=r(td,{id:t.id}):t.name==="daily"?u=r(ud,{}):t.name==="plan"?u=r(vd,{initialDate:t.date}):t.name==="stats"?u=r(bd,{}):t.name==="coach"?u=r(kd,{}):t.name==="remedies"?u=r(wd,{}):t.name==="settings"?u=r(Td,{}):u=r("div",{class:"app-shell",children:r("main",{class:"page stack",children:[r("p",{children:"Unknown page."}),r("button",{type:"button",class:"btn btn-primary",onClick:()=>H("/"),children:"Home"})]})}),r(Ac,{children:[u,r(qc,{route:t})]})}Br(r(Mc,{children:r(Ed,{})}),document.getElementById("app"));"serviceWorker"in navigator&&window.addEventListener("load",()=>navigator.serviceWorker.register("/sw.js"));
102
+ //# sourceMappingURL=index-DGsuIBXN.js.map
static/assets/{index-DYDM6L-p.js.map → index-DGsuIBXN.js.map} RENAMED
The diff for this file is too large to render. See raw diff
 
static/assets/index-Dfdx14RO.css ADDED
@@ -0,0 +1 @@
 
 
1
+ :root{color-scheme:light;--bg: #ebe7e0;--bg-elevated: #f1ede6;--card: #ffffff;--surface: #ffffff;--surface-solid: #ffffff;--surface-secondary: #f6f3ed;--ink: #2b2a26;--text: #2b2a26;--text-secondary: #5c574f;--text-tertiary: #8b8579;--separator: rgba(43, 42, 38, .08);--accent: #9b6b43;--accent-ink: #6e4a2e;--accent-soft: rgba(155, 107, 67, .16);--accent-tint: #e8d9c9;--accent-fill: #f3e8da;--ok: #4f7a5c;--ok-bg: #e3ede6;--warn: #b07e2f;--warn-bg: #f3e8d2;--danger: #a8523e;--danger-bg: #f2e0da;--pending-bg: #f3e8da;--pending-border: #9b6b43;--scrim: rgba(43, 42, 38, .42);--shadow: 0 8px 28px rgba(43, 42, 38, .1), 0 2px 6px rgba(43, 42, 38, .05);--shadow-1: 0 1px 2px rgba(43, 42, 38, .05);--shadow-2: 0 4px 16px rgba(43, 42, 38, .06), 0 1px 3px rgba(43, 42, 38, .04);--shadow-3: 0 8px 28px rgba(43, 42, 38, .1), 0 2px 6px rgba(43, 42, 38, .05);--radius: 20px;--radius-sm: 12px;--radius-md: 16px;--pad: 1.25rem;--hit: 44px;--btn-h: 52px;--fab-size: 58px;--tab-h: 72px;--fs-display: 30px;--fs-h1: 24px;--fs-section: 17px;--fs-body: 15px;--fs-caption: 13px;--fs-micro: 11px;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 20px;--s-6: 24px;--s-7: 32px;--font: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);font:400 16px/1.47 var(--font);background:var(--bg);color:var(--text);letter-spacing:0}@media(prefers-contrast:more){:root{--separator: rgba(32, 32, 32, .28);--text-secondary: #444444;--shadow: none;--shadow-1: none;--shadow-2: none;--shadow-3: none}}*,*:before,*:after{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer;border:none;background:none}a{color:var(--accent);text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}img{max-width:100%}.material-bar{background:#ebe7e0d1;backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--separator)}.sheet-material{background:var(--card);border-radius:20px 20px 0 0;box-shadow:0 -8px 40px #2b2a2624}.surface-card{background:var(--card);border:1px solid var(--separator);border-radius:var(--radius);box-shadow:var(--shadow-1)}@media(prefers-reduced-transparency:reduce){.material-bar,.sheet-material,.surface-card{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--surface-solid)}}@media(prefers-contrast:more){.material-bar,.sheet-material,.surface-card{border-color:#20202047;box-shadow:none}}.app-shell{min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.top-bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:.75rem;min-height:calc(var(--hit) + var(--safe-top));padding:calc(.5rem + var(--safe-top)) var(--pad) .75rem;background:#ebe7e0d1;backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--separator)}.top-bar h1,.page-title{margin:0;font-size:28px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.page{flex:1;width:min(40rem,100%);margin:0 auto;padding:1.25rem var(--pad) calc(1.5rem + var(--safe-bottom) + var(--tab-h) + .75rem)}.home-page{gap:16px;animation:card-in .18s ease both}.stack{display:flex;flex-direction:column;gap:16px}.field-label{display:block;margin-bottom:.4rem;color:var(--text-secondary);font-size:13px;font-weight:500}.field-input,.field-textarea{width:100%;min-height:var(--hit);padding:.85rem 1rem;border-radius:16px;border:1px solid var(--separator);background:var(--card);color:var(--text)}.field-textarea{min-height:7rem;resize:vertical;line-height:1.47}.muted{color:var(--text-secondary)}.tertiary{color:var(--text-tertiary)}.error-text{color:var(--danger);font-size:.9rem}.chip-row{display:flex;flex-wrap:wrap;gap:.5rem}.chip{min-height:var(--hit);padding:0 .95rem;border-radius:999px;border:1px solid var(--separator);background:var(--card);color:var(--text-secondary);font-weight:500;display:inline-flex;align-items:center;gap:.35rem}.chip[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--text)}.chip.result-worked[aria-pressed=true]{border-color:var(--ok);background:var(--ok-bg);color:var(--ok)}.chip.result-partial[aria-pressed=true]{border-color:var(--warn);background:var(--warn-bg);color:var(--warn)}.chip.result-failed[aria-pressed=true]{border-color:var(--danger);background:var(--danger-bg);color:var(--danger)}.chip.result-pending[aria-pressed=true]{border-color:var(--pending-border);background:var(--pending-bg);color:var(--accent)}.slider-wrap{display:grid;gap:.5rem}.slider-wrap input[type=range]{width:100%;accent-color:var(--accent)}.more-block{border-top:1px solid var(--separator);padding-top:1rem}.login-page{min-height:100dvh;display:grid;place-items:center;padding:var(--pad);padding-top:calc(var(--pad) + var(--safe-top));padding-bottom:calc(var(--pad) + var(--safe-bottom));background:var(--bg)}.login-card{width:min(22rem,100%);padding:1.5rem}.login-card h1{margin:0 0 .35rem;font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.toast-host{position:fixed;left:0;right:0;top:calc(.75rem + var(--safe-top));z-index:50;display:flex;justify-content:center;pointer-events:none;padding:0 var(--pad)}.toast{pointer-events:auto;max-width:24rem;width:100%;padding:.85rem 1rem;border-radius:16px;background:var(--card);border:1px solid var(--separator);box-shadow:var(--shadow);color:var(--text);font-weight:500}.toast.error{border-color:var(--danger);background:var(--danger-bg)}.pressable{touch-action:manipulation;-webkit-tap-highlight-color:transparent;transform-origin:center;cursor:pointer;transition:transform .12s ease}.pressable:active{transform:scale(.97)}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:var(--btn-h);padding:0 1.25rem;border-radius:999px;font-weight:600;transition:transform .12s ease,box-shadow .16s ease}.btn:disabled{opacity:.4;pointer-events:none}.btn-primary{background:var(--ink);color:#fbf9f5;box-shadow:var(--shadow-2)}.btn-secondary{background:var(--card);border:1px solid var(--separator);color:var(--text);box-shadow:var(--shadow-1)}.btn-destructive{background:var(--danger-bg);color:var(--danger);border:1px solid rgba(168,82,62,.25)}.btn-plain{color:var(--text-secondary);min-height:var(--hit);padding:0 .35rem;justify-content:flex-start;font-weight:500}.btn-large{min-height:var(--btn-h);width:100%;font-size:1.0625rem}.tab-bar{position:fixed;left:0;right:0;bottom:0;z-index:30;min-height:calc(var(--tab-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:#fbf9f5e6;backdrop-filter:saturate(1.4) blur(16px);-webkit-backdrop-filter:saturate(1.4) blur(16px);border-top:1px solid var(--separator)}.tab-bar-inner{display:grid;grid-template-columns:1fr 1fr 60px 1fr 1fr;align-items:stretch;min-height:var(--tab-h);padding:0 .35rem}.tab-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;min-height:var(--tab-h);color:var(--text-tertiary);font-size:11px;font-weight:500;letter-spacing:.01em}.tab-item.active{color:var(--accent-ink);font-weight:700}.tab-item.active svg{color:var(--accent)}.tab-fab-slot{width:var(--fab-size)}.tab-fab{position:absolute;left:50%;top:-12px;transform:translate(-50%);width:var(--fab-size);height:var(--fab-size);border-radius:999px;background:var(--ink);color:#fbf9f5;box-shadow:var(--shadow-3);border:4px solid var(--bg);display:grid;place-items:center}.home-greeting{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.greeting-title{margin:0;font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.1}.greeting-sub{margin:.35rem 0 0;color:var(--text-secondary);font-size:15px}.avatar-circle{width:48px;height:48px;border-radius:999px;background:var(--accent-tint);color:var(--accent-ink);display:grid;place-items:center;font-weight:700;font-size:14px;flex-shrink:0}.week-calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:.35rem}.week-cal-cell{display:grid;justify-items:center;gap:.25rem;padding:.55rem .2rem;border-radius:16px;background:var(--card);border:1px solid var(--separator);box-shadow:var(--shadow-1)}.week-cal-cell.filled{background:var(--accent-fill);border-color:var(--accent-tint)}.week-cal-cell.filled .week-cal-num{color:var(--accent-ink)}.week-cal-cell.today{background:var(--ink);border-color:var(--ink);box-shadow:var(--shadow-2);color:#fbf9f5}.week-cal-label{font-size:11px;font-weight:600;color:inherit;opacity:.7}.week-cal-cell.today .week-cal-label{opacity:.85}.week-cal-num{font-size:15px;font-weight:700}.week-cal-dot{width:6px;height:6px;border-radius:999px;background:transparent;border:1px solid var(--separator)}.week-cal-cell.filled .week-cal-dot,.week-cal-cell.today.filled .week-cal-dot,.week-cal-cell.today .week-cal-dot{background:var(--accent);border-color:var(--accent)}.pending-banner-card{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.75rem;min-height:100px;padding:.75rem 1rem;border-radius:var(--radius);background:var(--pending-bg);border:1.5px solid var(--pending-border);text-align:left;box-shadow:var(--shadow)}.pending-illu{width:88px;height:auto}.pending-copy{display:grid;gap:.15rem}.pending-copy strong{font-size:18px;font-weight:600}.pending-copy span{color:var(--text-secondary);font-size:14px}.hero-score-card{display:grid;grid-template-columns:1fr 38%;align-items:center;gap:.5rem;padding:18px;overflow:hidden;background:linear-gradient(135deg,var(--ink) 0%,#3a3833 100%);border-color:var(--ink);color:#fbf9f5;box-shadow:var(--shadow-3)}.hero-score-label{color:var(--accent-tint);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.hero-score-value{margin:.15rem 0;font-size:54px;font-weight:700;letter-spacing:-.03em;line-height:1}.hero-score-sub{margin:0;color:#fbf9f5b3;font-size:14px}.hero-illu{width:100%;height:auto;justify-self:end}.week-progress-card{display:grid;grid-template-columns:1fr auto;gap:.75rem;align-items:center;padding:16px 18px}.week-progress-row{display:flex;justify-content:space-between;gap:.75rem;margin-bottom:.45rem;color:var(--text-secondary);font-size:14px}.week-progress-row strong{color:var(--text);font-size:18px}.progress-track{height:8px;border-radius:999px;background:var(--surface-secondary);overflow:hidden;margin-top:.35rem}.progress-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),var(--accent-ink))}.scores-illu{width:72px;height:auto}.section-title{margin:0;font-size:20px;font-weight:600}.entry-list{display:grid;gap:.65rem}.entry-row{display:grid;grid-template-columns:auto 1fr;gap:.75rem;align-items:start;padding:16px;min-height:var(--hit);text-align:left;border-radius:var(--radius);background:var(--card);border:1px solid var(--separator);box-shadow:var(--shadow)}.entry-row.pending-row{background:var(--pending-bg);border-color:var(--pending-border)}.entry-row-main{display:grid;gap:.25rem;min-width:0}.entry-preview{color:var(--text);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.entry-row time{color:var(--text-tertiary);font-size:13px}.result-chip{display:inline-flex;align-items:center;gap:.25rem;padding:.3rem .55rem;border-radius:999px;font-size:12px;font-weight:600;text-transform:capitalize;white-space:nowrap}.result-chip.result-worked{background:var(--ok-bg);color:var(--ok)}.result-chip.result-partial{background:var(--warn-bg);color:var(--warn)}.result-chip.result-failed{background:var(--danger-bg);color:var(--danger)}.result-chip.result-pending{background:var(--pending-bg);color:var(--accent);border:1px solid var(--pending-border)}.quick-actions{display:flex;flex-wrap:wrap;gap:.5rem}.quick-chip{min-height:40px;padding:0 1rem;border-radius:999px;background:var(--surface-secondary);color:var(--text);font-weight:500;font-size:14px}.search-field{position:relative;display:block}.search-field svg{position:absolute;left:.9rem;top:50%;transform:translateY(-50%);color:var(--text-tertiary);pointer-events:none}.search-input{padding-left:2.4rem}.empty-state{padding:2rem 1.25rem;text-align:center;display:grid;gap:.75rem;justify-items:center}.detail-card,.form-card,.stats-card,.settings-card,.coach-result,.score-card{padding:16px 18px}.detail-snippet{margin:0;font-size:18px;font-weight:600;line-height:1.35}.meta-grid{display:grid;gap:.75rem}.section-head{display:flex;align-items:center;justify-content:space-between}.linkish{display:inline-flex;align-items:center;gap:.15rem;color:var(--accent);font-weight:600;font-size:14px;background:none;border:none;padding:0}.pending-focus{border:1.5px solid var(--pending-border);background:var(--pending-bg)}.resolve-snippet{padding:1rem}.resolve-activity{margin:0 0 .35rem;font-size:13px}.resolve-sticky{position:sticky;bottom:0;padding-top:.5rem;padding-bottom:.25rem;background:linear-gradient(transparent,var(--card) 28%)}.sheet-tall{max-height:85dvh!important}.gate-loading{min-height:100dvh;display:grid;place-items:center;color:var(--text-secondary);background:var(--bg)}.top-action{margin-left:auto;min-width:var(--hit);min-height:var(--hit);color:var(--accent);font-weight:600}.sheet-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100}.sheet-scrim{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background:#202020;opacity:0}.sheet-panel{position:absolute;left:0;right:0;bottom:0;max-height:min(82dvh,44rem);overflow:auto;padding-bottom:var(--safe-bottom);will-change:transform}.sheet-handle-zone{position:sticky;top:0;z-index:1;display:grid;justify-items:center;gap:.45rem;padding:.5rem var(--pad) .75rem;background:inherit;touch-action:none;-webkit-user-select:none;user-select:none}.sheet-handle{width:2.25rem;height:.3rem;border-radius:99px;background:var(--text-tertiary)}.sheet-handle-zone h2{margin:0;font-size:20px;font-weight:600}.sheet-content{padding:0 var(--pad) 1.25rem}.menu-list{display:grid}.menu-row{min-height:3.25rem;width:100%;text-align:left;border-bottom:1px solid var(--separator);color:var(--text)}.destructive-text{color:var(--danger)}.result-label{font-size:.75rem;font-weight:600;text-transform:capitalize}.result-worked{color:var(--ok)}.result-partial{color:var(--warn)}.result-failed{color:var(--danger)}.result-pending{color:var(--accent)}.detail-card p,.coach-text{margin:0;white-space:pre-wrap}.result-heading,.status-row,.score-card,.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.source-badge{padding:.2rem .55rem;border-radius:99px;font-size:.75rem;font-weight:700}.source-badge.rules{background:var(--warn-bg);color:var(--warn)}.source-badge.model{background:var(--accent-tint);color:var(--accent-ink)}.flags{color:var(--text-tertiary);font-size:.68rem;text-align:right}.pick-list{display:grid;overflow:hidden;border-radius:var(--radius);background:var(--surface-secondary)}.pick-row{display:flex;justify-content:space-between;gap:.75rem;min-height:3rem;padding:.65rem .85rem;text-align:left;border-bottom:1px solid var(--separator)}.pick-row span:last-child{white-space:nowrap;font-size:.75rem}.disclaimer{font-size:.8rem;text-align:center}.coach-input{min-height:9rem}.segment-row{display:flex;flex-wrap:wrap;gap:.4rem}.segment{min-width:var(--hit);min-height:var(--hit);padding:0 .75rem;border:1px solid var(--separator);border-radius:999px;color:var(--text-secondary);background:var(--card)}.segment[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--text);font-weight:600}.toggle-row{min-height:var(--hit)}.toggle-row input{width:1.4rem;height:1.4rem;accent-color:var(--accent)}.score-card>div{display:grid}.score-card strong,.score-readout{font-size:1.5rem;font-weight:700}.stats-card{display:grid;gap:.85rem}.outcome-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem}.outcome-grid div{display:grid;text-align:center;gap:.2rem}.outcome-grid strong,.large-number{font-size:1.5rem}.stat-row{display:grid;gap:.35rem}.stat-row>div:first-child{display:flex;justify-content:space-between;gap:.5rem}.bar-track{height:.35rem;border-radius:99px;background:var(--surface-secondary);overflow:hidden}.bar-track span{display:block;height:100%;border-radius:inherit;background:var(--accent)}.install-steps{margin:0;padding-left:1.4rem;display:grid;gap:.5rem}.daily-header{justify-content:space-between;align-items:center}.daily-date{font-size:13px;color:var(--text-secondary)}.daily-points{font-size:1.35rem;font-weight:700;color:var(--accent-ink)}.tip-card{position:relative;display:flex;align-items:flex-start;gap:.5rem;padding:12px 44px 12px 16px;border-radius:var(--radius);background:var(--accent-fill);border:1px solid var(--accent-tint);font-size:14px;color:var(--text-secondary)}.tip-card p{margin:0;color:var(--text)}.indoors-nudge{flex-direction:column;align-items:flex-start;padding-right:16px;gap:.35rem;background:var(--accent-fill);color:var(--text)}.warning-chip{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;padding:.2rem .5rem;border-radius:6px;background:var(--accent-tint);color:var(--accent-ink)}.tip-dismiss{position:absolute;top:6px;right:6px;display:grid;place-items:center;width:32px;height:32px;border-radius:999px;color:var(--text-secondary)}.choice-list{display:grid;gap:.5rem}.choice-item{min-height:var(--hit);padding:.7rem 1rem;text-align:left;border:1px solid var(--separator);border-radius:14px;background:var(--card);color:var(--text-secondary);font-size:15px}.choice-item[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--text);font-weight:600}.stepper-row{display:flex;align-items:center;gap:1rem}.stepper-btn{width:48px;height:48px;border-radius:999px;border:1px solid var(--separator);background:var(--card);font-size:1.4rem;line-height:1}.stepper-btn[disabled]{opacity:.4}.stepper-value{min-width:2.5rem;text-align:center;font-size:1.6rem;font-weight:700}.points-breakdown{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.points-breakdown li{display:flex;justify-content:space-between;gap:.75rem;font-size:14px}.points-breakdown li.missed{color:var(--text-tertiary)}.points-breakdown .points-pts{font-weight:700}.points-breakdown li.earned .points-pts{color:var(--ok)}.how-points{padding:14px 18px;font-size:14px;color:var(--text-secondary)}.how-points summary{cursor:pointer;font-weight:600;color:var(--text);min-height:var(--hit);display:flex;align-items:center}.how-points ul{margin:.5rem 0 0;padding-left:1.2rem;display:grid;gap:.4rem}.daily-sticky{position:sticky;bottom:0;padding:.5rem 0 .25rem;background:linear-gradient(to top,var(--bg) 70%,transparent)}.plan-header{flex-wrap:wrap;gap:.5rem}.plan-day-nav{display:flex;align-items:center;gap:.35rem}.icon-btn{width:44px;height:44px;display:grid;place-items:center;border-radius:999px;color:var(--text)}.chip-btn{min-height:36px;padding:0 .85rem;border-radius:999px;background:var(--accent-soft);color:var(--text);font-weight:600;font-size:13px}.plan-meta-row{display:flex;justify-content:space-between;gap:.75rem}.caption{font-size:13px;color:var(--text-secondary)}.plan-actions{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}.timeline-card{padding:12px 8px 12px 0;overflow:hidden}.timeline{position:relative;display:grid;grid-template-columns:56px 1fr}.timeline-gutter{position:relative}.timeline-hour-label{position:absolute;right:8px;transform:translateY(-50%);font-size:11px;color:var(--text-tertiary)}.timeline-canvas{position:relative;border-left:1px solid var(--separator)}.timeline-hour-line{position:absolute;left:0;right:0;height:1px;background:var(--separator)}.timeline-now{position:absolute;left:0;right:0;height:2px;background:var(--accent);z-index:3}.timeline-now-dot{position:absolute;left:-5px;top:-4px;width:10px;height:10px;border-radius:999px;background:var(--accent)}.timeline-block{position:absolute;left:8px;right:8px;z-index:2;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:.1rem;padding:6px 10px;border-radius:12px;border:1px solid transparent;text-align:left;overflow:hidden}.timeline-block strong{font-size:13px;font-weight:600}.timeline-block span{font-size:11px;opacity:.85}.timeline-block.duty{background:var(--accent-fill);color:var(--accent-ink);border-color:var(--accent-tint)}.timeline-block.explore{background:var(--ok-bg);color:var(--ok);border-color:#4f7a5c33}.timeline-block.restore{background:var(--danger-bg);color:var(--danger);border-color:#a8523e33}.timeline-block.stabilize{background:var(--warn-bg);color:var(--warn);border-color:#b07e2f33}.timeline-block.flex{background:var(--surface-secondary);color:var(--text);border-color:var(--separator)}.timeline-block.p0{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.timeline-block.done{opacity:.55}.timeline-block.skipped{opacity:.4;text-decoration:line-through}.plan-time-row{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.btn-secondary{min-height:var(--btn-h);width:100%;border-radius:999px;background:var(--card);border:1px solid var(--separator);color:var(--text);font-weight:600}.meta-line{margin:0;color:var(--text-secondary);font-size:14px}.empty-card{text-align:center}@keyframes card-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.home-page,.surface-card,.entry-row,.pending-banner-card{animation:none!important;transition:opacity .2s ease}.toast{transition:opacity .2s ease}}@media(prefers-reduced-transparency:reduce){.sheet-scrim{background:#202020cc}}@media(prefers-contrast:more){.tab-bar,.pending-banner-card,.segment,.entry-row{border-color:#20202059}}
static/index.html CHANGED
@@ -20,8 +20,8 @@
20
  <link rel="manifest" href="/manifest.webmanifest" />
21
  <link rel="apple-touch-icon" href="/icons/icon-192.png" />
22
  <title>Habit Journal</title>
23
- <script type="module" crossorigin src="/assets/index-DYDM6L-p.js"></script>
24
- <link rel="stylesheet" crossorigin href="/assets/index-CK7MU-TQ.css">
25
  </head>
26
  <body>
27
  <div id="app"></div>
 
20
  <link rel="manifest" href="/manifest.webmanifest" />
21
  <link rel="apple-touch-icon" href="/icons/icon-192.png" />
22
  <title>Habit Journal</title>
23
+ <script type="module" crossorigin src="/assets/index-DGsuIBXN.js"></script>
24
+ <link rel="stylesheet" crossorigin href="/assets/index-Dfdx14RO.css">
25
  </head>
26
  <body>
27
  <div id="app"></div>
static/sw.js CHANGED
@@ -1,6 +1,6 @@
1
 
2
  const CACHE = "habit-journal-v3";
3
- const SHELL = ["/","/index.html","/manifest.webmanifest","/icons/icon-192.png","/icons/icon-512.png","/illustrations/hero-home.svg","/illustrations/pending.svg","/illustrations/scores.svg","/illustrations/coach.svg","/illustrations/empty.svg","/assets/index-CK7MU-TQ.css","/assets/index-DYDM6L-p.js","/assets/index-DYDM6L-p.js.map"];
4
  self.addEventListener("install", event => event.waitUntil(caches.open(CACHE).then(cache => cache.addAll(SHELL)).then(() => self.skipWaiting())));
5
  self.addEventListener("activate", event => event.waitUntil(caches.keys().then(keys => Promise.all(keys.filter(key => key !== CACHE).map(key => caches.delete(key)))).then(() => self.clients.claim())));
6
  self.addEventListener("fetch", event => {
 
1
 
2
  const CACHE = "habit-journal-v3";
3
+ const SHELL = ["/","/index.html","/manifest.webmanifest","/icons/icon-192.png","/icons/icon-512.png","/illustrations/hero-home.svg","/illustrations/pending.svg","/illustrations/scores.svg","/illustrations/coach.svg","/illustrations/empty.svg","/assets/index-Dfdx14RO.css","/assets/index-DGsuIBXN.js","/assets/index-DGsuIBXN.js.map"];
4
  self.addEventListener("install", event => event.waitUntil(caches.open(CACHE).then(cache => cache.addAll(SHELL)).then(() => self.skipWaiting())));
5
  self.addEventListener("activate", event => event.waitUntil(caches.keys().then(keys => Promise.all(keys.filter(key => key !== CACHE).map(key => caches.delete(key)))).then(() => self.clients.claim())));
6
  self.addEventListener("fetch", event => {