Performance / self-hosting - Remove the render-blocking Bootstrap 4 CDN stylesheet (~160 KB + extra DNS/TLS to a third party) and replace it with ~60 lines of self-hosted grid/utility CSS covering the small subset actually used (container, row, col-lg-5/6/7, order-lg, align-items-center, text-center, table-responsive, spacing, and the button base). Verified across desktop/tablet/mobile. - Add a Cloudflare Pages `_headers` file: 30-day cache for static media and icons, 1-day for css/js, plus baseline security headers (X-Content-Type-Options, Referrer-Policy). - Add decoding="async" to all lazily-loaded images. The site now loads no third-party CSS; only Google Fonts remain external. SCSS source kept in sync (new components/_grid partial; button base + reset mirrored in main.scss). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
114 lines
1.9 KiB
SCSS
114 lines
1.9 KiB
SCSS
// colors
|
|
$gold: #AB996D;
|
|
$white: #ffffff;
|
|
$gray: #585858;
|
|
$light-gray: #bebebe;
|
|
$black: #231F20;
|
|
$cream: #F7F4EE;
|
|
|
|
// breakpoints
|
|
$xs-break: 575px;
|
|
$s-break: 767px;
|
|
$m-break: 991px;
|
|
$l-break: 1199px;
|
|
|
|
// fonts
|
|
@mixin Libre {
|
|
font-family: 'Libre Baskerville', serif;
|
|
}
|
|
@mixin Lato {
|
|
font-family: 'Lato', sans-serif;
|
|
}
|
|
|
|
* { box-sizing: border-box; }
|
|
|
|
@import 'components/grid';
|
|
|
|
//btns
|
|
.btn {
|
|
@include Libre;
|
|
display: inline-block;
|
|
vertical-align: middle;
|
|
text-align: center;
|
|
border: 1px solid transparent;
|
|
line-height: 1.5;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
user-select: none;
|
|
font-size: 14px;
|
|
letter-spacing: 0.3px;
|
|
padding: 0.55rem 1.5rem;
|
|
border-radius: 2px;
|
|
|
|
& + .btn { margin-left: 0.5rem; }
|
|
}
|
|
|
|
.btn-light {
|
|
color: #212529;
|
|
background-color: #f8f9fa;
|
|
border-color: #f8f9fa;
|
|
}
|
|
|
|
.btn-primary {
|
|
color: $white;
|
|
background-color: $gold;
|
|
border-color: $gold;
|
|
|
|
&:hover { color: $white; }
|
|
|
|
&:hover {
|
|
background-color: darken($gold, 10%);
|
|
border-color: darken($gold, 10%);
|
|
}
|
|
|
|
&:active,
|
|
&:focus,
|
|
&:not(:disabled):not(.disabled):active,
|
|
&:not(:disabled):not(.disabled):active:focus {
|
|
background-color: darken($gold, 15%);
|
|
border-color: darken($gold, 15%);
|
|
box-shadow: 0 0 0 0.2rem rgba(129, 113, 74, .5);
|
|
}
|
|
}
|
|
|
|
body {
|
|
@include Lato;
|
|
|
|
background-color: $white;
|
|
color: $black;
|
|
margin: 0;
|
|
overflow-x: hidden;
|
|
line-height: 1.65;
|
|
}
|
|
|
|
// Enable native smooth-scrolling for in-page anchor navigation
|
|
html {
|
|
scroll-behavior: smooth;
|
|
}
|
|
|
|
p, a, li, span, div, td, th {
|
|
@include Lato;
|
|
}
|
|
|
|
h1, h2, h3, h4, h5, h6 {
|
|
@include Libre;
|
|
margin-top: 0;
|
|
}
|
|
|
|
p { margin-top: 0; margin-bottom: 1rem; }
|
|
|
|
img { max-width: 100%; vertical-align: middle; }
|
|
|
|
.page-content {
|
|
padding-top: 92px;
|
|
|
|
@media (max-width: $m-break) { padding-top: 72px; }
|
|
}
|
|
|
|
@import 'components/nav';
|
|
@import 'components/hero';
|
|
@import 'components/sections';
|
|
@import 'components/gallery';
|
|
@import 'components/board';
|
|
@import 'components/features';
|