@musnows/scriverse 0.4.2 → 0.4.4
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/dist/app.js +28 -0
- package/dist/app.js.map +1 -1
- package/dist/collaboration-presence.js +75 -0
- package/dist/collaboration-presence.js.map +1 -0
- package/dist/public/app.js +530 -126
- package/dist/public/character-version.js +1 -1
- package/dist/public/display-labels.d.ts +16 -0
- package/dist/public/display-labels.js +81 -0
- package/dist/public/entity-version.js +5 -3
- package/dist/public/index.html +24 -10
- package/dist/public/page-route.js +3 -1
- package/dist/public/styles.css +327 -23
- package/dist/user-auth.js +2 -0
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/public/styles.css
CHANGED
|
@@ -65,6 +65,9 @@
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
.auth-pending .app-shell { pointer-events: none; user-select: none; }
|
|
68
|
+
.dev-auth-bypass .auth-view { display: none !important; }
|
|
69
|
+
.dev-auth-bypass .auth-pending .app-shell { pointer-events: auto; user-select: auto; }
|
|
70
|
+
.dev-auth-bypass .auth-loading { display: none !important; }
|
|
68
71
|
.auth-loading { display: none; }
|
|
69
72
|
.auth-pending .auth-loading { position: fixed; inset: 0; z-index: 900; display: grid; place-items: center; pointer-events: none; }
|
|
70
73
|
.auth-loading::before { content: ""; width: 32px; height: 32px; border: 3px solid color-mix(in srgb, var(--accent) 25%, transparent); border-top-color: var(--accent); border-radius: 50%; animation: auth-loading-spin .8s linear infinite; }
|
|
@@ -285,6 +288,45 @@ html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; }
|
|
|
285
288
|
button, input, textarea, select { font: inherit; color: inherit; }
|
|
286
289
|
button { cursor: pointer; }
|
|
287
290
|
|
|
291
|
+
input[type="checkbox"] {
|
|
292
|
+
appearance: none;
|
|
293
|
+
-webkit-appearance: none;
|
|
294
|
+
display: inline-grid;
|
|
295
|
+
flex: 0 0 16px;
|
|
296
|
+
place-content: center;
|
|
297
|
+
width: 16px;
|
|
298
|
+
height: 16px;
|
|
299
|
+
min-width: 16px;
|
|
300
|
+
margin: 0;
|
|
301
|
+
border: 1px solid var(--line);
|
|
302
|
+
border-radius: 4px;
|
|
303
|
+
background: var(--surface);
|
|
304
|
+
cursor: pointer;
|
|
305
|
+
transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
input[type="checkbox"]::before {
|
|
309
|
+
content: "";
|
|
310
|
+
width: 8px;
|
|
311
|
+
height: 5px;
|
|
312
|
+
border: solid #fff;
|
|
313
|
+
border-width: 0 0 2px 2px;
|
|
314
|
+
transform: translateY(-1px) rotate(-45deg) scale(0);
|
|
315
|
+
transform-origin: center;
|
|
316
|
+
transition: transform .12s ease;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
input[type="checkbox"]:hover:not(:disabled) { border-color: var(--accent); }
|
|
320
|
+
input[type="checkbox"]:checked { border-color: var(--accent); background: var(--accent); }
|
|
321
|
+
input[type="checkbox"]:checked::before { transform: translateY(-1px) rotate(-45deg) scale(1); }
|
|
322
|
+
input[type="checkbox"]:focus-visible {
|
|
323
|
+
outline: none;
|
|
324
|
+
border-color: var(--accent);
|
|
325
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);
|
|
326
|
+
}
|
|
327
|
+
input[type="checkbox"]:disabled { cursor: not-allowed; opacity: .48; }
|
|
328
|
+
input[type="checkbox"][hidden] { display: none; }
|
|
329
|
+
|
|
288
330
|
.app-shell {
|
|
289
331
|
display: grid;
|
|
290
332
|
grid-template-columns: var(--left-panel-width) minmax(480px, 1fr) var(--ai-panel-width);
|
|
@@ -303,7 +345,7 @@ button { cursor: pointer; }
|
|
|
303
345
|
align-items: center;
|
|
304
346
|
border-bottom: 1px solid var(--line);
|
|
305
347
|
background: var(--panel);
|
|
306
|
-
z-index:
|
|
348
|
+
z-index: 20;
|
|
307
349
|
}
|
|
308
350
|
|
|
309
351
|
.brand-block { display: flex; align-items: center; gap: 11px; padding: 0 20px; border: 0; background: transparent; text-align: left; }
|
|
@@ -312,7 +354,26 @@ button { cursor: pointer; }
|
|
|
312
354
|
.brand-block strong { font-size: 16px; letter-spacing: .16em; }
|
|
313
355
|
.brand-block small { color: var(--muted); font-size: 10px; margin-top: 2px; }
|
|
314
356
|
.work-meta { font-size: 13px; color: var(--muted); padding-left: 26px; }
|
|
315
|
-
.top-actions { display: flex; justify-content: flex-end; gap: 10px; align-items: center; padding-right: 18px; }
|
|
357
|
+
.top-actions { position: relative; display: flex; justify-content: flex-end; gap: 10px; align-items: center; padding-right: 18px; }
|
|
358
|
+
.mobile-module-tab { display: none; }
|
|
359
|
+
.mobile-panel-backdrop { display: none; }
|
|
360
|
+
.presence-control { position: relative; }
|
|
361
|
+
.presence-button { display: flex; align-items: center; gap: 7px; min-height: 34px; padding: 0 11px; border: 1px solid var(--line); border-radius: 18px; background: transparent; color: var(--muted); font-size: 11px; }
|
|
362
|
+
.presence-button:hover, .presence-button:focus-visible, .presence-button[aria-expanded="true"] { border-color: var(--accent); background: var(--paper-deep); color: var(--accent-dark); outline: none; }
|
|
363
|
+
.presence-status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 3px color-mix(in srgb, var(--green) 16%, transparent); }
|
|
364
|
+
.presence-panel { position: absolute; top: calc(100% + 10px); right: 0; z-index: 12; width: min(340px, calc(100vw - 24px)); padding: 14px; border: 1px solid var(--line); border-radius: 6px; background: var(--paper); box-shadow: 0 14px 38px rgba(36, 30, 24, .16); }
|
|
365
|
+
.presence-panel > header { display: grid; gap: 3px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
|
|
366
|
+
.presence-panel > header strong { font-size: 12px; }
|
|
367
|
+
.presence-panel > header small { color: var(--muted); font-size: 10px; }
|
|
368
|
+
.presence-list { display: grid; gap: 5px; padding-top: 8px; }
|
|
369
|
+
.presence-person { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; align-items: center; gap: 9px; padding: 7px; border-radius: 4px; }
|
|
370
|
+
.presence-person.is-same-page { background: color-mix(in srgb, var(--accent) 8%, transparent); }
|
|
371
|
+
.presence-person .user-avatar { width: 30px; height: 30px; }
|
|
372
|
+
.presence-person-copy { min-width: 0; }
|
|
373
|
+
.presence-person-copy strong, .presence-person-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
374
|
+
.presence-person-copy strong { font-size: 11px; }
|
|
375
|
+
.presence-person-copy small { margin-top: 3px; color: var(--muted); font-size: 10px; }
|
|
376
|
+
.presence-same-page { color: var(--accent-dark); font-size: 9px; white-space: nowrap; }
|
|
316
377
|
.theme-toggle, .settings-button, .topbar-icon-button {
|
|
317
378
|
display: grid;
|
|
318
379
|
flex: 0 0 34px;
|
|
@@ -450,7 +511,7 @@ body.is-panel-resizing { cursor: col-resize; user-select: none; }
|
|
|
450
511
|
|
|
451
512
|
.shelf-view { display: flex; flex-direction: column; height: 100%; overflow-y: auto; padding: 48px clamp(32px, 7vw, 110px) 90px; }
|
|
452
513
|
#shelf-view, #settings-hub-view { padding-bottom: 24px; }
|
|
453
|
-
.shelf-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 30px; max-width: 1400px; margin: 0 auto 38px; }
|
|
514
|
+
.shelf-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 30px; width: 100%; max-width: 1400px; margin: 0 auto 38px; }
|
|
454
515
|
.shelf-header h1 { margin: 0 0 10px; font-size: clamp(30px, 4vw, 52px); font-weight: 560; letter-spacing: -.04em; }
|
|
455
516
|
.shelf-header p { margin: 0; color: var(--muted); }
|
|
456
517
|
.settings-hub-header { align-items: center; }
|
|
@@ -816,7 +877,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
816
877
|
.chapter-add-button { flex: none; }
|
|
817
878
|
.volume-chapters { display: block; }
|
|
818
879
|
.volume-node.is-collapsed .volume-chapters { display: none; }
|
|
819
|
-
.chapter-node { display: grid; grid-template-columns: minmax(0, 1fr) max-content; gap: 8px; width: 100
|
|
880
|
+
.chapter-node { display: grid; grid-template-columns: minmax(0, 1fr) max-content; gap: 8px; width: calc(100% + 6px); padding: 9px 6px 9px 20px; border: 0; background: transparent; border-radius: 4px; text-align: left; font-size: 12px; }
|
|
820
881
|
.chapter-node:hover, .chapter-node.active { background: var(--row-active); }
|
|
821
882
|
.chapter-node.active { color: var(--accent-dark); font-weight: 700; }
|
|
822
883
|
.chapter-node > span:first-child { min-width: 0; overflow-wrap: anywhere; line-height: 1.45; white-space: normal; }
|
|
@@ -896,9 +957,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
896
957
|
.record-card p { color: var(--muted); font-size: 12px; line-height: 1.55; margin: 0; white-space: pre-wrap; }
|
|
897
958
|
.record-card small { color: var(--accent); font-size: 9px; letter-spacing: .1em; text-transform: uppercase; }
|
|
898
959
|
.settings-layout-toolbar, .module-layout-toolbar { display: flex; align-items: center; justify-content: flex-end; gap: 10px; margin-bottom: 0; }
|
|
899
|
-
.settings-layout-hint
|
|
960
|
+
.settings-layout-hint { color: var(--muted); font-size: 10px; }
|
|
900
961
|
.settings-layout-toggle, .module-layout-toggle { display: inline-flex; border: 1px solid var(--line); border-radius: 4px; overflow: hidden; background: var(--surface); }
|
|
901
|
-
.settings-layout-toggle button
|
|
962
|
+
.settings-layout-toggle button { min-height: 34px; padding: 0 12px; border: 0; border-right: 1px solid var(--line); background: transparent; color: var(--muted); font-size: 11px; }
|
|
963
|
+
.module-layout-toggle button { display: inline-grid; place-items: center; width: 36px; min-height: 34px; padding: 0; border: 0; border-right: 1px solid var(--line); background: transparent; color: var(--muted); }
|
|
964
|
+
.module-layout-toggle svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; }
|
|
902
965
|
.settings-layout-toggle button:last-child, .module-layout-toggle button:last-child { border-right: 0; }
|
|
903
966
|
.settings-layout-toggle button:hover, .settings-layout-toggle button:focus-visible,
|
|
904
967
|
.module-layout-toggle button:hover, .module-layout-toggle button:focus-visible { color: var(--ink); background: var(--paper-deep); }
|
|
@@ -908,10 +971,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
908
971
|
.setting-row, .module-row { display: grid; grid-template-columns: minmax(108px, .2fr) minmax(120px, .24fr) minmax(0, 1fr) auto; gap: 10px 16px; align-items: center; min-height: 0; padding: 12px 16px; }
|
|
909
972
|
.setting-row h3, .module-row h3 { margin: 0; font-size: 14px; line-height: 1.35; }
|
|
910
973
|
.setting-row p, .module-row p, .module-row-preview { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
911
|
-
.module-row-preview { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.45; }
|
|
974
|
+
.module-row .module-row-preview { display: -webkit-box; max-height: 2.9em; margin: 0; overflow: hidden; color: var(--muted); font-size: 12px; line-height: 1.45; white-space: normal; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
|
|
912
975
|
.module-row-path { display: block; margin-top: 2px; color: var(--accent); font-family: var(--font-latin), monospace; font-size: 11px; font-weight: 500; }
|
|
913
976
|
.module-row-span { grid-column: 1 / -1; }
|
|
914
977
|
.setting-row .card-actions, .module-row .card-actions { margin-top: 0; flex-wrap: wrap; justify-content: flex-end; }
|
|
978
|
+
.module-row .card-actions > .record-card-edit { position: static; }
|
|
915
979
|
.character-card { cursor: pointer; }
|
|
916
980
|
.character-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
917
981
|
.character-audit-panel { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 18px; padding: 15px 17px; border: 1px solid var(--line); background: var(--surface-soft); }
|
|
@@ -929,6 +993,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
929
993
|
.character-duplicate-actions { flex-wrap: wrap; }
|
|
930
994
|
.card-actions { display: flex; gap: 6px; margin-top: 15px; }
|
|
931
995
|
.card-actions button { border: 1px solid var(--line); background: transparent; border-radius: 3px; font-size: 10px; padding: 5px 8px; }
|
|
996
|
+
.card-actions .record-card-edit { padding: 0; }
|
|
932
997
|
.danger-button { border: 1px solid color-mix(in srgb, var(--accent) 52%, var(--line)); border-radius: 4px; background: transparent; color: var(--accent-dark); padding: 8px 13px; font-size: 12px; }
|
|
933
998
|
.danger-button:hover, .danger-button:focus-visible { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 9%, transparent); outline: none; }
|
|
934
999
|
.card-actions .danger-button { border-color: color-mix(in srgb, var(--accent) 52%, var(--line)); color: var(--accent-dark); }
|
|
@@ -958,14 +1023,14 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
958
1023
|
.race-settings .pill { display: inline-flex; align-items: center; gap: 5px; }
|
|
959
1024
|
.race-settings .pill small { color: inherit; font-size: 8px; letter-spacing: 0; text-transform: none; opacity: .72; }
|
|
960
1025
|
.race-settings .pill.inherited { border-style: dashed; }
|
|
961
|
-
.entity-dialog-management
|
|
962
|
-
.entity-dialog-management > div:first-child
|
|
963
|
-
.entity-dialog-management strong
|
|
964
|
-
.entity-dialog-management small
|
|
965
|
-
.entity-dialog-management-actions
|
|
966
|
-
.entity-dialog-management-actions button
|
|
1026
|
+
.entity-dialog-management { display: grid; gap: 10px; padding: 14px; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-radius: 5px; background: color-mix(in srgb, var(--accent) 4%, var(--surface)); }
|
|
1027
|
+
.entity-dialog-management > div:first-child { display: grid; gap: 4px; }
|
|
1028
|
+
.entity-dialog-management strong { color: var(--ink); font-size: 11px; }
|
|
1029
|
+
.entity-dialog-management small { color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
1030
|
+
.entity-dialog-management-actions { display: flex; flex-wrap: wrap; gap: 7px; }
|
|
1031
|
+
.entity-dialog-management-actions button { min-height: 32px; }
|
|
967
1032
|
.danger-confirm-field { display: grid !important; grid-template-columns: auto minmax(0, 1fr); align-items: start; gap: 9px !important; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--line)); border-radius: 5px; background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }
|
|
968
|
-
.danger-confirm-field input { width:
|
|
1033
|
+
.danger-confirm-field input { width: 16px !important; margin-top: 3px; }
|
|
969
1034
|
.danger-confirm-field span { display: grid; gap: 4px; }
|
|
970
1035
|
.danger-confirm-field strong { color: var(--ink); font-size: 11px; }
|
|
971
1036
|
.danger-confirm-field small { color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
@@ -1027,7 +1092,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1027
1092
|
.config-section-header p { margin: 0; color: var(--muted); font-size: 11px; }
|
|
1028
1093
|
.ai-agent-tools { display: grid; gap: 8px; }
|
|
1029
1094
|
.ai-agent-tools label { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 8px; align-items: start; color: var(--muted); font-size: 11px; line-height: 1.45; }
|
|
1030
|
-
.ai-agent-tools input { width:
|
|
1095
|
+
.ai-agent-tools input { width: 16px; margin-top: 2px; }
|
|
1031
1096
|
.ai-agent-tools strong { color: var(--ink); font-size: 12px; font-weight: 600; }
|
|
1032
1097
|
.ai-agent-tools small { display: block; margin-top: 2px; font-size: 10px; }
|
|
1033
1098
|
.default-model-select { min-width: 260px; padding: 7px 9px; font-size: 11px; }
|
|
@@ -1504,6 +1569,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1504
1569
|
}
|
|
1505
1570
|
.toast-confirmation strong { font-size: 12px; }
|
|
1506
1571
|
.toast-confirmation p { margin: 0; color: var(--muted); font-size: 11px; line-height: 1.55; white-space: pre-line; }
|
|
1572
|
+
.toast-input { width: 100%; min-height: 34px; padding: 7px 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 11px; }
|
|
1507
1573
|
.toast-confirmation-actions { display: flex; justify-content: flex-end; gap: 7px; margin-top: 3px; }
|
|
1508
1574
|
.toast-confirmation-actions button { min-height: 30px; padding: 6px 10px; }
|
|
1509
1575
|
.chapter-type-menu { position: fixed; z-index: 80; width: 176px; padding: 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); box-shadow: 0 14px 38px rgba(49,42,32,.22); }
|
|
@@ -1522,6 +1588,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1522
1588
|
.dialog::backdrop { background: rgba(34,30,25,.42); backdrop-filter: blur(3px); }
|
|
1523
1589
|
.dialog-header { display: flex; justify-content: space-between; align-items: flex-start; padding: 22px 24px 16px; border-bottom: 1px solid var(--line); }
|
|
1524
1590
|
.dialog-header h2 { margin: 0; font-size: 23px; font-weight: 500; }
|
|
1591
|
+
.dialog-header-meta { margin: 7px 0 0; color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
1525
1592
|
.dialog-close {
|
|
1526
1593
|
display: grid;
|
|
1527
1594
|
place-items: center;
|
|
@@ -1586,12 +1653,12 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1586
1653
|
.character-section-count { display: block; margin-top: 8px; color: var(--accent-dark); }
|
|
1587
1654
|
.chip-picker { display: flex; flex-wrap: wrap; gap: 7px; max-height: 190px; overflow-y: auto; padding: 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); }
|
|
1588
1655
|
.dialog-fields .member-chip { position: relative; display: inline-flex !important; width: auto; cursor: pointer; }
|
|
1589
|
-
.member-chip input { position: absolute; width: 1px !important; height: 1px; opacity: 0; }
|
|
1656
|
+
.member-chip input { position: absolute; width: 1px !important; min-width: 1px; height: 1px; opacity: 0; }
|
|
1590
1657
|
.member-chip span { display: inline-flex; align-items: center; min-height: 30px; padding: 5px 10px; border: 1px solid var(--line); border-radius: 16px; background: var(--panel); color: var(--muted); font-size: 10px; transition: background .14s ease, border-color .14s ease, color .14s ease; }
|
|
1591
1658
|
.member-chip input:checked + span { border-color: var(--accent); background: var(--accent); color: #fff; }
|
|
1592
1659
|
.member-chip input:focus-visible + span { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1593
1660
|
.checkbox-field { display: flex !important; align-items: center; grid-template-columns: 18px 1fr; }
|
|
1594
|
-
.checkbox-field input { width:
|
|
1661
|
+
.checkbox-field input { width: 16px; }
|
|
1595
1662
|
.dialog-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 24px 20px; }
|
|
1596
1663
|
.dialog-actions .reset-button { margin-right: auto; }
|
|
1597
1664
|
.import-mode-dialog { width: min(560px, calc(100vw - 32px)); }
|
|
@@ -1618,6 +1685,14 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1618
1685
|
.import-mode-dialog .dialog-actions { flex-wrap: wrap; }
|
|
1619
1686
|
}
|
|
1620
1687
|
.entity-editor-open { overflow: hidden; }
|
|
1688
|
+
.preview-record-card { cursor: pointer; }
|
|
1689
|
+
.preview-record-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1690
|
+
.entity-editor-mode-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
|
|
1691
|
+
.entity-editor-mode-actions button { min-height: 36px; }
|
|
1692
|
+
.module-pagination { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 0 4px; }
|
|
1693
|
+
.module-pagination span { color: var(--muted); font-size: 10px; }
|
|
1694
|
+
.module-pagination button { min-width: 58px; min-height: 28px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 10px; }
|
|
1695
|
+
.module-pagination button:disabled { cursor: default; opacity: .46; }
|
|
1621
1696
|
.entity-editor-view { position: fixed; z-index: 700; inset: 0; overflow: hidden; background: var(--panel); color: var(--ink); }
|
|
1622
1697
|
.entity-editor-view.hidden, .entity-editor-page.hidden { display: none; }
|
|
1623
1698
|
.entity-editor-page { width: 100%; height: 100%; min-height: 0; }
|
|
@@ -1638,16 +1713,16 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1638
1713
|
.setting-editor-title-input:focus { border-color: var(--accent); box-shadow: none; }
|
|
1639
1714
|
.setting-editor-header-fields { display: flex; align-items: center; justify-content: center; gap: 14px; min-width: 0; }
|
|
1640
1715
|
.setting-editor-header-fields > label:not(.setting-editor-lock) { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 10px; white-space: nowrap; }
|
|
1641
|
-
.setting-editor-header-fields select
|
|
1716
|
+
.setting-editor-header-fields select { min-width: 0; padding: 5px 8px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 11px; }
|
|
1642
1717
|
.setting-editor-lock { display: inline-flex; grid-template-columns: none; align-items: center; gap: 6px; padding: 0; border: 0; background: transparent; white-space: nowrap; }
|
|
1643
|
-
.setting-editor-lock input { width:
|
|
1644
|
-
.setting-editor-lock span { display:
|
|
1645
|
-
.setting-editor-lock b { color: var(--ink); font-size: 10px; }
|
|
1718
|
+
.setting-editor-lock input { width: 16px; margin: 0; }
|
|
1719
|
+
.setting-editor-lock span { display: inline-flex; align-items: center; min-height: 16px; line-height: 16px; }
|
|
1720
|
+
.setting-editor-lock b { display: block; color: var(--ink); font-size: 10px; line-height: 16px; }
|
|
1646
1721
|
.setting-editor-lock small { display: none; }
|
|
1647
|
-
.setting-editor-
|
|
1648
|
-
.setting-editor-workspace { display: grid; grid-template-rows: auto minmax(0, 1fr); min-height: 0; overflow: hidden; }
|
|
1722
|
+
.setting-editor-workspace { display: grid; grid-template-rows: minmax(0, 1fr); min-height: 0; overflow: hidden; }
|
|
1649
1723
|
.setting-editor-content { height: 100%; min-height: 0; padding: 16px clamp(16px, 2vw, 32px) 24px; overflow: hidden; }
|
|
1650
1724
|
.setting-markdown-field { display: grid; grid-template-rows: minmax(0, 1fr); height: 100%; min-height: 0; }
|
|
1725
|
+
.entity-editor-page.is-read-only .vditor-ir pre.vditor-reset[contenteditable="false"], .entity-editor-page.is-read-only .vditor-wysiwyg pre.vditor-reset[contenteditable="false"], .entity-editor-page.is-read-only .vditor-sv[contenteditable="false"] { opacity: 1; cursor: default; }
|
|
1651
1726
|
.setting-markdown-heading, .markdown-editor-field-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 24px; color: var(--ink); font-size: 14px; }
|
|
1652
1727
|
.setting-markdown-heading small, .markdown-editor-field-heading small { color: var(--muted); font-size: 10px; }
|
|
1653
1728
|
.markdown-editor-field { display: grid; gap: 10px; min-width: 0; }
|
|
@@ -1657,6 +1732,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1657
1732
|
.vditor-editor-host.vditor:not(.vditor--dark) { --border-color: var(--line); --panel-background-color: var(--surface); --toolbar-background-color: var(--surface-soft); --toolbar-icon-color: var(--muted); --toolbar-icon-hover-color: var(--accent-dark); --textarea-background-color: var(--surface); --textarea-text-color: var(--ink); --heading-border-color: var(--line); --blockquote-color: var(--muted); }
|
|
1658
1733
|
.vditor-editor-host.vditor--dark { --border-color: var(--line); --panel-background-color: var(--surface); --toolbar-background-color: var(--surface-soft); --toolbar-icon-color: var(--muted); --toolbar-icon-hover-color: var(--accent); --textarea-background-color: var(--surface); --textarea-text-color: var(--ink); --heading-border-color: var(--line); --blockquote-color: var(--muted); }
|
|
1659
1734
|
.vditor-editor-host .vditor-toolbar { flex: 0 0 auto; }
|
|
1735
|
+
.vditor-editor-host .markdown-word-count { display: inline-flex; align-items: center; min-height: 28px; margin-left: auto; padding: 0 10px; color: var(--muted); font: 10px/1 var(--font-latin), var(--font-cjk), sans-serif; white-space: nowrap; }
|
|
1660
1736
|
.vditor-editor-host .vditor-content { min-height: 0; }
|
|
1661
1737
|
.vditor-editor-host .vditor-reset { color: var(--ink); font-family: var(--font-cjk), var(--font-latin), sans-serif; }
|
|
1662
1738
|
.vditor-editor-host .vditor-ir, .vditor-editor-host .vditor-sv, .vditor-editor-host .vditor-wysiwyg { background: var(--surface); color: var(--ink); }
|
|
@@ -1918,6 +1994,234 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1918
1994
|
.account-settings-form .primary-button { width: 100%; }
|
|
1919
1995
|
}
|
|
1920
1996
|
|
|
1997
|
+
/* 移动端工作台:仅在窄屏覆盖桌面三栏布局,保留桌面端原有尺寸与排列。 */
|
|
1998
|
+
@media (max-width: 850px) {
|
|
1999
|
+
:root { --mobile-gutter: 14px; }
|
|
2000
|
+
|
|
2001
|
+
html, body { min-width: 0; overflow-x: hidden; }
|
|
2002
|
+
body { -webkit-text-size-adjust: 100%; }
|
|
2003
|
+
button, select, input, textarea, [contenteditable="true"] { touch-action: manipulation; }
|
|
2004
|
+
button, .ghost-button, .primary-button, .danger-button, select { min-height: 40px; }
|
|
2005
|
+
|
|
2006
|
+
.app-shell {
|
|
2007
|
+
grid-template-columns: minmax(0, 1fr);
|
|
2008
|
+
grid-template-rows: auto auto minmax(0, 1fr);
|
|
2009
|
+
min-height: 100dvh;
|
|
2010
|
+
height: 100dvh;
|
|
2011
|
+
overflow-x: hidden;
|
|
2012
|
+
overflow-y: hidden;
|
|
2013
|
+
}
|
|
2014
|
+
.app-shell.shelf-mode {
|
|
2015
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
2016
|
+
min-height: 100dvh;
|
|
2017
|
+
}
|
|
2018
|
+
.topbar {
|
|
2019
|
+
grid-column: 1;
|
|
2020
|
+
grid-row: 1;
|
|
2021
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
2022
|
+
grid-template-rows: 56px auto;
|
|
2023
|
+
min-width: 0;
|
|
2024
|
+
padding: 0 var(--mobile-gutter);
|
|
2025
|
+
}
|
|
2026
|
+
.app-shell.shelf-mode .topbar { grid-template-columns: minmax(0, 1fr) auto; }
|
|
2027
|
+
.brand-block { min-width: 0; padding: 0; }
|
|
2028
|
+
.app-shell:not(.shelf-mode):not(.left-panel-collapsed) .topbar .brand-block > div { visibility: hidden; }
|
|
2029
|
+
.brand-block .brand-mark { width: 30px; height: 30px; }
|
|
2030
|
+
.brand-block strong { font-size: 14px; }
|
|
2031
|
+
.brand-block small { display: none; }
|
|
2032
|
+
.mobile-module-tab { position: fixed; z-index: 32; 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; }
|
|
2033
|
+
.mobile-panel-backdrop { position: fixed; z-index: 30; inset: 0; width: 100%; height: 100%; padding: 0; border: 0; background: rgba(20, 17, 14, .28); }
|
|
2034
|
+
.app-shell:not(.shelf-mode):not(.left-panel-collapsed) .mobile-panel-backdrop { display: block; }
|
|
2035
|
+
.work-meta {
|
|
2036
|
+
grid-column: 1 / -1;
|
|
2037
|
+
grid-row: 2;
|
|
2038
|
+
min-width: 0;
|
|
2039
|
+
padding: 8px 0 10px;
|
|
2040
|
+
border-top: 1px solid var(--line);
|
|
2041
|
+
overflow: hidden;
|
|
2042
|
+
text-overflow: ellipsis;
|
|
2043
|
+
white-space: nowrap;
|
|
2044
|
+
font-size: 11px;
|
|
2045
|
+
}
|
|
2046
|
+
.top-actions { gap: 5px; padding: 0; }
|
|
2047
|
+
.top-actions .save-state, .top-actions .presence-control { display: none; }
|
|
2048
|
+
.account-button { width: 34px; height: 34px; padding: 3px; }
|
|
2049
|
+
.account-button > span:last-child { display: none; }
|
|
2050
|
+
.account-button { width: 36px; min-width: 36px; height: 36px; padding: 3px; justify-content: center; border-radius: 50%; }
|
|
2051
|
+
.account-avatar { width: 28px; height: 28px; }
|
|
2052
|
+
.account-menu { top: 46px; right: 0; width: min(220px, calc(100vw - 28px)); }
|
|
2053
|
+
.topbar-icon-button, .theme-toggle, .settings-button { width: 36px; height: 36px; min-height: 0; }
|
|
2054
|
+
button.account-button { width: 36px; height: 36px; min-height: 0; }
|
|
2055
|
+
|
|
2056
|
+
.left-panel {
|
|
2057
|
+
position: fixed;
|
|
2058
|
+
z-index: 31;
|
|
2059
|
+
top: 0;
|
|
2060
|
+
bottom: 0;
|
|
2061
|
+
right: 0;
|
|
2062
|
+
width: min(300px, 84vw);
|
|
2063
|
+
grid-column: auto;
|
|
2064
|
+
grid-row: auto;
|
|
2065
|
+
min-width: 0;
|
|
2066
|
+
padding: 76px var(--mobile-gutter) 18px;
|
|
2067
|
+
border-left: 1px solid var(--line);
|
|
2068
|
+
border-bottom: 1px solid var(--line);
|
|
2069
|
+
box-shadow: -12px 0 36px rgba(36, 30, 24, .2);
|
|
2070
|
+
overflow-y: auto;
|
|
2071
|
+
transform: translateX(0);
|
|
2072
|
+
transition: transform .2s ease;
|
|
2073
|
+
}
|
|
2074
|
+
.app-shell.left-panel-collapsed .left-panel { padding: 76px var(--mobile-gutter) 18px; transform: translateX(100%); }
|
|
2075
|
+
.app-shell.left-panel-collapsed .left-panel > :not(.left-actions) { display: block; }
|
|
2076
|
+
.app-shell.left-panel-collapsed .left-panel > .module-nav { display: grid; }
|
|
2077
|
+
.left-panel > .panel-resize-handle { display: none; }
|
|
2078
|
+
.left-actions { margin: 0 0 8px; }
|
|
2079
|
+
.left-primary-actions { gap: 6px; }
|
|
2080
|
+
.left-primary-actions .file-button { display: none; }
|
|
2081
|
+
.left-primary-actions #left-panel-toggle { position: absolute; top: 14px; right: 14px; display: grid; place-items: center; width: 32px; height: 32px; font-size: 22px; }
|
|
2082
|
+
.module-nav { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 5px; margin: 0; padding: 0 0 8px; overflow: visible; }
|
|
2083
|
+
.module-nav > button {
|
|
2084
|
+
flex: 0 0 auto;
|
|
2085
|
+
min-height: 42px;
|
|
2086
|
+
padding: 8px 12px;
|
|
2087
|
+
white-space: nowrap;
|
|
2088
|
+
}
|
|
2089
|
+
.module-nav .nav-icon { width: 16px; height: 16px; }
|
|
2090
|
+
.module-nav .module-nav-secondary.hidden { display: none !important; }
|
|
2091
|
+
.panel-heading, #novel-tree { display: none; }
|
|
2092
|
+
.app-shell.left-panel-collapsed .left-panel { padding: 8px var(--mobile-gutter) 0; }
|
|
2093
|
+
.app-shell.left-panel-collapsed .left-actions { display: block; padding: 0; }
|
|
2094
|
+
|
|
2095
|
+
.main-panel {
|
|
2096
|
+
grid-column: 1;
|
|
2097
|
+
grid-row: 2;
|
|
2098
|
+
min-width: 0;
|
|
2099
|
+
min-height: 0;
|
|
2100
|
+
overflow: hidden;
|
|
2101
|
+
}
|
|
2102
|
+
.app-shell.shelf-mode .main-panel { grid-column: 1; grid-row: 2; min-height: 0; }
|
|
2103
|
+
.ai-panel {
|
|
2104
|
+
position: fixed;
|
|
2105
|
+
z-index: 25;
|
|
2106
|
+
right: 0;
|
|
2107
|
+
bottom: 0;
|
|
2108
|
+
left: 0;
|
|
2109
|
+
grid-column: 1;
|
|
2110
|
+
grid-row: 4;
|
|
2111
|
+
min-width: 0;
|
|
2112
|
+
height: min(72dvh, 620px);
|
|
2113
|
+
min-height: 0;
|
|
2114
|
+
padding: 12px var(--mobile-gutter) 18px;
|
|
2115
|
+
border-top: 1px solid var(--line);
|
|
2116
|
+
border-left: 0;
|
|
2117
|
+
box-shadow: 0 -14px 36px rgba(36, 30, 24, .14);
|
|
2118
|
+
transform: translateY(0);
|
|
2119
|
+
transition: transform .2s ease;
|
|
2120
|
+
}
|
|
2121
|
+
.app-shell.shelf-mode .ai-panel { display: none; }
|
|
2122
|
+
.ai-panel > .panel-resize-handle { display: none; }
|
|
2123
|
+
.app-shell.ai-panel-collapsed .ai-panel { height: 58px; padding-block: 8px; transform: translateY(0); }
|
|
2124
|
+
.app-shell.ai-panel-collapsed .ai-panel > :not(.ai-heading) { display: none; }
|
|
2125
|
+
.app-shell.ai-panel-collapsed .ai-heading { display: flex; justify-content: space-between; padding: 0; }
|
|
2126
|
+
|
|
2127
|
+
.shelf-view { height: auto; min-height: 100%; padding: 28px var(--mobile-gutter) 42px; }
|
|
2128
|
+
#shelf-view, #settings-hub-view { padding-bottom: 0; }
|
|
2129
|
+
#shelf-view .product-footer, #settings-hub-view .product-footer { margin-bottom: 0; padding-bottom: env(safe-area-inset-bottom); }
|
|
2130
|
+
.shelf-header, .module-header { align-items: stretch; flex-direction: column; gap: 14px; margin-bottom: 20px; }
|
|
2131
|
+
.shelf-header h1 { font-size: clamp(24px, 7.5vw, 32px); }
|
|
2132
|
+
.shelf-header .primary-button { align-self: flex-start; min-width: 150px; min-height: 40px; padding: 10px 18px; }
|
|
2133
|
+
.module-header-actions { width: 100%; }
|
|
2134
|
+
.book-shelf { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 14px; }
|
|
2135
|
+
.book-info { padding-top: 10px; padding-right: 0; }
|
|
2136
|
+
.book-info strong { font-size: 14px; }
|
|
2137
|
+
.book-card-settings { opacity: 1; }
|
|
2138
|
+
.welcome-view { padding: 28px var(--mobile-gutter); }
|
|
2139
|
+
.welcome-view h1 { font-size: clamp(30px, 9vw, 44px); }
|
|
2140
|
+
.welcome-grid { grid-template-columns: 1fr; margin-top: 34px; }
|
|
2141
|
+
|
|
2142
|
+
.editor-toolbar { padding: 18px var(--mobile-gutter) 14px; }
|
|
2143
|
+
.editor-actions { position: fixed; z-index: 34; right: 0; bottom: 18px; 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; }
|
|
2144
|
+
.app-shell.left-panel-collapsed .editor-actions { transform: translateX(100%); pointer-events: none; }
|
|
2145
|
+
.editor-actions .chapter-stats { grid-column: 1 / -1; }
|
|
2146
|
+
.editor-actions > button { min-width: 0; min-height: 36px; padding-inline: 8px; font-size: 11px; }
|
|
2147
|
+
.chapter-title { font-size: 23px; }
|
|
2148
|
+
.chapter-content { padding: 22px 16px 64px 12px; font-size: max(16px, var(--editor-font-size)); }
|
|
2149
|
+
.chapter-line-numbers { width: 32px; font-size: 11px; }
|
|
2150
|
+
.chapter-editor-frame { grid-template-columns: 32px minmax(0, 1fr); }
|
|
2151
|
+
.chapter-line-measure { left: 32px; }
|
|
2152
|
+
.chapter-insight { margin: 10px var(--mobile-gutter) 0; }
|
|
2153
|
+
|
|
2154
|
+
.module-view { padding: 26px var(--mobile-gutter) 46px; }
|
|
2155
|
+
.module-header { padding-bottom: 18px; }
|
|
2156
|
+
.module-header h1 { font-size: 29px; }
|
|
2157
|
+
.module-header-actions { justify-content: stretch; }
|
|
2158
|
+
.module-header-actions > * { flex: 1 1 auto; }
|
|
2159
|
+
.module-content { padding: 18px 0 56px; }
|
|
2160
|
+
.card-grid, .provider-card-grid { grid-template-columns: minmax(0, 1fr); }
|
|
2161
|
+
.record-card { padding: 15px; }
|
|
2162
|
+
.card-actions, .task-row-actions, .module-header-actions { gap: 8px; }
|
|
2163
|
+
.card-actions button, .task-row-actions button { flex: 1 1 auto; min-height: 38px; }
|
|
2164
|
+
.setting-row, .module-row { padding: 13px; }
|
|
2165
|
+
.settings-layout-toolbar, .module-layout-toolbar { align-items: stretch; flex-direction: column; }
|
|
2166
|
+
.settings-layout-toggle, .module-layout-toggle { width: 100%; }
|
|
2167
|
+
.settings-layout-toggle button { flex: 1; }
|
|
2168
|
+
|
|
2169
|
+
.dialog, .wide-dialog, .account-dialog {
|
|
2170
|
+
width: calc(100vw - 20px);
|
|
2171
|
+
max-width: calc(100vw - 20px);
|
|
2172
|
+
max-height: calc(100dvh - 20px);
|
|
2173
|
+
margin: auto;
|
|
2174
|
+
border-radius: 10px;
|
|
2175
|
+
}
|
|
2176
|
+
.dialog-header { padding: 14px 16px 12px; }
|
|
2177
|
+
.dialog-header h2 { font-size: 20px; }
|
|
2178
|
+
.dialog-fields, .appearance-grid, .access-dialog-body, .account-settings-body, .versions-list, .entity-history-list { padding-inline: 16px; }
|
|
2179
|
+
.dialog-actions { flex-wrap: wrap; padding: 12px 16px 16px; }
|
|
2180
|
+
.dialog-actions > button { flex: 1 1 120px; }
|
|
2181
|
+
.search-form { grid-template-columns: minmax(0, 1fr); }
|
|
2182
|
+
.search-form .primary-button { width: 100%; }
|
|
2183
|
+
.appearance-grid { grid-template-columns: minmax(0, 1fr); }
|
|
2184
|
+
.appearance-whitespace-field, .font-preview { grid-column: auto; }
|
|
2185
|
+
.access-row { grid-template-columns: minmax(0, 1fr); align-items: stretch; }
|
|
2186
|
+
.access-row select, .access-row button, .work-access-field .ghost-button { width: 100%; }
|
|
2187
|
+
.work-access-field { align-items: stretch; flex-direction: column; }
|
|
2188
|
+
|
|
2189
|
+
.entity-editor-view { min-width: 0; }
|
|
2190
|
+
.entity-editor-header, .character-editor-header { grid-template-columns: auto minmax(0, 1fr); gap: 8px; padding: 12px var(--mobile-gutter); }
|
|
2191
|
+
.entity-editor-mode-actions, .character-editor-header-actions { grid-column: 1 / -1; justify-content: stretch; flex-wrap: wrap; }
|
|
2192
|
+
.entity-editor-mode-actions > button, .character-editor-header-actions > button { flex: 1 1 auto; }
|
|
2193
|
+
.setting-editor-header { min-height: 0; }
|
|
2194
|
+
.setting-editor-content { padding: 12px; }
|
|
2195
|
+
.setting-markdown-field { height: 68dvh; }
|
|
2196
|
+
.character-editor-actions { padding: 12px var(--mobile-gutter) 16px; }
|
|
2197
|
+
.character-editor-actions > div { justify-content: stretch; flex-wrap: wrap; }
|
|
2198
|
+
.character-editor-actions > div > button { flex: 1 1 auto; }
|
|
2199
|
+
.character-markdown-editor { padding: 12px; }
|
|
2200
|
+
.character-markdown-editor-actions { justify-content: stretch; flex-wrap: wrap; }
|
|
2201
|
+
.character-markdown-editor-actions button { flex: 1 1 auto; }
|
|
2202
|
+
|
|
2203
|
+
.relationship-table-wrapper, .data-table-wrapper, .table-scroll, .module-table-wrapper { max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
|
|
2204
|
+
table { min-width: 620px; }
|
|
2205
|
+
}
|
|
2206
|
+
|
|
2207
|
+
@media (max-width: 480px) {
|
|
2208
|
+
.top-actions .settings-button { display: none; }
|
|
2209
|
+
.topbar-icon-button, .theme-toggle, .account-button { flex: 0 0 32px; width: 32px; min-width: 32px; height: 32px; }
|
|
2210
|
+
button.account-button { width: 32px; height: 32px; }
|
|
2211
|
+
.top-actions { gap: 3px; }
|
|
2212
|
+
.left-primary-actions .file-button { font-size: 10px; }
|
|
2213
|
+
.editor-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2214
|
+
.editor-actions .chapter-stats { display: none; }
|
|
2215
|
+
.editor-actions > button { width: auto; }
|
|
2216
|
+
.book-shelf { grid-template-columns: minmax(0, 1fr); max-width: 280px; }
|
|
2217
|
+
.book-add-card { min-height: 220px; }
|
|
2218
|
+
.onboarding-popover { width: calc(100vw - 20px); }
|
|
2219
|
+
}
|
|
2220
|
+
|
|
2221
|
+
@media (max-width: 850px) {
|
|
2222
|
+
#onboarding-menu-button { display: none; }
|
|
2223
|
+
}
|
|
2224
|
+
|
|
1921
2225
|
@media (prefers-reduced-motion: reduce) {
|
|
1922
2226
|
*, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
|
|
1923
2227
|
}
|
package/dist/user-auth.js
CHANGED
|
@@ -700,6 +700,8 @@ function workModuleRequirements(request, write) {
|
|
|
700
700
|
return write ? { ownerOnly: true } : {};
|
|
701
701
|
if (/^\/api\/works\/[^/]+\/members(?:\/[^/]+)?$/u.test(pathname))
|
|
702
702
|
return { ownerOnly: true };
|
|
703
|
+
if (/^\/api\/works\/[^/]+\/presence$/u.test(pathname))
|
|
704
|
+
return {};
|
|
703
705
|
if (/^\/api\/works\/[^/]+\/audit-logs$/u.test(pathname))
|
|
704
706
|
return { ownerOnly: true };
|
|
705
707
|
if (/^\/api\/works\/[^/]+\/models$/u.test(pathname))
|