dreamcontext 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +201 -21
  2. package/NOTICE +7 -0
  3. package/README.md +77 -12
  4. package/agents/sleep-product.md +29 -8
  5. package/agents/sleep-tasks.md +44 -9
  6. package/dist/agents/sleep-product.md +29 -8
  7. package/dist/agents/sleep-tasks.md +44 -9
  8. package/dist/dashboard/assets/{BrainCanvas3D-1HMiA14F.js → BrainCanvas3D-LLqVeXtb.js} +1 -1
  9. package/dist/dashboard/assets/{_baseUniq-C7pfRmXz.js → _baseUniq-DW0uA0ty.js} +1 -1
  10. package/dist/dashboard/assets/{arc-B5x_GF9Q.js → arc-fVUGtlbL.js} +1 -1
  11. package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-CWmjaqno.js → architectureDiagram-Q4EWVU46-Dz2PKBsS.js} +1 -1
  12. package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-B7SyUIdV.js → blockDiagram-DXYQGD6D-ByWKxzhL.js} +1 -1
  13. package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-OeJBWXHU.js → c4Diagram-AHTNJAMY-dpHsVM3D.js} +1 -1
  14. package/dist/dashboard/assets/channel-zrLwggBX.js +1 -0
  15. package/dist/dashboard/assets/{chunk-4BX2VUAB-2Oop1B0M.js → chunk-4BX2VUAB-HEXb6Yg5.js} +1 -1
  16. package/dist/dashboard/assets/{chunk-4TB4RGXK-Bh7qSu_X.js → chunk-4TB4RGXK-DeVy5g6H.js} +1 -1
  17. package/dist/dashboard/assets/{chunk-55IACEB6-gNeHRO_i.js → chunk-55IACEB6-DGy3ZgDZ.js} +1 -1
  18. package/dist/dashboard/assets/{chunk-EDXVE4YY-BRniAH53.js → chunk-EDXVE4YY-CYJehjz4.js} +1 -1
  19. package/dist/dashboard/assets/{chunk-FMBD7UC4-B5r8U2gJ.js → chunk-FMBD7UC4-DKTOmvgZ.js} +1 -1
  20. package/dist/dashboard/assets/{chunk-OYMX7WX6-Dd1c17fm.js → chunk-OYMX7WX6-mmtWyiDA.js} +1 -1
  21. package/dist/dashboard/assets/{chunk-QZHKN3VN-BIw-OdTn.js → chunk-QZHKN3VN-DSdV0iwY.js} +1 -1
  22. package/dist/dashboard/assets/{chunk-YZCP3GAM-Dl9MlwCW.js → chunk-YZCP3GAM-DbY-KoDn.js} +1 -1
  23. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-BvejNiwH.js +1 -0
  24. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-BvejNiwH.js +1 -0
  25. package/dist/dashboard/assets/clone-BFVdml6g.js +1 -0
  26. package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-DlrROH5K.js → cose-bilkent-S5V4N54A-p0t1DY88.js} +1 -1
  27. package/dist/dashboard/assets/{dagre-KV5264BT-B0GpPXKL.js → dagre-KV5264BT-DYE0WzHM.js} +1 -1
  28. package/dist/dashboard/assets/{diagram-5BDNPKRD-BBYcDW2Z.js → diagram-5BDNPKRD-D9EiQCOP.js} +1 -1
  29. package/dist/dashboard/assets/{diagram-G4DWMVQ6-BxHxugdp.js → diagram-G4DWMVQ6-poDXSAfu.js} +1 -1
  30. package/dist/dashboard/assets/{diagram-MMDJMWI5-C9Jc19Wo.js → diagram-MMDJMWI5-CHZ7wgN1.js} +1 -1
  31. package/dist/dashboard/assets/{diagram-TYMM5635-Vmo5GAAU.js → diagram-TYMM5635-DVk6fYG7.js} +1 -1
  32. package/dist/dashboard/assets/{erDiagram-SMLLAGMA-pskr9x-V.js → erDiagram-SMLLAGMA-D2sqkGin.js} +1 -1
  33. package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-B1D7Ky0W.js → flowDiagram-DWJPFMVM-DrMlKBYA.js} +1 -1
  34. package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-BVJZZV1M.js → ganttDiagram-T4ZO3ILL-Cf4FbEFp.js} +1 -1
  35. package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-BiOGN6We.js → gitGraphDiagram-UUTBAWPF-BsbOq1C9.js} +1 -1
  36. package/dist/dashboard/assets/{graph-D58deEXr.js → graph-CUxxgCtS.js} +1 -1
  37. package/dist/dashboard/assets/index-CqSkXBSu.css +1 -0
  38. package/dist/dashboard/assets/index-flRpQtDj.js +476 -0
  39. package/dist/dashboard/assets/{infoDiagram-42DDH7IO-DgJYg1X1.js → infoDiagram-42DDH7IO-DTkMnZiD.js} +1 -1
  40. package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-arJgr-8P.js → ishikawaDiagram-UXIWVN3A-CahQ348K.js} +1 -1
  41. package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-B3DCvb8p.js → journeyDiagram-VCZTEJTY-BDY2Nslc.js} +1 -1
  42. package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-B--dN6Ma.js → kanban-definition-6JOO6SKY-CgrwoTjI.js} +1 -1
  43. package/dist/dashboard/assets/{layout-z2qEbZWC.js → layout-IaUxkFkm.js} +1 -1
  44. package/dist/dashboard/assets/{linear-BQu1dwrM.js → linear-shc0iNFn.js} +1 -1
  45. package/dist/dashboard/assets/{min-DkF5b2sh.js → min-BIL7YgTN.js} +1 -1
  46. package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-Bw04koyq.js → mindmap-definition-QFDTVHPH-GmO0JRtA.js} +1 -1
  47. package/dist/dashboard/assets/{pieDiagram-DEJITSTG-vNqz64o8.js → pieDiagram-DEJITSTG-Bfm_toYA.js} +1 -1
  48. package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-TuVP5Gi6.js → quadrantDiagram-34T5L4WZ-DIjTM3lm.js} +1 -1
  49. package/dist/dashboard/assets/{requirementDiagram-MS252O5E-D3mS8_ke.js → requirementDiagram-MS252O5E-B9AEoGYh.js} +1 -1
  50. package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-BmVRers6.js → sankeyDiagram-XADWPNL6-C_O5XLXm.js} +1 -1
  51. package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-CTYCgk5P.js → sequenceDiagram-FGHM5R23-CHSxSvmJ.js} +1 -1
  52. package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-DNbP2aCg.js → stateDiagram-FHFEXIEX-B0URrhHw.js} +1 -1
  53. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-FdAb9MBo.js +1 -0
  54. package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-DKHJd4z8.js → timeline-definition-GMOUNBTQ-CycU2gVC.js} +1 -1
  55. package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-ChotNMNq.js → vennDiagram-DHZGUBPP-DcU2536G.js} +1 -1
  56. package/dist/dashboard/assets/{wardley-RL74JXVD-Dmo2_ksP.js → wardley-RL74JXVD-BWqqaX3S.js} +1 -1
  57. package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-Z6Wbiv2H.js → wardleyDiagram-NUSXRM2D-CUnIHJgd.js} +1 -1
  58. package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-BJa0AHtN.js → xychartDiagram-5P7HB3ND-b9fcOYTj.js} +1 -1
  59. package/dist/dashboard/index.html +2 -2
  60. package/dist/dashboard/media/README.md +29 -0
  61. package/dist/dashboard/media/brain-hero.png +0 -0
  62. package/dist/dashboard/media/brain.mp4 +0 -0
  63. package/dist/dashboard/media/brain.webm +0 -0
  64. package/dist/dashboard/media/shot-disabled.png +0 -0
  65. package/dist/dashboard/media/shot-enabled.png +0 -0
  66. package/dist/index.js +2280 -1568
  67. package/dist/skill-packs/catalog.json +44 -0
  68. package/dist/skill-packs/excalidraw/SKILL.md +123 -0
  69. package/dist/skill-packs/excalidraw/examples/hello.spec.json +14 -0
  70. package/dist/skill-packs/excalidraw/examples/sample.png +0 -0
  71. package/dist/skill-packs/excalidraw/examples/style_board.js +31 -0
  72. package/dist/skill-packs/excalidraw/package.json +5 -0
  73. package/dist/skill-packs/excalidraw/reference/format.md +93 -0
  74. package/dist/skill-packs/excalidraw/scripts/build_excalidraw.js +357 -0
  75. package/dist/skill-packs/excalidraw/scripts/lib/fractional-indexing.LICENSE +121 -0
  76. package/dist/skill-packs/excalidraw/scripts/lib/fractional-indexing.js +311 -0
  77. package/dist/skill-packs/excalidraw/scripts/lib/imagesize.js +65 -0
  78. package/dist/skill-packs/excalidraw/scripts/lib/style.js +130 -0
  79. package/dist/skill-packs/video-watching/SKILL.md +151 -0
  80. package/dist/skill-packs/video-watching/scripts/build_frame_index.py +95 -0
  81. package/dist/skill-packs/video-watching/scripts/gap_fill.py +45 -0
  82. package/dist/skill-packs/video-watching/scripts/transcribe.sh +136 -0
  83. package/package.json +4 -2
  84. package/skill/SKILL.md +5 -0
  85. package/skill-packs/catalog.json +44 -0
  86. package/skill-packs/excalidraw/SKILL.md +123 -0
  87. package/skill-packs/excalidraw/examples/hello.spec.json +14 -0
  88. package/skill-packs/excalidraw/examples/sample.png +0 -0
  89. package/skill-packs/excalidraw/examples/style_board.js +31 -0
  90. package/skill-packs/excalidraw/package.json +5 -0
  91. package/skill-packs/excalidraw/reference/format.md +93 -0
  92. package/skill-packs/excalidraw/scripts/build_excalidraw.js +357 -0
  93. package/skill-packs/excalidraw/scripts/lib/fractional-indexing.LICENSE +121 -0
  94. package/skill-packs/excalidraw/scripts/lib/fractional-indexing.js +311 -0
  95. package/skill-packs/excalidraw/scripts/lib/imagesize.js +65 -0
  96. package/skill-packs/excalidraw/scripts/lib/style.js +130 -0
  97. package/skill-packs/video-watching/SKILL.md +151 -0
  98. package/skill-packs/video-watching/scripts/build_frame_index.py +95 -0
  99. package/skill-packs/video-watching/scripts/gap_fill.py +45 -0
  100. package/skill-packs/video-watching/scripts/transcribe.sh +136 -0
  101. package/dist/dashboard/assets/channel-CbuTKKsM.js +0 -1
  102. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-HXl3A_sM.js +0 -1
  103. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-HXl3A_sM.js +0 -1
  104. package/dist/dashboard/assets/clone-NKHOtdi8.js +0 -1
  105. package/dist/dashboard/assets/index-DK_2-eWY.css +0 -1
  106. package/dist/dashboard/assets/index-Ds-JXWtr.js +0 -476
  107. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-CfN6kjo8.js +0 -1
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env python3
2
+ """Build frames.json: map each extracted frame to its pts_time on the video timeline.
3
+
4
+ Reads the per-frame pts_time dumps (scene_times.txt from ffmpeg metadata, gap_times.txt
5
+ written by transcribe.sh) alongside the frames, pairs each timestamp with its
6
+ zero-padded frame file in selection order, adds the first/last anchor frames, drops
7
+ near-duplicate timestamps, and emits frames.json sorted by time.
8
+
9
+ Stdlib only — no venv needed.
10
+ Usage: build_frame_index.py <OUT_DIR> [DURATION_SEC]
11
+ Env: DEDUPE_SEC=0.4 collapse non-anchor frames closer than this to the kept one.
12
+ """
13
+ import json
14
+ import os
15
+ import re
16
+ import sys
17
+ from pathlib import Path
18
+
19
+ # metadata=print header line, e.g.: "frame:0 pts:321024 pts_time:12.852500"
20
+ FRAME_RE = re.compile(r"frame:(\d+)\b.*?pts_time:([\d.]+)", re.DOTALL)
21
+ DEDUPE_SEC = float(os.environ.get("DEDUPE_SEC", "0.4"))
22
+
23
+
24
+ def parse_times(meta_file: Path) -> dict[int, float]:
25
+ """frame index (0-based, as ffmpeg numbers kept frames) -> pts_time seconds."""
26
+ if not meta_file.exists():
27
+ return {}
28
+ text = meta_file.read_text(errors="replace")
29
+ return {int(n): round(float(t), 2) for n, t in FRAME_RE.findall(text)}
30
+
31
+
32
+ def collect(out_dir: Path, prefix: str, meta_name: str, kind: str) -> list[dict]:
33
+ times = parse_times(out_dir / "frames" / meta_name)
34
+ frames = sorted((out_dir / "frames").glob(f"{prefix}_*.jpg"))
35
+ # transcribe.sh names files 1-based (%04d starts at 0001); metadata frame: is 0-based.
36
+ return [{"file": f"frames/{f.name}", "t": times.get(i), "type": kind}
37
+ for i, f in enumerate(frames)]
38
+
39
+
40
+ def anchors(out_dir: Path, duration: float) -> list[dict]:
41
+ rows = []
42
+ if (out_dir / "frames" / "anchor_first.jpg").exists():
43
+ rows.append({"file": "frames/anchor_first.jpg", "t": 0.0, "type": "anchor"})
44
+ if (out_dir / "frames" / "anchor_last.jpg").exists():
45
+ t = round(duration, 2) if duration > 0 else None
46
+ rows.append({"file": "frames/anchor_last.jpg", "t": t, "type": "anchor"})
47
+ return rows
48
+
49
+
50
+ def fmt(t):
51
+ if t is None:
52
+ return "??:??"
53
+ m, s = divmod(int(t), 60)
54
+ return f"{m:02d}:{s:02d}"
55
+
56
+
57
+ def dedupe(rows: list[dict]) -> list[dict]:
58
+ """Keep all anchors; drop a non-anchor frame within DEDUPE_SEC of the last kept."""
59
+ kept: list[dict] = []
60
+ last_t = None
61
+ for r in rows:
62
+ is_anchor = r["type"] == "anchor"
63
+ if (not is_anchor and last_t is not None and r["t"] is not None
64
+ and abs(r["t"] - last_t) < DEDUPE_SEC):
65
+ continue
66
+ kept.append(r)
67
+ if r["t"] is not None:
68
+ last_t = r["t"]
69
+ return kept
70
+
71
+
72
+ def main() -> int:
73
+ if len(sys.argv) < 2:
74
+ print("usage: build_frame_index.py <OUT_DIR> [DURATION_SEC]", file=sys.stderr)
75
+ return 2
76
+ out_dir = Path(sys.argv[1])
77
+ duration = float(sys.argv[2]) if len(sys.argv) > 2 else 0.0
78
+
79
+ rows = collect(out_dir, "scene", "scene_times.txt", "scene")
80
+ rows += collect(out_dir, "gap", "gap_times.txt", "gap")
81
+ rows += anchors(out_dir, duration)
82
+ # Sort by time; unknown timestamps sink to the end.
83
+ rows.sort(key=lambda r: (r["t"] is None, r["t"] or 0.0))
84
+ rows = dedupe(rows)
85
+ for r in rows:
86
+ r["at"] = fmt(r["t"])
87
+
88
+ (out_dir / "frames.json").write_text(json.dumps(rows, ensure_ascii=False, indent=2))
89
+ n_anchor = sum(r["type"] == "anchor" for r in rows)
90
+ print(f" frames.json: {len(rows)} frames indexed ({n_anchor} anchors, dedupe<{DEDUPE_SEC}s)")
91
+ return 0
92
+
93
+
94
+ if __name__ == "__main__":
95
+ raise SystemExit(main())
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env python3
2
+ """Print timestamps that keep every unsampled stretch of the video <= MAX_GAP.
3
+
4
+ Scene-detect fires on motion, not on meaning — so static-but-information-rich
5
+ sections (app demos, slides, talking heads) get no frame. This reads the scene
6
+ timestamps, bounds them with 0 and the video duration, and for any gap larger than
7
+ MAX_GAP emits evenly-spaced fill timestamps so no stretch goes unsampled.
8
+
9
+ Stdlib only. Usage: gap_fill.py <OUT_DIR> <DURATION_SEC> [MAX_GAP_SEC]
10
+ Prints one timestamp (seconds, 2dp) per line — transcribe.sh grabs each frame.
11
+ """
12
+ import re
13
+ import sys
14
+ from pathlib import Path
15
+
16
+ FRAME_RE = re.compile(r"frame:(\d+)\b.*?pts_time:([\d.]+)", re.DOTALL)
17
+
18
+
19
+ def main() -> int:
20
+ if len(sys.argv) < 3:
21
+ print("usage: gap_fill.py <OUT_DIR> <DURATION_SEC> [MAX_GAP_SEC]", file=sys.stderr)
22
+ return 2
23
+ out_dir = Path(sys.argv[1])
24
+ duration = float(sys.argv[2])
25
+ max_gap = float(sys.argv[3]) if len(sys.argv) > 3 else 10.0
26
+ if duration <= 0 or max_gap <= 0:
27
+ return 0
28
+
29
+ meta = out_dir / "frames" / "scene_times.txt"
30
+ scene_times = []
31
+ if meta.exists():
32
+ scene_times = [round(float(t), 2)
33
+ for _, t in FRAME_RE.findall(meta.read_text(errors="replace"))]
34
+
35
+ bounds = sorted(set([0.0] + scene_times + [round(duration, 2)]))
36
+ for a, b in zip(bounds, bounds[1:]):
37
+ gap = b - a
38
+ n = int(gap // max_gap) # inserts that split the gap into <= max_gap pieces
39
+ for k in range(1, n + 1):
40
+ print(f"{a + gap * k / (n + 1):.2f}")
41
+ return 0
42
+
43
+
44
+ if __name__ == "__main__":
45
+ raise SystemExit(main())
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env bash
2
+ # Video -> time-mapped transcript + significant frames (with per-frame timestamps).
3
+ # whisper.cpp (large-v3-turbo by default) for the transcript, ffmpeg for frames.
4
+ #
5
+ # This is the MECHANICAL step. It produces artifacts; it does NOT understand the
6
+ # video. Claude reads the outputs (transcript + frames.json), decides which frames
7
+ # matter, views them, and writes the curated <video>.transcript.md (see SKILL.md).
8
+ #
9
+ # Usage: ./transcribe.sh "/abs/path/to/video.mov" [lang]
10
+ # lang: whisper language code. DEFAULT 'auto' — whisper detects it, no need to pass.
11
+ # Force only if auto mislabels a short/ambiguous clip (e.g. 'tr', 'en').
12
+ #
13
+ # Env overrides:
14
+ # WHISPER_MODEL=/abs/path/ggml-*.bin force a specific model
15
+ # OUT_DIR=/abs/path where artifacts go (default: <video_dir>/<slug>.media)
16
+ # SCENE_THRESHOLD=0.15 ffmpeg scene-change sensitivity (lower = more frames)
17
+ # MAX_GAP=10 guarantee a frame at least every N seconds (fills static sections)
18
+ #
19
+ # Outputs (in OUT_DIR):
20
+ # transcript.srt timestamped segments (human-friendly)
21
+ # transcript.json/.txt/.vtt
22
+ # frames/scene_*.jpg frames at scene-change > SCENE_THRESHOLD
23
+ # frames/gap_*.jpg fill frames where scene-detect left a stretch > MAX_GAP unsampled
24
+ # frames/anchor_first.jpg / anchor_last.jpg always-captured first + last frame
25
+ # frames.json [{file, t, at, type}] — each frame's pts_time, sorted (Claude reads this)
26
+ # source-meta.txt ffprobe dump (audio.wav is created then deleted after transcription)
27
+ set -euo pipefail
28
+
29
+ VIDEO="${1:?Usage: transcribe.sh <video> [lang]}"
30
+ LANG_CODE="${2:-auto}" # whisper auto-detects the spoken language unless overridden
31
+ SCENE_THRESHOLD="${SCENE_THRESHOLD:-0.15}"
32
+ MAX_GAP="${MAX_GAP:-10}"
33
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
34
+
35
+ # --- remote link? download with yt-dlp (local files skip this) ------------------
36
+ if [[ "$VIDEO" =~ ^https?:// ]]; then
37
+ command -v yt-dlp >/dev/null || { echo "remote link needs yt-dlp: brew install yt-dlp" >&2; exit 1; }
38
+ DL_DIR="${OUT_DIR:-$PWD}/_download"; mkdir -p "$DL_DIR"
39
+ echo "==> downloading remote video with yt-dlp"
40
+ yt-dlp -o "$DL_DIR/%(title)s.%(ext)s" "$VIDEO"
41
+ VIDEO="$(ls -t "$DL_DIR"/* | head -1)"
42
+ echo "==> downloaded: $VIDEO"
43
+ fi
44
+ [ -f "$VIDEO" ] || { echo "video not found: $VIDEO" >&2; exit 1; }
45
+
46
+ # --- model: prefer turbo, then large-v3, then medium (override with WHISPER_MODEL)
47
+ pick_model() {
48
+ if [ -n "${WHISPER_MODEL:-}" ]; then printf '%s' "$WHISPER_MODEL"; return; fi
49
+ local p
50
+ for p in \
51
+ "$HOME/.cache/whisper.cpp/models/ggml-large-v3-turbo.bin" \
52
+ "$HOME/.cache/openwhispr/whisper-models/ggml-large-v3-turbo.bin" \
53
+ "$HOME/.cache/whisper.cpp/models/ggml-large-v3.bin" \
54
+ "$HOME/.cache/whisper.cpp/models/ggml-medium.bin" \
55
+ "$HOME/.cache/openwhispr/whisper-models/ggml-medium.bin"; do
56
+ [ -f "$p" ] && { printf '%s' "$p"; return; }
57
+ done
58
+ printf ''
59
+ }
60
+ MODEL="$(pick_model)"
61
+ [ -n "$MODEL" ] && [ -f "$MODEL" ] || {
62
+ echo "no whisper model found. Install one, e.g.:" >&2
63
+ echo " curl -L -o ~/.cache/whisper.cpp/models/ggml-large-v3-turbo.bin \\" >&2
64
+ echo " https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin" >&2
65
+ echo " or set WHISPER_MODEL=/abs/path/ggml-*.bin" >&2
66
+ exit 1
67
+ }
68
+
69
+ WHISPER_BIN="$(command -v whisper-cli || command -v whisper-cpp || command -v main || true)"
70
+ [ -n "$WHISPER_BIN" ] || { echo "whisper.cpp binary not found (brew install whisper-cpp)" >&2; exit 1; }
71
+ command -v ffmpeg >/dev/null || { echo "ffmpeg not found (brew install ffmpeg)" >&2; exit 1; }
72
+
73
+ # --- where artifacts go: next to the video by default ---------------------------
74
+ SRC_DIR="$(cd "$(dirname "$VIDEO")" && pwd)"
75
+ SLUG="$(basename "$VIDEO")"; SLUG="${SLUG%.*}"
76
+ SLUG="$(echo "$SLUG" | tr ' ' '-' | tr -cd '[:alnum:]._-' | sed 's/--*/-/g; s/^-//; s/-$//')"
77
+ OUT="${OUT_DIR:-$SRC_DIR/$SLUG.media}"
78
+ mkdir -p "$OUT/frames"
79
+ # even-dim scaling keeps the mjpeg encoder happy on odd-width sources
80
+ SCALE="scale=trunc(iw/2)*2:trunc(ih/2)*2"
81
+
82
+ echo "==> [$SLUG] probing"
83
+ ffprobe -v error -show_entries format=duration,size:stream=codec_type,codec_name,width,height \
84
+ -of default=noprint_wrappers=1 "$VIDEO" | tee "$OUT/source-meta.txt"
85
+ DURATION="$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$VIDEO" 2>/dev/null | head -1)"
86
+ DURATION="${DURATION:-0}"
87
+
88
+ echo "==> [$SLUG] extracting 16kHz mono audio"
89
+ ffmpeg -y -loglevel error -i "$VIDEO" -ar 16000 -ac 1 -c:a pcm_s16le "$OUT/audio.wav"
90
+
91
+ echo "==> [$SLUG] transcribing with $(basename "$MODEL") (lang=$LANG_CODE)"
92
+ "$WHISPER_BIN" -m "$MODEL" -f "$OUT/audio.wav" -l "$LANG_CODE" \
93
+ --output-txt --output-srt --output-vtt --output-json -of "$OUT/transcript" -pp
94
+ # audio.wav is a pure whisper intermediate (~1.9MB/min) — drop it once the transcript exists.
95
+ rm -f "$OUT/audio.wav"
96
+
97
+ echo "==> [$SLUG] extracting scene-change frames (scene > $SCENE_THRESHOLD)"
98
+ # pix_fmt yuvj420p avoids mjpeg "non full-range YUV" failures on screen recordings;
99
+ # even-dim scaling keeps the encoder happy on odd-width sources.
100
+ # metadata=print dumps each kept frame's pts_time so frames map back to the timeline.
101
+ ffmpeg -y -loglevel error -i "$VIDEO" \
102
+ -vf "select='gt(scene,$SCENE_THRESHOLD)',metadata=print:file=$OUT/frames/scene_times.txt,scale=trunc(iw/2)*2:trunc(ih/2)*2" \
103
+ -fps_mode vfr -pix_fmt yuvj420p -q:v 3 "$OUT/frames/scene_%04d.jpg" || true
104
+
105
+ echo "==> [$SLUG] capturing first + last anchor frames"
106
+ # Short, cut-heavy creatives carry the most information in the opening hook and the
107
+ # closing CTA — but scene-detect rarely fires at t=0 or t=end. Always grab both.
108
+ ffmpeg -y -loglevel error -i "$VIDEO" -vf "$SCALE" -frames:v 1 -q:v 3 \
109
+ "$OUT/frames/anchor_first.jpg" || true
110
+ ffmpeg -y -loglevel error -sseof -0.5 -i "$VIDEO" -vf "$SCALE" -update 1 -frames:v 1 -q:v 3 \
111
+ "$OUT/frames/anchor_last.jpg" || true
112
+
113
+ echo "==> [$SLUG] filling gaps > ${MAX_GAP}s (static sections scene-detect misses)"
114
+ # scene-detect fires on motion, not meaning; a static-but-information-rich stretch
115
+ # (app demo, slide, talking head) gets no frame. gap_fill.py returns timestamps that
116
+ # keep every unsampled stretch <= MAX_GAP; we grab each and log its known pts_time.
117
+ : > "$OUT/frames/gap_times.txt"
118
+ gi=0
119
+ while IFS= read -r t; do
120
+ [ -z "$t" ] && continue
121
+ printf -v fn "gap_%04d.jpg" "$((gi + 1))"
122
+ if ffmpeg -y -loglevel error -ss "$t" -i "$VIDEO" -vf "$SCALE" -frames:v 1 -q:v 3 "$OUT/frames/$fn"; then
123
+ echo "frame:$gi pts_time:$t" >> "$OUT/frames/gap_times.txt"
124
+ gi=$((gi + 1))
125
+ fi
126
+ done < <(python3 "$SCRIPT_DIR/gap_fill.py" "$OUT" "$DURATION" "$MAX_GAP")
127
+ echo " gap frames added: $gi"
128
+
129
+ echo "==> [$SLUG] building frames.json (timestamp index, dedup near-dups)"
130
+ python3 "$SCRIPT_DIR/build_frame_index.py" "$OUT" "$DURATION"
131
+
132
+ NFRAMES="$(ls -1 "$OUT/frames"/*.jpg 2>/dev/null | wc -l | tr -d ' ')"
133
+ echo "==> [$SLUG] DONE"
134
+ echo " transcript: $OUT/transcript.srt"
135
+ echo " frames: $NFRAMES (index: $OUT/frames.json)"
136
+ echo " next: Claude reads transcript + frames.json, views key frames, writes the curated transcript.md"
@@ -1 +0,0 @@
1
- import{aq as o,ar as n}from"./index-Ds-JXWtr.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-Bh7qSu_X.js";import{_ as i}from"./index-Ds-JXWtr.js";import"./chunk-FMBD7UC4-B5r8U2gJ.js";import"./chunk-YZCP3GAM-Dl9MlwCW.js";import"./chunk-55IACEB6-gNeHRO_i.js";import"./chunk-EDXVE4YY-BRniAH53.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-Bh7qSu_X.js";import{_ as i}from"./index-Ds-JXWtr.js";import"./chunk-FMBD7UC4-B5r8U2gJ.js";import"./chunk-YZCP3GAM-Dl9MlwCW.js";import"./chunk-55IACEB6-gNeHRO_i.js";import"./chunk-EDXVE4YY-BRniAH53.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-D58deEXr.js";var e=4;function a(o){return r(o,e)}export{a as c};
@@ -1 +0,0 @@
1
- .md-preview{flex:1;overflow:auto;padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg)}.md-frontmatter{margin-bottom:var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg-secondary)}.md-fm-row{display:flex;align-items:baseline;gap:var(--space-3);padding:var(--space-1) 0;font-size:var(--font-size-xs)}.md-fm-row+.md-fm-row{border-top:1px solid var(--color-border)}.md-fm-key{width:100px;flex-shrink:0;font-family:var(--font-mono);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.md-fm-value{color:var(--color-text);word-break:break-word}.md-preview .markdown-body{font-size:var(--font-size-sm);color:var(--color-text);line-height:var(--line-height-relaxed)}.md-preview .markdown-body>:first-child{margin-top:0}.md-preview .markdown-body>:last-child{margin-bottom:0}.md-preview .markdown-body h1{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin-top:var(--space-6);margin-bottom:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}.md-preview .markdown-body h2{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin-top:var(--space-5);margin-bottom:var(--space-3)}.md-preview .markdown-body h3{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-top:var(--space-4);margin-bottom:var(--space-2)}.md-preview .markdown-body h4,.md-preview .markdown-body h5,.md-preview .markdown-body h6{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-top:var(--space-4);margin-bottom:var(--space-2)}.md-preview .markdown-body p{margin-bottom:var(--space-3)}.md-preview .markdown-body ul,.md-preview .markdown-body ol{padding-left:var(--space-5);margin-bottom:var(--space-3)}.md-preview .markdown-body ul{list-style-type:disc}.md-preview .markdown-body ol{list-style-type:decimal}.md-preview .markdown-body li{margin-bottom:var(--space-1);line-height:var(--line-height-relaxed)}.md-preview .markdown-body li>ul,.md-preview .markdown-body li>ol{margin-top:var(--space-1);margin-bottom:0}.md-preview .markdown-body li input[type=checkbox]{margin-right:var(--space-2);accent-color:var(--color-accent)}.md-preview .markdown-body code{font-family:var(--font-mono);font-size:.9em;background:var(--color-bg-secondary);padding:1px 4px;border-radius:3px}.md-preview .markdown-body pre{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);overflow-x:auto;margin-bottom:var(--space-3)}.md-preview .markdown-body pre code{background:none;padding:0;font-size:var(--font-size-xs)}.md-preview .markdown-body table{width:100%;border-collapse:collapse;margin-bottom:var(--space-3);font-size:var(--font-size-xs)}.md-preview .markdown-body th,.md-preview .markdown-body td{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);text-align:left}.md-preview .markdown-body th{background:var(--color-bg-secondary);font-weight:var(--font-weight-semibold)}.md-preview .markdown-body tr:hover{background:var(--color-bg-secondary)}.md-preview .markdown-body blockquote{border-left:3px solid var(--color-accent);padding-left:var(--space-4);margin:0 0 var(--space-3) 0;color:var(--color-text-secondary);font-style:italic}.md-preview .markdown-body hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-4) 0}.md-preview .markdown-body a{color:var(--color-accent);text-decoration:underline;text-underline-offset:2px}.md-preview .markdown-body a:hover{color:var(--color-accent)}.md-preview .markdown-body strong{font-weight:var(--font-weight-semibold)}.md-preview .markdown-body img{max-width:100%;border-radius:var(--radius-md)}.md-preview .markdown-body .mermaid-rendered{margin:var(--space-4) 0;padding:var(--space-4);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden;position:relative;transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.md-preview .markdown-body .mermaid-rendered:hover{border-color:var(--color-border-hover);box-shadow:var(--shadow-md)}.md-preview .markdown-body .mermaid-stage{display:flex;align-items:center;justify-content:center;min-height:200px;width:100%;overflow:auto}.md-preview .markdown-body .mermaid-stage>svg{max-width:100%;height:auto;display:block}.md-preview .markdown-body .mermaid-error{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-error);background:var(--color-error-subtle);border:1px solid var(--color-error);border-radius:var(--radius-md);padding:var(--space-3);white-space:pre-wrap;word-break:break-word}.update-badge{position:relative;display:flex;align-items:center}.update-badge-trigger{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);background:var(--color-warning-subtle);border:1px solid var(--color-warning);border-radius:var(--radius-full);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.update-badge-trigger:hover{background:var(--color-warning);border-color:var(--color-warning)}.update-badge-trigger:hover .update-badge-label{color:var(--color-text-on-brand)}.update-badge-dot{width:var(--space-2);height:var(--space-2);border-radius:var(--radius-full);background:var(--color-warning);flex-shrink:0;animation:update-badge-pulse 2s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.update-badge-dot{animation:none}}@keyframes update-badge-pulse{0%,to{opacity:1}50%{opacity:.5}}.update-badge-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-warning);white-space:nowrap}.update-badge-popover{position:absolute;top:calc(100% + var(--space-2));right:0;width:360px;max-width:90vw;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);z-index:100}.update-badge-popover-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border)}.update-badge-popover-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.update-badge-dismiss{width:var(--space-6);height:var(--space-6);display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);font-size:var(--font-size-base);color:var(--color-text-secondary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.update-badge-dismiss:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.update-badge-content{padding:var(--space-4);max-height:320px;overflow-y:auto}.update-badge-action{display:block;width:calc(100% - var(--space-4) * 2);margin:0 var(--space-4) var(--space-4);padding:var(--space-2) var(--space-3);background:var(--color-accent);color:var(--color-text-on-brand);border:none;border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:filter var(--transition-fast),transform var(--transition-fast)}.update-badge-action:hover{filter:brightness(1.08)}.update-badge-action:active{transform:scale(.98)}.header{display:flex;align-items:center;justify-content:space-between;height:var(--header-height);padding:0 var(--space-4);border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary);position:sticky;top:0;z-index:10}.header-left{display:flex;align-items:center;gap:var(--space-3)}.agent-avatar{position:relative;width:28px;height:28px;display:flex;align-items:center;justify-content:center;transition:opacity var(--transition-normal)}.agent-avatar--must_sleep{animation:pulse-slow 2s ease-in-out infinite}.zzz{position:absolute;top:-4px;right:-8px;font-size:9px;font-weight:var(--font-weight-bold);color:var(--color-text-tertiary);animation:float 2s ease-in-out infinite}@keyframes pulse-slow{0%,to{opacity:.4}50%{opacity:.7}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.header-brand{display:flex;align-items:center;gap:var(--space-2)}.brand-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-tight);color:var(--color-text)}.sleep-badge{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);padding:2px var(--space-2);border-radius:var(--radius-sm);white-space:nowrap;letter-spacing:var(--letter-spacing-caption);border:1px solid transparent}.sleep-badge--alert{background:var(--color-success-subtle);color:var(--color-success);border-color:var(--color-success)}.sleep-badge--drowsy{background:var(--color-warning-subtle);color:var(--color-warning);border-color:var(--color-warning)}.sleep-badge--sleepy{background:var(--color-accent-soft);color:var(--color-accent)}[data-theme=dark] .sleep-badge--sleepy{color:var(--color-accent)}.sleep-badge--must_sleep{background:var(--color-error-subtle);color:var(--color-error);border-color:var(--color-error)}.header-right{display:flex;align-items:center;gap:var(--space-1)}.zoom-controls{display:flex;align-items:center;gap:2px;margin-right:var(--space-2);padding:2px;border-radius:var(--radius-md);background:var(--color-bg-tertiary);border:1px solid var(--color-border)}.zoom-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.zoom-btn:hover:not(:disabled){background:var(--color-bg);color:var(--color-text)}.zoom-btn:disabled{opacity:.3;cursor:default}.zoom-label{font-size:var(--font-size-xs);color:var(--color-text-secondary);min-width:32px;text-align:center;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums}.theme-toggle{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-md);color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.theme-toggle:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar{width:var(--sidebar-width);height:calc(100vh - var(--header-height));border-right:1px solid var(--color-border);background:var(--color-bg-secondary);padding:var(--space-2);overflow-x:hidden;overflow-y:auto;flex-shrink:0;transition:width var(--transition-base, .2s) ease}.sidebar--collapsed{width:56px}.sidebar-toggle{display:flex;align-items:center;gap:var(--space-2);width:100%;padding:6px var(--space-3);margin-bottom:var(--space-2);border:none;background:transparent;border-radius:var(--radius-md);color:var(--color-text-tertiary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.sidebar-toggle:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar-toggle-icon{width:18px;text-align:center;flex-shrink:0;font-size:var(--font-size-base)}.sidebar--collapsed .sidebar-toggle{justify-content:center}.sidebar-group+.sidebar-group{margin-top:var(--space-4)}.sidebar-group-label{display:block;padding:0 var(--space-3);margin-bottom:var(--space-1);font-size:var(--font-size-xs, 11px);font-weight:var(--font-weight-semibold);letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-tertiary)}.sidebar--collapsed .sidebar-label{display:none}.sidebar--collapsed .sidebar-group-label{height:0;margin:0;padding:0;overflow:hidden;border-top:1px solid var(--color-border)}.sidebar--collapsed .sidebar-group+.sidebar-group{margin-top:var(--space-2)}.sidebar--collapsed .sidebar-item{justify-content:center;padding-left:0;padding-right:0}.sidebar-nav{display:flex;flex-direction:column;gap:2px}.sidebar-item{position:relative;display:flex;align-items:center;gap:var(--space-2);width:100%;padding:6px var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:1.2;color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;text-align:left;transition:background var(--transition-fast),color var(--transition-fast)}.sidebar-item:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar-item--active{background:var(--color-bg-tertiary);color:var(--color-text);font-weight:var(--font-weight-semibold)}.sidebar-item--active:before{content:"";position:absolute;left:-2px;top:6px;bottom:6px;width:2px;border-radius:var(--radius-full);background:var(--color-accent)}.sidebar-item--active .sidebar-icon{color:var(--color-accent)}.sidebar-icon{font-size:var(--font-size-base);width:18px;text-align:center;flex-shrink:0;color:var(--color-text-tertiary);transition:color var(--transition-fast)}.sidebar-item:hover .sidebar-icon{color:var(--color-text)}.sidebar-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:var(--letter-spacing-body)}.shell{display:flex;flex-direction:column;height:100vh;overflow:hidden}.shell-body{display:flex;flex:1;overflow:hidden}.shell-main{flex:1;overflow-y:auto;padding:var(--space-4);background:transparent}.task-card{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3);cursor:grab;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none;box-shadow:var(--shadow-sm)}.task-card:hover{border-color:var(--color-accent);box-shadow:var(--shadow-md);transform:translateY(-1px)}.task-card:active{cursor:grabbing;box-shadow:var(--shadow-xl);transform:scale(.98)}.task-card-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.priority-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.priority-dot--critical{background:var(--color-priority-critical)}.priority-dot--high{background:var(--color-priority-high)}.priority-dot--medium{background:var(--color-priority-medium)}.priority-dot--low{background:var(--color-priority-low)}.urgency-bar{width:3px;height:14px;border-radius:2px;flex-shrink:0}.urgency-bar--critical{background:var(--color-urgency-critical)}.urgency-bar--high{background:var(--color-urgency-high)}.urgency-bar--low{background:var(--color-urgency-low)}.task-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-card-desc{font-size:var(--font-size-xs);color:var(--color-text-tertiary);line-height:var(--line-height-normal);margin-bottom:var(--space-2)}.task-card-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.task-card-tags{display:flex;gap:var(--space-1);flex-wrap:wrap}.task-tag{font-size:10px;font-weight:var(--font-weight-medium);padding:2px 8px;border-radius:var(--radius-full);background:var(--color-bg-tertiary);color:var(--color-text-tertiary);border:1px solid transparent;letter-spacing:var(--letter-spacing-caption);line-height:1.4;white-space:nowrap}.task-tag[data-hue="0"]{background:#ede9fe;color:#5b21b6;border-color:#ddd6fe}.task-tag[data-hue="1"]{background:#dbeafe;color:#1d4ed8;border-color:#bfdbfe}.task-tag[data-hue="2"]{background:#fee2e2;color:#b91c1c;border-color:#fecaca}.task-tag[data-hue="3"]{background:#dcfce7;color:#15803d;border-color:#bbf7d0}.task-tag[data-hue="4"]{background:#ffedd5;color:#c2410c;border-color:#fed7aa}.task-tag[data-hue="5"]{background:#fae8ff;color:#86198f;border-color:#f5d0fe}.task-tag[data-hue="6"]{background:#ccfbf1;color:#0f766e;border-color:#99f6e4}.task-tag[data-hue="7"]{background:#fce7f3;color:#be185d;border-color:#fbcfe8}.task-tag[data-hue="8"]{background:#e0e7ff;color:#4338ca;border-color:#c7d2fe}.task-tag[data-hue="9"]{background:#fef3c7;color:#a16207;border-color:#fde68a}[data-theme=dark] .task-tag[data-hue="0"]{background:#9d8cff29;color:#c4b5fd;border-color:#9d8cff47}[data-theme=dark] .task-tag[data-hue="1"]{background:#60a5fa29;color:#93c5fd;border-color:#60a5fa47}[data-theme=dark] .task-tag[data-hue="2"]{background:#f8717129;color:#fca5a5;border-color:#f8717147}[data-theme=dark] .task-tag[data-hue="3"]{background:#4ade8024;color:#86efac;border-color:#4ade8042}[data-theme=dark] .task-tag[data-hue="4"]{background:#fb923c29;color:#fdba74;border-color:#fb923c47}[data-theme=dark] .task-tag[data-hue="5"]{background:#d946ef29;color:#f0abfc;border-color:#d946ef47}[data-theme=dark] .task-tag[data-hue="6"]{background:#2dd4bf29;color:#5eead4;border-color:#2dd4bf47}[data-theme=dark] .task-tag[data-hue="7"]{background:#f472b629;color:#f9a8d4;border-color:#f472b647}[data-theme=dark] .task-tag[data-hue="8"]{background:#818cf829;color:#a5b4fc;border-color:#818cf847}[data-theme=dark] .task-tag[data-hue="9"]{background:#fbbf2429;color:#fcd34d;border-color:#fbbf2447}.task-card-date{font-size:10px;color:var(--color-text-tertiary);white-space:nowrap}.sub-group{margin-bottom:var(--space-2)}.sub-group-header{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;cursor:pointer;width:100%;transition:background var(--transition-fast);font-family:var(--font-family)}.sub-group-header:hover{background:var(--color-bg-secondary)}.sub-group-chevron{transition:transform var(--transition-fast);color:var(--color-text-tertiary);flex-shrink:0}.sub-group-chevron--open{transform:rotate(90deg)}.sub-group-dot{width:6px;height:6px;border-radius:var(--radius-full);flex-shrink:0}.sub-group-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.sub-group-count{font-size:10px;color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 var(--space-1);border-radius:var(--radius-full);min-width:16px;text-align:center}.sub-group-cards{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-1) 0 0 var(--space-4)}.kanban-column{flex:1;min-width:280px;max-width:400px;display:flex;flex-direction:column;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3);box-shadow:var(--shadow-md);transition:background var(--transition-fast),box-shadow var(--transition-fast)}.kanban-column--dragover{background:var(--color-accent-soft)}.kanban-column-header{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-2) var(--space-3)}.kanban-column-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.kanban-column-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.kanban-column-count{font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 var(--space-2);border-radius:var(--radius-full);min-width:20px;text-align:center}.kanban-column-cards{display:flex;flex-direction:column;gap:var(--space-2);flex:1;overflow-y:auto}.filter-popover{position:relative;display:inline-flex}.filter-popover-dropdown{position:absolute;top:calc(100% + 6px);z-index:200;min-width:180px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--space-1);animation:popover-enter .15s cubic-bezier(.2,0,.13,1.5)}.filter-popover-dropdown--left{left:0}.filter-popover-dropdown--right{right:0}@keyframes popover-enter{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.filter-option-list{display:flex;flex-direction:column;gap:1px}.filter-option{display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-2);border-radius:6px;font-size:var(--font-size-sm);color:var(--color-text);cursor:pointer;border:none;background:none;width:100%;text-align:left;transition:background .1s}.filter-option:hover{background:var(--color-bg-secondary)}.filter-option--selected{color:var(--color-accent);font-weight:var(--font-weight-medium)}.filter-option-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.filter-option-check{margin-left:auto;color:var(--color-accent);flex-shrink:0}.filter-option-label{flex:1}.filter-popover-section{padding:6px var(--space-2) 2px;font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.filter-popover-divider{height:1px;background:var(--color-border);margin:var(--space-1) 0}.multi-select-list{padding:var(--space-1);min-width:180px}.multi-select-search-wrap{padding:var(--space-1) var(--space-2)}.multi-select-search{width:100%;padding:5px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text);outline:none;transition:border-color var(--transition-fast)}.multi-select-search:focus{border-color:var(--color-accent)}.multi-select-options{max-height:200px;overflow-y:auto}.multi-select-no-results{padding:var(--space-2) var(--space-3);font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-align:center}.multi-select-actions{display:flex;gap:var(--space-1);padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-1)}.multi-select-action{padding:2px var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast)}.multi-select-action:hover{color:var(--color-accent);background:var(--color-bg-secondary)}.multi-select-option{display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-2);border-radius:6px;cursor:pointer;font-size:var(--font-size-sm);font-family:var(--font-family);color:var(--color-text);transition:background var(--transition-fast);-webkit-user-select:none;user-select:none}.multi-select-option:hover{background:var(--color-bg-secondary)}.multi-select-option input[type=checkbox]{accent-color:var(--color-accent);width:14px;height:14px;flex-shrink:0}.mini-cal{width:296px;padding:var(--space-3)}.mini-cal-field-toggle{display:flex;gap:2px;margin-bottom:var(--space-2);background:var(--color-bg-tertiary);border-radius:var(--radius-md);padding:2px}.mini-cal-field-btn{flex:1;padding:5px var(--space-2);border:none;border-radius:6px;background:transparent;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);cursor:pointer;transition:all var(--transition-fast)}.mini-cal-field-btn--active{background:var(--color-bg-elevated);color:var(--color-text);box-shadow:var(--shadow-sm)}.mini-cal-presets{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:var(--space-2)}.mini-cal-preset{padding:3px 10px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:transparent;font-size:10px;font-weight:var(--font-weight-medium);color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.mini-cal-preset:hover{border-color:var(--color-accent);color:var(--color-accent)}.mini-cal-preset--active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-text-on-brand)}.mini-cal-divider{height:1px;background:var(--color-border);margin:var(--space-1) 0 var(--space-2)}.mini-cal-nav-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-2)}.mini-cal-nav-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.mini-cal-nav-btn:hover{background:var(--color-bg-secondary);color:var(--color-text)}.mini-cal-month-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.mini-cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}.mini-cal-day-label{display:flex;align-items:center;justify-content:center;height:28px;font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.03em}.mini-cal-day{display:flex;align-items:center;justify-content:center;height:32px;border:none;background:transparent;font-size:var(--font-size-xs);color:var(--color-text);cursor:pointer;transition:background 80ms;position:relative}.mini-cal-day:hover{background:var(--color-bg-secondary)}.mini-cal-day--outside{color:var(--color-text-tertiary);opacity:.5}.mini-cal-day--today{font-weight:var(--font-weight-bold);color:var(--color-accent)}.mini-cal-day--today:after{content:"";position:absolute;bottom:3px;left:50%;transform:translate(-50%);width:4px;height:4px;border-radius:var(--radius-full);background:var(--color-accent)}.mini-cal-day--in-range{background:var(--color-accent-soft);border-radius:0}.mini-cal-day--in-range:hover{background:var(--color-accent-soft)}.mini-cal-day--selected{background:var(--color-accent);color:var(--color-text-on-brand);font-weight:var(--font-weight-semibold)}.mini-cal-day--selected:hover{background:var(--color-accent)}.mini-cal-day--selected.mini-cal-day--today:after{background:var(--color-text-on-brand)}.mini-cal-day--range-start{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}.mini-cal-day--range-end{border-radius:0 var(--radius-sm) var(--radius-sm) 0}.mini-cal-day--single,.mini-cal-day--range-start.mini-cal-day--range-end{border-radius:var(--radius-sm)}.mini-cal-footer{display:flex;align-items:center;justify-content:space-between;margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border)}.mini-cal-range-text{display:flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text)}.mini-cal-arrow{color:var(--color-text-tertiary)}.mini-cal-hint{color:var(--color-text-tertiary);font-weight:var(--font-weight-normal);font-style:italic}.mini-cal-clear-btn{padding:3px 10px;border:none;border-radius:var(--radius-sm);background:transparent;font-size:var(--font-size-xs);color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast)}.mini-cal-clear-btn:hover{color:var(--color-error)}.filter-bar{display:flex;align-items:center;gap:6px;margin-bottom:var(--space-5);flex-wrap:wrap;min-height:36px}.filter-bar-divider{width:1px;height:20px;background:var(--color-border);margin:0 2px;flex-shrink:0}.filter-bar-spacer{flex:1;min-width:var(--space-2)}.filter-search{display:flex;align-items:center;gap:var(--space-1);padding:5px 10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);color:var(--color-text-tertiary);transition:border-color var(--transition-fast),box-shadow var(--transition-fast);min-width:160px;max-width:220px}.filter-search:focus-within{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}.filter-search-input{border:none;background:none;outline:none;font-size:var(--font-size-xs);color:var(--color-text);width:100%;font-family:var(--font-family)}.filter-search-input::placeholder{color:var(--color-text-tertiary)}.filter-search-clear{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer;flex-shrink:0;transition:color var(--transition-fast)}.filter-search-clear:hover{color:var(--color-text)}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);font-family:var(--font-family);color:var(--color-text-secondary);cursor:pointer;white-space:nowrap;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none}.filter-chip:hover{border-color:var(--color-border-hover);color:var(--color-text);background:var(--color-bg-secondary)}.filter-chip--active{border-color:var(--color-accent);color:var(--color-text);background:var(--color-accent-soft)}.filter-chip--active:hover{background:var(--color-accent-soft)}.filter-chip--subtle{border-color:transparent;background:transparent}.filter-chip--subtle:hover{background:var(--color-bg-secondary);border-color:var(--color-border)}.filter-chip-dot{width:7px;height:7px;border-radius:var(--radius-full);flex-shrink:0}.filter-chip-label{line-height:1}.filter-chip-chevron{transition:transform var(--transition-fast);opacity:.5;flex-shrink:0}.filter-chip-chevron--open{transform:rotate(180deg)}.filter-chip-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:var(--radius-full);background:var(--color-accent);color:var(--color-text-on-brand);font-size:9px;font-weight:var(--font-weight-bold);line-height:1}.filter-tag-wrap{display:flex;align-items:center;position:relative}.filter-tag-input{padding:5px 10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text);width:90px;transition:border-color var(--transition-fast),width var(--transition-normal)}.filter-tag-input:focus{border-color:var(--color-accent);outline:none;width:120px}.filter-tag-input::placeholder{color:var(--color-text-tertiary)}.filter-tag-clear{position:absolute;right:4px;display:flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer}.filter-tag-clear:hover{color:var(--color-text)}.filter-clear-all{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:none;border-radius:var(--radius-md);background:transparent;font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast);white-space:nowrap}.filter-clear-all:hover{color:var(--color-accent)}.filter-clear-count{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:var(--radius-full);background:var(--color-bg-tertiary);font-size:9px;font-weight:var(--font-weight-bold);color:var(--color-text-secondary)}.filter-views{padding:var(--space-1)}.filter-views-empty{padding:var(--space-3) var(--space-2);text-align:center;font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.filter-views-list{display:flex;flex-direction:column;gap:1px;max-height:200px;overflow-y:auto}.filter-views-item{display:flex;align-items:center;gap:var(--space-1)}.filter-views-load{flex:1;padding:6px var(--space-2);border:none;border-radius:6px;background:none;font-size:var(--font-size-sm);font-family:var(--font-family);color:var(--color-text);text-align:left;cursor:pointer;transition:background var(--transition-fast)}.filter-views-load:hover{background:var(--color-bg-secondary)}.filter-views-delete{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer;flex-shrink:0;transition:color var(--transition-fast)}.filter-views-delete:hover{color:var(--color-error)}.filter-views-save{display:flex;gap:var(--space-1);padding:var(--space-1) 0 0}.filter-views-input{flex:1;padding:5px 8px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-bg-secondary);font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text)}.filter-views-input:focus{outline:none;border-color:var(--color-accent)}.filter-views-input::placeholder{color:var(--color-text-tertiary)}.filter-views-save-btn{padding:5px 10px;border:none;border-radius:6px;background:var(--color-accent);color:var(--color-text-on-brand);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);font-family:var(--font-family);cursor:pointer;transition:opacity var(--transition-fast);white-space:nowrap}.filter-views-save-btn:disabled{opacity:.4;cursor:default}.filter-views-save-btn:not(:disabled):hover{opacity:.9}.filter-view-toggle{display:inline-flex;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.filter-view-btn{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:var(--color-bg-elevated);color:var(--color-text-tertiary);cursor:pointer;transition:all var(--transition-fast)}.filter-view-btn:not(:last-child){border-right:1px solid var(--color-border)}.filter-view-btn:hover{color:var(--color-text);background:var(--color-bg-secondary)}.filter-view-btn--active{color:var(--color-accent);background:var(--color-accent-soft)}.filter-view-btn--active:hover{background:var(--color-accent-soft)}.filter-create-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border:none;border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-text);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);font-family:var(--font-family);cursor:pointer;transition:opacity var(--transition-fast),box-shadow var(--transition-fast);white-space:nowrap}.filter-create-btn:hover{opacity:.92;box-shadow:var(--shadow-md)}[data-theme=dark] .filter-chip--active,[data-theme=dark] .filter-chip--active:hover{background:var(--color-accent-soft)}.filter-min-rice{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3)}.filter-min-rice-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.filter-min-rice-clear{align-self:flex-end;padding:2px 8px;border:none;background:transparent;color:var(--color-accent);font-size:var(--font-size-xs);cursor:pointer}.filter-min-rice-clear:hover{text-decoration:underline}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;animation:fade-in .12s ease}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-top:1px solid hsl(0 0% 100% / .15);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl),0 0 0 1px #0003;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;animation:scale-in .2s cubic-bezier(.34,1.56,.64,1)}@keyframes scale-in{0%{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border)}.modal-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.modal-close{font-size:20px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);color:var(--color-text-tertiary)}.modal-close:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.modal-body{padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.field{display:flex;flex-direction:column;gap:var(--space-1)}.field-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.field-input,.field-textarea,.field-select{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--font-size-sm);color:var(--color-text);box-shadow:inset 0 2px 4px #0000000d;transition:border-color var(--transition-fast),box-shadow var(--transition-bounce)}.field-input:focus,.field-textarea:focus,.field-select:focus{border-color:var(--color-accent);outline:none;box-shadow:inset 0 2px 4px #0000000d,var(--shadow-glow)}.field-textarea{resize:vertical;min-height:72px}.modal-actions{display:flex;justify-content:flex-end;gap:var(--space-2);padding-top:var(--space-2)}.btn{padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:all var(--transition-bounce);cursor:pointer}.btn:active:not(:disabled){transform:scale(.96)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--color-accent);color:var(--color-accent-text);border:none;box-shadow:0 4px 12px var(--color-accent-soft)}.btn--primary:hover:not(:disabled){box-shadow:0 8px 24px var(--color-accent-soft);transform:translateY(-1px)}.btn--ghost{color:var(--color-text-secondary);background:transparent;border:1px solid transparent}.btn--ghost:hover:not(:disabled){background:var(--color-bg-tertiary);color:var(--color-text);border-color:var(--color-border)}.detail-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;display:flex;justify-content:flex-end;z-index:100;animation:fade-in .12s ease;transition:background var(--transition-normal)}.detail-overlay--fullscreen{background:var(--color-bg)}.detail-panel{width:100%;max-width:680px;height:100vh;background:var(--color-bg-elevated);border-left:1px solid var(--color-border);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;animation:slide-in .2s ease;transition:max-width var(--transition-normal)}.detail-panel--fullscreen{max-width:100vw;border-left:none;box-shadow:none}.detail-panel--fullscreen .detail-body{padding-left:0;padding-right:0}.detail-panel--fullscreen .detail-header,.detail-panel--fullscreen .detail-body>*{max-width:1100px;margin-left:auto;margin-right:auto;width:100%}.detail-panel--fullscreen .detail-header{padding-left:var(--space-6);padding-right:var(--space-6)}@keyframes slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.detail-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border);gap:var(--space-3)}.detail-header-actions{display:flex;align-items:center;gap:var(--space-1);flex-shrink:0}.detail-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;background:transparent;border:none;border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.detail-icon-btn:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.detail-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.detail-body{flex:1;overflow-y:auto;padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.detail-empty{font-size:var(--font-size-sm);color:var(--color-text-tertiary);font-style:italic}.detail-divider{border:none;border-top:1px solid var(--color-border);margin:var(--space-1) 0}.props-block{display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius-md)}.prop-row{display:grid;grid-template-columns:140px 1fr;min-height:36px;align-items:start;border-bottom:1px solid var(--color-border);transition:background var(--transition-fast)}.prop-row:last-child{border-bottom:none}.prop-row:hover{background:var(--color-bg-secondary)}.prop-label{padding:var(--space-2) var(--space-3);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;-webkit-user-select:none;user-select:none;line-height:20px}.prop-value{padding:var(--space-2) var(--space-3);font-size:var(--font-size-sm);color:var(--color-text);min-width:0;overflow-wrap:break-word;line-height:20px}.prop-select{border:none;background:transparent;box-shadow:none;padding:var(--space-1) var(--space-2);font-size:var(--font-size-sm);cursor:pointer;border-radius:var(--radius-sm);color:var(--color-text)}.prop-select:hover{background:var(--color-bg-tertiary)}.prop-select:focus{outline:none;box-shadow:0 0 0 2px var(--color-accent)}.prop-tags{display:flex;gap:var(--space-1);flex-wrap:wrap}.prop-feature{color:var(--color-accent);font-weight:var(--font-weight-medium)}.prop-text{color:var(--color-text-secondary);line-height:var(--line-height-relaxed)}.prop-text--clamped{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.prop-expandable{cursor:pointer;display:block}.prop-expand-hint{display:inline;font-size:var(--font-size-xs);color:var(--color-accent);margin-left:var(--space-1)}.prop-date{font-variant-numeric:tabular-nums;color:var(--color-text-secondary)}.prop-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:1px var(--space-1);border-radius:var(--radius-sm)}.markdown-body{font-size:var(--font-size-sm);color:var(--color-text);line-height:var(--line-height-relaxed);word-break:break-word}.markdown-body>:first-child{margin-top:0}.markdown-body>:last-child{margin-bottom:0}.markdown-body h1{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin-top:var(--space-6);margin-bottom:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}.markdown-body h2{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin-top:var(--space-5);margin-bottom:var(--space-2)}.markdown-body h3{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-top:var(--space-4);margin-bottom:var(--space-2)}.markdown-body h4,.markdown-body h5,.markdown-body h6{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-top:var(--space-3);margin-bottom:var(--space-1)}.markdown-body p{margin-bottom:var(--space-3)}.markdown-body ul,.markdown-body ol{padding-left:var(--space-5);margin-bottom:var(--space-3)}.markdown-body ul{list-style-type:disc}.markdown-body ol{list-style-type:decimal}.markdown-body li{margin-bottom:var(--space-1);line-height:var(--line-height-relaxed)}.markdown-body li>ul,.markdown-body li>ol{margin-top:var(--space-1);margin-bottom:0}.markdown-body li input[type=checkbox]{margin-right:var(--space-2);accent-color:var(--color-accent)}.markdown-body code{font-family:var(--font-mono);font-size:.9em;background:var(--color-bg-tertiary);padding:1px var(--space-1);border-radius:var(--radius-sm)}.markdown-body pre{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);overflow-x:auto;margin-bottom:var(--space-3);font-size:var(--font-size-xs);line-height:var(--line-height-relaxed)}.markdown-body pre code{background:none;padding:0;font-size:inherit}.markdown-body table{width:100%;border-collapse:collapse;margin-bottom:var(--space-3);font-size:var(--font-size-xs)}.markdown-body th,.markdown-body td{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);text-align:left}.markdown-body th{background:var(--color-bg-secondary);font-weight:var(--font-weight-semibold)}.markdown-body tr:hover{background:var(--color-bg-secondary)}.markdown-body blockquote{border-left:3px solid var(--color-accent);padding-left:var(--space-4);margin:var(--space-3) 0;color:var(--color-text-secondary);font-style:italic}.markdown-body hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-4) 0}.markdown-body a{color:var(--color-accent);text-decoration:underline;text-underline-offset:2px}.markdown-body a:hover{color:var(--color-accent)}.markdown-body strong{font-weight:var(--font-weight-semibold)}.markdown-body img{max-width:100%;border-radius:var(--radius-md)}.changelog-section{display:flex;flex-direction:column;gap:var(--space-3)}.changelog-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.changelog-add{display:flex;gap:var(--space-2)}.changelog-add .field-input{flex:1}.markdown-body .mermaid-rendered{position:relative;margin:var(--space-3) 0;background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg, 12px);overflow:hidden;height:70vh;max-height:720px;min-height:420px;box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.markdown-body .mermaid-rendered:hover{border-color:var(--color-border-hover);box-shadow:var(--shadow-md)}.markdown-body .mermaid-stage{width:100%;height:100%;cursor:grab;overflow:hidden}.markdown-body .mermaid-stage:active{cursor:grabbing}.markdown-body .mermaid-stage>svg{width:100%;height:100%;display:block}.markdown-body .mermaid-controls{position:absolute;bottom:12px;right:12px;display:flex;gap:4px;background:var(--glass-bg);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--radius-md);padding:4px;z-index:2}.markdown-body .mermaid-controls button{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--color-text);font-size:16px;font-weight:var(--font-weight-semibold);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--transition-fast),color var(--transition-fast)}.markdown-body .mermaid-controls button:hover{background:var(--color-accent-soft);color:var(--color-accent)}.markdown-body .mermaid-error{color:var(--color-error);background:var(--color-error-subtle);border:1px solid var(--color-error);padding:var(--space-3);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--font-size-xs);white-space:pre-wrap;word-break:break-word}.markdown-body .mermaid-rendered svg{max-width:100%;height:auto;border-radius:8px;font-size:.85em;white-space:pre-wrap}.rice-block{width:100%;display:flex;flex-direction:column}.rice-header{display:inline-flex;align-items:center;gap:var(--space-2);padding:2px 6px;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-sm);color:var(--color-text);font-size:var(--font-size-sm)}.rice-header:hover{background:var(--color-bg-tertiary)}.rice-header-label{font-weight:var(--font-weight-medium)}.rice-score-badge{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:22px;padding:0 8px;border-radius:11px;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums;background:var(--color-bg-tertiary);color:var(--color-text-secondary);border:1px solid var(--color-border)}.rice-score-badge.rice-score--low{background:#d9262626;color:#c32222;border-color:#d926264d}.rice-score-badge.rice-score--mid{background:#f2a60d26;color:#ae6e13;border-color:#f2a60d4d}.rice-score-badge.rice-score--high{background:#2eb85c2e;color:#1b7e3c;border-color:#2eb85c59}[data-theme=dark] .rice-score-badge.rice-score--low{color:#ef8f8f}[data-theme=dark] .rice-score-badge.rice-score--mid{color:#f7c96e}[data-theme=dark] .rice-score-badge.rice-score--high{color:#85e0a3}.rice-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);margin-top:var(--space-2);padding:var(--space-2);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md)}.rice-field{display:flex;flex-direction:column;gap:2px}.rice-field-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.rice-input{width:100%;font-variant-numeric:tabular-nums}.rice-clear-btn{grid-column:1 / -1;justify-self:end;padding:4px 10px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-xs);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast)}.rice-clear-btn:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.eisenhower{display:flex;flex-direction:column;flex:1;gap:var(--space-2);overflow:auto}.eisenhower-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:var(--space-3);flex:1;min-height:400px}.eisenhower-quadrant{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-lg);background:var(--color-bg-elevated);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);overflow-y:auto}.eisenhower-quadrant--do{border-top:3px solid var(--color-quadrant-do)}.eisenhower-quadrant--schedule{border-top:3px solid var(--color-quadrant-schedule)}.eisenhower-quadrant--delegate{border-top:3px solid var(--color-quadrant-delegate)}.eisenhower-quadrant--eliminate{border-top:3px solid var(--color-quadrant-eliminate)}.eisenhower-quadrant-header{display:flex;align-items:center;gap:var(--space-2)}.eisenhower-quadrant-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.eisenhower-quadrant-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.eisenhower-quadrant-count{font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 var(--space-2);border-radius:var(--radius-full);min-width:20px;text-align:center}.eisenhower-quadrant-subtitle{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-bottom:var(--space-1)}.eisenhower-quadrant-cards{display:flex;flex-direction:column;gap:var(--space-2);flex:1}.eisenhower-y-label{display:flex;flex-direction:column;justify-content:space-around;position:absolute;left:-4px;top:0;bottom:0;pointer-events:none}.eisenhower-x-label{display:flex;justify-content:space-around;padding:var(--space-1) 0 0}.eisenhower-axis-hi,.eisenhower-axis-lo{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-tertiary);font-weight:var(--font-weight-medium)}.eisenhower-y-label{display:none}.rice-scatter{position:relative;width:100%;display:flex;flex-direction:column;gap:var(--space-3)}.rice-scatter-svg{width:100%;height:auto;display:block;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.rice-axis{stroke:var(--color-border);stroke-width:1}.rice-tick{font-size:11px;fill:var(--color-text-tertiary);font-variant-numeric:tabular-nums}.rice-axis-label{font-size:12px;fill:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.rice-quad{fill:var(--color-bg-secondary);fill-opacity:.4}.rice-quad--quick-wins{fill:#2eb85c;fill-opacity:.06}.rice-quad--big-bets{fill:#306ee8;fill-opacity:.06}.rice-quad--fill-ins{fill:#f4af25;fill-opacity:.06}.rice-quad--time-sinks{fill:#dd3c3c;fill-opacity:.05}.rice-quad-divider{stroke:var(--color-border);stroke-width:1;stroke-dasharray:3 4}.rice-quad-label{font-size:10px;font-weight:var(--font-weight-semibold);fill:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.06em;pointer-events:none}.rice-dot{cursor:pointer;transition:stroke-width var(--transition-fast),fill-opacity var(--transition-fast);outline:none}.rice-dot:hover{fill-opacity:1!important}.rice-dot:focus-visible{stroke:var(--color-accent);stroke-width:2.5}.rice-scatter-sr-list{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rice-unscored{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated)}.rice-unscored-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;padding:var(--space-3);background:transparent;border:none;cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.rice-unscored-toggle:hover{background:var(--color-bg-tertiary)}.rice-unscored-cards{display:flex;gap:var(--space-2);padding:var(--space-3);border-top:1px solid var(--color-border);overflow-x:auto}.rice-unscored-cards>*{flex:0 0 220px}.rice-chevron{transition:transform var(--transition-fast);color:var(--color-text-tertiary)}.rice-chevron--open{transform:rotate(180deg)}.version-manager-modal{max-width:680px}.version-manager-body{display:flex;flex-direction:column;gap:var(--space-3)}.version-stats{display:flex;gap:var(--space-4);padding:var(--space-3);background:var(--color-bg-secondary);border-radius:var(--radius-md)}.version-stat{display:flex;flex-direction:column;align-items:center;gap:2px}.version-stat-count{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text)}.version-stat-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.version-manager-loading,.version-manager-empty{font-size:var(--font-size-sm);color:var(--color-text-tertiary);text-align:center;padding:var(--space-3)}.version-section{display:flex;flex-direction:column;gap:var(--space-2)}.version-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em;margin:0}.version-item{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--space-2)}.version-item--released{opacity:.7}.version-item-info{display:flex;align-items:center;gap:var(--space-2)}.version-item-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.version-item-count{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-left:auto}.version-item-date{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.version-item-desc{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal)}.version-status-badge{font-size:10px;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.04em;padding:1px var(--space-2);border-radius:var(--radius-full)}.version-status-badge--planning{background:var(--color-warning-subtle, hsl(45 80% 92%));color:var(--color-warning, hsl(35 80% 45%))}.version-status-badge--released{background:var(--color-success-subtle);color:var(--color-success)}.version-item-actions{display:flex;justify-content:flex-end}.version-release-btn{font-size:var(--font-size-xs)!important;padding:var(--space-1) var(--space-3)!important}.version-create-form{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border)}.kanban-board{height:100%;display:flex;flex-direction:column}.kanban-columns{display:flex;gap:var(--space-4);flex:1;overflow-x:auto;padding-bottom:var(--space-4)}.loading{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.task-list{display:flex;flex-direction:column;gap:var(--space-2)}.task-list>*{width:100%}.sleep-page{max-width:880px;margin-inline:auto}.sleep-overview{display:flex;gap:var(--space-6);align-items:flex-start;margin-bottom:var(--space-8)}.sleep-gauge{display:flex;flex-direction:column;align-items:center;justify-content:center;width:160px;height:160px;border-radius:var(--radius-xl);flex-shrink:0;box-shadow:var(--shadow-md);transition:transform var(--transition-bounce),box-shadow var(--transition-fast)}.sleep-gauge:hover{transform:translateY(-4px) scale(1.02);box-shadow:var(--shadow-xl)}.sleep-gauge--alert{background:var(--color-success-subtle);color:var(--color-success)}.sleep-gauge--drowsy{background:var(--color-warning-subtle);color:var(--color-warning)}.sleep-gauge--sleepy{background:var(--color-accent-soft);color:var(--color-accent)}.sleep-gauge--must_sleep{background:var(--color-error-subtle);color:var(--color-error)}.sleep-gauge-number{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);line-height:1}.sleep-gauge-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);margin-top:var(--space-1)}.sleep-details{display:flex;flex-direction:column;gap:var(--space-4);flex:1;min-width:0;padding:var(--space-4);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.sleep-detail{display:flex;flex-direction:column;gap:var(--space-1)}.sleep-detail-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.sleep-detail-value{font-size:var(--font-size-sm);color:var(--color-text)}.sleep-detail-value--summary{color:var(--color-text-secondary);line-height:var(--line-height-relaxed)}.sleep-section{margin-bottom:var(--space-8)}.sleep-section-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-4)}.session-list{display:flex;flex-direction:column;gap:var(--space-2)}.session-item{padding:var(--space-3);background:var(--color-bg-elevated);border-radius:var(--radius-md);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);transition:all var(--transition-bounce)}.session-item:hover{transform:translate(4px);box-shadow:var(--shadow-md);border-color:var(--color-accent)}.session-header{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-1)}.session-time{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-family:var(--font-mono)}.session-score{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-warning)}.session-changes{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.session-message{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal)}.changelog-group{margin-bottom:var(--space-5)}.changelog-group:last-child{margin-bottom:0}.changelog-group-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-2)}.changelog-group-title--day{font-family:var(--font-mono);text-transform:none;letter-spacing:0;color:var(--color-text-secondary)}.changelog-group--pending{border-left:2px solid var(--color-accent);padding-left:var(--space-3)}.changelog-group--pending .changelog-group-title{color:var(--color-accent)}.changelog-list{display:flex;flex-direction:column;gap:var(--space-2)}.changelog-item{padding:var(--space-3) var(--space-4);background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.changelog-item:hover{border-color:var(--color-accent);box-shadow:var(--shadow-md)}.changelog-meta{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-2)}.changelog-scope{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.changelog-breaking{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:.04em;color:var(--color-error);background:var(--color-error-subtle);padding:var(--space-1) var(--space-2);border-radius:var(--radius-full)}.changelog-summary{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);line-height:var(--line-height-normal)}.changelog-desc{margin-top:var(--space-1);font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.changelog-more{margin-top:var(--space-3);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.sql-preview{position:relative;padding:var(--space-4);overflow:auto;flex:1;background-image:radial-gradient(circle,var(--color-border) 1px,transparent 1px);background-size:24px 24px;border-radius:var(--radius-md);border:1px solid var(--color-border)}.sql-preview-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.sql-preview-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.sql-preview-line{fill:none;stroke:var(--color-aether-blue);stroke-width:2;opacity:.6}.sql-preview-line-label{font-size:10px;font-family:var(--font-mono);font-weight:600;fill:var(--color-text-secondary)}.sql-preview-line-label-bg{fill:var(--color-bg);rx:3;ry:3}.sql-preview-arrowhead{fill:var(--color-aether-blue);opacity:.6}.sql-preview-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--space-6)}.entity-card{background:var(--color-bg);border-radius:var(--radius-lg);border:1px solid var(--color-border);box-shadow:var(--shadow-md);overflow:hidden;transition:box-shadow var(--transition-fast)}.entity-card:hover{box-shadow:var(--shadow-lg)}.entity-card-header{padding:var(--space-3) var(--space-4);background:var(--color-accent-soft);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.entity-card-title-group{display:flex;align-items:center;gap:var(--space-2);min-width:0}.entity-card-category-icon{font-size:10px;font-family:var(--font-mono);color:var(--color-text-tertiary);flex-shrink:0}.entity-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text);letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entity-card-badge{font-size:10px;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.05em;padding:2px 6px;border-radius:var(--radius-sm);flex-shrink:0}.entity-card-badge[data-storage=file]{background:#2a6df41f;color:#2a6df4}.entity-card-badge[data-storage=json]{background:#e69b191f;color:#e69b19}.entity-card-badge[data-storage=table]{background:#1eae531f;color:#1eae53}.entity-card-path{padding:var(--space-1) var(--space-4);font-size:10px;font-family:var(--font-mono);color:var(--color-text-tertiary);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entity-card-managed{padding:var(--space-1) var(--space-4);font-size:10px;color:var(--color-text-tertiary);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border)}.entity-fields{padding:var(--space-2) 0}.entity-field{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-4);font-size:var(--font-size-xs);font-family:var(--font-mono);line-height:1.6;transition:background var(--transition-fast)}.entity-field:hover{background:var(--color-bg-secondary)}.entity-field--expandable{cursor:pointer}.entity-field--expandable:hover{background:#741ba70f}.entity-field--nested{padding-left:calc(var(--space-4) + 18px + var(--space-2));opacity:.85;border-left:2px solid hsl(278 72% 38% / .15);margin-left:var(--space-4)}.entity-field-name--nested{color:var(--color-text-secondary)!important;font-weight:var(--font-weight-normal)!important}.entity-field-icon{width:18px;flex-shrink:0;text-align:center;font-size:9px;font-weight:var(--font-weight-bold);opacity:.8}.entity-field-icon--key{color:#e69b19}.entity-field-icon--ref{color:var(--color-accent)}.entity-field-name{min-width:90px;color:var(--color-text);font-weight:var(--font-weight-medium)}.entity-field-type{color:var(--color-text-tertiary);flex-shrink:0}.entity-field-type[data-type=enum]{color:var(--color-aether-blue)}.entity-field-type[data-type=array]{color:#2a6df4}.entity-field-type[data-type=boolean]{color:#1eae53}.entity-field-type[data-type=number]{color:#ee7c2b}.entity-field-type[data-type=json]{color:#a23adf}.entity-field-type[data-type=nullable]{color:var(--color-text-tertiary);font-style:italic}.entity-field-type[data-type=date]{color:#7a47d1}.entity-field-toggle{display:flex;align-items:center;gap:4px;margin-left:auto;flex-shrink:0}.entity-field-toggle-arrow{font-size:8px;color:var(--color-text-tertiary);transition:transform .15s ease;display:inline-block}.entity-field-toggle-arrow--open{transform:rotate(90deg)}.entity-field-toggle-count{font-size:9px;font-family:var(--font-mono);color:var(--color-text-tertiary);background:#741ba71a;padding:0 5px;border-radius:3px;line-height:1.6}.entity-field-enum-group{display:flex;flex-wrap:wrap;gap:3px}.entity-field-enum-pill{padding:0 5px;border-radius:3px;font-size:9px;font-family:var(--font-mono);background:#741ba71a;color:var(--color-aether-blue);line-height:1.6;white-space:nowrap}.entity-field-desc{color:var(--color-text-tertiary);font-family:var(--font-family);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.entity-card-notes{padding:var(--space-2) var(--space-4);border-top:1px solid var(--color-border);background:var(--color-bg-secondary)}.entity-card-note{display:block;font-size:10px;color:var(--color-text-tertiary);line-height:1.5;font-style:italic}.sql-preview-legend{position:relative;z-index:1;margin-top:var(--space-5);padding:var(--space-3) var(--space-4);background:var(--color-bg);border-radius:var(--radius-md);border:1px solid var(--color-border)}.sql-preview-legend-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-2)}.sql-preview-legend-items{display:flex;flex-wrap:wrap;gap:var(--space-3)}.sql-preview-legend-item{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-xs);color:var(--color-text-secondary)}.sql-preview-legend-line{width:24px;height:2px;background:var(--color-aether-blue);opacity:.6;border-radius:1px}.sql-preview-legend-cardinality{font-size:10px;font-family:var(--font-mono);font-weight:var(--font-weight-semibold);color:var(--color-accent);padding:1px 4px;background:var(--color-accent-soft);border-radius:3px}.json-preview{flex:1;overflow:auto;padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg)}.json-preview-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.json-preview-header{margin-bottom:var(--space-4);padding-bottom:var(--space-3);border-bottom:1px solid var(--color-border)}.json-preview-stats{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2)}.json-preview-total{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);margin-right:var(--space-2)}.json-stat-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text-secondary);border:1px solid var(--color-border);background:transparent;cursor:pointer;transition:all var(--transition-fast)}.json-stat-chip:hover{background:var(--color-bg-tertiary)}.json-stat-chip--active{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.json-type-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;font-family:var(--font-mono);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.03em;flex-shrink:0;background:#8080801a;color:var(--color-text-secondary)}.type--feat{background:#1eae531f;color:#1eae53}.type--fix{background:#ee7c2b1f;color:#ee7c2b}.type--refactor{background:#2a6df41f;color:#2a6df4}.type--chore{background:#8c8c8c1f;color:var(--color-text-tertiary)}.type--docs{background:#7a47d11f;color:#7a47d1}.type--test{background:#15a4c11f;color:#15a4c1}.type--perf{background:#e69b191f;color:#e69b19}.json-breaking-badge{display:inline-block;padding:1px 5px;border-radius:3px;font-size:9px;font-family:var(--font-mono);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:.05em;background:#db242426;color:#db2424;flex-shrink:0}.json-timeline{display:flex;flex-direction:column;gap:var(--space-4)}.json-date-group{position:relative}.json-date-marker{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.json-date-dot{width:8px;height:8px;border-radius:50%;background:var(--color-accent);flex-shrink:0}.json-date-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);font-family:var(--font-mono);color:var(--color-text)}.json-date-count{font-size:10px;font-family:var(--font-mono);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 6px;border-radius:var(--radius-full)}.json-date-entries{display:flex;flex-direction:column;gap:var(--space-1);margin-left:3px;padding-left:var(--space-4);border-left:2px solid var(--color-border)}.json-entry{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast)}.json-entry:hover{background:var(--color-bg-tertiary)}.json-entry--expanded{background:var(--color-bg-secondary)}.json-entry-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:2px}.json-entry-scope{font-size:11px;font-family:var(--font-mono);color:var(--color-text-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.json-entry-desc{font-size:var(--font-size-xs);line-height:var(--line-height-relaxed);color:var(--color-text-secondary)}.json-entry-desc--clamped{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.json-releases{display:flex;flex-direction:column;gap:var(--space-3)}.json-release{border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;transition:box-shadow var(--transition-fast)}.json-release:hover{box-shadow:var(--shadow-md)}.json-release-header{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-accent-soft);cursor:pointer;transition:background var(--transition-fast)}.json-release-header:hover{filter:brightness(.97)}.json-release-version{font-size:var(--font-size-base);font-weight:var(--font-weight-bold);font-family:var(--font-mono);color:var(--color-text)}.json-release-date{font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text-tertiary)}.json-release-meta{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-left:auto}.json-release-chevron{font-size:10px;color:var(--color-text-tertiary);transition:transform .15s ease;display:inline-block;flex-shrink:0}.json-release-chevron--open{transform:rotate(90deg)}.json-release-body{padding:var(--space-4)}.json-release-summary{font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-secondary);margin-bottom:var(--space-4)}.json-release-section{margin-bottom:var(--space-4)}.json-release-section:last-child{margin-bottom:0}.json-release-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin-bottom:var(--space-2)}.json-release-ids{display:flex;flex-wrap:wrap;gap:var(--space-1)}.json-id-chip{padding:2px 8px;border-radius:var(--radius-sm);font-size:10px;font-family:var(--font-mono);font-weight:var(--font-weight-medium)}.json-id-chip--feature{background:#741ba71a;color:var(--color-aether-blue)}.json-id-chip--task{background:#2a6df41a;color:#2a6df4}.json-release-changelog{display:flex;flex-direction:column;gap:var(--space-1)}.json-release-cl-entry{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:var(--font-size-xs);transition:background var(--transition-fast)}.json-release-cl-entry:hover{background:var(--color-bg-tertiary)}.json-release-cl-scope{font-family:var(--font-mono);color:var(--color-text-tertiary);flex-shrink:0;font-size:10px;padding-top:1px}.json-release-cl-desc{color:var(--color-text-secondary);line-height:var(--line-height-relaxed)}.json-generic-list{display:flex;flex-direction:column;gap:var(--space-2)}.json-generic-item{font-size:var(--font-size-xs);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg-secondary)}.core-page{height:100%;display:flex;flex-direction:column}.core-layout{display:flex;gap:var(--space-4);flex:1;min-height:0}.core-list{width:240px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-1)}.core-list-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);text-align:left;transition:all var(--transition-bounce)}.core-list-item:hover{background:var(--color-bg-tertiary);transform:translate(4px)}.core-list-item--active{background:var(--color-accent-soft);box-shadow:inset 4px 0 0 0 var(--color-accent)}.core-list-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.core-list-type{font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-medium);padding:2px 8px;border-radius:var(--radius-full);background:var(--color-bg-tertiary);color:var(--color-text-tertiary);border:1px solid var(--color-border);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.core-detail{flex:1;min-width:0}.core-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.core-viewer,.core-editor{display:flex;flex-direction:column;height:100%}.core-viewer-header,.core-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-4)}.core-viewer-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.core-viewer-actions{display:flex;align-items:center;gap:var(--space-3)}.core-tabs{display:flex;gap:0;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.core-tab{padding:var(--space-1) var(--space-3);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);transition:all var(--transition-fast);border-right:1px solid var(--color-border)}.core-tab:last-child{border-right:none}.core-tab:hover{background:var(--color-bg-tertiary)}.core-tab--active{background:var(--color-accent-soft);color:var(--color-text);font-weight:var(--font-weight-semibold)}.core-editor-actions{display:flex;gap:var(--space-2)}.core-viewer-content{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;background:var(--color-bg-elevated);padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);overflow-y:auto;flex:1}.core-editor-split{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);flex:1;min-height:0}.core-editor-textarea{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);box-shadow:inset 0 2px 4px #0000000d;resize:none;overflow-y:auto;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.core-editor-textarea:focus{border-color:var(--color-accent);outline:none}.core-editor-preview{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;background:var(--color-bg-elevated);padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);overflow-y:auto}.knowledge-page{height:100%;display:flex;flex-direction:column}.knowledge-search{width:100%;max-width:400px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);font-size:var(--font-size-sm);margin-bottom:var(--space-4);transition:border-color var(--transition-fast)}.knowledge-search:focus{border-color:var(--color-accent);outline:none}.knowledge-layout{display:flex;gap:var(--space-4);flex:1;min-height:0}.knowledge-list{width:320px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-2);overflow-y:auto}.knowledge-card{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);text-align:left;background:var(--color-bg);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.knowledge-card:hover{border-color:var(--color-border-hover)}.knowledge-card--active{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent)}.knowledge-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-1)}.knowledge-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.pin-btn{font-size:var(--font-size-sm);color:var(--color-text-tertiary);padding:2px;border-radius:var(--radius-sm);transition:color var(--transition-fast)}.pin-btn:hover,.pin-btn--active{color:var(--color-accent)}.knowledge-card-desc{font-size:var(--font-size-xs);color:var(--color-text-tertiary);line-height:var(--line-height-normal);margin-bottom:var(--space-2)}.knowledge-card-tags{display:flex;gap:var(--space-1);flex-wrap:wrap}.knowledge-detail{flex:1;min-width:0}.features-page{height:100%;display:flex;flex-direction:column}.features-layout{display:flex;gap:var(--space-4);flex:1;min-height:0}.features-list{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-2);overflow-y:auto}.feature-card{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);text-align:left;background:var(--color-bg-elevated);transition:all var(--transition-bounce)}.feature-card:hover{border-color:var(--color-accent);box-shadow:var(--shadow-lg);transform:translate(4px)}.feature-card--active{border-color:var(--color-accent);box-shadow:inset 4px 0 0 0 var(--color-accent),var(--shadow-md);background:var(--color-accent-soft)}.feature-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-2)}.feature-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.feature-status{font-size:10px;padding:2px 8px;border-radius:var(--radius-full);font-weight:var(--font-weight-semibold);letter-spacing:.04em;text-transform:uppercase;border:1px solid transparent;white-space:nowrap}.feature-status--active,.feature-status--planning{background:#dcfce7;color:#15803d;border-color:#bbf7d0}.feature-status--in_review{background:#dbeafe;color:#1d4ed8;border-color:#bfdbfe}.feature-status--in_progress{background:#ffedd5;color:#c2410c;border-color:#fed7aa}.feature-status--shipped,.feature-status--archived{background:var(--color-bg-tertiary);color:var(--color-text-tertiary);border-color:var(--color-border)}[data-theme=dark] .feature-status--active,[data-theme=dark] .feature-status--planning{background:#4ade8024;color:#86efac;border-color:#4ade8047}[data-theme=dark] .feature-status--in_review{background:#60a5fa29;color:#93c5fd;border-color:#60a5fa47}[data-theme=dark] .feature-status--in_progress{background:#fb923c29;color:#fdba74;border-color:#fb923c47}.features-detail{flex:1;min-width:0;overflow-y:auto}.feature-viewer{display:flex;flex-direction:column;gap:var(--space-4)}.feature-meta{display:flex;gap:var(--space-4);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.feature-tasks{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.feature-section{border-top:1px solid var(--color-border);padding-top:var(--space-4)}.feature-section-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-2)}.feature-section-content{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;color:var(--color-text-secondary)}.brain-page{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--color-bg);position:relative}.brain-header{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-5);border-bottom:1px solid var(--color-border);background:var(--color-bg);z-index:2;flex-shrink:0}.brain-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);letter-spacing:-.01em;margin:0;display:flex;align-items:center;gap:var(--space-2)}.brain-title-mark{font-size:var(--font-size-xl);background:var(--gradient-brand);-webkit-background-clip:text;background-clip:text;color:transparent}.brain-stats{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-variant-numeric:tabular-nums;margin-left:var(--space-2)}.brain-search{flex:1;max-width:280px;padding:var(--space-2) var(--space-3);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text);transition:border-color var(--transition-fast)}.brain-search:focus{outline:none;border-color:var(--color-accent)}.brain-header-actions{display:flex;align-items:center;gap:var(--space-2);margin-left:auto}.brain-btn{padding:var(--space-2) var(--space-3);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast);display:inline-flex;align-items:center;gap:var(--space-1)}.brain-btn:hover{background:var(--color-bg-tertiary);border-color:var(--color-border-hover);color:var(--color-text)}.brain-btn--active{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-accent)}.brain-canvas-wrap{flex:1;min-height:0;position:relative;overflow:hidden;background:var(--color-bg)}[data-theme=dark] .brain-canvas-wrap{background:#151518}.brain-canvas-wrap canvas{display:block}.brain-empty,.brain-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.brain-settings{position:absolute;top:var(--space-3);left:var(--space-3);bottom:var(--space-3);width:280px;background:var(--brain-panel-bg);border:1px solid var(--brain-panel-border);border-radius:var(--radius-md);color:var(--color-text);font-size:var(--font-size-sm);display:flex;flex-direction:column;z-index:5;box-shadow:var(--shadow-lg);--brain-panel-bg: hsl(0 0% 100% / .92);--brain-panel-border: var(--color-border);--brain-panel-divider: var(--color-border);--brain-panel-hover: hsl(0 0% 0% / .04);--brain-panel-hint: var(--color-text-tertiary);--brain-panel-input-bg: var(--color-bg-secondary);--brain-panel-input-border: var(--color-border);--brain-panel-input-text: var(--color-text);--brain-panel-label: var(--color-text-secondary);--brain-panel-toggle-off: hsl(0 0% 0% / .18);--brain-panel-code-bg: hsl(0 0% 0% / .06)}[data-theme=dark] .brain-settings{--brain-panel-bg: rgba(22, 22, 26, .92);--brain-panel-border: rgba(255, 255, 255, .08);--brain-panel-divider: rgba(255, 255, 255, .06);--brain-panel-hover: rgba(255, 255, 255, .04);--brain-panel-hint: rgba(235, 240, 250, .45);--brain-panel-input-bg: rgba(255, 255, 255, .05);--brain-panel-input-border: rgba(255, 255, 255, .1);--brain-panel-input-text: rgba(235, 240, 250, .95);--brain-panel-label: rgba(235, 240, 250, .6);--brain-panel-toggle-off: rgba(255, 255, 255, .15);--brain-panel-code-bg: rgba(255, 255, 255, .08)}.brain-settings-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--brain-panel-divider)}.brain-settings-title{font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-secondary)}.brain-settings-header-actions{display:flex;gap:var(--space-1)}.brain-settings-mini-btn{width:24px;height:24px;background:transparent;border:1px solid var(--brain-panel-input-border);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;font-size:13px;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:all var(--transition-fast)}.brain-settings-mini-btn:hover{background:var(--brain-panel-hover);border-color:var(--color-border-hover);color:var(--color-text)}.brain-settings-body{flex:1;overflow-y:auto;padding:var(--space-2) 0}.brain-section{border-bottom:1px solid var(--brain-panel-divider)}.brain-section:last-child{border-bottom:none}.brain-section-header{width:100%;padding:var(--space-2) var(--space-4);background:transparent;border:none;color:var(--color-text);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.08em;display:flex;align-items:center;gap:var(--space-2);cursor:pointer;-webkit-user-select:none;user-select:none}.brain-section-header:hover{background:var(--brain-panel-hover)}.brain-section-caret{color:var(--color-text-tertiary);font-size:11px;width:12px;display:inline-block}.brain-section-body{padding:var(--space-2) var(--space-4) var(--space-3);display:flex;flex-direction:column;gap:var(--space-2)}.brain-settings-label{font-size:var(--font-size-xs);color:var(--brain-panel-label);text-transform:uppercase;letter-spacing:.06em}.brain-settings-input{background:var(--brain-panel-input-bg);border:1px solid var(--brain-panel-input-border);border-radius:var(--radius-sm);color:var(--brain-panel-input-text);padding:var(--space-2);font-size:var(--font-size-sm);outline:none;transition:border-color var(--transition-fast);width:100%;font-family:inherit}.brain-settings-input:focus{border-color:var(--color-accent)}.brain-settings-hint{font-size:11px;color:var(--brain-panel-hint);margin:0;line-height:1.5}.brain-settings-hint code{font-family:var(--font-mono);font-size:10px;background:var(--brain-panel-code-bg);padding:1px 4px;border-radius:3px;color:var(--color-text-secondary)}.brain-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text);padding:2px 0;cursor:pointer}.brain-toggle{width:30px;height:16px;border-radius:999px;background:var(--brain-panel-toggle-off);position:relative;cursor:pointer;transition:background var(--transition-fast);flex-shrink:0}.brain-toggle--on{background:var(--color-accent)}.brain-toggle-knob{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform var(--transition-fast)}.brain-toggle--on .brain-toggle-knob{transform:translate(14px)}.brain-segmented-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text);padding:2px 0 6px}.brain-segmented-label{font-size:12px;color:var(--color-text-secondary)}.brain-segmented{display:inline-flex;background:var(--brain-panel-toggle-off);border-radius:6px;padding:2px;gap:2px}.brain-segmented-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;color:var(--color-text-secondary);font-size:11px;font-weight:600;letter-spacing:.04em;padding:3px 10px;border-radius:4px;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.brain-segmented-btn:hover{color:var(--color-text)}.brain-segmented-btn--active{background:var(--color-accent);color:#fff}.brain-segmented-btn--active:hover{color:#fff}.brain-slider-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text)}.brain-slider-row input[type=range]{flex:1;max-width:140px;accent-color:var(--color-accent)}.brain-slider-label-text{font-size:12px;color:var(--color-text-secondary)}.brain-groups-list{display:flex;flex-direction:column;gap:var(--space-1)}.brain-group-row{display:flex;align-items:center;gap:var(--space-2);position:relative}.brain-group-color{width:16px;height:16px;border-radius:50%;border:1px solid var(--brain-panel-input-border);cursor:pointer;flex-shrink:0;padding:0}.brain-group-input{flex:1;padding:var(--space-1) var(--space-2);font-size:12px}.brain-swatch-picker{position:absolute;left:0;top:calc(100% + 4px);display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:6px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-sm);z-index:10;box-shadow:var(--shadow-md)}.brain-swatch{width:18px;height:18px;border-radius:50%;border:1px solid var(--color-border);cursor:pointer;padding:0}.brain-swatch:hover{transform:scale(1.15)}.brain-group-add{display:flex;gap:var(--space-1);margin-top:var(--space-2)}.brain-settings-btn{padding:var(--space-2) var(--space-3);background:var(--color-accent-soft);border:1px solid var(--color-accent);border-radius:var(--radius-sm);color:var(--color-accent);font-size:12px;font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.brain-settings-btn:hover:not(:disabled){background:var(--color-accent);color:var(--color-accent-text);border-color:var(--color-accent)}.brain-settings-btn:disabled{opacity:.4;cursor:not-allowed}.brain-legend{position:absolute;bottom:var(--space-4);left:var(--space-4);background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);display:flex;flex-wrap:wrap;gap:var(--space-3);font-size:var(--font-size-xs);color:var(--color-text);max-width:calc(100% - var(--space-8));box-shadow:var(--shadow-md);z-index:3}.brain-legend-item{display:inline-flex;align-items:center;gap:var(--space-1);cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm);transition:background-color var(--transition-fast);-webkit-user-select:none;user-select:none}.brain-legend-item:hover{background:var(--color-bg-tertiary)}.brain-legend-item--off{opacity:.4}.brain-legend-dot{width:10px;height:10px;border-radius:var(--radius-full);flex-shrink:0}.brain-drawer{position:absolute;top:0;right:0;bottom:0;width:380px;background:var(--color-bg-elevated);border-left:1px solid var(--color-border);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;z-index:4;transform:translate(100%);transition:transform var(--transition-normal)}.brain-drawer--open{transform:translate(0)}.brain-drawer-header{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:var(--space-2)}.brain-drawer-close{position:absolute;top:var(--space-3);right:var(--space-3);background:transparent;border:none;color:var(--color-text-tertiary);cursor:pointer;font-size:var(--font-size-lg);line-height:1;padding:var(--space-1);border-radius:var(--radius-sm);transition:background-color var(--transition-fast)}.brain-drawer-close:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.brain-drawer-group-badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:2px var(--space-2);border-radius:var(--radius-full);background:var(--color-bg-secondary);border:1px solid var(--color-border);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);width:fit-content;text-transform:uppercase;letter-spacing:.05em}.brain-drawer-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0;color:var(--color-text);line-height:var(--line-height-tight)}.brain-drawer-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);word-break:break-all}.brain-drawer-body{flex:1;overflow-y:auto;padding:var(--space-4) var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.brain-drawer-section{display:flex;flex-direction:column;gap:var(--space-2)}.brain-drawer-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.06em;margin:0}.brain-meta-grid{display:grid;grid-template-columns:max-content 1fr;gap:var(--space-1) var(--space-3);font-size:var(--font-size-sm)}.brain-meta-key{color:var(--color-text-tertiary);font-variant-numeric:tabular-nums}.brain-meta-val{color:var(--color-text);word-break:break-word}.brain-tag-list{display:flex;flex-wrap:wrap;gap:var(--space-1)}.brain-tag{padding:2px var(--space-2);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-full);font-size:var(--font-size-xs);color:var(--color-text-secondary)}.brain-description{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:var(--line-height-relaxed);margin:0}.brain-related-list{display:flex;flex-direction:column;gap:var(--space-1)}.brain-related-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:transparent;border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-size-sm);color:var(--color-text);text-align:left;transition:all var(--transition-fast)}.brain-related-item:hover{background:var(--color-bg-secondary);border-color:var(--color-border-hover)}.brain-related-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.brain-related-kind{margin-left:auto;font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.brain-drawer-footer{padding:var(--space-3) var(--space-5);border-top:1px solid var(--color-border);display:flex;gap:var(--space-2)}.brain-drawer-footer .brain-btn{flex:1;justify-content:center;background:var(--color-accent);color:var(--color-accent-text);border-color:transparent;font-weight:var(--font-weight-semibold)}.brain-drawer-footer .brain-btn:hover{filter:brightness(1.08);color:var(--color-accent-text)}.council-page{height:100%;display:flex;flex-direction:column;min-height:0;gap:var(--space-3)}.council-page--detail{gap:0}.council-hall{display:flex;flex-direction:column;gap:var(--space-3);min-height:0;flex:1;overflow:hidden}.council-hall-bar{display:flex;align-items:center;gap:var(--space-2)}.council-hall-search{flex:1;display:flex;align-items:center;gap:var(--space-2);padding:8px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);max-width:520px}.council-hall-search:focus-within{border-color:var(--color-accent)}.council-hall-search input{flex:1;border:0;outline:none;background:transparent;color:var(--color-text);font-size:var(--font-size-sm);min-width:0}.council-hall-filter{padding:8px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);font-size:var(--font-size-xs)}.council-hall-count{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-left:auto}.council-hall-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-3);overflow-y:auto;padding:2px}.council-hall-card{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);text-align:left;cursor:pointer;color:var(--color-text);min-height:140px;transition:border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.council-hall-card:hover{border-color:var(--color-accent);transform:translateY(-2px);box-shadow:var(--shadow-md)}.council-hall-card-head{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2)}.council-hall-status{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;font-weight:var(--font-weight-semibold);padding:1px 6px;border-radius:var(--radius-full)}.council-hall-status-dot{width:6px;height:6px;border-radius:50%}.council-hall-status--complete{background:#1eae531f;color:#188c42}.council-hall-status--complete .council-hall-status-dot{background:#1eae53}.council-hall-status--running{background:#2a6df41f;color:#0b4bcb}.council-hall-status--running .council-hall-status-dot{background:#2a6df4}.council-hall-status--synth{background:var(--color-accent-soft);color:var(--color-accent)}.council-hall-status--synth .council-hall-status-dot{background:var(--color-accent)}.council-hall-status--pending{background:var(--color-bg-tertiary);color:var(--color-text-secondary)}.council-hall-status--pending .council-hall-status-dot{background:var(--color-text-tertiary)}.council-hall-rounds{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.council-hall-topic{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);line-height:1.4;color:var(--color-text);margin:0;flex:1;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.council-hall-foot{display:flex;align-items:center;gap:var(--space-2);margin-top:auto}.council-hall-avatars{display:flex;align-items:center}.council-hall-avatar-wrap{display:inline-flex;margin-right:-6px;border:2px solid var(--color-bg);border-radius:50%;position:relative}.council-hall-avatar-more{margin-left:8px;font-family:var(--font-mono);font-size:10px;color:var(--color-text-tertiary)}.council-hall-date{margin-left:auto;font-family:var(--font-mono);font-size:10px;color:var(--color-text-tertiary)}.council-hall-promoted{font-size:14px}.council-empty{padding:var(--space-6);text-align:center;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.council-detail{display:flex;flex-direction:column;gap:var(--space-2);flex:1;min-height:0}.council-detail-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding-bottom:var(--space-2)}.council-detail-back{display:inline-flex;align-items:center;gap:4px;padding:6px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast)}.council-detail-back:hover{border-color:var(--color-accent);background:var(--color-bg-secondary)}.council-detail-meta{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;font-size:var(--font-size-xs);color:var(--color-text-secondary)}.council-detail-rounds{font-family:var(--font-mono);color:var(--color-text-secondary)}.council-detail-date,.council-session-dot{color:var(--color-text-tertiary)}.council-session-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:1px 6px;border:0;border-radius:var(--radius-sm);cursor:pointer}.council-session-id:hover{color:var(--color-text)}.council-detail-body{flex:1;min-height:0;overflow:auto;padding-top:var(--space-3)}.council-tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-border)}.council-tab{padding:8px var(--space-4);border:0;border-bottom:2px solid transparent;background:transparent;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);cursor:pointer;margin-bottom:-1px;transition:color var(--transition-fast),border-color var(--transition-fast)}.council-tab:hover{color:var(--color-text)}.council-tab.is-active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.council-ov{display:flex;flex-direction:column;gap:var(--space-4);max-width:960px;margin:0 auto;padding:var(--space-3) var(--space-2) var(--space-6)}.council-ov-label{font-family:var(--font-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-accent);margin-bottom:6px}.council-ov-problem{padding:var(--space-3) var(--space-4);border-left:3px solid var(--color-accent);background:var(--color-accent-soft);border-radius:var(--radius-sm)}.council-ov-topic{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);line-height:1.4;color:var(--color-text);margin:0}.council-ov-promoted{display:inline-flex;align-items:center;gap:var(--space-1);margin-top:var(--space-2);font-size:var(--font-size-xs);color:#ab7a07}.council-ov-verdict{padding:var(--space-4);border:1px solid var(--color-border);border-top:3px solid var(--color-accent);border-radius:var(--radius-sm);background:var(--color-bg)}.council-ov-verdict-text{font-size:var(--font-size-base);line-height:1.6;color:var(--color-text)}.council-ov-verdict-text p{margin:0}.council-ov-verdict-text p+p{margin-top:var(--space-3)}.council-ov-verdict-text strong{font-weight:var(--font-weight-semibold);color:var(--color-text)}.council-ov-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:6px}.council-ov-sections{display:flex;flex-direction:column;gap:var(--space-3)}.council-ov-card{padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg)}.council-ov-card h3{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-secondary);margin:0 0 var(--space-2)}.council-ov-card--why h3{color:var(--color-accent)}.council-ov-card--minority{border-color:#a73cdd4d;background:#a73cdd05}.council-ov-card--risks{border-color:#f59f0a4d;background:#f59f0a05}.council-ov-pending{padding:var(--space-4);text-align:center;border:1px dashed var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-secondary);color:var(--color-text-secondary)}.council-ov-pending p{margin:0 0 var(--space-3)}.council-ov-appendix{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-secondary)}.council-ov-appendix summary{cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);letter-spacing:.08em;text-transform:uppercase}.council-ov-appendix[open] summary{margin-bottom:var(--space-3)}.council-matrix{display:flex;flex-direction:column;gap:var(--space-2);height:100%}.council-matrix-bar{display:flex;align-items:center;gap:var(--space-3)}.council-matrix-search-input{flex:1;display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);max-width:480px}.council-matrix-search-input:focus-within{border-color:var(--color-accent)}.council-matrix-search-input input{flex:1;border:0;outline:none;background:transparent;color:var(--color-text);font-size:var(--font-size-sm);min-width:0}.council-matrix-search-icon{font-size:12px;color:var(--color-text-tertiary)}.council-matrix-search-clear{border:0;background:transparent;color:var(--color-text-tertiary);font-size:16px;cursor:pointer;padding:0 4px}.council-matrix-search-clear:hover{color:var(--color-text)}.council-matrix-count{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.council-matrix-scroll{flex:1;min-height:0;overflow:auto;padding:2px}.council-matrix-grid{display:grid;gap:6px;align-items:start}.council-matrix-corner{min-height:28px}.council-round-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:4px var(--space-2);border-radius:var(--radius-sm);background:var(--color-bg-secondary);border:1px solid var(--color-border);font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);letter-spacing:.08em;text-transform:uppercase}.council-round-head.is-done{background:#1eae530f;border-color:#1eae5333;color:#16833e}.council-round-head.is-running{background:#2a6df414;border-color:#2a6df44d;color:#0a47c2}.council-matrix-row-head{position:sticky;left:0;z-index:1;display:flex;align-items:center;gap:6px;padding:6px var(--space-2);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-sm);min-width:180px;height:fit-content}.council-matrix-row-id{display:flex;flex-direction:column;gap:2px;min-width:0}.council-matrix-row-name{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:140px}.council-cell{display:flex;flex-direction:column;gap:6px;padding:8px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);text-align:left;cursor:pointer;color:var(--color-text);min-height:56px;max-height:140px;overflow:hidden;position:relative;transition:border-color var(--transition-fast),opacity var(--transition-fast),max-height var(--transition-fast)}.council-cell:hover{border-color:var(--color-border-hover)}.council-cell.is-active{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent);max-height:none;background:var(--color-bg);grid-column:auto}.council-cell.is-dimmed{opacity:.25}.council-cell--empty{background:repeating-linear-gradient(135deg,transparent,transparent 6px,var(--color-bg-secondary) 6px,var(--color-bg-secondary) 12px);border-style:dashed;cursor:default;display:flex;align-items:center;justify-content:center;min-height:56px}.council-cell-empty-label{font-family:var(--font-mono);font-size:9px;color:var(--color-text-tertiary);letter-spacing:.08em}.council-cell-top{display:flex;align-items:center;justify-content:space-between;gap:6px}.council-cell-meta{font-family:var(--font-mono);font-size:9px;color:var(--color-text-tertiary)}.council-cell-exec{font-size:var(--font-size-xs);line-height:1.5;color:var(--color-text);margin:0;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}.council-cell-full{display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--font-size-xs);line-height:1.55}.council-cell-sub{display:flex;flex-direction:column;gap:4px}.council-cell-sub h5{font-family:var(--font-mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0}.council-cell-sub-body p{margin:0 0 4px}.council-cell-sub-body p:last-child{margin-bottom:0}.council-cell-sub-body ul,.council-cell-sub-body ol{margin:0 0 4px;padding-left:var(--space-4)}.council-cell-sub-body li{margin-bottom:2px}.council-cell-sub-body strong{font-weight:var(--font-weight-semibold)}.council-cell-sub-body code{font-family:var(--font-mono);font-size:.92em;background:var(--color-bg-tertiary);padding:0 3px;border-radius:2px}.council-cell-react-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.council-cell-react-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-bg-secondary);font-size:10px;color:var(--color-text)}.council-chip-pos{display:inline-flex;align-items:center;padding:1px 5px;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:9px;font-weight:var(--font-weight-bold);letter-spacing:.05em;line-height:1.4;background:var(--color-bg-tertiary);color:var(--color-text-secondary);border:1px solid var(--color-border)}.council-chip-pos--go{background:#1eae531a;color:#1a9948;border-color:#1eae534d}.council-chip-pos--defer{background:#f59f0a1a;color:#c47f08;border-color:#f59f0a4d}.council-chip-pos--hold{background:#ef43431a;color:#eb1414;border-color:#ef43434d}.council-chip-pos--pivot{background:#2a6df41a;color:#0c56e9;border-color:#2a6df44d}.council-transcript{display:flex;flex-direction:column;gap:var(--space-3);max-width:1000px;margin:0 auto;padding-bottom:var(--space-6)}.council-transcript-searchbar{display:flex;align-items:center;gap:var(--space-3)}.council-transcript-search{flex:1;display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);max-width:520px}.council-transcript-search input{flex:1;border:0;outline:none;background:transparent;color:var(--color-text);font-size:var(--font-size-sm);min-width:0}.council-transcript-count{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.council-transcript-body{display:flex;flex-direction:column;gap:var(--space-3)}.council-transcript-block{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);overflow:hidden}.council-transcript-block.is-highlighted{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent)}.council-transcript-block-head{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);cursor:pointer;background:var(--color-bg-secondary)}.council-transcript-block-head:hover{background:var(--color-bg-tertiary)}.council-transcript-block-title{display:flex;align-items:center;gap:var(--space-2);min-width:0}.council-transcript-block-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);margin:0 0 2px}.council-transcript-block-meta{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.council-transcript-chev{font-size:var(--font-size-lg);color:var(--color-text-tertiary);transition:transform var(--transition-fast)}.council-transcript-chev.is-open{transform:rotate(90deg)}.council-transcript-block-body{padding:var(--space-2) var(--space-3);display:flex;flex-direction:column;gap:var(--space-2);border-top:1px solid var(--color-border)}.council-sheet-section{display:flex;flex-direction:column;gap:var(--space-2)}.council-sheet-section h4{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0}.council-sheet-prose{font-size:var(--font-size-xs);line-height:1.6;color:var(--color-text)}.council-sheet-prose p{margin:0 0 var(--space-2)}.council-sheet-prose p:last-child{margin-bottom:0}.council-sheet-prose ul,.council-sheet-prose ol{margin:0 0 var(--space-2);padding-left:var(--space-5)}.council-sheet-prose li{margin-bottom:2px}.council-sheet-prose code{font-family:var(--font-mono);font-size:.9em;background:var(--color-bg-tertiary);padding:1px 4px;border-radius:3px}.council-sheet-prose strong{font-weight:var(--font-weight-semibold)}.council-sheet-prose mark{background:#fad33859;color:var(--color-text);padding:0 2px;border-radius:2px}.council-sheet-empty{padding:var(--space-3);text-align:center;color:var(--color-text-tertiary);font-size:var(--font-size-sm);font-style:italic}.council-round-panel{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-secondary);display:flex;flex-direction:column;gap:var(--space-2)}.council-round-panel-head{display:flex;justify-content:space-between;align-items:center}.council-round-panel-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);margin:0}.council-round-sub{display:flex;flex-direction:column;gap:4px}.council-round-sub-title{font-family:var(--font-mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0}.council-crosscontext{margin:0;padding:var(--space-2) var(--space-3);border-left:3px solid var(--color-accent);background:var(--color-accent-soft);border-radius:var(--radius-sm);font-size:var(--font-size-xs)}.council-crosscontext strong{display:block;margin-bottom:4px;font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--color-accent)}.council-research-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.council-research-list li{display:flex;justify-content:space-between;padding:4px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);font-size:var(--font-size-xs)}.council-research-date{font-family:var(--font-mono);color:var(--color-text-tertiary)}.council-roundlog{text-align:left;padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg)}.council-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);color:#fff;font-weight:var(--font-weight-bold);line-height:1;flex-shrink:0;box-shadow:inset 0 0 0 1px #fff3}.council-model-badge{display:inline-flex;align-items:center;padding:0 5px;border:1px solid;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:9px;font-weight:var(--font-weight-semibold);letter-spacing:.04em;line-height:1.5;text-transform:lowercase;white-space:nowrap}.council-aspect{font-family:var(--font-mono);font-size:9px;padding:0 5px;border-radius:var(--radius-sm);background:var(--color-bg-tertiary);color:var(--color-text-secondary);white-space:nowrap;line-height:1.5}.council-status{display:inline-flex;align-items:center;gap:4px;padding:1px var(--space-2);border-radius:var(--radius-full);font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-medium);letter-spacing:.04em}.council-status--sm{font-size:10px}.council-status-dot{width:6px;height:6px;border-radius:50%}.council-status--running{background:#2a6df41f;color:#0b50da}.council-status--running .council-status-dot{background:#2a6df4}.council-status--complete{background:#1eae531f;color:#1a9948}.council-status--complete .council-status-dot{background:#1eae53}.council-status--synth{background:var(--color-accent-soft);color:var(--color-accent)}.council-status--synth .council-status-dot{background:var(--color-accent)}.council-status--pending{background:var(--color-bg-tertiary);color:var(--color-text-secondary)}.council-status--pending .council-status-dot{background:var(--color-text-tertiary)}.council-stat-tile{padding:4px 6px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);text-align:center}.council-stat-tile--warning{border-color:#f59f0a4d;background:#f59f0a0a}.council-stat-tile--dissent{border-color:#a73cdd4d;background:#a73cdd0a}.council-stat-tile--brand{border-color:var(--color-accent-soft);background:var(--color-accent-soft)}.council-stat-value{font-family:var(--font-mono);font-size:var(--font-size-base);font-weight:var(--font-weight-bold);color:var(--color-text);line-height:1}.council-stat-tile--warning .council-stat-value{color:#c47f08}.council-stat-tile--dissent .council-stat-value{color:#9725d0}.council-stat-tile--brand .council-stat-value{color:var(--color-accent)}.council-stat-label{font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-tertiary);margin-top:1px}.council-cite-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-bg-secondary);font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text);cursor:pointer;margin:0 2px;vertical-align:baseline}.council-cite-chip:hover{border-color:var(--color-accent);background:var(--color-accent-soft)}.council-cite-round{font-weight:var(--font-weight-bold);color:var(--color-accent)}.council-inline-slug{display:inline;padding:1px 6px;border-radius:var(--radius-sm);background:var(--color-accent-soft);color:var(--color-accent);font-family:var(--font-mono);font-size:11px;font-weight:var(--font-weight-semibold);border:1px solid var(--color-accent-soft);cursor:pointer;margin:0 1px;vertical-align:baseline}.council-inline-slug:hover{background:var(--color-accent-soft)}.council-citation-prose{line-height:1.75}@media(prefers-reduced-motion:reduce){.council-hall-card,.council-cell,.council-transcript-chev{transition:none!important;transform:none!important}}.settings-page{max-width:880px;margin-inline:auto}.settings-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-6);gap:var(--space-4);flex-wrap:wrap}.settings-save-row{display:flex;align-items:center;gap:var(--space-3)}.settings-saved{font-size:var(--font-size-sm);color:var(--color-success);font-weight:var(--font-weight-medium)}.settings-error{font-size:var(--font-size-sm);color:var(--color-error);font-weight:var(--font-weight-medium)}.settings-empty-notice{padding:var(--space-3) var(--space-4);background:var(--color-warning-subtle);border:1px solid var(--color-warning);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text);margin-bottom:var(--space-6)}.settings-section{margin-bottom:var(--space-8);padding:var(--space-5);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.settings-section-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text);margin-bottom:var(--space-4)}.settings-checkboxes{display:flex;flex-direction:column;gap:var(--space-3)}.settings-checkbox-label{display:flex;align-items:center;gap:var(--space-3);font-size:var(--font-size-sm);color:var(--color-text);cursor:pointer}.settings-checkbox{width:var(--space-4);height:var(--space-4);accent-color:var(--color-accent);cursor:pointer}.settings-empty{font-size:var(--font-size-sm);color:var(--color-text-tertiary);padding:var(--space-4);text-align:center}.packs-page{max-width:1600px}.packs-empty{font-size:var(--font-size-sm);color:var(--color-text-tertiary);padding:var(--space-8);text-align:center}.packs-section{margin-bottom:var(--space-8)}.packs-section-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text);margin-bottom:var(--space-4);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}.packs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--space-4)}.packs-card{padding:var(--space-4);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);transition:border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.packs-card--clickable{cursor:pointer;outline:none}.packs-card--clickable:hover{border-color:var(--color-accent);box-shadow:var(--shadow-md);transform:translateY(-2px)}.packs-card--clickable:focus-visible{border-color:var(--color-border-focus);box-shadow:var(--shadow-glow)}.packs-card--clickable:active{transform:scale(.97)}.packs-card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);margin-bottom:var(--space-2)}.packs-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.packs-installed-pill{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-success);background:var(--color-success-subtle);padding:var(--space-1) var(--space-2);border-radius:var(--radius-full);white-space:nowrap;flex-shrink:0}.packs-card-desc{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal);margin-bottom:var(--space-3)}.packs-card-tags{display:flex;flex-wrap:wrap;gap:var(--space-1)}.packs-card-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-3)}.packs-action-btn{font-size:var(--font-size-xs);padding:var(--space-1) var(--space-3);border:1px solid var(--color-border)}.packs-action-btn:active:not(:disabled){transform:scale(.97)}.packs-action-btn:disabled{opacity:.6;cursor:not-allowed}.packs-action-btn--danger{color:var(--color-error);border-color:var(--color-border)}.packs-action-btn--danger:hover:not(:disabled){background:var(--color-error-subtle);color:var(--color-error);border-color:var(--color-error)}.packs-action-error{font-size:var(--font-size-xs);color:var(--color-error)}.packs-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000007a;display:flex;align-items:center;justify-content:center;z-index:1000;padding:var(--space-4);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.packs-modal-panel{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);max-width:560px;width:100%;max-height:80vh;overflow-y:auto;padding:var(--space-6)}.packs-modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-4)}.packs-modal-title-row{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;flex:1}.packs-modal-name{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text);margin:0}.packs-modal-header-actions{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.packs-modal-header-actions .packs-card-actions{margin-top:0}.packs-modal-close{font-size:var(--font-size-xs);color:var(--color-text-tertiary);padding:var(--space-1) var(--space-2);flex-shrink:0}.packs-modal-close:hover{color:var(--color-text)}.packs-modal-desc{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:var(--line-height-normal);margin-bottom:var(--space-4)}.packs-modal-tags{display:flex;flex-wrap:wrap;gap:var(--space-1);margin-bottom:var(--space-5)}.packs-modal-section{margin-bottom:var(--space-5)}.packs-modal-section:last-child{margin-bottom:0}.packs-modal-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--space-2)}.packs-modal-mono{font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text-secondary);background:var(--color-bg-tertiary);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md)}.packs-modal-subskills{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-2)}.packs-modal-subskill{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-3);background:var(--color-bg-tertiary);border-radius:var(--radius-md)}.packs-modal-subskill-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.packs-modal-subskill-desc{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal)}.packs-modal-agents{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-1)}.packs-modal-agent{font-size:var(--font-size-sm);color:var(--color-text-secondary);padding:var(--space-1) 0}:root{--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 28px;--space-8: 32px;--space-10: 40px;--space-11: 44px;--space-12: 48px;--space-13: 52px;--space-16: 76px;--space-20: 80px;--space-24: 120px;--space-28: 144px;--font-family-display: "Plus Jakarta Sans", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Inter Variable", "Inter", "Segoe UI", Roboto, sans-serif;--font-family-text: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-family: var(--font-family-text);--font-mono: "Sometype Mono", "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--zoom: 1;--font-size-xs: calc(12px * var(--zoom));--font-size-sm: calc(14px * var(--zoom));--font-size-base: calc(16px * var(--zoom));--font-size-lg: calc(20px * var(--zoom));--font-size-xl: calc(26px * var(--zoom));--font-size-2xl: calc(40px * var(--zoom));--font-size-3xl: calc(52px * var(--zoom));--font-size-display: calc(76px * var(--zoom));--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-display: 1.05;--line-height-tight: 1.12;--line-height-snug: 1.14;--line-height-heading-sm: 1.18;--line-height-normal: 1.5;--line-height-relaxed: 1.43;--letter-spacing-display: -3.8px;--letter-spacing-heading-lg: -1.82px;--letter-spacing-heading: -1.6px;--letter-spacing-heading-sm: -1.19px;--letter-spacing-subheading: -.91px;--letter-spacing-tight: -.26px;--letter-spacing-body: -.26px;--letter-spacing-caption: -.14px;--radius-sm: 6px;--radius-md: 9px;--radius-lg: 12px;--radius-xl: 16px;--radius-2xl: 24px;--radius-full: 999px;--radius-nav: 9px;--color-ink: #292d34;--color-deep-space: #090c1d;--color-onyx: #202023;--color-graphite: #646464;--color-smoke: #b3b3b3;--color-ash: #e8e8e8;--color-snow: #ffffff;--color-fog: #e9ebf0;--color-tint-blue: #edf6fd;--color-deep-violet: #7b68ee;--color-vivid-purple: #6647f0;--color-rich-plum: #514b81;--color-electric-blue: #0091ff;--color-warm-coral: #ff5b36;--color-obsidian: #000000;--color-porcelain: #f7f8f8;--color-aether-blue: var(--color-electric-blue);--color-azure: var(--color-electric-blue);--color-cobalt-link: var(--color-deep-violet);--color-emerald: hsl(142 71% 40%);--color-cyan-spark: var(--color-electric-blue);--color-amethyst: var(--color-deep-violet);--color-caution: #ff7a00;--color-silver-mist: var(--color-ash);--color-slate: #474747;--color-citrus-finish: #dddc8c;--color-blush-finish: #e8d0d0;--color-indigo-finish: #596680;--color-silver-finish: #e3e4e5;--gradient-citrus: linear-gradient(184deg, #292d34 0%, #dfe74f 33%, #5e9c2a 66%, #0a8619 95%);--gradient-indigo: linear-gradient(184deg, #292d34 20%, #a8d3fb 43%, #0012f9 76%, #2535e2 95%);--gradient-blush: linear-gradient(184deg, #292d34 20%, #f3c4f6 43%, #f500b4 76%, #cc29bc 95%);--gradient-warm-fade: linear-gradient(rgba(246, 233, 232, 0), rgba(255, 91, 54, .23));--gradient-dark-onyx: linear-gradient(97deg, rgb(32, 32, 32) 43.17%, rgb(143, 143, 143) 110.86%);--color-brand-deep: var(--color-vivid-purple);--color-brand-mid: var(--color-deep-violet);--color-brand-vivid: var(--color-deep-violet);--color-brand-hot: var(--color-electric-blue);--gradient-brand: linear-gradient(135deg, #6647f0, #7b68ee);--gradient-brand-subtle: linear-gradient(135deg, rgba(123, 104, 238, .08), rgba(0, 145, 255, .08));--color-bg: var(--color-snow);--color-bg-secondary: var(--color-snow);--color-bg-tertiary: var(--color-fog);--color-bg-elevated: var(--color-snow);--color-text: var(--color-ink);--color-text-secondary: var(--color-graphite);--color-text-tertiary: var(--color-slate);--color-text-on-brand: var(--color-snow);--color-border: var(--color-ash);--color-border-hover: #d4d4d4;--color-border-focus: var(--color-deep-violet);--color-accent: var(--color-deep-violet);--color-accent-text: var(--color-snow);--color-accent-soft: rgba(123, 104, 238, .12);--color-success: hsl(142 71% 40%);--color-success-subtle: hsl(142 71% 95%);--color-warning: var(--color-caution);--color-warning-subtle: hsl(22 100% 95%);--color-error: hsl(0 72% 51%);--color-error-subtle: hsl(0 72% 96%);--color-priority-critical: hsl(0 72% 51%);--color-priority-high: var(--color-caution);--color-priority-medium: var(--color-graphite);--color-priority-low: var(--color-smoke);--color-urgency-critical: hsl(0 72% 51%);--color-urgency-high: var(--color-caution);--color-urgency-medium: var(--color-graphite);--color-urgency-low: var(--color-smoke);--color-quadrant-do: hsl(0 72% 51%);--color-quadrant-schedule: var(--color-deep-violet);--color-quadrant-delegate: var(--color-caution);--color-quadrant-eliminate: var(--color-graphite);--color-status-todo: var(--color-caution);--color-status-in-progress: var(--color-deep-violet);--color-status-in-review: var(--color-vivid-purple);--color-status-completed: hsl(142 71% 40%);--shadow-sm: rgba(13, 21, 48, .04) 0px 4px 4px 0px;--shadow-md: rgba(0, 0, 0, .1) 0px 1px 3px 0px, rgba(0, 0, 0, .1) 0px 1px 2px -1px;--shadow-lg: rgba(18, 43, 165, .04) 0px 1px 1px -.5px, rgba(18, 43, 165, .04) 0px 3px 3px -1.5px, rgba(18, 43, 165, .04) 0px 6px 6px -3px, rgba(18, 43, 165, .04) 0px 12px 12px -6px;--shadow-xl: rgba(0, 0, 0, .12) 0px 12px 32px -8px, rgba(0, 0, 0, .06) 0px 4px 12px -4px;--shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .04);--shadow-glow: 0 0 0 3px rgba(123, 104, 238, .18);--glass-bg: rgba(255, 255, 255, .84);--glass-bg-hover: rgba(255, 255, 255, .94);--glass-border: rgba(232, 232, 232, .8);--glass-blur: blur(16px);--transition-fast: .12s ease;--transition-normal: .24s ease;--transition-slow: .4s ease;--transition-bounce: .5s cubic-bezier(.34, 1.56, .64, 1);--sidebar-width: 220px;--header-height: 52px;--page-max-width: 1200px;--card-padding: 12px}[data-theme=dark]{--color-bg: #14171f;--color-bg-secondary: #1c1f2a;--color-bg-tertiary: #2a2f3d;--color-bg-elevated: #1c1f2a;--color-text: #f5f6fa;--color-text-secondary: #c8ccd9;--color-text-tertiary: #9aa0b3;--color-text-on-brand: var(--color-snow);--color-border: #2f3445;--color-border-hover: #3d4358;--color-border-focus: #9d8cff;--color-accent: #9d8cff;--color-accent-text: var(--color-snow);--color-accent-soft: rgba(157, 140, 255, .18);--gradient-brand: linear-gradient(135deg, #6647f0, #9d8cff);--gradient-brand-subtle: linear-gradient(135deg, rgba(157, 140, 255, .16), rgba(0, 145, 255, .16));--color-success: hsl(142 71% 55%);--color-success-subtle: rgba(39, 200, 90, .14);--color-warning: #ffae3b;--color-warning-subtle: rgba(255, 174, 59, .14);--color-error: #ff5a5f;--color-error-subtle: rgba(255, 90, 95, .14);--color-caution: #ffae3b;--color-status-todo: #ffae3b;--color-status-in-progress: #9d8cff;--color-status-in-review: #c4b5fd;--color-status-completed: #4ade80;--color-priority-critical: #ff5a5f;--color-priority-high: #ffae3b;--color-priority-medium: #c8ccd9;--color-priority-low: #6e7388;--color-urgency-critical: #ff5a5f;--color-urgency-high: #ffae3b;--color-urgency-medium: #c8ccd9;--color-urgency-low: #6e7388;--color-quadrant-do: #ff5a5f;--color-quadrant-schedule: #9d8cff;--color-quadrant-delegate: #ffae3b;--color-quadrant-eliminate: #9aa0b3;--shadow-sm: rgba(0, 0, 0, .32) 0px 1px 2px 0px;--shadow-md: rgba(0, 0, 0, .4) 0px 2px 8px -2px, rgba(0, 0, 0, .28) 0px 1px 3px -1px;--shadow-lg: rgba(0, 0, 0, .5) 0px 8px 24px -8px, rgba(0, 0, 0, .32) 0px 4px 8px -4px;--shadow-xl: rgba(0, 0, 0, .6) 0px 16px 40px -12px, rgba(0, 0, 0, .4) 0px 6px 16px -6px;--shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .32);--shadow-glow: 0 0 0 3px rgba(157, 140, 255, .28);--glass-bg: rgba(28, 31, 42, .78);--glass-bg-hover: rgba(28, 31, 42, .92);--glass-border: rgba(255, 255, 255, .08)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text);background:var(--color-bg)}a{color:inherit;text-decoration:none}button{border:none;background:none;cursor:pointer;font:inherit;color:inherit}input,textarea,select{font:inherit;color:inherit}ul,ol{list-style:none}img,svg{display:block;max-width:100%}:focus-visible{outline:2px solid var(--color-border-focus);outline-offset:2px}html,body{font-family:var(--font-family);font-feature-settings:"calt" 0,"clig" 0,"liga" 0;letter-spacing:var(--letter-spacing-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{background-color:var(--color-bg);color:var(--color-text);overflow:hidden}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-border-hover)}::selection{background:var(--color-accent-soft);color:var(--color-text)}[data-theme=dark] ::selection{background:#9d8cff52;color:var(--color-snow)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-md)}button,input,textarea,select{font-family:inherit;letter-spacing:inherit}.page-title{font-family:var(--font-family-display);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);line-height:var(--line-height-snug);letter-spacing:var(--letter-spacing-heading);margin-bottom:var(--space-5);color:var(--color-text)}[data-theme=dark] .page-title{color:var(--color-text)}.error-state{padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-error-subtle);color:var(--color-error);border:1px solid var(--color-error);font-size:var(--font-size-sm)}.error-boundary{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:var(--space-6);text-align:center;color:var(--color-text);background:var(--color-bg)}.error-boundary h1{font-size:var(--font-size-xl);margin-bottom:var(--space-3)}.error-boundary p{color:var(--color-text-secondary);margin-bottom:var(--space-4);max-width:480px;word-break:break-word}.error-boundary button{padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-text);border:none;cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.error-boundary button:hover{opacity:.9}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.mermaid-stage svg .node rect,.mermaid-stage svg .node polygon,.mermaid-stage svg .node path,.mermaid-stage svg .node circle{stroke-width:1.5px!important}.mermaid-stage svg .node.done>rect,.mermaid-stage svg .node.done>polygon,.mermaid-stage svg .node.done>path{fill:#dcfce7!important;stroke:#15803d!important}.mermaid-stage svg .node.done foreignObject *,.mermaid-stage svg .node.done text{color:#14532d!important;fill:#14532d!important}.mermaid-stage svg .node.active>rect,.mermaid-stage svg .node.active>polygon,.mermaid-stage svg .node.active>path{fill:#fef3c7!important;stroke:#a16207!important}.mermaid-stage svg .node.active foreignObject *,.mermaid-stage svg .node.active text{color:#713f12!important;fill:#713f12!important}.mermaid-stage svg .node.todo>rect,.mermaid-stage svg .node.todo>polygon,.mermaid-stage svg .node.todo>path{fill:#f3f4f6!important;stroke:#6b7280!important}.mermaid-stage svg .node.todo foreignObject *,.mermaid-stage svg .node.todo text{color:#374151!important;fill:#374151!important}.mermaid-stage svg .node.blocked>rect,.mermaid-stage svg .node.blocked>polygon,.mermaid-stage svg .node.blocked>path{fill:#fee2e2!important;stroke:#b91c1c!important}.mermaid-stage svg .node.blocked foreignObject *,.mermaid-stage svg .node.blocked text{color:#7f1d1d!important;fill:#7f1d1d!important}.mermaid-stage svg .cluster rect,.mermaid-stage svg .cluster polygon{fill:var(--color-bg-tertiary)!important;stroke:var(--color-border)!important;stroke-width:1px!important;rx:12!important;ry:12!important}.mermaid-stage svg .cluster-label foreignObject *,.mermaid-stage svg .cluster-label text{color:var(--color-text-secondary)!important;fill:var(--color-text-secondary)!important;font-weight:600!important}.mermaid-stage svg .edgeLabel,.mermaid-stage svg .edgeLabel rect,.mermaid-stage svg .edgeLabel foreignObject *,.mermaid-stage svg .edgeLabel text{background:var(--color-bg-secondary)!important;color:var(--color-text-secondary)!important;fill:var(--color-text-secondary)!important}.mermaid-stage svg .edgePath path{stroke:var(--color-text-tertiary)!important;stroke-width:1.5px!important}.mermaid-stage svg .arrowheadPath,.mermaid-stage svg .marker{fill:var(--color-text-tertiary)!important;stroke:var(--color-text-tertiary)!important}[data-theme=dark] .mermaid-stage svg .node.done>rect,[data-theme=dark] .mermaid-stage svg .node.done>polygon,[data-theme=dark] .mermaid-stage svg .node.done>path{fill:#4ade8029!important;stroke:#4ade80!important}[data-theme=dark] .mermaid-stage svg .node.done foreignObject *,[data-theme=dark] .mermaid-stage svg .node.done text{color:#86efac!important;fill:#86efac!important}[data-theme=dark] .mermaid-stage svg .node.active>rect,[data-theme=dark] .mermaid-stage svg .node.active>polygon,[data-theme=dark] .mermaid-stage svg .node.active>path{fill:#fbbf2429!important;stroke:#fbbf24!important}[data-theme=dark] .mermaid-stage svg .node.active foreignObject *,[data-theme=dark] .mermaid-stage svg .node.active text{color:#fcd34d!important;fill:#fcd34d!important}[data-theme=dark] .mermaid-stage svg .node.todo>rect,[data-theme=dark] .mermaid-stage svg .node.todo>polygon,[data-theme=dark] .mermaid-stage svg .node.todo>path{fill:#9aa0b31f!important;stroke:#6e7388!important}[data-theme=dark] .mermaid-stage svg .node.todo foreignObject *,[data-theme=dark] .mermaid-stage svg .node.todo text{color:#c8ccd9!important;fill:#c8ccd9!important}[data-theme=dark] .mermaid-stage svg .node.blocked>rect,[data-theme=dark] .mermaid-stage svg .node.blocked>polygon,[data-theme=dark] .mermaid-stage svg .node.blocked>path{fill:#f8717129!important;stroke:#f87171!important}[data-theme=dark] .mermaid-stage svg .node.blocked foreignObject *,[data-theme=dark] .mermaid-stage svg .node.blocked text{color:#fca5a5!important;fill:#fca5a5!important}.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>rect,.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>polygon,.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>path{fill:#ede9fe!important;stroke:#7b68ee!important}.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) foreignObject *,.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) text{color:#5b21b6!important;fill:#5b21b6!important}[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>rect,[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>polygon,[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>path{fill:#9d8cff2e!important;stroke:#9d8cff!important}[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) foreignObject *,[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) text{color:#c4b5fd!important;fill:#c4b5fd!important}@keyframes slide-up-fade{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-stagger{animation:slide-up-fade .28s cubic-bezier(.4,0,.2,1) both}.animate-stagger-1{animation-delay:30ms}.animate-stagger-2{animation-delay:60ms}.animate-stagger-3{animation-delay:90ms}.animate-stagger-4{animation-delay:.12s}.animate-stagger-5{animation-delay:.15s}.animate-stagger-6{animation-delay:.18s}.animate-stagger-7{animation-delay:.21s}.animate-stagger-8{animation-delay:.24s}