457 lines
12 KiB
HTML
457 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>SVS {{.Occupation}}</title>
|
|
<style>
|
|
:root {
|
|
--ink: #0f172a;
|
|
--muted: #5c677d;
|
|
--bg: #f5f7fb;
|
|
--panel: #ffffff;
|
|
--accent: #1d4ed8;
|
|
--accent-2: #9333ea;
|
|
--radius: 14px;
|
|
--shadow: 0 15px 50px rgba(15, 23, 42, 0.07);
|
|
--max-width: 1080px;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
scroll-behavior: smooth;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
background: var(--bg);
|
|
color: var(--ink);
|
|
line-height: 1.6;
|
|
}
|
|
|
|
a {
|
|
color: var(--accent);
|
|
text-decoration: none;
|
|
}
|
|
|
|
a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.container {
|
|
width: 100%;
|
|
max-width: var(--max-width);
|
|
margin: 0 auto;
|
|
padding: 0 20px;
|
|
}
|
|
|
|
header {
|
|
background: linear-gradient(135deg, var(--accent), var(--accent-2));
|
|
color: #fff;
|
|
padding: 90px 0 80px;
|
|
text-align: center;
|
|
}
|
|
|
|
header h1 {
|
|
margin: 0;
|
|
font-size: clamp(2.2rem, 5vw, 5rem);
|
|
letter-spacing: 0.5px;
|
|
}
|
|
|
|
header h2 {
|
|
margin: 0 0 10px;
|
|
font-size: clamp(2.2rem, 3vw, 3rem);
|
|
font-weight: 600;
|
|
}
|
|
|
|
header p {
|
|
max-width: 680px;
|
|
margin: 0 auto;
|
|
color: rgba(255, 255, 255, 0.9);
|
|
}
|
|
|
|
.pill-button {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
padding: 14px 20px;
|
|
margin-top: 24px;
|
|
background: #fff;
|
|
color: var(--accent);
|
|
border-radius: 999px;
|
|
border: none;
|
|
font-weight: 600;
|
|
box-shadow: var(--shadow);
|
|
cursor: pointer;
|
|
transition: transform 150ms ease, box-shadow 150ms ease;
|
|
}
|
|
|
|
.pill-button:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 18px 55px rgba(15, 23, 42, 0.14);
|
|
text-decoration: none;
|
|
}
|
|
|
|
section {
|
|
padding: 70px 0;
|
|
}
|
|
|
|
section h2 {
|
|
text-align: center;
|
|
margin: 0 0 20px;
|
|
font-size: 1.9rem;
|
|
}
|
|
|
|
.muted {
|
|
color: var(--muted);
|
|
}
|
|
|
|
.section-lead {
|
|
text-align: center;
|
|
margin: 0 auto;
|
|
max-width: 700px;
|
|
}
|
|
|
|
#what-we-do {
|
|
background: #eef2ff;
|
|
}
|
|
|
|
#what-we-do .content {
|
|
background: var(--panel);
|
|
padding: 28px;
|
|
border-radius: var(--radius);
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.about-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
gap: 26px;
|
|
margin-top: 34px;
|
|
}
|
|
|
|
.profile-card {
|
|
background: var(--panel);
|
|
border-radius: var(--radius);
|
|
padding: 24px;
|
|
text-align: center;
|
|
box-shadow: var(--shadow);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 14px;
|
|
}
|
|
|
|
.profile-card img {
|
|
border-radius: 50%;
|
|
width: 140px;
|
|
height: 140px;
|
|
object-fit: cover;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.profile-card h4 {
|
|
margin: 6px 0 0;
|
|
font-size: 1.1rem;
|
|
}
|
|
|
|
.profile-card .cta {
|
|
margin-top: auto;
|
|
display: inline-flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
padding: 12px 16px;
|
|
background: linear-gradient(135deg, var(--accent), var(--accent-2));
|
|
color: #fff;
|
|
border-radius: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.profile-card .cta:hover {
|
|
text-decoration: none;
|
|
filter: brightness(1.03);
|
|
}
|
|
|
|
#testimonials {
|
|
background: var(--panel);
|
|
}
|
|
|
|
.testimonial-shell {
|
|
max-width: 760px;
|
|
margin: 0 auto;
|
|
position: relative;
|
|
}
|
|
|
|
.slides {
|
|
position: relative;
|
|
overflow: hidden;
|
|
min-height: 200px;
|
|
}
|
|
|
|
@property --auto {
|
|
syntax: '<number>';
|
|
inherits: false;
|
|
initial-value: 0;
|
|
}
|
|
|
|
.slides-track {
|
|
display: flex;
|
|
width: calc(100% * var(--count));
|
|
transform: translateX(calc(-33.3333% * var(--current, 0)));
|
|
transition: transform 320ms ease;
|
|
animation: auto-pan calc(var(--count) * 6s) infinite linear;
|
|
}
|
|
|
|
.slide-toggle {
|
|
display: none;
|
|
}
|
|
|
|
.slide {
|
|
flex: 0 0 calc(100% / var(--count));
|
|
padding: 16px;
|
|
text-align: center;
|
|
}
|
|
|
|
.slide p {
|
|
font-size: 1.05rem;
|
|
font-style: italic;
|
|
margin-bottom: 14px;
|
|
}
|
|
|
|
.controls {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
gap: 12px;
|
|
margin-top: 20px;
|
|
}
|
|
|
|
.control-dot {
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 50%;
|
|
border: 1px solid #c7cedc;
|
|
background: #fff;
|
|
cursor: pointer;
|
|
transition: transform 150ms ease, background 150ms ease, border-color 150ms ease;
|
|
}
|
|
|
|
.control-dot:hover {
|
|
transform: scale(1.1);
|
|
background: #eef2ff;
|
|
}
|
|
|
|
.slides:has(.slide-toggle:checked) .slides-track {
|
|
animation-play-state: paused;
|
|
}
|
|
|
|
.control-arrow {
|
|
width: 42px;
|
|
height: 42px;
|
|
border-radius: 50%;
|
|
border: 1px solid #d5d9e2;
|
|
background: #fff;
|
|
color: var(--ink);
|
|
display: grid;
|
|
place-items: center;
|
|
cursor: pointer;
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.control-arrow:hover {
|
|
background: #eef2ff;
|
|
}
|
|
|
|
.arrow-sets {
|
|
position: absolute;
|
|
inset: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.arrow-set {
|
|
display: none;
|
|
position: absolute;
|
|
inset: 0;
|
|
padding: 0 8px;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.arrow-set:first-of-type {
|
|
display: flex;
|
|
}
|
|
|
|
@keyframes auto-pan {
|
|
0% {
|
|
--auto: 0;
|
|
}
|
|
100% {
|
|
--auto: calc(var(--count) - 1);
|
|
}
|
|
}
|
|
|
|
/* Active state wiring via :has so dots/arrows track selection. */
|
|
.slides {
|
|
--current: var(--auto);
|
|
}
|
|
|
|
/* Default to first dot when nothing is picked. */
|
|
.controls .control-dot:first-of-type {
|
|
background: #eef2ff;
|
|
border-color: #c7cedc;
|
|
}
|
|
|
|
.arrow-set .control-arrow {
|
|
pointer-events: auto;
|
|
}
|
|
|
|
{{- range $index, $_ := .Testimonials }}
|
|
.slides:has(#t-{{$index}}:checked) {
|
|
--current: {{$index}};
|
|
}
|
|
|
|
.slides:has(#t-{{$index}}:checked) .controls .control-dot[for="t-{{$index}}"] {
|
|
background: var(--accent);
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
.slides:has(#t-{{$index}}:checked) .arrow-set.arrows-{{$index}} {
|
|
display: flex;
|
|
}
|
|
{{- end }}
|
|
|
|
footer {
|
|
background: #0b1224;
|
|
color: #f1f5f9;
|
|
padding: 40px 0;
|
|
}
|
|
|
|
footer a {
|
|
color: #cbd5e1;
|
|
}
|
|
|
|
footer a:hover {
|
|
color: #fff;
|
|
}
|
|
|
|
footer .footer-inner {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 18px;
|
|
}
|
|
|
|
@media (min-width: 768px) {
|
|
footer .footer-inner {
|
|
flex-direction: row;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<!-- Header -->
|
|
<header>
|
|
<div class="container">
|
|
<h1>SVS Industries</h1>
|
|
<h2>{{.Occupation}}</h2>
|
|
<p>{{.Tagline}}</p>
|
|
<a href="#about" class="pill-button">Meet Our Team</a>
|
|
</div>
|
|
</header>
|
|
|
|
<section id="what-we-do">
|
|
<div class="container">
|
|
<h2>What We Do</h2>
|
|
<div class="content">
|
|
{{.WhatWeDo}}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="about">
|
|
<div class="container">
|
|
<h2>About Us</h2>
|
|
<p class="muted section-lead">Three builders, one vision: ship reliable, human-centered software and services.</p>
|
|
<div class="about-grid">
|
|
<div class="profile-card">
|
|
<img src="headshots/chandlerswift.jpg"
|
|
alt="Chandler Swift">
|
|
<h4>Chandler <b>Swift</b></h4>
|
|
<div class="muted">{{.ChandlerBio}}</div>
|
|
<a class="cta" href="https://chandlerswift.com/">chandlerswift.com</a>
|
|
</div>
|
|
<div class="profile-card">
|
|
<img src="headshots/ericvillnow.jpg"
|
|
alt="Eric Villnow">
|
|
<h4>Eric <b>Villnow</b></h4>
|
|
<div class="muted">{{.EricBio}}</div>
|
|
<a class="cta" href="https://vill.now/">vill.now</a>
|
|
</div>
|
|
<div class="profile-card">
|
|
<img src="headshots/isaacswift.jpg" alt="Isaac Swift">
|
|
<h4>Isaac <b>Swift</b></h4>
|
|
<div class="muted">{{.IsaacBio}}</div>
|
|
<a class="cta" href="https://isaacswift.com/">isaacswift.com</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="testimonials">
|
|
<div class="container">
|
|
<h2>What Our Clients Say</h2>
|
|
{{- $count := len .Testimonials -}}
|
|
<div class="testimonial-shell">
|
|
<div class="slides" style="--count: {{$count}};">
|
|
<div class="slides-track">
|
|
{{range $index, $testimonial := .Testimonials}}
|
|
<input type="radio" name="testimonial" id="t-{{$index}}" class="slide-toggle" {{if eq $index 0}}checked{{end}}>
|
|
<div class="slide">
|
|
<p>"{{$testimonial.Quote}}"</p>
|
|
<strong>— {{$testimonial.Name}}, {{$testimonial.Position}}</strong>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
<div class="arrow-sets">
|
|
{{range $index, $_ := .Testimonials}}
|
|
{{- $prev := mod (add $index (sub $count 1)) $count -}}
|
|
{{- $next := mod (add $index 1) $count -}}
|
|
<div class="arrow-set arrows-{{$index}}">
|
|
<label class="control-arrow" for="t-{{$prev}}" aria-label="Previous testimonial">←</label>
|
|
<label class="control-arrow" for="t-{{$next}}" aria-label="Next testimonial">→</label>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
<div class="controls">
|
|
{{range $index, $_ := .Testimonials}}
|
|
<label class="control-dot" for="t-{{$index}}" aria-label="Show testimonial {{$index}}"></label>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<footer>
|
|
<div class="container footer-inner">
|
|
<p>
|
|
<b>Swift, Villnow & Swift Industries</b><br>
|
|
{{.Occupation}} Division<br>
|
|
<a href="tel:2182105180">(218) 210-5180</a><br>
|
|
<a href="mailto:sales@svsindustries.org">sales@svsindustries.org</a>
|
|
</p>
|
|
<p>© {{.CurrentYear}} Swift, Villnow & Swift Industries<br>All rights reserved.</p>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
|
|
</html>
|