@musnows/scriverse 0.7.12 → 0.8.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 (46) hide show
  1. package/README.en.md +4 -0
  2. package/README.md +5 -0
  3. package/dist/ai-chat-tab-limit.js +14 -0
  4. package/dist/ai-chat-tab-limit.js.map +1 -0
  5. package/dist/ai-protocol.js +10 -2
  6. package/dist/ai-protocol.js.map +1 -1
  7. package/dist/ai-retry.js +52 -0
  8. package/dist/ai-retry.js.map +1 -0
  9. package/dist/ai.js +611 -152
  10. package/dist/ai.js.map +1 -1
  11. package/dist/app.js +41 -12
  12. package/dist/app.js.map +1 -1
  13. package/dist/cli-contract.js +2 -1
  14. package/dist/cli-contract.js.map +1 -1
  15. package/dist/database.js +127 -2
  16. package/dist/database.js.map +1 -1
  17. package/dist/domain.js +1 -0
  18. package/dist/domain.js.map +1 -1
  19. package/dist/public/ai-chat-tabs.js +75 -0
  20. package/dist/public/ai-request-manager.js +32 -15
  21. package/dist/public/app.js +1340 -315
  22. package/dist/public/background-task-center.d.ts +9 -0
  23. package/dist/public/background-task-center.js +18 -0
  24. package/dist/public/chapter-search.d.ts +6 -0
  25. package/dist/public/chapter-search.js +23 -0
  26. package/dist/public/character-filters.d.ts +3 -1
  27. package/dist/public/character-filters.js +17 -2
  28. package/dist/public/character-version.js +1 -0
  29. package/dist/public/display-labels.d.ts +1 -0
  30. package/dist/public/display-labels.js +5 -1
  31. package/dist/public/index.html +68 -27
  32. package/dist/public/model-config.d.ts +3 -1
  33. package/dist/public/model-config.js +13 -0
  34. package/dist/public/relationship-filters.d.ts +5 -0
  35. package/dist/public/relationship-filters.js +31 -0
  36. package/dist/public/relationship-graph.js +289 -58
  37. package/dist/public/stream-typewriter.d.ts +12 -1
  38. package/dist/public/stream-typewriter.js +65 -5
  39. package/dist/public/styles.css +239 -45
  40. package/dist/server-runtime.js +6 -0
  41. package/dist/server-runtime.js.map +1 -1
  42. package/dist/store.js +264 -65
  43. package/dist/store.js.map +1 -1
  44. package/dist/version.js +6 -1
  45. package/dist/version.js.map +1 -1
  46. package/package.json +1 -1
@@ -371,6 +371,9 @@ input[type="checkbox"][hidden] { display: none; }
371
371
  radial-gradient(circle at 50% -20%, var(--app-glow), transparent 45%),
372
372
  var(--paper);
373
373
  }
374
+ .app-shell:not(.shelf-mode):not(.ai-workspace-mode) { grid-template-columns: var(--left-panel-width) minmax(480px, 1fr); }
375
+ .app-shell:not(.shelf-mode):not(.ai-workspace-mode) .ai-panel { display: none; }
376
+ .app-shell.ai-workspace-mode > :is(.topbar, .left-panel, .main-panel) { visibility: hidden; pointer-events: none; }
374
377
 
375
378
  .topbar {
376
379
  grid-column: 1 / -1;
@@ -552,7 +555,7 @@ input[type="checkbox"][hidden] { display: none; }
552
555
  .left-panel, .ai-panel { position: relative; min-height: 0; background: var(--panel); }
553
556
  .left-panel { display: flex; flex-direction: column; border-right: 1px solid var(--line); padding: 0; overflow: hidden; }
554
557
  .left-panel-body { flex: 1 1 auto; min-height: 0; padding: 18px 14px 16px; overflow-y: auto; }
555
- .ai-panel { border-left: 1px solid var(--line); display: flex; flex-direction: column; padding: 14px 16px 18px; min-width: 0; }
558
+ .ai-panel { container-type: inline-size; border-left: 1px solid var(--line); display: flex; flex-direction: column; padding: 14px 16px 18px; min-width: 0; }
556
559
  .panel-collapse-button { z-index: 8; flex: 0 0 auto; width: 24px; height: 24px; padding: 0; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--muted); font-size: 18px; line-height: 1; }
557
560
  .ai-heading #ai-panel-toggle { flex-basis: 30px; width: 30px; height: 30px; }
558
561
  .panel-resize-handle { position: absolute; z-index: 7; top: 0; bottom: 0; width: 7px; cursor: col-resize; touch-action: none; }
@@ -976,8 +979,9 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
976
979
  .replace-dialog > form { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; width: 100%; min-height: 0; }
977
980
  .replace-dialog-body { display: grid; min-height: 0; gap: 16px; padding: 20px 24px 6px; overflow-y: auto; }
978
981
  .replace-field { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
979
- .replace-field input, .replace-field textarea { width: 100%; padding: 9px 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 13px; line-height: 1.6; }
982
+ .replace-field input, .replace-field textarea, .replace-field select { width: 100%; padding: 9px 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 13px; line-height: 1.6; }
980
983
  .replace-field textarea { min-height: 96px; resize: vertical; }
984
+ .replace-field select:disabled { cursor: not-allowed; opacity: .55; }
981
985
  .replace-scope-fieldset { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
982
986
  .replace-scope-fieldset legend { padding: 0 6px; color: var(--ink); font-size: 12px; font-weight: 650; }
983
987
  .replace-scope-fieldset legend, .replace-scope-fieldset > p { grid-column: 1 / -1; }
@@ -991,6 +995,7 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
991
995
  .replace-scope-option input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
992
996
  .replace-permission-note { margin: 0; color: var(--accent-dark); font-size: 10px; line-height: 1.5; }
993
997
  .replace-permission-note:empty { display: none; }
998
+ .replace-range-note { margin: -8px 0 0; color: var(--muted); font-size: 10px; line-height: 1.5; }
994
999
  .replace-dialog .primary-button:disabled { cursor: not-allowed; opacity: .42; }
995
1000
  .search-results { display: grid; gap: 8px; max-height: min(52vh, 480px); overflow: auto; }
996
1001
  .search-results-summary { margin: 0; padding: 2px 2px 5px; color: var(--muted); font-size: 10px; }
@@ -1285,6 +1290,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1285
1290
  .module-nav .ai-analysis-entry,
1286
1291
  .module-nav .ai-analysis-entry:hover,
1287
1292
  .module-nav .ai-analysis-entry.active { background: transparent; color: var(--accent-dark); font-weight: 650; }
1293
+ .module-nav .ai-assistant-entry,
1294
+ .module-nav .ai-assistant-entry:hover,
1295
+ .module-nav .ai-assistant-entry.active { background: color-mix(in srgb, var(--accent) 10%, var(--surface)); color: var(--accent-dark); font-weight: 650; }
1288
1296
  #module-more-button { grid-column: 2; color: var(--accent-dark); text-align: center; }
1289
1297
  .panel-heading { display: flex; align-items: center; gap: 8px; padding: 15px 0 9px 7px; color: var(--muted); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
1290
1298
  .panel-heading-actions { display: flex; align-items: center; gap: 7px; margin-left: auto; }
@@ -1303,7 +1311,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1303
1311
  .chapter-add-button { flex: none; }
1304
1312
  .volume-chapters { display: block; }
1305
1313
  .volume-node.is-collapsed .volume-chapters { display: none; }
1306
- .chapter-node { display: grid; grid-template-columns: minmax(0, 1fr) max-content; gap: 8px; width: calc(100% + 6px); padding: 9px 8px 9px 20px; border: 0; background: transparent; border-radius: 4px; text-align: left; font-size: 12px; }
1314
+ .chapter-node { display: grid; grid-template-columns: minmax(0, 1fr) max-content; gap: 8px; width: calc(100% + 6px); padding: 9px 8px 9px 24px; border: 0; background: transparent; border-radius: 4px; text-align: left; font-size: 12px; }
1307
1315
  .chapter-node:hover, .chapter-node.active { background: var(--row-active); }
1308
1316
  .chapter-node[draggable="true"] { cursor: grab; }
1309
1317
  .chapter-node.is-dragging { opacity: .42; cursor: grabbing; }
@@ -1360,12 +1368,26 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1360
1368
 
1361
1369
  .hidden { display: none !important; }
1362
1370
  .editor-view { container-name: editor-workspace; container-type: inline-size; display: grid; grid-template-rows: auto auto minmax(0, 1fr); height: 100%; }
1363
- .editor-toolbar { display: grid; grid-template-areas: "path path" "title actions"; grid-template-columns: minmax(0, 1fr) auto; align-items: flex-end; column-gap: 20px; row-gap: 6px; padding: 25px 7% 18px; border-bottom: 1px solid var(--line); }
1371
+ .editor-toolbar { position: relative; display: grid; grid-template-areas: "path path" "title actions"; grid-template-columns: minmax(0, 1fr) auto; align-items: flex-end; column-gap: 20px; row-gap: 6px; padding: 25px 7% 18px; border-bottom: 1px solid var(--line); }
1364
1372
  #chapter-path { grid-area: path; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1365
1373
  .chapter-title { grid-area: title; display: block; width: 100%; min-width: 0; border: 0; border-radius: 0; background: transparent; font-size: 27px; padding: 0; }
1366
1374
  .chapter-title:focus { box-shadow: none; border-bottom: 1px solid var(--accent); }
1367
1375
  .editor-actions { grid-area: actions; display: flex; align-items: center; gap: 10px; }
1368
1376
  .chapter-stats { color: var(--muted); font-size: 11px; }
1377
+ .chapter-search-panel { position: absolute; z-index: 8; top: calc(100% + 8px); right: 7%; display: grid; width: min(520px, calc(100% - 14%)); gap: 12px; padding: 14px; border: 1px solid var(--line-strong); outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 7px; background: var(--panel); box-shadow: 0 16px 36px rgba(36, 30, 24, .22); }
1378
+ .chapter-search-panel-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
1379
+ .chapter-search-panel-header .eyebrow { margin-bottom: 4px; }
1380
+ .chapter-search-panel-header h2 { margin: 0; color: var(--ink); font-size: 15px; font-weight: 650; }
1381
+ .chapter-search-panel-header p { margin: 4px 0 0; color: var(--muted); font-size: 10px; line-height: 1.45; }
1382
+ .chapter-search-panel-header .dialog-close { flex: 0 0 auto; }
1383
+ .chapter-search-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
1384
+ .chapter-search-fields label { display: grid; gap: 5px; min-width: 0; color: var(--muted); font-size: 10px; }
1385
+ .chapter-search-fields input { width: 100%; min-width: 0; min-height: 34px; padding: 7px 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 12px; }
1386
+ .chapter-search-fields input:focus { border-color: var(--accent); outline: none; box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 16%, transparent); }
1387
+ .chapter-search-actions { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 6px; }
1388
+ .chapter-search-actions > span { flex: 1 1 120px; min-width: 0; color: var(--muted); font-size: 10px; line-height: 1.4; }
1389
+ .chapter-search-actions button { min-height: 32px; padding: 6px 9px; font-size: 10px; }
1390
+ .chapter-search-actions button:disabled { cursor: not-allowed; opacity: .45; }
1369
1391
  .chapter-foreshadow-reminder { --reminder-color: #80713d; display: grid; grid-template-areas: "summary actions" "details details"; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 9px 18px; padding: 10px 7%; border-bottom: 1px solid color-mix(in srgb, var(--reminder-color) 32%, var(--line)); background: color-mix(in srgb, var(--reminder-color) 7%, var(--surface)); }
1370
1392
  .chapter-foreshadow-reminder[data-role="payoff"] { --reminder-color: #49745c; }
1371
1393
  .chapter-foreshadow-reminder-summary { grid-area: summary; display: flex; min-width: 0; align-items: center; gap: 10px; }
@@ -1465,6 +1487,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1465
1487
  .entity-lifecycle-badge { display: inline-flex; align-items: center; min-height: 20px; margin-left: 7px; padding: 2px 7px; border: 1px solid color-mix(in srgb, var(--accent) 58%, var(--line)); border-radius: 10px; background: color-mix(in srgb, var(--accent) 13%, var(--surface)); color: var(--accent-dark); font-size: 9px; font-weight: 650; line-height: 1; vertical-align: middle; white-space: nowrap; }
1466
1488
  .character-lock-badge svg { width: 11px; height: 11px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }
1467
1489
  .character-filter-toolbar { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)) auto; gap: 12px; align-items: start; width: 100%; min-width: 0; box-sizing: border-box; margin-bottom: 18px; padding: 12px 14px; border: 1px solid var(--line); background: var(--surface-soft); }
1490
+ .character-filter-toolbar-with-extra-filters { grid-template-columns: repeat(4, minmax(0, 1fr)) auto; }
1468
1491
  .character-filter-dropdown { position: relative; min-width: 0; }
1469
1492
  .character-filter-dropdown summary { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 38px; padding: 0 11px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); cursor: pointer; list-style: none; }
1470
1493
  .character-filter-dropdown summary::-webkit-details-marker { display: none; }
@@ -1572,6 +1595,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1572
1595
  .platform-image-tool-field select { width: 100%; height: 36px; min-height: 36px; padding: 8px 10px; font-size: 12px; }
1573
1596
  .platform-image-tool-panel .config-save-button { flex: 0 0 auto; min-height: 36px; padding: 8px 14px; }
1574
1597
  .task-auto-run-panel {
1598
+ position: relative;
1575
1599
  display: grid;
1576
1600
  grid-template-columns: minmax(0, 1fr) 268px;
1577
1601
  gap: 12px;
@@ -1618,14 +1642,14 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1618
1642
  .task-auto-run-alert strong { color: var(--ink); }
1619
1643
  .task-auto-run-alert span, .task-auto-run-alert small { color: var(--muted); }
1620
1644
  .task-auto-run-progress {
1645
+ position: absolute;
1646
+ top: 50%;
1647
+ right: 90px;
1621
1648
  display: grid;
1622
- grid-column: 2;
1623
- grid-row: 2 / 5;
1624
- align-self: center;
1625
- justify-self: start;
1626
- width: 192px;
1649
+ width: 184px;
1650
+ transform: translateY(-50%);
1627
1651
  }
1628
- .task-auto-run-progress-ring { position: relative; display: grid; width: 192px; height: 192px; place-items: center; }
1652
+ .task-auto-run-progress-ring { position: relative; display: grid; width: 184px; height: 184px; place-items: center; }
1629
1653
  .task-auto-run-progress-ring svg { display: block; width: 100%; height: 100%; overflow: visible; transform: rotate(-90deg); }
1630
1654
  .task-auto-run-progress-ring-track, .task-auto-run-progress-ring-value { fill: none; stroke-width: 8; }
1631
1655
  .task-auto-run-progress-ring-track { stroke: color-mix(in srgb, var(--line) 72%, transparent); }
@@ -1788,6 +1812,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1788
1812
  .character-extraction-editor-toolbar { justify-content: flex-end; }
1789
1813
  .character-extraction-editor-toolbar > span { margin-right: auto; color: var(--accent-dark); font-weight: 600; }
1790
1814
  .character-extraction-editor-toolbar button { padding: 6px 9px; font-size: 9px; }
1815
+ .character-extraction-apply-button { flex: 0 0 auto; }
1816
+ .character-extraction-apply-note { margin: -5px 0 0; color: var(--muted); font-size: 9px; line-height: 1.5; }
1791
1817
  .character-extraction-candidate-list { display: grid; gap: 9px; min-width: 0; }
1792
1818
  .character-extraction-candidate { display: grid; gap: 10px; min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); transition: opacity .15s ease, border-color .15s ease; }
1793
1819
  .character-extraction-candidate.is-skipped { opacity: .7; }
@@ -2092,6 +2118,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2092
2118
  .relationship-network.is-panning { cursor: grabbing; }
2093
2119
  .relationship-network-stage { contain: layout paint style; will-change: transform; }
2094
2120
  .relationship-network-stage.is-view-animating { transition: transform .34s cubic-bezier(.22,.78,.3,1); }
2121
+ .relationship-network-edge-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
2095
2122
  .relationship-network svg { overflow: visible; }
2096
2123
  .relationship-network .mind-edge-hit {
2097
2124
  stroke-width: 14px;
@@ -2233,6 +2260,13 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2233
2260
  z-index: 3;
2234
2261
  will-change: left, top;
2235
2262
  }
2263
+ .relationship-network.is-dense .obsidian-node:not(:hover):not(:focus-visible):not(.is-hovered):not(.is-selected):not(.is-edge-endpoint) {
2264
+ box-shadow: none;
2265
+ }
2266
+ .relationship-network.is-dense .obsidian-node {
2267
+ transition: opacity .08s linear, transform .08s linear;
2268
+ will-change: auto;
2269
+ }
2236
2270
  .relationship-network .mind-node.is-settling { animation: relationship-node-settle .18s ease-out; }
2237
2271
  .relationship-network-focus, .relationship-network-help { position: absolute; z-index: 6; color: var(--relationship-focus); pointer-events: none; }
2238
2272
  .relationship-network-focus { top: 14px; left: 16px; display: grid; gap: 3px; }
@@ -2376,10 +2410,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2376
2410
  .galaxy-node span { opacity: 0; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 3px 6px; border-radius: 4px; background: rgba(5,7,13,.68); font-size: 10px; text-align: center; text-shadow: 0 1px 3px #000; transform: translate3d(0, var(--node-label-offset, 0px), 0); transition: opacity .14s ease; }
2377
2411
  .galaxy-node.show-label span, .galaxy-node:hover span, .galaxy-node:focus-visible span, .galaxy-node.is-selected span, .galaxy-node.is-related span, .galaxy-node.is-edge-endpoint span { opacity: 1; }.galaxy-node.is-selected i { background: #fff4bd; box-shadow: 0 0 5px #fff, 0 0 18px #ffc86b, 0 0 42px rgba(255,173,66,.82); }.galaxy-node.is-related i { background: #d8f4ff; box-shadow: 0 0 4px #fff, 0 0 15px #438cff, 0 0 28px rgba(67,140,255,.56); }.galaxy-node.is-edge-endpoint i { background: #fff; box-shadow: 0 0 6px #fff, 0 0 22px #6fcaff, 0 0 48px rgba(67,140,255,.92); }.galaxy-node.is-dimmed { opacity: .16; }.galaxy-node.is-selected, .galaxy-node.is-related, .galaxy-node.is-edge-endpoint { z-index: 2; }
2378
2412
  .galaxy-node.is-dragging { cursor: grabbing; z-index: 6; }
2379
- .galaxy-close { position: fixed; z-index: 8; top: 22px; right: 25px; width: 42px; height: 42px; border: 1px solid rgba(255,255,255,.22); border-radius: 50%; background: rgba(5,7,13,.62); color: #fff; font-size: 25px; }
2413
+ .galaxy-shell.is-motion-off .galaxy-background, .galaxy-shell.is-motion-off .galaxy-node i, .galaxy-shell.is-motion-off .galaxy-node span { transition: none; animation: none; }
2414
+ .galaxy-close { position: fixed; z-index: 8; top: 22px; right: 25px; width: 36px; height: 36px; min-height: 0; border: 1px solid rgba(255,255,255,.22); border-radius: 50%; background: rgba(5,7,13,.62); color: #fff; font-size: 21px; }
2380
2415
  .galaxy-stats { position: fixed; z-index: 7; left: 22px; bottom: 20px; color: rgba(235,245,255,.82); font-size: 11px; }
2381
2416
  .relationship-node-search.is-galaxy { position: fixed; z-index: 9; top: 22px; left: 50%; width: min(320px, calc(100vw - 180px)); max-width: none; min-width: 0; margin: 0; color: rgba(220,235,250,.72); transform: translateX(-50%); }
2382
- .relationship-node-search.is-galaxy input { min-height: 42px; border-color: rgba(255,255,255,.18); border-radius: 7px; background: rgba(5,7,13,.74); color: #eef6ff; box-shadow: 0 8px 24px rgba(0,0,0,.26); backdrop-filter: blur(14px); font-size: 12px; }
2417
+ .relationship-node-search.is-galaxy input { min-height: 36px; padding-block: 5px; border-color: rgba(255,255,255,.18); border-radius: 7px; background: rgba(5,7,13,.74); color: #eef6ff; box-shadow: 0 8px 24px rgba(0,0,0,.26); backdrop-filter: blur(14px); font-size: 12px; }
2383
2418
  .relationship-node-search.is-galaxy input::placeholder { color: rgba(220,235,250,.58); }
2384
2419
  .relationship-node-search.is-galaxy input:focus { border-color: rgba(132,197,255,.66); outline-color: rgba(97,184,255,.24); }
2385
2420
  .relationship-node-search.is-galaxy .relationship-node-search-results { border-color: rgba(255,255,255,.16); background: rgba(5,7,13,.9); box-shadow: 0 14px 34px rgba(0,0,0,.42); backdrop-filter: blur(16px); }
@@ -2388,6 +2423,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2388
2423
  .relationship-node-search.is-galaxy .relationship-node-search-results button small, .relationship-node-search.is-galaxy .relationship-node-search-empty { color: rgba(220,235,250,.64); }
2389
2424
  .galaxy-controls { position: fixed; z-index: 7; right: 23px; top: 50%; display: grid; width: 104px; gap: 7px; transform: translateY(-50%); padding: 10px; border: 1px solid rgba(255,255,255,.12); border-radius: 8px; background: rgba(5,7,13,.66); backdrop-filter: blur(12px); }
2390
2425
  .galaxy-controls button { border: 1px solid rgba(255,255,255,.14); border-radius: 5px; padding: 7px; background: rgba(255,255,255,.05); color: #dcecff; font-size: 9px; }
2426
+ .galaxy-controls button:disabled { opacity: .56; cursor: not-allowed; }
2427
+ .galaxy-motion-field { display: grid; gap: 4px; color: rgba(220,235,250,.72); font-size: 8px; }
2428
+ .galaxy-motion-field select { width: 100%; min-height: 28px; padding: 5px 22px 5px 7px; border: 1px solid rgba(255,255,255,.14); border-radius: 5px; background-color: rgba(255,255,255,.05); color: #dcecff; color-scheme: dark; font: 9px/1.25 var(--font-latin), monospace; }
2429
+ .galaxy-motion-field select option { background: #101722; color: #dcecff; }
2430
+ .galaxy-motion-status { min-height: 20px; color: rgba(220,235,250,.58); font-size: 8px; line-height: 1.35; }
2391
2431
  .galaxy-legend { position: fixed; z-index: 7; right: 22px; bottom: 18px; display: grid; grid-template-columns: 1fr 1fr; gap: 7px 12px; margin: 0; padding: 11px; list-style: none; border: 1px solid rgba(255,255,255,.12); border-radius: 7px; background: rgba(5,7,13,.66); color: rgba(235,245,255,.8); font-size: 9px; }.galaxy-legend li { display: flex; align-items: center; gap: 5px; }
2392
2432
  .galaxy-detail { position: fixed; z-index: 7; left: 22px; top: 22px; width: min(300px, 30vw); max-height: 55vh; overflow: auto; padding: 15px; border: 1px solid rgba(255,255,255,.14); border-radius: 8px; background: rgba(5,7,13,.74); backdrop-filter: blur(14px); }.galaxy-detail strong, .galaxy-detail small { display: block; }.galaxy-detail strong { font-size: 18px; }.galaxy-detail small, .galaxy-detail p { color: rgba(220,235,250,.65); font-size: 9px; }.galaxy-detail ul { display: grid; gap: 7px; padding: 0; list-style: none; font-size: 9px; }.galaxy-detail li { display: flex; align-items: center; gap: 6px; }
2393
2433
  .galaxy-shell .relationship-node-search, .galaxy-shell .relationship-node-search * { cursor: auto; }
@@ -2403,11 +2443,70 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2403
2443
  .ai-heading-title { display: flex; flex: 0 0 auto; gap: 8px; align-items: center; }
2404
2444
  .ai-heading-title strong { white-space: nowrap; }
2405
2445
  .ai-heading-actions { display: flex; align-items: center; min-width: 0; margin-left: auto; gap: 5px; }
2406
- .ai-heading-actions > span { min-width: 0; max-width: 88px; overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
2407
2446
  .ai-heading-actions button { min-width: 28px; height: 28px; padding: 0 7px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 9px; }
2408
2447
  .ai-heading-action-icon { display: block; width: 15px; height: 15px; margin: auto; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }
2409
2448
  .ai-heading-actions #ai-new-conversation { padding: 0; font: 17px/1 var(--font-latin), monospace; }
2410
2449
  .ai-heading-actions button:hover, .ai-heading-actions button[aria-expanded="true"] { background: var(--paper-deep); color: var(--ink); }
2450
+ .ai-heading-actions .ai-conversation-switcher { display: flex; align-items: center; gap: 6px; width: min(116px, 29vw); min-width: 0; max-width: 116px; padding-inline: 8px 6px; color: var(--ink); text-align: left; }
2451
+ .ai-conversation-switcher > span { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2452
+ .ai-conversation-switcher > small { display: grid; place-items: center; width: 16px; height: 16px; flex: 0 0 auto; border-radius: 50%; background: var(--paper-deep); color: var(--muted); font: 9px/1 var(--font-latin), monospace; }
2453
+ .ai-conversation-switcher > svg { width: 9px; height: 6px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5; }
2454
+ .ai-conversation-switcher.has-background-activity > small { background: var(--accent); color: #fff; }
2455
+ .ai-panel.is-single-conversation .ai-conversation-switcher { cursor: default; border-color: transparent; background: transparent; }
2456
+ .ai-panel.is-single-conversation .ai-conversation-switcher > small,
2457
+ .ai-panel.is-single-conversation .ai-conversation-switcher > svg { display: none; }
2458
+ .ai-conversation-switcher-menu { position: absolute; z-index: 46; top: 51px; right: 12px; display: grid; width: min(340px, calc(100% - 24px)); max-height: min(520px, calc(100% - 70px)); overflow: hidden; border: 1px solid var(--line); border-radius: 7px; background: var(--panel); box-shadow: 0 16px 38px rgba(36, 30, 24, .2); }
2459
+ .ai-conversation-switcher-menu > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 12px 10px; border-bottom: 1px solid var(--line); }
2460
+ .ai-conversation-switcher-menu > header > div { display: grid; gap: 2px; }
2461
+ .ai-conversation-switcher-menu > header strong { font-size: 12px; }
2462
+ .ai-conversation-switcher-menu > header small { color: var(--muted); font: 9px/1.3 var(--font-latin), monospace; }
2463
+ .ai-conversation-switcher-menu > header button,
2464
+ .ai-open-conversation-close { width: 28px; min-width: 28px; height: 28px; padding: 0; border: 0; border-radius: 4px; background: transparent; color: var(--muted); font: 16px/1 var(--font-latin), monospace; }
2465
+ .ai-conversation-switcher-menu > header button:hover,
2466
+ .ai-open-conversation-close:hover { background: var(--paper-deep); color: var(--accent-dark); }
2467
+ .ai-open-conversation-list { display: grid; gap: 5px; min-height: 0; padding: 7px; overflow-y: auto; }
2468
+ .ai-open-conversation-row { display: grid; grid-template-columns: minmax(0, 1fr) 28px; align-items: stretch; min-width: 0; border: 1px solid transparent; border-radius: 5px; }
2469
+ .ai-open-conversation-row:hover { background: var(--surface-soft); }
2470
+ .ai-open-conversation-row.is-active { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); background: var(--row-active); }
2471
+ .ai-open-conversation-select { display: flex; align-items: center; gap: 9px; min-width: 0; padding: 9px 8px; border: 0; background: transparent; color: var(--ink); text-align: left; }
2472
+ .ai-open-conversation-copy { display: grid; gap: 3px; min-width: 0; }
2473
+ .ai-open-conversation-copy strong,
2474
+ .ai-open-conversation-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2475
+ .ai-open-conversation-copy strong { font-size: 11px; font-weight: 600; }
2476
+ .ai-open-conversation-copy small { color: var(--muted); font-size: 9px; }
2477
+ .ai-conversation-switcher-menu > footer { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; padding: 8px; border-top: 1px solid var(--line); }
2478
+ .ai-conversation-switcher-menu > footer button { min-width: 0; min-height: 31px; padding: 6px 8px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 10px; }
2479
+ .ai-conversation-switcher-menu > footer button:hover { border-color: var(--accent); background: var(--paper-deep); color: var(--accent-dark); }
2480
+ .ai-chat-tabs { display: flex; flex: 0 0 auto; gap: 5px; min-width: 0; margin: 8px -3px 0; padding: 0 3px 4px; overflow-x: auto; overscroll-behavior-inline: contain; scrollbar-color: var(--muted) transparent; scrollbar-width: thin; }
2481
+ .ai-chat-tab { display: flex; flex: 0 0 auto; min-width: 0; max-width: 172px; min-height: 30px; overflow: hidden; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); }
2482
+ .ai-chat-tab:has(.ai-chat-tab-select[aria-selected="true"]) { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); background: var(--row-active); box-shadow: inset 0 -2px var(--accent); }
2483
+ .ai-chat-tab-select { display: flex; align-items: center; gap: 7px; min-width: 82px; max-width: 142px; padding: 5px 7px; border: 0; background: transparent; color: var(--muted); font-size: 10px; text-align: left; }
2484
+ .ai-chat-tab-select > span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2485
+ .ai-chat-tab-select:hover, .ai-chat-tab-select:focus-visible, .ai-chat-tab-select[aria-selected="true"] { color: var(--ink); }
2486
+ .ai-chat-tab-select:focus-visible, .ai-chat-tab-close:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
2487
+ .ai-chat-tab-status { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 2px color-mix(in srgb, var(--green) 14%, transparent); }
2488
+ .ai-chat-tab-status.is-streaming { background: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent); animation: ai-chat-tab-pulse 1.1s ease-in-out infinite; }
2489
+ .ai-chat-tab-status.is-error { background: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent); }
2490
+ .ai-chat-tab-status.is-unread { background: var(--ink); box-shadow: 0 0 0 2px color-mix(in srgb, var(--ink) 14%, transparent); }
2491
+ .ai-chat-tab-close { width: 25px; min-width: 25px; padding: 0; border: 0; border-left: 1px solid color-mix(in srgb, var(--line) 72%, transparent); background: transparent; color: var(--muted); font: 15px/1 var(--font-latin), monospace; }
2492
+ .ai-chat-tab-close:hover { background: color-mix(in srgb, var(--accent) 9%, transparent); color: var(--accent-dark); }
2493
+ .ai-chat-panels { display: flex; flex: 1; min-height: 0; }
2494
+ .ai-chat-panels > .ai-feed { width: 100%; }
2495
+ .ai-panel.is-conversation-workspace { position: fixed; z-index: 44; inset: 0; width: auto; height: 100dvh; max-height: 100dvh; padding: max(18px, env(safe-area-inset-top)) max(24px, calc((100vw - 1040px) / 2)) max(20px, env(safe-area-inset-bottom)); border: 0; box-shadow: 0 18px 50px rgba(36, 30, 24, .18); }
2496
+ .app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace { inset: 0; height: 100dvh; padding-block: max(18px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-bottom)); transform: none; }
2497
+ .app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace .ai-heading { display: flex; justify-content: space-between; padding: 0 0 9px; }
2498
+ .app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace .ai-heading > :not(.panel-collapse-button) { display: flex; }
2499
+ .app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace > .quick-actions { display: grid; }
2500
+ .app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace > .ai-chat-panels { display: flex; }
2501
+ .app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace > .prompt-box { display: block; }
2502
+ .ai-panel.is-conversation-workspace > .panel-resize-handle { display: none; }
2503
+ .ai-panel.is-conversation-workspace > :is(.ai-heading, .quick-actions, .ai-chat-panels, .prompt-box) { width: min(1040px, 100%); margin-inline: auto; }
2504
+ .ai-panel.is-conversation-workspace .ai-conversation-switcher-menu { right: max(24px, calc((100vw - 1040px) / 2)); }
2505
+ @container (max-width: 300px) {
2506
+ .ai-heading-title strong { display: none; }
2507
+ .ai-heading-actions .ai-conversation-switcher { width: min(96px, 40cqw); max-width: 96px; }
2508
+ }
2509
+ @keyframes ai-chat-tab-pulse { 50% { opacity: .35; transform: scale(.72); } }
2411
2510
  .status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 3px rgba(94,118,92,.14); }
2412
2511
  .status-dot.is-error { background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent); }
2413
2512
  .ai-history-dialog-body { min-height: min(360px, 55vh); max-height: 65vh; overflow-y: auto; padding: 18px 24px 24px; }
@@ -2582,7 +2681,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2582
2681
  .ai-tool-call-info code, .ai-tool-call-info time { font-family: var(--font-latin), monospace; }
2583
2682
  .ai-tool-call-detail section { min-width: 0; }
2584
2683
  .ai-tool-call-detail h3 { margin: 0 0 7px; color: var(--muted); font-size: 10px; font-weight: 600; }
2585
- .ai-tool-call-detail pre { min-height: 120px; max-height: 32vh; overflow: auto; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--paper-deep); color: var(--ink); font: 10px/1.55 var(--font-latin), monospace; white-space: pre-wrap; word-break: break-word; }
2684
+ .ai-tool-call-code-block { position: relative; min-width: 0; }
2685
+ .ai-tool-call-detail pre { min-height: 120px; max-height: 32vh; overflow: auto; margin: 0; padding: 12px 44px 12px 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--paper-deep); color: var(--ink); font: 10px/1.55 var(--font-latin), monospace; white-space: pre-wrap; word-break: break-word; }
2686
+ .ai-tool-call-copy-button { position: absolute; z-index: 1; top: 6px; right: 6px; display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; min-height: 0; padding: 0; border: 1px solid transparent; border-radius: 4px; background: color-mix(in srgb, var(--paper-deep) 86%, var(--ink)); color: var(--muted); }
2687
+ .ai-tool-call-copy-button svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; }
2688
+ .ai-tool-call-copy-button:hover, .ai-tool-call-copy-button:focus-visible, .ai-tool-call-copy-button.is-copied { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); background: color-mix(in srgb, var(--accent) 12%, var(--paper-deep)); color: var(--accent-dark); outline: none; }
2586
2689
  #ai-tool-call-arguments { min-height: 0; max-height: 26vh; }
2587
2690
  .ai-tool-call-detail section:last-child pre { min-height: 180px; }
2588
2691
  @media (max-width: 680px) { .ai-tool-call-info { grid-template-columns: minmax(0, 1fr); }.ai-tool-call-detail pre { min-height: 100px; max-height: 26vh; }#ai-tool-call-arguments { min-height: 0; max-height: 20vh; }.ai-tool-call-detail section:last-child pre { min-height: 140px; } }
@@ -2649,8 +2752,12 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2649
2752
  .ai-context-distribution-row[data-key="skills"] { --distribution-color: var(--muted); }
2650
2753
  .ai-context-distribution-row[data-key="context"] { --distribution-color: var(--green); }
2651
2754
  .ai-context-distribution-row[data-key="left"] { --distribution-color: color-mix(in srgb, var(--muted) 55%, transparent); }
2652
- .ai-send-button { min-width: 54px; height: 32px; padding: 0 11px; border: 0; border-radius: 4px; background: var(--accent); color: #fff; font-size: 10px; font-weight: 600; box-shadow: 0 4px 12px rgba(139,61,44,.2); }
2653
- .ai-send-button:hover { background: var(--accent-dark); }.ai-send-button:disabled { cursor: wait; opacity: .62; }
2755
+ .ai-send-button { display: grid; flex: 0 0 32px; place-items: center; width: 32px; min-width: 32px; height: 32px; padding: 0; border: 0; border-radius: 4px; background: var(--accent); color: #fff; box-shadow: 0 4px 12px rgba(139,61,44,.2); }
2756
+ .ai-send-button:hover, .ai-send-button:focus-visible { background: var(--accent-dark); outline: 0; }
2757
+ .ai-send-button:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 24%, transparent), 0 4px 12px rgba(139,61,44,.2); }
2758
+ .ai-send-button:disabled { cursor: wait; opacity: .62; }
2759
+ .ai-send-button-icon { width: 17px; height: 17px; overflow: visible; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }
2760
+ .ai-send-button.is-stop .ai-send-button-icon { width: 15px; height: 15px; fill: currentColor; stroke: none; }
2654
2761
  .ai-citations { display: grid; gap: 6px; max-height: 190px; overflow-y: auto; margin-bottom: 8px; }
2655
2762
  .ai-citation-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; border: 1px solid var(--line); border-radius: 5px; background: var(--paper); overflow: hidden; }
2656
2763
  .ai-citation-main { min-width: 0; padding: 8px 9px; border: 0; background: transparent; text-align: left; }
@@ -2701,6 +2808,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2701
2808
  line-height: 1.55;
2702
2809
  animation: toast-appear-top .18s ease;
2703
2810
  }
2811
+ .toast.ai-new-conversation-toast { white-space: pre-line; }
2704
2812
  .toast-region[data-position="bottom-right"] .toast { animation-name: toast-appear-bottom; }
2705
2813
  .toast.error {
2706
2814
  border-color: color-mix(in srgb, var(--toast-error-fg) 16%, transparent);
@@ -2835,6 +2943,10 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2835
2943
  .dialog-fields .form-field-note { margin: 0; color: var(--muted); font-size: 11px; line-height: 1.65; }
2836
2944
  .dialog-fields label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
2837
2945
  .dialog-fields input, .dialog-fields textarea, .dialog-fields select { width: 100%; padding: 9px 10px; font-size: 13px; }
2946
+ .dialog-fields select { padding-inline-end: 28px; }
2947
+ .dialog-fields .character-extraction-candidate-toggle { display: inline-flex; width: auto; align-items: center; gap: 7px; margin: 0; color: var(--ink); font-size: 9px; white-space: nowrap; }
2948
+ .dialog-fields .character-extraction-candidate-toggle input[type="checkbox"] { flex: 0 0 18px; width: 18px; min-width: 18px; height: 18px; padding: 0; }
2949
+ .dialog-fields .character-extraction-candidate-toggle input[type="checkbox"]:focus-visible { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent); }
2838
2950
  .dialog-fields textarea { resize: vertical; min-height: 90px; line-height: 1.6; }
2839
2951
  .system-restart-dialog { width: min(500px, 92vw); }
2840
2952
  .system-restart-message { margin: 0; color: var(--ink); font-size: 13px; line-height: 1.7; }
@@ -2880,30 +2992,78 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2880
2992
  .task-chapter-field select:disabled { cursor: not-allowed; }
2881
2993
  .task-scope-field { min-width: 0; transition: opacity .15s ease; }
2882
2994
  .task-scope-field.is-disabled { opacity: .48; }
2995
+ .task-scope-field-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; min-width: 0; color: var(--muted); font-size: 11px; }
2996
+ .task-scope-field-heading > span { min-width: 0; }
2997
+ .task-scope-field-heading small { color: var(--muted); font-size: 9px; }
2883
2998
  .task-scope-picker { display: grid; gap: 8px; min-width: 0; }
2884
- .dialog-fields .task-scope-trigger { display: flex; width: 100%; min-height: 42px; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 12px; text-align: left; }
2999
+ .dialog-fields .task-scope-trigger { display: flex; width: 100%; min-height: 42px; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 12px; line-height: 1.2; text-align: left; }
2885
3000
  .task-scope-trigger:hover, .task-scope-trigger:focus-visible, .task-scope-trigger[aria-expanded="true"] { border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 12%, transparent); outline: none; }
2886
3001
  .task-scope-trigger:disabled { cursor: not-allowed; opacity: .48; }
2887
3002
  .task-scope-trigger > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2888
- .task-scope-trigger-meta { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 8px; color: var(--muted); font-family: var(--font-latin), monospace; font-size: 10px; }
2889
- .task-scope-chevron { font-size: 15px; line-height: 1; transition: transform .15s ease; }
3003
+ .task-scope-trigger-meta { display: inline-flex; flex: 0 0 auto; height: 18px; align-items: center; gap: 8px; color: var(--muted); font-family: var(--font-latin), monospace; font-size: 10px; line-height: 1; }
3004
+ .task-scope-chevron { display: inline-grid; width: 16px; height: 18px; place-items: center; font-size: 15px; line-height: 1; transition: transform .15s ease; }
2890
3005
  .task-scope-trigger[aria-expanded="true"] .task-scope-chevron { transform: rotate(180deg); }
2891
- .task-scope-bubble { position: relative; display: grid; gap: 9px; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-radius: 8px; background: var(--surface-soft); box-shadow: 0 10px 30px rgba(48,39,31,.12); }
2892
- .task-scope-bubble::before { position: absolute; top: -6px; right: 20px; width: 10px; height: 10px; border-top: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-left: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); background: var(--surface-soft); content: ""; transform: rotate(45deg); }
2893
- .dialog-fields .task-scope-search { gap: 5px; }
2894
- .dialog-fields .task-scope-search input { min-height: 36px; padding: 7px 9px; background: var(--surface); }
2895
- .task-scope-bubble-meta { display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--muted); font-size: 9px; }
2896
- .task-scope-bubble-meta button { padding: 2px 0; border: 0; background: transparent; color: var(--accent-dark); font-size: 9px; }
2897
- .task-scope-bubble-meta button:disabled { color: var(--muted); cursor: default; opacity: .45; }
2898
- .task-scope-options { display: grid; gap: 6px; max-height: 220px; overflow-y: auto; padding-right: 3px; }
2899
- .dialog-fields .task-scope-option { display: grid; grid-template-columns: 16px minmax(0, 1fr); align-items: center; gap: 8px; min-width: 0; padding: 8px 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--muted); cursor: pointer; }
3006
+ .task-scope-panel { display: grid; gap: 14px; min-width: 0; padding: 14px; border: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-radius: 8px; background: var(--surface-soft); box-shadow: 0 12px 30px rgba(48,39,31,.12); }
3007
+ .task-scope-panel.hidden { display: none; }
3008
+ .task-scope-panel-header, .task-scope-panel-section-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-width: 0; }
3009
+ .task-scope-panel-header > div, .task-scope-panel-section-header > div { display: grid; gap: 3px; min-width: 0; }
3010
+ .task-scope-panel-header strong, .task-scope-panel-section-header strong { color: var(--ink); font-size: 11px; font-weight: 650; }
3011
+ .task-scope-panel-header small { color: var(--muted); font-size: 9px; line-height: 1.5; }
3012
+ .task-scope-author-note-banner { display: grid; grid-template-columns: 20px minmax(0, 1fr); align-items: start; gap: 8px; padding: 9px 10px; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-left: 3px solid var(--accent); border-radius: 6px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--muted); font-size: 9px; line-height: 1.55; }
3013
+ .task-scope-author-note-banner-icon { display: grid; width: 18px; height: 18px; place-items: center; border-radius: 50%; background: var(--accent); color: #fff; font-family: var(--font-latin), monospace; font-size: 11px; font-weight: 700; line-height: 1; }
3014
+ .task-scope-author-note-banner div { display: grid; gap: 2px; min-width: 0; }
3015
+ .task-scope-author-note-banner strong { color: var(--accent-dark); font-size: 10px; }
3016
+ .task-scope-clear { flex: 0 0 auto; padding: 5px 7px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--accent-dark); font-size: 9px; }
3017
+ .task-scope-clear:hover:not(:disabled), .task-scope-clear:focus-visible { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 7%, transparent); outline: none; }
3018
+ .task-scope-clear:disabled { cursor: default; opacity: .45; }
3019
+ .task-scope-panel-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(230px, .8fr); gap: 12px; min-width: 0; }
3020
+ .task-scope-available, .task-scope-selected { display: grid; align-content: start; gap: 10px; min-width: 0; min-height: 360px; padding: 12px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }
3021
+ .task-scope-panel-section-header > span { flex: 0 0 auto; color: var(--muted); font-family: var(--font-latin), monospace; font-size: 9px; }
3022
+ .task-scope-search { gap: 5px !important; }
3023
+ .task-scope-search > span { color: var(--muted); font-size: 9px; }
3024
+ .dialog-fields .task-scope-search input { min-height: 34px; padding: 6px 9px; background: var(--surface-soft); font-size: 10px; }
3025
+ .task-scope-options { display: grid; align-content: start; gap: 6px; max-height: min(42vh, 360px); overflow-y: auto; padding: 2px 4px 2px 0; }
3026
+ .task-scope-volume-group { display: grid; gap: 5px; min-width: 0; padding: 5px 0 7px; border-bottom: 1px solid color-mix(in srgb, var(--line) 72%, transparent); }
3027
+ .task-scope-volume-group:last-child { border-bottom: 0; }
3028
+ .task-scope-volume-group > header { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 0 2px 2px; }
3029
+ .task-scope-volume-group > header strong { overflow: hidden; color: var(--accent-dark); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
3030
+ .task-scope-volume-group > header > .task-scope-volume-count { flex: 0 0 auto; color: var(--muted); font-family: var(--font-latin), monospace; font-size: 8px; }
3031
+ .task-scope-volume-options { display: grid; gap: 5px; min-width: 0; }
3032
+ .task-scope-volume-group.is-collapsed > .task-scope-volume-options { display: none; }
3033
+ .dialog-fields .task-scope-volume-option { position: relative; display: grid; flex: 1 1 auto; grid-template-columns: 18px minmax(0, 1fr); align-items: center; gap: 8px; min-width: 0; margin: 0; color: var(--ink); cursor: pointer; }
3034
+ .task-scope-volume-option input { position: absolute; width: 1px !important; min-width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; }
3035
+ .task-scope-volume-option:hover, .task-scope-volume-option:has(input:focus-visible) { color: var(--accent-dark); }
3036
+ .task-scope-volume-option:has(input:checked) .task-scope-checkbox, .task-scope-volume-option:has(input:indeterminate) .task-scope-checkbox { border-color: var(--accent); background: var(--accent); }
3037
+ .task-scope-volume-option:has(input:checked) .task-scope-checkbox::after { opacity: 1; transform: translateY(-1px) rotate(-45deg) scale(1); }
3038
+ .task-scope-volume-option input:indeterminate + .task-scope-checkbox::after { width: 8px; height: 2px; border: 0; background: #fff; opacity: 1; transform: none; }
3039
+ .task-scope-volume-copy { display: grid; gap: 2px; min-width: 0; }
3040
+ .task-scope-volume-copy strong { overflow: hidden; color: inherit !important; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
3041
+ .task-scope-volume-copy small { overflow: hidden; color: var(--muted); font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
3042
+ .task-scope-volume-collapse { display: inline-grid; flex: 0 0 auto; width: 24px; height: 24px; place-items: center; margin-left: 2px; padding: 0; border: 1px solid transparent; border-radius: 4px; background: transparent; color: var(--muted); font-size: 14px; line-height: 1; }
3043
+ .task-scope-volume-collapse > span { display: block; transition: transform .15s ease; }
3044
+ .task-scope-volume-collapse[aria-expanded="false"] > span { transform: rotate(180deg); }
3045
+ .task-scope-volume-collapse:hover, .task-scope-volume-collapse:focus-visible { border-color: var(--line); background: var(--surface); color: var(--accent-dark); outline: none; }
3046
+ .dialog-fields .task-scope-option { position: relative; display: grid; grid-template-columns: 18px minmax(0, 1fr); align-items: center; gap: 8px; min-width: 0; padding: 8px 9px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); color: var(--muted); cursor: pointer; transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease; }
2900
3047
  .dialog-fields .task-scope-option.hidden { display: none; }
2901
- .dialog-fields .task-scope-option input { width: 15px; height: 15px; margin: 0; }
2902
- .task-scope-option > span { display: grid; gap: 2px; min-width: 0; }
3048
+ .task-scope-option:hover, .task-scope-option:has(input:focus-visible) { border-color: color-mix(in srgb, var(--accent) 54%, var(--line)); }
3049
+ .task-scope-option input { position: absolute; width: 1px !important; min-width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; }
3050
+ .task-scope-checkbox { display: inline-grid; width: 18px; height: 18px; place-items: center; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease; }
3051
+ .task-scope-checkbox::after { width: 8px; height: 5px; border: solid #fff; border-width: 0 0 2px 2px; content: ""; opacity: 0; transform: translateY(-1px) rotate(-45deg) scale(.7); transition: opacity .12s ease, transform .12s ease; }
2903
3052
  .task-scope-option strong { overflow: hidden; color: var(--ink); font-size: 10px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
3053
+ .task-scope-option-copy { display: grid; gap: 2px; min-width: 0; }
2904
3054
  .task-scope-option small { overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
2905
- .task-scope-option:has(input:checked) { border-color: color-mix(in srgb, var(--accent) 62%, var(--line)); background: color-mix(in srgb, var(--accent) 7%, var(--surface)); }
2906
- .task-scope-option input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3055
+ .task-scope-option:has(input:checked) { border-color: color-mix(in srgb, var(--accent) 62%, var(--line)); background: color-mix(in srgb, var(--accent) 7%, var(--surface)); box-shadow: inset 2px 0 var(--accent); }
3056
+ .task-scope-option:has(input:checked) .task-scope-checkbox { border-color: var(--accent); background: var(--accent); }
3057
+ .task-scope-option:has(input:checked) .task-scope-checkbox::after { opacity: 1; transform: translateY(-1px) rotate(-45deg) scale(1); }
3058
+ .task-scope-selected-note { margin: -2px 0 0; color: var(--muted); font-size: 9px; line-height: 1.5; }
3059
+ .task-scope-selected-list { display: grid; align-content: start; gap: 6px; max-height: min(42vh, 360px); overflow-y: auto; padding: 2px 4px 2px 0; }
3060
+ .task-scope-selected-item { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 8px; min-width: 0; padding: 8px 9px; border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line)); border-radius: 5px; background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }
3061
+ .task-scope-selected-copy { display: grid; gap: 2px; min-width: 0; }
3062
+ .task-scope-selected-copy strong { overflow: hidden; color: var(--ink); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
3063
+ .task-scope-selected-copy small { overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
3064
+ .task-scope-selected-item button { display: grid; width: 24px; height: 24px; place-items: center; padding: 0; border: 1px solid transparent; border-radius: 50%; background: transparent; color: var(--muted); font-size: 16px; line-height: 1; }
3065
+ .task-scope-selected-item button:hover, .task-scope-selected-item button:focus-visible { border-color: var(--line); background: var(--surface); color: var(--accent-dark); outline: none; }
3066
+ .task-scope-selected-empty { margin: 0; padding: 28px 12px; border: 1px dashed var(--line); color: var(--muted); font-size: 10px; line-height: 1.5; text-align: center; }
2907
3067
  .task-scope-empty { margin: 0; padding: 18px 8px; color: var(--muted); font-size: 10px; text-align: center; }
2908
3068
  .relationship-analysis-options { display: grid; gap: 14px; }
2909
3069
  .relationship-character-field { min-width: 0; }
@@ -2985,9 +3145,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2985
3145
  .character-code { display: flex; align-items: center; gap: 7px; margin-top: 10px; color: var(--muted); font-size: 10px; }
2986
3146
  .character-code b { font-weight: 500; }
2987
3147
  .character-code .pill { display: inline-flex; align-items: center; justify-content: center; margin: 0; min-height: 18px; padding: 2px 8px; line-height: 1; font-family: var(--font-latin), var(--font-cjk), monospace; }
2988
- .character-species { display: grid; grid-template-columns: max-content minmax(0, 1fr); align-items: center; gap: 6px; margin-top: 8px; color: var(--muted); font-size: 10px; }
2989
- .character-species b { font-weight: 500; }
2990
- .character-species .pill { display: inline-flex; align-items: center; justify-content: center; justify-self: start; min-width: 0; max-width: 100%; margin: 0; min-height: 18px; padding: 2px 8px; line-height: 1.25; overflow-wrap: anywhere; }
3148
+ .character-species, .character-gender { display: grid; grid-template-columns: max-content minmax(0, 1fr); align-items: center; gap: 6px; margin-top: 8px; color: var(--muted); font-size: 10px; }
3149
+ .character-species b, .character-gender b { font-weight: 500; }
3150
+ .character-species .pill, .character-gender .pill { display: inline-flex; align-items: center; justify-content: center; justify-self: start; min-width: 0; max-width: 100%; margin: 0; min-height: 18px; padding: 2px 8px; line-height: 1.25; overflow-wrap: anywhere; }
2991
3151
  .character-detail-list { display: grid; gap: 5px; margin: 12px 0; }
2992
3152
  .character-detail-list div { display: grid; grid-template-columns: minmax(70px, .42fr) minmax(0, 1fr); gap: 8px; font-size: 10px; }
2993
3153
  .character-detail-list dt { color: var(--muted); }
@@ -3073,6 +3233,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3073
3233
  .import-mode-options { grid-template-columns: 1fr; }
3074
3234
  .import-mode-dialog .dialog-actions { flex-wrap: wrap; }
3075
3235
  .character-filter-toolbar { grid-template-columns: minmax(0, 1fr); }
3236
+ .character-filter-toolbar-with-extra-filters { grid-template-columns: minmax(0, 1fr); }
3076
3237
  .character-filter-toolbar-actions { justify-content: flex-start; }
3077
3238
  .draft-filter-toolbar { grid-template-columns: minmax(0, 1fr); }
3078
3239
  .setting-filter-toolbar { grid-template-columns: minmax(0, 1fr); }
@@ -3226,6 +3387,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3226
3387
  .character-relationship-row { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
3227
3388
  .character-relationship-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
3228
3389
  .character-relationship-heading > div { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px; min-width: 0; }
3390
+ .character-relationship-actions { display: flex; flex: 0 0 auto; flex-wrap: wrap; gap: 6px; }
3229
3391
  .character-relationship-heading strong { font-size: 14px; }
3230
3392
  .character-relationship-heading span { color: var(--muted); font-size: 10px; }
3231
3393
  .character-relationship-heading button { flex: 0 0 auto; padding: 6px 9px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 10px; }
@@ -3410,7 +3572,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3410
3572
  .task-auto-run-panel { grid-template-columns: minmax(0, 1fr); column-gap: 0; }
3411
3573
  .task-auto-run-header, .task-auto-run-controls, .task-auto-run-meta { grid-column: 1; }
3412
3574
  .task-auto-run-help, .task-auto-run-alert { grid-column: 1; }
3413
- .task-auto-run-progress { grid-column: 1; grid-row: auto; justify-self: stretch; width: 100%; }
3575
+ .task-auto-run-progress { position: static; top: auto; right: auto; width: 100%; transform: none; }
3414
3576
  .task-auto-run-progress-ring { display: none; }
3415
3577
  .task-auto-run-progress-bar-layout { display: grid; gap: 6px; width: 100%; }
3416
3578
  .settings-hub-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@@ -3483,6 +3645,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3483
3645
  body { -webkit-text-size-adjust: 100%; }
3484
3646
  button, select, input, textarea, [contenteditable="true"] { touch-action: manipulation; }
3485
3647
  button, .ghost-button, .primary-button, .danger-button, select { min-height: 40px; }
3648
+ .task-scope-volume-collapse { width: 40px; min-width: 40px; height: 40px; min-height: 40px; }
3486
3649
 
3487
3650
  .app-shell {
3488
3651
  grid-template-columns: minmax(0, 1fr);
@@ -3511,7 +3674,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3511
3674
  .brand-block .brand-mark { width: 30px; height: 30px; }
3512
3675
  .brand-block strong { font-size: 14px; }
3513
3676
  .brand-block small { display: none; }
3514
- .mobile-module-tab { position: fixed; z-index: 38; top: 132px; right: 0; display: grid; width: 34px; height: 42px; padding: 0; place-items: center; border: 1px solid var(--line); border-right: 0; border-radius: 5px 0 0 5px; background: var(--surface-soft); color: var(--accent-dark); font-size: 10px; writing-mode: vertical-rl; }
3677
+ .mobile-module-tab { position: fixed; z-index: 38; top: 124px; right: 0; display: grid; width: 34px; height: 42px; padding: 0; place-items: center; border: 1px solid var(--line); border-right: 0; border-radius: 5px 0 0 5px; background: var(--surface-soft); color: var(--accent-dark); font-size: 10px; writing-mode: vertical-rl; }
3515
3678
  .app-shell.shelf-mode .mobile-module-tab { display: none; }
3516
3679
  .mobile-panel-backdrop { position: fixed; z-index: 36; inset: 0; width: 100%; height: 100%; padding: 0; border: 0; background: rgba(20, 17, 14, .28); }
3517
3680
  .app-shell:not(.shelf-mode):not(.left-panel-collapsed) .mobile-panel-backdrop { display: block; }
@@ -3575,7 +3738,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3575
3738
  .module-nav .module-nav-secondary.hidden { display: none !important; }
3576
3739
  .panel-heading { display: flex; margin-top: 8px; }
3577
3740
  #novel-tree { display: block; padding-bottom: 18px; }
3578
- .volume-detail-button { display: inline-flex; flex: none; align-items: center; min-height: 40px; padding: 7px 9px; font-size: 11px; }
3741
+ .volume-detail-button { display: inline-flex; flex: 0 0 40px; align-items: center; justify-content: center; width: 40px; min-width: 40px; min-height: 40px; padding: 0; }
3742
+ .volume-detail-icon { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; }
3579
3743
  .app-shell.left-panel-collapsed .left-panel-body { padding: 8px var(--mobile-gutter) 0; }
3580
3744
  .app-shell.left-panel-collapsed .left-actions { display: block; padding: 0; }
3581
3745
 
@@ -3606,11 +3770,25 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3606
3770
  transform: translateY(0);
3607
3771
  transition: transform .2s ease;
3608
3772
  }
3773
+ .ai-heading { gap: 6px; }
3774
+ .ai-heading-actions { gap: 4px; }
3775
+ .ai-heading-actions button { height: 32px; min-height: 32px; }
3776
+ .ai-heading-actions .ai-conversation-switcher { width: min(106px, 28vw); max-width: 106px; }
3777
+ .ai-conversation-switcher-menu { position: fixed; top: auto; right: var(--mobile-gutter); bottom: calc(var(--mobile-gutter) + env(safe-area-inset-bottom)); left: var(--mobile-gutter); width: auto; max-height: min(540px, calc(100dvh - 28px)); border-radius: 8px; }
3778
+ .ai-conversation-switcher-menu > header button { min-height: 28px; }
3779
+ .ai-conversation-switcher-menu > footer { grid-template-columns: minmax(0, 1fr); }
3780
+ .ai-panel.is-conversation-workspace { z-index: 44; inset: 0; width: auto; height: auto; padding: 12px var(--mobile-gutter) calc(18px + env(safe-area-inset-bottom)); border-top: 0; }
3781
+ .ai-panel.is-conversation-workspace > :is(.ai-heading, .quick-actions, .ai-chat-panels, .prompt-box) { width: 100%; }
3782
+ .ai-panel.is-conversation-workspace .ai-conversation-switcher-menu { right: var(--mobile-gutter); }
3609
3783
  .app-shell.shelf-mode .ai-panel { display: none; }
3610
3784
  .ai-panel > .panel-resize-handle { display: none; }
3611
3785
  .app-shell.ai-panel-collapsed .ai-panel { top: auto; height: 58px; padding-block: 8px; transform: translateY(0); }
3612
3786
  .app-shell.ai-panel-collapsed .ai-panel > :not(.ai-heading) { display: none; }
3613
3787
  .app-shell.ai-panel-collapsed .ai-heading { display: flex; justify-content: space-between; padding: 0; }
3788
+ .app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace .ai-heading > :not(.panel-collapse-button) { display: flex; }
3789
+ .app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace > .quick-actions { display: grid; }
3790
+ .app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace > .ai-chat-panels { display: flex; }
3791
+ .app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace > .prompt-box { display: block; }
3614
3792
 
3615
3793
  .shelf-view { height: 100%; min-height: 0; padding: 28px var(--mobile-gutter) 42px; }
3616
3794
  #shelf-view, #settings-hub-view { padding-bottom: 0; }
@@ -3631,13 +3809,15 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3631
3809
  .welcome-grid { grid-template-columns: 1fr; margin-top: 34px; }
3632
3810
 
3633
3811
  .editor-toolbar { padding: 18px var(--mobile-gutter) 14px; }
3812
+ .chapter-search-panel { top: calc(100% + 8px); right: var(--mobile-gutter); left: var(--mobile-gutter); width: auto; max-height: calc(100dvh - 120px); overflow-y: auto; }
3813
+ .chapter-search-fields { grid-template-columns: minmax(0, 1fr); }
3634
3814
  .chapter-foreshadow-reminder { padding: 10px var(--mobile-gutter); }
3635
3815
  .chapter-foreshadow-reminder-actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; }
3636
3816
  .chapter-foreshadow-reminder-counter { grid-column: 1 / -1; justify-self: start; }
3637
3817
  .chapter-foreshadow-reminder-actions button { width: 100%; min-width: 0; min-height: 38px; }
3638
3818
  .chapter-foreshadow-reminder[data-multiple="true"] #chapter-foreshadow-reminder-resolve { grid-column: span 2; }
3639
- .editor-actions { position: fixed; z-index: 34; right: 0; bottom: calc(76px + env(safe-area-inset-bottom)); left: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: min(300px, 84vw); max-width: none; gap: 6px; padding: 10px; border: 1px solid var(--line); border-right: 0; border-radius: 6px 0 0 6px; background: var(--panel); box-shadow: -12px 0 36px rgba(36, 30, 24, .2); transform: translateX(0); transition: transform .2s ease; }
3640
- .app-shell.left-panel-collapsed .editor-actions { transform: translateX(0); pointer-events: auto; }
3819
+ .editor-actions { position: static; z-index: auto; right: auto; bottom: auto; left: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; max-width: none; gap: 6px; padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; transform: none; transition: none; }
3820
+ .app-shell.left-panel-collapsed .editor-actions { transform: none; pointer-events: auto; }
3641
3821
  .editor-actions .chapter-stats { grid-column: 1 / -1; }
3642
3822
  .editor-actions > button { min-width: 0; min-height: 36px; padding-inline: 8px; font-size: 11px; }
3643
3823
  .chapter-title { font-size: 23px; }
@@ -3683,6 +3863,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
3683
3863
  .replace-scope-fieldset legend, .replace-scope-fieldset > p { grid-column: auto; }
3684
3864
  .task-detail-overview { grid-template-columns: minmax(0, 1fr); padding: 12px; }
3685
3865
  .task-detail-overview > * { grid-column: 1 !important; }
3866
+ .task-scope-panel-grid { grid-template-columns: minmax(0, 1fr); }
3867
+ .task-scope-available, .task-scope-selected { min-height: 0; }
3868
+ .task-scope-options, .task-scope-selected-list { max-height: 28vh; }
3686
3869
  .task-result-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
3687
3870
  .task-result-item-details, .task-result-json-loader { grid-template-columns: minmax(0, 1fr); }
3688
3871
  .task-result-json-loader button { justify-self: start; }
@@ -3790,7 +3973,10 @@ body { font-size: var(--ui-font-size); }
3790
3973
  .ai-history-dialog,
3791
3974
  .ai-tool-call-dialog { font-size: var(--ai-font-size); }
3792
3975
  .ai-heading-title strong { font-size: calc(14px * var(--ai-font-scale)); }
3793
- .ai-heading-actions > span, .ai-heading-actions button { font-size: calc(9px * var(--ai-font-scale)); }
3976
+ .ai-heading-actions button { font-size: calc(9px * var(--ai-font-scale)); }
3977
+ .ai-open-conversation-copy strong { font-size: calc(11px * var(--ai-font-scale)); }
3978
+ .ai-open-conversation-copy small, .ai-conversation-switcher-menu > header small { font-size: calc(9px * var(--ai-font-scale)); }
3979
+ .ai-chat-tab-select { font-size: calc(10px * var(--ai-font-scale)); }
3794
3980
  .quick-actions button { font-size: calc(10px * var(--ai-font-scale)); }
3795
3981
  .ai-context-compaction-divider { font-size: calc(9px * var(--ai-font-scale)); }
3796
3982
  .assistant-message, .user-message { font-size: var(--ai-font-size); }
@@ -3815,7 +4001,6 @@ body { font-size: var(--ui-font-size); }
3815
4001
  .ai-context-popover-header strong { font-size: calc(12px * var(--ai-font-scale)); }
3816
4002
  .ai-context-popover-header small, .ai-context-distribution-label { font-size: calc(10px * var(--ai-font-scale)); }
3817
4003
  .ai-context-distribution-label small, .ai-context-distribution-label strong { font-size: calc(9px * var(--ai-font-scale)); }
3818
- .ai-send-button { font-size: calc(10px * var(--ai-font-scale)); }
3819
4004
  .ai-citation-main strong { font-size: calc(10px * var(--ai-font-scale)); }
3820
4005
  .ai-citation-main small, .ai-citation-main span, .message-citations span, .user-message-mentions { font-size: calc(9px * var(--ai-font-scale)); }
3821
4006
  .ai-history-item strong { font-size: calc(14px * var(--ai-font-scale)); }
@@ -3949,6 +4134,9 @@ body { font-size: var(--ui-font-size); }
3949
4134
  background: var(--reader-surface);
3950
4135
  box-shadow: 0 18px 44px rgba(20, 18, 15, .2);
3951
4136
  }
4137
+ .reader-settings-group { display: grid; min-width: 0; gap: 10px; }
4138
+ .reader-settings-section-title { color: var(--reader-ink); font-size: 10px; font-weight: 600; }
4139
+ .reader-navigation-group { padding-top: 10px; border-top: 1px solid var(--reader-line); }
3952
4140
  .reader-settings-panel label,
3953
4141
  .reader-jump-controls label { display: grid; min-width: 0; gap: 4px; color: var(--reader-muted); font-size: 9px; }
3954
4142
  .reader-settings-panel select,
@@ -3971,6 +4159,14 @@ body { font-size: var(--ui-font-size); }
3971
4159
  width: min(920px, 100%);
3972
4160
  margin: 0 auto;
3973
4161
  }
4162
+ .reader-settings-panel .reader-jump-controls {
4163
+ grid-column: auto;
4164
+ grid-template-columns: minmax(0, 1fr);
4165
+ width: 100%;
4166
+ margin: 0;
4167
+ gap: 8px;
4168
+ }
4169
+ .reader-settings-panel .reader-jump-controls label:last-child { grid-column: auto; }
3974
4170
  .reader-viewport {
3975
4171
  position: relative;
3976
4172
  min-width: 0;
@@ -3982,7 +4178,7 @@ body { font-size: var(--ui-font-size); }
3982
4178
  scrollbar-gutter: stable;
3983
4179
  }
3984
4180
  .reader-viewport:focus { outline: none; }
3985
- .reader-viewport:focus-visible { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--reader-accent) 55%, transparent); }
4181
+ .reader-viewport:focus-visible { box-shadow: none; }
3986
4182
  .reader-document {
3987
4183
  box-sizing: border-box;
3988
4184
  width: min(820px, calc(100% - 32px));
@@ -4077,8 +4273,6 @@ body { font-size: var(--ui-font-size); }
4077
4273
  .reader-settings > summary { min-height: 40px; }
4078
4274
  .reader-settings > summary { padding: 7px 10px; }
4079
4275
  .reader-settings-panel { position: static; width: min(250px, calc(100vw - 24px)); margin-top: 9px; }
4080
- .reader-jump-controls { grid-column: 1 / -1; grid-row: 3; grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr); gap: 7px; }
4081
- .reader-jump-controls label:last-child { grid-column: 1 / -1; }
4082
4276
  .reader-settings-panel select, .reader-jump-controls select { min-height: 40px; font-size: 10px; }
4083
4277
  .reader-document { width: 100%; padding: 34px 20px 58px; border: 0; box-shadow: none; }
4084
4278
  .reader-chapter-header { margin-bottom: 30px; }