pandorga 1.10.1 → 1.10.2
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 +12 -0
- data/_includes/content-runtime/43-blocks.html +6 -36
- data/_layouts/home.html +5 -6
- data/assets/css/ledger/home.css +47 -86
- data/lib/pandorga/commands/new.rb +1 -1
- data/lib/pandorga/version.rb +1 -1
- data/scripts/test/render-parity/blocks/project-inventory-row.json +8 -11
- data/scripts/test/test-css-structure.rb +22 -0
- 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: 4e66f241523945a85596363141b9693e01ac61e5d6eec0771366ced0ef2dc8b6
|
|
4
|
+
data.tar.gz: 7f00fe9a24f801f42065b3b80d760ccdc1b57fc6c46d89664e2f4e654168a545
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 92e01266bf8f8f0c3a59f47596dd2d589dbd357d361471ecd59fba91d1e44b172f9c7eb3bc9b4958e0a27e8e5cb191637fb908044ec0c4a92b67e20b1237eb28
|
|
7
|
+
data.tar.gz: b10c2447cc7dbead75c291ffd0abdd0a32854906dcb87ffc763d4f0435b31836417eb99f0a7a01649c19b1d3b1572fd56865c2b566ead68c62828964e0d42daa
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.10.2] — 2026-10-16
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- On the home projects bench, each inventory row shows the project icon mark
|
|
8
|
+
(or initial fallback), optional index and label strip, and title, without a
|
|
9
|
+
thumbnail poster, tagline preview, or attached-resource icons. On desktop
|
|
10
|
+
(`>= 900px`) each row fits that two-line body and square icon mark, and the
|
|
11
|
+
specimen height matches the inventory stack
|
|
12
|
+
- Project hero action pills keep their label text free of underlines at rest
|
|
13
|
+
and on hover
|
|
14
|
+
|
|
3
15
|
## [1.10.1] — 2026-10-14
|
|
4
16
|
|
|
5
17
|
### Changed
|
|
@@ -330,9 +330,9 @@
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
/* Rack card for the home portfolio bench.
|
|
333
|
-
* Desktop:
|
|
334
|
-
*
|
|
335
|
-
*
|
|
333
|
+
* Desktop: square icon mark (or initial) beside a code line and title.
|
|
334
|
+
* The mobile strip shows the project glyph only. Selectable rows update
|
|
335
|
+
* the specimen. */
|
|
336
336
|
function renderProjectInventoryRow(item, options) {
|
|
337
337
|
options = options || {};
|
|
338
338
|
var f = blockFields(item);
|
|
@@ -357,12 +357,12 @@
|
|
|
357
357
|
row.setAttribute('aria-label', name);
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
var media = renderPosterMedia(fm.thumbnail, name);
|
|
361
360
|
var initial = String(name || '?').charAt(0).toUpperCase();
|
|
362
|
-
|
|
361
|
+
var media;
|
|
362
|
+
if (fm.icon) {
|
|
363
363
|
media = '<div class="home-project-inventory-mark" aria-hidden="true">' +
|
|
364
364
|
'<span class="material-symbols-outlined">' + escapeHtml(fm.icon) + '</span></div>';
|
|
365
|
-
} else
|
|
365
|
+
} else {
|
|
366
366
|
media = '<div class="home-project-inventory-mark home-project-inventory-mark--initial" aria-hidden="true">' +
|
|
367
367
|
escapeHtml(initial) + '</div>';
|
|
368
368
|
}
|
|
@@ -388,9 +388,6 @@
|
|
|
388
388
|
'<a class="ledger-card-stretch" href="' + escapeAttr(href) + '">' +
|
|
389
389
|
escapeHtml(name) + '</a></h3>';
|
|
390
390
|
}
|
|
391
|
-
if (fm.tagline) {
|
|
392
|
-
html += '<p class="home-project-inventory-copy font-body">' + escapeHtml(fm.tagline) + '</p>';
|
|
393
|
-
}
|
|
394
391
|
html += '</div>';
|
|
395
392
|
if (fm.icon) {
|
|
396
393
|
html += '<span class="home-project-inventory-glyph material-symbols-outlined" aria-hidden="true">' +
|
|
@@ -399,7 +396,6 @@
|
|
|
399
396
|
html += '<span class="home-project-inventory-glyph home-project-inventory-glyph--initial" aria-hidden="true">' +
|
|
400
397
|
escapeHtml(initial) + '</span>';
|
|
401
398
|
}
|
|
402
|
-
html += renderProjectResourceBadges(fm);
|
|
403
399
|
|
|
404
400
|
row.innerHTML = html;
|
|
405
401
|
return row;
|
|
@@ -473,32 +469,6 @@
|
|
|
473
469
|
return links.join('');
|
|
474
470
|
}
|
|
475
471
|
|
|
476
|
-
/* Square resource marks for the home inventory rack — same fields as
|
|
477
|
-
* renderProjectLinks (github / article_url / external_url), icon-only
|
|
478
|
-
* indicators (not links). */
|
|
479
|
-
function renderProjectResourceBadges(fm) {
|
|
480
|
-
var badges = [];
|
|
481
|
-
if (fm.github) {
|
|
482
|
-
badges.push({ icon: 'code', label: 'Code' });
|
|
483
|
-
}
|
|
484
|
-
if (fm.article_url) {
|
|
485
|
-
badges.push({ icon: 'article', label: 'Article' });
|
|
486
|
-
}
|
|
487
|
-
if (fm.external_url) {
|
|
488
|
-
badges.push({ icon: 'public', label: 'Site' });
|
|
489
|
-
}
|
|
490
|
-
if (!badges.length) return '';
|
|
491
|
-
return '<div class="home-project-inventory-resources" aria-label="Attached resources">' +
|
|
492
|
-
badges.map(function (badge) {
|
|
493
|
-
return '<span class="home-project-inventory-resource" title="' +
|
|
494
|
-
escapeAttr(badge.label) + '" aria-label="' +
|
|
495
|
-
escapeAttr(badge.label) + '">' +
|
|
496
|
-
'<span class="material-symbols-outlined" aria-hidden="true">' +
|
|
497
|
-
escapeHtml(badge.icon) + '</span></span>';
|
|
498
|
-
}).join('') +
|
|
499
|
-
'</div>';
|
|
500
|
-
}
|
|
501
|
-
|
|
502
472
|
/* Home specimen — the featured project on the portfolio bench. A system
|
|
503
473
|
* card whose strip carries folio, label and start year, with the title
|
|
504
474
|
* below a 16:9 plate: the thumbnail (icon badge on it) or else the icon
|
data/_layouts/home.html
CHANGED
|
@@ -399,9 +399,10 @@ layout: shell
|
|
|
399
399
|
async function lockSpecimenHeight() {
|
|
400
400
|
var bench = specimenSlot.closest('.home-projects-bench');
|
|
401
401
|
if (!bench) return;
|
|
402
|
+
bench.style.setProperty('--home-project-icon-count', String(iconSlots));
|
|
402
403
|
var tallest = await measureTallestSpecimen();
|
|
403
|
-
/*
|
|
404
|
-
|
|
404
|
+
/* Desktop matches the specimen height to the N-entry inventory stack
|
|
405
|
+
(see --home-inventory-min-height); mobile uses the tallest specimen. */
|
|
405
406
|
var inventoryMin = 0;
|
|
406
407
|
var raw = window.getComputedStyle(bench)
|
|
407
408
|
.getPropertyValue('--home-inventory-min-height').trim();
|
|
@@ -412,7 +413,7 @@ layout: shell
|
|
|
412
413
|
inventoryMin = Math.ceil(probe.getBoundingClientRect().height);
|
|
413
414
|
probe.remove();
|
|
414
415
|
}
|
|
415
|
-
var locked =
|
|
416
|
+
var locked = inventoryMin > 0 ? inventoryMin : tallest;
|
|
416
417
|
if (locked > 0) {
|
|
417
418
|
bench.style.setProperty('--home-specimen-height', locked + 'px');
|
|
418
419
|
}
|
|
@@ -441,12 +442,10 @@ layout: shell
|
|
|
441
442
|
selected: entry.slug === selectedSlug,
|
|
442
443
|
index: i + 1
|
|
443
444
|
});
|
|
444
|
-
row.addEventListener('click', function (
|
|
445
|
-
if (event.target.closest('.home-project-inventory-resources')) return;
|
|
445
|
+
row.addEventListener('click', function () {
|
|
446
446
|
select(entry.slug);
|
|
447
447
|
});
|
|
448
448
|
row.addEventListener('keydown', function (event) {
|
|
449
|
-
if (event.target.closest('.home-project-inventory-resources')) return;
|
|
450
449
|
if (event.key === 'Enter' || event.key === ' ') {
|
|
451
450
|
event.preventDefault();
|
|
452
451
|
select(entry.slug);
|
data/assets/css/ledger/home.css
CHANGED
|
@@ -1321,10 +1321,6 @@ button.home-project-inventory-row {
|
|
|
1321
1321
|
display: none;
|
|
1322
1322
|
}
|
|
1323
1323
|
|
|
1324
|
-
.home-project-inventory-resources {
|
|
1325
|
-
display: none;
|
|
1326
|
-
}
|
|
1327
|
-
|
|
1328
1324
|
.home-project-inventory-glyph {
|
|
1329
1325
|
display: inline-flex;
|
|
1330
1326
|
align-items: center;
|
|
@@ -1367,23 +1363,20 @@ button.home-project-inventory-row {
|
|
|
1367
1363
|
|
|
1368
1364
|
@media (min-width: 900px) {
|
|
1369
1365
|
|
|
1370
|
-
/*
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
height for three stacked resource icons. */
|
|
1366
|
+
/* Specimen and inventory share equal columns (~45.6% each). Each row fits
|
|
1367
|
+
its square icon mark and two-line code + title body; the specimen height
|
|
1368
|
+
matches the N-entry inventory stack. */
|
|
1374
1369
|
.home-projects-bench {
|
|
1375
|
-
--home-inventory-
|
|
1376
|
-
--home-inventory-icon-gap: 0.2rem;
|
|
1377
|
-
--home-inventory-resources-height: calc(
|
|
1378
|
-
3 * var(--home-inventory-icon-size) + 2 * var(--home-inventory-icon-gap)
|
|
1379
|
-
);
|
|
1370
|
+
--home-inventory-mark-size: 2.75rem;
|
|
1380
1371
|
--home-inventory-row-min: calc(
|
|
1381
|
-
var(--home-inventory-
|
|
1372
|
+
var(--home-inventory-mark-size) + 2 * var(--space-sm) + 2px
|
|
1382
1373
|
);
|
|
1383
1374
|
--home-inventory-min-height: calc(
|
|
1384
|
-
|
|
1375
|
+
var(--home-project-icon-count, 6) * var(--home-inventory-row-min) +
|
|
1376
|
+
(var(--home-project-icon-count, 6) - 1) * var(--space-sm) +
|
|
1377
|
+
2 * var(--space-md)
|
|
1385
1378
|
);
|
|
1386
|
-
--home-specimen-height:
|
|
1379
|
+
--home-specimen-height: var(--home-inventory-min-height);
|
|
1387
1380
|
display: grid;
|
|
1388
1381
|
grid-template-columns: minmax(0, 45.6%) minmax(0, 45.6%);
|
|
1389
1382
|
column-gap: var(--space-xl);
|
|
@@ -1404,17 +1397,39 @@ button.home-project-inventory-row {
|
|
|
1404
1397
|
background: var(--color-panel-contrast);
|
|
1405
1398
|
}
|
|
1406
1399
|
|
|
1400
|
+
.home-specimen-figure:has(> .ledger-poster, > .projects-plate) {
|
|
1401
|
+
flex: 1 1 0;
|
|
1402
|
+
min-height: 0;
|
|
1403
|
+
grid-template-rows: minmax(0, 1fr) auto;
|
|
1404
|
+
gap: var(--space-sm);
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
.home-specimen-figure > .ledger-poster,
|
|
1408
|
+
.home-specimen-figure > .projects-plate {
|
|
1409
|
+
height: 100%;
|
|
1410
|
+
min-height: 0;
|
|
1411
|
+
aspect-ratio: auto;
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1407
1414
|
.home-project-specimen .home-specimen-title {
|
|
1408
1415
|
font-size: var(--type-title);
|
|
1409
1416
|
}
|
|
1410
1417
|
|
|
1418
|
+
.home-project-specimen .ledger-card-copy {
|
|
1419
|
+
flex: 0 0 auto;
|
|
1420
|
+
height: auto;
|
|
1421
|
+
min-height: 0;
|
|
1422
|
+
max-height: calc(var(--type-body) * var(--leading-body) * 2);
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1411
1425
|
.home-project-inventory-row {
|
|
1412
|
-
flex:
|
|
1413
|
-
align-items:
|
|
1426
|
+
flex: 0 0 auto;
|
|
1427
|
+
align-items: center;
|
|
1414
1428
|
justify-content: flex-start;
|
|
1415
1429
|
gap: var(--space-md);
|
|
1416
|
-
height:
|
|
1430
|
+
height: var(--home-inventory-row-min);
|
|
1417
1431
|
min-height: var(--home-inventory-row-min);
|
|
1432
|
+
box-sizing: border-box;
|
|
1418
1433
|
padding: var(--space-sm) var(--space-md);
|
|
1419
1434
|
border: 1px solid var(--border-gentle-divider);
|
|
1420
1435
|
background: var(--color-surface-card);
|
|
@@ -1433,15 +1448,13 @@ button.home-project-inventory-row {
|
|
|
1433
1448
|
box-shadow: inset 3px 0 0 var(--color-primary);
|
|
1434
1449
|
}
|
|
1435
1450
|
|
|
1436
|
-
/*
|
|
1437
|
-
it tall while title/copy/icons stay top-aligned with its top edge. */
|
|
1451
|
+
/* Square icon mark beside the two-line code + title body. */
|
|
1438
1452
|
.home-project-inventory-media {
|
|
1439
1453
|
display: block;
|
|
1440
1454
|
flex: 0 0 auto;
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
aspect-ratio: 16 / 9;
|
|
1455
|
+
width: var(--home-inventory-mark-size);
|
|
1456
|
+
height: var(--home-inventory-mark-size);
|
|
1457
|
+
aspect-ratio: 1 / 1;
|
|
1445
1458
|
overflow: hidden;
|
|
1446
1459
|
background: var(--color-surface-high);
|
|
1447
1460
|
}
|
|
@@ -1451,33 +1464,25 @@ button.home-project-inventory-row {
|
|
|
1451
1464
|
outline-offset: 2px;
|
|
1452
1465
|
}
|
|
1453
1466
|
|
|
1454
|
-
.home-project-inventory-media .ledger-poster,
|
|
1455
1467
|
.home-project-inventory-mark {
|
|
1468
|
+
display: flex;
|
|
1469
|
+
align-items: center;
|
|
1470
|
+
justify-content: center;
|
|
1456
1471
|
width: 100%;
|
|
1457
1472
|
height: 100%;
|
|
1458
1473
|
aspect-ratio: auto;
|
|
1459
1474
|
overflow: hidden;
|
|
1460
1475
|
background: var(--color-surface-high);
|
|
1461
|
-
}
|
|
1462
|
-
|
|
1463
|
-
.home-project-inventory-media .ledger-poster::after {
|
|
1464
|
-
display: none;
|
|
1465
|
-
}
|
|
1466
|
-
|
|
1467
|
-
.home-project-inventory-mark {
|
|
1468
|
-
display: flex;
|
|
1469
|
-
align-items: center;
|
|
1470
|
-
justify-content: center;
|
|
1471
1476
|
color: var(--color-primary);
|
|
1472
1477
|
}
|
|
1473
1478
|
|
|
1474
1479
|
.home-project-inventory-mark .material-symbols-outlined {
|
|
1475
|
-
font-size:
|
|
1480
|
+
font-size: 1.5rem;
|
|
1476
1481
|
}
|
|
1477
1482
|
|
|
1478
1483
|
.home-project-inventory-mark--initial {
|
|
1479
1484
|
font-family: var(--font-content-title);
|
|
1480
|
-
font-size: var(--type-card
|
|
1485
|
+
font-size: var(--type-card);
|
|
1481
1486
|
font-weight: var(--weight-title);
|
|
1482
1487
|
line-height: 1;
|
|
1483
1488
|
color: var(--color-on-surface);
|
|
@@ -1486,53 +1491,20 @@ button.home-project-inventory-row {
|
|
|
1486
1491
|
.home-project-inventory-body {
|
|
1487
1492
|
display: flex;
|
|
1488
1493
|
flex-direction: column;
|
|
1489
|
-
justify-content:
|
|
1490
|
-
align-self:
|
|
1491
|
-
gap: 0.
|
|
1494
|
+
justify-content: center;
|
|
1495
|
+
align-self: center;
|
|
1496
|
+
gap: 0.15rem;
|
|
1492
1497
|
flex: 1 1 0;
|
|
1493
1498
|
min-width: 0;
|
|
1494
1499
|
padding-top: 0;
|
|
1495
1500
|
}
|
|
1496
1501
|
|
|
1497
|
-
.home-project-inventory-resources {
|
|
1498
|
-
display: flex;
|
|
1499
|
-
flex-direction: column;
|
|
1500
|
-
justify-content: flex-start;
|
|
1501
|
-
align-items: center;
|
|
1502
|
-
align-self: flex-start;
|
|
1503
|
-
flex: 0 0 auto;
|
|
1504
|
-
gap: var(--home-inventory-icon-gap);
|
|
1505
|
-
width: var(--home-inventory-icon-size);
|
|
1506
|
-
min-height: var(--home-inventory-resources-height);
|
|
1507
|
-
position: relative;
|
|
1508
|
-
z-index: 1;
|
|
1509
|
-
}
|
|
1510
|
-
|
|
1511
|
-
/* Neutral marks — same voice as list descriptions, not primary CTAs. */
|
|
1512
|
-
.home-project-inventory-resource {
|
|
1513
|
-
display: inline-flex;
|
|
1514
|
-
align-items: center;
|
|
1515
|
-
justify-content: center;
|
|
1516
|
-
width: var(--home-inventory-icon-size);
|
|
1517
|
-
height: var(--home-inventory-icon-size);
|
|
1518
|
-
flex: 0 0 auto;
|
|
1519
|
-
background: transparent;
|
|
1520
|
-
color: var(--color-on-surface-variant);
|
|
1521
|
-
border: 0;
|
|
1522
|
-
}
|
|
1523
|
-
|
|
1524
|
-
.home-project-inventory-resource .material-symbols-outlined {
|
|
1525
|
-
font-size: 1rem;
|
|
1526
|
-
line-height: 1;
|
|
1527
|
-
font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 20;
|
|
1528
|
-
}
|
|
1529
|
-
|
|
1530
1502
|
.home-project-inventory-code .ledger-meta {
|
|
1531
1503
|
font-size: var(--type-label-lg);
|
|
1532
1504
|
}
|
|
1533
1505
|
|
|
1534
1506
|
.home-project-inventory-title {
|
|
1535
|
-
margin: 0
|
|
1507
|
+
margin: 0;
|
|
1536
1508
|
font-family: var(--font-content-title);
|
|
1537
1509
|
font-size: calc(var(--type-card) - 2pt);
|
|
1538
1510
|
font-weight: var(--weight-title);
|
|
@@ -1549,17 +1521,6 @@ button.home-project-inventory-row {
|
|
|
1549
1521
|
color: var(--color-primary);
|
|
1550
1522
|
}
|
|
1551
1523
|
|
|
1552
|
-
.home-project-inventory-copy {
|
|
1553
|
-
margin: 0;
|
|
1554
|
-
font-size: var(--type-label-lg);
|
|
1555
|
-
font-weight: var(--weight-body);
|
|
1556
|
-
line-height: 1.35;
|
|
1557
|
-
color: var(--color-on-surface-variant);
|
|
1558
|
-
overflow: hidden;
|
|
1559
|
-
text-overflow: ellipsis;
|
|
1560
|
-
white-space: nowrap;
|
|
1561
|
-
}
|
|
1562
|
-
|
|
1563
1524
|
/* Two classes: the glyph also carries .material-symbols-outlined, whose
|
|
1564
1525
|
font stylesheet loads after this one and sets display. */
|
|
1565
1526
|
.home-project-inventory-row .home-project-inventory-glyph {
|
|
@@ -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.10.
|
|
27
|
+
# GitHub tag: gem "pandorga", github: "alexandrelheinen/pandorga", tag: "v1.10.2"
|
|
28
28
|
gem "csv"
|
|
29
29
|
gem "base64"
|
|
30
30
|
RUBY
|
data/lib/pandorga/version.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "project-inventory-row/rack card (PLT-AC-
|
|
2
|
+
"name": "project-inventory-row/rack card (PLT-AC-41)",
|
|
3
3
|
"block": "renderProjectInventoryRow",
|
|
4
4
|
"args": [
|
|
5
5
|
{
|
|
@@ -25,28 +25,25 @@
|
|
|
25
25
|
"selectors": [
|
|
26
26
|
"button.home-project-inventory-row",
|
|
27
27
|
"div.home-project-inventory-media",
|
|
28
|
-
"div.
|
|
28
|
+
"div.home-project-inventory-mark",
|
|
29
29
|
"div.home-project-inventory-code",
|
|
30
30
|
"span.home-project-inventory-index",
|
|
31
31
|
"h3.home-project-inventory-title",
|
|
32
|
-
"
|
|
33
|
-
"span.home-project-inventory-glyph",
|
|
34
|
-
"div.home-project-inventory-resources",
|
|
35
|
-
"span.home-project-inventory-resource"
|
|
32
|
+
"span.home-project-inventory-glyph"
|
|
36
33
|
],
|
|
37
34
|
"forbidden": [
|
|
38
35
|
"ledger-card-stretch",
|
|
39
|
-
"role=\"button\""
|
|
36
|
+
"role=\"button\"",
|
|
37
|
+
"ledger-poster",
|
|
38
|
+
"home-project-inventory-copy",
|
|
39
|
+
"home-project-inventory-resources",
|
|
40
|
+
"home-project-inventory-resource"
|
|
40
41
|
],
|
|
41
42
|
"contains": [
|
|
42
43
|
">02<",
|
|
43
44
|
">Simulation<",
|
|
44
45
|
">ARCO<",
|
|
45
|
-
">A city-scale race replayed from telemetry.<",
|
|
46
46
|
">route<",
|
|
47
|
-
">code<",
|
|
48
|
-
">article<",
|
|
49
|
-
">public<",
|
|
50
47
|
"aria-pressed=\"false\"",
|
|
51
48
|
"data-slug=\"arco\""
|
|
52
49
|
]
|
|
@@ -226,6 +226,28 @@ sheets.each do |path|
|
|
|
226
226
|
end
|
|
227
227
|
end
|
|
228
228
|
|
|
229
|
+
# PLT-AC-41. Home project inventory rows use the square icon mark, two-line
|
|
230
|
+
# code + title body, and no tagline preview or attached-resource icons; the
|
|
231
|
+
# desktop specimen height matches the N-entry inventory height.
|
|
232
|
+
home_sheet = strip_comments(File.read(CSS_ROOT.join("ledger/home.css")))
|
|
233
|
+
%w[
|
|
234
|
+
home-project-inventory-copy
|
|
235
|
+
home-project-inventory-resources
|
|
236
|
+
home-project-inventory-resource
|
|
237
|
+
].each do |retired_home|
|
|
238
|
+
if home_sheet.match?(/[.#]#{Regexp.escape(retired_home)}\b/)
|
|
239
|
+
errors << "assets/css/ledger/home.css: .#{retired_home} must be removed (PLT-AC-41)"
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
require_declarations(
|
|
243
|
+
errors, "assets/css/ledger/home.css", home_sheet,
|
|
244
|
+
".home-project-inventory-media", ["aspect-ratio: 1 / 1"]
|
|
245
|
+
)
|
|
246
|
+
require_declarations(
|
|
247
|
+
errors, "assets/css/ledger/home.css", home_sheet,
|
|
248
|
+
".home-projects-bench", ["--home-specimen-height: var(--home-inventory-min-height)"]
|
|
249
|
+
)
|
|
250
|
+
|
|
229
251
|
fail!("CSS structure problems:\n - #{errors.join("\n - ")}") unless errors.empty?
|
|
230
252
|
|
|
231
253
|
puts " #{sheets.size} stylesheet(s) balanced, no conflict markers."
|