/* ==========================================================================
   NISTIVE — Unified Site Stylesheet
   Reference: index.php
   --------------------------------------------------------------------------
   HOW TO USE
   1. Place this file at: css/nistive.css
   2. In every HTML page, load it AFTER bootstrap.min.css:
        <link href=".../bootstrap.min.css" rel="stylesheet">
        <link rel="stylesheet" href="css/nistive.css">
   3. Remove the entire <style>...</style> block from each HTML page.
   4. See the notes at the bottom for HTML-side follow-ups.

   [NOTE] Anything marked [NOTE] is a heads-up for future expansion —
   read before adding new pages or components.
   ========================================================================== */

/* ==========================================================================
   1. DESIGN TOKENS  (single source of truth — per index.php)
   ========================================================================== */

:root {
    --ink:              #212529;
    /*--ink:              #14130f;*/
    --bone:             #efece3;
    --bone-dim:         #e4e0d3;
    --signal:           #ff3800;
    --signal-dark:      #cc3d22;
    --moss:             #333f26;
    --line:             rgba(20, 19, 15, .14);
    --line-invert:      rgba(239, 236, 227, .18);
    --radius:           8px;
    --whatsapp:         #25d366;
    --whatsapp-dark:    #1da851;
}

/* [NOTE] Per-page token overrides — optional, for future use.
   Add a body class such as `page-invoicing` to any page you want to
   nudge away from the index look. Example:
       <body class="page-invoicing">
   Then uncomment / add rules like the sample below. Not needed today. */
/*
body.page-invoicing  { --radius: 4px; }
body.page-training   { --signal: #ff4b2b; }
*/


/* ==========================================================================
   2. RESET & BASE
   ========================================================================== */

* {
    box-sizing: border-box;
}

html,
body {
    margin: 0;
    padding: 0;
    width: 100%;
    overflow-x: clip!important;
    background: var(--bone);
    color: var(--ink);
    font-family: 'Inter', sans-serif;
    font-size: 16px;
    line-height: 1.6;
    position: relative;
    /*google ads scroll issue*/
    /*padding-bottom: 280px !important;*/
}

::selection {
    background: var(--signal);
    color: var(--bone);
}

h1, h2, h3, h4, .display {
    font-family: 'Fraunces', serif;
    font-weight: 500;
    letter-spacing: -0.01em;
    line-height: 1.05;
}

.eyebrow {
    font-family: 'IBM Plex Mono', monospace;
    text-transform: uppercase;
    letter-spacing: .14em;
    font-size: .72rem;
    color: var(--signal-dark);
}

.bg-ink .eyebrow,
.hero-full .eyebrow,
footer .eyebrow {
    color: var(--signal);
}

.eyebrow-mb {
    margin-bottom: 1rem;
}

a {
    color: inherit;
    text-decoration: none;
}

.container-xl {
    max-width: 1280px;
}

.bg-ink {
    background: var(--ink);
    color: var(--bone);
}

.bg-ink hr.rule {
    border-color: var(--line-invert);
}

hr.rule {
    border-top: 1px solid var(--line);
    opacity: 1;
    margin: 0;
}

.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    border: 0;
}


/* ==========================================================================
   3. BUTTONS
   ========================================================================== */

/* ---- Base ---- */
.btn {
    border-radius: var(--radius);
    font-family: 'IBM Plex Mono', monospace;
    font-size: .78rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    padding: .85rem 1.6rem;
    transition: background .25s ease, color .25s ease, border-color .25s ease;
}

/* Focus-visible state — applies to every button variant, on any background */
.btn:focus-visible {
    outline: 2px solid var(--signal);
    outline-offset: 2px;
}

/* ---- Filled variants ---- */
.btn-signal {
    background: var(--signal);
    color: var(--bone);
    border: 1px solid var(--signal);
}

.btn-signal:hover {
    background: transparent;
    color: var(--signal);
}

.btn-ink {
    background: var(--ink);
    color: var(--bone);
    border: 1px solid var(--ink);
}

.btn-ink:hover {
    background: transparent;
    color: var(--ink);
}

.btn-bone {
    background: var(--bone);
    color: var(--ink);
    border: 1px solid var(--bone);
}

.btn-bone:hover {
    background: transparent;
    color: var(--bone);
    border-color: var(--bone);
}

/* ---- Outline variants ---- */
.btn-outline-signal {
    background: transparent;
    color: var(--signal);
    border: 1px solid var(--signal);
}

.btn-outline-signal:hover {
    background: var(--signal);
    color: var(--bone);
    border-color: var(--signal);
}

.btn-outline-ink {
    background: transparent;
    border: 1px solid var(--ink);
    color: var(--ink);
}

.btn-outline-ink:hover {
    background: var(--ink);
    color: var(--bone);
}

.btn-outline-bone {
    background: transparent;
    border: 1px solid var(--line-invert);
    color: var(--bone);
}

.btn-outline-bone:hover {
    background: var(--bone);
    color: var(--ink);
}

/* ---- On dark (.bg-ink) backgrounds ----
   Ink-outlined buttons become invisible on ink backgrounds, so swap
   the border/text to bone there. */
.bg-ink .btn-outline-ink {
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .btn-outline-ink:hover {
    background: var(--bone);
    color: var(--ink);
}

/* ---- Signal-background context (CTA blocks) ----
   On a signal-orange background, ink outlines already contrast well.
   The signal-outline variant would be invisible, so we swap to ink
   for that context. */
.cta .btn-outline-signal {
    border-color: var(--ink);
    color: var(--ink);
}

.cta .btn-outline-signal:hover {
    background: var(--ink);
    color: var(--bone);
}

/* ---- Phone links used in page heroes ---- */
.btn-phone {
    background: var(--bone);
    color: var(--ink);
    border: 1px solid var(--line);
    font-size: .7rem;
    padding: .6rem 1.2rem;
}

.btn-phone:hover {
    background: var(--bone-dim);
    border-color: var(--signal);
    color: var(--signal);
}

.bg-ink .btn-phone {
    background: rgba(255, 255, 255, .06);
    color: var(--bone);
    border-color: var(--line-invert);
}

.bg-ink .btn-phone:hover {
    background: rgba(255, 255, 255, .12);
    border-color: var(--signal);
    color: var(--signal);
}

/* ---- Size modifiers ----
   Pair with any variant: class="btn btn-signal btn-sm" */
.btn-sm {
    padding: .5rem 1rem;
    font-size: .7rem;
    letter-spacing: .05em;
}

.btn-lg {
    padding: 1rem 2rem;
    font-size: .85rem;
}

.btn:disabled,
.btn.disabled {
    opacity: .5;
    pointer-events: none;
}

/* CTA section button */
.cta .btn-outline-ink {
    border-color: var(--ink);
    color: var(--ink);
}

.cta .btn-outline-ink:hover {
    background: var(--ink);
    color: var(--bone);
}


/* ==========================================================================
   4. SKIP LINK  (a11y)
   ========================================================================== */

.skip-link {
    position: absolute;
    top: -100%;
    left: 50%;
    transform: translateX(-50%);
    background: var(--ink);
    color: var(--bone);
    padding: .75rem 1.5rem;
    z-index: 9999;
    font-family: 'IBM Plex Mono', monospace;
    font-size: .8rem;
    border-radius: var(--radius);
    transition: top .2s ease;
}

.skip-link:focus {
    top: 1rem;
}


/* ==========================================================================
   5. NAVBAR
   ========================================================================== */

.navbar {
    background: var(--bone);
    border-bottom: 1px solid var(--line);
    padding: 1rem 0;
    transition: box-shadow .3s ease;
}

.navbar.scrolled {
    box-shadow: 0 4px 24px rgba(0, 0, 0, .06);
}

.navbar-brand img {
    height: 40px;
    width: auto;
    display: block;
}

.nav-link {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    padding: .5rem 1rem !important;
    color: var(--ink) !important;
    position: relative;
}

.nav-link::after {
    content: "";
    position: absolute;
    left: 1rem;
    right: 1rem;
    bottom: .2rem;
    height: 1px;
    background: var(--signal);
    transform: scaleX(0);
    transition: transform .25s ease;
    transform-origin: left;
}

.nav-link:hover::after,
.nav-link:focus-visible::after,
.nav-link.active::after {
    transform: scaleX(1);
}

.nav-link.active {
    color: var(--signal) !important;
}


/* ==========================================================================
   6. MARQUEE  (light, index look — no borders)
   --------------------------------------------------------------------------
   [NOTE] On index, the marquee is a LIGHT strip (bone bg, ink text).
   Some older pages used a dark marquee. They now inherit the light look.
   To force a dark marquee on a specific band, add `marquee-band--dark`.

   [NOTE] Text marquee entries must be plain <span>…</span> (no class).
   Logo entries must carry `class="marquee-item"`. We target text spans
   via `:not(.marquee-item)` so logos never inherit text-marquee styling.
   ========================================================================== */

.marquee-band {
    background: var(--bone);
    color: var(--ink);
    overflow: hidden;
    white-space: nowrap;
    border-top: 0 solid var(--ink);
    border-bottom: 0 solid var(--ink);
    padding: .5rem 0;
}

.marquee-band--dark {
    background: var(--ink);
    color: var(--bone);
    border-top: 1px solid var(--ink);
    border-bottom: 1px solid var(--ink);
}

.marquee-track {
    display: inline-flex;
    animation: scroll-left 32s linear infinite;
    align-items: center;
}

/* Text marquee entries — plain <span>, no class */
.marquee-track > span:not(.marquee-item) {
    font-family: 'Fraunces', serif;
    font-style: italic;
    font-weight: 500;
    font-size: 1.6rem;
    padding: 0 2rem;
    display: inline-flex;
    align-items: center;
    gap: 3rem;
}

.marquee-track > span:not(.marquee-item) i {
    font-style: normal;
    color: var(--signal);
    font-size: 1rem;
}

@keyframes scroll-left {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
    .marquee-track { animation: none; }
}

/* Client-logo marquee variant */
.marquee-band-client {
    background: var(--bone);
    border-top: 0;
    border-bottom: 0;
}

.marquee-band-client .marquee-track {
    animation-duration: 45s;
}

.marquee-band-client .marquee-track .marquee-item {
    display: inline-flex;
    align-items: center;
    margin: 0 1.5rem;
    border-radius: 8px;
}

.marquee-band-client .marquee-track .marquee-item img {
    height: 50px;
    width: auto;
    filter: grayscale(1);
    transition: filter .4s ease;
    display: block;
}

.marquee-band-client .marquee-track .marquee-item img:hover {
    filter: grayscale(0);
}

.marquee-item .fallback-text {
    font-family: 'Inter', sans-serif;
    font-size: .8rem;
    font-weight: 500;
    letter-spacing: .02em;
    color: var(--ink);
    opacity: .7;
}

.bg-ink .marquee-item .fallback-text {
    color: var(--bone);
}


/* ==========================================================================
   7. HERO SECTIONS
   --------------------------------------------------------------------------
   [NOTE] Each page has its own hero class. They share typography, spacing
   and design tokens. When you add a new page, add its hero class to the
   grouped selectors below to inherit the same look.
   ========================================================================== */

/* ---- Index-specific dark full-screen hero ---- */
.hero-full {
    position: relative;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--ink);
    color: var(--bone);
    overflow: hidden;
}

.hero-full .bg-image {
    position: absolute;
    inset: 0;
    background: url('../../assets/images/bg/workspace.webp') center/cover no-repeat;
    opacity: .35;
}

.hero-full .overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, rgba(20, 19, 15, .8) 0%, rgba(20, 19, 15, .4) 100%);
}

.hero-full .content {
    position: relative;
    z-index: 2;
    text-align: start;
    padding: 0 1.5rem;
}

.hero-full .display {
    font-size: clamp(3rem, 8vw, 5.5rem);
    font-weight: 600;
    line-height: 1.05;
    margin-bottom: 1.5rem;
}

.hero-full .sub {
    font-size: 1.25rem;
    font-weight: 400;
    opacity: .85;
    margin-bottom: 2.5rem;
}

.hero-full .btn-hero {
    font-size: 1rem;
    padding: 1rem 2.5rem;
}

/* ---- Index secondary light hero (intro) ---- */
.hero {
    padding: 6rem 0 4rem;
    position: relative;
}

.hero .display {
    font-size: clamp(2.8rem, 7vw, 4rem);
}

.hero-index {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .75rem;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--ink);
    opacity: .6;
}

/* ---- Shared hero helpers ---- */
.hero-badge {
    font-family: 'IBM Plex Mono', monospace;
    text-transform: uppercase;
    letter-spacing: .14em;
    font-size: .72rem;
    color: var(--signal-dark);
    background: var(--bone-dim);
    padding: .3rem 1rem;
    border-radius: 100px;
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    margin-bottom: 1.5rem;
}

.bg-ink .hero-badge {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
}

.hero-phone-links {
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    margin-top: 1rem;
}

/* ---- All page-specific heroes share these rules ----
   [NOTE] Add new page hero classes to this group to inherit the look. */
.invoicing-hero,
.mobile-hero,
.b2b-hero,
.services-hero,
.training-hero,
.careers-hero,
.clientele-hero,
.consulting-hero,
.erp-hero,
.contact-hero,
.intro-section,
.portfolio-hero {
    padding: 5rem 0 4rem;
    position: relative;
    overflow: hidden;
    background: url('../../assets/images/bg/default.webp') center/cover no-repeat;
}

.invoicing-hero .display,
.mobile-hero .display,
.b2b-hero .display,
.services-hero .display,
.training-hero .display,
.careers-hero .display,
.clientele-hero .display,
.consulting-hero .display,
.erp-hero .display,
.contact-hero .display,
.intro-section .display {
    font-size: clamp(2.4rem, 5vw, 3.8rem);
    font-weight: 600;
    line-height: 1.05;
    margin-bottom: 1rem;
}

.invoicing-hero .sub,
.mobile-hero .sub,
.b2b-hero .sub,
.services-hero .sub,
.training-hero .sub,
.careers-hero .sub,
.clientele-hero .sub,
.consulting-hero .sub,
.erp-hero .sub,
.contact-hero .sub,
.intro-section .sub {
    font-size: 1.1rem;
    opacity: .75;
    max-width: 640px;
    margin-bottom: 1.5rem;
}

/* Subtle gradient overlay used on some page heroes */
.mobile-hero::before,
.training-hero::before,
.careers-hero::before,
.consulting-hero::before,
.erp-hero::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, rgba(20, 19, 15, .02) 0%, rgba(255, 56, 0, .04) 100%);
    pointer-events: none;
}


/* ==========================================================================
   8. SECTION PADDING
   --------------------------------------------------------------------------
   [NOTE] Bootstrap's `p-5` uses `!important`, so any section that has
   `<section class="section-tight p-5">` will use Bootstrap's 3rem padding
   and IGNORE `.section-tight`. If you want `.section-tight` to control
   padding on a section, remove `p-5` from that section.
   ========================================================================== */

section {
    padding: 6rem 0;
}

.section-tight {
    padding: 4rem 0;
    background: url('../../assets/images/bg/workspace.webp') center/cover no-repeat;
   
}


/* ==========================================================================
   9. CARDS & SHARED COMPONENTS
   ========================================================================== */

/* ---- Generic icon block used inside many cards ---- */
.service-icon {
    width: 56px;
    height: 56px;
    background: var(--bone-dim);
    border-radius: 18px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.6rem;
    color: var(--signal);
    margin-bottom: 1.2rem;
    flex-shrink: 0;
}

.bg-ink .service-icon {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
}

.text-center .service-icon {
    margin-left: auto;
    margin-right: auto;
}

/* ---- Highlight card (used broadly across pages) ---- */
.highlight-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.highlight-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.highlight-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.highlight-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
}

.bg-ink .highlight-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .highlight-card:hover {
    border-color: var(--signal);
}

.bg-ink .highlight-card h3 {
    color: var(--bone);
}

.bg-ink .highlight-card p {
    color: var(--bone);
    opacity: .8;
}

/* ---- Service card (services, training, consulting, careers) ---- */
.service-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
        transition: transform .3s ease, border-color .3s ease;

    display: flex;
    flex-direction: column;
}

.service-card > :last-child {
    margin-top: auto;
}

.service-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
}

.service-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.service-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
    margin-bottom: 1rem;
}

.bg-ink .service-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .service-card:hover {
    border-color: var(--signal);
}

.bg-ink .service-card h3 {
    color: var(--bone);
}

.bg-ink .service-card p {
    color: var(--bone);
    opacity: .8;
}

/* ---- Compact service card ----
   A tighter card variant for service grids where many items need to
   fit in a scannable layout. Uses the same icon/h3/p structure as
   .service-card, with smaller padding and a bottom-aligned CTA link.
   Use alongside .service-card: class="service-card service-card--compact" */

.service-card--compact {
    padding: 1.5rem 1.35rem 1.25rem;
}

.service-card--compact .service-icon {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    font-size: 1.25rem;
    margin-bottom: 1rem;
}

.service-card--compact h3 {
    font-size: 1.05rem;
    line-height: 1.3;
    margin-bottom: .4rem;
}

.service-card--compact p {
    font-size: .82rem;
    line-height: 1.55;
    opacity: .7;
    margin-bottom: 1rem;
}

/* The "Learn more" CTA — auto-pinned to the bottom of the card */
.service-card-cta {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--signal-dark);
    transition: gap .2s ease, color .2s ease;
}

.service-card:hover .service-card-cta {
    gap: .65rem;
    color: var(--signal);
}

.bg-ink .service-card-cta {
    color: var(--signal);
}

.bg-ink .service-card:hover .service-card-cta {
    color: var(--bone);
}

/* The whole card is the link — make the arrow follow the cursor visually */
.service-card--link {
    text-decoration: none;
    color: inherit;
}

/* ---- B2B service card (b2b, services) ---- */
.b2b-service-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;

    display: flex;
    flex-direction: column;
}

.b2b-service-card > :last-child {
    margin-top: auto;
}

.b2b-service-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
}

.b2b-service-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.b2b-service-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
    margin-bottom: 1rem;
}

.bg-ink .b2b-service-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .b2b-service-card:hover {
    border-color: var(--signal);
}

.bg-ink .b2b-service-card h3 {
    color: var(--bone);
}

.bg-ink .b2b-service-card p {
    color: var(--bone);
    opacity: .8;
}

/* ---- Pricing card (invoicing, web-designing) ---- */
.pricing-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
    display: flex;
    flex-direction: column;
}

.pricing-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.pricing-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.pricing-card .price-tag {
    font-family: 'Fraunces', serif;
    font-size: 1.8rem;
    font-weight: 700;
    color: var(--signal);
    margin: .5rem 0 .25rem;
}

.pricing-card .price-note {
    font-size: .75rem;
    opacity: .6;
    margin-bottom: .5rem;
}

.pricing-card ul {
    list-style: none;
    padding: 0;
    margin: .5rem 0 1rem;
    flex: 1;
}

.pricing-card ul li {
    display: flex;
    align-items: flex-start;
    gap: .5rem;
    font-size: .85rem;
    opacity: .8;
    margin-bottom: .3rem;
    line-height: 1.5;
}

.pricing-card ul li i {
    color: var(--signal);
    font-size: .7rem;
    margin-top: .2rem;
}

.pricing-card .availability-note {
    font-size: .7rem;
    opacity: .6;
    margin-top: .5rem;
    display: flex;
    align-items: center;
    gap: .4rem;
}

.pricing-card .availability-note i {
    color: var(--signal);
}

.bg-ink .pricing-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .pricing-card:hover {
    border-color: var(--signal);
}

.bg-ink .pricing-card h3 {
    color: var(--bone);
}

.bg-ink .pricing-card ul li {
    color: var(--bone);
    opacity: .8;
}

/* ---- Source code card (b2b, services) ---- */
.source-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.source-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.source-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.source-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
}

.source-card ul {
    list-style: none;
    padding: 0;
    margin-top: .5rem;
}

.source-card ul li {
    display: flex;
    align-items: center;
    gap: .5rem;
    font-size: .85rem;
    opacity: .8;
    margin-bottom: .3rem;
}

.source-card ul li i {
    color: var(--signal);
    font-size: .7rem;
}

.bg-ink .source-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .source-card:hover {
    border-color: var(--signal);
}

.bg-ink .source-card h3,
.bg-ink .source-card p,
.bg-ink .source-card ul li {
    color: var(--bone);
}

.bg-ink .source-card p,
.bg-ink .source-card ul li {
    opacity: .8;
}

.bg-ink .source-card ul li i {
    color: var(--signal);
}

/* ---- Infrastructure card (b2b, services) ---- */
.infra-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.infra-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.infra-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.infra-card ul li {
    display: flex;
    align-items: center;
    gap: .5rem;
    font-size: .9rem;
    opacity: .8;
    margin-bottom: .5rem;
}

.infra-card ul li i {
    color: var(--signal);
}

.bg-ink .infra-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .infra-card:hover {
    border-color: var(--signal);
}

.bg-ink .infra-card h3,
.bg-ink .infra-card ul li {
    color: var(--bone);
}

/* ---- Course card (training) ---- */
.course-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
    display: flex;
    flex-direction: column;
}

.course-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
}

.course-card .course-icon {
    width: 56px;
    height: 56px;
    background: var(--bone-dim);
    border-radius: 18px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.6rem;
    color: var(--signal);
    margin-bottom: 1.2rem;
    flex-shrink: 0;
}

.course-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.course-card .course-duration {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--signal-dark);
    margin-bottom: .25rem;
}

.course-card .course-fee {
    font-family: 'Fraunces', serif;
    font-size: 1.6rem;
    font-weight: 700;
    color: var(--signal);
    margin: .5rem 0 .25rem;
}

.course-card .course-prereq {
    font-size: .8rem;
    opacity: .7;
    margin-bottom: .5rem;
}

.course-card ul {
    list-style: none;
    padding: 0;
    margin: .5rem 0 1rem;
    flex: 1;
}

.course-card ul li {
    display: flex;
    align-items: flex-start;
    gap: .5rem;
    font-size: .85rem;
    opacity: .8;
    margin-bottom: .3rem;
    line-height: 1.5;
}

.course-card ul li i {
    color: var(--signal);
    font-size: .7rem;
    margin-top: .2rem;
}

.bg-ink .course-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .course-card:hover {
    border-color: var(--signal);
}

.bg-ink .course-card .course-icon {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
}

.bg-ink .course-card h3 { color: var(--bone); }
.bg-ink .course-card .course-duration { color: var(--signal); }
.bg-ink .course-card ul li { color: var(--bone); opacity: .8; }
.bg-ink .course-card .course-prereq { color: var(--bone); opacity: .7; }

/* ---- Info card (about page) ---- */
.info-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    transition: transform .3s ease, border-color .3s ease;
    height: 100%;
}

.info-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
}

.info-card .info-icon {
    font-size: 2rem;
    color: var(--signal);
    margin-bottom: 1rem;
    display: block;
}

.info-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.info-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
    margin-bottom: 0;
}

.location-chip {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--signal-dark);
    background: var(--bone-dim);
    padding: .2rem 1rem;
    border-radius: 100px;
    display: inline-block;
    margin-bottom: .75rem;
}

.bg-ink .info-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .info-card:hover { border-color: var(--signal); }
.bg-ink .info-card p { color: var(--bone); opacity: .8; }
.bg-ink .location-chip { background: rgba(255, 255, 255, .06); color: var(--signal); }

/* ---- Expertise block (about page) ---- */
.expertise-block {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.expertise-block:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.expertise-block h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.expertise-list {
    list-style: none;
    padding: 0;
    margin: 1rem 0 0;
}

.expertise-list li {
    display: flex;
    gap: .75rem;
    align-items: center;
    font-size: .9rem;
    opacity: .8;
    margin-bottom: .6rem;
    line-height: 1.5;
}

.expertise-list li i {
    color: var(--signal);
    font-size: 1.1rem;
    flex-shrink: 0;
}

.price-badge {
    font-family: 'Fraunces', serif;
    font-size: 2rem;
    font-weight: 600;
    color: var(--signal);
    letter-spacing: -.02em;
}

.price-note {
    font-size: .75rem;
    opacity: .6;
    margin-top: .2rem;
}

.price-range {
    font-family: 'Fraunces', serif;
    font-size: 1.6rem;
    font-weight: 600;
    color: var(--signal);
    margin: .5rem 0;
}

.bg-ink .expertise-block {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .expertise-block:hover { border-color: var(--signal); }
.bg-ink .expertise-block h3 { color: var(--bone); }
.bg-ink .expertise-list li { color: var(--bone); opacity: .8; }

/* ---- Philosophy card (about page) ---- */
.philosophy-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    height: 100%;
    padding: 2rem;
    transition: transform .3s ease, border-color .3s ease;
    display: flex;
    flex-direction: column;
}

.philosophy-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.philosophy-card > :last-child {
    margin-top: auto;
}

.philosophy-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.philosophy-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
}

.bg-ink .philosophy-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .philosophy-card:hover { border-color: var(--signal); }
.bg-ink .philosophy-card h3 { color: var(--bone); }
.bg-ink .philosophy-card p { color: var(--bone); opacity: .8; }

/* ---- Contact card (about page) ---- */
.contact-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    text-align: center;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.contact-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
}

.contact-card .contact-icon {
    width: 70px;
    height: 70px;
    background: var(--bone-dim);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto 1.2rem;
    font-size: 2rem;
    color: var(--signal);
}

.contact-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .4rem;
}

.contact-card p {
    font-size: .85rem;
    opacity: .7;
    line-height: 1.6;
    margin-bottom: 1rem;
}

.contact-link {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .85rem;
    color: var(--signal-dark);
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    transition: gap .2s ease, color .2s ease;
}

.contact-link:hover {
    gap: .8rem;
    color: var(--signal);
}

.bg-ink .contact-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .contact-card:hover { border-color: var(--signal); }
.bg-ink .contact-card .contact-icon {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
}
.bg-ink .contact-card h3 { color: var(--bone); }
.bg-ink .contact-card p { color: var(--bone); opacity: .7; }
.bg-ink .contact-link { color: var(--signal); }
.bg-ink .contact-link:hover { color: var(--bone); }

/* ---- Contact page — info / map / form ---- */
.contact-info-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.contact-info-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
}

.contact-info-card .contact-icon {
    width: 56px;
    height: 56px;
    background: var(--bone-dim);
    border-radius: 18px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.6rem;
    color: var(--signal);
    margin-bottom: 1.2rem;
}

.contact-info-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: .5rem;
}

.contact-info-card p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
    margin-bottom: .5rem;
}

.contact-detail {
    font-size: .95rem;
    font-weight: 500;
    color: var(--ink);
    text-decoration: none;
    display: inline-block;
    margin-top: .2rem;
}

.contact-detail:hover {
    color: var(--signal);
}

.bg-ink .contact-info-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .contact-info-card:hover { border-color: var(--signal); }
.bg-ink .contact-info-card .contact-icon {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
}
.bg-ink .contact-info-card h3 { color: var(--bone); }
.bg-ink .contact-info-card p { color: var(--bone); opacity: .8; }
.bg-ink .contact-detail { color: var(--bone); }
.bg-ink .contact-detail:hover { color: var(--signal); }

.map-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.map-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.map-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-bottom: 1rem;
}

.map-placeholder {
    background: var(--bone-dim);
    border-radius: var(--radius);
    height: 200px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    gap: .5rem;
    border: 1px solid var(--line);
}

.map-placeholder i {
    font-size: 2.5rem;
    color: var(--signal);
}

.map-placeholder p {
    font-size: .85rem;
    opacity: .7;
    text-align: center;
    margin: 0;
}

.bg-ink .map-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .map-card:hover { border-color: var(--signal); }
.bg-ink .map-card h3 { color: var(--bone); }
.bg-ink .map-placeholder {
    background: rgba(255, 255, 255, .04);
    border-color: var(--line-invert);
}
.bg-ink .map-placeholder p { color: var(--bone); opacity: .7; }

.contact-form-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 2rem;
    height: 100%;
    transition: transform .3s ease, border-color .3s ease;
}

.contact-form-card:hover {
    transform: translateY(-4px);
    border-color: var(--signal);
}

.contact-form-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 600;
    margin-top: .5rem;
}

.form-control-custom {
    background: var(--bone-dim);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: .7rem 1rem;
    color: var(--ink);
    font-size: .85rem;
    transition: all .2s ease;
    width: 100%;
}

.form-control-custom:focus {
    background: var(--bone);
    border-color: var(--signal);
    box-shadow: 0 0 0 3px rgba(255, 56, 0, .12);
    outline: none;
    color: var(--ink);
}

.form-control-custom::placeholder {
    color: var(--ink);
    opacity: .45;
}

.form-label {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--signal-dark);
    margin-bottom: .3rem;
    display: block;
}

.bg-ink .contact-form-card {
    background: var(--ink);
    border-color: var(--line-invert);
    color: var(--bone);
}

.bg-ink .contact-form-card:hover { border-color: var(--signal); }
.bg-ink .contact-form-card h3 { color: var(--bone); }
.bg-ink .form-control-custom {
    background: rgba(255, 255, 255, .04);
    border-color: var(--line-invert);
    color: var(--bone);
}
.bg-ink .form-control-custom:focus {
    background: rgba(255, 255, 255, .08);
    border-color: var(--signal);
    box-shadow: 0 0 0 3px rgba(255, 56, 0, .15);
}
.bg-ink .form-control-custom::placeholder { color: var(--bone); opacity: .35; }
.bg-ink .form-label { color: var(--signal); }

/* ---- Edge card (index "Our Edge" section) ---- */
.edge-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 1.75rem;
}

.edge-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 1.75rem 1.5rem 1.5rem;
    transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

.edge-card:hover {
    transform: translateY(-6px);
    box-shadow: 0 12px 32px rgba(0, 0, 0, .06);
    border-color: var(--signal);
}

.edge-card-icon {
    font-size: 1.8rem;
    color: var(--signal);
    margin-bottom: .75rem;
    line-height: 1;
    opacity: .7;
    transition: opacity .3s ease;
}

.edge-card:hover .edge-card-icon { opacity: 1; }

.edge-card-title {
    font-family: 'Fraunces', serif;
    font-size: 1.5rem;
    font-weight: 500;
    margin-bottom: .5rem;
    line-height: 1.5;
    letter-spacing: -.01em;
}

.edge-card-tagline {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--signal-dark);
    margin-bottom: .6rem;
}

.edge-card-desc {
    font-size: .9rem;
    opacity: .8;
    line-height: 1.6;
    margin-bottom: 0;
    flex: 1;
}

.bg-ink .edge-card {
    background: var(--ink);
    border-color: var(--line-invert);
}

.bg-ink .edge-card:hover {
    border-color: var(--signal);
    box-shadow: 0 12px 32px rgba(0, 0, 0, .4);
}

.bg-ink .edge-card-tagline { color: var(--signal); }
.bg-ink .edge-card-desc { opacity: .7; }

/* ---- Approach card (index "Development Approach") ---- */
.approach-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1.5rem;
    margin-top: .5rem;
}

.approach-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    /*padding: 2rem 1.5rem 1.75rem;*/
    padding: 0;
    transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
    text-align: left;
    position: relative;
    overflow: hidden;                    /* clips the image to the card radius */
    display: flex;
    flex-direction: column;
}

.approach-card:hover {
    transform: translateY(-6px);
    box-shadow: 0 12px 32px rgba(0, 0, 0, .06);
    border-color: var(--signal);
}
.approach-card-body {
    padding: 2rem 1.5rem 1.75rem;
    flex: 1;
}
.approach-card-number {
    font-family: 'Fraunces', serif;
    font-size: 2.4rem;
    font-weight: 500;
    color: var(--signal);
    line-height: 1.1;
    margin-bottom: .75rem;
    letter-spacing: -.02em;
    opacity: .6;
}

.approach-card-title {
    font-family: 'Fraunces', serif;
    font-size: 1.2rem;
    font-weight: 500;
    margin-bottom: .6rem;
    line-height: 1.2;
    letter-spacing: -.01em;
}

.approach-card-desc {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.6;
    margin-bottom: 0;
}
/* ---- Image flush with the card’s bottom / left / right edges ----
   [NOTE] The card's horizontal padding is 1.5rem and bottom padding
   is 1.75rem. The negative margins below cancel those exactly, so
   the image renders with zero padding against three of the four
   card edges. The top margin (1.5rem) is the only gap — between
   the description and the image.
   If you ever change the card’s padding, update the calc() and
   margin values to match, or the image will drift. */
.approach-card-image {
    display: block;
    width: 100%;
    aspect-ratio: 16 / 10;
    object-fit: cover;
    object-position: center;
}

.approach-card:hover .approach-card-image {
    transform: scale(1.03);
    transition: transform .4s ease;
}

.bg-ink .approach-card {
    background: var(--ink);
    border-color: var(--line-invert);
}

.bg-ink .approach-card:hover {
    border-color: var(--signal);
    box-shadow: 0 12px 32px rgba(0, 0, 0, .4);
}

.bg-ink .approach-card-number { color: var(--signal); }
.bg-ink .approach-card-desc { opacity: .7; }

/* ---- Work card (index portfolio) ---- */
.work-card {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    aspect-ratio: 4/3;
    background-size: cover;
    background-position: center;
}

.work-card .overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(20, 19, 15, 0) 40%, rgba(20, 19, 15, .85) 100%);
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 1.5rem;
    color: var(--bone);
    opacity: 0;
    transition: opacity .3s ease;
}

.work-card:hover .overlay,
.work-card:focus-within .overlay {
    opacity: 1;
}

.work-card img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .5s ease;
}

.work-card:hover img {
    transform: scale(1.06);
}

.work-tag {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .68rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--signal);
}

/* ---- Service row (index — vertical list with hover reveal) ----
   [NOTE] Used by the "What we do" section on index.html.
   Each item is an <a class="service-row"> with:
       <span class="num">       — the 01 / 02 / 03 index number
       <h3>                     — the title
       <span class="small">     — subtitle (hidden on mobile)
       <span class="arrow">     — chevron revealed on hover
   Adding a new row is just another <a class="service-row"> block. */
.service-row {
    border-top: 1px solid var(--line);
    padding: 1.75rem 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    transition: background .2s ease, padding-left .2s ease;
    cursor: hand;
    text-decoration: none;
    color: inherit;
}

.service-row:last-child {
    border-bottom: 1px solid var(--line);
}

.service-row:hover {
    background: var(--bone-dim);
    padding-left: 1rem;
}

.service-row .num {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .8rem;
    color: var(--signal-dark);
    width: 3rem;
    flex-shrink: 0;
}

.service-row h3 {
    font-size: 1.6rem;
    margin: 0;
    flex: 1;
}

.service-row .small {
    font-size: .85rem;
    opacity: .6;
    width: 220px;
    text-align: right;
    display: none;
}

.service-row .arrow {
    opacity: 0;
    transform: translateX(-8px);
    transition: opacity .2s ease, transform .2s ease;
    font-size: 1.2rem;
    color: var(--signal);
    margin-left: 1rem;
}

.service-row:hover .arrow {
    opacity: 1;
    transform: translateX(0);
}

@media (min-width: 768px) {
    .service-row .small { display: block; }
}

@media (max-width: 768px) {
    .service-row      { padding: 1.25rem 0; }
    .service-row h3   { font-size: 1.2rem; }
}

.bg-ink .service-row:hover {
    background: rgba(255, 255, 255, .04);
}

.bg-ink .service-row .arrow {
    color: var(--signal);
}


/* ==========================================================================
   10. PROCESS STEPS (mobile-app, custom ERP)
   ========================================================================== */

.process-step {
    display: flex;
    gap: 1.5rem;
    padding: 1.5rem 0;
    border-bottom: 1px solid var(--line);
    align-items: flex-start;
}

.process-step:last-child { border-bottom: none; }

.process-step .step-number {
    font-family: 'Fraunces', serif;
    font-size: 2rem;
    font-weight: 700;
    color: var(--signal);
    min-width: 50px;
    line-height: 1;
    opacity: .6;
}

.process-step .step-content { flex: 1; }

.process-step .step-content h4 {
    font-family: 'Fraunces', serif;
    font-size: 1.1rem;
    font-weight: 600;
    margin-bottom: .3rem;
}

.process-step .step-content p {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
    margin-bottom: 0;
}

.bg-ink .process-step { border-bottom-color: var(--line-invert); }
.bg-ink .process-step .step-content h4 { color: var(--bone); }
.bg-ink .process-step .step-content p { color: var(--bone); opacity: .8; }


/* ==========================================================================
   11. HOW IT WORKS (index)
   ========================================================================== */

.hiw-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2.5rem 3rem;
    margin-bottom: 2.5rem;
}

.hiw-step {
    display: flex;
    gap: 1.25rem;
    align-items: flex-start;
    padding: .5rem 0;
    border-bottom: 1px solid transparent;
    transition: border-color .3s ease;
}

.hiw-step:hover { border-bottom-color: var(--line); }

.hiw-step-number {
    display: flex;
    flex-direction: column;
    align-items: center;
    flex-shrink: 0;
    width: 3rem;
    padding-top: .1rem;
}

.hiw-step-number span {
    font-family: 'Fraunces', serif;
    font-size: 1.8rem;
    font-weight: 500;
    color: var(--signal);
    line-height: 1.2;
    letter-spacing: -.02em;
    background: var(--bone);
    padding: 0 .2rem;
    position: relative;
    z-index: 1;
}

.hiw-step-line {
    flex: 1;
    width: 1px;
    background: var(--line);
    margin-top: .3rem;
    min-height: 2.5rem;
    align-self: stretch;
}

.hiw-step:last-child .hiw-step-line { display: none; }

.hiw-step-content { flex: 1; min-width: 0; }

.hiw-step-title {
    font-family: 'Fraunces', serif;
    font-size: 1.35rem;
    font-weight: 500;
    margin-bottom: .15rem;
    line-height: 1.2;
    letter-spacing: -.01em;
}

.hiw-step-tagline {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--signal-dark);
    margin-bottom: .5rem;
}

.hiw-step-desc {
    font-size: .9rem;
    opacity: .8;
    line-height: 1.6;
    margin-bottom: 0;
}

.hiw-footer {
    text-align: center;
    padding-top: 1.5rem;
    border-top: 1px solid var(--line);
}

.bg-ink .hiw-step-number span {
    background: var(--ink);
    color: var(--signal);
}
.bg-ink .hiw-step-line { background: var(--line-invert); }
.bg-ink .hiw-step:hover { border-bottom-color: var(--line-invert); }
.bg-ink .hiw-step-tagline { color: var(--signal); }
.bg-ink .hiw-footer { border-top-color: var(--line-invert); }


/* ==========================================================================
   12. TIMELINE (about — reserved for future use)
   ========================================================================== */

.timeline {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
    padding-left: 1.5rem;
    border-left: 2px solid var(--signal);
}

.timeline-item {
    display: flex;
    gap: 1.5rem;
    align-items: flex-start;
}

.timeline-item .year {
    font-family: 'Fraunces', serif;
    font-size: 1.8rem;
    font-weight: 600;
    color: var(--signal);
    min-width: 80px;
    line-height: 1;
}

.timeline-item .desc {
    font-size: .95rem;
    opacity: .75;
    line-height: 1.6;
    margin: 0;
}

.timeline-item .desc strong { opacity: 1; }


/* ==========================================================================
   13. STATS & NUMBERS
   ========================================================================== */

.stat-item { text-align: center; }

.stat-item h4 {
    font-family: 'Fraunces', serif;
    font-size: 2.2rem;
    font-weight: 600;
    color: var(--signal);
    margin: 0;
    line-height: 1;
}

.stat-item p {
    font-size: .7rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    opacity: .7;
    margin: .2rem 0 0;
}

.bg-ink .stat-item h4 { color: var(--signal); }
.bg-ink .stat-item p { color: var(--bone); opacity: .7; }

.stat-num {
    font-family: 'Fraunces', serif;
    color: var(--signal);
    font-size: 3rem;
    font-weight: 500;
}

.stat-num small { font-size: 1.4rem; }

.intro-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 2.5rem;
}

.intro-stats .stat-item h4 {
    font-family: 'Fraunces', serif;
    font-size: 2.2rem;
    font-weight: 600;
    color: var(--signal);
    margin: 0;
    line-height: 1;
}

.intro-stats .stat-item p {
    font-size: .7rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    opacity: .7;
    margin: .2rem 0 0;
}


/* ==========================================================================
   14. BADGES & TAGS
   ========================================================================== */

.service-tag {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--signal-dark);
    background: var(--bone-dim);
    display: inline-block;
    padding: .2rem .8rem;
    border-radius: 100px;
}

.bg-ink .service-tag {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
}

.badge-accent-sm {
    background: rgba(255, 56, 0, .08);
    border: 1px solid rgba(255, 56, 0, .2);
    border-radius: 100px;
    color: var(--signal-dark);
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    padding: .3rem .9rem;
    display: inline-block;
}

.bg-ink .badge-accent-sm {
    background: rgba(255, 56, 0, .12);
    border-color: rgba(255, 56, 0, .25);
    color: var(--signal);
}

.badge-accent {
    background: rgba(255, 56, 0, .08);
    border: 1px solid rgba(255, 56, 0, .2);
    border-radius: 100px;
    color: var(--signal-dark);
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    padding: .4rem 1rem;
    display: inline-flex;
    align-items: center;
    gap: .4rem;
}

.bg-ink .badge-accent {
    background: rgba(255, 56, 0, .12);
    border-color: rgba(255, 56, 0, .25);
    color: var(--signal);
}


/* ==========================================================================
   15. TECH STACK PILLS
   ========================================================================== */

.tech-stack {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin-top: 1rem;
}

.tech-stack span {
    background: var(--bone-dim);
    border-radius: 100px;
    padding: .3rem .9rem;
    font-size: .7rem;
    font-family: 'IBM Plex Mono', monospace;
    color: var(--ink);
    opacity: .7;
}

.bg-ink .tech-stack span {
    background: rgba(255, 255, 255, .06);
    color: var(--bone);
    opacity: .7;
}


/* ==========================================================================
   16. VALUE PROPS (b2b, services)
   ========================================================================== */

.value-prop { text-align: center; }

.value-prop i {
    font-size: 2.2rem;
    color: var(--signal);
    display: block;
    margin-bottom: .75rem;
}

.value-prop h4 {
    font-family: 'Fraunces', serif;
    font-size: 1.1rem;
    font-weight: 600;
    margin-bottom: .3rem;
}

.value-prop p {
    font-size: .85rem;
    opacity: .7;
    margin: 0;
}

.bg-ink .value-prop i { color: var(--signal); }
.bg-ink .value-prop h4 { color: var(--bone); }
.bg-ink .value-prop p { color: var(--bone); opacity: .7; }


/* ==========================================================================
   17. CTA SECTION
   ========================================================================== */

.cta {
    background: var(--signal);
    color: var(--ink);
    border-radius: var(--radius);
    padding: 4rem 3rem;
}

.cta .display {
    font-size: clamp(2rem, 4vw, 3.2rem);
}


/* ==========================================================================
   18. FOOTER
   --------------------------------------------------------------------------
   [NOTE] Index uses a compact footer (2.5rem top padding). If you want the
   old spacious footer look on a specific page, add `footer--roomy` and
   the override is included below.
   ========================================================================== */

footer {
    background: var(--ink);
    color: var(--bone);
    padding: 2.5rem 0 1.5rem;
}

footer.footer--roomy {
    padding: 4rem 0 1.5rem;
}

footer a:hover { color: var(--signal); }

.foot-label {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .1em;
    opacity: .55;
    margin-bottom: .75rem;
}

.footer-brand {
    font-family: 'Fraunces', serif;
    font-size: 1.8rem;
}

.footer-text {
    opacity: .8;
    max-width: 36ch;
}

.footer-small { opacity: .8; }
.footer-copy  { opacity: .6; }

.footer-link {
    color: var(--bone);
    opacity: .7;
    text-decoration: none;
    transition: opacity .2s, padding-left .2s, color .2s;
    display: flex;
    align-items: center;
    gap: .5rem;
}

.footer-link:hover {
    opacity: 1;
    padding-left: 4px;
    color: var(--signal);
}

.footer-social-link {
    color: var(--bone);
    opacity: .6;
    transition: opacity .2s, color .2s;
}

.footer-social-link:hover {
    opacity: 1;
    color: var(--signal);
}

.footer-tagline {
    font-family: 'Fraunces', serif;
    font-style: italic;
    font-size: 1rem;
    opacity: .5;
    margin-top: .5rem;
}

/* Bare-bones form used inside dark footers */
.form-control {
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--line-invert);
    color: var(--bone);
    border-radius: 0;
    padding: .75rem .25rem;
}

.form-control:focus {
    background: transparent;
    color: var(--bone);
    box-shadow: none;
    border-bottom-color: var(--signal);
}

.form-control::placeholder {
    color: rgba(239, 236, 227, .45);
}


/* ==========================================================================
   19. FLOATING BUTTONS
   ========================================================================== */

.floating-btn {
    position: fixed;
    z-index: 900;
    border: none;
    border-radius: 50%;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.3rem;
    box-shadow: 0 3px 14px rgba(0, 0, 0, .2);
    transition: transform .25s ease, opacity .35s ease, box-shadow .25s ease;
    cursor: pointer;
    opacity: 0;
    transform: scale(0.7);
    pointer-events: none;
    will-change: transform, opacity;
    right: 20px;
    left: auto;
    top: auto;
}

.floating-btn.visible {
    opacity: 1;
    transform: scale(1);
    pointer-events: auto;
}

.floating-btn:hover {
    transform: scale(1.08);
    box-shadow: 0 6px 20px rgba(0, 0, 0, .25);
}

.floating-btn:focus-visible {
    outline: 2px solid var(--signal);
    outline-offset: 2px;
}

.btn-whatsapp {
    bottom: 76px;
    background: var(--whatsapp);
    color: #fff;
}

.btn-whatsapp:hover {
    background: var(--whatsapp-dark);
    color: #fff;
}

.btn-backtop {
    bottom: 20px;
    background: var(--ink);
    color: var(--bone);
    border: 1px solid var(--line-invert);
}

.btn-backtop:hover {
    background: var(--signal);
    color: var(--bone);
    border-color: var(--signal);
}


/* ==========================================================================
   20. MICROGRAPHIC CANVAS (fixed background pattern)
   ========================================================================== */

#microCanvas {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 0;
    pointer-events: none;
    opacity: .45;
}

body > *:not(#microCanvas):not(.modal):not(.modal-backdrop) {
    position: relative;
    z-index: 1;
}


/* ==========================================================================
   21. AOS (scroll-reveal utility)
   ========================================================================== */

.aos-item {
    opacity: 0;
    transition: opacity .7s ease, transform .7s cubic-bezier(0.22, 1, 0.36, 1);
    will-change: transform, opacity;
}

.aos-item.aos-visible {
    opacity: 1;
    transform: translate(0, 0) scale(1);
}

.aos-fade-up    { transform: translateY(40px); }
.aos-fade-down  { transform: translateY(-40px); }
.aos-fade-left  { transform: translateX(40px); }
.aos-fade-right { transform: translateX(-40px); }
.aos-scale      { transform: scale(0.92); }
.aos-zoom-in    { transform: scale(0.85); }
.aos-fade-in    { transform: none; opacity: 0; }

.aos-delay-1 { transition-delay: .08s; }
.aos-delay-2 { transition-delay: .16s; }
.aos-delay-3 { transition-delay: .24s; }
.aos-delay-4 { transition-delay: .32s; }
.aos-delay-5 { transition-delay: .40s; }

@media (prefers-reduced-motion: reduce) {
    .aos-item {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
    .floating-btn {
        transition: opacity .3s ease !important;
    }
}


/* ==========================================================================
   22. MODAL ("Start a Project")
   --------------------------------------------------------------------------
   [NOTE] Only used on index.html today. Included here so future pages can
   reuse the same modal markup without restyling.
   ========================================================================== */

.modal-content {
    background: var(--bone);
    color: var(--ink);
    border-radius: var(--radius);
    border: none;
    box-shadow: 0 20px 60px rgba(0, 0, 0, .25);
}

.modal-header {
    border-bottom: 1px solid var(--line);
    padding: 1.75rem 2rem 1.25rem 2rem;
}

.modal-header .modal-title {
    font-family: 'Fraunces', serif;
    font-size: 1.75rem;
    font-weight: 500;
    letter-spacing: -.01em;
    line-height: 1.2;
}

.modal-header .modal-subtitle {
    display: block;
    font-size: .85rem;
    opacity: .7;
    margin-top: .25rem;
    font-weight: 400;
}

.modal-header .btn-close {
    background: transparent;
    border: none;
    font-size: 1.4rem;
    opacity: .5;
    transition: opacity .2s, transform .2s;
    padding: .25rem .5rem;
}

.modal-header .btn-close:hover {
    opacity: 1;
    transform: rotate(90deg);
}

.modal-body {
    position: relative;
    max-height: 70vh;
    overflow-y: auto;
    padding: 1.5rem 1.5rem 1rem;
}

.modal-body .form-label {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--ink);
    opacity: .7;
    margin-bottom: .2rem;
    font-weight: 500;
}

.modal-body .form-required {
    color: var(--signal);
    font-weight: 600;
    margin-left: .1rem;
}

.modal-body .form-control-custom {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: .6rem .9rem;
    font-size: .95rem;
    color: var(--ink);
    transition: border-color .25s ease, box-shadow .25s ease;
    font-family: 'Inter', sans-serif;
    width: 100%;
}

.modal-body .form-control-custom:focus {
    border-color: var(--signal);
    box-shadow: 0 0 0 3px rgba(255, 56, 0, .15);
    background: var(--bone);
    color: var(--ink);
}

.modal-body .form-control-custom::placeholder {
    color: rgba(20, 19, 15, .35);
    font-size: .9rem;
}

.modal-body .form-control-custom.is-invalid {
    border-color: var(--signal) !important;
    box-shadow: 0 0 0 3px rgba(255, 56, 0, .2) !important;
}

.modal-body .form-control-custom.is-invalid:focus {
    box-shadow: 0 0 0 3px rgba(255, 56, 0, .3) !important;
}

.modal-body .error-text {
    font-size: .75rem;
    color: var(--signal);
    display: block;
    margin-top: .3rem;
    min-height: 1.2rem;
}

.modal-body .service-check-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: .5rem 1rem;
    margin-top: .5rem;
}

.modal-body .service-check-item {
    display: flex;
    align-items: center;
    gap: .5rem;
    font-size: .9rem;
    cursor: pointer;
    padding: .3rem .4rem;
    border-radius: 4px;
    transition: background .15s ease;
}

.modal-body .service-check-item:hover {
    background: rgba(20, 19, 15, .05);
}

.modal-body .service-check-item input[type="checkbox"] {
    width: 16px;
    height: 16px;
    accent-color: var(--signal);
    flex-shrink: 0;
    cursor: pointer;
}

.modal-body .service-check-item input[type="checkbox"]:focus-visible {
    outline: 2px solid var(--signal);
    outline-offset: 2px;
}

.modal-body .opacity-7 { opacity: .7; }

/* Modal footer — the scroll cue ↔ buttons toggle */
.modal-footer {
    border-top: 1px solid var(--line);
    padding: .05rem 1rem .1rem;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: .4rem;
    flex-wrap: wrap;
    min-height: auto;
    transition: padding .3s ease;
}

.modal-footer.footer-buttons-visible {
    padding: .6rem 1.5rem 1rem;
}

.footer-message {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .35rem;
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--signal-dark);
    width: 100%;
    opacity: 1;
    transition: opacity .25s ease;
    animation: pulse-message 2s ease-in-out infinite;
    padding: 0;
    line-height: 1.1;
    margin: 0;
}

.footer-message.hidden {
    display: none;
    opacity: 0;
    pointer-events: none;
}

@keyframes pulse-message {
    0%, 100% { opacity: .6; }
    50%      { opacity: 1; }
}

.footer-message i {
    animation: bounce-down-msg 1.8s infinite;
    font-size: .85rem;
}

@keyframes bounce-down-msg {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(3px); }
}

.footer-buttons {
    display: none;
    align-items: center;
    gap: .75rem;
    flex-wrap: wrap;
    justify-content: flex-end;
    width: 100%;
}

.footer-buttons.visible {
    display: flex;
    animation: fade-buttons .35s ease;
}

@keyframes fade-buttons {
    from { opacity: 0; transform: translateY(3px); }
    to   { opacity: 1; transform: translateY(0); }
}

.modal-footer .btn {
    font-size: .75rem;
    padding: .6rem 1.5rem;
}

.modal-footer .btn-signal {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
}

.modal-footer .btn-signal i { font-size: 1.1rem; }

.status-message {
    color: var(--signal);
    font-size: .8rem;
    opacity: .7;
    min-height: 1.5rem;
    text-align: center;
    flex: 1;
}

.status-message.success { color: var(--whatsapp-dark); opacity: 1; }
.status-message.error   { color: var(--signal);      opacity: 1; }


/* ==========================================================================
   23. TESTIMONIALS & CLIENTS GRID
   ========================================================================== */

.quote-mark {
    font-family: 'Fraunces', serif;
    font-size: 5rem;
    line-height: 1;
    color: var(--signal);
}

.testimonial-text {
    font-size: 1.4rem;
    font-family: 'Fraunces', serif;
    font-weight: 300;
}

.testimonial-slide { display: none; }

.testimonial-slide.active {
    display: block;
    animation: fade .5s ease;
}

@keyframes fade {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: translateY(0); }
}

.t-dots {
    display: flex;
    gap: .5rem;
}

.t-dots button {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    border: none;
    background: var(--line-invert);
    cursor: pointer;
    transition: background .2s ease, transform .2s ease;
    padding: 0;
}

.t-dots button.active {
    background: var(--signal);
    transform: scale(1.2);
}

.t-dots button:focus-visible {
    outline: 2px solid var(--signal);
    outline-offset: 2px;
}

/* Clients logo grid — used on clients.html and home */
.clients-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1.5rem 1rem;
    margin-bottom: 3rem;
}

.client-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 1rem .5rem;
    border-radius: var(--radius);
    background: var(--bone);
    border: 1px solid var(--line);
    transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}

.client-item:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, .06);
    border-color: var(--signal);
}

.client-logo-wrap {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    background: var(--bone-dim);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: .6rem;
    overflow: hidden;
    flex-shrink: 0;
    border: 1px solid var(--line);
    position: relative;
}

.client-logo-wrap img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    padding: 6px;
    display: block;
}

.client-initials {
    font-family: 'Fraunces', serif;
    font-size: 1.4rem;
    font-weight: 500;
    color: var(--ink);
    opacity: .5;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    background: var(--bone-dim);
}

.client-name {
    font-family: 'Inter', sans-serif;
    font-size: .8rem;
    font-weight: 500;
    letter-spacing: .02em;
    line-height: 1.3;
    color: var(--ink);
    max-width: 100%;
    word-break: break-word;
}

.bg-ink .client-item {
    background: var(--ink);
    border-color: var(--line-invert);
}

.bg-ink .client-item:hover { border-color: var(--signal); }
.bg-ink .client-name { color: var(--bone); }
.bg-ink .client-logo-wrap {
    background: rgba(255, 255, 255, .04);
    border-color: var(--line-invert);
}
.bg-ink .client-initials {
    color: var(--bone);
    background: rgba(255, 255, 255, .04);
}

/* Award list (index — reserved for future use) */
.award-item {
    border-top: 1px solid var(--line-invert);
    padding: 1.5rem 0;
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    flex-wrap: wrap;
    gap: .5rem;
}

.award-item:last-child { border-bottom: 1px solid var(--line-invert); }

.award-item .org {
    font-family: 'Fraunces', serif;
    font-size: 1.4rem;
}

.award-item .meta {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .75rem;
    color: var(--signal);
    text-transform: uppercase;
}

/* Team & blog cards (index — reserved for future use) */
.team-card img {
    width: 100%;
    aspect-ratio: 3/4;
    object-fit: cover;
    filter: grayscale(1);
    transition: filter .3s ease;
    border-radius: var(--radius);
}

.team-card:hover img { filter: grayscale(0); }

.team-card h4 {
    margin-top: 1rem;
    margin-bottom: .15rem;
    font-size: 1.15rem;
}

.team-card .role {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    opacity: .65;
}

.blog-card img {
    width: 100%;
    aspect-ratio: 16/10;
    object-fit: cover;
    border-radius: var(--radius);
    margin-bottom: 1.25rem;
}

.blog-meta {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    opacity: .6;
    margin-bottom: .5rem;
}


/* ==========================================================================
   24. UTILITIES
   --------------------------------------------------------------------------
   [NOTE] Add site-wide helper classes here. Keep them small and predictable.
   ========================================================================== */

.heading-clamp { font-size: clamp(1.9rem, 3vw, 2.6rem); }
.heading-large { font-size: clamp(2.2rem, 5vw, 3.5rem); }

.text-muted-para {
    font-size: .95rem;
    opacity: .75;
    line-height: 1.75;
}

.text-muted-para-sm {
    font-size: .9rem;
    opacity: .75;
    line-height: 1.7;
}

.text-muted-para-sm2 {
    font-size: .95rem;
    opacity: .7;
    margin-top: .5rem;
}

.text-signal { color: var(--signal); }

.opacity-7 { opacity: .7; }
.opacity-6 { opacity: .6; }
.opacity-5 { opacity: .5; }
.opacity-8 { opacity: .8; }

.icon-lg-signal {
    font-size: 2rem;
    color: var(--signal);
    display: block;
    margin-bottom: .5rem;
}

.icon-md-signal {
    font-size: 1.8rem;
    color: var(--signal);
    display: block;
    margin-bottom: .75rem;
}

.icon-xl-signal {
    font-size: 2.5rem;
    color: var(--signal);
    display: block;
    margin-bottom: 1rem;
}

.border-top-line { border-top: 1px solid var(--line); }
.bg-signal-soft   { background: rgba(255, 56, 0, .02); }
.bg-signal-soft-icon { background: rgba(255, 56, 0, .08); }

.cta-text {
    font-size: .95rem;
    opacity: .8;
    max-width: 460px;
    margin-top: .5rem;
}

.gap-3 { gap: 1rem; }

/* ==========================================================================
   24b. PORTFOLIO
   --------------------------------------------------------------------------
   [NOTE] Used on portfolio.php and any future case-study detail page.
   Grids collapse at 992px and 640px — see Section 25 for overrides.
   ========================================================================== */

/* ---- Portfolio hero ---- */
.portfolio-hero {
    padding: 5rem 0 3rem;
    position: relative;
    overflow: hidden;
}

.portfolio-hero .display {
    font-size: clamp(2.6rem, 6vw, 4.2rem);
    font-weight: 600;
    line-height: 1.02;
    margin-bottom: 1rem;
}

.portfolio-hero .sub {
    font-size: 1.1rem;
    opacity: .75;
    max-width: 660px;
    margin-bottom: 0;
}

/* ---- Stats bar ---- */
.portfolio-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 2rem;
    padding: 2.5rem 0;
    border-top: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
}

.portfolio-stats .stat-item {
    text-align: left;
}

.portfolio-stats .stat-item h4 {
    font-family: 'Fraunces', serif;
    font-size: 2.6rem;
    font-weight: 600;
    color: var(--signal);
    line-height: 1;
    margin: 0 0 .35rem;
}

.portfolio-stats .stat-item p {
    font-size: .7rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    opacity: .65;
    margin: 0;
}

/* ---- Filter pills ---- */
.portfolio-filter {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin-bottom: 2.5rem;
}

.filter-pill {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    padding: .55rem 1.15rem;
    border: 1px solid var(--line);
    border-radius: 100px;
    background: var(--bone);
    color: var(--ink);
    cursor: pointer;
    transition: background .2s ease, color .2s ease, border-color .2s ease;
}

.filter-pill:hover,
.filter-pill:focus-visible {
    border-color: var(--signal);
    color: var(--signal);
    outline: none;
}

.filter-pill.active {
    background: var(--ink);
    color: var(--bone);
    border-color: var(--ink);
}

/* ---- Featured case study ---- */
.feature-case {
    display: grid;
    grid-template-columns: 1.15fr 1fr;
    gap: 0;
    border-radius: var(--radius);
    overflow: hidden;
    border: 1px solid var(--line-invert);
    background: var(--ink);
    color: var(--bone);
    text-decoration: none;
    transition: border-color .3s ease, transform .3s ease;
}

.feature-case:hover {
    border-color: var(--signal);
}

.feature-case-media {
    position: relative;
    min-height: 520px;
    overflow: hidden;
}

.feature-case-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .9s cubic-bezier(0.22, 1, 0.36, 1);
    display: block;
}

.feature-case:hover .feature-case-media img {
    transform: scale(1.04);
}

.feature-case-body {
    padding: 3rem;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.feature-case-body h3 {
    font-family: 'Fraunces', serif;
    font-size: 2rem;
    font-weight: 600;
    color: var(--bone);
    letter-spacing: -.01em;
    line-height: 1.1;
    margin: 0;
}

.feature-case-body .service-tag {
    background: rgba(255, 255, 255, .06);
    color: var(--signal);
    align-self: flex-start;
}

.feature-case-metrics {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 1.5rem;
    padding: 1.5rem 0;
    margin: 1.5rem 0;
    border-top: 1px solid var(--line-invert);
    border-bottom: 1px solid var(--line-invert);
}

.metric-value {
    font-family: 'Fraunces', serif;
    font-size: 2rem;
    font-weight: 600;
    color: var(--signal);
    line-height: 1;
    letter-spacing: -.02em;
}

.metric-value span {
    font-size: 1.1rem;
    margin-left: .1rem;
}

.metric-label {
    font-size: .7rem;
    opacity: .65;
    text-transform: uppercase;
    letter-spacing: .06em;
    margin-top: .4rem;
    line-height: 1.35;
}

.feature-case-cta {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--signal);
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    transition: gap .25s ease;
}

.feature-case:hover .feature-case-cta {
    gap: 1rem;
}

/* ---- Case grid & cards ---- */
.case-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 1.5rem;
}

.case-card {
    background: var(--bone);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    overflow: hidden;
    transition: transform .3s ease, border-color .3s ease, box-shadow .3s ease;
    display: flex;
    flex-direction: column;
    height: 100%;
    text-decoration: none;
    color: inherit;
}

.case-card:hover {
    transform: translateY(-6px);
    border-color: var(--signal);
    box-shadow: 0 16px 40px rgba(0, 0, 0, .08);
}

.case-card-media {
    aspect-ratio: 16 / 10;
    overflow: hidden;
    background: var(--bone-dim);
}

.case-card-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .6s ease;
}

.case-card:hover .case-card-media img {
    transform: scale(1.05);
}

.case-card-body {
    padding: 1.5rem;
    display: flex;
    flex-direction: column;
    flex: 1;
}

.case-card-tag {
    font-family: 'IBM Plex Mono', monospace;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--signal-dark);
    margin-bottom: .75rem;
    display: block;
}

.case-card h3 {
    font-family: 'Fraunces', serif;
    font-size: 1.25rem;
    font-weight: 600;
    line-height: 1.25;
    margin: 0 0 .5rem;
    color: var(--ink);
}

.case-card p {
    font-size: .875rem;
    opacity: .75;
    line-height: 1.6;
    margin-bottom: 1rem;
    flex: 1;
}

.case-card-meta {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-top: 1rem;
    border-top: 1px solid var(--line);
    font-family: 'IBM Plex Mono', monospace;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    opacity: .7;
}

.case-card-arrow {
    font-size: 1rem;
    color: var(--signal);
    transition: transform .3s ease;
    display: inline-flex;
}

.case-card:hover .case-card-arrow {
    transform: translate(3px, -3px);
}

/* ---- Compact case card (home page portfolio grid) ----
   A tighter version of .case-card used for the 3×2 grid on the home
   page. Drops the description paragraph, reduces padding, and shrinks
   the title. The meta row pins to the bottom so cards stay aligned
   even when titles wrap to two lines.
   Use the same HTML structure as .case-card, minus the <p>. */
.case-card--compact .case-card-body {
    padding: 1.15rem 1.25rem 1rem;
}

.case-card--compact .case-card-tag {
    font-size: .6rem;
    margin-bottom: .35rem;
}

.case-card--compact h3 {
    font-size: 1.05rem;
    line-height: 1.3;
    margin-bottom: 0;
    flex: 1;
}

.case-card--compact .case-card-meta {
    padding-top: .85rem;
    margin-top: .85rem;
    font-size: .65rem;
}

/* ---- Case study detail page ---- */
.back-link {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    font-family: 'IBM Plex Mono', monospace;
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--ink);
    opacity: .7;
    text-decoration: none;
    transition: opacity .2s ease, gap .25s ease, color .2s ease;
}

.back-link:hover {
    opacity: 1;
    gap: .85rem;
    color: var(--signal);
}

.case-hero-media {
    border-radius: var(--radius);
    overflow: hidden;
    aspect-ratio: 16 / 9;
    background: var(--bone-dim);
}

.case-hero-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.case-summary {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 2rem;
    padding: 2rem 0;
    border-top: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
}

.case-summary-item .foot-label {
    color: var(--signal-dark);
    opacity: .8;
    margin-bottom: .35rem;
}

.case-summary-item p {
    font-size: .95rem;
}

/* Responsive tweaks for case study */
@media (max-width: 992px) {
    .case-summary { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 576px) {
    .case-summary { grid-template-columns: 1fr; gap: 1rem; padding: 1.5rem 0; }
}

/* ---- Empty state ---- */
.portfolio-empty {
    text-align: center;
    padding: 4rem 1rem;
    font-size: .95rem;
    opacity: .7;
}


/* ==========================================================================
   25. RESPONSIVE
   --------------------------------------------------------------------------
   [NOTE] Breakpoints: 992, 768, 640, 576, 480, 420, 400.
   When adding new components, add their responsive overrides inside the
   matching breakpoint block below to keep media queries consolidated.
   ========================================================================== */

@media (max-width: 992px) {
    .edge-grid      { grid-template-columns: repeat(2, 1fr); gap: 1.25rem; }
    .clients-grid   { grid-template-columns: repeat(3, 1fr); gap: 1rem; }
    .intro-stats    { gap: 1.5rem; }
    .intro-stats .stat-item h4 { font-size: 1.8rem; }
    .approach-grid  { grid-template-columns: repeat(2, 1fr); gap: 1.25rem; }
    .hiw-grid       { gap: 2rem 1.5rem; }
    .portfolio-stats        { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; }
    .feature-case           { grid-template-columns: 1fr; }
    .feature-case-media     { min-height: 340px; }
    .feature-case-body      { padding: 2.5rem; }
    .case-grid              { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 768px) {
    section          { padding: 3.5rem 0; }
    .section-tight   { padding: 2rem 0; }

    .hero-full .display { font-size: clamp(2.2rem, 10vw, 3.5rem); }
    .hero-full .sub     { font-size: 1rem; }

    .invoicing-hero,
    .mobile-hero,
    .b2b-hero,
    .services-hero,
    .training-hero,
    .careers-hero,
    .clientele-hero,
    .consulting-hero,
    .erp-hero,
    .contact-hero,
    .intro-section       { padding: 3rem 1rem 2rem; }

    .invoicing-hero .display,
    .mobile-hero .display,
    .b2b-hero .display,
    .services-hero .display,
    .training-hero .display,
    .careers-hero .display,
    .clientele-hero .display,
    .consulting-hero .display,
    .erp-hero .display,
    .contact-hero .display,
    .intro-section .display { font-size: clamp(2rem, 6vw, 2.6rem); }

    .invoicing-hero .sub,
    .mobile-hero .sub,
    .b2b-hero .sub,
    .services-hero .sub,
    .training-hero .sub,
    .careers-hero .sub,
    .clientele-hero .sub,
    .consulting-hero .sub,
    .erp-hero .sub,
    .contact-hero .sub,
    .intro-section .sub { font-size: 1rem; }

    .process-step              { gap: 1rem; padding: 1rem 0; }
    .process-step .step-number { font-size: 1.5rem; min-width: 35px; }

    .hero-phone-links .btn { font-size: .65rem; padding: .5rem 1rem; }

    .cta { padding: 2.5rem 1.5rem; }

    /* Cards */
    .pricing-card,
    .service-card,
    .b2b-service-card,
    .source-card,
    .infra-card,
    .course-card,
    .contact-info-card,
    .contact-form-card,
    .map-card { padding: 1.5rem; }

    /* Clients */
    .clients-grid      { grid-template-columns: repeat(2, 1fr); gap: .8rem; }
    .client-logo-wrap  { width: 64px; height: 64px; }
    .client-initials   { font-size: 1.1rem; }
    .client-name       { font-size: .7rem; }

    .stat-item h4 { font-size: 1.5rem; }

    /* Marquee */
    .marquee-track .marquee-item img    { height: 35px; }
    .marquee-track > span:not(.marquee-item) {
        font-size: 1.2rem;
        padding: 0 1.2rem;
        gap: 1.5rem;
    }

    /* How it works */
    .hiw-grid                  { grid-template-columns: 1fr; gap: .5rem; }
    .hiw-step                  { padding: 1rem .25rem; border-bottom: 1px solid var(--line); gap: 1rem; }
    .hiw-step:last-child       { border-bottom: none; }
    .hiw-step-number span      { font-size: 1.5rem; }
    .hiw-step-line             { min-height: 2rem; }
    .hiw-step-title            { font-size: 1.15rem; }
    .hiw-step-desc             { font-size: .85rem; }
    .bg-ink .hiw-step          { border-bottom-color: var(--line-invert); }

    /* Timeline */
    .timeline                  { padding-left: 1rem; }
    .timeline-item .year       { min-width: 60px; font-size: 1.4rem; }
}

@media (max-width: 640px) {
    .floating-btn { width: 40px; height: 40px; font-size: 1.1rem; right: 14px; }
    .btn-whatsapp { bottom: 66px; }
    .btn-backtop  { bottom: 14px; }

    /* Modal mobile */
    .modal-body                       { padding: 1rem .75rem .75rem; }
    .modal-body .form-control-custom  { padding: .5rem .7rem; font-size: .9rem; }
    .modal-body .form-label           { font-size: .6rem; }
    .modal-body .service-check-grid   { grid-template-columns: 1fr; gap: .3rem; }
    .modal-body .service-check-item   { font-size: .85rem; padding: .2rem .3rem; }
    .modal-body .row.g-2.g-md-3       { --bs-gutter-x: .5rem; --bs-gutter-y: .5rem; }
    .modal-header                     { padding: 1rem .75rem .75rem; }
    .modal-header .modal-title        { font-size: 1.3rem; }
    .modal-header .modal-subtitle     { font-size: .75rem; }
    .modal-footer                     { padding: .05rem .5rem .08rem; flex-direction: column; align-items: stretch; gap: .3rem; }
    .modal-footer.footer-buttons-visible { padding: .5rem .5rem .75rem; }
    .footer-message                   { font-size: .6rem; }
    .footer-buttons .btn              { width: 100%; justify-content: center; font-size: .7rem; padding: .5rem 1rem; }
    .status-message                   { font-size: .75rem; padding: .2rem 0; }

    .intro-stats { gap: 1rem; }
    .case-grid              { grid-template-columns: 1fr; }
    .portfolio-stats        { grid-template-columns: 1fr 1fr; gap: 1rem; }
    .portfolio-stats .stat-item h4 { font-size: 2rem; }
    .feature-case-body      { padding: 2rem 1.5rem; }
    .feature-case-body h3   { font-size: 1.5rem; }
    .feature-case-metrics   { grid-template-columns: 1fr 1fr; gap: 1rem; }
    .metric-value           { font-size: 1.6rem; }
}

@media (max-width: 576px) {
    .approach-grid           { grid-template-columns: 1fr; gap: 1rem; }
    .approach-card-body      { padding: 1.5rem 1.25rem; }
    .approach-card-image     { aspect-ratio: 4 / 3; }
    .approach-card-number    { font-size: 2rem; }
    .approach-card-title     { font-size: 1.1rem; }
    .approach-card-desc      { font-size: .85rem; }
}

@media (max-width: 480px) {
    .clients-grid       { gap: .6rem; }
    .client-logo-wrap   { width: 56px; height: 56px; }
    .client-item        { padding: .5rem .25rem; }

    .hiw-step           { flex-direction: row; gap: .75rem; padding: .75rem .25rem; }
    .hiw-step-number    { width: 2.4rem; }
    .hiw-step-number span { font-size: 1.3rem; }
    .hiw-step-title     { font-size: 1rem; }
    .hiw-step-tagline   { font-size: .6rem; }
    .hiw-step-desc      { font-size: .8rem; }
}

@media (max-width: 420px) {
    .floating-btn { width: 36px; height: 36px; font-size: 1rem; right: 10px; }
    .btn-whatsapp { bottom: 56px; }
    .btn-backtop  { bottom: 10px; }
}

@media (max-width: 400px) {
    .modal-body                       { padding: .75rem .5rem .5rem; }
    .modal-header                     { padding: .75rem .5rem .5rem; }
    .modal-footer                     { padding: .03rem .3rem .05rem; }
    .modal-footer.footer-buttons-visible { padding: .4rem .3rem .6rem; }
    .modal-body .form-control-custom  { padding: .4rem .6rem; font-size: .85rem; }
    .modal-body .service-check-item   { font-size: .8rem; }
}

/* ==========================================================================
   END OF FILE
   ========================================================================== */