:root {
--gruff-green: #14C546;
--gruff-green-dark: #0ea838;
--gruff-dark: #111827;
--gruff-muted: #6B7280;
--gruff-surface: #F3F4F6;
--gruff-border: #E5E7EB;
--gruff-radius-sm: 0.5rem;
--gruff-radius-md: 0.75rem;
--gruff-radius-lg: 1rem;
--gruff-radius-xl: 1.5rem;
--gruff-radius-full: 9999px;
--gruff-shadow-sm: 0 1px 2px 0 rgba(0,0,0,0.05);
--gruff-shadow-md: 0 4px 6px -1px rgba(0,0,0,0.05), 0 2px 4px -1px rgba(0,0,0,0.03);
--gruff-shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.08), 0 4px 6px -2px rgba(0,0,0,0.04);
--gruff-shadow-cta: 0 10px 15px -3px rgba(20,197,70,0.3);
--gruff-transition: 200ms ease;
} .gruff-header {
position: sticky;
top: 0;
z-index: 50;
background: rgba(255,255,255,0.8);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid var(--gruff-border);
transition: background var(--gruff-transition);
}
.gruff-header__inner {
max-width: 1280px;
margin: 0 auto;
padding-left: 1rem;
padding-right: 1rem;
min-height: 5rem;
}
@media (min-width: 640px) {
.gruff-header__inner {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
}
@media (min-width: 1024px) {
.gruff-header__inner {
padding-left: 2rem;
padding-right: 2rem;
}
} .gruff-logo {
display: flex;
align-items: center;
gap: 0.5rem;
text-decoration: none;
color: inherit;
}
.gruff-logo__g {
color: var(--gruff-green);
font-weight: 700;
font-size: 1.875rem;
line-height: 1;
letter-spacing: -0.025em;
}
.gruff-logo__text {
display: flex;
flex-direction: column;
line-height: 1;
}
.gruff-logo__name {
font-weight: 700;
font-size: 1.25rem;
letter-spacing: -0.025em;
color: var(--gruff-dark);
}
.gruff-logo__sub {
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.05em;
color: var(--gruff-muted);
} .gruff-header .wp-block-navigation-item a {
font-weight: 500;
transition: color var(--gruff-transition);
border-bottom: 2px solid transparent;
padding-bottom: 0.25rem;
}
.gruff-header .wp-block-navigation-item a:hover {
color: var(--gruff-green) !important;
border-bottom-color: var(--gruff-green);
}
.gruff-header .wp-block-navigation-item.current-menu-item a {
color: var(--gruff-green) !important;
border-bottom-color: var(--gruff-green);
} .gruff-lang-switcher {
display: flex;
align-items: center;
gap: 2px;
background: var(--gruff-surface);
border-radius: var(--gruff-radius-full);
padding: 3px;
}
.gruff-lang-switcher__item {
padding: 0.2rem 0.45rem;
font-size: 0.7rem;
font-weight: 500;
color: var(--gruff-muted);
text-decoration: none;
border-radius: var(--gruff-radius-full);
transition: color var(--gruff-transition), background var(--gruff-transition);
line-height: 1.4;
letter-spacing: 0.02em;
}
.gruff-lang-switcher__item:hover {
color: var(--gruff-dark);
background: rgba(0,0,0,0.04);
}
.gruff-lang-switcher__item--active {
background: #fff;
color: var(--gruff-dark);
font-weight: 600;
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
} .wpml-ls-statics-footer,
.wpml-ls-legacy-list-horizontal,
#lang_sel_footer,
footer .wpml-ls,
.gruff-footer .wpml-ls {
display: none !important;
} .gruff-bento-grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 1.5rem;
}
@media (max-width: 767px) {
.gruff-bento-grid {
grid-template-columns: 1fr;
}
}
.gruff-bento-grid > * {
grid-column: span 12;
}
@media (min-width: 768px) {
.gruff-bento-grid > .col-span-4 { grid-column: span 4; }
.gruff-bento-grid > .col-span-6 { grid-column: span 6; }
.gruff-bento-grid > .col-span-8 { grid-column: span 8; }
}
.gruff-bento-item {
background: #fff;
border-radius: var(--gruff-radius-xl);
padding: 2rem;
box-shadow: var(--gruff-shadow-sm);
border: 1px solid var(--gruff-border);
}
.gruff-bento-item--dark {
background: #111827;
color: #fff;
border-color: transparent;
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.gruff-bento-item--image {
padding: 0;
overflow: hidden;
position: relative;
min-height: 300px;
}
.gruff-bento-item--image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 700ms ease;
}
.gruff-bento-item--image:hover img {
transform: scale(1.05);
}
.gruff-bento-item--image .gruff-bento-overlay {
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 2rem;
} .gruff-hero-bubble {
position: absolute;
top: 0;
right: 0;
margin-right: -5rem;
margin-top: -5rem;
width: 16rem;
height: 16rem;
background: rgba(20, 197, 70, 0.1);
border-radius: 50%;
filter: blur(48px);
opacity: 0.5;
pointer-events: none;
}
.gruff-hero-watermark {
position: absolute;
bottom: 0;
right: 0;
width: 33%;
object-fit: contain;
opacity: 0.2;
pointer-events: none;
transform: translate(25%, 25%);
} .gruff-live-dot {
position: relative;
display: inline-flex;
width: 0.75rem;
height: 0.75rem;
}
.gruff-live-dot__ping {
position: absolute;
display: inline-flex;
width: 100%;
height: 100%;
border-radius: 50%;
background: var(--gruff-green);
opacity: 0.75;
animation: gruff-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
}
.gruff-live-dot__dot {
position: relative;
display: inline-flex;
width: 0.75rem;
height: 0.75rem;
border-radius: 50%;
background: var(--gruff-green);
}
@keyframes gruff-ping {
75%, 100% {
transform: scale(2);
opacity: 0;
}
} .gruff-nordpool-chart {
height: 8rem;
width: 100%;
margin-top: auto;
position: relative;
border-bottom: 1px solid var(--gruff-border);
border-left: 1px solid var(--gruff-border);
}
.gruff-nordpool-chart svg {
width: 100%;
height: 100%;
color: var(--gruff-green);
} .gruff-phone-mockup {
position: relative;
width: 18rem;
height: 600px;
background: #111827;
border-radius: 3rem;
border: 8px solid #111827;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
overflow: hidden;
}
.gruff-phone-mockup__screen {
position: absolute;
inset: 0;
background: #fff;
border-radius: 2.25rem;
overflow: hidden;
}
.gruff-phone-mockup__content {
height: 100%;
display: flex;
flex-direction: column;
padding: 1.5rem;
}
.gruff-phone-mockup__header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
padding-top: 1rem;
}
.gruff-phone-mockup__stats {
background: var(--gruff-surface);
border-radius: var(--gruff-radius-lg);
padding: 1rem;
margin-bottom: 1.5rem;
display: flex;
justify-content: space-between;
}
.gruff-phone-mockup__stat-label {
font-size: 0.75rem;
color: var(--gruff-muted);
}
.gruff-phone-mockup__stat-value {
font-size: 1.25rem;
font-weight: 700;
}
.gruff-phone-mockup__stat-unit {
font-size: 0.75rem;
font-weight: 400;
} .gruff-bar-chart {
flex-grow: 1;
display: flex;
align-items: flex-end;
gap: 2px;
margin-bottom: 2rem;
}
.gruff-bar-chart__bar {
width: 100%;
border-radius: 2px 2px 0 0;
}
.gruff-bar-chart__bar--green {
background: var(--gruff-green);
}
.gruff-bar-chart__bar--red {
background: #EF4444;
} .gruff-phone-mockup__toggle {
background: var(--gruff-surface);
border-radius: var(--gruff-radius-lg);
padding: 1rem;
margin-top: auto;
}
.gruff-toggle {
width: 2.5rem;
height: 1.5rem;
background: var(--gruff-green);
border-radius: var(--gruff-radius-full);
position: relative;
}
.gruff-toggle__knob {
width: 1rem;
height: 1rem;
background: #fff;
border-radius: 50%;
position: absolute;
right: 0.25rem;
top: 0.25rem;
} .is-style-gruff-card,
.gruff-card {
background: #fff;
border-radius: var(--gruff-radius-xl);
padding: 2rem;
box-shadow: var(--gruff-shadow-sm);
border: 1px solid var(--gruff-border);
transition: box-shadow var(--gruff-transition);
}
.is-style-gruff-card:hover,
.gruff-card:hover {
box-shadow: var(--gruff-shadow-lg);
}
.is-style-gruff-bento-item {
background: #fff;
border-radius: var(--gruff-radius-xl);
padding: 2rem;
box-shadow: var(--gruff-shadow-sm);
border: 1px solid var(--gruff-border);
} .is-style-gruff-pill .wp-block-button__link,
.gruff-btn-pill {
border-radius: var(--gruff-radius-full) !important;
padding: 0.75rem 2rem;
font-weight: 600;
transition: background var(--gruff-transition), transform 100ms ease;
}
.is-style-gruff-cta .wp-block-button__link,
.gruff-btn-cta {
border-radius: var(--gruff-radius-full) !important;
padding: 0.75rem 2rem;
font-weight: 600;
box-shadow: var(--gruff-shadow-cta);
transition: background var(--gruff-transition), box-shadow var(--gruff-transition);
}
.is-style-gruff-cta .wp-block-button__link:hover {
background: var(--gruff-green-dark) !important;
} .gruff-cta-link {
display: inline-flex;
align-items: center;
gap: 0.5rem;
background: var(--gruff-green);
color: #fff;
font-weight: 600;
padding: 0.75rem 2rem;
border-radius: var(--gruff-radius-full);
text-decoration: none;
transition: background var(--gruff-transition);
box-shadow: var(--gruff-shadow-cta);
}
.gruff-cta-link:hover {
background: var(--gruff-green-dark);
color: #fff;
}
.gruff-cta-link--lg {
padding: 1rem 2.5rem;
font-size: 1.125rem;
}
.gruff-cta-link--dark {
background: #111827;
box-shadow: none;
}
.gruff-cta-link--dark:hover {
background: #1f2937;
color: #fff;
}
.gruff-cta-link--ghost {
background: rgba(255,255,255,0.1);
box-shadow: none;
}
.gruff-cta-link--ghost:hover {
background: rgba(255,255,255,0.2);
color: #fff;
}
.gruff-cta-link--secondary {
background: var(--gruff-surface);
color: #111827;
box-shadow: none;
}
.gruff-cta-link--secondary:hover {
background: #E5E7EB;
color: #111827;
} .gruff-badge {
display: inline-block;
background: rgba(20, 197, 70, 0.1);
color: var(--gruff-green);
font-size: 0.875rem;
font-weight: 600;
padding: 0.25rem 0.75rem;
border-radius: var(--gruff-radius-full);
}
.gruff-badge--bestseller {
position: absolute;
top: 1rem;
right: 1rem;
background: var(--gruff-green);
color: #fff;
font-size: 0.75rem;
font-weight: 700;
padding: 0.25rem 0.5rem;
border-radius: var(--gruff-radius-sm);
z-index: 1;
} .gruff-product-card {
background: #fff;
border-radius: var(--gruff-radius-xl);
padding: 1.5rem;
border: 1px solid var(--gruff-border);
display: flex;
flex-direction: column;
transition: box-shadow var(--gruff-transition);
}
.gruff-product-card:hover {
box-shadow: var(--gruff-shadow-lg);
}
.gruff-product-card__image {
position: relative;
aspect-ratio: 1;
background: var(--gruff-surface);
border-radius: var(--gruff-radius-lg);
margin-bottom: 1.5rem;
padding: 1rem;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.gruff-product-card__image img {
width: 100%;
height: 100%;
object-fit: contain;
mix-blend-mode: multiply;
}
.gruff-product-card__footer {
margin-top: auto;
padding-top: 1rem;
border-top: 1px solid var(--gruff-border);
display: flex;
align-items: center;
justify-content: space-between;
} .gruff-checklist {
list-style: none;
padding: 0;
margin: 0;
}
.gruff-checklist li {
display: flex;
align-items: center;
gap: 0.75rem;
color: #374151;
margin-bottom: 0.75rem;
}
.gruff-checklist li .material-icons {
color: var(--gruff-green);
font-size: 1.25rem;
flex-shrink: 0;
} .gruff-feature-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
}
.gruff-feature-item {
text-align: center;
padding: 2rem;
}
.gruff-feature-item__icon {
width: 4rem;
height: 4rem;
background: rgba(20, 197, 70, 0.1);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 1rem;
color: var(--gruff-green);
} .gruff-icon-circle {
width: 4rem;
height: 4rem;
background: rgba(20, 197, 70, 0.1);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: var(--gruff-green);
flex-shrink: 0;
}
.gruff-icon-circle--sm {
width: 3rem;
height: 3rem;
}
.gruff-icon-circle--red {
background: rgba(239, 68, 68, 0.1);
color: #EF4444;
} .gruff-hours-card {
background: #fff;
padding: 1.5rem;
border-radius: var(--gruff-radius-xl);
box-shadow: var(--gruff-shadow-sm);
}
.gruff-quote-border {
border-left: 4px solid var(--gruff-green);
padding-left: 1rem;
font-weight: 500;
color: var(--gruff-dark);
} .gruff-cta-dark {
background: #111827;
color: #fff;
padding: 4rem 1rem;
text-align: center;
}
.gruff-cta-dark h2 {
color: #fff;
}
.gruff-cta-dark p {
color: #9CA3AF;
} .gruff-section {
padding-top: 4rem;
padding-bottom: 4rem;
}
.gruff-section--surface {
background: var(--gruff-surface);
}
.gruff-section--dark {
background: #111827;
color: #fff;
}
.gruff-section--dark h2 {
color: #fff;
}
.gruff-section--dark p {
color: #9CA3AF;
} .gruff-step {
display: flex;
gap: 2rem;
align-items: flex-start;
}
.gruff-step__number,
.gruff-step-number {
flex-shrink: 0;
width: 3rem;
height: 3rem;
background: var(--gruff-green);
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 1.25rem;
}
.gruff-app-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
background: #111827;
color: #fff;
padding: 0.5rem 1rem;
border-radius: var(--gruff-radius-md);
font-size: 0.875rem;
font-weight: 500;
text-decoration: none;
} .gruff-testimonial {
background: #fff;
border-radius: var(--gruff-radius-xl);
padding: 1.5rem;
border: 1px solid var(--gruff-border);
}
.gruff-testimonial__stars {
color: var(--gruff-green);
margin-bottom: 1rem;
}
.gruff-testimonial__text {
color: var(--gruff-muted);
font-size: 0.875rem;
font-style: italic;
margin-bottom: 1rem;
}
.gruff-testimonial__name {
font-weight: 700;
color: var(--gruff-dark);
} .gruff-warning {
background: #FFFBEB;
border: 1px solid #FDE68A;
border-radius: var(--gruff-radius-lg);
padding: 1rem;
display: flex;
align-items: flex-start;
gap: 0.75rem;
}
.gruff-warning .material-icons {
color: #D97706;
margin-top: 2px;
flex-shrink: 0;
}
.gruff-warning p {
font-size: 0.875rem;
color: #92400E;
margin: 0;
} .gruff-contact-form input,
.gruff-contact-form select,
.gruff-contact-form textarea {
width: 100%;
padding: 0.75rem 1rem;
border: 1px solid var(--gruff-border);
border-radius: var(--gruff-radius-lg);
font-size: 1rem;
font-family: inherit;
outline: none;
transition: border-color var(--gruff-transition), box-shadow var(--gruff-transition);
background: #fff;
}
.gruff-contact-form input:focus,
.gruff-contact-form select:focus,
.gruff-contact-form textarea:focus {
border-color: var(--gruff-green);
box-shadow: 0 0 0 3px rgba(20, 197, 70, 0.15);
}
.gruff-contact-form textarea {
resize: none;
}
.gruff-contact-form label {
display: block;
font-size: 0.875rem;
font-weight: 500;
color: #374151;
margin-bottom: 0.5rem;
}
.gruff-contact-form .gruff-form-group,
.gruff-contact-form > div {
margin-bottom: 1.5rem;
} .gruff-reseller {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem;
border-radius: var(--gruff-radius-md);
transition: background var(--gruff-transition);
color: #374151;
font-weight: 500;
}
.gruff-reseller:hover {
background: var(--gruff-surface);
}
.gruff-reseller__dot {
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
background: var(--gruff-green);
flex-shrink: 0;
}
.gruff-footer .gruff-reseller__dot {
background: #4B5563;
}
.gruff-footer .gruff-reseller {
color: #9CA3AF;
padding: 0;
}
.gruff-footer .gruff-reseller:hover {
color: #fff;
background: transparent;
} .gruff-eu-funding {
display: flex;
align-items: center;
gap: 0.5rem;
flex-shrink: 0;
}
.gruff-eu-flag {
width: 3rem;
height: 2rem;
background: #1e3a8a;
border-radius: 0.25rem;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #2563eb;
}
.gruff-eu-flag__star {
color: #facc15;
font-size: 0.75rem;
}
.gruff-eu-text {
font-size: 0.625rem;
line-height: 1.3;
color: var(--gruff-muted);
} .gruff-footer a {
color: #9CA3AF;
text-decoration: none;
transition: color var(--gruff-transition);
}
.gruff-footer a:hover {
color: var(--gruff-green);
}
.gruff-footer__nav .wp-block-navigation-item a {
color: #9CA3AF !important;
font-size: 0.875rem;
}
.gruff-footer__nav .wp-block-navigation-item a:hover {
color: var(--gruff-green) !important;
} .gruff-footer .wp-block-columns {
margin-bottom: 0 !important;
}
.gruff-footer .wp-block-separator,
.gruff-footer .gruff-footer__divider {
margin-top: 2.5rem !important;
margin-bottom: 2rem !important;
opacity: 0.3;
border: none;
height: 1px;
}
.gruff-footer .wp-block-group > * + * {
margin-top: 0;
} .gruff-footer .wp-block-heading {
margin-bottom: 1.25rem;
} .gruff-two-col {
display: grid;
grid-template-columns: 1fr;
gap: 4rem;
align-items: center;
}
@media (min-width: 1024px) {
.gruff-two-col {
grid-template-columns: 1fr 1fr;
}
}
.gruff-two-col--2-1 {
grid-template-columns: 1fr;
}
@media (min-width: 1024px) {
.gruff-two-col--2-1 {
grid-template-columns: 2fr 1fr;
}
} .gruff-why-grid {
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 1.5rem;
}
@media (min-width: 640px) {
.gruff-why-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1024px) {
.gruff-why-grid {
grid-template-columns: repeat(3, 1fr);
}
}
.gruff-why-item {
display: flex;
align-items: flex-start;
gap: 1rem;
padding: 1rem;
border-radius: var(--gruff-radius-lg);
transition: background var(--gruff-transition);
}
.gruff-why-item:hover {
background: var(--gruff-surface);
} .gruff-use-cases {
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 1.5rem;
}
@media (min-width: 640px) {
.gruff-use-cases {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1024px) {
.gruff-use-cases {
grid-template-columns: repeat(4, 1fr);
}
} .woocommerce .products {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 2rem;
}
.woocommerce .product {
border-radius: var(--gruff-radius-xl);
border: 1px solid var(--gruff-border);
overflow: hidden;
}
.woocommerce .button,
.woocommerce a.button {
background: var(--gruff-green) !important;
color: #fff !important;
border-radius: var(--gruff-radius-full) !important;
font-weight: 600;
padding: 0.75rem 1.5rem !important;
border: none !important;
transition: background var(--gruff-transition);
}
.woocommerce .button:hover,
.woocommerce a.button:hover {
background: var(--gruff-green-dark) !important;
}
.woocommerce .price {
font-size: 1.5rem;
font-weight: 700;
} .gruff-faq details,
details.gruff-faq {
background: #fff;
border-radius: var(--gruff-radius-xl);
border: 1px solid var(--gruff-border);
box-shadow: var(--gruff-shadow-sm);
}
.gruff-faq summary,
details.gruff-faq > summary {
padding: 1.5rem;
font-weight: 700;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
list-style: none;
}
.gruff-faq summary::-webkit-details-marker,
details.gruff-faq > summary::-webkit-details-marker {
display: none;
}
.gruff-faq details[open] summary .material-icons,
details.gruff-faq[open] > summary .material-icons {
transform: rotate(180deg);
}
.gruff-faq summary .material-icons,
details.gruff-faq > summary .material-icons {
color: #9CA3AF;
transition: transform var(--gruff-transition);
}
.gruff-faq details > div,
.gruff-faq details > p,
details.gruff-faq > .gruff-faq__answer {
padding: 0 1.5rem 1.5rem;
color: var(--gruff-muted);
} .gruff-product-hero-image {
display: flex;
justify-content: center;
}
.gruff-product-hero-image img {
max-width: 28rem;
width: 100%;
filter: drop-shadow(0 25px 25px rgba(0,0,0,0.15));
} .text-green { color: var(--gruff-green); }
.bg-surface { background: var(--gruff-surface); }
.rounded-xl { border-radius: var(--gruff-radius-xl); }
.rounded-full { border-radius: var(--gruff-radius-full); }
.shadow-cta { box-shadow: var(--gruff-shadow-cta); } @media print {
.gruff-header,
.gruff-footer,
.gruff-lang-switcher { display: none; }
}