/* ========================================
   gabs.feedback — styles.css
   Kintsugi as Information Architecture
   ======================================== */

/* --- CSS Custom Properties --- */
:root {
    --bisque-paper: #F4EDE4;
    --kiln-ash: #2B2520;
    --kintsugi-gold: #C4956A;
    --dried-slip: #8B7D6B;
    --terracotta-pulse: #B85C4D;
    --celadon-wash: #5B7E8C;
    --carbon-black: #1A1714;
    --warm-parchment: #D4C4A8;
    --unfired-clay: #4A433B;
    --raw-bisque: #E8E0D4;

    --font-display: 'Cormorant Garamond', Georgia, serif;
    --font-body: 'IBM Plex Sans', system-ui, sans-serif;
    --font-annotation: 'Caveat', cursive;

    --ease-natural: cubic-bezier(0.25, 0.46, 0.45, 0.94);

    --scroll-progress: 0;
}

/* --- Reset & Base --- */
*, *::before, *::after {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    scroll-behavior: smooth;
    overflow-x: hidden;
}

body {
    background-color: var(--bisque-paper);
    color: var(--unfired-clay);
    font-family: var(--font-body);
    font-weight: 300;
    font-size: clamp(0.95rem, 1.8vw, 1.15rem);
    line-height: 1.75;
    letter-spacing: 0.005em;
    overflow-x: hidden;
    position: relative;
}

/* --- SVG Definitions (hidden) --- */
.svg-defs {
    position: absolute;
    width: 0;
    height: 0;
    overflow: hidden;
}

/* --- Clay Texture Overlay --- */
#clay-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    pointer-events: none;
    z-index: 1000;
    opacity: 0.04;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' seed='42'/%3E%3C/filter%3E%3Crect width='400' height='400' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
    background-size: 400px 400px;
    mix-blend-mode: multiply;
}

/* --- Crack Network (full page SVG) --- */
#crack-network {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    pointer-events: none;
    z-index: 2;
    opacity: 0.35;
}

/* --- Graph Paper Ghost Grid --- */
#graph-paper-grid {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    pointer-events: none;
    z-index: 1;
    opacity: 0;
    transition: opacity 1.5s var(--ease-natural);
    background-image:
        linear-gradient(var(--dried-slip) 1px, transparent 1px),
        linear-gradient(90deg, var(--dried-slip) 1px, transparent 1px),
        linear-gradient(var(--dried-slip) 1px, transparent 1px),
        linear-gradient(90deg, var(--dried-slip) 1px, transparent 1px);
    background-size:
        100px 100px,
        100px 100px,
        20px 20px,
        20px 20px;
    background-position: 0 0, 0 0, 0 0, 0 0;
}

#graph-paper-grid.visible {
    opacity: 0.035;
}

#graph-paper-grid.minor-visible {
    opacity: 0.06;
}

/* --- Scroll Progress Indicator --- */
#scroll-indicator {
    position: fixed;
    right: 24px;
    top: 50%;
    transform: translateY(-50%) rotate(calc(var(--scroll-progress) * 360deg));
    z-index: 999;
    opacity: 0;
    transition: opacity 0.8s var(--ease-natural), transform 0.3s var(--ease-natural);
}

#scroll-indicator.visible {
    opacity: 0.8;
}

/* --- Sections --- */
.section {
    position: relative;
    width: 100%;
    overflow: hidden;
}

.section--light {
    background-color: var(--bisque-paper);
}

.section--dark {
    background-color: var(--carbon-black);
    position: relative;
}

/* --- Opening Sequence --- */
#opening {
    height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
    z-index: 10;
}

#impact-crack {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 80vw;
    max-width: 1000px;
    height: auto;
    z-index: 5;
}

#impact-crack path {
    transition: stroke 800ms var(--ease-natural);
}

#impact-crack.repaired path {
    stroke: var(--kintsugi-gold);
}

#impact-point {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 50vw;
    max-width: 500px;
    height: 50vw;
    max-height: 500px;
    opacity: 0.15;
    z-index: 3;
}

#title-block {
    position: relative;
    z-index: 20;
    text-align: center;
    margin-top: 40px;
}

#site-title {
    font-family: var(--font-display);
    font-weight: 300;
    font-size: 4rem;
    color: var(--kiln-ash);
    letter-spacing: 0.01em;
    line-height: 1.05;
}

#site-title .letter {
    display: inline-block;
    opacity: 0;
    transform: translateY(12px);
    transition: opacity 400ms var(--ease-natural), transform 400ms var(--ease-natural);
}

#site-title .letter.revealed {
    opacity: 1;
    transform: translateY(0);
}

#subtitle {
    font-family: var(--font-annotation);
    font-weight: 400;
    font-size: clamp(1rem, 2vw, 1.4rem);
    color: var(--dried-slip);
    opacity: 0;
    transform: rotate(-1deg);
    transition: opacity 800ms var(--ease-natural) 200ms;
    margin-top: 16px;
}

#subtitle.visible {
    opacity: 0.4;
}

/* --- Fracture Descent Sections --- */
#fracture-descent-1 {
    min-height: 250vh;
    padding: 15vh 0;
    position: relative;
    z-index: 10;
}

#fracture-descent-2 {
    min-height: 250vh;
    padding: 15vh 0;
    position: relative;
    z-index: 10;
}

/* --- Content Blocks --- */
.content-block {
    max-width: 520px;
    padding: 32px 28px 32px 36px;
    position: relative;
    margin-bottom: 12vh;
    border-left: 1px solid var(--kintsugi-gold);
    opacity: 0;
    transform: translateY(40px);
    transition: opacity 600ms var(--ease-natural), transform 600ms var(--ease-natural);
}

.content-block.in-view {
    opacity: 1;
    transform: translateY(0) rotate(var(--block-tilt, 0deg));
}

.fracture-block {
    margin-left: var(--block-offset, 20%);
}

/* --- Headings --- */
.heading-display {
    font-family: var(--font-display);
    font-size: clamp(2.2rem, 5vw, 4.5rem);
    letter-spacing: 0.01em;
    line-height: 1.05;
    margin-bottom: 20px;
}

.heading-light {
    font-weight: 300;
    color: var(--kiln-ash);
}

.heading-dark {
    font-weight: 700;
    color: var(--raw-bisque);
}

/* --- Body Text --- */
.body-text {
    font-family: var(--font-body);
    font-weight: 300;
    font-size: clamp(0.95rem, 1.8vw, 1.15rem);
    line-height: 1.75;
    letter-spacing: 0.005em;
    color: var(--unfired-clay);
}

.body-text--dark {
    color: var(--warm-parchment);
}

/* --- Annotation / Aside Text --- */
.annotation-text {
    font-family: var(--font-annotation);
    font-weight: 400;
    font-size: clamp(1rem, 2vw, 1.4rem);
    color: var(--dried-slip);
}

.aside {
    display: block;
    margin-top: 16px;
    transform: rotate(-1deg);
    opacity: 0.65;
}

.aside--dark {
    color: var(--celadon-wash);
    opacity: 0.7;
}

/* --- Dark Section Content --- */
.dark-block {
    border-left-color: var(--kintsugi-gold);
}

.dark-block .heading-display {
    color: var(--raw-bisque);
}

/* --- Feedback Loop Diagrams --- */
.feedback-diagram {
    margin: 8vh 0;
    margin-left: 10%;
    opacity: 0;
    transition: opacity 1.2s var(--ease-natural);
}

.feedback-diagram.in-view {
    opacity: 0.6;
}

.feedback-diagram.diagram-right {
    margin-left: auto;
    margin-right: 10%;
    text-align: right;
}

.feedback-diagram.diagram-center {
    margin-left: auto;
    margin-right: auto;
    text-align: center;
    width: fit-content;
}

.feedback-diagram svg {
    max-width: 100%;
}

/* Slow rotation on feedback arrows */
.feedback-diagram .rotating-arrow {
    transform-origin: center;
    animation: slow-rotate 20s linear infinite;
}

@keyframes slow-rotate {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

/* --- Repair Zone Spacers --- */
.repair-zone-spacer {
    min-height: 30vh;
    position: relative;
}

/* --- Gold Seam Lines --- */
.gold-seam-line {
    width: 100%;
    height: 3px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--kintsugi-gold) 15%,
        var(--kintsugi-gold) 85%,
        transparent 100%
    );
    opacity: 0.8;
}

/* --- Repair Seam Sections --- */
#repair-seam-1,
#repair-seam-2 {
    min-height: 120vh;
    padding: 10vh 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8vh;
    position: relative;
    z-index: 10;
}

/* --- Shard Field --- */
.shard-field {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 1;
}

.shard {
    position: absolute;
    left: var(--shard-x);
    top: var(--shard-y);
    transform: rotate(var(--shard-rotation));
    animation: shard-spin var(--shard-speed) linear infinite;
    opacity: 0.7;
}

@keyframes shard-spin {
    from { transform: rotate(var(--shard-rotation)); }
    to { transform: rotate(calc(var(--shard-rotation) + 360deg)); }
}

/* --- Thumbprint Watermarks --- */
.thumbprint {
    position: absolute;
    pointer-events: none;
    z-index: 0;
}

#thumbprint-1 {
    top: 20%;
    right: 8%;
}

#thumbprint-2 {
    top: 15%;
    left: 5%;
}

#thumbprint-3 {
    bottom: 30%;
    right: 12%;
}

/* --- Resolution Section --- */
#resolution {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    z-index: 10;
}

#convergence-bowl {
    position: relative;
    width: 40vw;
    max-width: 500px;
    height: 40vw;
    max-height: 500px;
    display: flex;
    align-items: center;
    justify-content: center;
}

#bowl-svg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

#bowl-text {
    position: relative;
    z-index: 5;
    text-align: center;
}

#gabs-character {
    font-family: var(--font-display);
    font-weight: 300;
    font-size: clamp(4rem, 8vw, 6rem);
    color: var(--kiln-ash);
    display: block;
    line-height: 1;
    opacity: 0;
    transition: opacity 1.5s var(--ease-natural);
}

#gabs-character.visible {
    opacity: 1;
}

#final-statement {
    font-family: var(--font-body);
    font-weight: 300;
    font-size: clamp(0.8rem, 1.2vw, 0.95rem);
    color: var(--dried-slip);
    margin-top: 20px;
    opacity: 0;
    transition: opacity 1.5s var(--ease-natural) 400ms;
}

#final-statement.visible {
    opacity: 0.7;
}

/* --- Scroll Sentinels --- */
.scroll-sentinel {
    position: absolute;
    width: 1px;
    height: 1px;
    pointer-events: none;
    visibility: hidden;
}

/* --- Responsive --- */
@media (max-width: 768px) {
    .fracture-block {
        margin-left: 5% !important;
        max-width: 90%;
    }

    .feedback-diagram {
        margin-left: 5%;
    }

    .feedback-diagram.diagram-right {
        margin-right: 5%;
    }

    #convergence-bowl {
        width: 70vw;
        height: 70vw;
    }

    #site-title {
        font-size: 2.8rem;
    }

    #impact-point {
        width: 80vw;
        height: 80vw;
    }

    .shard {
        opacity: 0.5;
    }
}

@media (max-width: 480px) {
    .content-block {
        padding: 20px 16px 20px 24px;
    }

    #site-title {
        font-size: 2.2rem;
    }

    .heading-display {
        font-size: clamp(1.8rem, 5vw, 2.5rem);
    }
}

/* --- Section transition backgrounds (dark fade) --- */
.section--dark::before {
    content: '';
    position: absolute;
    top: -50vh;
    left: 0;
    width: 100%;
    height: 50vh;
    background: linear-gradient(
        to bottom,
        transparent,
        var(--carbon-black)
    );
    pointer-events: none;
    z-index: -1;
}

.section--dark::after {
    content: '';
    position: absolute;
    bottom: -50vh;
    left: 0;
    width: 100%;
    height: 50vh;
    background: linear-gradient(
        to top,
        transparent,
        var(--carbon-black)
    );
    pointer-events: none;
    z-index: -1;
}

/* --- Crack line glow in dark sections --- */
.section--dark .crack-line {
    stroke: var(--kintsugi-gold);
    stroke-opacity: 0.8;
    stroke-width: 2;
}

/* --- Selection styles --- */
::selection {
    background-color: var(--kintsugi-gold);
    color: var(--kiln-ash);
}
