@musnows/scriverse 0.7.13 → 0.8.1
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.
- package/README.en.md +4 -0
- package/README.md +5 -0
- package/dist/ai-chat-tab-limit.js +14 -0
- package/dist/ai-chat-tab-limit.js.map +1 -0
- package/dist/ai-protocol.js +10 -2
- package/dist/ai-protocol.js.map +1 -1
- package/dist/ai-retry.js +52 -0
- package/dist/ai-retry.js.map +1 -0
- package/dist/ai.js +547 -119
- package/dist/ai.js.map +1 -1
- package/dist/app.js +80 -22
- package/dist/app.js.map +1 -1
- package/dist/cli-contract.js +2 -1
- package/dist/cli-contract.js.map +1 -1
- package/dist/database.js +127 -2
- package/dist/database.js.map +1 -1
- package/dist/domain.js +1 -0
- package/dist/domain.js.map +1 -1
- package/dist/public/ai-chat-tabs.js +75 -0
- package/dist/public/ai-request-manager.js +32 -15
- package/dist/public/app.js +1305 -298
- package/dist/public/background-task-center.d.ts +9 -0
- package/dist/public/background-task-center.js +18 -0
- package/dist/public/chapter-search.d.ts +6 -0
- package/dist/public/chapter-search.js +23 -0
- package/dist/public/character-filters.d.ts +3 -1
- package/dist/public/character-filters.js +17 -2
- package/dist/public/character-version.js +1 -0
- package/dist/public/display-labels.d.ts +1 -0
- package/dist/public/display-labels.js +5 -1
- package/dist/public/index.html +67 -26
- package/dist/public/model-config.d.ts +3 -1
- package/dist/public/model-config.js +13 -0
- package/dist/public/relationship-filters.d.ts +5 -0
- package/dist/public/relationship-filters.js +31 -0
- package/dist/public/relationship-graph.js +289 -58
- package/dist/public/stream-typewriter.d.ts +1 -0
- package/dist/public/stream-typewriter.js +12 -0
- package/dist/public/styles.css +185 -41
- package/dist/public/work-permissions.d.ts +1 -1
- package/dist/public/work-permissions.js +13 -1
- package/dist/server-runtime.js +6 -0
- package/dist/server-runtime.js.map +1 -1
- package/dist/store.js +127 -44
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +34 -7
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +6 -1
- package/dist/version.js.map +1 -1
- package/dist/work-permissions.js +13 -2
- package/dist/work-permissions.js.map +1 -1
- package/package.json +1 -1
package/dist/public/styles.css
CHANGED
|
@@ -371,7 +371,7 @@ 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
|
-
|
|
374
|
+
.app-shell.ai-workspace-mode > :is(.topbar, .left-panel, .main-panel) { visibility: hidden; pointer-events: none; }
|
|
375
375
|
.topbar {
|
|
376
376
|
grid-column: 1 / -1;
|
|
377
377
|
display: grid;
|
|
@@ -552,9 +552,9 @@ input[type="checkbox"][hidden] { display: none; }
|
|
|
552
552
|
.left-panel, .ai-panel { position: relative; min-height: 0; background: var(--panel); }
|
|
553
553
|
.left-panel { display: flex; flex-direction: column; border-right: 1px solid var(--line); padding: 0; overflow: hidden; }
|
|
554
554
|
.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; }
|
|
555
|
+
.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
556
|
.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
|
-
.ai-heading #ai-panel-toggle { flex-basis: 30px; width: 30px; height: 30px; }
|
|
557
|
+
.ai-heading #ai-panel-toggle { flex-basis: 30px; width: 30px; min-width: 30px; min-height: 30px; height: 30px; }
|
|
558
558
|
.panel-resize-handle { position: absolute; z-index: 7; top: 0; bottom: 0; width: 7px; cursor: col-resize; touch-action: none; }
|
|
559
559
|
.left-panel > .panel-resize-handle { right: 0; }.ai-panel > .panel-resize-handle { left: 0; }
|
|
560
560
|
.panel-resize-handle::after { content: ""; position: absolute; top: 0; bottom: 0; left: 3px; width: 1px; background: transparent; transition: background .14s ease; }
|
|
@@ -976,8 +976,9 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
|
976
976
|
.replace-dialog > form { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; width: 100%; min-height: 0; }
|
|
977
977
|
.replace-dialog-body { display: grid; min-height: 0; gap: 16px; padding: 20px 24px 6px; overflow-y: auto; }
|
|
978
978
|
.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; }
|
|
979
|
+
.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
980
|
.replace-field textarea { min-height: 96px; resize: vertical; }
|
|
981
|
+
.replace-field select:disabled { cursor: not-allowed; opacity: .55; }
|
|
981
982
|
.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
983
|
.replace-scope-fieldset legend { padding: 0 6px; color: var(--ink); font-size: 12px; font-weight: 650; }
|
|
983
984
|
.replace-scope-fieldset legend, .replace-scope-fieldset > p { grid-column: 1 / -1; }
|
|
@@ -991,6 +992,7 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
|
991
992
|
.replace-scope-option input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
992
993
|
.replace-permission-note { margin: 0; color: var(--accent-dark); font-size: 10px; line-height: 1.5; }
|
|
993
994
|
.replace-permission-note:empty { display: none; }
|
|
995
|
+
.replace-range-note { margin: -8px 0 0; color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
994
996
|
.replace-dialog .primary-button:disabled { cursor: not-allowed; opacity: .42; }
|
|
995
997
|
.search-results { display: grid; gap: 8px; max-height: min(52vh, 480px); overflow: auto; }
|
|
996
998
|
.search-results-summary { margin: 0; padding: 2px 2px 5px; color: var(--muted); font-size: 10px; }
|
|
@@ -1285,6 +1287,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1285
1287
|
.module-nav .ai-analysis-entry,
|
|
1286
1288
|
.module-nav .ai-analysis-entry:hover,
|
|
1287
1289
|
.module-nav .ai-analysis-entry.active { background: transparent; color: var(--accent-dark); font-weight: 650; }
|
|
1290
|
+
.module-nav .ai-assistant-entry,
|
|
1291
|
+
.module-nav .ai-assistant-entry:hover,
|
|
1292
|
+
.module-nav .ai-assistant-entry.active { background: color-mix(in srgb, var(--accent) 10%, var(--surface)); color: var(--accent-dark); font-weight: 650; }
|
|
1288
1293
|
#module-more-button { grid-column: 2; color: var(--accent-dark); text-align: center; }
|
|
1289
1294
|
.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
1295
|
.panel-heading-actions { display: flex; align-items: center; gap: 7px; margin-left: auto; }
|
|
@@ -1303,7 +1308,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1303
1308
|
.chapter-add-button { flex: none; }
|
|
1304
1309
|
.volume-chapters { display: block; }
|
|
1305
1310
|
.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
|
|
1311
|
+
.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
1312
|
.chapter-node:hover, .chapter-node.active { background: var(--row-active); }
|
|
1308
1313
|
.chapter-node[draggable="true"] { cursor: grab; }
|
|
1309
1314
|
.chapter-node.is-dragging { opacity: .42; cursor: grabbing; }
|
|
@@ -1360,13 +1365,27 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1360
1365
|
|
|
1361
1366
|
.hidden { display: none !important; }
|
|
1362
1367
|
.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); }
|
|
1368
|
+
.editor-toolbar { position: relative; display: grid; grid-row: 1; 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
1369
|
#chapter-path { grid-area: path; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1365
1370
|
.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
1371
|
.chapter-title:focus { box-shadow: none; border-bottom: 1px solid var(--accent); }
|
|
1367
1372
|
.editor-actions { grid-area: actions; display: flex; align-items: center; gap: 10px; }
|
|
1368
1373
|
.chapter-stats { color: var(--muted); font-size: 11px; }
|
|
1369
|
-
.chapter-
|
|
1374
|
+
.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); }
|
|
1375
|
+
.chapter-search-panel-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
|
|
1376
|
+
.chapter-search-panel-header .eyebrow { margin-bottom: 4px; }
|
|
1377
|
+
.chapter-search-panel-header h2 { margin: 0; color: var(--ink); font-size: 15px; font-weight: 650; }
|
|
1378
|
+
.chapter-search-panel-header p { margin: 4px 0 0; color: var(--muted); font-size: 10px; line-height: 1.45; }
|
|
1379
|
+
.chapter-search-panel-header .dialog-close { flex: 0 0 auto; }
|
|
1380
|
+
.chapter-search-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
|
|
1381
|
+
.chapter-search-fields label { display: grid; gap: 5px; min-width: 0; color: var(--muted); font-size: 10px; }
|
|
1382
|
+
.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; }
|
|
1383
|
+
.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); }
|
|
1384
|
+
.chapter-search-actions { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 6px; }
|
|
1385
|
+
.chapter-search-actions > span { flex: 1 1 120px; min-width: 0; color: var(--muted); font-size: 10px; line-height: 1.4; }
|
|
1386
|
+
.chapter-search-actions button { min-height: 32px; padding: 6px 9px; font-size: 10px; }
|
|
1387
|
+
.chapter-search-actions button:disabled { cursor: not-allowed; opacity: .45; }
|
|
1388
|
+
.chapter-foreshadow-reminder { --reminder-color: #80713d; display: grid; grid-row: 2; 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
1389
|
.chapter-foreshadow-reminder[data-role="payoff"] { --reminder-color: #49745c; }
|
|
1371
1390
|
.chapter-foreshadow-reminder-summary { grid-area: summary; display: flex; min-width: 0; align-items: center; gap: 10px; }
|
|
1372
1391
|
.chapter-foreshadow-reminder-summary > div { display: grid; min-width: 0; gap: 2px; }
|
|
@@ -1389,11 +1408,16 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1389
1408
|
.chapter-foreshadow-reminder-actions { justify-content: flex-start; flex-wrap: wrap; }
|
|
1390
1409
|
.chapter-foreshadow-reminder-details { grid-template-columns: minmax(0, 1fr); }
|
|
1391
1410
|
}
|
|
1392
|
-
.editor-body { display: flex; min-height: 0; flex-direction: column; }
|
|
1411
|
+
.editor-body { display: flex; grid-row: 3; min-height: 0; flex-direction: column; }
|
|
1393
1412
|
.chapter-editor-frame { position: relative; display: grid; grid-template-columns: 38px minmax(0, 1fr); flex: 1 1 auto; width: 100%; min-height: 0; margin: 0; overflow: hidden; }
|
|
1394
1413
|
.chapter-line-numbers { position: relative; z-index: 2; grid-column: 1; grid-row: 1; min-height: 0; overflow: visible; border-right: 1px solid var(--line); background: linear-gradient(to right, transparent, rgba(143,132,116,.04)); color: var(--muted); font-family: var(--font-latin), monospace; font-size: clamp(11px, calc(var(--editor-font-size) * .72), 14px); line-height: 1.2; user-select: none; }
|
|
1395
1414
|
#chapter-line-numbers-inner { position: absolute; top: 32px; left: 0; right: 0; will-change: transform; }
|
|
1396
|
-
.chapter-line-number { position: absolute; left: 0; box-sizing: border-box; display: flex; width: 100%; align-items: flex-start; justify-content: center; padding: 0
|
|
1415
|
+
.chapter-line-number { position: absolute; left: 0; box-sizing: border-box; display: flex; width: 100%; align-items: flex-start; justify-content: center; padding: 0; border: 0; background: transparent; color: inherit; font: inherit; font-variant-numeric: tabular-nums; text-align: center; }
|
|
1416
|
+
.chapter-line-number-select { position: relative; display: flex; width: 100%; height: 100%; align-items: flex-start; justify-content: center; padding-inline: 3px; border: 0; background: transparent; color: inherit; font: inherit; font-variant-numeric: tabular-nums; cursor: pointer; }
|
|
1417
|
+
.chapter-line-number-select:focus-visible { z-index: 1; outline: 1px solid var(--accent); outline-offset: -1px; }
|
|
1418
|
+
.chapter-line-annotation-count { position: absolute; top: -2px; right: 0; z-index: 2; display: grid; min-width: 14px; height: 14px; place-items: center; padding: 0 3px; border: 1px solid var(--panel); border-radius: 999px; background: var(--accent); color: var(--paper); font-family: var(--font-latin), monospace; font-size: 9px; font-weight: 700; line-height: 1; cursor: pointer; box-shadow: 0 1px 3px rgba(49,42,32,.16); }
|
|
1419
|
+
.chapter-line-annotation-count:hover, .chapter-line-annotation-count:focus-visible { background: var(--accent-dark); }
|
|
1420
|
+
.chapter-line-annotation-count:focus-visible { outline: 1px solid var(--accent-dark); outline-offset: 1px; }
|
|
1397
1421
|
.chapter-line-number:hover { background: rgba(139,61,44,.08); color: var(--accent-dark); }
|
|
1398
1422
|
.chapter-line-number.is-line-selected { background: rgba(139,61,44,.16); color: var(--accent-dark); font-weight: 700; }
|
|
1399
1423
|
.chapter-line-number.is-line-selected::after { content: ""; position: absolute; top: 0; left: 100%; width: 100vw; height: 100%; background: rgba(139,61,44,.085); box-shadow: inset 3px 0 rgba(139,61,44,.28); pointer-events: none; }
|
|
@@ -1465,6 +1489,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1465
1489
|
.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
1490
|
.character-lock-badge svg { width: 11px; height: 11px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }
|
|
1467
1491
|
.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); }
|
|
1492
|
+
.character-filter-toolbar-with-extra-filters { grid-template-columns: repeat(4, minmax(0, 1fr)) auto; }
|
|
1468
1493
|
.character-filter-dropdown { position: relative; min-width: 0; }
|
|
1469
1494
|
.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
1495
|
.character-filter-dropdown summary::-webkit-details-marker { display: none; }
|
|
@@ -1572,6 +1597,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1572
1597
|
.platform-image-tool-field select { width: 100%; height: 36px; min-height: 36px; padding: 8px 10px; font-size: 12px; }
|
|
1573
1598
|
.platform-image-tool-panel .config-save-button { flex: 0 0 auto; min-height: 36px; padding: 8px 14px; }
|
|
1574
1599
|
.task-auto-run-panel {
|
|
1600
|
+
position: relative;
|
|
1575
1601
|
display: grid;
|
|
1576
1602
|
grid-template-columns: minmax(0, 1fr) 268px;
|
|
1577
1603
|
gap: 12px;
|
|
@@ -1618,14 +1644,14 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1618
1644
|
.task-auto-run-alert strong { color: var(--ink); }
|
|
1619
1645
|
.task-auto-run-alert span, .task-auto-run-alert small { color: var(--muted); }
|
|
1620
1646
|
.task-auto-run-progress {
|
|
1647
|
+
position: absolute;
|
|
1648
|
+
top: 50%;
|
|
1649
|
+
right: 90px;
|
|
1621
1650
|
display: grid;
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
align-self: center;
|
|
1625
|
-
justify-self: start;
|
|
1626
|
-
width: 192px;
|
|
1651
|
+
width: 184px;
|
|
1652
|
+
transform: translateY(-50%);
|
|
1627
1653
|
}
|
|
1628
|
-
.task-auto-run-progress-ring { position: relative; display: grid; width:
|
|
1654
|
+
.task-auto-run-progress-ring { position: relative; display: grid; width: 184px; height: 184px; place-items: center; }
|
|
1629
1655
|
.task-auto-run-progress-ring svg { display: block; width: 100%; height: 100%; overflow: visible; transform: rotate(-90deg); }
|
|
1630
1656
|
.task-auto-run-progress-ring-track, .task-auto-run-progress-ring-value { fill: none; stroke-width: 8; }
|
|
1631
1657
|
.task-auto-run-progress-ring-track { stroke: color-mix(in srgb, var(--line) 72%, transparent); }
|
|
@@ -2094,6 +2120,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2094
2120
|
.relationship-network.is-panning { cursor: grabbing; }
|
|
2095
2121
|
.relationship-network-stage { contain: layout paint style; will-change: transform; }
|
|
2096
2122
|
.relationship-network-stage.is-view-animating { transition: transform .34s cubic-bezier(.22,.78,.3,1); }
|
|
2123
|
+
.relationship-network-edge-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
|
|
2097
2124
|
.relationship-network svg { overflow: visible; }
|
|
2098
2125
|
.relationship-network .mind-edge-hit {
|
|
2099
2126
|
stroke-width: 14px;
|
|
@@ -2235,6 +2262,13 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2235
2262
|
z-index: 3;
|
|
2236
2263
|
will-change: left, top;
|
|
2237
2264
|
}
|
|
2265
|
+
.relationship-network.is-dense .obsidian-node:not(:hover):not(:focus-visible):not(.is-hovered):not(.is-selected):not(.is-edge-endpoint) {
|
|
2266
|
+
box-shadow: none;
|
|
2267
|
+
}
|
|
2268
|
+
.relationship-network.is-dense .obsidian-node {
|
|
2269
|
+
transition: opacity .08s linear, transform .08s linear;
|
|
2270
|
+
will-change: auto;
|
|
2271
|
+
}
|
|
2238
2272
|
.relationship-network .mind-node.is-settling { animation: relationship-node-settle .18s ease-out; }
|
|
2239
2273
|
.relationship-network-focus, .relationship-network-help { position: absolute; z-index: 6; color: var(--relationship-focus); pointer-events: none; }
|
|
2240
2274
|
.relationship-network-focus { top: 14px; left: 16px; display: grid; gap: 3px; }
|
|
@@ -2378,10 +2412,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2378
2412
|
.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; }
|
|
2379
2413
|
.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; }
|
|
2380
2414
|
.galaxy-node.is-dragging { cursor: grabbing; z-index: 6; }
|
|
2381
|
-
.galaxy-
|
|
2415
|
+
.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; }
|
|
2416
|
+
.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; }
|
|
2382
2417
|
.galaxy-stats { position: fixed; z-index: 7; left: 22px; bottom: 20px; color: rgba(235,245,255,.82); font-size: 11px; }
|
|
2383
2418
|
.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%); }
|
|
2384
|
-
.relationship-node-search.is-galaxy input { min-height:
|
|
2419
|
+
.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; }
|
|
2385
2420
|
.relationship-node-search.is-galaxy input::placeholder { color: rgba(220,235,250,.58); }
|
|
2386
2421
|
.relationship-node-search.is-galaxy input:focus { border-color: rgba(132,197,255,.66); outline-color: rgba(97,184,255,.24); }
|
|
2387
2422
|
.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); }
|
|
@@ -2390,6 +2425,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2390
2425
|
.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); }
|
|
2391
2426
|
.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); }
|
|
2392
2427
|
.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; }
|
|
2428
|
+
.galaxy-controls button:disabled { opacity: .56; cursor: not-allowed; }
|
|
2429
|
+
.galaxy-motion-field { display: grid; gap: 4px; color: rgba(220,235,250,.72); font-size: 8px; }
|
|
2430
|
+
.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; }
|
|
2431
|
+
.galaxy-motion-field select option { background: #101722; color: #dcecff; }
|
|
2432
|
+
.galaxy-motion-status { min-height: 20px; color: rgba(220,235,250,.58); font-size: 8px; line-height: 1.35; }
|
|
2393
2433
|
.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; }
|
|
2394
2434
|
.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; }
|
|
2395
2435
|
.galaxy-shell .relationship-node-search, .galaxy-shell .relationship-node-search * { cursor: auto; }
|
|
@@ -2405,11 +2445,70 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2405
2445
|
.ai-heading-title { display: flex; flex: 0 0 auto; gap: 8px; align-items: center; }
|
|
2406
2446
|
.ai-heading-title strong { white-space: nowrap; }
|
|
2407
2447
|
.ai-heading-actions { display: flex; align-items: center; min-width: 0; margin-left: auto; gap: 5px; }
|
|
2408
|
-
.ai-heading-actions > span { min-width: 0; max-width: 88px; overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
|
|
2409
2448
|
.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; }
|
|
2410
2449
|
.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; }
|
|
2411
2450
|
.ai-heading-actions #ai-new-conversation { padding: 0; font: 17px/1 var(--font-latin), monospace; }
|
|
2412
2451
|
.ai-heading-actions button:hover, .ai-heading-actions button[aria-expanded="true"] { background: var(--paper-deep); color: var(--ink); }
|
|
2452
|
+
.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; }
|
|
2453
|
+
.ai-conversation-switcher > span { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2454
|
+
.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; }
|
|
2455
|
+
.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; }
|
|
2456
|
+
.ai-conversation-switcher.has-background-activity > small { background: var(--accent); color: #fff; }
|
|
2457
|
+
.ai-panel.is-single-conversation .ai-conversation-switcher { cursor: default; border-color: transparent; background: transparent; }
|
|
2458
|
+
.ai-panel.is-single-conversation .ai-conversation-switcher > small,
|
|
2459
|
+
.ai-panel.is-single-conversation .ai-conversation-switcher > svg { display: none; }
|
|
2460
|
+
.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); }
|
|
2461
|
+
.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); }
|
|
2462
|
+
.ai-conversation-switcher-menu > header > div { display: grid; gap: 2px; }
|
|
2463
|
+
.ai-conversation-switcher-menu > header strong { font-size: 12px; }
|
|
2464
|
+
.ai-conversation-switcher-menu > header small { color: var(--muted); font: 9px/1.3 var(--font-latin), monospace; }
|
|
2465
|
+
.ai-conversation-switcher-menu > header button,
|
|
2466
|
+
.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; }
|
|
2467
|
+
.ai-conversation-switcher-menu > header button:hover,
|
|
2468
|
+
.ai-open-conversation-close:hover { background: var(--paper-deep); color: var(--accent-dark); }
|
|
2469
|
+
.ai-open-conversation-list { display: grid; gap: 5px; min-height: 0; padding: 7px; overflow-y: auto; }
|
|
2470
|
+
.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; }
|
|
2471
|
+
.ai-open-conversation-row:hover { background: var(--surface-soft); }
|
|
2472
|
+
.ai-open-conversation-row.is-active { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); background: var(--row-active); }
|
|
2473
|
+
.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; }
|
|
2474
|
+
.ai-open-conversation-copy { display: grid; gap: 3px; min-width: 0; }
|
|
2475
|
+
.ai-open-conversation-copy strong,
|
|
2476
|
+
.ai-open-conversation-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2477
|
+
.ai-open-conversation-copy strong { font-size: 11px; font-weight: 600; }
|
|
2478
|
+
.ai-open-conversation-copy small { color: var(--muted); font-size: 9px; }
|
|
2479
|
+
.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); }
|
|
2480
|
+
.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; }
|
|
2481
|
+
.ai-conversation-switcher-menu > footer button:hover { border-color: var(--accent); background: var(--paper-deep); color: var(--accent-dark); }
|
|
2482
|
+
.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; }
|
|
2483
|
+
.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); }
|
|
2484
|
+
.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); }
|
|
2485
|
+
.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; }
|
|
2486
|
+
.ai-chat-tab-select > span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2487
|
+
.ai-chat-tab-select:hover, .ai-chat-tab-select:focus-visible, .ai-chat-tab-select[aria-selected="true"] { color: var(--ink); }
|
|
2488
|
+
.ai-chat-tab-select:focus-visible, .ai-chat-tab-close:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
2489
|
+
.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); }
|
|
2490
|
+
.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; }
|
|
2491
|
+
.ai-chat-tab-status.is-error { background: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent); }
|
|
2492
|
+
.ai-chat-tab-status.is-unread { background: var(--ink); box-shadow: 0 0 0 2px color-mix(in srgb, var(--ink) 14%, transparent); }
|
|
2493
|
+
.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; }
|
|
2494
|
+
.ai-chat-tab-close:hover { background: color-mix(in srgb, var(--accent) 9%, transparent); color: var(--accent-dark); }
|
|
2495
|
+
.ai-chat-panels { display: flex; flex: 1; min-height: 0; }
|
|
2496
|
+
.ai-chat-panels > .ai-feed { width: 100%; }
|
|
2497
|
+
.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); }
|
|
2498
|
+
.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; }
|
|
2499
|
+
.app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace .ai-heading { display: flex; justify-content: space-between; padding: 0 0 9px; }
|
|
2500
|
+
.app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace .ai-heading > :not(.panel-collapse-button) { display: flex; }
|
|
2501
|
+
.app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace > .quick-actions { display: grid; }
|
|
2502
|
+
.app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace > .ai-chat-panels { display: flex; }
|
|
2503
|
+
.app-shell.ai-workspace-mode .ai-panel.is-conversation-workspace > .prompt-box { display: block; }
|
|
2504
|
+
.ai-panel.is-conversation-workspace > .panel-resize-handle { display: none; }
|
|
2505
|
+
.ai-panel.is-conversation-workspace > :is(.ai-heading, .quick-actions, .ai-chat-panels, .prompt-box) { width: min(1040px, 100%); margin-inline: auto; }
|
|
2506
|
+
.ai-panel.is-conversation-workspace .ai-conversation-switcher-menu { right: max(24px, calc((100vw - 1040px) / 2)); }
|
|
2507
|
+
@container (max-width: 300px) {
|
|
2508
|
+
.ai-heading-title strong { display: none; }
|
|
2509
|
+
.ai-heading-actions .ai-conversation-switcher { width: min(96px, 40cqw); max-width: 96px; }
|
|
2510
|
+
}
|
|
2511
|
+
@keyframes ai-chat-tab-pulse { 50% { opacity: .35; transform: scale(.72); } }
|
|
2413
2512
|
.status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 3px rgba(94,118,92,.14); }
|
|
2414
2513
|
.status-dot.is-error { background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent); }
|
|
2415
2514
|
.ai-history-dialog-body { min-height: min(360px, 55vh); max-height: 65vh; overflow-y: auto; padding: 18px 24px 24px; }
|
|
@@ -2522,6 +2621,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2522
2621
|
.ai-error-settings-link:hover, .ai-error-settings-link:focus-visible { color: var(--accent-dark); }
|
|
2523
2622
|
.config-section.is-targeted { border-radius: 5px; box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 34%, transparent); }
|
|
2524
2623
|
.message-card-actions { position: absolute; right: 0; bottom: -31px; display: flex; align-items: center; gap: 12px; height: 24px; }
|
|
2624
|
+
.assistant-message .message-card-actions { right: auto; left: 0; }
|
|
2625
|
+
.user-message .message-card-actions { right: 0; left: auto; }
|
|
2525
2626
|
.message-card-actions button { display: inline-flex; align-items: center; gap: 4px; min-width: 0; padding: 3px 2px; border: 0; background: transparent; color: var(--muted); font-size: 9px; }
|
|
2526
2627
|
.message-card-actions button:hover, .message-card-actions button:focus-visible { color: var(--accent-dark); }
|
|
2527
2628
|
.message-action-icon { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
|
|
@@ -2585,7 +2686,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2585
2686
|
.ai-tool-call-detail section { min-width: 0; }
|
|
2586
2687
|
.ai-tool-call-detail h3 { margin: 0 0 7px; color: var(--muted); font-size: 10px; font-weight: 600; }
|
|
2587
2688
|
.ai-tool-call-code-block { position: relative; min-width: 0; }
|
|
2588
|
-
.ai-tool-call-detail pre { min-height: 120px; max-height: 32vh; overflow: auto; margin: 0; padding:
|
|
2689
|
+
.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; }
|
|
2589
2690
|
.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); }
|
|
2590
2691
|
.ai-tool-call-copy-button svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; }
|
|
2591
2692
|
.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; }
|
|
@@ -2628,7 +2729,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2628
2729
|
.ai-prompt-reference button { width: 16px; height: 16px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: inherit; font: 14px/1 var(--font-latin), monospace; }
|
|
2629
2730
|
.ai-prompt-reference button:hover, .ai-prompt-reference button:focus-visible { background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); }
|
|
2630
2731
|
.prompt-composer-actions { position: absolute; right: 8px; bottom: 8px; display: flex; gap: 6px; align-items: center; }
|
|
2631
|
-
.ai-context-meter { --context-usage: 0; --context-meter-color: var(--green); position: relative; display: grid; flex: 0 0 32px; place-items: center; width: 32px; height: 32px; overflow: visible; border: 0; border-radius: 50%; background: conic-gradient(var(--context-meter-color) calc(var(--context-usage) * 1%), rgba(143,132,116,.2) 0); color: var(--ink); font-family: var(--font-latin); line-height: 1; cursor: pointer; }
|
|
2732
|
+
.ai-context-meter { --context-usage: 0; --context-meter-color: var(--green); position: relative; display: grid; flex: 0 0 32px; place-items: center; width: 32px; min-height: 32px; height: 32px; overflow: visible; border: 0; border-radius: 50%; background: conic-gradient(var(--context-meter-color) calc(var(--context-usage) * 1%), rgba(143,132,116,.2) 0); color: var(--ink); font-family: var(--font-latin); line-height: 1; cursor: pointer; }
|
|
2632
2733
|
.ai-context-meter::before { content: ""; position: absolute; inset: 3px; border-radius: 50%; background: var(--paper); box-shadow: inset 0 0 0 1px rgba(143,132,116,.12); }
|
|
2633
2734
|
.ai-context-meter:hover, .ai-context-meter:focus-visible, .ai-context-meter[aria-expanded="true"] { outline: 0; filter: brightness(.96); }
|
|
2634
2735
|
.ai-context-meter:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent); }
|
|
@@ -2655,8 +2756,12 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2655
2756
|
.ai-context-distribution-row[data-key="skills"] { --distribution-color: var(--muted); }
|
|
2656
2757
|
.ai-context-distribution-row[data-key="context"] { --distribution-color: var(--green); }
|
|
2657
2758
|
.ai-context-distribution-row[data-key="left"] { --distribution-color: color-mix(in srgb, var(--muted) 55%, transparent); }
|
|
2658
|
-
.ai-send-button { min-width:
|
|
2659
|
-
.ai-send-button:hover { background: var(--accent-dark);
|
|
2759
|
+
.ai-send-button { display: grid; flex: 0 0 32px; place-items: center; width: 32px; min-width: 32px; min-height: 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); }
|
|
2760
|
+
.ai-send-button:hover, .ai-send-button:focus-visible { background: var(--accent-dark); outline: 0; }
|
|
2761
|
+
.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); }
|
|
2762
|
+
.ai-send-button:disabled { cursor: wait; opacity: .62; }
|
|
2763
|
+
.ai-send-button-icon { width: 17px; height: 17px; overflow: visible; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }
|
|
2764
|
+
.ai-send-button.is-stop .ai-send-button-icon { width: 15px; height: 15px; fill: currentColor; stroke: none; }
|
|
2660
2765
|
.ai-citations { display: grid; gap: 6px; max-height: 190px; overflow-y: auto; margin-bottom: 8px; }
|
|
2661
2766
|
.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; }
|
|
2662
2767
|
.ai-citation-main { min-width: 0; padding: 8px 9px; border: 0; background: transparent; text-align: left; }
|
|
@@ -2926,8 +3031,10 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2926
3031
|
.task-scope-volume-group:last-child { border-bottom: 0; }
|
|
2927
3032
|
.task-scope-volume-group > header { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 0 2px 2px; }
|
|
2928
3033
|
.task-scope-volume-group > header strong { overflow: hidden; color: var(--accent-dark); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
|
|
2929
|
-
.task-scope-volume-group > header
|
|
2930
|
-
.
|
|
3034
|
+
.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; }
|
|
3035
|
+
.task-scope-volume-options { display: grid; gap: 5px; min-width: 0; }
|
|
3036
|
+
.task-scope-volume-group.is-collapsed > .task-scope-volume-options { display: none; }
|
|
3037
|
+
.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; }
|
|
2931
3038
|
.task-scope-volume-option input { position: absolute; width: 1px !important; min-width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; }
|
|
2932
3039
|
.task-scope-volume-option:hover, .task-scope-volume-option:has(input:focus-visible) { color: var(--accent-dark); }
|
|
2933
3040
|
.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); }
|
|
@@ -2936,11 +3043,15 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2936
3043
|
.task-scope-volume-copy { display: grid; gap: 2px; min-width: 0; }
|
|
2937
3044
|
.task-scope-volume-copy strong { overflow: hidden; color: inherit !important; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
|
|
2938
3045
|
.task-scope-volume-copy small { overflow: hidden; color: var(--muted); font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
|
|
3046
|
+
.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; }
|
|
3047
|
+
.task-scope-volume-collapse > span { display: block; transition: transform .15s ease; }
|
|
3048
|
+
.task-scope-volume-collapse[aria-expanded="false"] > span { transform: rotate(180deg); }
|
|
3049
|
+
.task-scope-volume-collapse:hover, .task-scope-volume-collapse:focus-visible { border-color: var(--line); background: var(--surface); color: var(--accent-dark); outline: none; }
|
|
2939
3050
|
.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; }
|
|
2940
3051
|
.dialog-fields .task-scope-option.hidden { display: none; }
|
|
2941
3052
|
.task-scope-option:hover, .task-scope-option:has(input:focus-visible) { border-color: color-mix(in srgb, var(--accent) 54%, var(--line)); }
|
|
2942
3053
|
.task-scope-option input { position: absolute; width: 1px !important; min-width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; }
|
|
2943
|
-
.task-scope-checkbox { display: inline-grid; width: 18px; height: 18px; place-items: center; border: 1px solid var(--line
|
|
3054
|
+
.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; }
|
|
2944
3055
|
.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; }
|
|
2945
3056
|
.task-scope-option strong { overflow: hidden; color: var(--ink); font-size: 10px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
|
|
2946
3057
|
.task-scope-option-copy { display: grid; gap: 2px; min-width: 0; }
|
|
@@ -3038,9 +3149,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3038
3149
|
.character-code { display: flex; align-items: center; gap: 7px; margin-top: 10px; color: var(--muted); font-size: 10px; }
|
|
3039
3150
|
.character-code b { font-weight: 500; }
|
|
3040
3151
|
.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; }
|
|
3041
|
-
.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; }
|
|
3042
|
-
.character-species b { font-weight: 500; }
|
|
3043
|
-
.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; }
|
|
3152
|
+
.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; }
|
|
3153
|
+
.character-species b, .character-gender b { font-weight: 500; }
|
|
3154
|
+
.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; }
|
|
3044
3155
|
.character-detail-list { display: grid; gap: 5px; margin: 12px 0; }
|
|
3045
3156
|
.character-detail-list div { display: grid; grid-template-columns: minmax(70px, .42fr) minmax(0, 1fr); gap: 8px; font-size: 10px; }
|
|
3046
3157
|
.character-detail-list dt { color: var(--muted); }
|
|
@@ -3126,6 +3237,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3126
3237
|
.import-mode-options { grid-template-columns: 1fr; }
|
|
3127
3238
|
.import-mode-dialog .dialog-actions { flex-wrap: wrap; }
|
|
3128
3239
|
.character-filter-toolbar { grid-template-columns: minmax(0, 1fr); }
|
|
3240
|
+
.character-filter-toolbar-with-extra-filters { grid-template-columns: minmax(0, 1fr); }
|
|
3129
3241
|
.character-filter-toolbar-actions { justify-content: flex-start; }
|
|
3130
3242
|
.draft-filter-toolbar { grid-template-columns: minmax(0, 1fr); }
|
|
3131
3243
|
.setting-filter-toolbar { grid-template-columns: minmax(0, 1fr); }
|
|
@@ -3279,6 +3391,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3279
3391
|
.character-relationship-row { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
|
|
3280
3392
|
.character-relationship-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
|
|
3281
3393
|
.character-relationship-heading > div { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px; min-width: 0; }
|
|
3394
|
+
.character-relationship-actions { display: flex; flex: 0 0 auto; flex-wrap: wrap; gap: 6px; }
|
|
3282
3395
|
.character-relationship-heading strong { font-size: 14px; }
|
|
3283
3396
|
.character-relationship-heading span { color: var(--muted); font-size: 10px; }
|
|
3284
3397
|
.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; }
|
|
@@ -3463,7 +3576,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3463
3576
|
.task-auto-run-panel { grid-template-columns: minmax(0, 1fr); column-gap: 0; }
|
|
3464
3577
|
.task-auto-run-header, .task-auto-run-controls, .task-auto-run-meta { grid-column: 1; }
|
|
3465
3578
|
.task-auto-run-help, .task-auto-run-alert { grid-column: 1; }
|
|
3466
|
-
.task-auto-run-progress {
|
|
3579
|
+
.task-auto-run-progress { position: static; top: auto; right: auto; width: 100%; transform: none; }
|
|
3467
3580
|
.task-auto-run-progress-ring { display: none; }
|
|
3468
3581
|
.task-auto-run-progress-bar-layout { display: grid; gap: 6px; width: 100%; }
|
|
3469
3582
|
.settings-hub-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
@@ -3536,6 +3649,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3536
3649
|
body { -webkit-text-size-adjust: 100%; }
|
|
3537
3650
|
button, select, input, textarea, [contenteditable="true"] { touch-action: manipulation; }
|
|
3538
3651
|
button, .ghost-button, .primary-button, .danger-button, select { min-height: 40px; }
|
|
3652
|
+
.task-scope-volume-collapse { width: 40px; min-width: 40px; height: 40px; min-height: 40px; }
|
|
3539
3653
|
|
|
3540
3654
|
.app-shell {
|
|
3541
3655
|
grid-template-columns: minmax(0, 1fr);
|
|
@@ -3545,7 +3659,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3545
3659
|
overflow-x: hidden;
|
|
3546
3660
|
overflow-y: hidden;
|
|
3547
3661
|
}
|
|
3662
|
+
.app-shell:not(.shelf-mode):not(.ai-workspace-mode) { grid-template-columns: minmax(0, 1fr); }
|
|
3548
3663
|
.app-shell.ai-hidden-mode:not(.shelf-mode) { grid-template-columns: minmax(0, 1fr); }
|
|
3664
|
+
.app-shell.ai-workspace-mode > :is(.topbar, .left-panel, .main-panel) { visibility: hidden; pointer-events: none; }
|
|
3549
3665
|
.app-shell.shelf-mode {
|
|
3550
3666
|
grid-template-rows: auto minmax(0, 1fr);
|
|
3551
3667
|
min-height: 100dvh;
|
|
@@ -3564,7 +3680,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3564
3680
|
.brand-block .brand-mark { width: 30px; height: 30px; }
|
|
3565
3681
|
.brand-block strong { font-size: 14px; }
|
|
3566
3682
|
.brand-block small { display: none; }
|
|
3567
|
-
.mobile-module-tab { position: fixed; z-index: 38; top:
|
|
3683
|
+
.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; }
|
|
3568
3684
|
.app-shell.shelf-mode .mobile-module-tab { display: none; }
|
|
3569
3685
|
.mobile-panel-backdrop { position: fixed; z-index: 36; inset: 0; width: 100%; height: 100%; padding: 0; border: 0; background: rgba(20, 17, 14, .28); }
|
|
3570
3686
|
.app-shell:not(.shelf-mode):not(.left-panel-collapsed) .mobile-panel-backdrop { display: block; }
|
|
@@ -3595,14 +3711,14 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3595
3711
|
top: 0;
|
|
3596
3712
|
bottom: 0;
|
|
3597
3713
|
right: 0;
|
|
3598
|
-
width:
|
|
3714
|
+
width: 100%;
|
|
3599
3715
|
grid-column: auto;
|
|
3600
3716
|
grid-row: auto;
|
|
3601
3717
|
min-width: 0;
|
|
3602
3718
|
padding: 0;
|
|
3603
|
-
border-left:
|
|
3719
|
+
border-left: 0;
|
|
3604
3720
|
border-bottom: 1px solid var(--line);
|
|
3605
|
-
box-shadow:
|
|
3721
|
+
box-shadow: none;
|
|
3606
3722
|
overflow: hidden;
|
|
3607
3723
|
transform: translateX(0);
|
|
3608
3724
|
transition: transform .2s ease;
|
|
@@ -3628,7 +3744,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3628
3744
|
.module-nav .module-nav-secondary.hidden { display: none !important; }
|
|
3629
3745
|
.panel-heading { display: flex; margin-top: 8px; }
|
|
3630
3746
|
#novel-tree { display: block; padding-bottom: 18px; }
|
|
3631
|
-
.volume-detail-button { display: inline-flex; flex:
|
|
3747
|
+
.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; }
|
|
3748
|
+
.volume-detail-icon { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; }
|
|
3632
3749
|
.app-shell.left-panel-collapsed .left-panel-body { padding: 8px var(--mobile-gutter) 0; }
|
|
3633
3750
|
.app-shell.left-panel-collapsed .left-actions { display: block; padding: 0; }
|
|
3634
3751
|
|
|
@@ -3659,11 +3776,25 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3659
3776
|
transform: translateY(0);
|
|
3660
3777
|
transition: transform .2s ease;
|
|
3661
3778
|
}
|
|
3779
|
+
.ai-heading { gap: 6px; }
|
|
3780
|
+
.ai-heading-actions { gap: 4px; }
|
|
3781
|
+
.ai-heading-actions button { height: 32px; min-height: 32px; }
|
|
3782
|
+
.ai-heading-actions .ai-conversation-switcher { width: min(106px, 28vw); max-width: 106px; }
|
|
3783
|
+
.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; }
|
|
3784
|
+
.ai-conversation-switcher-menu > header button { min-height: 28px; }
|
|
3785
|
+
.ai-conversation-switcher-menu > footer { grid-template-columns: minmax(0, 1fr); }
|
|
3786
|
+
.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; }
|
|
3787
|
+
.ai-panel.is-conversation-workspace > :is(.ai-heading, .quick-actions, .ai-chat-panels, .prompt-box) { width: 100%; }
|
|
3788
|
+
.ai-panel.is-conversation-workspace .ai-conversation-switcher-menu { right: var(--mobile-gutter); }
|
|
3662
3789
|
.app-shell.shelf-mode .ai-panel { display: none; }
|
|
3663
3790
|
.ai-panel > .panel-resize-handle { display: none; }
|
|
3664
3791
|
.app-shell.ai-panel-collapsed .ai-panel { top: auto; height: 58px; padding-block: 8px; transform: translateY(0); }
|
|
3665
3792
|
.app-shell.ai-panel-collapsed .ai-panel > :not(.ai-heading) { display: none; }
|
|
3666
3793
|
.app-shell.ai-panel-collapsed .ai-heading { display: flex; justify-content: space-between; padding: 0; }
|
|
3794
|
+
.app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace .ai-heading > :not(.panel-collapse-button) { display: flex; }
|
|
3795
|
+
.app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace > .quick-actions { display: grid; }
|
|
3796
|
+
.app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace > .ai-chat-panels { display: flex; }
|
|
3797
|
+
.app-shell.ai-workspace-mode.ai-panel-collapsed .ai-panel.is-conversation-workspace > .prompt-box { display: block; }
|
|
3667
3798
|
|
|
3668
3799
|
.shelf-view { height: 100%; min-height: 0; padding: 28px var(--mobile-gutter) 42px; }
|
|
3669
3800
|
#shelf-view, #settings-hub-view { padding-bottom: 0; }
|
|
@@ -3684,13 +3815,15 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3684
3815
|
.welcome-grid { grid-template-columns: 1fr; margin-top: 34px; }
|
|
3685
3816
|
|
|
3686
3817
|
.editor-toolbar { padding: 18px var(--mobile-gutter) 14px; }
|
|
3818
|
+
.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; }
|
|
3819
|
+
.chapter-search-fields { grid-template-columns: minmax(0, 1fr); }
|
|
3687
3820
|
.chapter-foreshadow-reminder { padding: 10px var(--mobile-gutter); }
|
|
3688
3821
|
.chapter-foreshadow-reminder-actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; }
|
|
3689
3822
|
.chapter-foreshadow-reminder-counter { grid-column: 1 / -1; justify-self: start; }
|
|
3690
3823
|
.chapter-foreshadow-reminder-actions button { width: 100%; min-width: 0; min-height: 38px; }
|
|
3691
3824
|
.chapter-foreshadow-reminder[data-multiple="true"] #chapter-foreshadow-reminder-resolve { grid-column: span 2; }
|
|
3692
|
-
.editor-actions { position:
|
|
3693
|
-
.app-shell.left-panel-collapsed .editor-actions { transform:
|
|
3825
|
+
.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; }
|
|
3826
|
+
.app-shell.left-panel-collapsed .editor-actions { transform: none; pointer-events: auto; }
|
|
3694
3827
|
.editor-actions .chapter-stats { grid-column: 1 / -1; }
|
|
3695
3828
|
.editor-actions > button { min-width: 0; min-height: 36px; padding-inline: 8px; font-size: 11px; }
|
|
3696
3829
|
.chapter-title { font-size: 23px; }
|
|
@@ -3846,7 +3979,10 @@ body { font-size: var(--ui-font-size); }
|
|
|
3846
3979
|
.ai-history-dialog,
|
|
3847
3980
|
.ai-tool-call-dialog { font-size: var(--ai-font-size); }
|
|
3848
3981
|
.ai-heading-title strong { font-size: calc(14px * var(--ai-font-scale)); }
|
|
3849
|
-
.ai-heading-actions
|
|
3982
|
+
.ai-heading-actions button { font-size: calc(9px * var(--ai-font-scale)); }
|
|
3983
|
+
.ai-open-conversation-copy strong { font-size: calc(11px * var(--ai-font-scale)); }
|
|
3984
|
+
.ai-open-conversation-copy small, .ai-conversation-switcher-menu > header small { font-size: calc(9px * var(--ai-font-scale)); }
|
|
3985
|
+
.ai-chat-tab-select { font-size: calc(10px * var(--ai-font-scale)); }
|
|
3850
3986
|
.quick-actions button { font-size: calc(10px * var(--ai-font-scale)); }
|
|
3851
3987
|
.ai-context-compaction-divider { font-size: calc(9px * var(--ai-font-scale)); }
|
|
3852
3988
|
.assistant-message, .user-message { font-size: var(--ai-font-size); }
|
|
@@ -3871,7 +4007,6 @@ body { font-size: var(--ui-font-size); }
|
|
|
3871
4007
|
.ai-context-popover-header strong { font-size: calc(12px * var(--ai-font-scale)); }
|
|
3872
4008
|
.ai-context-popover-header small, .ai-context-distribution-label { font-size: calc(10px * var(--ai-font-scale)); }
|
|
3873
4009
|
.ai-context-distribution-label small, .ai-context-distribution-label strong { font-size: calc(9px * var(--ai-font-scale)); }
|
|
3874
|
-
.ai-send-button { font-size: calc(10px * var(--ai-font-scale)); }
|
|
3875
4010
|
.ai-citation-main strong { font-size: calc(10px * var(--ai-font-scale)); }
|
|
3876
4011
|
.ai-citation-main small, .ai-citation-main span, .message-citations span, .user-message-mentions { font-size: calc(9px * var(--ai-font-scale)); }
|
|
3877
4012
|
.ai-history-item strong { font-size: calc(14px * var(--ai-font-scale)); }
|
|
@@ -4005,6 +4140,9 @@ body { font-size: var(--ui-font-size); }
|
|
|
4005
4140
|
background: var(--reader-surface);
|
|
4006
4141
|
box-shadow: 0 18px 44px rgba(20, 18, 15, .2);
|
|
4007
4142
|
}
|
|
4143
|
+
.reader-settings-group { display: grid; min-width: 0; gap: 10px; }
|
|
4144
|
+
.reader-settings-section-title { color: var(--reader-ink); font-size: 10px; font-weight: 600; }
|
|
4145
|
+
.reader-navigation-group { padding-top: 10px; border-top: 1px solid var(--reader-line); }
|
|
4008
4146
|
.reader-settings-panel label,
|
|
4009
4147
|
.reader-jump-controls label { display: grid; min-width: 0; gap: 4px; color: var(--reader-muted); font-size: 9px; }
|
|
4010
4148
|
.reader-settings-panel select,
|
|
@@ -4027,6 +4165,14 @@ body { font-size: var(--ui-font-size); }
|
|
|
4027
4165
|
width: min(920px, 100%);
|
|
4028
4166
|
margin: 0 auto;
|
|
4029
4167
|
}
|
|
4168
|
+
.reader-settings-panel .reader-jump-controls {
|
|
4169
|
+
grid-column: auto;
|
|
4170
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4171
|
+
width: 100%;
|
|
4172
|
+
margin: 0;
|
|
4173
|
+
gap: 8px;
|
|
4174
|
+
}
|
|
4175
|
+
.reader-settings-panel .reader-jump-controls label:last-child { grid-column: auto; }
|
|
4030
4176
|
.reader-viewport {
|
|
4031
4177
|
position: relative;
|
|
4032
4178
|
min-width: 0;
|
|
@@ -4038,7 +4184,7 @@ body { font-size: var(--ui-font-size); }
|
|
|
4038
4184
|
scrollbar-gutter: stable;
|
|
4039
4185
|
}
|
|
4040
4186
|
.reader-viewport:focus { outline: none; }
|
|
4041
|
-
.reader-viewport:focus-visible { box-shadow:
|
|
4187
|
+
.reader-viewport:focus-visible { box-shadow: none; }
|
|
4042
4188
|
.reader-document {
|
|
4043
4189
|
box-sizing: border-box;
|
|
4044
4190
|
width: min(820px, calc(100% - 32px));
|
|
@@ -4133,8 +4279,6 @@ body { font-size: var(--ui-font-size); }
|
|
|
4133
4279
|
.reader-settings > summary { min-height: 40px; }
|
|
4134
4280
|
.reader-settings > summary { padding: 7px 10px; }
|
|
4135
4281
|
.reader-settings-panel { position: static; width: min(250px, calc(100vw - 24px)); margin-top: 9px; }
|
|
4136
|
-
.reader-jump-controls { grid-column: 1 / -1; grid-row: 3; grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr); gap: 7px; }
|
|
4137
|
-
.reader-jump-controls label:last-child { grid-column: 1 / -1; }
|
|
4138
4282
|
.reader-settings-panel select, .reader-jump-controls select { min-height: 40px; font-size: 10px; }
|
|
4139
4283
|
.reader-document { width: 100%; padding: 34px 20px 58px; border: 0; box-shadow: none; }
|
|
4140
4284
|
.reader-chapter-header { margin-bottom: 30px; }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type WorkPermissionModule = "prose" | "drafts" | "settings" | "characters" | "races" | "organizations" | "timeline" | "relationships" | "outlines" | "reviews" | "ai-chat" | "ai-analysis" | "ai-settings";
|
|
1
|
+
export type WorkPermissionModule = "prose" | "comments" | "todos" | "drafts" | "settings" | "characters" | "races" | "organizations" | "timeline" | "relationships" | "outlines" | "reviews" | "ai-chat" | "ai-analysis" | "ai-settings";
|
|
2
2
|
export type WorkUiModule = "editor" | "drafts" | "settings" | "characters" | "races" | "organizations" | "timeline" | "comments" | "relationships" | "outlines" | "reviews" | "tasks" | "ai-settings";
|
|
3
3
|
export type WorkModuleAccess = "none" | "read" | "write";
|
|
4
4
|
export type WorkModulePermissions = Record<WorkPermissionModule, WorkModuleAccess>;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export const WORK_PERMISSION_MODULES = Object.freeze([
|
|
2
2
|
{ id: "prose", uiModule: "editor", label: "正文" },
|
|
3
|
+
{ id: "comments", uiModule: "comments", label: "正文评论" },
|
|
4
|
+
{ id: "todos", uiModule: null, label: "正文待办" },
|
|
3
5
|
{ id: "drafts", uiModule: "drafts", label: "想法" },
|
|
4
6
|
{ id: "settings", uiModule: "settings", label: "设定库" },
|
|
5
7
|
{ id: "characters", uiModule: "characters", label: "角色" },
|
|
@@ -22,6 +24,8 @@ const validAccess = new Set(["none", "read", "write"]);
|
|
|
22
24
|
function migrateLegacyModulePermissions(value) {
|
|
23
25
|
if (!value || typeof value !== "object" || Array.isArray(value)) return value;
|
|
24
26
|
const migrated = { ...value };
|
|
27
|
+
if (!validAccess.has(migrated.comments)) migrated.comments = validAccess.has(migrated.prose) ? migrated.prose : "none";
|
|
28
|
+
if (!validAccess.has(migrated.todos)) migrated.todos = validAccess.has(migrated.prose) ? migrated.prose : "none";
|
|
25
29
|
if (!validAccess.has(migrated.drafts)) {
|
|
26
30
|
const prose = validAccess.has(migrated.prose) ? migrated.prose : "none";
|
|
27
31
|
const settings = validAccess.has(migrated.settings) ? migrated.settings : "none";
|
|
@@ -83,10 +87,16 @@ export function canWritePermissionModule(work, moduleId) {
|
|
|
83
87
|
}
|
|
84
88
|
|
|
85
89
|
export function canReadUiModule(work, uiModule) {
|
|
90
|
+
if (uiModule === "comments") {
|
|
91
|
+
return canReadPermissionModule(work, "comments") || canReadPermissionModule(work, "todos");
|
|
92
|
+
}
|
|
86
93
|
return canReadPermissionModule(work, permissionModuleForUiModule(uiModule));
|
|
87
94
|
}
|
|
88
95
|
|
|
89
96
|
export function canWriteUiModule(work, uiModule) {
|
|
97
|
+
if (uiModule === "comments") {
|
|
98
|
+
return canWritePermissionModule(work, "comments") || canWritePermissionModule(work, "todos");
|
|
99
|
+
}
|
|
90
100
|
return canWritePermissionModule(work, permissionModuleForUiModule(uiModule));
|
|
91
101
|
}
|
|
92
102
|
|
|
@@ -96,10 +106,12 @@ export function firstReadableUiModule(work) {
|
|
|
96
106
|
|
|
97
107
|
export function permissionSummary(value) {
|
|
98
108
|
const permissions = normalizeModulePermissions(value, "custom");
|
|
99
|
-
const
|
|
109
|
+
const addable = WORK_PERMISSION_MODULES.filter((item) => ["comments", "todos"].includes(item.id) && permissions[item.id] === "write").map((item) => item.label);
|
|
110
|
+
const writable = WORK_PERMISSION_MODULES.filter((item) => !["comments", "todos"].includes(item.id) && permissions[item.id] === "write").map((item) => item.label);
|
|
100
111
|
const readable = WORK_PERMISSION_MODULES.filter((item) => permissions[item.id] === "read").map((item) => item.label);
|
|
101
112
|
const parts = [];
|
|
102
113
|
if (writable.length) parts.push(`可编辑:${writable.join("、")}`);
|
|
114
|
+
if (addable.length) parts.push(`可添加:${addable.join("、")}`);
|
|
103
115
|
if (readable.length) parts.push(`只读:${readable.join("、")}`);
|
|
104
116
|
if (!parts.length) parts.push("未授权任何模块");
|
|
105
117
|
return parts.join(";");
|