pandorga 1.3.2 → 1.3.5
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 +25 -0
- data/_includes/content-runtime/43-blocks.html +22 -12
- data/_layouts/home.html +26 -42
- data/assets/css/ledger/home.css +279 -116
- data/lib/pandorga/commands/new.rb +1 -1
- data/lib/pandorga/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 99bd672a429eb53fd10ee4fc1bfefc9ff378ed47ca44a44ccd7280331cd2c1c2
|
|
4
|
+
data.tar.gz: 5954341027c77b5113a98976f4c2acf5becd066d013db6de69022e2b3fb1c60c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fe43ea960dd9093bbf93c1e8fc11106842f1a004b108c6db1aa9197ecf5ce334eb7be56c35a22f02412a9c5c8df2ae5b63cc06c5ad206afa2484ac1b21952618
|
|
7
|
+
data.tar.gz: 14e3998995fa0189cce9a6875047e319e0a39ed8e0552530a081b035f08e72a1222627e1481ad67ad1568e7c0f84f01f636c6974868a6e9ee8976eed7e9db3b7
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.5] — 2026-10-05
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Home specimen height is CSS-fixed (no ResizeObserver jump when switching
|
|
8
|
+
projects); mobile icon strip always reserves six compact slots; desktop
|
|
9
|
+
inventory sits in a panel over the tiled band
|
|
10
|
+
|
|
11
|
+
## [1.3.4] — 2026-10-05
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Home portfolio mobile inventory is a single row of project-icon buttons
|
|
16
|
+
(desktop index styles no longer override the phone layout)
|
|
17
|
+
|
|
18
|
+
## [1.3.3] — 2026-10-05
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Home portfolio inventory is an index folio (number, thumb, title, project
|
|
23
|
+
icon) with a borderless specimen; drafting marks stay on the poster only
|
|
24
|
+
- Specimen meta shows project tags instead of label/status
|
|
25
|
+
- Mobile selector strip and session-sticky random specimen pick from 1.3.2
|
|
26
|
+
polish remain
|
|
27
|
+
|
|
3
28
|
## [1.3.2] — 2026-10-05
|
|
4
29
|
|
|
5
30
|
### Fixed
|
|
@@ -324,10 +324,9 @@
|
|
|
324
324
|
].join('');
|
|
325
325
|
}
|
|
326
326
|
|
|
327
|
-
/* Compact inventory row for the home portfolio bench
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
* of navigating; the specimen card itself opens the project. */
|
|
327
|
+
/* Compact inventory row for the home portfolio bench.
|
|
328
|
+
* Desktop: index + thumb + title + project icon. Mobile strip uses the
|
|
329
|
+
* thumb/initial only. Selectable rows update the specimen. */
|
|
331
330
|
function renderProjectInventoryRow(item, options) {
|
|
332
331
|
options = options || {};
|
|
333
332
|
var f = blockFields(item);
|
|
@@ -337,6 +336,7 @@
|
|
|
337
336
|
var selectable = !!options.selectable;
|
|
338
337
|
var selected = !!options.selected;
|
|
339
338
|
var slug = item.slug || f.slug || '';
|
|
339
|
+
var index = options.index;
|
|
340
340
|
|
|
341
341
|
var row = document.createElement('article');
|
|
342
342
|
row.className = 'home-project-inventory-row group' +
|
|
@@ -347,15 +347,23 @@
|
|
|
347
347
|
row.setAttribute('role', 'button');
|
|
348
348
|
row.setAttribute('tabindex', '0');
|
|
349
349
|
row.setAttribute('aria-pressed', selected ? 'true' : 'false');
|
|
350
|
+
row.setAttribute('aria-label', name);
|
|
350
351
|
}
|
|
351
352
|
|
|
352
353
|
var media = renderPosterMedia(fm.thumbnail, name);
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
354
|
+
var initial = String(name || '?').charAt(0).toUpperCase();
|
|
355
|
+
if (!media) {
|
|
356
|
+
media = '<div class="home-project-inventory-mark home-project-inventory-mark--initial" aria-hidden="true">' +
|
|
357
|
+
escapeHtml(initial) + '</div>';
|
|
356
358
|
}
|
|
357
359
|
|
|
358
360
|
var html = '';
|
|
361
|
+
if (index != null && index !== '') {
|
|
362
|
+
var label = String(Number(index));
|
|
363
|
+
if (label.length < 2) label = '0' + label;
|
|
364
|
+
html += '<span class="home-project-inventory-index" aria-hidden="true">' +
|
|
365
|
+
escapeHtml(label) + '</span>';
|
|
366
|
+
}
|
|
359
367
|
if (media) {
|
|
360
368
|
html += '<div class="home-project-inventory-media">' + media + '</div>';
|
|
361
369
|
}
|
|
@@ -368,12 +376,14 @@
|
|
|
368
376
|
'<a class="ledger-card-stretch" href="' + escapeAttr(href) + '">' +
|
|
369
377
|
escapeHtml(name) + '</a></h3>';
|
|
370
378
|
}
|
|
371
|
-
var meta = renderMetaStrip([
|
|
372
|
-
fm.label ? escapeHtml(fm.label) : '',
|
|
373
|
-
fm.status ? '<span class="ledger-status">' + escapeHtml(fm.status) + '</span>' : ''
|
|
374
|
-
]);
|
|
375
|
-
if (meta) html += meta;
|
|
376
379
|
html += '</div>';
|
|
380
|
+
if (fm.icon) {
|
|
381
|
+
html += '<span class="home-project-inventory-glyph material-symbols-outlined" aria-hidden="true">' +
|
|
382
|
+
escapeHtml(fm.icon) + '</span>';
|
|
383
|
+
} else {
|
|
384
|
+
html += '<span class="home-project-inventory-glyph home-project-inventory-glyph--initial" aria-hidden="true">' +
|
|
385
|
+
escapeHtml(initial) + '</span>';
|
|
386
|
+
}
|
|
377
387
|
|
|
378
388
|
row.innerHTML = html;
|
|
379
389
|
return row;
|
data/_layouts/home.html
CHANGED
|
@@ -211,13 +211,15 @@ layout: shell
|
|
|
211
211
|
var specimenSlot = section.querySelector('[data-home-specimen]');
|
|
212
212
|
var inventorySlot = section.querySelector('[data-home-inventory]');
|
|
213
213
|
var systemTagHref = tagHrefFrom(list);
|
|
214
|
-
|
|
214
|
+
/* Selector strip is sized for six icon buttons on mobile; take up to
|
|
215
|
+
six projects even when home.limit is lower. */
|
|
216
|
+
var portfolio = entries.slice(0, Math.max(limit, 6));
|
|
215
217
|
if (!portfolio.length) {
|
|
216
218
|
runtime.Listing.showErrorState(list, 'Projects could not be loaded right now.');
|
|
217
219
|
return;
|
|
218
220
|
}
|
|
219
221
|
if (!specimenSlot || !inventorySlot) {
|
|
220
|
-
fill(list, portfolio, function (entry) {
|
|
222
|
+
fill(list, portfolio.slice(0, limit), function (entry) {
|
|
221
223
|
return runtime.renderSystemCard(asItem(entry), {
|
|
222
224
|
href: entry.url || runtime.projectUrl(entry.slug),
|
|
223
225
|
tagHref: systemTagHref,
|
|
@@ -227,59 +229,43 @@ layout: shell
|
|
|
227
229
|
return;
|
|
228
230
|
}
|
|
229
231
|
|
|
230
|
-
var
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
var specimen = specimenSlot.querySelector('.home-project-specimen');
|
|
239
|
-
if (!specimen) {
|
|
240
|
-
inventorySlot.style.height = '';
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
inventorySlot.style.height = Math.round(specimen.getBoundingClientRect().height) + 'px';
|
|
244
|
-
}
|
|
232
|
+
var featuredPick = runtime.pickFeatured(portfolio.map(asItem), {
|
|
233
|
+
storageKey: 'home-specimen-slug',
|
|
234
|
+
eligible: function () { return true; }
|
|
235
|
+
});
|
|
236
|
+
var selectedSlug = (featuredPick && featuredPick.slug) || portfolio[0].slug;
|
|
237
|
+
var iconSlots = 6;
|
|
245
238
|
|
|
246
|
-
function
|
|
247
|
-
|
|
248
|
-
inventoryResizeObserver.disconnect();
|
|
249
|
-
inventoryResizeObserver = null;
|
|
250
|
-
}
|
|
251
|
-
if (!specimen || typeof ResizeObserver === 'undefined') return;
|
|
252
|
-
inventoryResizeObserver = new ResizeObserver(function () {
|
|
253
|
-
syncInventoryHeight();
|
|
254
|
-
});
|
|
255
|
-
inventoryResizeObserver.observe(specimen);
|
|
239
|
+
function entryBySlug(slug) {
|
|
240
|
+
return portfolio.filter(function (entry) { return entry.slug === slug; })[0] || portfolio[0];
|
|
256
241
|
}
|
|
257
242
|
|
|
258
243
|
function paintSpecimen(entry) {
|
|
259
244
|
specimenSlot.innerHTML = '';
|
|
245
|
+
/* No card-level drafting corners / edge tick — markers live on the
|
|
246
|
+
poster plate only, so they do not overlap the image. Meta strip
|
|
247
|
+
is suppressed; tags take that slot below the plate. Specimen and
|
|
248
|
+
inventory sizes are CSS-fixed (no ResizeObserver). */
|
|
260
249
|
specimenSlot.appendChild(runtime.renderSystemCard(asItem(entry), {
|
|
261
250
|
href: entry.url || runtime.projectUrl(entry.slug),
|
|
262
251
|
tagHref: systemTagHref,
|
|
263
|
-
className: 'home-project-specimen
|
|
264
|
-
|
|
265
|
-
|
|
252
|
+
className: 'home-project-specimen',
|
|
253
|
+
glyphFallback: true,
|
|
254
|
+
metaParts: []
|
|
266
255
|
}));
|
|
267
|
-
var specimen = specimenSlot.querySelector('.home-project-specimen');
|
|
268
|
-
watchSpecimen(specimen);
|
|
269
|
-
var poster = specimenSlot.querySelector('.ledger-poster img, .projects-plate');
|
|
270
|
-
if (poster && poster.tagName === 'IMG' && !poster.complete) {
|
|
271
|
-
poster.addEventListener('load', syncInventoryHeight, { once: true });
|
|
272
|
-
}
|
|
273
|
-
window.requestAnimationFrame(syncInventoryHeight);
|
|
274
256
|
}
|
|
275
257
|
|
|
276
258
|
function paintInventory() {
|
|
277
259
|
inventorySlot.hidden = false;
|
|
278
260
|
inventorySlot.innerHTML = '';
|
|
279
|
-
|
|
261
|
+
/* Always reserve six mobile columns so one project does not stretch
|
|
262
|
+
a single giant button across the band. */
|
|
263
|
+
inventorySlot.style.setProperty('--home-project-icon-count', String(iconSlots));
|
|
264
|
+
portfolio.forEach(function (entry, i) {
|
|
280
265
|
var row = runtime.renderProjectInventoryRow(asItem(entry), {
|
|
281
266
|
selectable: true,
|
|
282
|
-
selected: entry.slug === selectedSlug
|
|
267
|
+
selected: entry.slug === selectedSlug,
|
|
268
|
+
index: i + 1
|
|
283
269
|
});
|
|
284
270
|
function select() {
|
|
285
271
|
if (selectedSlug === entry.slug) return;
|
|
@@ -300,12 +286,10 @@ layout: shell
|
|
|
300
286
|
});
|
|
301
287
|
inventorySlot.appendChild(row);
|
|
302
288
|
});
|
|
303
|
-
window.requestAnimationFrame(syncInventoryHeight);
|
|
304
289
|
}
|
|
305
290
|
|
|
306
|
-
paintSpecimen(
|
|
291
|
+
paintSpecimen(entryBySlug(selectedSlug));
|
|
307
292
|
paintInventory();
|
|
308
|
-
window.addEventListener('resize', syncInventoryHeight);
|
|
309
293
|
return;
|
|
310
294
|
}
|
|
311
295
|
|
data/assets/css/ledger/home.css
CHANGED
|
@@ -943,52 +943,77 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
943
943
|
}
|
|
944
944
|
}
|
|
945
945
|
|
|
946
|
-
/* ── Engineering artifacts: specimen +
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
opens the project. */
|
|
946
|
+
/* ── Engineering artifacts: specimen + index folio ──
|
|
947
|
+
Fixed specimen chrome (16:9 plate + reserved body). Mobile icon strip
|
|
948
|
+
always reserves six equal slots at a fixed button height. Desktop inventory
|
|
949
|
+
sits in a panel container matched to the specimen height via CSS, not JS. */
|
|
951
950
|
.home-projects-bench {
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
.home-projects-bench {
|
|
960
|
-
grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
|
|
961
|
-
gap: var(--space-xl);
|
|
962
|
-
align-items: start;
|
|
963
|
-
}
|
|
951
|
+
--home-specimen-height: 26rem;
|
|
952
|
+
--home-icon-btn-size: 2.75rem;
|
|
953
|
+
--home-project-icon-count: 6;
|
|
954
|
+
display: flex;
|
|
955
|
+
flex-direction: column;
|
|
956
|
+
align-items: stretch;
|
|
957
|
+
gap: var(--space-md);
|
|
964
958
|
}
|
|
965
959
|
|
|
966
960
|
.home-project-specimen {
|
|
967
961
|
position: relative;
|
|
962
|
+
display: flex;
|
|
963
|
+
flex-direction: column;
|
|
968
964
|
gap: var(--space-sm);
|
|
969
965
|
padding: var(--space-md);
|
|
970
966
|
max-width: none;
|
|
971
967
|
width: 100%;
|
|
968
|
+
height: var(--home-specimen-height);
|
|
969
|
+
overflow: hidden;
|
|
970
|
+
border: 0;
|
|
972
971
|
background: var(--color-panel-contrast);
|
|
972
|
+
box-sizing: border-box;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
:root:not([data-theme="dark"]) .home-project-specimen,
|
|
976
|
+
html[data-theme="light"] .home-project-specimen,
|
|
977
|
+
[data-theme="dark"] .home-project-specimen {
|
|
978
|
+
border: 0;
|
|
973
979
|
}
|
|
974
980
|
|
|
975
981
|
.home-project-specimen>.ledger-poster,
|
|
976
982
|
.home-project-specimen>.projects-plate {
|
|
983
|
+
flex: 0 0 auto;
|
|
977
984
|
width: auto;
|
|
978
985
|
margin: calc(var(--space-md) * -1) calc(var(--space-md) * -1) 0;
|
|
979
986
|
aspect-ratio: 16 / 9;
|
|
987
|
+
max-height: calc(var(--home-specimen-height) * 0.58);
|
|
988
|
+
position: relative;
|
|
989
|
+
overflow: hidden;
|
|
980
990
|
}
|
|
981
991
|
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
992
|
+
.home-project-specimen>.ledger-poster img,
|
|
993
|
+
.home-project-specimen>.ledger-poster video {
|
|
994
|
+
width: 100%;
|
|
995
|
+
height: 100%;
|
|
996
|
+
object-fit: cover;
|
|
997
|
+
}
|
|
988
998
|
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
999
|
+
/* Glyph plates have no .ledger-poster::after — mirror the image corners. */
|
|
1000
|
+
.home-project-specimen>.projects-plate::after {
|
|
1001
|
+
content: "";
|
|
1002
|
+
--frame-corner-size: 0.7rem;
|
|
1003
|
+
--frame-corner-thickness: 1px;
|
|
1004
|
+
position: absolute;
|
|
1005
|
+
inset: 0.3rem;
|
|
1006
|
+
pointer-events: none;
|
|
1007
|
+
z-index: 2;
|
|
1008
|
+
background:
|
|
1009
|
+
linear-gradient(var(--color-primary), var(--color-primary)) top left / var(--frame-corner-size) var(--frame-corner-thickness) no-repeat,
|
|
1010
|
+
linear-gradient(var(--color-primary), var(--color-primary)) top left / var(--frame-corner-thickness) var(--frame-corner-size) no-repeat,
|
|
1011
|
+
linear-gradient(var(--color-primary), var(--color-primary)) top right / var(--frame-corner-size) var(--frame-corner-thickness) no-repeat,
|
|
1012
|
+
linear-gradient(var(--color-primary), var(--color-primary)) top right / var(--frame-corner-thickness) var(--frame-corner-size) no-repeat,
|
|
1013
|
+
linear-gradient(var(--color-primary), var(--color-primary)) bottom left / var(--frame-corner-size) var(--frame-corner-thickness) no-repeat,
|
|
1014
|
+
linear-gradient(var(--color-primary), var(--color-primary)) bottom left / var(--frame-corner-thickness) var(--frame-corner-size) no-repeat,
|
|
1015
|
+
linear-gradient(var(--color-primary), var(--color-primary)) bottom right / var(--frame-corner-size) var(--frame-corner-thickness) no-repeat,
|
|
1016
|
+
linear-gradient(var(--color-primary), var(--color-primary)) bottom right / var(--frame-corner-thickness) var(--frame-corner-size) no-repeat;
|
|
992
1017
|
}
|
|
993
1018
|
|
|
994
1019
|
.home-project-specimen .projects-plate--mark {
|
|
@@ -1004,17 +1029,23 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
1004
1029
|
}
|
|
1005
1030
|
|
|
1006
1031
|
.home-project-specimen .ledger-meta {
|
|
1007
|
-
|
|
1032
|
+
display: none;
|
|
1008
1033
|
}
|
|
1009
1034
|
|
|
1010
1035
|
.home-project-specimen .ledger-card-title,
|
|
1011
1036
|
.home-project-specimen .ledger-card-title a {
|
|
1037
|
+
flex: 0 0 auto;
|
|
1012
1038
|
font-family: var(--font-content-title);
|
|
1013
1039
|
font-size: var(--type-card-lg);
|
|
1014
1040
|
font-weight: var(--weight-title);
|
|
1015
1041
|
font-synthesis: none;
|
|
1016
1042
|
line-height: 1.2;
|
|
1017
1043
|
color: var(--color-on-surface);
|
|
1044
|
+
min-height: calc(1.2em * 1);
|
|
1045
|
+
margin: 0;
|
|
1046
|
+
overflow: hidden;
|
|
1047
|
+
text-overflow: ellipsis;
|
|
1048
|
+
white-space: nowrap;
|
|
1018
1049
|
}
|
|
1019
1050
|
|
|
1020
1051
|
.home-project-specimen:hover .ledger-card-title a,
|
|
@@ -1023,6 +1054,7 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
1023
1054
|
}
|
|
1024
1055
|
|
|
1025
1056
|
.home-project-specimen .ledger-card-copy {
|
|
1057
|
+
flex: 0 0 auto;
|
|
1026
1058
|
font-family: var(--font-body);
|
|
1027
1059
|
font-size: var(--type-body);
|
|
1028
1060
|
font-weight: var(--weight-body);
|
|
@@ -1033,43 +1065,80 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
1033
1065
|
-webkit-line-clamp: 3;
|
|
1034
1066
|
line-clamp: 3;
|
|
1035
1067
|
overflow: hidden;
|
|
1068
|
+
min-height: calc(var(--type-body) * var(--leading-body) * 3);
|
|
1069
|
+
margin: 0;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
.home-project-specimen .ledger-chip-row {
|
|
1073
|
+
display: flex;
|
|
1074
|
+
flex-wrap: wrap;
|
|
1075
|
+
gap: var(--space-xs);
|
|
1076
|
+
margin: 0;
|
|
1077
|
+
margin-top: auto;
|
|
1078
|
+
max-height: 4.5rem;
|
|
1079
|
+
overflow: hidden;
|
|
1036
1080
|
}
|
|
1037
1081
|
|
|
1038
|
-
.home-project-specimen .ledger-chip-row,
|
|
1039
1082
|
.home-project-specimen .ledger-card-links {
|
|
1040
1083
|
display: none;
|
|
1041
1084
|
}
|
|
1042
1085
|
|
|
1086
|
+
/* Mobile: six equal icon slots, fixed button height (empty slots stay empty). */
|
|
1043
1087
|
.home-project-inventory {
|
|
1044
|
-
display:
|
|
1045
|
-
|
|
1088
|
+
display: grid;
|
|
1089
|
+
grid-template-columns: repeat(var(--home-project-icon-count, 6), minmax(0, 1fr));
|
|
1090
|
+
gap: var(--space-xs);
|
|
1046
1091
|
min-width: 0;
|
|
1047
1092
|
min-height: 0;
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1093
|
+
height: auto !important;
|
|
1094
|
+
overflow: visible;
|
|
1095
|
+
background: transparent;
|
|
1096
|
+
border: 0;
|
|
1097
|
+
padding: 0;
|
|
1051
1098
|
}
|
|
1052
1099
|
|
|
1053
1100
|
.home-project-inventory-row {
|
|
1054
1101
|
position: relative;
|
|
1055
1102
|
display: flex;
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
flex:
|
|
1059
|
-
|
|
1060
|
-
|
|
1103
|
+
align-items: center;
|
|
1104
|
+
justify-content: center;
|
|
1105
|
+
flex: none;
|
|
1106
|
+
width: auto;
|
|
1107
|
+
min-width: 0;
|
|
1108
|
+
height: var(--home-icon-btn-size);
|
|
1109
|
+
aspect-ratio: auto;
|
|
1061
1110
|
gap: 0;
|
|
1062
|
-
|
|
1111
|
+
padding: 0;
|
|
1112
|
+
border: 1px solid var(--border-gentle-divider);
|
|
1113
|
+
background: var(--color-panel-contrast);
|
|
1063
1114
|
cursor: pointer;
|
|
1064
|
-
|
|
1115
|
+
box-shadow: none;
|
|
1116
|
+
transition: background-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1117
|
+
border-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1065
1118
|
}
|
|
1066
1119
|
|
|
1067
|
-
.home-project-inventory-
|
|
1068
|
-
|
|
1120
|
+
.home-project-inventory-index,
|
|
1121
|
+
.home-project-inventory-media,
|
|
1122
|
+
.home-project-inventory-body {
|
|
1123
|
+
display: none;
|
|
1069
1124
|
}
|
|
1070
1125
|
|
|
1071
|
-
.home-project-inventory-
|
|
1072
|
-
|
|
1126
|
+
.home-project-inventory-glyph {
|
|
1127
|
+
display: inline-flex;
|
|
1128
|
+
align-items: center;
|
|
1129
|
+
justify-content: center;
|
|
1130
|
+
width: auto;
|
|
1131
|
+
height: auto;
|
|
1132
|
+
margin: 0;
|
|
1133
|
+
font-size: 1.25rem;
|
|
1134
|
+
line-height: 1;
|
|
1135
|
+
color: var(--color-on-surface-variant);
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
.home-project-inventory-glyph--initial {
|
|
1139
|
+
font-family: var(--font-content-title);
|
|
1140
|
+
font-size: var(--type-subtitle);
|
|
1141
|
+
font-weight: var(--weight-title);
|
|
1073
1142
|
}
|
|
1074
1143
|
|
|
1075
1144
|
.home-project-inventory-row:hover,
|
|
@@ -1079,8 +1148,17 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
1079
1148
|
}
|
|
1080
1149
|
|
|
1081
1150
|
.home-project-inventory-row.is-selected {
|
|
1151
|
+
border-color: var(--color-primary);
|
|
1152
|
+
outline: 1px solid var(--color-primary);
|
|
1153
|
+
outline-offset: -1px;
|
|
1082
1154
|
background: var(--color-surface-high);
|
|
1083
|
-
box-shadow:
|
|
1155
|
+
box-shadow: none;
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
.home-project-inventory-row.is-selected .home-project-inventory-glyph,
|
|
1159
|
+
.home-project-inventory-row:hover .home-project-inventory-glyph,
|
|
1160
|
+
.home-project-inventory-row:focus-visible .home-project-inventory-glyph {
|
|
1161
|
+
color: var(--color-primary);
|
|
1084
1162
|
}
|
|
1085
1163
|
|
|
1086
1164
|
.home-band--contrast .home-project-inventory-row:hover,
|
|
@@ -1089,88 +1167,173 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
1089
1167
|
background: var(--color-surface-high-contrast);
|
|
1090
1168
|
}
|
|
1091
1169
|
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
not on a child that left an empty auto-track beside the poster. */
|
|
1095
|
-
.home-project-inventory-media {
|
|
1096
|
-
flex: 0 0 auto;
|
|
1097
|
-
align-self: stretch;
|
|
1098
|
-
height: auto;
|
|
1099
|
-
min-width: 0;
|
|
1100
|
-
min-height: 0;
|
|
1101
|
-
aspect-ratio: 16 / 9;
|
|
1102
|
-
overflow: hidden;
|
|
1103
|
-
background: var(--color-surface-high);
|
|
1104
|
-
border-right: 1px solid var(--border-gentle-subtle);
|
|
1170
|
+
.home-project-inventory-row .ledger-meta {
|
|
1171
|
+
display: none;
|
|
1105
1172
|
}
|
|
1106
1173
|
|
|
1107
|
-
|
|
1108
|
-
.home-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
}
|
|
1174
|
+
@media (min-width: 900px) {
|
|
1175
|
+
.home-projects-bench {
|
|
1176
|
+
--home-specimen-height: 28rem;
|
|
1177
|
+
display: grid;
|
|
1178
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
|
|
1179
|
+
gap: var(--space-xl);
|
|
1180
|
+
align-items: stretch;
|
|
1181
|
+
}
|
|
1116
1182
|
|
|
1117
|
-
.home-project-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
}
|
|
1183
|
+
.home-project-specimen {
|
|
1184
|
+
height: var(--home-specimen-height);
|
|
1185
|
+
}
|
|
1121
1186
|
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1187
|
+
/* Panel container over the tiled band — not bare rows on the grid. */
|
|
1188
|
+
.home-project-inventory {
|
|
1189
|
+
display: flex;
|
|
1190
|
+
flex-direction: column;
|
|
1191
|
+
height: var(--home-specimen-height);
|
|
1192
|
+
overflow: hidden;
|
|
1193
|
+
gap: 0;
|
|
1194
|
+
padding: 0;
|
|
1195
|
+
background: var(--color-panel-contrast);
|
|
1196
|
+
border: 1px solid var(--border-gentle-divider);
|
|
1197
|
+
}
|
|
1128
1198
|
|
|
1129
|
-
.home-project-inventory-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1199
|
+
.home-project-inventory-row {
|
|
1200
|
+
display: flex;
|
|
1201
|
+
flex-direction: row;
|
|
1202
|
+
align-items: center;
|
|
1203
|
+
justify-content: flex-start;
|
|
1204
|
+
flex: 1 1 0;
|
|
1205
|
+
width: auto;
|
|
1206
|
+
height: auto;
|
|
1207
|
+
min-height: 0;
|
|
1208
|
+
aspect-ratio: auto;
|
|
1209
|
+
gap: var(--space-md);
|
|
1210
|
+
padding: var(--space-sm) var(--space-md);
|
|
1211
|
+
border: 0;
|
|
1212
|
+
border-bottom: 1px solid var(--border-gentle-divider);
|
|
1213
|
+
background: transparent;
|
|
1214
|
+
outline: none;
|
|
1215
|
+
}
|
|
1135
1216
|
|
|
1136
|
-
.home-project-inventory-
|
|
1137
|
-
|
|
1138
|
-
}
|
|
1217
|
+
.home-project-inventory-row:last-child {
|
|
1218
|
+
border-bottom: 0;
|
|
1219
|
+
}
|
|
1139
1220
|
|
|
1140
|
-
.home-project-inventory-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
min-width: 0;
|
|
1147
|
-
padding: var(--space-sm) var(--space-md);
|
|
1148
|
-
}
|
|
1221
|
+
.home-project-inventory-row.is-selected {
|
|
1222
|
+
background: var(--color-surface-high);
|
|
1223
|
+
border-color: transparent;
|
|
1224
|
+
outline: none;
|
|
1225
|
+
box-shadow: inset 3px 0 0 var(--color-primary);
|
|
1226
|
+
}
|
|
1149
1227
|
|
|
1150
|
-
.home-project-inventory-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1228
|
+
.home-project-inventory-index {
|
|
1229
|
+
display: block;
|
|
1230
|
+
flex: 0 0 1.75rem;
|
|
1231
|
+
font-family: var(--font-mono);
|
|
1232
|
+
font-size: var(--type-caption);
|
|
1233
|
+
letter-spacing: 0.04em;
|
|
1234
|
+
color: var(--color-on-surface-variant);
|
|
1235
|
+
line-height: 1;
|
|
1236
|
+
text-align: right;
|
|
1237
|
+
}
|
|
1159
1238
|
|
|
1160
|
-
.home-project-inventory-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1239
|
+
.home-project-inventory-row.is-selected .home-project-inventory-index,
|
|
1240
|
+
.home-project-inventory-row:hover .home-project-inventory-index,
|
|
1241
|
+
.home-project-inventory-row:focus-visible .home-project-inventory-index {
|
|
1242
|
+
color: var(--color-primary);
|
|
1243
|
+
}
|
|
1164
1244
|
|
|
1165
|
-
.home-project-inventory-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1245
|
+
.home-project-inventory-media {
|
|
1246
|
+
display: block;
|
|
1247
|
+
flex: 0 0 auto;
|
|
1248
|
+
width: 5.5rem;
|
|
1249
|
+
align-self: center;
|
|
1250
|
+
height: auto;
|
|
1251
|
+
min-width: 0;
|
|
1252
|
+
min-height: 0;
|
|
1253
|
+
aspect-ratio: 16 / 9;
|
|
1254
|
+
overflow: hidden;
|
|
1255
|
+
background: var(--color-surface-high);
|
|
1256
|
+
border: 1px solid var(--border-gentle-subtle);
|
|
1257
|
+
}
|
|
1170
1258
|
|
|
1171
|
-
.home-project-inventory-
|
|
1172
|
-
|
|
1173
|
-
|
|
1259
|
+
.home-project-inventory-media .ledger-poster,
|
|
1260
|
+
.home-project-inventory-mark {
|
|
1261
|
+
width: 100%;
|
|
1262
|
+
height: 100%;
|
|
1263
|
+
aspect-ratio: auto;
|
|
1264
|
+
border: 0;
|
|
1265
|
+
overflow: hidden;
|
|
1266
|
+
background: var(--color-surface-high);
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
.home-project-inventory-media .ledger-poster::after {
|
|
1270
|
+
display: none;
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
.home-project-inventory-media .ledger-poster img {
|
|
1274
|
+
width: 100%;
|
|
1275
|
+
height: 100%;
|
|
1276
|
+
object-fit: cover;
|
|
1277
|
+
display: block;
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
.home-project-inventory-mark {
|
|
1281
|
+
display: flex;
|
|
1282
|
+
align-items: center;
|
|
1283
|
+
justify-content: center;
|
|
1284
|
+
color: var(--color-primary);
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
.home-project-inventory-mark--initial {
|
|
1288
|
+
font-family: var(--font-content-title);
|
|
1289
|
+
font-size: var(--type-card);
|
|
1290
|
+
font-weight: var(--weight-title);
|
|
1291
|
+
line-height: 1;
|
|
1292
|
+
color: var(--color-on-surface);
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
.home-project-inventory-mark .material-symbols-outlined {
|
|
1296
|
+
font-size: 1.25rem;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
.home-project-inventory-body {
|
|
1300
|
+
display: flex;
|
|
1301
|
+
flex-direction: column;
|
|
1302
|
+
justify-content: center;
|
|
1303
|
+
gap: 0;
|
|
1304
|
+
flex: 1 1 0;
|
|
1305
|
+
min-width: 0;
|
|
1306
|
+
padding: 0;
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
.home-project-inventory-title {
|
|
1310
|
+
margin: 0;
|
|
1311
|
+
font-family: var(--font-content-title);
|
|
1312
|
+
font-size: var(--type-card);
|
|
1313
|
+
font-weight: var(--weight-title);
|
|
1314
|
+
font-synthesis: none;
|
|
1315
|
+
line-height: 1.25;
|
|
1316
|
+
color: var(--color-on-surface);
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
.home-project-inventory-title a {
|
|
1320
|
+
color: inherit;
|
|
1321
|
+
text-decoration: none;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
.home-project-inventory-row:hover .home-project-inventory-title,
|
|
1325
|
+
.home-project-inventory-row:focus-visible .home-project-inventory-title,
|
|
1326
|
+
.home-project-inventory-row.is-selected .home-project-inventory-title {
|
|
1327
|
+
color: var(--color-primary);
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
.home-project-inventory-glyph {
|
|
1331
|
+
flex: 0 0 auto;
|
|
1332
|
+
width: 1.75rem;
|
|
1333
|
+
height: 1.75rem;
|
|
1334
|
+
margin-left: auto;
|
|
1335
|
+
font-size: 1.25rem;
|
|
1336
|
+
}
|
|
1174
1337
|
}
|
|
1175
1338
|
|
|
1176
1339
|
|
|
@@ -24,7 +24,7 @@ module Pandorga
|
|
|
24
24
|
|
|
25
25
|
gem "pandorga", "~> 1.3"
|
|
26
26
|
# Local checkout: gem "pandorga", path: "../pandorga"
|
|
27
|
-
# GitHub tag: gem "pandorga", github: "alexandrelheinen/pandorga", tag: "v1.3.
|
|
27
|
+
# GitHub tag: gem "pandorga", github: "alexandrelheinen/pandorga", tag: "v1.3.5"
|
|
28
28
|
gem "csv"
|
|
29
29
|
gem "base64"
|
|
30
30
|
RUBY
|
data/lib/pandorga/version.rb
CHANGED