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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 293e08c986e9f718e3d08113723d0a864f93b78f0908b56535242f70799ec9fd
4
- data.tar.gz: 554f716cedf086be7731f34b3a57b88cda2f9417b3776471a1cc64fdc40e5d41
3
+ metadata.gz: 99bd672a429eb53fd10ee4fc1bfefc9ff378ed47ca44a44ccd7280331cd2c1c2
4
+ data.tar.gz: 5954341027c77b5113a98976f4c2acf5becd066d013db6de69022e2b3fb1c60c
5
5
  SHA512:
6
- metadata.gz: dea631f86129632675aebe0045cba2653f3730548766f90712364439c2dbce08262590253eab01d2014e61e428573021c18567ad4083358fa674bc096e3ca2ff
7
- data.tar.gz: 2999d8cf0260b8bf5c854e58d5dd73bdf5e4afcfc89ca0a20b2ef557e0b64432f95f6683916ed5833d10f79ce1413861b978e5b785fdd53fe4f454aff8950032
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 — thumb + name +
328
- * status only. Field-backed; no tagline or tag cloud.
329
- * When options.selectable is true the row selects the specimen instead
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
- if (!media && fm.icon) {
354
- media = '<div class="home-project-inventory-mark" aria-hidden="true">' +
355
- '<span class="material-symbols-outlined">' + escapeHtml(fm.icon) + '</span></div>';
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
- var portfolio = entries.slice(0, limit);
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 selectedSlug = portfolio[0].slug;
231
- var inventoryResizeObserver = null;
232
-
233
- function syncInventoryHeight() {
234
- if (!window.matchMedia('(min-width: 900px)').matches) {
235
- inventorySlot.style.height = '';
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 watchSpecimen(specimen) {
247
- if (inventoryResizeObserver) {
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 ledger-card--edge-primary',
264
- frameCorners: true,
265
- glyphFallback: true
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
- portfolio.forEach(function (entry) {
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(portfolio[0]);
291
+ paintSpecimen(entryBySlug(selectedSlug));
307
292
  paintInventory();
308
- window.addEventListener('resize', syncInventoryHeight);
309
293
  return;
310
294
  }
311
295
 
@@ -943,52 +943,77 @@ html[data-theme="light"] .home-hero-plate {
943
943
  }
944
944
  }
945
945
 
946
- /* ── Engineering artifacts: specimen + inventory bench ──
947
- 40%/60% split: 16:9 specimen card beside a panel inventory whose height
948
- matches the full specimen. Equal-flex rows; thumbs are full-row-height
949
- 16:9 plates flush left. List click updates the specimen; specimen click
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
- display: grid;
953
- grid-template-columns: minmax(0, 1fr);
954
- gap: var(--space-lg);
955
- align-items: start;
956
- }
957
-
958
- @media (min-width: 900px) {
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
- @media (max-width: 899px) {
983
- .home-projects-bench {
984
- display: flex;
985
- flex-direction: column;
986
- align-items: stretch;
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
- .home-project-specimen {
990
- max-width: none;
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
- color: var(--color-on-surface-variant);
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: flex;
1045
- flex-direction: column;
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
- background: var(--color-panel-contrast);
1049
- border: 1px solid var(--border-gentle-divider);
1050
- overflow: hidden;
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
- flex-direction: row;
1057
- align-items: stretch;
1058
- flex: 1 1 0;
1059
- min-height: 0;
1060
- padding: 0;
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
- border-bottom: 1px solid var(--border-gentle-divider);
1111
+ padding: 0;
1112
+ border: 1px solid var(--border-gentle-divider);
1113
+ background: var(--color-panel-contrast);
1063
1114
  cursor: pointer;
1064
- transition: background-color var(--motion-duration-fast) var(--motion-ease-default);
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-row:last-child {
1068
- border-bottom: none;
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-row:not(:has(.home-project-inventory-media)) {
1072
- padding: var(--space-sm) var(--space-md);
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: inset 2px 0 0 var(--color-primary);
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
- /* Thumb is a full-row-height 16:9 plate, flush to the list's left edge.
1093
- Aspect ratio lives on the media shell so the flex item sizes tightly —
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
- .home-project-inventory-media .ledger-poster,
1108
- .home-project-inventory-mark {
1109
- width: 100%;
1110
- height: 100%;
1111
- aspect-ratio: auto;
1112
- border: 0;
1113
- overflow: hidden;
1114
- background: var(--color-surface-high);
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-inventory-media .ledger-poster::after {
1118
- --frame-corner-size: 0.45rem;
1119
- inset: 0.2rem;
1120
- }
1183
+ .home-project-specimen {
1184
+ height: var(--home-specimen-height);
1185
+ }
1121
1186
 
1122
- .home-project-inventory-media .ledger-poster img {
1123
- width: 100%;
1124
- height: 100%;
1125
- object-fit: cover;
1126
- display: block;
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-mark {
1130
- display: flex;
1131
- align-items: center;
1132
- justify-content: center;
1133
- color: var(--color-primary);
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-mark .material-symbols-outlined {
1137
- font-size: 1.25rem;
1138
- }
1217
+ .home-project-inventory-row:last-child {
1218
+ border-bottom: 0;
1219
+ }
1139
1220
 
1140
- .home-project-inventory-body {
1141
- display: flex;
1142
- flex-direction: column;
1143
- justify-content: center;
1144
- gap: var(--space-2xs);
1145
- flex: 1 1 0;
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-title {
1151
- margin: 0;
1152
- font-family: var(--font-content-title);
1153
- font-size: var(--type-card);
1154
- font-weight: var(--weight-title);
1155
- font-synthesis: none;
1156
- line-height: 1.25;
1157
- color: var(--color-on-surface);
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-title a {
1161
- color: inherit;
1162
- text-decoration: none;
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-row:hover .home-project-inventory-title,
1166
- .home-project-inventory-row:focus-visible .home-project-inventory-title,
1167
- .home-project-inventory-row.is-selected .home-project-inventory-title {
1168
- color: var(--color-primary);
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-row .ledger-meta {
1172
- margin: 0;
1173
- color: var(--color-on-surface-variant);
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.2"
27
+ # GitHub tag: gem "pandorga", github: "alexandrelheinen/pandorga", tag: "v1.3.5"
28
28
  gem "csv"
29
29
  gem "base64"
30
30
  RUBY
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pandorga
4
- VERSION = "1.3.2"
4
+ VERSION = "1.3.5"
5
5
  end
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.2
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Pandorga contributors