/* ═══════════════════════════════════════════════════════════════════════════════
   T.E. GRID SYNTHESIS - DESIGN SYSTEM
   ═══════════════════════════════════════════════════════════════════════════════ */

:root {
    /* ───────────────────────────────────────────────────────────────────────────
       COLOR PALETTE - Inspired by Teenage Engineering & Nothing aesthetics
       ─────────────────────────────────────────────────────────────────────────── */

    /* Base Colors */
    --color-pure-white: #ffffff;
    --color-pure-black: #000000;
    --color-background-main: #f0f0f0;
    --color-background-surface: #ffffff;

    /* Grays - Carefully balanced for readability and hierarchy */
    --color-gray-100: #f8f8f8;
    --color-gray-200: #e8e8e8;
    --color-gray-300: #d0d0d0;
    --color-gray-400: #a8a8a8;
    --color-gray-500: #808080;
    --color-gray-600: #606060;
    --color-gray-700: #404040;
    --color-gray-800: #202020;
    --color-gray-900: #101010;

    /* Text Colors */
    --color-text-primary: var(--color-pure-black);
    --color-text-secondary: var(--color-gray-600);
    --color-text-tertiary: var(--color-gray-500);

    /* Teenage Engineering Inspired Color Scheme */
    --color-te-orange: #ff6600;
    /* Classic TE orange */
    --color-te-orange-dark: #cc5200;
    /* Darker orange for indicators */
    --color-te-yellow: #ffcc00;
    /* TE yellow for audio signals */
    --color-te-yellow-dark: #e6b800;
    /* Darker yellow */
    --color-te-blue: #0066ff;
    /* Control signal blue */
    --color-te-blue-dark: #0052cc;
    /* Darker blue */
    --color-te-red: #ff3366;
    /* Error/warning red */
    --color-te-red-dark: #cc1a4d;
    /* Darker red */
    --color-te-green: #00cc66;
    /* Success green */
    --color-te-green-dark: #00a352;
    /* Darker green */
    --color-te-purple: #9966ff;
    /* LFO/utility purple */
    --color-te-purple-dark: #7a4dcc;
    /* Darker purple */
    --color-te-pink: #ff6699;
    /* Effects/reverb pink */
    --color-te-pink-dark: #cc4d77;
    /* Darker pink */

    /* Legacy accent colors (mapped to TE scheme) */
    --color-accent-primary: var(--color-te-orange);
    --color-accent-secondary: var(--color-te-blue);
    --color-accent-success: var(--color-te-green);
    --color-accent-warning: var(--color-te-yellow);
    --color-accent-error: var(--color-te-red);

    /* Border Colors - Dark Gray Solid Lines */
    --color-border-light: var(--color-gray-600);
    --color-border-medium: var(--color-gray-700);
    --color-border-dark: var(--color-gray-800);

    /* Grid System */
    --color-grid-dot: var(--color-gray-300);

    /* Patch Cable Colors */
    --color-cable-audio: var(--color-te-yellow);
    /* Yellow for audio signals */
    --color-cable-cv: var(--color-te-blue);
    /* Blue for CV/control signals */

    /* ───────────────────────────────────────────────────────────────────────────
       CORNER PORT POSITIONING - Standardized positions for all corner elements
       ─────────────────────────────────────────────────────────────────────────── */

    --corner-port-distance: var(--space-2);
    /* Standard distance from edges */
    --corner-port-secondary-top: var(--space-5);
    /* For secondary ports like gate */

    /* ───────────────────────────────────────────────────────────────────────────
       PATCH PORT SIZING - Standardized sizes for different port types
       ─────────────────────────────────────────────────────────────────────────── */

    --patch-port-size: 12px;
    /* Standard audio/CV port size */
    --gate-port-size: 12px;
    /* Gate port size (same as standard) */

    /* ───────────────────────────────────────────────────────────────────────────
       WAVE VISUAL SIZING - Standardized dimensions for waveform visualizations
       ─────────────────────────────────────────────────────────────────────────── */

    --wave-visual-width: 60px;
    /* Standard width for wave displays */
    --wave-visual-height: 30px;
    /* Standard height for wave displays */

    /* ───────────────────────────────────────────────────────────────────────────
       KEYBOARD AREA SIZING - Standardized dimensions for bottom keyboard section
       ─────────────────────────────────────────────────────────────────────────── */

    --keyboard-height: 80px;
    /* Height of sticky keyboard area */

    /* ───────────────────────────────────────────────────────────────────────────
       SPACING SCALE - 8px base unit for perfect harmony
       ─────────────────────────────────────────────────────────────────────────── */

    --space-0: 0;
    --space-1: 0.125rem;
    /* 2px */
    --space-2: 0.25rem;
    /* 4px */
    --space-3: 0.5rem;
    /* 8px */
    --space-4: 0.75rem;
    /* 12px */
    --space-5: 1rem;
    /* 16px */
    --space-6: 1.25rem;
    /* 20px */
    --space-7: 1.5rem;
    /* 24px */
    --space-8: 2rem;
    /* 32px */
    --space-10: 2.5rem;
    /* 40px */
    --space-12: 3rem;
    /* 48px */
    --space-16: 4rem;
    /* 64px */
    --space-20: 5rem;
    /* 80px */
    --space-24: 6rem;
    /* 96px */

    /* ───────────────────────────────────────────────────────────────────────────
       TYPOGRAPHY SCALE - Modular scale for visual hierarchy
       ─────────────────────────────────────────────────────────────────────────── */

    --font-family-mono: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
    --font-family-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;

    --font-size-xs: 0.75rem;
    /* 12px */
    --font-size-sm: 0.875rem;
    /* 14px */
    --font-size-base: 1rem;
    /* 16px */
    --font-size-lg: 1.125rem;
    /* 18px */
    --font-size-xl: 1.25rem;
    /* 20px */
    --font-size-2xl: 1.5rem;
    /* 24px */
    --font-size-3xl: 1.875rem;
    /* 30px */
    --font-size-4xl: 2.25rem;
    /* 36px */

    --font-weight-light: 300;
    --font-weight-normal: 400;
    --font-weight-medium: 500;
    --font-weight-semibold: 600;
    --font-weight-bold: 700;

    --line-height-tight: 1.25;
    --line-height-normal: 1.5;
    --line-height-relaxed: 1.75;

    --letter-spacing-tight: -0.025em;
    --letter-spacing-normal: 0;
    --letter-spacing-wide: 0.025em;
    --letter-spacing-wider: 0.05em;
    --letter-spacing-widest: 0.1em;

    /* ───────────────────────────────────────────────────────────────────────────
       LAYOUT & SIZING - Consistent dimensions and constraints
       ─────────────────────────────────────────────────────────────────────────── */

    --border-radius-none: 0;
    --border-radius-sm: 0.125rem;
    /* 2px */
    --border-radius-base: 0.25rem;
    /* 4px */
    --border-radius-lg: 0.5rem;
    /* 8px */
    --border-radius-xl: 1rem;
    /* 16px */
    --border-radius-full: 9999px;

    --border-width-thin: 1px;
    --border-width-base: 2px;
    --border-width-thick: 4px;

    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
    --shadow-base: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
    --shadow-lg: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06);
    --shadow-xl: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05);

    --grid-size: 30px;
    --module-size-sm: 60px;
    --module-size-base: 90px;
    --module-size-lg: 120px;
    --module-size-xl: 180px;

    /* ───────────────────────────────────────────────────────────────────────────
       ANIMATION & TRANSITIONS - Smooth, purposeful motion
       ─────────────────────────────────────────────────────────────────────────── */

    --transition-fast: 150ms ease-out;
    --transition-base: 250ms ease-out;
    --transition-slow: 350ms ease-out;

    --ease-in: cubic-bezier(0.4, 0, 1, 1);
    --ease-out: cubic-bezier(0, 0, 0.2, 1);
    --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
}

/* CSS Reset */
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    user-select: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
}

/* Disable right-click context menu */
body {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

/* Base Typography and Body Styling */
body {
    font-family: var(--font-family-mono);
    background-color: var(--color-gray-300);
    line-height: var(--line-height-normal);
    color: var(--color-text-primary);
    height: 100vh;
    margin: 0;
    padding: 0;
}

/* Main container with max-width and centered layout */
.site-container {
    max-width: 500px;
    margin: 0 auto;
    background-color: var(--color-pure-white);
    background-image: radial-gradient(circle, var(--color-pure-black) 1px, transparent 1px);
    background-size: var(--grid-size) var(--grid-size);
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    padding-bottom: 20px;
    /* Push content up for footer */
}

/* Site Container Responsive Design */
@media (max-width: 520px) {
    .site-container {
        max-width: 100vw;
        margin: 0;
    }
    
    body {
        background-color: var(--color-pure-white);
    }
}

/* Header Styling - Module-like design with synth top panel feel */
header {
    background-color: var(--color-pure-white);
    color: var(--color-text-primary);
    padding: var(--space-8) var(--space-4);
    /* Increased vertical padding for synth-like height */
    margin: 0;
    border: var(--border-width-thin) solid var(--color-border-medium);
    border-bottom-width: var(--border-width-base);
    /* 2px bottom border like modules */
    border-radius: 0;
    /* No radius for full width */
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    z-index: 6000;
    min-height: 80px;
    /* Ensure consistent height like physical synth panel */
}

header h1 {
    font-size: var(--font-size-lg);
    font-weight: var(--font-weight-normal);
    letter-spacing: var(--letter-spacing-wider);
    color: var(--color-gray-500);
    margin: 0;
}

/* Header Navigation */
.header-nav {
    display: flex;
    gap: var(--space-6);
    align-items: center;
}

.nav-item {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wide);
    color: var(--color-pure-black);
    text-decoration: none;
    cursor: pointer;
    padding: var(--space-2) var(--space-3);
    border: var(--border-width-thin) solid transparent;
    transition: all var(--transition-fast);
}

.nav-item:hover {
    border-color: var(--color-pure-black);
    background-color: var(--color-pure-black);
    color: var(--color-pure-white);
}

/* Header Responsive Design */
@media (max-width: 640px) {
    header {
        flex-direction: column;
        gap: var(--space-4);
        padding: var(--space-6) var(--space-4);
        min-height: auto;
    }
    
    header h1 {
        font-size: var(--font-size-base);
        text-align: center;
    }
    
    .header-nav {
        gap: var(--space-4);
        justify-content: center;
        flex-wrap: wrap;
    }
    
    .nav-item {
        font-size: var(--font-size-xs);
        padding: var(--space-2);
        min-width: auto;
    }
}


.watusi-link {
    color: inherit;
    text-decoration: none;
}

.watusi-link:hover {
    text-decoration: underline;
}

/* Add Module Button */
.add-module-button {
    display: block;
    margin: var(--space-4) auto;
    background-color: var(--color-pure-white);
    color: var(--color-pure-black);
    border: var(--border-width-thin) solid var(--color-pure-black);
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xl);
    font-weight: var(--font-weight-normal);
    padding: var(--space-3) var(--space-4);
    cursor: pointer;
    transition: all var(--transition-fast);
    width: 97px;
    /* 1.618 golden ratio */
    height: 60px;
    border-radius: 0;
}

.add-module-button:hover {
    background-color: var(--color-pure-black);
    color: var(--color-pure-white);
}

/* Module Selection Menu */
.module-selection-menu {
    background-color: var(--color-pure-black);
    border: 2px solid var(--color-pure-black);
    font-family: var(--font-family-mono);
    font-size: var(--font-size-small);
    font-weight: var(--font-weight-bold);
    letter-spacing: var(--letter-spacing-wider);
    z-index: 1001;
    /* Above code panel */
    width: 100vw;
    height: 80vh;
    /* Takes up 80% of viewport height */
    left: 0 !important;
    bottom: 0 !important;
    position: fixed !important;
    transform: translateY(100%);
    transition: transform 0.3s ease-in-out;
    box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.3);
    overflow-y: auto;
    /* Allow scrolling if content is too tall */
}

.module-selection-menu.show {
    transform: translateY(0);
}

.module-selection-title {
    background-color: var(--color-pure-black);
    color: var(--color-pure-white);
    padding: var(--space-3);
    text-align: center;
    border-bottom: 1px solid var(--color-gray-600);
    font-weight: var(--font-weight-bold);
}

.module-selection-option {
    background-color: var(--color-pure-black);
    color: var(--color-pure-white);
    padding: var(--space-3);
    cursor: pointer;
    border-bottom: 1px solid var(--color-gray-700);
    transition: all var(--transition-fast);
    text-align: center;
}

.module-selection-option:last-child {
    border-bottom: none;
}

.module-selection-option:hover {
    background-color: var(--color-gray-800);
    color: var(--color-te-orange);
}

.module-selection-option.cancel-option {
    border-top: 4px solid var(--color-te-orange);
    color: var(--color-gray-400);
}

.module-selection-option.cancel-option:hover {
    background-color: var(--color-gray-800);
    color: var(--color-te-red);
}

/* EQ8 Module Styling - Ableton-style 8-band equalizer */
.eq8-module {
    min-width: 400px;
    /* Wider to accommodate 8 EQ bands */
}

.eq8-module .module-controls {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr);
    /* grid-template-rows: repeat(3, 1fr); */
    gap: 0;
    padding: 0;
}

/* EQ band controls - first 8 items in grid */
.eq8-module .control-group:nth-child(1),
.eq8-module .control-group:nth-child(2),
.eq8-module .control-group:nth-child(3),
.eq8-module .control-group:nth-child(4),
.eq8-module .control-group:nth-child(5),
.eq8-module .control-group:nth-child(6),
.eq8-module .control-group:nth-child(7),
.eq8-module .control-group:nth-child(8) {
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    border-bottom: var(--border-width-thin) solid var(--color-pure-black);
}

/* Remove right borders from 4th and 8th columns */
.eq8-module .control-group:nth-child(4),
.eq8-module .control-group:nth-child(8) {
    border-right: none;
}

/* Ensure EQ8 module itself has proper right border */
.eq8-module {
    border-right: var(--border-width-thin) solid var(--color-border-medium);
}

/* Remove bottom borders from second row (bands 5-8) */
.eq8-module .control-group:nth-child(5),
.eq8-module .control-group:nth-child(6),
.eq8-module .control-group:nth-child(7),
.eq8-module .control-group:nth-child(8) {
    border-bottom: none;
}

/* Spectrum visualizer container - 9th item, spans 3 columns */
.eq8-module .eq8-visual-container {
    grid-column: 1 / 4;
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    border-top: 1px solid;
    background-color: var(--color-pure-white);
    display: flex;
    align-items: center;
    justify-content: center;
}

.eq8-visual-container .wave-visual {
    width: 100%;
    height: 100%;
    background-color: var(--color-pure-white);
    background-image:
        /* 8 vertical band columns as subtle gray bars */
        linear-gradient(90deg,
            transparent 0%, transparent 12.5%,
            rgba(128, 128, 128, 0.1) 12.5%, rgba(128, 128, 128, 0.1) 25%,
            transparent 25%, transparent 37.5%,
            rgba(128, 128, 128, 0.1) 37.5%, rgba(128, 128, 128, 0.1) 50%,
            transparent 50%, transparent 62.5%,
            rgba(128, 128, 128, 0.1) 62.5%, rgba(128, 128, 128, 0.1) 75%,
            transparent 75%, transparent 87.5%,
            rgba(128, 128, 128, 0.1) 87.5%, rgba(128, 128, 128, 0.1) 100%);
    border: none;
    margin: 0;
    position: relative;
    overflow: hidden;
}

/* Master gain knob - 10th item, last column */
.eq8-module .control-group:nth-child(10) {
    border-top: 1px solid;
}

/* EQ knob styling - Blue/cyan for EQ controls */
.synth-knob.eq-knob {
    background-color: var(--color-te-blue);
    border-color: var(--color-pure-black);
}

.synth-knob.eq-knob:hover {
    background-color: var(--color-pure-black);
    border-color: var(--color-pure-black);
}

.synth-knob.eq-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.synth-knob.eq-knob .knob-indicator {
    background-color: var(--color-te-blue-dark);
}

/* Mixer Module Styling */
.mixer-module {
    min-width: 400px;
    /* Wider to accommodate 8 channels */
}

.mixer-module .mixer-controls {
    display: grid !important;
    grid-template-columns: 1fr 1fr 1fr 1fr;

    gap: 0;
    padding: 0;
}

/* Channel strips - all 8 channel knobs get borders */
.mixer-module .control-group:nth-child(1),
.mixer-module .control-group:nth-child(2),
.mixer-module .control-group:nth-child(3),
.mixer-module .control-group:nth-child(4),
.mixer-module .control-group:nth-child(5),
.mixer-module .control-group:nth-child(6),
.mixer-module .control-group:nth-child(7),
.mixer-module .control-group:nth-child(8) {
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    border-bottom: var(--border-width-thin) solid var(--color-pure-black);
}

/* Remove right borders from 4th and 8th columns (rightmost in each row) */
.mixer-module .control-group:nth-child(4),
.mixer-module .control-group:nth-child(8) {
    border-right: none;
}

/* Ensure mixer module itself has proper right border */
.mixer-module {
    border-right: var(--border-width-thin) solid var(--color-border-medium);
}

/* Remove bottom borders from second row (channels 5-8) */
.mixer-module .control-group:nth-child(5),
.mixer-module .control-group:nth-child(6),
.mixer-module .control-group:nth-child(7),
.mixer-module .control-group:nth-child(8) {
    border-bottom: none;
}

/* Visual container - 9th item, spans 3 columns */
.mixer-module .mixer-visual-container {
    grid-column: 1 / 4;
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    border-top: 1px solid;
    background-color: var(--color-pure-white);
    display: flex;
    align-items: center;
    justify-content: center;
}

.mixer-visual-container .wave-visual {
    width: 100%;
    height: 100%;
    background-color: var(--color-pure-white);
    border: none;
    margin: 0;
}

/* Master knob - 10th item, last column */
.mixer-module .control-group:nth-child(10) {
    border-top: 1px solid;
}

/* Mixer channel input ports positioned in corners */
.mixer-module .control-group {
    position: relative;
}

.mixer-module .control-group:nth-child(-n+8) .patch-port {
    position: absolute;
    top: var(--corner-port-distance);
    left: var(--corner-port-distance);
    z-index: 100;
}

/* Mixer Knob Styling - Green for mixer channels */
.synth-knob.mixer-knob {
    background-color: var(--color-te-green);
    border-color: var(--color-pure-black);
}

.synth-knob.mixer-knob:hover {
    background-color: var(--color-pure-black);
    border-color: var(--color-pure-black);
}

.synth-knob.mixer-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.synth-knob.mixer-knob .knob-indicator {
    background-color: var(--color-te-green-dark);
}

/* Footer Styling - Branding */
#app-footer {
    height: 20px;
    background-color: var(--color-pure-white);
    color: var(--color-text-secondary);
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    padding: 0 var(--space-4);
    display: flex;
    align-items: center;
    justify-content: flex-end;
    border-top: var(--border-width-thin) solid var(--color-border-medium);
    position: fixed;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 100%;
    max-width: 500px;
    border-left: var(--border-width-thin) solid var(--color-border-medium);
    border-right: var(--border-width-thin) solid var(--color-border-medium);
    z-index: 8000;
    /* Below keyboard and code panel */
}

/* Footer Responsive Design */
@media (max-width: 520px) {
    #app-footer {
        left: 0;
        right: 0;
        max-width: 100vw;
        transform: none;
        border-left: none;
        border-right: none;
    }
}

/* Main App Container - Primary Work Surface */
#app-container {
    flex: 1;
    padding: 0;
    /* No padding for full width */
    overflow-y: auto;
    min-height: 0;
}

/* Scroll Spacer - Ensures content can scroll past keyboard */
.scroll-spacer {
    height: calc(var(--keyboard-height) + var(--space-24));
    flex-shrink: 0;
}

/* ═══════════════════════════════════════════════════════════════════════════════
   PATCH PORT STYLES
   ═══════════════════════════════════════════════════════════════════════════════ */

/* Patch Port Hover Effects */
.patch-port {
    width: var(--patch-port-size);
    height: var(--patch-port-size);
    border-radius: var(--border-radius-full);
    border: var(--border-width-thin) solid;
    flex-shrink: 0;
    cursor: pointer;
}

/* .patch-port:hover {
    transform: scale(1.1);
} */

/* ═══════════════════════════════════════════════════════════════════════════════
   CODE OUTPUT PANEL - DARK CONTRAST DESIGN
   ═══════════════════════════════════════════════════════════════════════════════ */

#code-output-panel {
    position: fixed;
    bottom: calc(var(--keyboard-height) + 20px);
    /* Above keyboard + footer */
    left: 50%;
    transform: translateX(-50%);
    /* Center horizontally */
    width: 100%;
    max-width: 500px;
    /* Match site container max-width */
    background-color: var(--color-background-surface);
    border-top: var(--border-width-thin) solid var(--color-pure-black);
    border-left: var(--border-width-thin) solid var(--color-border-medium);
    border-right: var(--border-width-thin) solid var(--color-border-medium);
    z-index: 1200;
    /* Above keyboard and footer */
    transition: transform var(--transition-base);
}

#code-output-panel.collapsed {
    transform: translateX(-50%) translateY(calc(100% - 48px));
}

/* Code Panel Responsive Design */
@media (max-width: 520px) {
    #code-output-panel {
        left: 0;
        right: 0;
        max-width: 100vw;
        transform: none;
        border-left: none;
        border-right: none;
    }
    
    #code-output-panel.collapsed {
        transform: translateY(calc(100% - 48px));
    }
}

/* Code Toggle Tab */
.code-toggle-tab {
    height: 48px;
    background-color: var(--color-background-surface);
    border-bottom: var(--border-width-thin) solid var(--color-pure-black);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    cursor: pointer;
    transition: all var(--transition-fast);
    user-select: none;
}

.code-toggle-tab:hover {
    background-color: var(--color-gray-100);
}

.code-toggle-text {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wider);
    color: var(--color-text-primary);
}

.code-toggle-icon {
    font-size: var(--font-size-sm);
    color: var(--color-text-secondary);
    transition: transform var(--transition-fast);
}

#code-output-panel:not(.collapsed) .code-toggle-icon {
    transform: rotate(180deg);
}

/* Code Panel Content */
.code-panel-content {
    padding: var(--space-6);
    background-color: var(--color-background-surface);
}

.code-panel-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: var(--space-4);
}

.code-panel-title {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-sm);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wider);
    color: var(--color-text-primary);
    margin: 0;
}

.copy-code-button {
    background-color: var(--color-te-orange);
    border: var(--border-width-base) solid var(--color-pure-black);
    border-radius: var(--border-radius-base);
    color: var(--color-pure-white);
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wide);
    padding: var(--space-2) var(--space-4);
    cursor: pointer;
    transition: all var(--transition-fast);
}

.copy-code-button:hover {
    background-color: var(--color-te-orange-dark);
    transform: translateY(-1px);
}

.copy-code-button:active {
    transform: translateY(0);
}

#code-display {
    width: 100%;
    height: 300px;
    background-color: var(--color-background-surface);
    border: none;
    border-radius: 0;
    color: var(--color-text-primary);
    font-family: var(--font-family-mono);
    font-size: var(--font-size-sm);
    line-height: var(--line-height-relaxed);
    padding: var(--space-4);
    resize: vertical;
    outline: none;
    white-space: pre;
    overflow-wrap: normal;
    overflow-x: auto;
}


/* ═══════════════════════════════════════════════════════════════════════════════
   MINIMALIST SCROLLBAR STYLING - T.E. AESTHETIC
   ═══════════════════════════════════════════════════════════════════════════════ */


/* Sticky Keyboard Container - Bottom fixed area */
.keyboard-container {
    position: fixed;
    bottom: 20px;
    /* Above footer */
    left: 50%;
    transform: translateX(-50%);
    /* Center horizontally */
    width: 100%;
    max-width: 500px;
    /* Match site container max-width */
    height: var(--keyboard-height);
    background-color: var(--color-background-surface);
    border-top: var(--border-width-thin) solid var(--color-border-medium);
    border-left: var(--border-width-thin) solid var(--color-border-medium);
    border-right: var(--border-width-thin) solid var(--color-border-medium);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    z-index: 9000;
    /* Above footer, below code panel */
}

/* Keyboard Responsive Design */
@media (max-width: 520px) {
    .keyboard-container {
        left: 0;
        right: 0;
        max-width: 100vw;
        transform: none;
        border-left: none;
        border-right: none;
    }
}

.test-note-button {
    background-color: var(--color-te-green);
    border: var(--border-width-base) solid var(--color-pure-black);
    border-radius: var(--border-radius-base);
    color: var(--color-pure-white);
    font-family: var(--font-family-mono);
    font-size: var(--font-size-sm);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wider);
    padding: var(--space-4) var(--space-8);
    cursor: pointer;
    transition: all var(--transition-fast);
}

.test-note-button:hover {
    background-color: var(--color-te-green-dark);
    border-color: var(--color-pure-black);
    transform: translateY(-1px);
}

.test-note-button:active {
    transform: translateY(0);
}

/* Virtual Keyboard - 8 white keys with calculated black key positions */
.virtual-keyboard {
    display: flex;
    width: 100%;
    height: 100%;
    gap: 0;
    position: relative;
    /* For absolute positioning of black keys */
}

.key {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    cursor: pointer;
    transition: all var(--transition-fast);
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    user-select: none;
    -webkit-user-select: none;
}

.white-key {
    flex: 1;
    /* Evenly divide container */
    background-color: var(--color-pure-white);
    color: var(--color-pure-black);
    border: var(--border-width-thin) solid var(--color-pure-black);
    border-right: none;
    /* No right border to avoid doubling */
    min-height: 60px;
    z-index: 1;
    /* Below black keys */
}

.white-key:last-child {
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    /* Restore right border for last key */
}

.black-key {
    position: absolute;
    top: 0;
    background-color: var(--color-pure-black);
    color: var(--color-pure-white);
    border: var(--border-width-thin) solid var(--color-pure-black);
    border-radius: var(--border-radius-base);
    width: 8%;
    /* Calculated width for black keys */
    height: 65%;
    /* Shorter than white keys */
    transform: none;
    /* Direct positioning */
    z-index: 2;
    /* Above white keys */
    font-size: 10px;
}

.white-key.pressed,
.white-key:active {
    background-color: var(--color-gray-200);
}

.white-key:hover {
    background-color: var(--color-gray-100);
}

.black-key.pressed,
.black-key:active {
    background-color: var(--color-gray-700);
}

.black-key:hover {
    background-color: var(--color-gray-800);
}

/* Modules Container - Full width layout */
.modules-container {
    display: flex;
    flex-direction: column;
    gap: 0;
    width: 100%;
    margin: 0 auto;
}

/* ═══════════════════════════════════════════════════════════════════════════════
   MODULAR SYNTHESIZER COMPONENTS - T.E. AESTHETIC
   ═══════════════════════════════════════════════════════════════════════════════ */

/* Base Synth Module Styling */
.synth-module {
    border: var(--border-width-thin) solid var(--color-border-medium);
    border-bottom-width: 1px;
    /* 2px bottom border for module separation */
    border-radius: 0;
    font-family: var(--font-family-mono);
    width: 100%;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0;
    position: relative;
    /* For absolute positioning of corner ports */
}

/* First module connects to header (no top border) */
.synth-module:first-child {
    border-top: none;
    /* No top border to seamlessly connect to header */
    margin-top: -1px;
    /* Overlap with header border */
}

/* Last module gets thicker border but no rounded corners for full width */
.synth-module:last-child {
    border-radius: 0;
    /* No radius for full width */
    border-bottom-width: var(--border-width-thick);
    margin-bottom: 0;
}

/* Module Header */
.module-header {
    padding: var(--space-4);
    background-color: var(--color-pure-white);
    /* Light gray background for taskbar area */
    border-bottom: var(--border-width-thin) solid var(--color-border-medium);
    margin-bottom: 0;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.module-title {
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-widest);
    color: var(--color-gray-500);
    text-align: center;
}

/* Module Controls Section */
.module-controls {
    background-color: white;
    display: flex;
    flex-direction: row;
    justify-content: stretch;
    /* align-items: stretch; */
    gap: 0;
    flex-wrap: wrap;
}

.control-group {
    background-color: var(--color-pure-white);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    min-width: 80px;
    flex: 1;
    position: relative;
    aspect-ratio: 1;
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    padding: var(--space-4);

}

/* Golden ratio and full bleed only for dropdown/canvas containers */
.control-group:has(.waveform-selector),
.control-group:has(.filter-type-selector),
.control-group:has(.lfo-type-selector),
.control-group:has(.noise-type-selector) {
    padding: 0;
    /* Full bleed for selector containers */
    align-items: stretch;
    /* Full width alignment */
    aspect-ratio: 1.618;
    /* Golden ratio for dropdown/canvas containers */
    gap: 0;
    /* No gap for seamless full bleed */
}

.control-group:last-child {
    border-right: none;
}

/* Envelope Module Special Layout */
.envelope-controls {
    display: flex;
    flex-direction: row;
    gap: 0;
    height: auto;
}

.envelope-canvas-section {
    flex: 1;
    background-color: var(--color-pure-white);
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 1;
    /* Same as other control groups */
    position: relative;
}

.envelope-canvas-section .wave-visual {
    width: 100%;
    height: 100%;
    min-height: 200px;
}

.envelope-knobs-section {
    flex: 1;
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1fr 1fr;
    gap: 0;
}

.envelope-knobs-section .control-group {
    aspect-ratio: 1;
    border-right: var(--border-width-thin) solid var(--color-pure-black);
    border-bottom: var(--border-width-thin) solid var(--color-pure-black);
}

.envelope-knobs-section .control-group:nth-child(even) {
    border-right: none;
}

.envelope-knobs-section .control-group:nth-child(n+3) {
    border-bottom: none;
}

/* Reverb Canvas Styling - Simple white canvas at 1:1 ratio with knobs */
.reverb-canvas-group {
    flex: 1 !important;
    /* Same width as control groups for 1:1 ratio */
    padding: 0 !important;
    /* Full bleed */
    align-items: stretch !important;
    /* Full height */
}

.reverb-canvas-group .wave-visual {
    width: 100%;
    height: 100%;
    background-color: white;
    border: 1px solid var(--color-gray-300);
    border-radius: 0;
    margin: 0;
}

.control-label {
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    letter-spacing: var(--letter-spacing-wide);
    color: var(--color-text-secondary);
    text-align: center;
}

.control-value {
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-normal);
    color: var(--color-text-tertiary);
    text-align: center;
    margin-top: var(--space-1);
}

/* Waveform Selector */
.waveform-selector {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    background-color: var(--color-gray-100);
    border: none;
    /* Full bleed - no borders */
    border-radius: 0;
    /* Full bleed - no radius */
    padding: var(--space-2) var(--space-3);
    color: var(--color-text-primary);
    width: 100%;
    flex: 0 0 auto;
    /* Don't grow, fixed size for dropdown */
    text-align: center;
    cursor: pointer;
    margin: 0;
    /* Full bleed - no margins */
}

.waveform-selector:focus {
    outline: none;
    border-color: var(--color-accent-primary);
}

/* Filter Type Selector - Same styling as waveform selector */
.filter-type-selector {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    background-color: var(--color-gray-100);
    border: none;
    /* Full bleed - no borders */
    border-radius: 0;
    /* Full bleed - no radius */
    padding: var(--space-2) var(--space-3);
    color: var(--color-text-primary);
    width: 100%;
    flex: 0 0 auto;
    /* Don't grow, fixed size for dropdown */
    text-align: center;
    cursor: pointer;
    margin: 0;
    /* Full bleed - no margins */
}

.filter-type-selector:focus {
    outline: none;
    border-color: var(--color-accent-primary);
}

/* LFO Type Selector - Same styling as other selectors */
.lfo-type-selector {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    background-color: var(--color-gray-100);
    border: none;
    /* Full bleed - no borders */
    border-radius: 0;
    /* Full bleed - no radius */
    padding: var(--space-2) var(--space-3);
    color: var(--color-text-primary);
    width: 100%;
    flex: 0 0 auto;
    /* Don't grow, fixed size for dropdown */
    text-align: center;
    cursor: pointer;
    margin: 0;
    /* Full bleed - no margins */
}

.lfo-type-selector:focus {
    outline: none;
    border-color: var(--color-accent-primary);
}

/* Noise Type Selector - Same styling as other selectors */
.noise-type-selector {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    background-color: var(--color-gray-100);
    border: none;
    /* Full bleed - no borders */
    border-radius: 0;
    /* Full bleed - no radius */
    padding: var(--space-2) var(--space-3);
    color: var(--color-text-primary);
    width: 100%;
    flex: 0 0 auto;
    /* Don't grow, fixed size for dropdown */
    text-align: center;
    cursor: pointer;
    margin: 0;
    /* Full bleed - no margins */
}

.noise-type-selector:focus {
    outline: none;
    border-color: var(--color-accent-primary);
}

/* Wave Visual Display - P5.js canvas container */
.wave-visual {
    width: 100%;
    flex: 1;
    background-color: var(--color-pure-white);
    border: none;
    /* Full bleed - no borders */
    border-radius: 0;
    /* Full bleed - no radius */
    margin: 0;
    /* Full bleed - no margins */
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: var(--font-size-xs);
    color: var(--color-text-tertiary);
    flex-shrink: 0;
    position: relative;
    overflow: hidden;
}

/* P5.js canvas styling for wave visuals */
.wave-visual canvas {
    width: 100% !important;
    height: 100% !important;
    border-radius: var(--border-radius-base);
}


/* Synth Knob Styling - T.E. Color Scheme */
.synth-knob {
    width: 48px;
    height: 48px;
    background-color: var(--color-te-orange);
    border-radius: var(--border-radius-full);
    position: relative;
    cursor: pointer;
    border: var(--border-width-base) solid var(--color-pure-black);
    transition: border-color var(--transition-fast);
    transform-origin: center center;
    /* Ensure knob rotates around its center */
}

.synth-knob:hover {
    border-color: var(--color-pure-black);
    background-color: var(--color-pure-black);
}

.synth-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.knob-indicator {
    position: absolute;
    top: var(--space-2);
    left: 50%;
    transform: translateX(-50%);
    width: var(--space-1);
    height: 12px;
    background-color: var(--color-te-orange-dark);
    border-radius: var(--border-radius-sm);
    /* No transform-origin needed since entire knob rotates */
}

/* Filter Knob Styling - Cyan/Blue for visual distinction */
.synth-knob.filter-knob {
    background-color: var(--color-te-blue);
    border-color: var(--color-pure-black);
}

.synth-knob.filter-knob:hover {
    background-color: var(--color-pure-black);
    border-color: var(--color-pure-black);
}

.synth-knob.filter-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.synth-knob.filter-knob .knob-indicator {
    background-color: var(--color-te-blue-dark);
}

/* Envelope Knob Styling - Red for time/controller modules */
.synth-knob.envelope-knob {
    background-color: var(--color-te-red);
    border-color: var(--color-pure-black);
}

.synth-knob.envelope-knob:hover {
    background-color: var(--color-pure-black);
    border-color: var(--color-pure-black);
}

.synth-knob.envelope-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.synth-knob.envelope-knob .knob-indicator {
    background-color: var(--color-te-red-dark);
}

/* LFO Knob Styling - Purple for modulation/utility modules */
.synth-knob.lfo-knob {
    background-color: var(--color-te-purple);
    border-color: var(--color-pure-black);
}

.synth-knob.lfo-knob:hover {
    background-color: var(--color-pure-black);
    border-color: var(--color-pure-black);
}

.synth-knob.lfo-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.synth-knob.lfo-knob .knob-indicator {
    background-color: var(--color-te-purple-dark);
}

/* Reverb Knob Styling - Pink for effects/post-processing modules */
.synth-knob.reverb-knob {
    background-color: var(--color-te-pink);
    border-color: var(--color-pure-black);
}

.synth-knob.reverb-knob:hover {
    background-color: var(--color-pure-black);
    border-color: var(--color-pure-black);
}

.synth-knob.reverb-knob:hover .knob-indicator {
    background-color: var(--color-pure-white);
}

.synth-knob.reverb-knob .knob-indicator {
    background-color: var(--color-te-pink-dark);
}

/* Module Ports Section - Hidden since we use corner positioning */
.module-ports {
    display: none;
}

.module-input-ports {
    display: none;
}

/* Corner Port Positioning */
.corner-port-input {
    position: absolute;
    top: var(--corner-port-distance);
    left: var(--corner-port-distance);
    display: flex;
    align-items: center;
    gap: var(--space-1);
    pointer-events: none;
    /* Let child port handle mouse events */
}

.corner-port-input .patch-port {
    pointer-events: auto;
    /* Port can receive mouse events */
}

.corner-port-input .multiplier-selector,
.corner-port-input .multiplier-option {
    pointer-events: auto;
    /* Allow multiplier buttons to be clicked */
}

.corner-port-output {
    position: absolute;
    bottom: var(--corner-port-distance);
    right: var(--corner-port-distance);
    display: flex;
    align-items: center;
    gap: var(--space-1);
    pointer-events: none;
    /* Let child port handle mouse events */
}

.corner-port-output .patch-port {
    pointer-events: auto;
    /* Port can receive mouse events */
    position: relative;
    z-index: 100;
    /* Above cables but below UI panels */
}

/* Secondary corner port positioning (like gate input) - Top right corner */
.corner-port-input.secondary {
    top: var(--corner-port-distance);
    right: var(--corner-port-distance);
    left: auto;
}

.corner-port-output.secondary {
    bottom: var(--corner-port-secondary-top);
    right: var(--corner-port-distance);
}

/* Corner port labels */
.corner-port-label {
    font-size: 0.6rem;
    font-weight: var(--font-weight-medium);
    color: var(--color-text-tertiary);
    letter-spacing: var(--letter-spacing-wide);
    pointer-events: none;
    /* Don't block port interactions */
}


.patch-port .port-label {
    display: none;
    /* Hide internal labels */
}

/* Audio Output Port - T.E. Yellow */
.patch-port.audio-output {
    background-color: var(--color-te-yellow);
    border-color: var(--color-te-yellow-dark);
}

.patch-port.audio-output:hover {
    background-color: var(--color-te-yellow-dark);
    border-color: var(--color-te-yellow);
}

/* Audio Input Port - T.E. Yellow (same as output for audio signals) */
.patch-port.audio-input {
    background-color: var(--color-te-yellow);
    border-color: var(--color-te-yellow-dark);
}

.patch-port.audio-input:hover {
    background-color: var(--color-te-yellow-dark);
    border-color: var(--color-te-yellow);
}

/* Control Input Port - T.E. Blue */
.patch-port.control-input {
    background-color: var(--color-te-blue);
    border-color: var(--color-te-blue-dark);
}

.patch-port.control-input:hover {
    background-color: var(--color-te-blue-dark);
    border-color: var(--color-te-blue);
}

/* Gate Input Port - T.E. Blue (same size as other ports) */
.patch-port.gate-input {
    background-color: var(--color-te-blue);
    border-color: var(--color-te-blue-dark);
    width: var(--gate-port-size);
    height: var(--gate-port-size);
    border-radius: var(--border-radius-full);
    /* Circular like other ports */
}

.patch-port.gate-input:hover {
    background-color: var(--color-te-blue-dark);
    border-color: var(--color-te-blue);
}

/* Control Voltage (CV) Output Port - Purple for modulation signals */
.patch-port.cv-output {
    background-color: var(--color-te-purple);
    border-color: var(--color-te-purple-dark);
}

.patch-port.cv-output:hover {
    background-color: var(--color-te-purple-dark);
    border-color: var(--color-te-purple);
}

/* Multiplier Selector - Radial toggle buttons */
.multiplier-selector {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.multiplier-option {
    font-family: var(--font-family-mono);
    font-size: 8px;
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wide);
    color: var(--color-text-secondary);
    background-color: var(--color-gray-200);
    border: 1px solid var(--color-gray-400);
    border-radius: var(--border-radius-sm);
    padding: 2px 4px;
    cursor: pointer;
    transition: all var(--transition-fast);
    text-align: center;
    min-width: 20px;
}

.multiplier-option:hover {
    background-color: var(--color-gray-300);
    border-color: var(--color-gray-500);
}

.multiplier-option.active {
    background-color: var(--color-te-purple);
    color: var(--color-pure-white);
    border-color: var(--color-te-purple-dark);
}

/* Responsive adjustments */
@media (max-width: 768px) {
    #app-container {
        /* padding: var(--space-4); */
    }

    .synth-module {
        padding: 0;
    }

    /* Keep horizontal layout even on mobile, just adjust sizes */
    .module-controls {
        flex-direction: row;
        gap: var(--space-2);
        justify-content: space-between;
    }

    .control-group {
        min-width: 60px;
        flex: 1;
    }

    .synth-knob {
        width: 40px;
        height: 40px;
    }

    .control-label {
        font-size: 0.6rem;
    }

    .control-value {
        font-size: 0.6rem;
    }

    /* Keep envelope ADSR controls horizontal on mobile - remove grid layout */
    .synth-module[data-module-id="envelope-1"] .module-controls {
        flex-direction: row;
        gap: var(--space-2);
        justify-content: space-between;
    }

    /* EQ8 responsive layout - maintain 4x2 grid but scale down */
    .eq8-module {
        min-width: 280px;
    }

    .eq8-module .module-controls {
        grid-template-columns: repeat(4, 1fr);
        /* grid-template-rows: repeat(3, 1fr); */
    }

    /* Spectrum container spans 3 columns, master stays in last column */
    .eq8-module .eq8-visual-container {
        grid-column: 1 / 4;
    }

    /* Mixer responsive layout - maintain 4x2 grid but scale down */
    .mixer-module {
        min-width: 280px;
    }

    .mixer-module .mixer-controls {
        grid-template-columns: repeat(4, 1fr);
        /* grid-template-rows: repeat(3, 1fr); */
    }

    /* Visual container spans 3 columns, master stays in last column */
    .mixer-module .mixer-visual-container {
        grid-column: 1 / 4;
    }

    .synth-module[data-module-id="envelope-1"] .control-group {
        min-width: 60px;
        flex: 1;
    }
}

/* Medium screen adjustments */
@media (max-width: 1024px) and (min-width: 769px) {
    .control-group {
        min-width: 70px;
    }

    .synth-knob {
        width: 45px;
        height: 45px;
    }
}

/* Additional responsive breakpoint for very small screens */
@media (max-width: 480px) {
    .module-controls {
        gap: var(--space-1);
    }

    .control-group {
        min-width: 50px;
    }

    .synth-knob {
        width: 35px;
        height: 35px;
    }

    .control-label {
        font-size: 0.5rem;
    }

    .control-value {
        font-size: 0.5rem;
    }

    /* Envelope controls remain horizontal on very small screens */
    .synth-module[data-module-id="envelope-1"] .module-controls {
        gap: var(--space-1);
    }

    .synth-module[data-module-id="envelope-1"] .control-group {
        min-width: 50px;
    }

    /* EQ8 responsive layout - maintain 4x2 structure on very small screens */
    .eq8-module {
        min-width: 260px;
    }

    .eq8-module .module-controls {
        grid-template-columns: repeat(4, 1fr);
        /* grid-template-rows: repeat(3, 1fr); */
    }

    /* Spectrum container spans 3 columns, master knob stays in position */
    .eq8-module .eq8-visual-container {
        grid-column: 1 / 4;
    }

    /* Mixer responsive layout - maintain 4x2 structure on very small screens */
    .mixer-module {
        min-width: 260px;
    }

    .mixer-module .mixer-controls {
        grid-template-columns: repeat(4, 1fr);
        /* grid-template-rows: repeat(3, 1fr); */
    }

    /* Visual container spans 3 columns, master knob stays in position */
    .mixer-module .mixer-visual-container {
        grid-column: 1 / 4;
    }
}

/* ═══════════════════════════════════════════════════════════════════════════════
   PATCHING SYSTEM - CABLE VISUALIZATION
   ═══════════════════════════════════════════════════════════════════════════════ */

/* Patch SVG Container */
#patch-svg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    /* SVG container should NOT block port interactions */
    z-index: 1;
    /* Below all interactive elements */
}

/* Permanent Cable Paths */
.patch-cable {
    pointer-events: auto;
    /* Individual cables are clickable for removal */
    stroke-width: 3;
    fill: none;
    cursor: pointer;
    transition: stroke-width 0.1s ease;
}

.patch-cable:hover {
    stroke-width: 4;
    filter: brightness(1.2);
}

/* Ghost Cable During Drag */
.ghost-cable {
    pointer-events: none !important;
    /* Never block drop targets */
    stroke-width: 3;
    fill: none;
    stroke-dasharray: 5, 5;
    opacity: 0.7;
    animation: ghostCablePulse 1s ease-in-out infinite alternate;
}

@keyframes ghostCablePulse {
    from {
        opacity: 0.5;
    }

    to {
        opacity: 0.9;
    }
}

/* Cable Colors by Signal Type */
.patch-cable[data-signal="audio"],
.ghost-cable[data-signal="audio"] {
    stroke: var(--color-cable-audio);
    /* TE Yellow */
}

.patch-cable[data-signal="cv"],
.ghost-cable[data-signal="cv"] {
    stroke: var(--color-te-purple);
    /* TE Purple for CV */
}

.patch-cable[data-signal="gate"],
.ghost-cable[data-signal="gate"] {
    stroke: var(--color-cable-cv);
    /* TE Blue for gate */
}

/* Port Visual Feedback During Drag */
.patch-port.drag-source {
    transform: scale(1.2);
    box-shadow: 0 0 8px currentColor;
    z-index: 200;
    /* Above other ports during drag */
}

.patch-port.valid-target {
    transform: scale(1.1);
    box-shadow: 0 0 6px var(--color-te-green);
}

.patch-port.invalid-target {
    transform: scale(0.9);
    opacity: 0.5;
}

/* Envelope mode toggle button */
.env-mode-toggle {
    background: #333;
    color: #fff;
    border: 1px solid #555;
    padding: 2px 6px;
    font-size: 10px;
    cursor: pointer;
    border-radius: 3px;
    margin-left: 8px;
}

.env-mode-toggle:hover {
    background: #444;
}

/* Bypass toggle button */
.bypass-toggle {
    background: var(--color-pure-white);
    color: var(--color-gray-400);
    border: 1px solid var(--color-gray-300);
    padding: 2px 6px;
    font-size: 10px;
    font-weight: bold;
    cursor: pointer;
    border-radius: 3px;
    margin-left: 8px;
    min-width: 28px;
    transition: all 0.2s ease;
}

.bypass-toggle:hover {
    background: var(--color-gray-200);
    border-color: var(--color-gray-400);
    color: var(--color-gray-600);
}

.bypass-toggle.bypassed {
    background: var(--color-te-red);
    border-color: var(--color-te-red-dark);
    color: var(--color-pure-white);
}

.bypass-toggle.bypassed:hover {
    background: var(--color-te-red-dark);
    border-color: var(--color-te-red);
}

/* Module header controls container for modules with multiple buttons */
.module-header-controls {
    display: flex;
    align-items: center;
    gap: 4px;
}

/* Delete module button */
.delete-module {
    background: var(--color-pure-white);
    color: var(--color-gray-300);
    border: 1px solid var(--color-gray-200);
    padding: 2px 6px;
    font-size: 10px;
    font-weight: bold;
    cursor: pointer;
    border-radius: 3px;
    min-width: 20px;
    transition: all 0.2s ease;
    opacity: 0;
    pointer-events: none;
}

.synth-module:hover .delete-module {
    opacity: 1;
    pointer-events: auto;
}

.delete-module:hover {
    background: var(--color-te-red);
    border-color: var(--color-te-red-dark);
    color: var(--color-pure-white);
}

/* ═══════════════════════════════════════════════════════════════════════════════
   ABOUT POPUP - GOLDEN RATIO LAYOUT
   ═══════════════════════════════════════════════════════════════════════════════ */

.popup-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background-color: rgba(0, 0, 0, 0.8);
    display: none;
    z-index: 10000;
    /* Above everything */
}

.popup-overlay.show {
    display: flex;
    align-items: center;
    justify-content: center;
}

.popup-content {
    background-color: var(--color-pure-white);
    border: var(--border-width-base) solid var(--color-pure-black);
    width: 90vw;
    max-width: 1200px;
    height: 80vh;
    min-height: 600px;
    font-family: var(--font-family-mono);
    position: relative;
    overflow: hidden;
}

.popup-close {
    position: absolute;
    top: var(--space-4);
    right: var(--space-4);
    background: none;
    border: none;
    color: var(--color-pure-black);
    font-size: var(--font-size-2xl);
    cursor: pointer;
    padding: 0;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all var(--transition-fast);
    z-index: 1;
}

.popup-close:hover {
    color: var(--color-te-orange);
    transform: scale(1.1);
}

.popup-layout {
    display: flex;
    height: 100%;
}

.popup-left {
    width: 40%;
    /* Golden ratio complement */
    background-color: var(--color-pure-white);
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    padding: var(--space-8);
}

.popup-left h1 {
    font-size: var(--font-size-3xl);
    font-weight: var(--font-weight-bold);
    letter-spacing: var(--letter-spacing-widest);
    line-height: var(--line-height-tight);
    color: var(--color-pure-black);
    margin: 0;
    text-align: left;
}

.popup-right {
    width: 60%;
    /* Golden ratio major */
    background-color: var(--color-pure-white);
    padding: var(--space-8);
    overflow-y: auto;
    border-left: var(--border-width-thin) solid var(--color-gray-200);
}

.content-section {
    margin-bottom: var(--space-6);
}

.content-section:last-child {
    margin-bottom: 0;
}

.popup-right p {
    margin-bottom: var(--space-4);
    font-size: var(--font-size-sm);
    color: var(--color-text-primary);
    line-height: var(--line-height-relaxed);
}

.popup-right h3 {
    font-size: var(--font-size-sm);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-wide);
    color: var(--color-pure-black);
    margin: 0 0 var(--space-3) 0;
    border-bottom: 1px solid var(--color-gray-300);
    padding-bottom: var(--space-2);
}

.popup-right ul {
    margin-bottom: var(--space-4);
    padding-left: var(--space-5);
}

.popup-right li {
    margin-bottom: var(--space-2);
    font-size: var(--font-size-xs);
    color: var(--color-text-secondary);
    line-height: var(--line-height-normal);
}

.popup-right strong {
    color: var(--color-pure-black);
    font-weight: var(--font-weight-semibold);
}

.intro-text {
    font-size: var(--font-size-lg) !important;
    line-height: var(--line-height-relaxed);
    color: var(--color-text-primary) !important;
    margin-bottom: var(--space-5) !important;
}

.port-indicator {
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: var(--border-radius-full);
    border: var(--border-width-thin) solid;
    margin: 0 var(--space-1);
    vertical-align: middle;
}

.port-indicator.audio {
    background-color: var(--color-te-yellow);
    border-color: var(--color-te-yellow-dark);
}

.port-indicator.cv {
    background-color: var(--color-te-blue);
    border-color: var(--color-te-blue-dark);
}

.port-indicator.modulation {
    background-color: var(--color-te-purple);
    border-color: var(--color-te-purple-dark);
}

.coming-soon {
    font-style: italic;
    color: var(--color-text-tertiary) !important;
    text-align: center;
}

.credit {
    border-top: 1px solid var(--color-gray-300);
    padding-top: var(--space-4);
    margin-top: var(--space-6);
}

.watusi-credit {
    color: var(--color-te-orange);
    text-decoration: none;
    font-weight: var(--font-weight-semibold);
    transition: color var(--transition-fast);
}

.watusi-credit:hover {
    color: var(--color-te-orange-dark);
    text-decoration: underline;
}

/* ═══════════════════════════════════════════════════════════════════════════════
   MINIMAL SCROLLBARS SITE-WIDE
   ═══════════════════════════════════════════════════════════════════════════════ */

/* Webkit scrollbars (Chrome, Safari, Edge) */
::-webkit-scrollbar {
    width: 2px;
    height: 2px;
}

::-webkit-scrollbar-track {
    background: transparent;
}

::-webkit-scrollbar-thumb {
    background: var(--color-gray-400);
    border-radius: 1px;
}

::-webkit-scrollbar-thumb:hover {
    background: var(--color-gray-500);
}

::-webkit-scrollbar-corner {
    background: transparent;
}

/* Firefox scrollbars */
* {
    scrollbar-width: thin;
    scrollbar-color: var(--color-gray-400) transparent;
}

/* Responsive adjustments for smaller screens */
@media (max-width: 768px) {
    .popup-content {
        width: 95vw;
        height: 90vh;
    }
    
    .popup-layout {
        flex-direction: column;
    }
    
    .popup-left {
        width: 100%;
        height: 30%;
        padding: var(--space-6);
        justify-content: center;
        align-items: center;
        text-align: center;
    }
    
    .popup-left h1 {
        font-size: var(--font-size-2xl);
    }
    
    .popup-right {
        width: 100%;
        height: 70%;
        border-left: none;
        border-top: var(--border-width-thin) solid var(--color-gray-200);
        padding: var(--space-6);
    }
    
    .intro-text {
        font-size: var(--font-size-base) !important;
    }
}

/* ═══════════════════════════════════════════════════════════════════════════════
   AUDIO START SURFACE - TACTILE INTERFACE COVER
   ═══════════════════════════════════════════════════════════════════════════════ */

.audio-surface {
    position: fixed;
    top: 94px;
    /* Below header border with proper clearance */
    left: 50%;
    transform: translateX(-50%);
    width: 100%;
    max-width: 500px;
    bottom: 0;
    background-color: rgba(255, 255, 255, 0.3);
    backdrop-filter: blur(3px);
    display: none;
    z-index: 9500;
    /* Above interface, below about popup */
}

/* Disable scrolling when audio surface is showing */
body.audio-blocked {
    overflow: hidden;
}

.audio-surface.show {
    display: block;
}

.power-button {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 48px;
    height: 48px;
    background-color: var(--color-pure-white);
    border: var(--border-width-base) solid var(--color-pure-black);
    border-radius: var(--border-radius-full);
    /* Circular power button */
    color: var(--color-pure-black);
    font-size: var(--font-size-lg);
    cursor: pointer;
    transition: all var(--transition-fast);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 0 20px rgba(255, 255, 255, 0.8);
    /* White glow */
}

.audio-start-footer {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: var(--color-pure-white);
    border-top: var(--border-width-base) solid var(--color-pure-black);
    padding: var(--space-6);
    z-index: 1;
}

.audio-footer-content {
    text-align: right;
    max-width: 500px;
    margin: 0 auto;
}

.audio-footer-content h3 {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-lg);
    font-weight: var(--font-weight-semibold);
    letter-spacing: var(--letter-spacing-widest);
    color: var(--color-gray-500);
    margin: 0 0 var(--space-3) 0;
    /* Same styling as header title */
}

.audio-instruction {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-base);
    font-weight: var(--font-weight-medium);
    letter-spacing: var(--letter-spacing-wide);
    color: var(--color-text-primary);
    margin: 0 0 var(--space-2) 0;
}

.audio-note {
    font-family: var(--font-family-mono);
    font-size: var(--font-size-sm);
    font-weight: var(--font-weight-normal);
    letter-spacing: var(--letter-spacing-normal);
    color: var(--color-text-secondary);
    margin: 0;
}

.power-button:hover {
    background-color: var(--color-gray-100);
    transform: translate(-50%, -50%) scale(1.05);
}

.power-button:active {
    background-color: var(--color-pure-black);
    color: var(--color-pure-white);
    transform: translate(-50%, -50%) scale(0.95);
}

/* Responsive adjustments */
@media (max-width: 640px) {
    .audio-surface {
        top: 114px;
        /* Account for taller mobile header + border + clearance */
    }
    
    .power-button {
        width: 40px;
        height: 40px;
        font-size: var(--font-size-base);
    }
    
    .power-button:hover {
        transform: translate(-50%, -50%) scale(1.05);
    }
    
    .power-button:active {
        transform: translate(-50%, -50%) scale(0.95);
    }
    
    .audio-start-footer {
        padding: var(--space-4);
    }
    
    .audio-footer-content h3 {
        font-size: var(--font-size-base);
    }
    
    .audio-instruction {
        font-size: var(--font-size-sm);
    }
    
    .audio-note {
        font-size: var(--font-size-xs);
    }
}

@media (max-width: 520px) {
    .audio-surface {
        left: 0;
        right: 0;
        max-width: 100vw;
        transform: none;
    }
}