pandorga 1.3.7 → 1.3.9
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/_layouts/home.html +2 -2
- data/assets/css/base.css +2 -0
- data/assets/css/ledger/home.css +34 -21
- data/assets/icons/studio-logo.svg +6 -0
- data/lib/pandorga/commands/new.rb +1 -1
- data/lib/pandorga/version.rb +1 -1
- data/studio/assets/index-B2os0c1O.css +1 -0
- data/studio/assets/{index-DKqy76nz.js → index-dPB8Vpbd.js} +96 -96
- data/studio/index.html +2 -2
- data/studio-app/src/main.js +211 -62
- data/studio-app/src/styles/studio.css +106 -0
- metadata +4 -3
- data/studio/assets/index-B2nCakLm.css +0 -1
data/studio/index.html
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
rel="stylesheet"
|
|
19
19
|
href="https://cdn.jsdelivr.net/gh/lipis/flag-icons@7.2.3/css/flag-icons.min.css"
|
|
20
20
|
/>
|
|
21
|
-
<script type="module" crossorigin src="/studio/assets/index-
|
|
22
|
-
<link rel="stylesheet" crossorigin href="/studio/assets/index-
|
|
21
|
+
<script type="module" crossorigin src="/studio/assets/index-dPB8Vpbd.js"></script>
|
|
22
|
+
<link rel="stylesheet" crossorigin href="/studio/assets/index-B2os0c1O.css">
|
|
23
23
|
</head>
|
|
24
24
|
<body>
|
|
25
25
|
<div id="app"></div>
|
data/studio-app/src/main.js
CHANGED
|
@@ -200,8 +200,10 @@ const state = {
|
|
|
200
200
|
aiProofSelection: null,
|
|
201
201
|
/** Open left-nav accordion groups (start empty = all folded). */
|
|
202
202
|
navOpenGroups: new Set(),
|
|
203
|
-
/** Mobile nav disclosure (≤960px);
|
|
203
|
+
/** Mobile nav disclosure (≤960px); desktop left aside from 961px up. */
|
|
204
204
|
navMenuOpen: false,
|
|
205
|
+
/** Theme menu (light / dark / system) in the icon toolbar. */
|
|
206
|
+
themeMenuOpen: false,
|
|
205
207
|
/** Per-collection list query (session memory). */
|
|
206
208
|
listQueryByCollection: Object.create(null),
|
|
207
209
|
/** Per-collection sort id (session + localStorage). */
|
|
@@ -376,6 +378,11 @@ function closeNavMenu() {
|
|
|
376
378
|
state.navMenuOpen = false;
|
|
377
379
|
}
|
|
378
380
|
|
|
381
|
+
function closeStudioMenus() {
|
|
382
|
+
closeNavMenu();
|
|
383
|
+
closeThemeMenu();
|
|
384
|
+
}
|
|
385
|
+
|
|
379
386
|
function goHome() {
|
|
380
387
|
destroyBodyEditor();
|
|
381
388
|
state.collection = null;
|
|
@@ -693,15 +700,166 @@ function el(tag, attrs = {}, children = []) {
|
|
|
693
700
|
return node;
|
|
694
701
|
}
|
|
695
702
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
703
|
+
const THEME_CHOICE_KEY = "studio-theme";
|
|
704
|
+
const THEME_MENU_ICONS = { light: "light_mode", dark: "dark_mode", system: "routine" };
|
|
705
|
+
|
|
706
|
+
function themeChoice() {
|
|
707
|
+
const saved = localStorage.getItem(THEME_CHOICE_KEY);
|
|
708
|
+
if (saved === "light" || saved === "dark" || saved === "system") return saved;
|
|
709
|
+
return "system";
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
function resolvedTheme() {
|
|
713
|
+
const choice = themeChoice();
|
|
714
|
+
if (choice === "dark") return "dark";
|
|
715
|
+
if (choice === "light") return "light";
|
|
716
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
function setThemeChoice(choice) {
|
|
720
|
+
localStorage.setItem(THEME_CHOICE_KEY, choice);
|
|
721
|
+
applyResolvedTheme();
|
|
722
|
+
syncThemeMenuUi();
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
function applyResolvedTheme() {
|
|
726
|
+
document.documentElement.setAttribute("data-theme", resolvedTheme());
|
|
699
727
|
}
|
|
700
728
|
|
|
701
729
|
function initTheme() {
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
730
|
+
applyResolvedTheme();
|
|
731
|
+
const mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
732
|
+
if (typeof mq.addEventListener === "function") {
|
|
733
|
+
mq.addEventListener("change", () => {
|
|
734
|
+
if (themeChoice() === "system") applyResolvedTheme();
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
function closeThemeMenu() {
|
|
740
|
+
state.themeMenuOpen = false;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
function syncThemeMenuUi() {
|
|
744
|
+
const active = themeChoice();
|
|
745
|
+
const icon = document.querySelector("[data-studio-theme-icon]");
|
|
746
|
+
if (icon) icon.textContent = THEME_MENU_ICONS[active] || THEME_MENU_ICONS.system;
|
|
747
|
+
for (const item of document.querySelectorAll("[data-theme-choice]")) {
|
|
748
|
+
const choice = item.getAttribute("data-theme-choice");
|
|
749
|
+
const selected = choice === active;
|
|
750
|
+
item.setAttribute("aria-checked", selected ? "true" : "false");
|
|
751
|
+
item.classList.toggle("is-selected", selected);
|
|
752
|
+
}
|
|
753
|
+
const btn = document.querySelector("[data-studio-action='theme-menu']");
|
|
754
|
+
const menu = document.getElementById("studio-theme-menu");
|
|
755
|
+
if (btn && menu) {
|
|
756
|
+
btn.setAttribute("aria-expanded", state.themeMenuOpen ? "true" : "false");
|
|
757
|
+
menu.hidden = !state.themeMenuOpen;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
function renderThemeMenu() {
|
|
762
|
+
const choices = [
|
|
763
|
+
{ id: "light", label: "Light", icon: "light_mode" },
|
|
764
|
+
{ id: "dark", label: "Dark", icon: "dark_mode" },
|
|
765
|
+
{ id: "system", label: "System", icon: "routine" },
|
|
766
|
+
];
|
|
767
|
+
const menu = el("div", {
|
|
768
|
+
className: "studio-theme-menu-panel",
|
|
769
|
+
id: "studio-theme-menu",
|
|
770
|
+
role: "menu",
|
|
771
|
+
"aria-label": "Choose color theme",
|
|
772
|
+
hidden: !state.themeMenuOpen,
|
|
773
|
+
}, choices.map((c) =>
|
|
774
|
+
el("button", {
|
|
775
|
+
className: "studio-theme-choice",
|
|
776
|
+
type: "button",
|
|
777
|
+
role: "menuitemradio",
|
|
778
|
+
"data-theme-choice": c.id,
|
|
779
|
+
"aria-checked": themeChoice() === c.id ? "true" : "false",
|
|
780
|
+
onClick: (e) => {
|
|
781
|
+
e.stopPropagation();
|
|
782
|
+
setThemeChoice(c.id);
|
|
783
|
+
state.themeMenuOpen = false;
|
|
784
|
+
syncThemeMenuUi();
|
|
785
|
+
const frame = $("#preview-frame");
|
|
786
|
+
if (frame) void mountMermaidPreview(frame);
|
|
787
|
+
},
|
|
788
|
+
}, [
|
|
789
|
+
materialIcon(c.icon),
|
|
790
|
+
el("span", { text: c.label }),
|
|
791
|
+
])
|
|
792
|
+
));
|
|
793
|
+
|
|
794
|
+
const btn = el("button", {
|
|
795
|
+
className: "btn btn-icon",
|
|
796
|
+
type: "button",
|
|
797
|
+
title: "Theme",
|
|
798
|
+
"aria-label": "Theme",
|
|
799
|
+
"data-studio-action": "theme-menu",
|
|
800
|
+
"aria-haspopup": "true",
|
|
801
|
+
"aria-expanded": state.themeMenuOpen ? "true" : "false",
|
|
802
|
+
"aria-controls": "studio-theme-menu",
|
|
803
|
+
onClick: (e) => {
|
|
804
|
+
e.stopPropagation();
|
|
805
|
+
state.themeMenuOpen = !state.themeMenuOpen;
|
|
806
|
+
syncThemeMenuUi();
|
|
807
|
+
},
|
|
808
|
+
}, [
|
|
809
|
+
el("span", {
|
|
810
|
+
className: "material-symbols-outlined",
|
|
811
|
+
"data-studio-theme-icon": "true",
|
|
812
|
+
text: THEME_MENU_ICONS[themeChoice()] || THEME_MENU_ICONS.system,
|
|
813
|
+
"aria-hidden": "true",
|
|
814
|
+
}),
|
|
815
|
+
]);
|
|
816
|
+
|
|
817
|
+
return el("div", { className: "studio-theme-menu" }, [btn, menu]);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
function renderStudioToolbar() {
|
|
821
|
+
const saveLabel = state.saving ? "Saving…" : state.dirty ? "Save draft" : "Saved";
|
|
822
|
+
const saveIcon = state.saving ? "progress_activity" : state.dirty ? "save" : "check";
|
|
823
|
+
return el("div", { className: "studio-toolbar studio-icon-bar" }, [
|
|
824
|
+
el("span", {
|
|
825
|
+
className: "status-pill" + (state.error ? " error" : ""),
|
|
826
|
+
text: state.error
|
|
827
|
+
? "Error"
|
|
828
|
+
: state.status || (state.session?.email || state.session?.userId || ""),
|
|
829
|
+
title: state.error || state.errorDetail || state.status || "",
|
|
830
|
+
}),
|
|
831
|
+
el("span", { className: "spacer" }),
|
|
832
|
+
renderThemeMenu(),
|
|
833
|
+
el("button", {
|
|
834
|
+
className: "btn btn-icon",
|
|
835
|
+
type: "button",
|
|
836
|
+
title: "Revert all edits to the last loaded or saved version",
|
|
837
|
+
"aria-label": "Discard edits",
|
|
838
|
+
"data-studio-action": "discard",
|
|
839
|
+
disabled: !state.file || !state.dirty || !state.baseline,
|
|
840
|
+
onClick: () => discardChanges(),
|
|
841
|
+
}, [materialIcon("undo")]),
|
|
842
|
+
el("button", {
|
|
843
|
+
className: "btn btn-icon btn-primary",
|
|
844
|
+
type: "button",
|
|
845
|
+
title: state.saving
|
|
846
|
+
? "Saving this draft"
|
|
847
|
+
: state.dirty
|
|
848
|
+
? "Commit this draft"
|
|
849
|
+
: "No edits to commit yet",
|
|
850
|
+
"aria-label": saveLabel,
|
|
851
|
+
"data-studio-action": "save",
|
|
852
|
+
disabled: state.saving || !state.file || !state.dirty,
|
|
853
|
+
onClick: () => saveCurrent(),
|
|
854
|
+
}, [
|
|
855
|
+
el("span", {
|
|
856
|
+
className:
|
|
857
|
+
"material-symbols-outlined" + (state.saving ? " studio-icon-spin" : ""),
|
|
858
|
+
text: saveIcon,
|
|
859
|
+
"aria-hidden": "true",
|
|
860
|
+
}),
|
|
861
|
+
]),
|
|
862
|
+
]);
|
|
705
863
|
}
|
|
706
864
|
|
|
707
865
|
function clerkUserEmail(clerk) {
|
|
@@ -827,13 +985,31 @@ function renderPendingReviewGate(clerk, emailHint) {
|
|
|
827
985
|
app.append(box);
|
|
828
986
|
}
|
|
829
987
|
|
|
988
|
+
/** Left-nav / map section order (References before Portfolio). */
|
|
989
|
+
const NAV_GROUP_ORDER = [
|
|
990
|
+
"Writing",
|
|
991
|
+
"References",
|
|
992
|
+
"Portfolio",
|
|
993
|
+
"Pages",
|
|
994
|
+
"CV Summary",
|
|
995
|
+
"Presentation",
|
|
996
|
+
"Profile",
|
|
997
|
+
];
|
|
998
|
+
|
|
830
999
|
function collectionGroups(schema) {
|
|
831
1000
|
const map = new Map();
|
|
832
1001
|
for (const c of schema.collections) {
|
|
833
1002
|
if (!map.has(c.group)) map.set(c.group, []);
|
|
834
1003
|
map.get(c.group).push(c);
|
|
835
1004
|
}
|
|
836
|
-
|
|
1005
|
+
const ordered = new Map();
|
|
1006
|
+
for (const group of NAV_GROUP_ORDER) {
|
|
1007
|
+
if (map.has(group)) ordered.set(group, map.get(group));
|
|
1008
|
+
}
|
|
1009
|
+
for (const [group, cols] of map) {
|
|
1010
|
+
if (!ordered.has(group)) ordered.set(group, cols);
|
|
1011
|
+
}
|
|
1012
|
+
return ordered;
|
|
837
1013
|
}
|
|
838
1014
|
|
|
839
1015
|
/** Left-nav Media section (Library → content/media browser). */
|
|
@@ -942,6 +1118,9 @@ function renderShell() {
|
|
|
942
1118
|
className: "studio-nav-menu-toggle",
|
|
943
1119
|
type: "button",
|
|
944
1120
|
title: menuOpen ? "Close collections menu" : "Open collections menu",
|
|
1121
|
+
"aria-label": menuOpen
|
|
1122
|
+
? `Close menu (${currentNavLabel()})`
|
|
1123
|
+
: `Open menu (${currentNavLabel()})`,
|
|
945
1124
|
"aria-expanded": menuOpen ? "true" : "false",
|
|
946
1125
|
"aria-controls": "studio-nav-panel",
|
|
947
1126
|
onClick: () => {
|
|
@@ -950,12 +1129,12 @@ function renderShell() {
|
|
|
950
1129
|
},
|
|
951
1130
|
}, [
|
|
952
1131
|
el("span", {
|
|
953
|
-
className: "studio-nav-menu-label",
|
|
1132
|
+
className: "studio-nav-menu-label sr-only",
|
|
954
1133
|
text: currentNavLabel(),
|
|
955
1134
|
}),
|
|
956
1135
|
el("span", {
|
|
957
1136
|
className: "material-symbols-outlined",
|
|
958
|
-
text: menuOpen ? "
|
|
1137
|
+
text: menuOpen ? "close" : "menu",
|
|
959
1138
|
"aria-hidden": "true",
|
|
960
1139
|
}),
|
|
961
1140
|
]);
|
|
@@ -1046,57 +1225,7 @@ function renderShell() {
|
|
|
1046
1225
|
]
|
|
1047
1226
|
);
|
|
1048
1227
|
|
|
1049
|
-
const toolbar =
|
|
1050
|
-
el("span", {
|
|
1051
|
-
className: "status-pill" + (state.error ? " error" : ""),
|
|
1052
|
-
text: state.error
|
|
1053
|
-
? "Error"
|
|
1054
|
-
: state.status || (state.session?.email || state.session?.userId || ""),
|
|
1055
|
-
title: state.error || state.errorDetail || state.status || "",
|
|
1056
|
-
}),
|
|
1057
|
-
el("span", { className: "spacer" }),
|
|
1058
|
-
el("button", {
|
|
1059
|
-
className: "btn",
|
|
1060
|
-
type: "button",
|
|
1061
|
-
text:
|
|
1062
|
-
document.documentElement.getAttribute("data-theme") === "dark"
|
|
1063
|
-
? "Dark"
|
|
1064
|
-
: "Light",
|
|
1065
|
-
title: "Toggle light / dark theme",
|
|
1066
|
-
"data-studio-action": "theme",
|
|
1067
|
-
onClick: (e) => {
|
|
1068
|
-
const cur = document.documentElement.getAttribute("data-theme");
|
|
1069
|
-
const next = cur === "dark" ? "light" : "dark";
|
|
1070
|
-
setTheme(next);
|
|
1071
|
-
e.currentTarget.textContent = next === "dark" ? "Dark" : "Light";
|
|
1072
|
-
// Mermaid bakes palette at render time — redraw on theme flip.
|
|
1073
|
-
const frame = $("#preview-frame");
|
|
1074
|
-
if (frame) void mountMermaidPreview(frame);
|
|
1075
|
-
},
|
|
1076
|
-
}),
|
|
1077
|
-
el("button", {
|
|
1078
|
-
className: "btn",
|
|
1079
|
-
type: "button",
|
|
1080
|
-
text: "Discard",
|
|
1081
|
-
title: "Revert all edits to the last loaded or saved version",
|
|
1082
|
-
"data-studio-action": "discard",
|
|
1083
|
-
disabled: !state.file || !state.dirty || !state.baseline,
|
|
1084
|
-
onClick: () => discardChanges(),
|
|
1085
|
-
}),
|
|
1086
|
-
el("button", {
|
|
1087
|
-
className: "btn btn-primary",
|
|
1088
|
-
type: "button",
|
|
1089
|
-
text: state.saving ? "Saving…" : state.dirty ? "Save" : "Saved",
|
|
1090
|
-
title: state.saving
|
|
1091
|
-
? "Saving this draft"
|
|
1092
|
-
: state.dirty
|
|
1093
|
-
? "Commit this draft"
|
|
1094
|
-
: "No edits to commit yet",
|
|
1095
|
-
"data-studio-action": "save",
|
|
1096
|
-
disabled: state.saving || !state.file || !state.dirty,
|
|
1097
|
-
onClick: () => saveCurrent(),
|
|
1098
|
-
}),
|
|
1099
|
-
]);
|
|
1228
|
+
const toolbar = renderStudioToolbar();
|
|
1100
1229
|
|
|
1101
1230
|
const main = el("div", { className: "studio-main" }, [
|
|
1102
1231
|
toolbar,
|
|
@@ -1110,6 +1239,16 @@ function renderShell() {
|
|
|
1110
1239
|
|
|
1111
1240
|
app.append(el("div", { className: "studio-shell" }, [nav, main]));
|
|
1112
1241
|
renderMain();
|
|
1242
|
+
syncThemeMenuUi();
|
|
1243
|
+
if (!window.__studioMenuDismissBound) {
|
|
1244
|
+
window.__studioMenuDismissBound = true;
|
|
1245
|
+
document.addEventListener("click", () => {
|
|
1246
|
+
if (state.themeMenuOpen) {
|
|
1247
|
+
state.themeMenuOpen = false;
|
|
1248
|
+
syncThemeMenuUi();
|
|
1249
|
+
}
|
|
1250
|
+
});
|
|
1251
|
+
}
|
|
1113
1252
|
}
|
|
1114
1253
|
|
|
1115
1254
|
function renderStudioBreadcrumb() {
|
|
@@ -1426,13 +1565,23 @@ function syncCommitButtons() {
|
|
|
1426
1565
|
const save = document.querySelector("[data-studio-action='save']");
|
|
1427
1566
|
const discard = document.querySelector("[data-studio-action='discard']");
|
|
1428
1567
|
if (save) {
|
|
1568
|
+
const saveLabel = state.saving ? "Saving…" : state.dirty ? "Save draft" : "Saved";
|
|
1429
1569
|
save.disabled = state.saving || !state.file || !state.dirty;
|
|
1430
|
-
save.textContent = state.saving ? "Saving…" : state.dirty ? "Save" : "Saved";
|
|
1431
1570
|
save.title = state.saving
|
|
1432
1571
|
? "Saving this draft"
|
|
1433
1572
|
: state.dirty
|
|
1434
1573
|
? "Commit this draft"
|
|
1435
1574
|
: "No edits to commit yet";
|
|
1575
|
+
save.setAttribute("aria-label", saveLabel);
|
|
1576
|
+
const icon = save.querySelector(".material-symbols-outlined");
|
|
1577
|
+
if (icon) {
|
|
1578
|
+
icon.textContent = state.saving
|
|
1579
|
+
? "progress_activity"
|
|
1580
|
+
: state.dirty
|
|
1581
|
+
? "save"
|
|
1582
|
+
: "check";
|
|
1583
|
+
icon.classList.toggle("studio-icon-spin", state.saving);
|
|
1584
|
+
}
|
|
1436
1585
|
}
|
|
1437
1586
|
if (discard) {
|
|
1438
1587
|
discard.disabled = !state.file || !state.dirty || !state.baseline;
|
|
@@ -217,6 +217,20 @@ a {
|
|
|
217
217
|
min-height: 0;
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
+
@media (min-width: 961px) {
|
|
221
|
+
.studio-shell {
|
|
222
|
+
grid-template-columns: 16.5rem minmax(0, 1fr);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.studio-nav-menu-toggle {
|
|
226
|
+
display: none;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.studio-nav-panel {
|
|
230
|
+
display: flex;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
220
234
|
.studio-brand {
|
|
221
235
|
display: grid;
|
|
222
236
|
grid-template-columns: 2.5rem minmax(0, 1fr);
|
|
@@ -486,6 +500,98 @@ button.studio-brand-home[aria-current="page"] {
|
|
|
486
500
|
z-index: 1;
|
|
487
501
|
}
|
|
488
502
|
|
|
503
|
+
.studio-icon-bar .btn-icon {
|
|
504
|
+
width: var(--studio-list-control-height);
|
|
505
|
+
min-width: var(--studio-list-control-height);
|
|
506
|
+
padding: 0.2rem;
|
|
507
|
+
border-radius: 0;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.studio-icon-bar .btn-icon .material-symbols-outlined {
|
|
511
|
+
font-size: 1.35rem;
|
|
512
|
+
line-height: 1;
|
|
513
|
+
font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
.studio-icon-spin {
|
|
517
|
+
animation: studio-icon-spin 0.85s linear infinite;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
@keyframes studio-icon-spin {
|
|
521
|
+
from {
|
|
522
|
+
transform: rotate(0deg);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
to {
|
|
526
|
+
transform: rotate(360deg);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.studio-theme-menu {
|
|
531
|
+
position: relative;
|
|
532
|
+
flex-shrink: 0;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.studio-theme-menu-panel {
|
|
536
|
+
position: absolute;
|
|
537
|
+
right: 0;
|
|
538
|
+
top: calc(100% + 0.25rem);
|
|
539
|
+
min-width: 9.5rem;
|
|
540
|
+
padding: 0.25rem 0;
|
|
541
|
+
background: var(--background);
|
|
542
|
+
border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
|
|
543
|
+
box-shadow: 0 0.35rem 1rem color-mix(in srgb, var(--on-surface) 12%, transparent);
|
|
544
|
+
z-index: 20;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.studio-theme-menu-panel[hidden] {
|
|
548
|
+
display: none;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
.studio-theme-choice {
|
|
552
|
+
width: 100%;
|
|
553
|
+
display: flex;
|
|
554
|
+
align-items: center;
|
|
555
|
+
gap: 0.55rem;
|
|
556
|
+
margin: 0;
|
|
557
|
+
padding: 0.45rem 0.75rem;
|
|
558
|
+
border: 0;
|
|
559
|
+
background: transparent;
|
|
560
|
+
cursor: pointer;
|
|
561
|
+
color: var(--on-surface-variant);
|
|
562
|
+
font-family: var(--font-body);
|
|
563
|
+
font-size: var(--studio-type-ui);
|
|
564
|
+
text-align: left;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
.studio-theme-choice:hover {
|
|
568
|
+
color: var(--primary);
|
|
569
|
+
background: var(--surface-high);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
.studio-theme-choice.is-selected,
|
|
573
|
+
.studio-theme-choice[aria-checked="true"] {
|
|
574
|
+
color: var(--primary);
|
|
575
|
+
background: var(--surface-high);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
.studio-theme-choice .material-symbols-outlined {
|
|
579
|
+
font-size: 1.2rem;
|
|
580
|
+
line-height: 1;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
.sr-only {
|
|
584
|
+
position: absolute;
|
|
585
|
+
width: 1px;
|
|
586
|
+
height: 1px;
|
|
587
|
+
padding: 0;
|
|
588
|
+
margin: -1px;
|
|
589
|
+
overflow: hidden;
|
|
590
|
+
clip: rect(0, 0, 0, 0);
|
|
591
|
+
white-space: nowrap;
|
|
592
|
+
border: 0;
|
|
593
|
+
}
|
|
594
|
+
|
|
489
595
|
.btn {
|
|
490
596
|
border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
|
|
491
597
|
background: var(--background);
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pandorga
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- The Pandorga contributors
|
|
@@ -225,6 +225,7 @@ files:
|
|
|
225
225
|
- assets/css/ledger/rascunhos.css
|
|
226
226
|
- assets/css/ledger/sources.css
|
|
227
227
|
- assets/css/ledger/writing.css
|
|
228
|
+
- assets/icons/studio-logo.svg
|
|
228
229
|
- assets/tailwind-play.js
|
|
229
230
|
- examples/full/Gemfile
|
|
230
231
|
- examples/full/_config.yml
|
|
@@ -448,8 +449,8 @@ files:
|
|
|
448
449
|
- studio-app/src/preview/render.js
|
|
449
450
|
- studio-app/src/styles/studio.css
|
|
450
451
|
- studio-app/vite.config.js
|
|
451
|
-
- studio/assets/index-
|
|
452
|
-
- studio/assets/index-
|
|
452
|
+
- studio/assets/index-B2os0c1O.css
|
|
453
|
+
- studio/assets/index-dPB8Vpbd.js
|
|
453
454
|
- studio/index.html
|
|
454
455
|
- studio/schema.yml
|
|
455
456
|
- templates/articles/README.md
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root,[data-theme=light]{color-scheme:light;--primary: #1c5a7a;--secondary: #287445;--tertiary: #746f30;--background: #ffffff;--panel: #f4f4f4;--surface-high: #ebebeb;--surface-card: #ffffff;--on-surface: #000000;--on-surface-variant: #5e5d59;--outline: #5c5c5c;--outline-variant: #b8b8b8;--error: #ba1a1a;--scrollbar-track: var(--panel);--scrollbar-thumb: color-mix(in srgb, var(--outline-variant) 75%, var(--panel));--scrollbar-thumb-hover: color-mix(in srgb, var(--outline) 70%, var(--panel));--cubist-shard-opacity: 18%;--cubist-shard-opacity-strong: 26%;--shard-alpha: polygon(26% 0, 100% 0, 78% 100%, 0 68%);--shard-beta: polygon(0 0, 74% 18%, 100% 100%, 18% 84%);--font-body: "Newsreader", Georgia, serif;--font-display: "Newsreader", Georgia, serif;--font-title: "Cinzel Decorative", "Times New Roman", serif;--font-label: "Marcellus SC", "Newsreader", Georgia, serif;--font-mono: "Courier Prime", ui-monospace, monospace;--studio-font-size: 18px;--studio-type-display: 1.55rem;--studio-type-title: 1.15rem;--studio-type-body: 1rem;--studio-type-ui: .9rem;--studio-type-meta: .8rem;--studio-type-micro: .72rem;--studio-brand-title: calc(var(--studio-type-title) + 3pt);--studio-nav-label: calc(var(--studio-type-body) - .5pt);--studio-nav-item: var(--studio-type-body);--studio-ledger-title: var(--studio-type-body);--studio-ledger-meta: var(--studio-type-meta);--studio-list-control-height: 2.25rem;--studio-ledger-thumb-w: 4rem;--studio-ledger-thumb-h: 3rem;--studio-space-2xs: .25rem;--studio-space-xs: .4rem;--studio-space-sm: .65rem;--studio-space-md: .95rem;--studio-space-lg: 1.35rem;--studio-pane-pad: 1.15rem 1.35rem;--studio-editor-min-height: max(24rem, calc(100dvh - 7.5rem) )}[data-theme=dark]{color-scheme:dark;--primary: #a4c8da;--secondary: #95c8a6;--tertiary: #ddd8a8;--background: #0c0c0e;--panel: #141418;--surface-high: #26262b;--surface-card: #0c0c0e;--on-surface: #ffffff;--on-surface-variant: #b8b7ae;--outline: #93938d;--outline-variant: #45454c;--error: #ffb4ab;--scrollbar-track: var(--panel);--scrollbar-thumb: color-mix(in srgb, var(--outline-variant) 85%, var(--surface-high));--scrollbar-thumb-hover: color-mix(in srgb, var(--outline) 55%, var(--surface-high));--cubist-shard-opacity: 10%;--cubist-shard-opacity-strong: 14%}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;min-height:100%;height:100%;background-color:var(--background);background-image:linear-gradient(color-mix(in srgb,var(--outline) 4%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--outline) 4%,transparent) 1px,transparent 1px);background-size:1.25rem 1.25rem;background-attachment:fixed;color:var(--on-surface);font-family:var(--font-body);font-size:var(--studio-font-size);line-height:1.5;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:var(--scrollbar-track)}*::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border:2px solid var(--scrollbar-track);background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover);border:2px solid var(--scrollbar-track);background-clip:padding-box}*::-webkit-scrollbar-corner{background:var(--scrollbar-track)}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--primary)}#app{min-height:100vh;height:100%}.studio-shell{display:grid;grid-template-columns:16.5rem minmax(0,1fr);min-height:100vh;height:100%;background:transparent}.studio-nav{background:var(--panel);border-right:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);padding:var(--studio-space-md) var(--studio-space-sm);display:flex;flex-direction:column;gap:var(--studio-space-sm);overflow:auto}.studio-nav-bar{display:flex;flex-direction:column;gap:.35rem}.studio-nav-menu-toggle{display:none;width:100%;align-items:center;justify-content:space-between;gap:.5rem;margin:0;padding:.55rem .65rem;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);border-radius:0;background:var(--background);cursor:pointer;color:var(--on-surface);font:inherit;text-align:left}.studio-nav-menu-toggle:hover{background:var(--surface-high)}.studio-nav-menu-toggle .studio-nav-menu-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-label);font-size:var(--studio-nav-label);letter-spacing:.04em;font-weight:400}.studio-nav-menu-toggle .material-symbols-outlined{flex-shrink:0;font-size:1.25rem;line-height:1}.studio-nav-panel{display:flex;flex-direction:column;gap:var(--studio-space-xs);min-height:0}.studio-brand{display:grid;grid-template-columns:2.5rem minmax(0,1fr);align-items:center;column-gap:var(--studio-space-sm);padding:var(--studio-space-sm) var(--studio-space-xs) var(--studio-space-md);margin-bottom:var(--studio-space-xs);border-bottom:1px solid var(--outline-variant)}.studio-brand-copy{display:flex;flex-direction:column;justify-content:center;text-align:left;min-width:0}.studio-brand-name,.studio-brand strong{font-family:var(--font-title);font-size:var(--studio-brand-title);font-weight:400;font-synthesis:none;line-height:1.15;letter-spacing:.02em}button.studio-brand-home{width:100%;margin:0;border:0;border-radius:0;background:transparent;cursor:pointer;text-align:left;color:inherit;font:inherit}button.studio-brand-home:hover,button.studio-brand-home[aria-current=page]{background:var(--surface-high)}.studio-brand .studio-mark{display:block;width:2.5rem;height:2.5rem;justify-self:center;transform:translateY(.5px)}.studio-mark-svg{display:block;width:100%;height:100%}:root .studio-mark-primary,[data-theme=light] .studio-mark-primary{fill:#a4c8da}:root .studio-mark-secondary,[data-theme=light] .studio-mark-secondary{fill:#95c8a6}:root .studio-mark-tertiary,[data-theme=light] .studio-mark-tertiary{fill:#ddd8a8}[data-theme=dark] .studio-mark-primary{fill:#1c5a7a}[data-theme=dark] .studio-mark-secondary{fill:#287445}[data-theme=dark] .studio-mark-tertiary{fill:#746f30}.studio-mark-frame{fill:none;stroke:var(--on-surface-variant);stroke-width:1;stroke-linejoin:miter;vector-effect:non-scaling-stroke}.auth-gate .studio-mark{width:2rem;height:2rem}.studio-nav-group{margin-top:var(--studio-space-2xs)}.studio-nav-group-toggle{width:100%;display:flex;align-items:center;gap:var(--studio-space-xs);margin:0;padding:var(--studio-space-sm) var(--studio-space-xs);border:0;border-radius:0;background:transparent;cursor:pointer;color:var(--on-surface-variant);text-align:left;font-family:var(--font-label);font-size:var(--studio-nav-label);text-transform:none;letter-spacing:.04em;font-weight:400}.studio-nav-group-toggle:hover{background:var(--surface-high);color:var(--on-surface)}.studio-nav-group-toggle .material-symbols-outlined{font-size:1.25rem;line-height:1;flex-shrink:0;font-variation-settings:"FILL" 0,"wght" 500,"GRAD" 0,"opsz" 24}.studio-nav-group-toggle .nav-group-label{flex:1;min-width:0;font-family:var(--font-label);font-size:inherit;letter-spacing:inherit;border-bottom:1px solid var(--outline-variant);padding-bottom:.2rem;text-align:left}.studio-nav-group-items{display:flex;flex-direction:column;gap:.15rem;padding:.2rem 0 var(--studio-space-sm)}.studio-nav-group-items[hidden]{display:none}.studio-nav button.nav-item{width:100%;display:flex;align-items:baseline;justify-content:space-between;gap:var(--studio-space-sm);text-align:left;background:transparent;border:0;border-radius:0;padding:.4rem .5rem .4rem 1.7rem;cursor:pointer;color:var(--on-surface);font-family:var(--font-body);font-size:var(--studio-nav-item);line-height:1.35;letter-spacing:.01em}.studio-nav button.nav-item:hover,.studio-nav button.nav-item[aria-current=page]{background:var(--surface-high)}.nav-item-label{min-width:0}.nav-item-count{flex:0 0 auto;font-family:var(--font-body);font-size:var(--studio-type-meta);color:var(--on-surface-variant)}.studio-main{display:grid;grid-template-rows:auto auto minmax(0,1fr);min-width:0;min-height:0;height:100%;overflow:hidden;background:transparent}.studio-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .4rem;padding:var(--studio-space-xs) var(--studio-space-md);border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.04em;text-transform:uppercase;color:var(--on-surface-variant);background:var(--background)}.studio-crumb-sep{color:var(--outline-variant)}.studio-crumb.is-current{color:var(--on-surface);text-transform:none;letter-spacing:.02em}.studio-toolbar{display:flex;align-items:center;gap:var(--studio-space-sm);padding:var(--studio-space-xs) var(--studio-space-md);border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:var(--background);min-width:0}.studio-toolbar .status-pill{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-toolbar .spacer{flex:1 1 auto;min-width:0}.studio-toolbar .btn{flex-shrink:0;position:relative;z-index:1}.btn{border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);padding:.25rem .6rem;cursor:pointer;min-height:var(--studio-list-control-height);box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:var(--studio-type-ui);letter-spacing:.01em}.btn-nav{gap:.15rem}.btn-nav-icon{font-size:1.25rem!important;line-height:1;font-variation-settings:"FILL" 0,"wght" 500,"GRAD" 0,"opsz" 24}.btn:hover{background:var(--surface-high)}.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}[data-theme=dark] .btn-primary{color:#0f1a22}.btn-primary:hover{filter:brightness(1.05)}.btn:disabled{opacity:.5;cursor:not-allowed}.studio-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:0;height:100%;overflow:hidden;background:transparent}.studio-body.list-only{grid-template-columns:minmax(0,1fr)}.pane{min-width:0;min-height:0;overflow:auto;padding:var(--studio-pane-pad);display:flex;flex-direction:column;gap:0;background:transparent}.pane-preview{border-left:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:var(--panel);min-height:0}.ledger-list{display:flex;flex-direction:column;gap:0;background:var(--panel);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);padding:var(--studio-space-xs)}.ledger-columns{display:none}.ledger-row{display:grid;grid-template-columns:var(--studio-ledger-thumb-w) minmax(0,1fr);gap:var(--studio-space-md);align-items:start;padding:var(--studio-space-md) var(--studio-space-md);margin:0 0 var(--studio-space-xs);border:1px solid color-mix(in srgb,var(--outline-variant) 60%,transparent);border-radius:0;cursor:pointer;background:var(--surface-card);text-align:left;width:100%;font:inherit;color:inherit}.ledger-row:last-child{margin-bottom:0}.ledger-row--writing{grid-template-columns:var(--studio-ledger-thumb-w) minmax(0,1fr)}.ledger-row:hover{background:var(--surface-high)}.ledger-copy{min-width:0;display:flex;flex-direction:column;gap:.4rem;padding-top:.1rem}.ledger-title-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--studio-space-xs) var(--studio-space-sm);min-width:0}.ledger-title{font-family:var(--font-body);font-size:var(--studio-ledger-title);font-weight:400;line-height:1.3;min-width:0}.ledger-status{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:5.25rem;flex:0 0 5.25rem;padding:.1rem .3rem;border:1px solid transparent;font-family:var(--font-mono);font-size:var(--studio-type-micro);font-weight:600;letter-spacing:.04em;text-transform:uppercase;line-height:1.2;white-space:nowrap}.ledger-lang{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;padding:.1rem .3rem;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--surface-high);font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.04em;text-transform:uppercase;color:var(--on-surface-variant);line-height:1.2}.ledger-taxonomy{display:none;flex-wrap:wrap;gap:.25rem;align-content:flex-start;min-width:0}.ledger-tag{display:inline-flex;align-items:center;padding:.08rem .35rem;border:1px solid color-mix(in srgb,var(--outline-variant) 65%,transparent);background:var(--background);font-family:var(--font-mono);font-size:var(--studio-type-micro);color:var(--on-surface-variant);line-height:1.25}.ledger-ops{display:none;align-items:center;justify-content:flex-end;gap:.2rem;font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant);white-space:nowrap;padding-top:.1rem}.ledger-ops-icon{font-size:.95rem!important;line-height:1}.ledger-row--writing:hover .ledger-ops{color:var(--on-surface)}@media(min-width:720px){.ledger-columns{display:grid;grid-template-columns:var(--studio-ledger-thumb-w) minmax(0,1fr) minmax(6.5rem,10rem) 4.75rem;gap:var(--studio-space-sm);align-items:end;padding:var(--studio-space-xs) var(--studio-space-md);margin:0 0 var(--studio-space-2xs);font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--on-surface-variant);background:var(--panel);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.ledger-col-ops{text-align:right}.ledger-row--writing{grid-template-columns:var(--studio-ledger-thumb-w) minmax(0,1fr) minmax(6.5rem,10rem) 4.75rem;align-items:center}.ledger-row--writing .ledger-taxonomy{display:flex}.ledger-row--writing .ledger-ops{display:inline-flex}}.ledger-status--published{color:color-mix(in srgb,#1b6b3a 88%,var(--on-surface));background:color-mix(in srgb,#1b6b3a 14%,transparent);border-color:color-mix(in srgb,#1b6b3a 35%,transparent)}.ledger-status--draft{color:color-mix(in srgb,#a12828 90%,var(--on-surface));background:color-mix(in srgb,#a12828 14%,transparent);border-color:color-mix(in srgb,#a12828 35%,transparent)}.ledger-thumb{width:var(--studio-ledger-thumb-w);height:var(--studio-ledger-thumb-h);object-fit:cover;background:var(--surface-high);display:block;flex-shrink:0}.ledger-thumb.placeholder{display:flex;align-items:center;justify-content:center;color:var(--on-surface-variant);border:1px dashed color-mix(in srgb,var(--outline-variant) 70%,transparent)}.ledger-thumb.placeholder .material-symbols-outlined{font-size:1.5rem;line-height:1;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.ledger-meta{margin-top:0;font-size:var(--studio-ledger-meta);color:var(--on-surface-variant);font-family:var(--font-mono);letter-spacing:.015em;line-height:1.4;word-break:break-word}.list-controls{display:flex;flex-wrap:wrap;align-items:center;gap:var(--studio-space-xs);margin:0 0 var(--studio-space-sm);padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.list-search-input{flex:1 1 14rem;min-width:10rem;height:var(--studio-list-control-height);box-sizing:border-box;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);padding:0 var(--studio-space-sm);font-family:var(--font-mono);font-size:var(--studio-type-ui);line-height:1.2;letter-spacing:.01em}.list-sort-label{display:flex;align-items:center;gap:var(--studio-space-xs);flex:0 1 auto;margin:0;font-family:var(--font-mono);font-size:var(--studio-type-ui);color:var(--on-surface-variant);text-transform:none;letter-spacing:0}.list-sort-caption{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;font-size:var(--studio-type-micro);font-weight:600;white-space:nowrap}.list-sort-select,.list-page-size-select{height:var(--studio-list-control-height);box-sizing:border-box;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);padding:0 var(--studio-space-sm);font-family:var(--font-mono);font-size:var(--studio-type-ui);min-width:10rem;max-width:100%}.list-page-size-select{min-width:4rem}.list-count{margin:0 0 var(--studio-space-xs);font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant);min-height:1em}.list-pager{display:flex;align-items:center;justify-content:center;gap:var(--studio-space-sm);margin:var(--studio-space-md) 0 var(--studio-space-xs);flex-wrap:wrap}.list-pager-btn:disabled{opacity:.45;cursor:not-allowed}.list-pager-status{font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant);min-width:7rem;text-align:center}.pane-editor>.btn{flex-shrink:0;align-self:flex-start;margin-bottom:var(--studio-space-sm)}.list-register{display:flex;flex-direction:column;gap:var(--studio-space-sm);margin-bottom:var(--studio-space-lg);padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.list-register-kicker{display:flex;flex-wrap:wrap;align-items:center;gap:var(--studio-space-xs) var(--studio-space-sm);margin:0;font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.05em}.list-register-mark{width:5px;height:5px;background:var(--primary);flex:0 0 auto}.list-register-sep{color:var(--outline-variant)}.list-pane-title{font-family:var(--font-display);font-size:var(--studio-type-display);font-weight:600;line-height:1.15;margin:0 0 var(--studio-space-sm)}.list-register .list-pane-title{margin:0}.list-register-title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--studio-space-xs) var(--studio-space-md);margin-top:var(--studio-space-2xs)}.list-pane-count{font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant);letter-spacing:.02em}.list-tag-filters{display:flex;flex-wrap:wrap;gap:var(--studio-space-2xs) var(--studio-space-xs);margin:0 0 var(--studio-space-sm);padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.list-tag-chip{margin:0;padding:.15rem .45rem;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.03em;text-transform:uppercase;color:var(--on-surface-variant);cursor:pointer}.list-tag-chip:hover{background:var(--surface-high);color:var(--on-surface)}.list-tag-chip.is-active{border-color:color-mix(in srgb,var(--primary) 55%,var(--outline-variant));background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--on-surface)}.front-matter{flex:0 0 auto;margin:0 0 var(--studio-space-sm);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:var(--background);max-width:52rem}.front-matter-summary{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--studio-space-xs) var(--studio-space-md);margin:0;padding:.45rem .65rem;cursor:pointer;list-style:none;font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.06em;text-transform:uppercase;color:var(--on-surface-variant);-webkit-user-select:none;user-select:none}.front-matter-summary::-webkit-details-marker{display:none}.front-matter-summary:before{content:"▸";margin-right:.45rem;color:var(--outline-variant)}.front-matter[open]>.front-matter-summary:before{content:"▾"}.front-matter[open]>.front-matter-summary{border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.front-matter-summary-label{color:var(--on-surface);font-weight:600}.front-matter-summary-hint{color:var(--outline-variant);letter-spacing:.04em}.front-matter>.form-grid{padding:.15rem .65rem .75rem;max-width:none}.editor-mast{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.65rem 1.25rem;margin-bottom:.85rem;padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.editor-mast-lead{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem .75rem;min-width:0}.editor-mast-pills{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem}.editor-mast>.btn,.editor-mast-lead>.btn{flex:0 0 auto;align-self:center;margin-bottom:0}.editor-mast-lead>.btn-back{min-width:2.25rem;padding-left:.4rem;padding-right:.4rem;gap:0}.editor-mast-lead>.btn-back .btn-nav-icon{font-size:1.35rem!important}.editor-body-stats{display:flex;flex-wrap:wrap;align-items:center;flex:0 0 auto;gap:var(--studio-space-xs) var(--studio-space-sm);margin-top:var(--studio-space-sm);padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.03em;text-transform:uppercase;color:var(--on-surface-variant)}.editor-body-stats-sep{color:var(--outline-variant)}.preview-pane-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--studio-space-xs) var(--studio-space-sm);margin:0 0 var(--studio-space-sm);font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--on-surface-variant)}.preview-pane-label{color:var(--on-surface-variant)}.preview-pane-sep{color:var(--outline-variant)}.preview-pane-meta{text-transform:none;letter-spacing:.02em}.preview-folio{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding:.35rem;background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.preview-folio>.preview-frame{flex:1 1 auto;min-height:12rem;border-color:color-mix(in srgb,var(--outline-variant) 40%,transparent)}.loading-msg{margin:1rem 0;padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);color:var(--on-surface-variant);font-size:1rem}.list-empty{margin:1rem 0;padding:var(--studio-space-sm) var(--studio-space-md);background:var(--panel);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);color:var(--on-surface-variant)}.list-error{margin:.75rem 0;padding:.85rem .9rem;border:1px solid color-mix(in srgb,var(--error) 45%,transparent);background:color-mix(in srgb,var(--error) 8%,var(--background))}.list-error-title{margin:0 0 .35rem;font-weight:600;color:var(--error)}.list-error-message{margin:0;font-family:var(--font-mono);font-size:.9rem;color:var(--on-surface);word-break:break-word}.list-error-detail{margin:.65rem 0 0;padding:.55rem .65rem;max-height:10rem;overflow:auto;font-family:var(--font-mono);font-size:.78rem;line-height:1.4;color:var(--on-surface-variant);background:var(--panel);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);white-space:pre-wrap}.studio-map{gap:var(--studio-space-lg);max-width:72rem;position:relative}.studio-shard{content:"";position:absolute;pointer-events:none;z-index:0;clip-path:var(--shard-alpha);opacity:var(--cubist-shard-opacity);background:color-mix(in srgb,var(--primary) 55%,var(--secondary))}.studio-shard--beta{clip-path:var(--shard-beta);background:color-mix(in srgb,var(--tertiary) 50%,var(--primary));opacity:var(--cubist-shard-opacity-strong)}.studio-map>.studio-shard--lead{width:min(18rem,42vw);height:min(14rem,32vw);top:-1rem;right:4%}.studio-map>.studio-shard--trail{width:min(12rem,28vw);height:min(10rem,22vw);bottom:8%;left:2%}@media(max-width:639px){.studio-shard{display:none}}.studio-map-header{display:flex;flex-direction:column;gap:var(--studio-space-xs);max-width:28rem;padding:var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);position:relative;z-index:1}.studio-map-board{display:flex;flex-direction:column;gap:var(--studio-space-lg);min-width:0;position:relative;z-index:1}.studio-map-kicker{margin:0;font-family:var(--font-label);font-size:var(--studio-type-meta);letter-spacing:.04em;color:var(--on-surface-variant)}.studio-map-header h1{font-family:var(--font-display);font-weight:600;font-size:var(--studio-type-display);margin:0;line-height:1.15}.studio-map-lede,.studio-map-header p{margin:0;color:var(--on-surface-variant);font-size:var(--studio-type-body);line-height:1.45}.studio-map-col{display:flex;flex-direction:column;gap:var(--studio-space-lg);min-width:0}.studio-map-group{display:flex;flex-direction:column;gap:var(--studio-space-sm);padding:var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.studio-map-group-head{display:flex;align-items:baseline;gap:var(--studio-space-sm)}.studio-map-group-icon{position:relative;top:.1rem;color:var(--primary);font-size:1.15rem;font-variation-settings:"FILL" 0,"wght" 500,"GRAD" 0,"opsz" 24}.studio-map-group-label{margin:0;font-family:var(--font-label);font-size:var(--studio-type-title);font-weight:400;letter-spacing:.03em;line-height:1.2}.studio-map-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(12.5rem,1fr));gap:var(--studio-space-sm)}.studio-map-card{display:flex;align-items:flex-start;gap:var(--studio-space-sm);text-align:left;margin:0;padding:var(--studio-space-sm) var(--studio-space-md);border:1px solid color-mix(in srgb,var(--outline-variant) 60%,transparent);background:var(--background);cursor:pointer;color:inherit;font:inherit;min-height:3.5rem}.studio-map-card:hover{background:var(--surface-high);border-color:color-mix(in srgb,var(--primary) 45%,var(--outline-variant))}.studio-map-card-icon{color:var(--on-surface-variant);font-size:1.25rem;line-height:1;margin-top:.1rem;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.studio-map-card-body{display:flex;flex-direction:column;gap:.25rem;min-width:0}.studio-map-card-title{font-family:var(--font-body);font-weight:600;font-size:var(--studio-type-body);line-height:1.3}.studio-map-card-meta{font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant);word-break:break-word}@media(min-width:56rem){.studio-map-board{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--studio-space-lg) var(--studio-space-md);align-items:start}}@media(min-width:72rem){.studio-map{display:grid;grid-template-columns:minmax(14rem,18rem) minmax(0,1fr);column-gap:clamp(1.5rem,3vw,2.75rem);row-gap:var(--studio-space-lg);align-items:start;max-width:none}.studio-map-header{position:sticky;top:var(--studio-space-md);max-width:none;padding-right:var(--studio-space-sm)}.studio-map-board{padding-left:var(--studio-space-md);border-left:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}}.form-grid{display:flex;flex-direction:column;gap:var(--studio-space-md);max-width:52rem;flex-shrink:0}.field label,.field .field-heading{display:block;font-family:var(--font-mono);font-size:var(--studio-type-micro);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin-bottom:var(--studio-space-2xs)}.field--title{padding-bottom:var(--studio-space-md);border-bottom:1px solid var(--outline-variant)}.form-grid .field input:not([type=checkbox]):not([type=radio]),.form-grid .field select,.form-grid .field textarea{font-family:var(--font-mono);font-size:var(--studio-type-ui)}.field input,.field select,.field textarea{width:100%;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);padding:.4rem .55rem}.field--boolean .field-checkbox,.field input.field-checkbox,.field input[type=checkbox]{width:auto;max-width:none;margin:0;padding:0;border:0;background:transparent;flex:0 0 auto;accent-color:var(--primary)}.field--boolean .field-check-row{display:flex;align-items:center;gap:.55rem;margin:0;text-transform:none;letter-spacing:normal;font-size:.92rem;color:var(--on-surface);cursor:pointer;-webkit-user-select:none;user-select:none;line-height:1.35}.field--boolean .field-check-text{line-height:1.35}.field textarea{min-height:6rem;line-height:1.45}.field .hint{margin:var(--studio-space-2xs) 0 0;font-size:var(--studio-type-meta);color:var(--on-surface-variant);line-height:1.35}.body-editor-stack{display:flex;flex-direction:column;flex:1 1 auto;min-height:var(--studio-editor-min-height);margin-top:.35rem;padding:var(--studio-space-sm) var(--studio-space-md);background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent);overflow:hidden}.editor-chrome{display:flex;flex-direction:column;gap:.45rem;margin-bottom:.5rem;flex-shrink:0}.editor-chrome-row{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem}.editor-chrome-actions{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.45rem}.editor-ai-proof{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.35rem}.ai-proof-hint{margin:0;font-family:var(--font-mono);font-size:var(--studio-type-micro);letter-spacing:.02em;color:var(--on-surface-variant)}.ai-proof-hint[hidden]{display:none!important}.editor-mode-tabs{display:inline-flex;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--panel)}.editor-mode-tab{margin:0;border:0;border-radius:0;background:transparent;padding:.4rem .9rem;cursor:pointer;color:var(--on-surface-variant);font:inherit;font-size:.92rem}.editor-mode-tab+.editor-mode-tab{border-left:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent)}.editor-mode-tab[aria-selected=true]{background:var(--background);color:var(--on-surface);font-weight:600}.editor-mode-tab:hover{background:var(--surface-high);color:var(--on-surface)}.editor-insert{position:relative}.editor-insert-btn{display:inline-flex;align-items:center;gap:.3rem}.editor-insert-btn .material-symbols-outlined{font-size:1.1rem;line-height:1}.editor-insert-caret{font-size:1rem!important;opacity:.75}.editor-insert-menu{position:absolute;top:calc(100% + .25rem);left:0;z-index:20;min-width:12rem;max-height:16rem;overflow:auto;display:flex;flex-direction:column;gap:0;padding:.25rem;background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);box-shadow:0 8px 20px color-mix(in srgb,var(--on-surface) 12%,transparent)}.editor-insert-menu[hidden]{display:none!important}.editor-insert-item{display:flex;align-items:center;gap:.55rem;width:100%;margin:0;padding:.45rem .55rem;border:0;background:transparent;cursor:pointer;text-align:left;color:inherit;font:inherit;font-size:.92rem}.editor-insert-item:hover{background:var(--surface-high)}.editor-insert-icon{font-size:1.15rem;color:var(--on-surface-variant);font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.editor-format-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.2rem;padding:.35rem .4rem;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--panel)}.editor-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;height:2rem;margin:0;padding:0 .35rem;border:0;border-radius:0;background:transparent;cursor:pointer;color:var(--on-surface);font:inherit;font-size:.82rem;font-weight:600}.editor-toolbar-btn:hover{background:var(--surface-high)}.editor-toolbar-btn .material-symbols-outlined{font-size:1.15rem;line-height:1;font-variation-settings:"FILL" 0,"wght" 500,"GRAD" 0,"opsz" 24}.editor-toolbar-sep{width:1px;align-self:stretch;margin:.2rem .3rem;background:color-mix(in srgb,var(--outline-variant) 70%,transparent)}.editor-toolbar-select{border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);padding:.25rem .4rem;font-size:.82rem;max-width:8.5rem}.editor-pane-fill{position:relative;flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.editor-surface{flex:1 1 auto;width:100%;min-height:0;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);background:var(--background);overflow:auto}.tiptap.editor-surface{padding:.85rem}.tiptap .ProseMirror{outline:none;min-height:12rem}.tiptap .ProseMirror p{margin:.4rem 0}textarea.body-source.editor-surface{display:block;resize:none;padding:.85rem;font-family:var(--font-mono);font-size:.8759rem;line-height:1.5;color:inherit;box-sizing:border-box;min-height:0;flex:1 1 auto;width:100%;overflow:auto}.editor-surface[hidden]{display:none!important}.liquid-block{border:1px dashed color-mix(in srgb,var(--outline) 50%,transparent);background:var(--panel);padding:.5rem .65rem;margin:.5rem 0;font-family:var(--font-mono);font-size:.86rem}.liquid-block--inline{display:inline;margin:0;padding:.05rem .35rem;white-space:normal}.liquid-block strong{font-family:var(--font-body);text-transform:uppercase;letter-spacing:.05em;font-size:.78rem;color:var(--on-surface-variant)}.preview-frame{background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);padding:1rem;min-height:12rem;flex:1;overflow:auto;font-family:var(--font-body);font-size:.95rem;line-height:1.6;color:var(--on-surface)}.preview-frame figure{margin:1rem auto;text-align:center}.preview-frame img,.preview-frame video,.preview-frame iframe{max-width:100%}.preview-frame .studio-embed-placeholder{width:100%}.preview-frame .studio-embed-placeholder__box{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:100%;min-height:inherit;height:100%;padding:1rem 1.1rem;border:1px dashed color-mix(in srgb,var(--outline) 55%,transparent);background:color-mix(in srgb,var(--surface-high) 88%,transparent);color:var(--on-surface-variant)}.preview-frame .studio-embed-placeholder__label{font-family:var(--font-mono);font-size:.8759rem;line-height:1.35;word-break:break-word;background:transparent;border:0;padding:0}.preview-frame .studio-mermaid,.preview-frame .mermaid{margin:1rem 0;overflow-x:auto}.preview-frame .studio-mermaid-fallback{margin:1rem 0}.preview-frame .studio-mermaid-fallback__pre{margin:0;white-space:pre-wrap;word-break:break-word;font-family:var(--font-mono);font-size:.8019rem;padding:.65rem .75rem;border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:color-mix(in srgb,var(--surface-high) 90%,transparent);color:var(--on-surface-variant)}.preview-frame pre,.preview-frame pre code,.preview-frame :not(pre)>code{font-size:.8019rem}.preview-frame pre{overflow-x:auto;padding:.65rem .75rem;background:color-mix(in srgb,var(--surface-high) 90%,transparent);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}.preview-frame pre code{font-size:inherit;background:transparent;border:0;padding:0}.preview-frame :not(pre)>code{font-family:var(--font-mono);padding:.05em .3em;background:color-mix(in srgb,var(--surface-high) 90%,transparent);border:1px solid color-mix(in srgb,var(--outline-variant) 45%,transparent)}.preview-frame .studio-ref-pill{display:inline-flex;align-items:center;vertical-align:middle;max-width:100%;margin:0 .12em;padding:.05em .4em;border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);border-radius:0;background:color-mix(in srgb,var(--surface-high) 85%,transparent);color:var(--on-surface-variant);font-family:var(--font-mono);font-size:.85em;line-height:1.2;white-space:nowrap;box-sizing:border-box;transition:color .12s ease,background .12s ease,border-color .12s ease}.preview-frame .studio-ref-pill--ok{color:color-mix(in srgb,#1b6b3a 88%,var(--on-surface));background:color-mix(in srgb,#1b6b3a 14%,transparent);border-color:color-mix(in srgb,#1b6b3a 40%,transparent)}.preview-frame .studio-ref-pill--missing{color:color-mix(in srgb,#a12828 90%,var(--on-surface));background:color-mix(in srgb,#a12828 14%,transparent);border-color:color-mix(in srgb,#a12828 40%,transparent)}.preview-frame .studio-ref-pill--latex{color:var(--on-surface);background:color-mix(in srgb,var(--surface-high) 90%,transparent);border-color:color-mix(in srgb,var(--outline-variant) 65%,transparent);white-space:pre-wrap;word-break:break-word}.preview-frame .studio-ref-pill--display{display:flex;margin:.75rem auto;padding:.55rem .75rem;overflow-x:auto;white-space:pre-wrap;word-break:break-word}.preview-frame .article-note{background:color-mix(in srgb,var(--surface-high) 88%,transparent);border-left:3px solid color-mix(in srgb,var(--outline-variant) 80%,transparent);padding:.85rem 1.1rem;margin:1.1rem 0;font-size:.9em}.preview-frame .article-note>:first-child{margin-top:0}.preview-frame .article-note>:last-child{margin-bottom:0}.preview-frame :is(.sov-tweet,.article-tweet){max-width:34rem;margin:1rem 0 1.25rem;padding:.85rem 1rem;border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:color-mix(in srgb,var(--surface-high) 70%,transparent)}.preview-frame :is(.sov-tweet,.article-tweet) p{margin:0}.preview-frame :is(.sov-tweet__head,.article-tweet__head){display:flex;align-items:center;gap:.5rem;margin-bottom:.7rem}.preview-frame :is(.sov-tweet__avatar,.article-tweet__avatar){width:2rem;height:2rem;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--outline-variant) 35%,transparent);font-size:1.1rem}.preview-frame :is(.sov-tweet__id,.article-tweet__id){display:flex;flex-direction:column;line-height:1.2}.preview-frame :is(.sov-tweet__name,.article-tweet__name){font-weight:700;font-size:.92rem}.preview-frame :is(.sov-tweet__handle,.article-tweet__handle){font-size:.8rem;opacity:.75}.preview-frame :is(.sov-tweet__body,.article-tweet__body){margin:0 0 .45rem!important;line-height:1.55}.preview-frame :is(.sov-tweet__cite,.article-tweet__cite){margin:0 0 .45rem!important;font-size:.8rem;opacity:.8}.preview-frame :is(.sov-tweet__note,.article-tweet__note){margin:0!important;font-size:.85rem;opacity:.9}.preview-frame .studio-unknown-include{display:none}.preview-frame table{width:100%;border-collapse:collapse;margin:1rem 0 1.25rem;font-size:.9em;line-height:1.45;overflow-x:auto;display:block;max-width:100%}.preview-frame thead,.preview-frame tbody,.preview-frame tr{display:table;width:100%;table-layout:auto}.preview-frame th,.preview-frame td{border:1px solid color-mix(in srgb,var(--outline-variant) 70%,transparent);padding:.4rem .55rem;text-align:left;vertical-align:top}.preview-frame th{font-weight:600;background:color-mix(in srgb,var(--surface-high) 88%,transparent)}.preview-frame .sov-grid{display:grid;grid-template-columns:1fr;gap:.85rem;margin:1rem 0 1.35rem}@media(min-width:720px){.preview-frame .sov-grid{grid-template-columns:1fr 1fr}}.preview-frame .sov-card{border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);border-left:3px solid var(--sov-accent, var(--primary));background:color-mix(in srgb,var(--surface-high) 70%,transparent);padding:.65rem .8rem .75rem;display:flex;flex-direction:column;gap:.45rem;min-width:0}.preview-frame .sov-card p{margin:0}.preview-frame .sov-card__head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.preview-frame .sov-card__flag{display:inline-flex;align-items:center;justify-content:center;height:1.5rem;padding:0 .35rem;border:1px solid color-mix(in srgb,var(--outline-variant) 65%,transparent);line-height:1}.preview-frame .sov-card__flag .fi{font-size:1rem}.preview-frame .sov-card__meta{font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;opacity:.8;font-weight:600}.preview-frame .sov-card__lemma{font-style:italic;font-size:1.02rem;color:var(--on-surface)}.preview-frame .sov-card__def{margin:0;padding:.45rem .6rem;border-left:2px solid color-mix(in srgb,var(--sov-accent, var(--primary)) 55%,transparent);background:color-mix(in srgb,var(--sov-accent, var(--primary)) 8%,transparent);font-size:.86rem;line-height:1.6}.preview-frame .sov-card__note{font-size:.82rem;line-height:1.5;opacity:.9}.preview-frame .sov-card__cite{font-size:.76rem;line-height:1.45;opacity:.75}.preview-frame .sov-card__cite a{color:inherit;text-decoration:underline;text-underline-offset:2px}.preview-frame .sov-card--us{--sov-accent: #003494}.preview-frame .sov-card--gb{--sov-accent: #797300}.preview-frame .sov-card--br{--sov-accent: #118826}.preview-frame .sov-card--fr{--sov-accent: #9f020a}.editor-mode-tab--preview{display:none}.auth-gate{max-width:28rem;margin:4rem auto;padding:1.5rem;border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);background:var(--background)}.auth-gate h1{font-family:var(--font-display);font-size:1.6rem;margin:0 0 .5rem}.auth-gate--pending .pending-copy{font-family:var(--font-body);line-height:1.55;color:var(--on-surface);margin:0 0 1rem}.auth-gate--pending .pending-copy strong{font-weight:600}.auth-gate--pending .pending-signoff{font-family:var(--font-body);margin:0 0 1.25rem;color:var(--on-surface-variant)}.status-pill{font-family:var(--font-mono);font-size:var(--studio-type-meta);color:var(--on-surface-variant)}.status-pill.error{color:var(--error)}.studio-error-banner{display:flex;flex-direction:column;align-items:flex-start;gap:.55rem;padding:.75rem var(--studio-space-md);border-bottom:1px solid color-mix(in srgb,var(--error) 45%,transparent);background:color-mix(in srgb,var(--error) 8%,var(--background))}.studio-error-message{margin:0;color:var(--on-surface);font-size:var(--studio-type-body);line-height:1.45;white-space:normal;overflow-wrap:anywhere}.studio-error-actions{display:flex;flex-wrap:wrap;gap:.45rem}@media(max-width:719px){.ledger-row--writing .ledger-title-row{flex-direction:column;align-items:flex-start;gap:.2rem}.ledger-row--writing .ledger-status{width:auto;flex:0 0 auto}.ledger-row--writing .ledger-taxonomy{display:flex;grid-column:2 / -1}.ledger-row--writing .ledger-ops{display:inline-flex;grid-column:1 / -1;justify-content:flex-end;padding-top:.45rem;margin-top:.15rem;border-top:1px solid color-mix(in srgb,var(--outline-variant) 35%,transparent)}}@media(max-width:960px){.studio-shell{grid-template-columns:1fr;height:auto;min-height:100vh}.ledger-row{align-items:start}.studio-nav{border-right:0;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);overflow:visible;gap:.35rem;padding:.65rem .75rem}.studio-nav-bar{flex-direction:row;align-items:center;gap:.5rem}.studio-nav-bar .studio-brand{flex:0 0 auto;width:auto;padding:.2rem .35rem;border-bottom:0}button.studio-brand-home{width:auto}.studio-nav-menu-toggle{display:inline-flex;flex:1 1 auto;min-width:0}.studio-nav-panel{display:none;margin-top:.35rem;padding-top:.35rem;border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);max-height:min(70vh,28rem);overflow:auto}.studio-nav.is-open .studio-nav-panel{display:flex}.studio-main{height:auto;overflow:visible}.studio-body{grid-template-columns:1fr;height:auto;overflow:visible}.editor-mode-tab--preview{display:inline-flex}.studio-body.view-preview .pane-editor>.btn,.studio-body.view-preview .pane-editor .editor-mast,.studio-body.view-preview .pane-editor .front-matter,.studio-body.view-preview .pane-editor .form-grid,.studio-body.view-preview .pane-editor .editor-pane-fill,.studio-body.view-preview .pane-editor .editor-format-toolbar,.studio-body.view-preview .pane-editor .editor-chrome-row>:not(.editor-mode-tabs),.studio-body.view-preview .pane-editor .body-editor-stack>label{display:none}.studio-body.view-preview .pane-editor{padding-bottom:.35rem;overflow:visible;flex:0 0 auto}.studio-body.view-preview .pane-editor .editor-chrome{margin-bottom:0}.studio-body:not(.view-preview) .pane-preview{display:none}.studio-body.view-preview .pane-preview{display:flex;border-left:0;border-top:0;flex:1 1 auto}.pane-preview{border-left:0;border-top:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent)}}.pane-yaml .yaml-editor-header{margin:.65rem 0 .35rem}.yaml-editor-title{margin:0;font-family:var(--font-display);font-size:1.35rem;font-weight:500;color:var(--on-surface)}.yaml-editor-path{margin:.2rem 0 0;font-size:.82rem;color:var(--on-surface-variant);word-break:break-word}.yaml-chrome{margin-bottom:.65rem}.yaml-chrome-hint{margin:.45rem 0 0;font-size:.82rem;color:var(--on-surface-variant)}.yaml-editor-body{display:flex;flex-direction:column;gap:.85rem;flex:1 1 auto;min-height:0}.yaml-list,.yaml-object-list{display:flex;flex-direction:column;gap:.85rem}.yaml-list-item{border:1px solid color-mix(in srgb,var(--outline-variant) 65%,transparent);background:var(--panel);padding:.75rem .85rem}.yaml-list-item-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.65rem}.yaml-list-item-index{font-size:.82rem;text-transform:uppercase;letter-spacing:.06em;color:var(--on-surface-variant);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yaml-list-item-actions{display:flex;flex-wrap:wrap;gap:.35rem;flex-shrink:0}.yaml-list-btn{padding:.25rem .45rem;font-size:.78rem}.yaml-list-item-fields{max-width:none}.yaml-empty{margin:0;color:var(--on-surface-variant);font-size:.92rem}.yaml-source-stack{display:flex;flex-direction:column;flex:1 1 auto;min-height:var(--studio-editor-min-height)}textarea.yaml-source.editor-surface{display:block;resize:none;padding:.85rem;font-family:var(--font-mono);font-size:.95rem;line-height:1.45;color:inherit;box-sizing:border-box;min-height:var(--studio-editor-min-height);flex:1 1 auto;width:100%;overflow:auto;-moz-tab-size:2;tab-size:2}.yaml-preview-pre{margin:0;padding:.75rem .85rem;font-family:var(--font-mono);font-size:.86rem;line-height:1.45;white-space:pre-wrap;word-break:break-word;background:color-mix(in srgb,var(--surface-high) 70%,transparent);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);overflow:auto}.yaml-preview-error{margin:0;color:var(--error);font-size:.9rem}.media-pane{display:flex;flex-direction:column;gap:.85rem;padding:1rem 1.25rem 1.5rem;overflow:auto;min-height:0}.media-header h1.media-title{margin:0 0 .35rem;font-family:var(--font-display);font-size:1.55rem;font-weight:600}.media-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;font-family:var(--font-mono);font-size:.82rem;color:var(--on-surface-variant)}.media-breadcrumb-sep{opacity:.55}.media-breadcrumb-link{margin:0;padding:.1rem .25rem;border:0;border-radius:0;background:transparent;color:var(--primary);cursor:pointer;font:inherit}.media-breadcrumb-link:hover{background:var(--surface-high)}.media-breadcrumb-current{color:var(--on-surface);font-weight:600}.media-hint{margin:.55rem 0 0;color:var(--on-surface-variant);font-size:.9rem;max-width:42rem}.media-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem}.media-toolbar .spacer{flex:1}.media-file-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.media-grid{display:flex;flex-direction:column;gap:.35rem;background:var(--panel);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);padding:var(--studio-space-xs)}.media-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:center;padding:.25rem 0;border-bottom:1px solid color-mix(in srgb,var(--outline-variant) 35%,transparent)}.media-row:last-child{border-bottom:none}.media-row-main{display:flex;align-items:center;gap:.75rem;min-width:0;margin:0;padding:.35rem .4rem;border:0;border-radius:0;background:var(--surface-card);color:inherit;font:inherit;text-align:left;cursor:pointer}.media-row-main:hover{background:var(--surface-high)}.media-thumb{width:52px;height:52px;flex-shrink:0;display:grid;place-items:center;background:var(--surface-high);border:1px solid color-mix(in srgb,var(--outline-variant) 55%,transparent);overflow:hidden}.media-thumb--image{padding:0}.media-thumb-img{width:100%;height:100%;object-fit:cover;display:block}.media-thumb-icon{font-size:1.45rem;color:var(--on-surface-variant)}.media-row-body{display:flex;flex-direction:column;gap:.15rem;min-width:0}.media-row-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-row-meta{font-family:var(--font-mono);font-size:.78rem;color:var(--on-surface-variant);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-copy-btn{flex-shrink:0;white-space:nowrap}.media-row-main--preview{cursor:zoom-in}.media-row-main--preview:focus-visible{outline:2px solid var(--primary);outline-offset:3px}html.figure-lightbox-open,body.figure-lightbox-open{overflow:hidden}.figure-lightbox{--motion-duration-fast: .15s;--motion-ease-out: ease-out;--motion-ease-default: ease;position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:1.25rem;box-sizing:border-box}.figure-lightbox[hidden]{display:none}.figure-lightbox [hidden]{display:none!important}.figure-lightbox-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#000000d9;cursor:zoom-out;animation:figure-lightbox-fade-in var(--motion-duration-fast) var(--motion-ease-out)}.figure-lightbox-panel{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;max-width:min(92vw,72rem);max-height:92vh;animation:figure-lightbox-scale-in var(--motion-duration-fast) var(--motion-ease-out)}.figure-lightbox-img,.figure-lightbox-video{display:block;max-width:92vw;max-height:85vh;width:auto;height:auto;object-fit:contain;background:var(--background);border:1px solid color-mix(in srgb,var(--outline-variant) 40%,transparent);border-radius:0}.figure-lightbox-video{background:#000}.figure-lightbox-frame{display:block;width:min(92vw,72rem);height:min(78vh,52rem);border:1px solid color-mix(in srgb,var(--outline-variant) 40%,transparent);border-radius:0;background:var(--background)}.figure-lightbox-caption{margin:.75rem 0 0;max-width:min(40rem,90vw);font-family:var(--font-body);font-size:.95rem;line-height:1.45;text-align:center;color:#ffffffeb}.figure-lightbox-close{position:fixed;top:1rem;right:1rem;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;padding:0;border:1px solid color-mix(in srgb,var(--outline-variant) 50%,transparent);border-radius:0;background:var(--background);color:var(--on-surface);cursor:pointer;transition:color var(--motion-duration-fast) var(--motion-ease-default),background-color var(--motion-duration-fast) var(--motion-ease-default)}.figure-lightbox-close:hover,.figure-lightbox-close:focus-visible{color:var(--primary);background:var(--surface-high);outline:none}.figure-lightbox-close:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.figure-lightbox-close .material-symbols-outlined{font-size:1.5rem;line-height:1}@keyframes figure-lightbox-fade-in{0%{opacity:0}to{opacity:1}}@keyframes figure-lightbox-scale-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@media(prefers-reduced-motion:reduce){.figure-lightbox-backdrop,.figure-lightbox-panel{animation:none}}
|