1212 <!-- Auto collage from assets/img -->
1313 < div class ="hero-collage " aria-hidden ="true ">
1414 {% assign imgs = site.static_files | where_exp: "f", "f.path contains '/assets/img/'" %}
15- {% assign imgs = imgs | where_exp: "f", "f.path contains '.JPG' or f.path contains '.JPEG'" %}
15+ {% assign imgs = imgs | where_exp: "f", "f.path contains '.JPG' or f.path contains '.JPEG' or f.path contains '.PNG' or f.path contains '.WEBP' " %}
1616 {% for img in imgs %}
1717 < div class ="hero-tile " style ="background-image: url('{{ img.path | relative_url }}'); "> </ div >
1818 {% endfor %}
1919 </ div >
2020 < div class ="container ">
21- < h1 class ="jost-heavy mb-2 text-light "> Model Railroading News, Photography, & Product Design Services</ h1 >
22- < p class ="hero-sub text mb-3 ">
23- Production-ready design and 3D solutions for serious modelers and manufacturers.
24- </ p >
25-
21+ < h1 class ="jost-heavy mb-2 text-light "> Model Railroading News, Photos, and Custom Design Services</ h1 >
22+ < p class ="hero-sub text mb-3 "> Production-ready design and 3D solutions for serious modelers and manufacturers.</ p >
2623 < div class ="d-flex flex-wrap gap-2 ">
2724 < a class ="btn btn-primary " href ="#news "> Latest News</ a >
2825 < a class ="btn btn-outline-light " href ="#services "> Book a Consultation</ a >
@@ -34,22 +31,18 @@ <h1 class="jost-heavy mb-2 text-light">Model Railroading News, Photography, & Pr
3431 < section id ="news " class ="container justify-content-center text-center pb-5 ">
3532 < h2 class ="jost-heavy text-light py-4 "> Latest News</ h2 >
3633 < div class ="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 pb-4 justify-content-center ">
37- {% assign news_posts = site.posts | where_exp: "post","post.categories contains 'news'" %}
34+ {% assign news_posts = site.posts | where_exp: "post", "post.categories contains 'news'" %}
3835 {% for post in news_posts %}
3936 < div class ="col ">
4037 < div class ="card h-100 m-3 post-preview ">
41- {% if post.image %}
42- < img src ="{{ site.baseurl }}{{ post.image }} " class ="card-img-top " alt ="{{ post.title }} ">
43- {% endif %}
38+ {% if post.image %}< img src ="{{ site.baseurl }}{{ post.image }} " class ="card-img-top " alt ="{{ post.title }} "> {% endif %}
4439 < div class ="card-body d-flex flex-column text-start ">
40+ < div class ="text-muted small mb-2 "> {{ post.date | date: "%b %d, %Y" }}</ div >
4541 < h5 class ="card-title "> {{ post.title }}</ h5 >
46- < div class ="text-muted small "> {{ post.date | date: "%b %d, %Y" }}</ div >
4742 {% if post.description %}< p class ="card-text text-muted "> {{ post.description }}</ p > {% endif %}
4843 {% if post.tags and post.tags.size > 0 %}
49- < div class ="tag-list mt-1 ">
50- {% for tag in post.tags %}
51- < span class ="tag-badge "> #{{ tag }}</ span >
52- {% endfor %}
44+ < div class ="tag-list mt-2 ">
45+ {% for tag in post.tags %}< span class ="tag-badge "> #{{ tag }}</ span > {% endfor %}
5346 </ div >
5447 {% endif %}
5548 < a href ="{{ post.url }} " class ="btn btn-primary mt-auto text-center "> Read More</ a >
@@ -64,21 +57,17 @@ <h5 class="card-title">{{ post.title }}</h5>
6457 < section id ="projects " class ="container justify-content-center text-center pb-5 ">
6558 < h2 class ="jost-heavy text-light py-4 "> Projects</ h2 >
6659 < div class ="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 pb-4 justify-content-center ">
67- {% assign project_posts = site.posts | where_exp: "post","post.categories contains 'project'" %}
60+ {% assign project_posts = site.posts | where_exp: "post", "post.categories contains 'project'" %}
6861 {% for post in project_posts %}
6962 < div class ="col ">
7063 < div class ="card h-100 m-3 post-preview ">
71- {% if post.image %}
72- < img src ="{{ site.baseurl }}{{ post.image }} " class ="card-img-top " alt ="{{ post.title }} ">
73- {% endif %}
64+ {% if post.image %}< img src ="{{ site.baseurl }}{{ post.image }} " class ="card-img-top " alt ="{{ post.title }} "> {% endif %}
7465 < div class ="card-body d-flex flex-column text-start ">
7566 < h5 class ="card-title "> {{ post.title }}</ h5 >
7667 {% if post.description %}< p class ="card-text text-muted "> {{ post.description }}</ p > {% endif %}
7768 {% if post.tags and post.tags.size > 0 %}
78- < div class ="tag-list mt-1 ">
79- {% for tag in post.tags %}
80- < span class ="tag-badge "> #{{ tag }}</ span >
81- {% endfor %}
69+ < div class ="tag-list mt-2 ">
70+ {% for tag in post.tags %}< span class ="tag-badge "> #{{ tag }}</ span > {% endfor %}
8271 </ div >
8372 {% endif %}
8473 < a href ="{{ post.url }} " class ="btn btn-primary mt-auto text-center "> View Project</ a >
@@ -92,28 +81,27 @@ <h5 class="card-title">{{ post.title }}</h5>
9281 <!-- Services -->
9382 < section id ="services " class ="container pb-5 ">
9483 < h2 class ="jost-heavy text-light text-center py-4 "> Design Services</ h2 >
95- < div class ="card p-4 col-md-6 mx-auto text-center text-light ">
96- < h3 class ="jost-heavy mb-2 "> Have a project in mind?</ h3 >
97- < p class ="text-muted mb-3 "> Let’s build a prototype, refine a product line, or refresh your brand.</ p >
98- < a class ="btn btn-primary " href ="mailto:sales@uncommonmodels.com "> Email sales@uncommonmodels.com</ a >
84+ < div class ="row row-cols-1 row-cols-md-3 g-4 justify-content-center ">
85+ < div class ="col col-md-3 ">
86+ < div class ="card h-100 p-3 ">
87+ < h4 class ="jost-medium text-light "> Production-Oriented Design</ h4 >
88+ < p class ="text-muted "> CAD for injection molding, resin, or 3D-print batches with manufacturer-ready files.</ p >
89+ < a href ="mailto:sales@uncommonmodels.com " class ="btn btn-primary mt-auto "> Book a Call</ a >
90+ </ div >
91+ </ div >
9992 </ div >
10093 </ section >
10194
102- <!-- Shuffle collage tiles and keep a random 12 -->
10395 < script >
104- // filepath: /home/npaladin/git/UncommonModels.github.io/index.html
10596 document . addEventListener ( 'DOMContentLoaded' , function ( ) {
10697 const collage = document . querySelector ( '.hero-collage' ) ;
10798 if ( ! collage ) return ;
10899 const tiles = Array . from ( collage . children ) ;
109100 if ( tiles . length === 0 ) return ;
110-
111- // Fisher–Yates shuffle
112101 for ( let i = tiles . length - 1 ; i > 0 ; i -- ) {
113102 const j = Math . floor ( Math . random ( ) * ( i + 1 ) ) ;
114103 [ tiles [ i ] , tiles [ j ] ] = [ tiles [ j ] , tiles [ i ] ] ;
115104 }
116-
117105 const maxTiles = 12 ;
118106 collage . innerHTML = '' ;
119107 tiles . slice ( 0 , Math . min ( maxTiles , tiles . length ) ) . forEach ( t => collage . appendChild ( t ) ) ;
0 commit comments