    :root,
    :host {
        --color-red-50: oklch(97.1% .013 17.38);
        --color-red-500: oklch(63.7% .237 25.331);
        --color-green-50: oklch(98.2% .018 155.826);
        --color-green-500: oklch(72.3% .219 149.579);
        --color-blue-50: oklch(97% .014 254.604);
        --color-blue-100: oklch(93.2% .032 255.585);
        --color-blue-500: oklch(62.3% .214 259.815);
        --color-gray-50: oklch(98.5% .002 247.839);
        --color-gray-100: oklch(96.7% .003 264.542);
        --color-gray-200: oklch(92.8% .006 264.531);
        --color-gray-300: oklch(87.2% .01 258.338);
        --color-gray-400: oklch(70.7% .022 261.325);
        --color-gray-500: oklch(55.1% .027 264.364);
        --color-gray-600: oklch(44.6% .03 256.802);
        --color-gray-700: oklch(37.3% .034 259.733);
        --color-black: #000;
        --color-white: #fff;
        --spacing: .25rem;
        --container-sm: 24rem;
        --container-md: 28rem;
        --container-2xl: 42rem;
        --container-3xl: 48rem;
        --container-4xl: 56rem;
        --text-xs: .75rem;
        --text-xs--line-height: calc(1 / .75);
        --text-sm: .875rem;
        --text-sm--line-height: calc(1.25 / .875);
        --text-base: 1rem;
        --text-base--line-height: 1.5;
        --text-lg: 1.125rem;
        --text-lg--line-height: calc(1.75 / 1.125);
        --text-xl: 1.25rem;
        --text-xl--line-height: calc(1.75 / 1.25);
        --text-2xl: 1.5rem;
        --text-2xl--line-height: calc(2 / 1.5);
        --text-3xl: 1.875rem;
        --text-3xl--line-height: 1.2;
        --font-weight-medium: 500;
        --font-weight-semibold: 600;
        --font-weight-bold: 700;
        --font-weight-black: 900;
        --tracking-tighter: -.05em;
        --tracking-tight: -.025em;
        --tracking-wide: .025em;
        --tracking-wider: .05em;
        --tracking-widest: .1em;
        --leading-tight: 1.25;
        --leading-snug: 1.375;
        --leading-relaxed: 1.625;
        --radius-sm: 2px;
        --radius-md: 4px;
        --radius-lg: 6px;
        --radius-xl: 8px;
        --radius-2xl: 12px;
        --radius-3xl: 16px;
        --animate-spin: spin 1s linear infinite;
        --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite;
        --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;
        --blur-sm: 8px;
        --blur-3xl: 64px;
        --default-transition-duration: .15s;
        --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);
        --default-font-family: var(--font-sans);
        --default-mono-font-family: var(--font-mono);
        --color-gluck-blue: #0059ff;
        --color-gluck-blue-soft: #f0f5ff;
        --color-gluck-dark: #1f2937;
        --color-gluck-gray: #f9fafb;
        --color-gluck-border: #e5e7eb;
    }

    * {
        box-sizing: border-box;
        margin: 0;
        padding: 0
    }


    .wrap {
        background: var(--color-background-tertiary);
        padding: 24px;
        border-radius: var(--border-radius-lg)
    }

    .header {
        margin-bottom: 20px
    }

    .badge {
        display: inline-block;
        background: #E6F1FB;
        color: #0C447C;
        font-size: 10px;
        font-weight: 500;
        letter-spacing: .1em;
        text-transform: uppercase;
        padding: 3px 10px;
        border-radius: 4px;
        margin-bottom: 8px
    }

    .title {
        font-size: 22px;
        font-weight: 500;
        color: var(--color-text-primary);
        line-height: 1.2;
        margin-bottom: 4px
    }

    .subtitle {
        font-size: 13px;
        color: var(--color-text-secondary)
    }

    .steps {
        display: flex;
        align-items: center;
        gap: 4px;
        background: var(--color-background-primary);
        border: 0.5px solid var(--color-border-tertiary);
        border-radius: var(--border-radius-lg);
        padding: 4px;
        margin-bottom: 20px;
        width: fit-content
    }

    .stl-view-mode-buttons {
        position: absolute;
        left: 18px;
        top: 18px;
        /* transform: translateX(-50%); */
        z-index: 20;
        display: flex;
        gap: 6px;
        padding: 6px;
        border-radius: 10px;
        background: rgba(255, 255, 255, 0.85);
        box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);
    }

    .stl-view-mode-buttons button {
        height: 34px;
        padding: 0 12px;
        border: 1px solid #d8dee8;
        border-radius: 8px;
        background: #fff;
        color: #4b5563;
        font-size: 12px;
        font-weight: 700;
        cursor: pointer;
    }

    .stl-view-mode-buttons button.active {
        border-color: #111827;
        color: #111827;
    }

    .step {
        display: flex;
        align-items: center;
        gap: 6px;
        padding: 6px 14px;
        border-radius: 8px;
        font-size: 11px;
        font-weight: 500;
        transition: .2s;
        color: var(--color-text-secondary)
    }

    .step.active {
        background: #185FA5;
        color: #fff
    }

    .step.done {
        color: #185FA5
    }

    .step-sep {
        color: var(--color-border-secondary);
        font-size: 12px
    }

    .main {
        background: var(--color-background-primary);
        border: 0.5px solid var(--color-border-tertiary);
        border-radius: var(--border-radius-lg);
        overflow: hidden;
        display: grid;
        grid-template-columns: 1fr 380px;
        min-height: 560px
    }

    .left {
        padding: 28px;
        border-right: 0.5px solid var(--color-border-tertiary);
        display: flex;
        flex-direction: column
    }

    .col-head {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 16px
    }

    .col-title {
        font-size: 11px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .15em;
        color: var(--color-text-secondary);
        display: flex;
        align-items: center;
        gap: 8px
    }

    .file-count {
        background: var(--color-background-secondary);
        border-radius: 20px;
        padding: 2px 8px;
        font-size: 10px;
        color: var(--color-text-tertiary)
    }

    .add-btn {
        font-size: 11px;
        font-weight: 500;
        color: #185FA5;
        background: #E6F1FB;
        border: none;
        padding: 5px 10px;
        border-radius: 6px;
        cursor: pointer;
        display: flex;
        align-items: center;
        gap: 4px
    }

    .dropzone {
        flex: 1;
        min-height: 300px;
        border: 1.5px dashed var(--color-border-secondary);
        border-radius: var(--border-radius-lg);
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        cursor: pointer;
        transition: .2s;
        padding: 24px;
        text-align: center
    }

    .dropzone:hover {
        border-color: #185FA5;
        background: var(--color-background-secondary)
    }

    .dz-icon {
        width: 56px;
        height: 56px;
        background: var(--color-background-primary);
        border: 0.5px solid var(--color-border-tertiary);
        border-radius: 14px;
        display: flex;
        align-items: center;
        justify-content: center;
        margin: 0 auto 16px;
        transition: .2s
    }

    .dropzone:hover .dz-icon {
        transform: scale(1.08)
    }

    .dz-title {
        font-size: 16px;
        font-weight: 500;
        color: var(--color-text-primary);
        margin-bottom: 6px
    }

    .dz-sub {
        font-size: 13px;
        color: var(--color-text-secondary);
        line-height: 1.6;
        margin-bottom: 16px
    }

    .dz-btn {
        font-size: 12px;
        font-weight: 500;
        padding: 7px 16px;
        border: 0.5px solid var(--color-border-secondary);
        border-radius: var(--border-radius-md);
        color: var(--color-text-secondary);
        background: var(--color-background-primary);
        cursor: pointer
    }

    .info-grid {
        display: grid;
        grid-template-columns: 1fr;
        gap: 10px;
        position: relative;
        z-index: 1001;
    }

    .info-box {
        display: flex;
        gap: 10px;
        border-radius: 8px;
        flex-direction: row;
        width: 100%;
        align-items: center;
        justify-content: center;
    }

    .info-box svg {
        flex-shrink: 0;
        color: var(--color-text-tertiary)
    }

    .info-box-title {
        font-size: 12px;
        font-weight: 500;
        color: var(--color-text-primary);
        font-family: Suit Variable, Arial, sans-serif;
    }

    .info-box-text {
        font-size: 11px;
        color: var(--color-text-secondary);
        line-height: 1.5;
        font-family: Suit Variable, Arial, sans-serif;
    }

    .right-menu {
        padding: 24px;
        display: flex;
        flex-direction: column;
        background: var(--color-background-secondary)
    }

    .config-head {
        display: flex;
        justify-content: space-between;
        align-items: flex-start;
        margin-bottom: 20px
    }

    .config-label {
        font-size: 11px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .2em;
        color: #185FA5;
        margin-bottom: 2px
    }

    .config-sub {
        font-size: 10px;
        color: var(--color-text-tertiary)
    }

    .verified-badge {
        background: #185FA5;
        color: #fff;
        font-size: 9px;
        font-weight: 500;
        letter-spacing: .1em;
        text-transform: uppercase;
        padding: 3px 8px;
        border-radius: 4px;
        display: none
    }

    .form-group {
        margin-bottom: 14px
    }

    .form-label {
        font-size: 11px;
        font-weight: 500;
        color: var(--color-text-secondary);
        margin-bottom: 5px;
        display: block
    }

    select,
    input[type=number] {
        width: 100%;
        font-size: 13px;
        padding: 8px 10px;
        border: 0.5px solid var(--color-border-tertiary);
        border-radius: var(--border-radius-md);
        background: var(--color-background-primary);
        color: var(--color-text-primary);
        outline: none;
        transition: .15s
    }

    select:focus,
    input:focus {
        border-color: #185FA5;
        box-shadow: 0 0 0 2px rgba(24, 95, 165, .12)
    }

    .form-row {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 10px
    }

    .divider {
        border: none;
        border-top: 0.5px solid var(--color-border-tertiary);
        margin: 16px 0
    }

    .result-slot {
        margin-top: auto;
        padding-top: 16px
    }

    .calc-btn {
        width: 100%;
        padding: 13px;
        font-size: 14px;
        font-weight: 500;
        border-radius: var(--border-radius-lg);
        border: none;
        background: #185FA5;
        color: #fff;
        cursor: pointer;
        transition: .15s
    }

    .calc-btn:disabled {
        background: var(--color-background-secondary);
        border: 0.5px solid var(--color-border-tertiary);
        color: var(--color-text-tertiary);
        cursor: not-allowed
    }

    .calc-btn:not(:disabled):hover {
        background: #0C447C
    }

    .secure-note {
        text-align: center;
        margin-top: 8px;
        font-size: 10px;
        color: var(--color-text-tertiary);
        letter-spacing: .08em;
        text-transform: uppercase;
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 5px
    }

    .result-card {
        border-radius: var(--border-radius-lg);
        overflow: hidden;
        transition: .3s
    }

    .result-card.idle {
        display: none
    }

    .result-card.loading,
    .result-card.done {
        display: block
    }

    .result-card.loading {
        background: var(--color-background-primary);
        border: 0.5px solid var(--color-border-tertiary)
    }

    .result-card.done {
        background: #0C447C;
        color: #fff
    }

    .result-inner {
        padding: 20px
    }

    .result-meta {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 16px;
        padding-bottom: 12px;
        border-bottom: 0.5px solid rgba(255, 255, 255, .12)
    }

    .result-meta.light {
        border-bottom-color: var(--color-border-tertiary)
    }

    .result-tag {
        font-size: 9px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .2em;
        color: var(--color-text-secondary)
    }

    .live-badge {
        background: #185FA5;
        color: #fff;
        font-size: 8px;
        font-weight: 500;
        letter-spacing: .1em;
        text-transform: uppercase;
        padding: 3px 8px;
        border-radius: 20px
    }

    .analyzing-badge {
        display: flex;
        align-items: center;
        gap: 6px;
        font-size: 10px;
        font-weight: 500;
        color: #185FA5;
        text-transform: uppercase;
        letter-spacing: .1em
    }

    .pulse-dot {
        width: 7px;
        height: 7px;
        background: #185FA5;
        border-radius: 50%;
        animation: pulse 1s infinite
    }

    @keyframes pulse {

        0%,
        100% {
            opacity: 1;
            transform: scale(1)
        }

        50% {
            opacity: .4;
            transform: scale(.7)
        }
    }

    .result-price-label {
        font-size: 10px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .15em;
        margin-bottom: 6px
    }

    .result-price-label.dark {
        color: rgba(255, 255, 255, .5)
    }

    .result-price-label.light {
        color: var(--color-text-secondary)
    }

    .result-price-value {
        font-size: 36px;
        font-weight: 500;
        font-family: var(--font-mono);
        line-height: 1;
        letter-spacing: -.02em
    }

    .result-price-value.dark {
        color: #fff
    }

    .result-price-value.light {
        color: var(--color-text-secondary);
        animation: shimmer 1.2s ease-in-out infinite
    }

    @keyframes shimmer {

        0%,
        100% {
            opacity: .4
        }

        50% {
            opacity: .9
        }
    }

    .result-currency {
        font-size: 13px;
        font-weight: 500;
        color: rgba(255, 255, 255, .4);
        margin-left: 6px
    }

    .result-row {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 16px;
        margin: 16px 0
    }

    .result-item-label {
        font-size: 9px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .18em;
        margin-bottom: 5px
    }

    .result-item-label.dark {
        color: rgba(255, 255, 255, .45)
    }

    .result-item-label.light {
        color: var(--color-text-secondary)
    }

    .result-item-val {
        font-size: 18px;
        font-weight: 500;
        font-family: var(--font-mono)
    }

    .result-item-val.dark {
        color: #85B7EB
    }

    .result-item-val.light {
        color: var(--color-text-secondary);
        opacity: .4
    }

    .result-item-unit {
        font-size: 10px;
        color: rgba(255, 255, 255, .3);
        margin-left: 3px
    }

    .result-actions {
        display: flex;
        flex-direction: column;
        gap: 8px;
        margin-top: 4px
    }

    .primary-action {
        width: 100%;
        padding: 11px;
        font-size: 13px;
        font-weight: 500;
        border-radius: var(--border-radius-md);
        border: none;
        background: #378ADD;
        color: #fff;
        cursor: pointer;
        transition: .15s
    }

    .primary-action:disabled {
        opacity: .35;
        cursor: not-allowed
    }

    .primary-action:not(:disabled):hover {
        background: #185FA5
    }

    .secondary-action {
        width: 100%;
        padding: 9px;
        font-size: 12px;
        font-weight: 500;
        background: none;
        border: none;
        color: rgba(255, 255, 255, .4);
        cursor: pointer;
        transition: .15s;
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 6px
    }

    .secondary-action:hover {
        color: rgba(255, 255, 255, .8)
    }

    .progress-bar {
        height: 3px;
        background: #378ADD;
        animation: progress 1.5s ease-in-out infinite
    }

    @keyframes progress {
        0% {
            width: 0%;
            opacity: 1
        }

        70% {
            width: 90%
        }

        100% {
            width: 100%;
            opacity: .5
        }
    }

    .result-disclaimer {
        margin-top: 10px;
        display: flex;
        gap: 8px;
        padding: 10px;
        background: rgba(55, 138, 221, .07);
        border: 0.5px solid rgba(55, 138, 221, .15);
        border-radius: var(--border-radius-md)
    }

    .result-disclaimer p {
        font-size: 10px;
        color: var(--color-text-secondary);
        line-height: 1.5
    }

    .bottom {
        border-top: 0.5px solid var(--color-border-tertiary);
        padding: 24px
    }

    .bottom-head {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 16px
    }

    .bottom-title {
        font-size: 15px;
        font-weight: 500;
        color: var(--color-text-primary);
        display: flex;
        align-items: center;
        gap: 10px
    }

    .bottom-accent {
        width: 3px;
        height: 20px;
        background: #185FA5;
        border-radius: 2px
    }

    .bottom-sub {
        font-size: 11px;
        color: var(--color-text-secondary)
    }

    .clear-btn {
        font-size: 11px;
        font-weight: 500;
        color: var(--color-text-secondary);
        background: none;
        border: none;
        cursor: pointer;
        display: flex;
        align-items: center;
        gap: 5px;
        padding: 6px 10px;
        border-radius: 6px;
        text-transform: uppercase;
        letter-spacing: .08em;
        transition: .15s
    }

    .clear-btn:hover {
        color: #E24B4A;
        background: #FCEBEB
    }

    table {
        width: 100%;
        border-collapse: collapse;
        border: 0.5px solid var(--color-border-tertiary);
        border-radius: var(--border-radius-lg);
        overflow: hidden
    }

    thead {
        background: var(--color-background-secondary)
    }

    thead th {
        padding: 10px 16px;
        text-align: left;
        font-size: 9px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .2em;
        color: var(--color-text-secondary);
        border-bottom: 0.5px solid var(--color-border-tertiary)
    }

    tbody tr {
        border-bottom: 0.5px solid var(--color-border-tertiary);
        transition: .15s
    }

    tbody tr:last-child {
        border-bottom: none
    }

    tbody tr:hover {
        background: var(--color-background-secondary)
    }

    td {
        padding: 12px 16px;
        font-size: 12px;
        color: var(--color-text-primary)
    }

    .file-icon {
        width: 36px;
        height: 36px;
        background: var(--color-background-primary);
        border: 0.5px solid var(--color-border-tertiary);
        border-radius: 8px;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-shrink: 0
    }

    .file-name {
        font-size: 13px;
        font-weight: 500;
        color: var(--color-text-primary);
        margin-bottom: 2px
    }

    .file-size {
        font-size: 11px;
        color: var(--color-text-secondary);
        font-family: var(--font-mono)
    }

    .status-validated {
        display: inline-flex;
        align-items: center;
        gap: 5px;
        padding: 4px 10px;
        background: #E6F1FB;
        color: #0C447C;
        border-radius: 20px;
        font-size: 10px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .08em
    }

    .status-pending {
        display: inline-flex;
        align-items: center;
        gap: 5px;
        padding: 4px 10px;
        background: var(--color-background-secondary);
        color: var(--color-text-tertiary);
        border-radius: 20px;
        font-size: 10px;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: .08em
    }

    .empty-cell {
        padding: 48px 16px;
        text-align: center
    }

    .empty-icon {
        width: 56px;
        height: 56px;
        background: var(--color-background-secondary);
        border-radius: 50%;
        border: 0.5px solid var(--color-border-tertiary);
        display: flex;
        align-items: center;
        justify-content: center;
        margin: 0 auto 12px
    }

    .empty-title {
        font-size: 15px;
        font-weight: 500;
        color: var(--color-text-tertiary);
        margin-bottom: 4px
    }

    .empty-sub {
        font-size: 12px;
        color: var(--color-text-tertiary);
        line-height: 1.6
    }

    .del-btn {
        width: 32px;
        height: 32px;
        background: none;
        border: none;
        border-radius: 6px;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--color-text-tertiary);
        transition: .15s
    }

    .del-btn:hover {
        background: #FCEBEB;
        color: #E24B4A
    }

    .spin {
        animation: spin 1s linear infinite
    }

    @keyframes spin {
        from {
            transform: rotate(0)
        }

        to {
            transform: rotate(360deg)
        }
    }

    .analyzing-overlay {
        display: flex;
        flex-direction: column;
        align-items: center;
        padding: 40px
    }

    .spinner {
        width: 40px;
        height: 40px;
        border: 3px solid rgba(24, 95, 165, .15);
        border-top-color: #185FA5;
        border-radius: 50%;
        margin-bottom: 16px
    }

    .analyzing-title {
        font-size: 16px;
        font-weight: 500;
        color: var(--color-text-primary);
        margin-bottom: 6px
    }

    .analyzing-sub {
        font-size: 12px;
        color: var(--color-text-secondary);
        text-align: center;
        line-height: 1.7
    }

    .virtual-estimate-tit-wrap {
        box-shadow: none;
        background-color: transparent;
    }

    .virtual-estimate-popup {
        position: static;
        transform: none;
        padding: inherit;
        display: flex;
        justify-content: center;
        padding-top: 100px;
    }

    .virtual-estimate-popup .header .title {
        font-size: clamp(34px, 5vw, 44px);
        font-weight: 700;
        color: var(--gluck-dark);
        letter-spacing: -0.04em;
        line-height: 1.1;
        font-family: Suit Variable, Arial, sans-serif;
    }

    .virtual-estimate-popup .header .subtitle {
        font-size: 17px;
        font-weight: 500;
        color: #99a1af;
        letter-spacing: -0.04em;
        line-height: 1.5;
        font-family: Suit Variable, Arial, sans-serif;
        margin-top: 12px;
    }

    .virtual-estimate-popup-con {
        max-width: 1285px;
        width: 100%;
    }

    .virtual-estimate-tit-wrap {}

    .upload-box-inner-virtual {
        display: flex;
        justify-content: center;
        height: 100%;
    }

    #stl_cont {
        position: relative;

        border-radius: 10px;
        transform: none;
        background: #fff;
        border-style: dashed;
        border-width: 2px;
        border-color: #0059ff33;
        transition: border-color 0.2s ease;
    }

    #stl_cont:hover,
    .upload-box-virtual:hover {
        border-color: #0059ff;
        z-index: 1001;
    }

    .file-upload-virtual {
        display: flex;
        flex-direction: column;
        padding-top: 10px;
        padding-bottom: 10px;
    }

    .material-dropdown-wrap {
        position: relative;
    }

    .material-dropdown {
        position: relative;
        width: 100%;
    }

    .material-dropdown-toggle {
        width: 100%;
        padding: 0 18px;
        border: 1px solid var(--_color---neutral_2_);
        border-radius: 10px;
        background: #fff;
        display: flex;
        align-items: center;
        justify-content: space-between;
        cursor: pointer;
        font-family: Suit Variable, Arial, sans-serif;
        font-size: 16px;
        font-weight: 500;
        color: #35383e;
    }

    .material-dropdown-toggle.active {
        border-color: #2563eb;
    }

    .material-dropdown-value {
        display: flex;
        align-items: center;
        gap: 8px;
        color: #aeaeae;
    }

    .material-dropdown-arrow {
        font-size: 18px;
        color: #888;
        line-height: 1;
    }

    .material-dropdown-menu {
        display: none;
        position: absolute;
        top: calc(100% + 8px);
        left: 0;
        width: 100%;
        max-height: 280px;
        overflow-y: auto;
        background: #fff;
        border: 1px solid var(--_color---neutral_2_);
        border-radius: 10px;
        box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
        z-index: 30;
        padding: 8px;
    }

    .material-dropdown.open .material-dropdown-menu {
        display: block;
    }

    .material-dropdown-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 12px 14px;
        border-radius: 8px;
        cursor: pointer;
        transition: background-color 0.2s ease, border-color 0.2s ease;
        border: 1px solid transparent;
    }

    .material-dropdown-item:hover {
        background: var(--_color---secondary_1);
    }

    .material-dropdown-item input[type="radio"] {
        display: none;
    }

    .material-dropdown-item .circle {
        width: 18px;
        height: 18px;
        border-radius: 50%;
        flex: 0 0 18px;
    }

    .material-dropdown-item .label-text {
        flex: 1;
        font-size: 15px;
        font-weight: 700;
        color: #35383e;
    }

    .material-dropdown-item .material-price {
        font-size: 13px;
        color: #888;
    }

    .material-dropdown-item:has(input[type="radio"]:checked) {
        border-color: #2563eb;
        background: #eff6ff;
    }

    .material-dropdown-item:has(input[type="radio"]:checked) .label-text {
        color: #2563eb;
    }

    .virtual-codebox {
        height: initial;
        overflow: unset;
    }

    .quantity-inline-box {
        display: flex;
        align-items: center;
    }

    .virtual-estimate-popup .print-method-wrap .dropdown-toggle-3,
    .virtual-estimate-popup .material-dropdown-toggle {
        height: 48px;
    }

    #virtual-quantity {
        width: 100%;
        height: 48px;
        border: none;
        border-top: 1px solid #d9dee8;
        border-bottom: 1px solid #d9dee8;
        /* border-radius: 10px; */
        text-align: center;
        font-size: 16px;
        font-weight: 700;
        color: #35383e;
        background: #fff;
    }

    .qty-btn {
        width: 48px;
        height: 48px;
        border: 1px solid #d9dee8;
        border-radius: 10px;
        background: #fff;
        font-size: 24px;
        line-height: 1;
        color: #35383e;
        cursor: pointer;
    }

    .qty-btn:hover {
        border-color: #0059ff;
        color: #0059ff;
    }

    .virtual-calc-btn {
        width: 100%;
        height: 52px;
        margin-top: 12px;
        border: none;
        border-radius: 12px;
        background: #0059ff;
        color: #fff;
        font-size: 12px;
        font-weight: 700;
        cursor: pointer;
        transition: background 0.2s ease;
    }

    .virtual-calc-btn:hover {
        background: #0047cc;
    }

    .virtual-result-box {
        margin-top: 16px;
        padding: 18px 20px;
        border-radius: 14px;
        background: #f5f8ff;
        border: 1px solid #dbe7ff;
    }

    .virtual-result-label {
        font-size: 13px;
        color: #6b7280;
        margin-bottom: 8px;
        font-weight: 600;
    }

    .virtual-result-price {
        font-size: 30px;
        font-weight: 800;
        color: #0059ff;
        line-height: 1.1;
    }

    .result-card-v2 {
        margin-top: 20px;
        border-radius: 18px;
        background: linear-gradient(180deg, #1d2b43 0%, #1a2437 100%);
        color: #fff;
        border: 1px solid rgba(255, 255, 255, 0.06);
        box-shadow: 0 12px 30px rgba(11, 22, 44, 0.18);
        overflow: hidden;

        /* 애니메이션 핵심 */
        max-height: 0;
        opacity: 0;
        padding: 0 22px;
        border-width: 0;
        transition: max-height 0.45s ease, opacity 0.4s ease, padding 0.4s ease, border-width 0.4s ease;
    }

    .result-card-v2.show {
        max-height: 600px;
        /* 내용보다 넉넉하게 */
        opacity: 1;
        padding: 12px;
        border-width: 1px;
    }

    .result-card-v2 .rc-head {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 8px;
    }

    .result-card-v2 .rc-kicker {
        font-size: 12px;
        font-weight: 700;
        letter-spacing: 0.18em;
        color: rgba(255, 255, 255, 0.68);
    }

    .result-card-v2 .rc-badge {
        display: inline-flex;
        align-items: center;
        height: 30px;
        padding: 0 12px;
        border-radius: 999px;
        background: #0f62ff;
        color: #fff;
        font-size: 11px;
        font-weight: 800;
        letter-spacing: 0.06em;
    }

    .result-card-v2 .rc-divider {
        height: 1px;
        background: rgba(255, 255, 255, 0.10);
        margin: 0 0 8px;
    }

    .result-card-v2 .rc-label {
        font-size: 12px;
        font-weight: 700;
        letter-spacing: 0.14em;
        color: rgba(255, 255, 255, 0.62);
        margin-bottom: 10px;
    }

    .result-card-v2 .rc-price {
        display: flex;
        align-items: flex-end;
        gap: 8px;
        margin-bottom: 26px;
        line-height: 1;
    }

    .result-card-v2 .rc-price strong {
        font-size: 32px;
        font-weight: 900;
        letter-spacing: -0.03em;
        color: #fff;
    }

    .result-card-v2 .rc-currency {
        font-size: 16px;
        font-weight: 700;
        color: rgba(255, 255, 255, 0.45);
        padding-bottom: 2px;
    }

    .result-card-v2 .rc-grid {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 18px 20px;
        margin-bottom: 28px;
    }

    .result-card-v2 .rc-item-label {
        font-size: 11px;
        font-weight: 700;
        letter-spacing: 0.14em;
        color: rgba(255, 255, 255, 0.48);
        margin-bottom: 8px;
    }

    .result-card-v2 .rc-item-value {
        font-size: 28px;
        font-weight: 900;
        color: #0f62ff;
        line-height: 1.15;
        word-break: keep-all;
    }

    .result-card-v2 .rc-item-value.white {
        color: #fff;
        font-size: 22px;
        font-weight: 800;
    }

    .result-card-v2 .rc-subinfo {
        display: grid;
        grid-template-columns: 1fr;
        gap: 12px;
        margin-bottom: 26px;
    }

    .result-card-v2 .rc-subrow {
        display: flex;
        justify-content: space-between;
        gap: 12px;
        font-size: 14px;
    }

    .result-card-v2 .rc-subrow .key {
        color: rgba(255, 255, 255, 0.56);
        font-weight: 700;
    }

    .result-card-v2 .rc-subrow .val {
        color: #fff;
        font-weight: 700;
        text-align: right;
    }

    .result-card-v2 .rc-primary-btn {
        width: 100%;
        height: 52px;
        border: none;
        border-radius: 12px;
        background: #0f62ff;
        color: #fff;
        font-size: 16px;
        font-weight: 700;
        cursor: pointer;
        transition: background .2s ease;
    }

    .result-card-v2 .rc-primary-btn:hover {
        background: #0b53d6;
    }

    .result-card-v2 .rc-secondary-link {
        display: block;
        margin-top: 18px;
        text-align: center;
        color: rgba(255, 255, 255, 0.58);
        font-size: 16px;
        font-weight: 700;
        text-decoration: none;
    }

    .result-card-v2 .rc-secondary-link:hover {
        color: rgba(255, 255, 255, 0.82);
    }

    .result-card-v2 .rc-note {
        margin-top: 14px;
        font-size: 12px;
        line-height: 1.6;
        color: rgba(255, 255, 255, 0.48);
    }

    .upload-box-wrap {
        position: relative;
        height: 100%;
        padding: 0 10px;
    }

    /* 업로드 중 스피너 */
    .upload-box-wrap.uploading::after {
        content: "";
        position: absolute;
        top: 50%;
        left: 50%;
        width: 72px;
        height: 72px;
        margin-left: -36px;
        margin-top: -36px;
        border-radius: 50%;
        border: 5px solid rgba(0, 89, 255, 0.15);
        border-top-color: #0059ff;
        animation: upload-spin 0.9s linear infinite;
        z-index: 30;
        pointer-events: none;
    }

    .hollow-toggle-row {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 14px 16px;
        background: #ffffff;
        border: 0.5px solid #e5e7eb;
        border-radius: 12px;
        cursor: pointer;
        user-select: none;
    }

    .toggle-text {
        display: flex;
        flex-direction: column;
        gap: 3px;
    }

    .toggle-label {
        font-size: 14px;
        font-weight: 500;
        color: #1f2937;
    }

    .toggle-desc {
        font-size: 10px;
        line-height: 1.4;
        color: #6b7280;
    }

    .toggle-switch {
        position: relative;
        width: 44px;
        height: 26px;
        flex-shrink: 0;
    }

    .toggle-switch input {
        opacity: 0;
        width: 0;
        height: 0;
    }

    .slider {
        position: absolute;
        inset: 0;
        background: #d1d5db;
        border-radius: 999px;
        transition: background 0.2s;
        cursor: pointer;
    }

    .slider::before {
        content: '';
        position: absolute;
        width: 20px;
        height: 20px;
        left: 3px;
        top: 3px;
        background: #fff;
        border-radius: 50%;
        transition: transform 0.2s;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
    }

    .toggle-switch input:checked+.slider {
        background: #185FA5;
    }

    .toggle-switch input:checked+.slider::before {
        transform: translateX(18px);
    }

    .upload-box-wrap.uploading::before {
        content: "";
        position: absolute;
        inset: 0;
        background: rgba(255, 255, 255, 0.18);
        backdrop-filter: blur(1px);
        border-radius: 12px;
        z-index: 29;
        pointer-events: none;
    }

    /* 계산 중엔 STL 컨테이너도 살짝 어둡게 */
    #stl_cont.calculating {
        filter: brightness(0.9);
    }

    /* 버튼 로딩 상태 */
    .virtual-calc-btn.is-loading {
        background: #7faeff;
        cursor: wait;
    }

    @keyframes upload-spin {
        from {
            transform: rotate(0deg);
        }

        to {
            transform: rotate(360deg);
        }
    }

    .quantity-calc-wrap {
        margin-top: 20px;
        margin-bottom: 20px;
        padding: 0 30px;
    }

    .virtual-reset-btn {
        width: 100%;
        height: 52px;
        margin-top: 12px;
        border: 1.5px solid #0059ff;
        border-radius: 12px;
        background: #fff;
        color: #0059ff;
        font-size: 12px;
        font-weight: 700;
        cursor: pointer;
        transition: all 0.2s ease;
    }

    .virtual-reset-btn:hover {
        background: #f0f5ff;
    }

    .bulk-discount-note {
        margin-left: 8px;
        font-size: 12px;
        font-weight: 700;
        color: #0059ff;
    }

    .bulk-notice-box {
        margin-top: 14px;
        padding: 0 18px;
        border-radius: 14px;
        background: #f0f5ff;
        border: 1px solid #c7d9ff;
        display: flex;
        gap: 12px;
        align-items: flex-start;
        overflow: hidden;

        /* 애니메이션 핵심 */
        max-height: 0;
        opacity: 0;
        padding-top: 0;
        padding-bottom: 0;
        border-width: 0;
        transition: max-height 0.4s ease, opacity 0.35s ease, padding 0.35s ease, border-width 0.35s ease;
    }

    .bulk-notice-box.show {
        max-height: 200px;
        /* 내용보다 넉넉하게 */
        opacity: 1;
        padding-top: 16px;
        padding-bottom: 16px;
        border-width: 1px;
    }

    .bulk-notice-icon {
        flex-shrink: 0;
        width: 36px;
        height: 36px;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .bulk-notice-text {
        font-size: 13px;
        color: #374151;
        line-height: 1.6;
        font-weight: 500;
    }

    .bulk-notice-text strong {
        display: block;
        font-size: 14px;
        font-weight: 700;
        color: #1d2f6f;
        margin-bottom: 4px;
    }

    .upload-text-virtual {
        font-size: 18px;
        text-align: center;
        color: #7c7c7c;
        font-weight: 700;
        line-height: 120%;
        font-family: Suit Variable, Arial, sans-serif;
        margin-bottom: inherit;
    }

    .upload-box-virtual {
        display: flex;
        justify-content: flex-start;
        align-items: center;
        gap: 10px;
        padding: 24px 32px;
        border-radius: 10px;
        cursor: pointer;
        transition: background 0.2s ease;
        flex-direction: column;
        justify-content: center;
        width: 100%;
        border-style: dashed;
        border-width: 2px;
        border-color: #0059ff33;
    }

    .upload-box-virtual:hover {
        background: var(--_color---secondary_1);
    }

    .upload-print-method-wrap {
        align-items: stretch;
    }

    .file-upload-virtual>div[style*="width:100%"] {
        flex: 1;
        align-items: stretch !important;
    }

    #stl_cont {
        min-height: 420px;
        height: 100% !important;
    }

    .upload-print-method-wrap:has(.result-card-v2.show) #stl_cont {
        min-height: 540px;
    }

    /* ===== GLUCK CLAUDE-DESIGN TWEAKS START ===== */
    /* ============================================================
   GLUCK ESTIMATE — Claude Design Tweaks (P1~P4)
   ------------------------------------------------------------
   - P1: Fullscreen result overlay (.gluck-fs-*)
   - P2: Step indicator (.gluck-steps)
   - P3: Result card refinement (mono font, live-pill)
   - P4: Dropzone corner markers (.gluck-dz-corner)
   - 모든 클래스에 'gluck-' 접두사 → 기존 코드와 100% 격리
   ============================================================ */

    /* ---- 폰트 토큰 (기존 :root에 추가) ---- */
    :root {
        /* Mono Font */
        --gluck-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;

        /* Brand Blue */
        --gluck-brand: #0059FF;
        --gluck-brand-hover: #337AFF;
        --gluck-brand-active: #0047CC;
        --gluck-brand-soft: #1A6AFF;
        --gluck-brand-light: #D7E1F4;
        --gluck-brand-ink: #003ab0;

        /* Neutrals (v23) */
        --gluck-bg: #F6F7F9;
        --gluck-border: #E6E8EC;
        --gluck-gray: #B3B8C2;
        --gluck-dark: #6B7280;
        --gluck-dark-2: #2D3139;
        --gluck-dark-3: #1A1D24;
        --gluck-ink-dark: #1a2437;

        /* Elevation */
        --gluck-shadow-card: 0 1px 3px rgba(0, 0, 0, 0.04);
        --gluck-shadow-upload-icon: 0 8px 24px rgba(0, 89, 255, 0.10), 0 2px 8px rgba(0, 0, 0, 0.04);
        --gluck-shadow-modal: 0 20px 50px rgba(0, 0, 0, 0.18);
        --gluck-shadow-floating: 0 4px 12px rgba(0, 0, 0, 0.08);

        /* Radius */
        --gluck-radius-card: 20px;
        --gluck-radius-inner: 16px;
        --gluck-radius-button: 10px;
    }
.gluck-parts-list::-webkit-scrollbar {
  width: 4px;
}

.gluck-parts-list::-webkit-scrollbar-thumb {
  background-color: #e6e6e6;
  /* 썸 색상 */
  border-radius: 10px;
}
    /* ============================================================
   GLUCK V23 · STAGE LAYOUT
   ============================================================ */

    /* 전체 컨테이너 (v23의 main) */
    .gluck-stage {
        max-width: 1500px;
        margin: 0 auto;
        padding: 0px 0px 64px;
    }

    @media (min-width: 768px) {
        .gluck-stage {
            padding: 0px 0px 64px;
        }
    }

    /* 상단 라인 (Stepper + Trust signals) */
    .gluck-stage-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 16px;
        flex-wrap: wrap;
        margin-bottom: 20px;
    }

    /* 메인 카드 (1단계: 큰 드롭존 / 2단계: 3컬럼) */
    .gluck-main-card {
        background: #fff;
        border: 1px solid var(--gluck-border);
      
        box-shadow: var(--gluck-shadow-card);
        overflow: hidden;
    border-top-right-radius: 12px;
    border-top-left-radius: 12px;
    }

    /* ============================================================
   STAGE 1 · UPLOAD (파일 0개)
   ============================================================ */
    .gluck-stage-upload {
        position: relative;
        min-height: 440px;
        margin: 24px;
        border: 2px dashed var(--gluck-border);
        border-radius: var(--gluck-radius-inner);
        background: rgba(246, 247, 249, 0.6);
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        text-align: center;
        cursor: pointer;
        transition: background 0.2s ease, border-color 0.2s ease;
    }

    @media (min-width: 1024px) {
        .gluck-stage-upload {
            margin: 32px;
        }
    }

    .gluck-stage-upload:hover {
        background: #fff;
        border-color: var(--gluck-brand);
    }

    .gluck-stage-upload.is-dragover {
        background: rgba(215, 225, 244, 0.3);
        border-color: var(--gluck-brand);
        border-style: solid;
    }

    .gluck-upload-icon {
        width: 80px;
        height: 80px;
        background: #fff;
        border: 1px solid rgba(0, 89, 255, 0.1);
        border-radius: var(--gluck-radius-inner);
        box-shadow: var(--gluck-shadow-upload-icon);
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--gluck-brand);
        margin-bottom: 24px;
        transition: transform 0.3s ease;
    }

    .gluck-stage-upload:hover .gluck-upload-icon {
        transform: translateY(-2px);
    }

    .gluck-upload-title {
        font-size: 20px;
        font-weight: 700;
        color: var(--gluck-dark-3);
        letter-spacing: -0.02em;
        margin: 0 0 10px 0;
    }

    .gluck-upload-formats {
        font-size: 13.5px;
        font-weight: 500;
        color: var(--gluck-dark);
        margin: 0 0 6px 0;
    }

    .gluck-upload-cta {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        margin-top: 20px;
        height: 48px;
        padding: 0 24px;
        background: var(--gluck-brand);
        color: #fff;
        border: 0;
        border-radius: var(--gluck-radius-button);
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: background 0.2s ease;
    }

    .gluck-upload-cta:hover {
        background: var(--gluck-brand-hover);
    }

    .gluck-upload-cta:active {
        background: var(--gluck-brand-active);
    }

    .gluck-upload-purge {
        max-width: 480px;
        margin: 20px auto 0;
        padding: 0 16px 28px;
        font-size: 11px;
        line-height: 1.7;
        color: var(--gluck-dark);
    }

    /* ============================================================
   TRUST SIGNALS (NDA + 24h auto-purge)
   ============================================================ */
    .gluck-trust-row {
        display: inline-flex;
        align-items: center;
        gap: 12px;
        flex-wrap: wrap;
        font-size: 12px;
        color: var(--gluck-dark);
    }

    .gluck-trust-inline {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        font-size: 12px;
        font-weight: 500;
        color: var(--gluck-dark);
    }

    .gluck-trust-inline svg {
        width: 14px;
        height: 14px;
        flex-shrink: 0;
        color: var(--gluck-gray);
    }

    /* ============================================================
   STAGE 2 · CONFIGURE (파일 1개+) — 3-COLUMN
   ============================================================ */
    .gluck-stage-configure {
        display: grid;
        grid-template-columns: 1fr;
        min-height: 600px;
    }

    @media (min-width: 1024px) {
        .gluck-stage-configure {
            grid-template-columns: 260px 1fr;
        }
    }

    /* ===== LEFT: Parts Sidebar ===== */
    .gluck-parts-sidebar {
        background: #fff;
        padding: 12px;
        min-height: 440px;
    }

    @media (min-width: 1024px) {
        .gluck-parts-sidebar {
            padding: 12px;
        }
    }

    .gluck-parts-head {
        display: flex;
        align-items: center;
        justify-content: space-between;
        margin-bottom: 12px;
    }

    .gluck-parts-head-left {
        display: inline-flex;
        align-items: center;
        gap: 8px;
    }

    .gluck-parts-head-left svg {
        width: 14px;
        height: 14px;
        color: var(--gluck-brand);
    }

    .gluck-parts-label {
        font-size: 12px;
        font-weight: 600;
        color: var(--gluck-dark-2);
        text-transform: uppercase;
        letter-spacing: 0.08em;
    }

    .gluck-parts-count {
        font-size: 10.5px;
        font-weight: 600;
        color: var(--gluck-brand);

    }

    .gluck-parts-removeall {
        background: none;
        border: 0;
        color: var(--gluck-dark);
        font-size: 10.5px;
        font-weight: 600;
        cursor: pointer;
        padding: 4px 6px;
        transition: color 0.15s ease;
    }

    .gluck-parts-removeall:hover {
        color: #DC2626;
    }

    .gluck-parts-list {
        display: flex;
        flex-direction: column;
        gap: 6px;
	overflow-y: auto;
   	 max-height: 360px;
	padding-right:8px;
    }

    .gluck-part-card {
        padding: 12px;
        background: #fff;
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-button);
        cursor: pointer;
        transition: all 0.18s ease;
    }

    .gluck-part-card:hover {
        border-color: rgba(0, 89, 255, 0.4);
        background: rgba(246, 247, 249, 0.6);
    }

    .gluck-part-card.is-selected {
        border-color: var(--gluck-brand);
        background: rgba(215, 225, 244, 0.4);
        box-shadow: var(--gluck-shadow-card);
    }

    .gluck-part-card-inner {
        display: flex;
        align-items: flex-start;
        gap: 10px;
    }

    .gluck-part-num {
        flex-shrink: 0;
        width: 32px;
        height: 32px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        background: var(--gluck-dark-3);
        color: #fff;
        border-radius: 6px;
        font-size: 10.5px;
        font-weight: 700;

    }

    .gluck-part-card.is-selected .gluck-part-num {
        background: var(--gluck-brand);
    }

    .gluck-part-body {
        flex: 1;
        min-width: 0;
    }

    .gluck-part-filename {
        font-size: 12px;
        font-weight: 600;
        color: var(--gluck-dark-3);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;

        margin: 0;
    }

    .gluck-part-card.is-selected .gluck-part-filename {
        color: var(--gluck-brand);
    }

    .gluck-part-status {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        margin-top: 4px;
        font-size: 9.5px;
        font-weight: 600;
    }

    .gluck-part-status.analyzing {
        color: var(--gluck-brand);
    }

    .gluck-part-status.ready {
        color: #059669;
    }

    .gluck-part-status .gluck-status-dot {
        width: 6px;
        height: 6px;
        border-radius: 50%;
        background: currentColor;
    }

    .gluck-part-status.analyzing .gluck-status-dot {
        animation: gluck-pulse 1.2s ease-in-out infinite;
    }

    @keyframes gluck-pulse {

        0%,
        100% {
            opacity: 1;
        }

        50% {
            opacity: 0.35;
        }
    }

    .gluck-parts-addmore {
        margin-top: 12px;
        width: 100%;
        height: 36px;
        background: #fff;
        border: 1px dashed var(--gluck-border);
        border-radius: var(--gluck-radius-button);
        color: var(--gluck-dark-2);
        font-size: 12px;
        font-weight: 600;
        cursor: pointer;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 6px;
        transition: border-color 0.15s ease, color 0.15s ease;
    }

    .gluck-parts-addmore:hover {
        border-color: var(--gluck-brand);
        color: var(--gluck-brand);
    }

    /* ===== CENTER: 3D Viewer ===== */
    .gluck-viewer-area {
        padding: 12px;
        background: rgba(246, 247, 249, 0.3);
        border-top: 1px solid var(--gluck-border);
    }

    @media (min-width: 1024px) {
        .gluck-viewer-area {
            padding: 12px;
            border-top: 0;
            border-right: 1px solid var(--gluck-border);
        }
    }

    .gluck-viewer-frame {
        position: relative;
        height: 480px;
        background: #fff;
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-inner);
        overflow: hidden;
        box-shadow: var(--gluck-shadow-card);
    }

    /* three.js canvas가 들어갈 곳 */
    .gluck-viewer-canvas {
        position: absolute;
        inset: 0;
        cursor: grab;
    }

    .gluck-viewer-canvas:active {
        cursor: grabbing;
    }

    /* 좌상단: View Mode + 100mm 토글 */
    .gluck-viewer-topleft {
        position: absolute;
        top: 16px;
        left: 16px;
        z-index: 10;
        display: flex;
        align-items: center;
        gap: 8px;
    }

    .gluck-viewmode-toggle {
        display: inline-flex;
        background: rgba(255, 255, 255, 0.95);
        backdrop-filter: blur(8px);
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-button);
        padding: 4px;
        box-shadow: var(--gluck-shadow-floating);
    }

    .gluck-viewmode-btn {
        padding: 4px 10px;
        background: transparent;
        border: 0;
        border-radius: 6px;
        font-size: 10px;
        font-weight: 500;
        color: var(--gluck-dark);
        cursor: pointer;
        transition: all 0.15s ease;
    }

    .gluck-viewmode-btn:hover {
        color: var(--gluck-dark-2);
    }

    .gluck-viewmode-btn.is-active {
        background: var(--gluck-dark-3);
        color: #fff;
    }

    .gluck-refcube-btn {
        display: inline-flex;
        align-items: center;
        gap: 6px;
    justify-content: center;
        padding: 6px 12px;
        background: rgba(255, 255, 255, 0.95);
        backdrop-filter: blur(8px);
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-button);
        font-size: 11px;
        font-weight: 600;
        color: var(--gluck-dark-2);
        cursor: pointer;
        box-shadow: var(--gluck-shadow-floating);
        transition: all 0.15s ease;
    }

    .gluck-refcube-btn:hover {
        border-color: rgba(0, 89, 255, 0.4);
    }

    .gluck-refcube-btn.is-active {
        background: var(--gluck-brand);
        color: #fff;
        border-color: var(--gluck-brand);
    }

    .gluck-refcube-marker {
        display: inline-block;
        width: 10px;
        height: 10px;
        border: 2px solid var(--gluck-brand);
        background: rgba(0, 89, 255, 0.15);
        border-radius: 2px;
    }

    .gluck-refcube-btn.is-active .gluck-refcube-marker {
        border-color: #fff;
        background: rgba(255, 255, 255, 0.3);
    }

    /* 우상단: PART 번호 라벨 */
    .gluck-part-label {
        position: absolute;
        top: 16px;
        right: 16px;
        z-index: 10;
        display: inline-flex;
        align-items: center;
        gap: 6px;
        background: var(--gluck-dark-3);
        color: #fff;
        font-size: 10.5px;
        font-weight: 600;
    
        padding: 6px 10px;
        border-radius: 6px;
        box-shadow: var(--gluck-shadow-floating);
    }

    .gluck-part-label svg {
        width: 12px;
        height: 12px;
    }

    /* 하단: 메타카드 (FILE / DIMENSIONS / VOLUME) */
    .gluck-meta-bar {
        position: absolute;
        bottom: 8px;
        left: 16px;
        right: 16px;
        z-index: 10;
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        gap: 1px;
        background: rgba(230, 232, 236, 0.4);
        border: 1px solid rgba(230, 232, 236, 0.6);
        border-radius: var(--gluck-radius-button);
        overflow: hidden;
        box-shadow: var(--gluck-shadow-floating);
    }

    .gluck-meta-cell {
        background: rgba(255, 255, 255, 0.95);
        backdrop-filter: blur(8px);
        padding: 8px 12px;
    }

    .gluck-meta-label {
        font-size: 9.5px;
        font-weight: 600;
        color: var(--gluck-dark);
        text-transform: uppercase;
        letter-spacing: 0.12em;
        margin: 0 0 2px 0;
    }

    .gluck-meta-value {
        font-size: 11px;
        font-weight: 600;
        color: var(--gluck-dark-3);

        margin: 0;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    /* 분석중 스피너 (뷰어 내부 오버레이) */
    .gluck-viewer-loading {
        position: absolute;
        inset: 0;
        z-index: 20;
        display: none;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        background: rgba(255, 255, 255, 0.85);
        backdrop-filter: blur(4px);
    }

    .gluck-viewer-loading.is-active {
        display: flex;
    }

    .gluck-spinner {
        position: relative;
        width: 56px;
        height: 56px;
        margin-bottom: 16px;
    }

    .gluck-spinner::before,
    .gluck-spinner::after {
        content: '';
        position: absolute;
        inset: 0;
        border-radius: 50%;
        border: 4px solid rgba(0, 89, 255, 0.1);
    }

    .gluck-spinner::after {
        border-color: var(--gluck-brand);
        border-top-color: transparent;
        animation: gluck-spin 0.9s linear infinite;
    }

    @keyframes gluck-spin {
        to {
            transform: rotate(360deg);
        }
    }

    .gluck-loading-title {
        font-size: 14px;
        font-weight: 600;
        color: var(--gluck-dark-3);
        margin: 0;
    }

    .gluck-loading-sub {
        font-size: 10.5px;
        font-weight: 500;
        color: var(--gluck-dark);
        text-transform: uppercase;
        letter-spacing: 0.12em;
        margin: 4px 0 0;
    }

    .project-label {
        font-size: 16px;
        line-height: 16px;
        margin-bottom: 12px;
    }

    /* ============================================================
   P2 · STEP INDICATOR
   ============================================================ */
    .gluck-steps {
        display: flex;
        align-items: center;
        justify-content: space-between;
        flex-wrap: wrap;
        gap: 16px;
    }

    .gluck-steps .gluck-step {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 6px 12px;
        border-radius: 999px;
        background: #fff;
        border: 1px solid var(--gluck-border);
        color: var(--gluck-dark);
        font-size: 12.5px;
        font-weight: 600;
        letter-spacing: -0.005em;
        transition: all 0.25s ease;
    }

    .gluck-steps .gluck-step .gluck-step-num {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        background: transparent;
        border: 1.5px solid var(--gluck-gray);
        color: var(--gluck-dark);
        font-size: 10.5px;
        font-weight: 700;

        line-height: 1;
    }

    .gluck-steps .gluck-step.active {
        background: var(--gluck-brand);
        color: #fff;
        border-color: var(--gluck-brand);
    }

    .gluck-steps .gluck-step.active .gluck-step-num {
        background: rgba(255, 255, 255, 0.22);
        border-color: transparent;
        color: #fff;
    }

    .gluck-steps .gluck-step.done {
        background: #fff;
        color: var(--gluck-brand);
        border-color: var(--gluck-brand-light);
    }

    .gluck-steps .gluck-step.done .gluck-step-num {
        background: var(--gluck-brand);
        border-color: var(--gluck-brand);
        color: #fff;
    }

    .gluck-steps .gluck-step-line {
        flex: 0 0 24px;
        height: 1px;
        background: var(--gluck-border);
    }

    .gluck-steps .gluck-step-line.done {
        background: var(--gluck-brand);
    }

    /* ============================================================
   P2.5 · TRUST SIGNALS  (NDA 뱃지 + 자동 폐기 안내) — v23 patch
   ============================================================ */
    .gluck-trust-row {
        display: inline-flex;
        align-items: center;
        gap: 12px;
        flex-wrap: wrap;
        font-size: 12px;
        color: var(--gluck-dark);
    }

    .gluck-nda-badge {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        padding: 5px 10px;
        background: #fff;
        border: 1px solid var(--gluck-border);
        border-radius: 8px;
        color: var(--gluck-dark-2);
        font-size: 12px;
        font-weight: 600;
        line-height: 1.2;
    }

    .gluck-nda-badge svg {
        width: 14px;
        height: 14px;
        flex-shrink: 0;
        color: var(--gluck-brand);
    }

    .gluck-trust-inline {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        color: var(--gluck-dark);
        font-size: 12px;
        font-weight: 500;
    }

    .gluck-trust-inline svg {
        width: 14px;
        height: 14px;
        flex-shrink: 0;
        color: var(--gluck-gray);
    }

    /* 업로드 박스 하단 자동폐기 안내문 (드롭존 안 또는 직후 배치) */
    .gluck-auto-purge-note {
        display: block;
        max-width: 480px;
        margin: 20px auto 0;
        padding: 0 16px;
        font-size: 11px;
        line-height: 1.7;
        color: var(--gluck-dark);
        text-align: center;
    }

    /* ============================================================
   P3 · RESULT CARD REFINEMENT (기존 .result-card-v2 보강)
   ============================================================ */
    /* 기존 .result-card-v2를 그대로 두고, 추가 데코레이션만 얹기 */
    .result-card-v2.show {
        /* 상단에 브랜드 라인 */
        position: relative;
    }

    .result-card-v2.show::before {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        height: 3px;
        background: var(--gluck-brand);
        border-radius: 18px 18px 0 0;
    }

    /* 기존 rc-kicker를 모노폰트로 톤 통일 */
    .result-card-v2 .rc-kicker {
        font-family: var(--gluck-font-mono) !important;
        letter-spacing: 0.16em !important;
        font-size: 10px !important;
        font-weight: 500 !important;
    }

    /* 기존 rc-badge를 live-pill 스타일로 변환 */
    .result-card-v2 .rc-badge {

        letter-spacing: 0.08em;
        position: relative;
        padding-left: 22px !important;
    }

    .result-card-v2 .rc-badge::before {
        content: "";
        position: absolute;
        left: 10px;
        top: 50%;
        transform: translateY(-50%);
        width: 6px;
        height: 6px;
        border-radius: 50%;
        background: #fff;
        animation: gluck-pulse 1.4s ease infinite;
    }

    @keyframes gluck-pulse {

        0%,
        100% {
            opacity: 1;
            transform: translateY(-50%) scale(1);
        }

        50% {
            opacity: 0.4;
            transform: translateY(-50%) scale(0.7);
        }
    }

    /* 가격 숫자 모노폰트 적용 (탭ular 정렬) */
    .result-card-v2 .rc-price strong {

        font-feature-settings: "tnum";
        letter-spacing: -0.03em;
    }

    .result-card-v2 .rc-currency {

        letter-spacing: 0.04em;
    }

    /* 풀스크린 진입 버튼 추가 — 결과 카드 우상단에 배치 */
    .gluck-fs-trigger {
        position: absolute;
        top: 14px;
        right: 14px;
        width: 30px;
        height: 30px;
        border: 1px solid rgba(255, 255, 255, 0.16);
        background: rgba(255, 255, 255, 0.04);
        border-radius: 8px;
        color: rgba(255, 255, 255, 0.7);
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: 0.15s;
        z-index: 5;
    }

    .gluck-fs-trigger:hover {
        background: rgba(255, 255, 255, 0.1);
        color: #fff;
        border-color: rgba(255, 255, 255, 0.32);
    }

    .gluck-fs-trigger svg {
        width: 14px;
        height: 14px;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    /* ============================================================
   P4 · DROPZONE CORNER MARKERS
   ============================================================ */
    .upload-box-virtual {
        position: relative;
    }

    .gluck-dz-corner {
        position: absolute;
        width: 16px;
        height: 16px;
        border-color: rgba(0, 89, 255, 0.35);
        border-style: solid;
        border-width: 0;
        pointer-events: none;
        transition: 0.2s;
    }

    .gluck-dz-corner.gluck-tl {
        top: 12px;
        left: 12px;
        border-top-width: 1.5px;
        border-left-width: 1.5px;
    }

    .gluck-dz-corner.gluck-tr {
        top: 12px;
        right: 12px;
        border-top-width: 1.5px;
        border-right-width: 1.5px;
    }

    .gluck-dz-corner.gluck-bl {
        bottom: 12px;
        left: 12px;
        border-bottom-width: 1.5px;
        border-left-width: 1.5px;
    }

    .gluck-dz-corner.gluck-br {
        bottom: 12px;
        right: 12px;
        border-bottom-width: 1.5px;
        border-right-width: 1.5px;
    }

    .upload-box-virtual:hover .gluck-dz-corner {
        border-color: var(--gluck-brand);
        width: 20px;
        height: 20px;
    }

    .upload-box-virtual {
        position: relative;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        min-height: 280px;
        margin: 0;
        padding: 32px 24px;
        background: rgba(246, 247, 249, 0.6);
        /* gray-superlight @ 60% */
        border: 2px dashed var(--gluck-border);
        border-radius: 16px;
        cursor: pointer;
        transition: background 0.2s ease, border-color 0.2s ease;
    }

    .upload-box-virtual:hover {
        background: #fff;
        border-color: var(--gluck-brand);
    }

    /* 드래그 진입 상태 (JS에서 .is-dragover 토글) */
    .upload-box-virtual.is-dragover {
        background: rgba(215, 225, 244, 0.3);
        /* blue-light @ 30% */
        border-color: var(--gluck-brand);
        border-style: solid;
    }

    /* 업로드 아이콘 박스 — v23 시그니처 디자인 */
    .upload-icon-virtual {
        width: 80px;
        height: 80px;
        background: #fff;
        border-radius: 16px;
        border: 1px solid rgba(0, 89, 255, 0.1);
        box-shadow: var(--gluck-shadow-upload-icon);
        display: flex;
        align-items: center;
        justify-content: center;
        margin-bottom: 20px;
        transition: transform 0.3s ease;
    }

    .upload-box-virtual:hover .upload-icon-virtual {
        transform: translateY(-2px);
    }

    .upload-text-virtual {
        font-size: 16px;
        font-weight: 700;
        color: var(--gluck-dark-3);
        text-align: center;
        line-height: 1.5;
        letter-spacing: -0.02em;
        margin: 0 0 6px 0;
    }

    .caution-txt {
        font-size: 12px;
        color: var(--gluck-dark);
        font-weight: 500;
        margin: 0;
    }

    /* 모서리 마커 (유지하되 톤 강화) */
    .gluck-dz-corner {
        position: absolute;
        width: 16px;
        height: 16px;
        border-color: rgba(0, 89, 255, 0.35);
        border-style: solid;
        border-width: 0;
        pointer-events: none;
        transition: 0.2s;
    }

    .gluck-dz-corner.gluck-tl {
        top: 12px;
        left: 12px;
        border-top-width: 1.5px;
        border-left-width: 1.5px;
    }

    .gluck-dz-corner.gluck-tr {
        top: 12px;
        right: 12px;
        border-top-width: 1.5px;
        border-right-width: 1.5px;
    }

    .gluck-dz-corner.gluck-bl {
        bottom: 12px;
        left: 12px;
        border-bottom-width: 1.5px;
        border-left-width: 1.5px;
    }

    .gluck-dz-corner.gluck-br {
        bottom: 12px;
        right: 12px;
        border-bottom-width: 1.5px;
        border-right-width: 1.5px;
    }

    .upload-box-virtual:hover .gluck-dz-corner {
        border-color: var(--gluck-brand);
        width: 20px;
        height: 20px;
    }

    /* ============================================================
   P1 · FULLSCREEN RESULT OVERLAY
   ============================================================ */
    .gluck-fs {
        position: fixed;
        inset: 0;
        z-index: 99999;
        background: #15181f;
        color: #fff;
        display: flex;
        flex-direction: column;
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.4s;
        font-family: "Inter", "Pretendard", -apple-system, BlinkMacSystemFont, "Noto Sans KR", sans-serif;
    }

    .gluck-fs.show {
        opacity: 1;
        pointer-events: auto;
    }

    .gluck-fs-bg {
        position: absolute;
        inset: 0;
        background:
            radial-gradient(ellipse at 20% 30%, rgba(0, 89, 255, 0.24) 0%, transparent 50%),
            radial-gradient(ellipse at 80% 70%, rgba(0, 89, 255, 0.16) 0%, transparent 50%);
        opacity: 0;
        transition: opacity 0.6s 0.1s;
        pointer-events: none;
    }

    .gluck-fs.show .gluck-fs-bg {
        opacity: 1;
    }

    .gluck-fs-grid {
        position: absolute;
        inset: 0;
        background-image:
            linear-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px),
            linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
        background-size: 64px 64px;
        -webkit-mask: radial-gradient(ellipse at center, #000 30%, transparent 80%);
        mask: radial-gradient(ellipse at center, #000 30%, transparent 80%);
        pointer-events: none;
    }

    .gluck-fs-header {
        position: relative;
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 24px 40px;
        border-bottom: 1px solid rgba(255, 255, 255, 0.08);
        z-index: 2;
    }

    .gluck-fs-kicker {
        display: flex;
        align-items: center;
        gap: 14px;

        font-size: 11px;
        letter-spacing: 0.16em;
        text-transform: uppercase;
        color: rgba(255, 255, 255, 0.6);
        flex-wrap: wrap;
    }

    .gluck-fs-kicker .gluck-divider {
        color: rgba(255, 255, 255, 0.2);
    }

    .gluck-fs-kicker .gluck-live {
        display: inline-flex;
        align-items: center;
        gap: 6px;
    }

    .gluck-fs-kicker .gluck-live::before {
        content: "";
        width: 7px;
        height: 7px;
        border-radius: 50%;
        background: #5fdc8b;
        box-shadow: 0 0 12px #5fdc8b;
        animation: gluck-pulse2 1.4s ease infinite;
    }

    @keyframes gluck-pulse2 {

        0%,
        100% {
            opacity: 1;
            transform: scale(1);
        }

        50% {
            opacity: 0.4;
            transform: scale(0.7);
        }
    }

    .gluck-fs-close {
        width: 38px;
        height: 38px;
        border: 1px solid rgba(255, 255, 255, 0.12);
        background: transparent;
        border-radius: 8px;
        color: rgba(255, 255, 255, 0.7);
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: 0.15s;
    }

    .gluck-fs-close:hover {
        background: rgba(255, 255, 255, 0.06);
        color: #fff;
    }

    .gluck-fs-close svg {
        width: 18px;
        height: 18px;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.5;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .gluck-fs-body {
        position: relative;
        flex: 1;
        display: grid;
        grid-template-columns: 1fr 380px;
        z-index: 2;
        overflow: hidden;
    }

    .gluck-fs-main {
        padding: 60px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        gap: 40px;
        overflow-y: auto;
    }

    .gluck-fs-eyebrow {

        font-size: 12px;
        letter-spacing: 0.18em;
        text-transform: uppercase;
        color: var(--gluck-brand);
        margin-bottom: 12px;
    }

    .gluck-fs-eyebrow+div {
        /* gap from price */
    }

    .gluck-fs-price-block {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .gluck-fs-price {
        display: flex;
        align-items: flex-start;
        gap: 12px;
 
        line-height: 0.95;
    }

    .gluck-fs-price .gluck-amount {
        font-size: clamp(56px, 9vw, 144px);
        font-weight: 600;
        letter-spacing: -0.04em;
        color: #fff;
        font-feature-settings: "tnum";
    }

    .gluck-fs-price .gluck-ccy {
        font-size: 24px;
        font-weight: 500;
        color: rgba(255, 255, 255, 0.5);
        margin-top: 18px;
    }

    .gluck-fs-stats {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 0;
        border-top: 1px solid rgba(255, 255, 255, 0.08);
        border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    }

    .gluck-fs-stat {
        padding: 24px 24px 24px 0;
        border-right: 1px solid rgba(255, 255, 255, 0.06);
    }

    .gluck-fs-stat:first-child {
        padding-left: 0;
    }

    .gluck-fs-stat:last-child {
        border-right: none;
        padding-right: 0;
    }

    .gluck-fs-stat .gluck-lbl {
        font-size: 10px;
        letter-spacing: 0.14em;
        text-transform: uppercase;
        color: rgba(255, 255, 255, 0.45);
        margin-bottom: 8px;
    }

    .gluck-fs-stat .gluck-val {
        font-size: 24px;
        font-weight: 500;
        color: #fff;
        letter-spacing: -0.01em;
    }

    .gluck-fs-stat .gluck-val .gluck-unit {
        font-size: 13px;
        color: rgba(255, 255, 255, 0.4);
        margin-left: 4px;
    }

    .gluck-fs-actions {
        display: flex;
        gap: 12px;
        align-items: center;
        flex-wrap: wrap;
    }

    .gluck-fs-btn-primary {
        height: 56px;
        padding: 0 28px;
        background: var(--gluck-brand);
        color: #fff;
        border: none;
        border-radius: 10px;
        font-size: 14px;
        font-weight: 600;
        letter-spacing: -0.01em;
        cursor: pointer;
        display: inline-flex;
        align-items: center;
        gap: 10px;
        transition: 0.15s;
    }

    .gluck-fs-btn-primary:hover {
        background: var(--gluck-brand-ink);
    }

    .gluck-fs-btn-primary svg {
        width: 16px;
        height: 16px;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .gluck-fs-btn-secondary {
        height: 56px;
        padding: 0 24px;
        background: transparent;
        color: rgba(255, 255, 255, 0.8);
        border: 1px solid rgba(255, 255, 255, 0.16);
        border-radius: 10px;
        font-size: 13px;
        font-weight: 500;
        cursor: pointer;
        transition: 0.15s;
    }

    .gluck-fs-btn-secondary:hover {
        border-color: rgba(255, 255, 255, 0.32);
        color: #fff;
    }

    .gluck-fs-side {
        border-left: 1px solid rgba(255, 255, 255, 0.08);
        padding: 60px 40px;
        background: rgba(255, 255, 255, 0.02);
        display: flex;
        flex-direction: column;
        gap: 24px;
        overflow-y: auto;
    }

    .gluck-fs-side-block .gluck-lbl {
    
        font-size: 10px;
        letter-spacing: 0.14em;
        text-transform: uppercase;
        color: rgba(255, 255, 255, 0.45);
        margin-bottom: 10px;
    }

    .gluck-fs-side-block .gluck-val {
        font-size: 14px;
        font-weight: 500;
        color: #fff;
        display: flex;
        align-items: center;
        gap: 10px;
        word-break: break-all;
    }

    .gluck-fs-side-block .gluck-val .gluck-swatch {
        width: 16px;
        height: 16px;
        border-radius: 4px;
        border: 1px solid rgba(255, 255, 255, 0.15);
        flex-shrink: 0;
    }

    .gluck-fs-divider {
        height: 1px;
        background: rgba(255, 255, 255, 0.08);
    }

    .gluck-fs-disclaimer {
        margin-top: auto;
        font-size: 11px;
        line-height: 1.6;
        color: rgba(255, 255, 255, 0.45);
    
        letter-spacing: 0.02em;
    }

    /* Reveal animation */
    .gluck-fs .gluck-fs-main>*,
    .gluck-fs .gluck-fs-side>* {
        opacity: 0;
        transform: translateY(12px);
        transition: opacity 0.5s, transform 0.5s;
    }

    .gluck-fs.show .gluck-fs-main>*,
    .gluck-fs.show .gluck-fs-side>* {
        opacity: 1;
        transform: none;
    }

    .gluck-fs.show .gluck-fs-main>*:nth-child(1) {
        transition-delay: 0.15s;
    }

    .gluck-fs.show .gluck-fs-main>*:nth-child(2) {
        transition-delay: 0.25s;
    }

    .gluck-fs.show .gluck-fs-main>*:nth-child(3) {
        transition-delay: 0.35s;
    }

    .gluck-fs.show .gluck-fs-side>*:nth-child(1) {
        transition-delay: 0.45s;
    }

    .gluck-fs.show .gluck-fs-side>*:nth-child(2) {
        transition-delay: 0.5s;
    }

    .gluck-fs.show .gluck-fs-side>*:nth-child(3) {
        transition-delay: 0.55s;
    }

    .gluck-opt-result {
        margin-top: 16px;
        border-radius: 12px;
        background: rgba(246, 247, 249, 0.6);
        border: 1px solid var(--gluck-border);
        color: var(--gluck-dark-3);
        max-height: 0;
        opacity: 0;
        padding: 0 16px;
        border-width: 0;
        box-shadow: none;
        overflow: hidden;
        transition: max-height 0.3s ease, opacity 0.25s ease, padding 0.25s ease, border-width 0.25s ease;
    }

    .gluck-opt-result.show {
        max-height: 200px;
        opacity: 1;
        padding: 14px 16px;
        border-width: 1px;
    }

    /* 기존 result-card-v2의 상단 브랜드 라인 제거 */
    .gluck-opt-result.result-card-v2.show::before {
        display: none;
    }

    .gluck-opt-summary {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .gluck-opt-summary-row {
        display: flex;
        align-items: baseline;
        justify-content: space-between;
    }

    .gluck-opt-summary-label {
        font-size: 11px;
        font-weight: 600;
        color: var(--gluck-dark);
        letter-spacing: 0.02em;
    }

    .gluck-opt-summary-total {
        font-size: 20px;
        font-weight: 800;
        color: var(--gluck-dark-3);
        letter-spacing: -0.01em;
    }

    .gluck-opt-summary-sub {
        text-align: right;
        font-size: 10.5px;
        color: var(--gluck-dark);
    
    }

    /* ============================================================
   RESPONSIVE
   ============================================================ */
    @media (max-width: 900px) {
        .gluck-fs-body {
            grid-template-columns: 1fr;
        }

        .gluck-fs-side {
            border-left: none;
            border-top: 1px solid rgba(255, 255, 255, 0.08);
            padding: 32px 24px;
        }

        .gluck-fs-main {
            padding: 32px 24px;
        }

        .gluck-fs-header {
            padding: 16px 24px;
        }

        .gluck-fs-stats {
            grid-template-columns: repeat(2, 1fr);
        }

        .gluck-fs-stat {
            padding: 16px 12px;
            border-right: 1px solid rgba(255, 255, 255, 0.06);
        }

        .gluck-fs-stat:nth-child(2) {
            border-right: none;
        }

        .gluck-fs-stat:nth-child(3),
        .gluck-fs-stat:nth-child(4) {
            border-top: 1px solid rgba(255, 255, 255, 0.06);
        }

        .gluck-steps {
            padding: 12px 16px;
            gap: 4px;
        }

        .gluck-steps .gluck-step {
            padding: 4px 10px;
            font-size: 10px;
        }

        .gluck-steps .gluck-step-line {
            flex-basis: 12px;
        }
    }

    /* ===== GLUCK CLAUDE-DESIGN TWEAKS END ===== */

    /* ============================================================
       STEP-GATE: 파일 업로드 전 옵션 잠금 + view-mode 토글 노출 제어
       ============================================================ */

    /* 1) STL 뷰 모드 버튼: 기본 숨김 → 모델 렌더링되면 .is-active로 노출 */
    .stl-view-mode-buttons {
        display: none !important;
    }

    .stl-view-mode-buttons.is-active {
        display: flex !important;
    }

    /* 2) 옵션 영역: 기본은 항상 컬러 정상 상태 */
    .print-method-box-virtual {
        position: relative;
        opacity: 1;
        filter: none;
        pointer-events: auto;
        transition: opacity .28s ease, filter .28s ease;
    }

    .print-method-box-virtual,
    .print-method-box-virtual * {
        /* 잠금 해제 상태에서는 어떤 자식도 회색 톤이 남지 않도록 강제 */
        filter: none;
    }

    /* 3) 잠금 상태일 때만 흐리게 + 클릭 차단 */
    .print-method-box-virtual.is-locked {
        opacity: 0.28 !important;
        filter: grayscale(0.9) !important;
        pointer-events: none !important;
        user-select: none;
    }

    .print-method-box-virtual.is-locked * {
        pointer-events: none !important;
    }

    /* 3-2) 활성화 상태: 다른 CSS가 회색으로 만들고 있어도 강제 컬러 복원 */
    .print-method-box-virtual.is-unlocked,
    .print-method-box-virtual.is-unlocked * {
        opacity: unset !important;
        filter: none !important;
    }

    .print-method-box-virtual.is-unlocked {
        opacity: 1 !important;
        pointer-events: auto !important;
    }

    /* 자식 요소 inline grayscale/opacity 무력화 */
    .print-method-box-virtual.is-unlocked [style*="grayscale"],
    .print-method-box-virtual.is-unlocked [style*="opacity"] {
        filter: none !important;
    }

    /* 4) 잠금 오버레이: 자물쇠 + 안내 칩 (잠금 상태에서만 노출) */
    .lock-overlay {
        position: absolute;
        inset: 0;
        display: none;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 14px;
        z-index: 30;
        pointer-events: none;
    }

    .print-method-box-virtual.is-locked .lock-overlay {
        display: flex;
        /* 부모의 흐림 영향에서 분리 */
        opacity: 1 !important;
        filter: none !important;
    }

    .lock-overlay .lock-icon {
        width: 56px;
        height: 56px;
        border-radius: 50%;
        background: #ffffff;
        border: 1px solid #e5e7eb;
        box-shadow: 0 6px 18px rgba(15, 23, 42, 0.10);
        display: flex;
        align-items: center;
        justify-content: center;
        color: #6b7280;
    }

    .lock-overlay .lock-icon svg {
        width: 26px;
        height: 26px;
    }

    .lock-overlay .lock-text {
        font-size: 13px;
        font-weight: 600;
        color: #374151;
        background: #ffffff;
        padding: 9px 16px;
        border-radius: 999px;
        border: 1px solid #e5e7eb;
        box-shadow: 0 2px 10px rgba(15, 23, 42, 0.06);
        letter-spacing: -0.01em;
        white-space: nowrap;
    }

    #qty-minus {
        border-radius: inherit;
        border-top-left-radius: 10px;
        border-bottom-left-radius: 10px;
        border: inherit;
        /* border-radius: inherit; */
        border-bottom: 1px solid #d9dee8;
        border-top: 1px solid #d9dee8;
        border-left: 1px solid #d9dee8;
    }

    #qty-plus {
        border-radius: inherit;
        border-top-right-radius: 10px;
        border-bottom-right-radius: 10px;
        border: inherit;
        /* border-radius: inherit; */
        border-bottom: 1px solid #d9dee8;
        border-top: 1px solid #d9dee8;
        border-right: 1px solid #d9dee8;
    }

    /* ============================================================
       STL 정보 헤더 (FILE / DIMENSIONS / VOLUME)
       ============================================================ */
    .stl-info-header {
        width: auto;
        display: flex;
        align-items: stretch;
        opacity: 0.7;
        position: absolute;
        gap: 0;
        padding: 10px 18px;
        bottom: 7px;
        left: 18px;
        z-index: 10;
        background: #f7f9fc;
        border: 1px solid #e5e7eb;
        border-radius: 10px;
    }

    .stl-info-header[hidden] {
        display: none;
    }

    .stl-info-cell {
        display: flex;
        flex-direction: column;
        gap: 4px;
        min-width: 0;
    }

    .stl-info-key {
        font-size: 10px;
        font-weight: 700;
        letter-spacing: 0.12em;
        color: #9aa0a6;
        text-transform: uppercase;
    }

    .stl-info-val {
        font-size: 13px;
        font-weight: 600;
        color: #1f2937;
        letter-spacing: -0.01em;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        transition: color .2s ease;
    }

    .stl-info-val.is-hollow {
        color: #0059ff;
    }

    .stl-info-divider {
        width: 1px;
        background: #e5e7eb;
        margin: 0 18px;
    }

    .stl-info-key {
        /* 아이콘이 옆에 자연스럽게 따라붙도록 */
        display: inline-flex;
        align-items: center;
        gap: 6px;
    }

    .stl-warn-icon {
        position: relative;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 16px;
        height: 16px;
        cursor: help;
        outline: none;
    }

    .stl-warn-icon-svg {
        width: 14px;
        height: 14px;
        display: block;
        filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.08));
    }

    /* 툴팁 — 평소 숨김 */
    .stl-warn-tooltip {
        position: absolute;
        top: calc(100% + 8px);
        left: 50%;
        transform: translateX(-50%) translateY(-4px);
        min-width: 240px;
        max-width: 320px;
        padding: 12px 14px;
        background: #1f2937;
        color: #fff;
        border-radius: 8px;
        box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
        font-family: 'Inter', 'Pretendard', 'Noto Sans KR', sans-serif;
        opacity: 0;
        pointer-events: none;
        visibility: hidden;
        transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
        z-index: 100;
        text-align: left;
        white-space: normal;
    }

    /* 툴팁 위쪽 화살표 */
    .stl-warn-tooltip::before {
        content: '';
        position: absolute;
        bottom: 100%;
        left: 50%;
        transform: translateX(-50%);
        border: 6px solid transparent;
        border-bottom-color: #1f2937;
    }

    /* hover / focus 시 노출 */
    .stl-warn-icon:hover .stl-warn-tooltip,
    .stl-warn-icon:focus .stl-warn-tooltip,
    .stl-warn-icon:focus-within .stl-warn-tooltip {
        opacity: 1;
        visibility: visible;
        transform: translateX(-50%) translateY(0);
        pointer-events: auto;
    }

    .stl-warn-tooltip-title {
        display: block;
        font-size: 12px;
        font-weight: 700;
        color: #fbbf24;
        margin-bottom: 8px;
        letter-spacing: -0.01em;
    }

    .stl-warn-tooltip-list {
        list-style: none;
        padding: 0;
        margin: 0;
    }

    .stl-warn-tooltip-list li {
        position: relative;
        padding: 4px 0 4px 12px;
        font-size: 12px;
        line-height: 1.5;
        color: rgba(255, 255, 255, 0.9);
        font-weight: 500;
        letter-spacing: -0.01em;
    }

    .stl-warn-tooltip-list li::before {
        content: '';
        position: absolute;
        left: 0;
        top: 12px;
        width: 4px;
        height: 4px;
        border-radius: 50%;
        background: #f59e0b;
    }

    @media (max-width: 600px) {
        .stl-info-header {
            padding: 10px 12px;
        }

        .stl-info-divider {
            margin: 0 10px;
        }

        .stl-info-key {
            font-size: 9px;
        }

        .stl-info-val {
            font-size: 12px;
        }
    }

    /* ============================================================
       STL 검사 오류 모달
       ============================================================ */
    .stl-warning-popup {
        position: fixed;
        inset: 0;
        z-index: 9999;
        display: none;
        align-items: center;
        justify-content: center;
        padding: 20px;
    }

    .stl-warning-popup.show {
        display: flex;
    }

    .stl-warning-popup-bg {
        position: absolute;
        inset: 0;
        background: rgba(15, 23, 42, 0.55);
        backdrop-filter: blur(2px);
    }

    .stl-warning-popup-card {
        position: relative;
        width: 100%;
        max-width: 440px;
        background: #ffffff;
        border-radius: 16px;
        padding: 36px 32px 28px;
        text-align: center;
        box-shadow: 0 24px 60px rgba(15, 23, 42, 0.25);
        animation: stlWarnPop .25s ease-out;
    }

    @keyframes stlWarnPop {
        from {
            opacity: 0;
            transform: translateY(8px) scale(0.98);
        }

        to {
            opacity: 1;
            transform: translateY(0) scale(1);
        }
    }

    .stl-warning-popup-close {
        position: absolute;
        top: 14px;
        right: 14px;
        width: 36px;
        height: 36px;
        border: none;
        background: transparent;
        color: #6b7280;
        border-radius: 8px;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: background .15s ease, color .15s ease;
    }

    .stl-warning-popup-close:hover {
        background: #f3f4f6;
        color: #111827;
    }

    .stl-warning-popup-icon {
        margin: 0 auto 16px;
        display: flex;
        justify-content: center;
    }

    .stl-warning-popup-title {
        font-size: 18px;
        font-weight: 700;
        color: #111827;
        margin: 0 0 8px;
        letter-spacing: -0.01em;
    }

    .stl-warning-popup-subtitle {
        font-size: 13px;
        color: #6b7280;
        line-height: 1.55;
        margin: 0 0 20px;
    }

    .stl-warning-popup-list {
        list-style: none;
        padding: 14px 16px;
        margin: 0 0 24px;
        background: #fffbeb;
        border: 1px solid #fde68a;
        border-radius: 10px;
        text-align: left;
    }

    .stl-warning-popup-list li {
        position: relative;
        padding-left: 18px;
        font-size: 13px;
        color: #92400e;
        line-height: 1.5;
        margin: 0;
    }

    .stl-warning-popup-list li+li {
        margin-top: 8px;
    }

    .stl-warning-popup-list li::before {
        content: '';
        position: absolute;
        left: 4px;
        top: 8px;
        width: 6px;
        height: 6px;
        border-radius: 50%;
        background: #f59e0b;
    }

    .stl-warning-popup-confirm {
        width: 100%;
        height: 48px;
        border: none;
        border-radius: 10px;
        background: #0059ff;
        color: #fff;
        font-size: 14px;
        font-weight: 700;
        letter-spacing: -0.01em;
        cursor: pointer;
        transition: background .15s ease;
    }

    .stl-warning-popup-confirm:hover {
        background: #0046cc;
    }

    /* ============================================================
   GLUCK V23 · OPTIONS PANEL (RIGHT COLUMN)
   ============================================================ */
    .gluck-options-area {
        padding: 12px;
        background: #fff;
        min-height: 440px;
        display: flex;
        flex-direction: column;
    }

    @media (min-width: 1024px) {
        .gluck-options-area {
            padding: 12x;
        }
    }

    /* 대기 상태 (파트 ready 전) */
    .gluck-opt-waiting {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        text-align: center;
        gap: 8px;
    }

    .gluck-opt-waiting-title {
        font-size: 13px;
        font-weight: 600;
        color: var(--gluck-dark-2);
        line-height: 1.6;
        margin: 0;
    }

    .gluck-opt-waiting-sub {
        font-size: 10.5px;
        font-weight: 500;
        color: var(--gluck-dark);
        text-transform: uppercase;
        letter-spacing: 0.12em;
        margin: 0;
    }

    /* 파트 헤더 */
    .gluck-opt-header {
        display: flex;
        align-items: center;
        gap: 10px;
        margin-bottom: 20px;
        padding-bottom: 16px;
        border-bottom: 1px solid var(--gluck-border);
    }

    .gluck-opt-partnum {
        flex-shrink: 0;
        width: 32px;
        height: 32px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        background: var(--gluck-dark-3);
        color: #fff;
        border-radius: 6px;
        font-size: 11px;
        font-weight: 700;
    
    }

    .gluck-opt-header-text {
        min-width: 0;
        flex: 1;
    }

    .gluck-opt-filename {
        font-size: 13px;
        font-weight: 700;
        color: var(--gluck-dark-3);
    
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        margin: 0;
    }

    .gluck-opt-eyebrow {
        font-size: 10px;
        font-weight: 500;
        color: var(--gluck-dark);
        text-transform: uppercase;
        letter-spacing: 0.1em;
        margin: 2px 0 0;
    }

    /* 필드 공통 */
    .gluck-opt-field {
        margin-bottom: 20px;
    }

    .gluck-opt-row-2col {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 12px;
        margin-bottom: 20px;
    }

    .gluck-opt-row-2col .gluck-opt-field {
        margin-bottom: 0;
    }

    .gluck-opt-label {
        display: block;
        font-size: 12px;
        font-weight: 600;
        color: var(--gluck-dark-2);
        margin-bottom: 6px;
    }

    .gluck-opt-required {
        color: var(--gluck-brand);
        margin-left: 2px;
    }

.gluck-opt-process-fixed {
    height: 40px;
    padding: 0 12px;
    background: rgba(246, 247, 249, 0.6);
    border: 1px solid var(--gluck-border);
    border-radius: var(--gluck-radius-button);
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 12px;
    font-weight: 500;
    color: var(--gluck-dark-3);
    cursor: help;
    transition: border-color 0.15s ease;
}

.gluck-opt-process-fixed:hover {
    border-color: rgba(0, 89, 255, 0.4);
}

.gluck-opt-process-fixed svg {
    color: rgba(107, 114, 128, 0.7);
}

    /* 재료 드롭다운 */
    .gluck-opt-material-wrap {
        position: relative;
    }

    .gluck-opt-material-toggle {
        width: 100%;
        height: 40px;
        padding: 0 12px;
        background: #fff;
        border: 1px solid rgba(0, 89, 255, 0.4);
        border-radius: var(--gluck-radius-button);
        display: flex;
        align-items: center;
        justify-content: space-between;
        cursor: pointer;
        font-size: 12px;
        font-weight: 500;
        color: var(--gluck-dark-3);
        transition: all 0.15s ease;
    }

    /* 재료가 선택되지 않았을 때 — 살짝 강조 */
    .gluck-opt-material-toggle:not(.has-selection) {
        background: rgba(215, 225, 244, 0.2);
    }

    .gluck-opt-material-toggle:hover {
        border-color: var(--gluck-brand);
    }

    .gluck-opt-material-toggle.is-open {
        border-color: var(--gluck-brand);
        box-shadow: 0 0 0 3px rgba(0, 89, 255, 0.08);
    }

    .gluck-opt-material-toggle svg {
        color: var(--gluck-dark);
        transition: transform 0.2s ease;
    }

    .gluck-opt-material-toggle.is-open svg {
        transform: rotate(180deg);
    }

    .gluck-opt-material-display {
        display: flex;
        align-items: center;
        gap: 6px;
        min-width: 0;
        flex: 1;
    }

    .gluck-opt-material-empty {
        color: var(--gluck-brand);
        font-weight: 500;
    }

    /* 선택된 재료 표시 (라디오 change 시 JS가 채움) */
    .gluck-opt-material-display .gluck-opt-color-dot {
        width: 12px;
        height: 12px;
        border-radius: 50%;
        border: 1px solid rgba(0, 0, 0, 0.1);
        flex-shrink: 0;
    }

    .gluck-opt-material-display .gluck-opt-material-name-display {
        font-size: 12px;
        font-weight: 700;
        color: var(--gluck-dark-3);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    /* 재료 메뉴 */
    .gluck-opt-material-menu {
        position: absolute;
        z-index: 50;
        left: 0;
        right: 0;
        top: calc(100% + 6px);
        max-height: 280px;
        overflow-y: auto;
        background: #fff;
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-button);
        box-shadow: 0 12px 32px rgba(0, 0, 0, 0.08);
        padding: 6px;
    }

    .gluck-opt-material-menu[hidden] {
        display: none;
    }

    .gluck-opt-material-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 10px 12px;
        border-radius: 6px;
        cursor: pointer;
        transition: background 0.12s ease;
    }

    .gluck-opt-material-item:hover {
        background: rgba(246, 247, 249, 0.8);
    }

    .gluck-opt-material-item input[type="radio"] {
        display: none;
    }

    .gluck-opt-material-item:has(input[type="radio"]:checked) {
        background: rgba(215, 225, 244, 0.4);
    }

    .gluck-opt-material-item .gluck-opt-color-dot {
        width: 14px;
        height: 14px;
        border-radius: 50%;
        border: 1px solid rgba(0, 0, 0, 0.1);
        flex-shrink: 0;
    }

    .gluck-opt-material-name {
        font-size: 12.5px;
        font-weight: 600;
        color: var(--gluck-dark-3);
    
    }

    .gluck-opt-color-name {
        font-size: 12px;
        color: #1A1D24;
        font-weight: 700;

    }
.gluck-opt-material-item {
    min-width: 0;
    overflow: hidden;
}

/* 이름 + 사용처를 감싸는 무명 div */
.gluck-opt-material-item > div {
    min-width: 0;
    flex: 1;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

/* 재료명(색상명) 한 줄 처리 */
.gluck-opt-material-name {
    display: block;
    max-width: 100%;
    white-space: nowrap;
    overflow: hidden;
    line-height:1;
    text-overflow: ellipsis;
}

/* 사용처 wrapper - block 처리해야 max-width 먹음 */
.gluck-opt-color-purpose-wrap {
    display: block;
    max-width: 100%;
    overflow: hidden;
    line-height:1;
}

/* 사용처 텍스트 - 한 줄 + ... */
.gluck-opt-color-purpose {
    display: block;
    max-width: 100%;
    font-size: 10px;
    font-weight: 400;
    color: rgb(107 114 128 / 1);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
    /* 수량 컨트롤 */
    .gluck-opt-qty-control {
        height: 44px;
        background: #fff;
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-button);
        display: flex;
        align-items: stretch;
        overflow: hidden;
    }

    .gluck-opt-qty-btn {
        width: 44px;
        background: transparent;
        border: 0;
        color: var(--gluck-dark-2);
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: background 0.12s ease;
    }

    .gluck-opt-qty-btn:hover {
        background: rgba(246, 247, 249, 0.8);
    }

    .gluck-opt-qty-input {
        flex: 1;
        height: 100%;
        background: transparent;
        border: 0;
        text-align: center;
        font-size: 14px;
        font-weight: 600;
        color: var(--gluck-dark-3);
    
        outline: none;
        -moz-appearance: textfield;
    }

    .gluck-opt-qty-input::-webkit-outer-spin-button,
    .gluck-opt-qty-input::-webkit-inner-spin-button {
        -webkit-appearance: none;
        margin: 0;
    }

    /* 양산 안내 */
    .gluck-opt-bulk-note {
        margin-top: 8px;
        padding: 8px 10px;
            background-color: rgb(215 225 244 / 0.35);
            border: 1px solid rgb(0 89 255 / 0.25);
        border-radius: 6px;
        display: flex;
        align-items: flex-start;
        gap: 6px;
    }

    .gluck-opt-bulk-note.is-bulk {
        background: rgba(215, 225, 244, 0.4);
        border-color: rgba(0, 89, 255, 0.15);
    }

    .gluck-opt-bulk-note svg {
        flex-shrink: 0;
        margin-top: 2px;
        color: #0059ff;
    }

    .gluck-opt-bulk-note.is-bulk svg {
        color: var(--gluck-brand);
    }

    .gluck-opt-bulk-note p {
        font-size: 10.5px;
        line-height: 1.5;
        color: #0059ff;
        margin: 0;
    }

    .gluck-opt-bulk-note.is-bulk p {
        color: var(--gluck-dark-2);
        font-weight: 500;
    }

    /* Hollow 토글 */
    .gluck-opt-hollow-row {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 12px;
        padding: 10px 12px;
        background: #fff;
        border: 1px solid var(--gluck-border);
        border-radius: var(--gluck-radius-button);
    }

    .gluck-opt-hollow-text {
        min-width: 0;
    }

    .gluck-opt-hollow-label {
        font-size: 12px;
        font-weight: 600;
        color: var(--gluck-dark-2);
        margin: 0 0 2px;
    }

    .gluck-opt-hollow-desc {
        font-size: 10.5px;
        color: var(--gluck-dark);
        line-height: 1.4;
        margin: 0;
    }

    /* 토글 스위치 (커스텀 체크박스) */
    .gluck-opt-toggle-switch {
        position: relative;
        flex-shrink: 0;
        width: 44px;
        height: 24px;
        cursor: pointer;
    }

    .gluck-opt-toggle-switch input {
        opacity: 0;
        width: 0;
        height: 0;
        position: absolute;
    }

    .gluck-opt-toggle-slider {
        position: absolute;
        inset: 0;
        background: #D1D5DB;
        border-radius: 999px;
        transition: background 0.2s ease;
    }

    .gluck-opt-toggle-slider::before {
        content: '';
        position: absolute;
        width: 20px;
        height: 20px;
        left: 2px;
        top: 2px;
        background: #fff;
        border-radius: 50%;
        transition: transform 0.2s ease;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
    }

    .gluck-opt-toggle-switch input:checked+.gluck-opt-toggle-slider {
        background: var(--gluck-brand);
    }

    .gluck-opt-toggle-switch input:checked+.gluck-opt-toggle-slider::before {
        transform: translateX(20px);
    }

    .gluck-opt-toggle-switch input:disabled+.gluck-opt-toggle-slider {
        opacity: 0.4;
        cursor: not-allowed;
    }
/* ============================================================
   재료 hover 팝업 — v43 포팅 (Portal 대신 body 동적 생성)
   - 항목 hover 시 좌측(드롭다운 왼쪽)에 320px 카드 표시
   - color_subtit / color_desc / color_purpose 칩 노출
   - 우측 공간이 부족하면(좌측이 화면 밖이면) 우측으로 반전
   ============================================================ */
.gluck-mat-tooltip {
    position: fixed;
    width: 320px;
    max-width: calc(100vw - 16px);
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 12px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12);
    padding: 16px;
    z-index: 9999;
    pointer-events: none;
    opacity: 0;
    transform: translateY(2px);
    transition: opacity 0.12s ease, transform 0.12s ease;
}
.gluck-mat-tooltip.is-visible {
    opacity: 1;
    transform: translateY(0);
}

/* 헤더 — 컬러 닷 + 코드 + 부제 */
.gluck-mat-tooltip__header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding-bottom: 10px;
    margin-bottom: 10px;
    border-bottom: 1px solid rgba(229, 231, 235, 0.6);
}
.gluck-mat-tooltip__dot {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    border: 1px solid rgba(0, 0, 0, 0.1);
    box-shadow: 0 0 0 2px #fff;
    flex-shrink: 0;
}
.gluck-mat-tooltip__title {
    min-width: 0;
}
.gluck-mat-tooltip__code {
    font-size: 13px;
    font-weight: 700;
    color: #111827;
    line-height: 1.2;
}
.gluck-mat-tooltip__subtit {
    font-size: 10.5px;
    color: #6B7280;
    margin-top: 2px;
}

/* 본문 설명 */
.gluck-mat-tooltip__desc {
    font-size: 11.5px;
    color: #374151;
    line-height: 1.65;
    margin-bottom: 10px;
    word-break: keep-all;
    overflow-wrap: break-word;
}

/* 사용처 라벨 + 칩 영역 */
.gluck-mat-tooltip__use-label {
    font-size: 9.5px;
    font-weight: 600;
    color: #6B7280;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-bottom: 6px;
}
.gluck-mat-tooltip__chips {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}
.gluck-mat-tooltip__chip {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    background: #F6F7F9;
    color: #374151;
    font-size: 10px;
    font-weight: 500;
    border-radius: 999px;
    line-height: 1.6;
}

/* 빈 섹션 숨김 */
.gluck-mat-tooltip__desc:empty,
.gluck-mat-tooltip__subtit:empty { display: none; }
    /* 견적 계산 버튼 */
    .gluck-opt-calc-btn {
        width: 100%;
        height: 48px;
        background: var(--gluck-brand);
        color: #fff;
        border: 0;
        border-radius: var(--gluck-radius-button);
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 8px;
        transition: background 0.15s ease;
        margin-top: 8px;
    }

    .gluck-opt-calc-btn:hover:not(:disabled) {
        background: var(--gluck-brand-hover);
    }

    .gluck-opt-calc-btn:active:not(:disabled) {
        background: var(--gluck-brand-active);
    }

    .gluck-opt-calc-btn:disabled {
        background: var(--gluck-gray);
        cursor: not-allowed;
    }

    .gluck-opt-calc-btn svg {
        opacity: 0.7;
        transition: transform 0.15s ease;
    }

    .gluck-opt-calc-btn:hover:not(:disabled) svg {
        transform: translateX(2px);
    }

    /* 재료 미선택 안내 */
    .gluck-opt-material-hint {
        margin: 8px 0 0;
        font-size: 11px;
        font-weight: 500;
        color: var(--gluck-brand);
        text-align: center;
    }

    /* 견적 결과 카드 — 기존 result-card-v2 스타일 그대로 활용 (P3 톤 보정 적용됨) */
    /* 추가 보정만 */
    .gluck-opt-result.result-card-v2 {
        margin-top: 16px;
    }

    /* 리셋 버튼 */
    .gluck-opt-reset-btn {
        width: 100%;
        height: 44px;
        margin-top: 10px;
        background: #fff;
        color: var(--gluck-brand);
        border: 1.5px solid var(--gluck-brand);
        border-radius: var(--gluck-radius-button);
        font-size: 13px;
        font-weight: 600;
        cursor: pointer;
        transition: background 0.15s ease;
    }

    .gluck-opt-reset-btn:hover {
        background: rgba(215, 225, 244, 0.4);
    }

    /* ============================================================
   GLUCK V23 · PROJECT SUMMARY TABLE (PART 4-2b)
   ============================================================ */
    .gluck-summary-wrap {
        background: #fff;
        border: 1px solid var(--gluck-border);
	border-top:none;
        border-bottom-left-radius:12px;
border-bottom-right:12px;
        box-shadow: var(--gluck-shadow-card);
        overflow: hidden;
	padding-bottom:20px;
    }

    .gluck-summary-head {
        padding: 20px 24px 16px;
        display: flex;
        align-items: center;
        justify-content: space-between;
    }

    .gluck-summary-head-left {
        display: inline-flex;
        align-items: center;
        gap: 10px;
    }

    .gluck-summary-accent {
        width: 3px;
        height: 18px;
        background: var(--gluck-brand);
        border-radius: 2px;
    }

    .gluck-summary-title {
        font-size: 14px;
        font-weight: 700;
        color: var(--gluck-dark-3);
        margin: 0;
        letter-spacing: -0.01em;
    }

    .gluck-summary-count {
        font-size: 12px;
        font-weight: 600;
        color: var(--gluck-brand);
    
    }

    .gluck-summary-table-foot-wrap{
     padding:0 24px;
}

.gluck-summary-table-foot-wrap{
    padding:0 24px;
}

/* 합계 박스 테두리/라운드는 <tr>이 아니라 래퍼 div에 건다.
   부모 table이 border-collapse:collapse라 tr/td엔 radius가 안 먹기 때문. */
.has-foot .gluck-summary-table-foot-wrap > div{
    border: 1px solid var(--gluck-border);
    border-top:none;
    background-color: rgb(215 225 244 / 0.25);
}

.gluck-summary-table-foot-wrap > div{

    border-bottom-left-radius: 12px;
    border-bottom-right-radius: 12px;

    overflow: hidden;
}
    /* ── 테이블 ── */
    .gluck-summary-table-wrap {
    overflow:hidden;
    padding-left: 24px;
    padding-right: 24px;
    border-radius: 4px;

    }
.gluck-summary-wrap.has-foot .gluck-summary-table-con{
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
}
    .gluck-summary-table-con{
    overflow-y: auto;
    max-height: 300px;
    border-radius: 12px;
    border: 1px solid var(--gluck-border);
    border-top: none;
    }

  .gluck-summary-table-con::-webkit-scrollbar {
  width: 4px;
}

  .gluck-summary-table-con::-webkit-scrollbar-thumb {
  background-color: #e6e6e6;
  /* 썸 색상 */
  border-radius: 10px;
}

    .gluck-summary-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 13px;
    }

    .gluck-summary-table thead th {
        background: rgba(246, 247, 249, 0.6);
        padding: 10px 16px;
        text-align: left;
        font-size: 10.5px;
        font-weight: 600;
        color: var(--gluck-dark);
        text-transform: uppercase;
        letter-spacing: 0.08em;
        border-top: 1px solid var(--gluck-border);
        border-bottom: 1px solid var(--gluck-border);
        white-space: nowrap;
    }

    .gluck-summary-table thead .gluck-summary-th-num {
        width: 60px;
        text-align: center;
    }

    .gluck-summary-table thead .gluck-summary-th-qty {
        width: 80px;
        text-align: center;
    }

    .gluck-summary-table thead .gluck-summary-th-price {
        width: 180px;
        text-align: right;
        padding-right: 24px;
    }

    .gluck-summary-row {
        cursor: pointer;
        transition: background 0.12s ease;
        border-bottom: 1px solid var(--gluck-border);
    }

    .gluck-summary-row:hover {
        background: rgba(246, 247, 249, 0.5);
    }

    .gluck-summary-row td {
        padding: 14px 16px;
        color: var(--gluck-dark-3);
        vertical-align: middle;
    }

    .gluck-summary-td-num {
        text-align: center;
    }

    .gluck-summary-partnum {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 28px;
        height: 28px;
        background: var(--gluck-dark-3);
        color: #fff;
        border-radius: 6px;
        font-size: 11px;
        font-weight: 700;
    
    }

    .gluck-summary-filename {
        font-size: 13px;
        font-weight: 600;
        color: var(--gluck-dark-3);
    
        margin: 0;
    }

    .gluck-summary-filesize {
        font-size: 11px;
        color: var(--gluck-dark);
        margin-top: 2px;
    
    }

    .gluck-summary-td-dims {
    
        font-size: 12px;
        color: var(--gluck-dark-2);
    }

    .gluck-summary-td-mat {
        font-size: 12px;
        color: var(--gluck-dark-3);
    }

    .gluck-summary-color-dot {
        display: inline-block;
        width: 12px;
        height: 12px;
        border-radius: 50%;
        margin-right: 6px;
        vertical-align: middle;
        border: 1px solid rgba(0, 0, 0, 0.08);
    }

    .gluck-summary-hollow-badge {
        display: inline-block;
        margin-left: 6px;
        padding: 2px 6px;
        background: rgba(215, 225, 244, 0.4);
        color: var(--gluck-brand);
        border-radius: 4px;
        font-size: 10px;
        font-weight: 600;
        vertical-align: middle;
    }

    .gluck-summary-td-qty {
        text-align: center;
    
        font-size: 13px;
        font-weight: 600;
        color: var(--gluck-dark-3);
    }

    .gluck-summary-td-price {
        text-align: right;
        padding-right: 24px !important;
    }

    .gluck-summary-price-total {
        font-size: 15px;
        font-weight: 800;
        color: var(--gluck-dark-3);
    
        font-feature-settings: "tnum";
        letter-spacing: -0.01em;
    }

    .gluck-summary-price-unit {
        font-size: 10.5px;
        color: var(--gluck-dark);
        margin-top: 2px;
    
    }

    .gluck-summary-pending {
        color: var(--gluck-gray);
        font-size: 12px;
        font-weight: 500;
    }

    /* ── footer (프로젝트 합계) ── */
    .gluck-summary-foot td {
        padding: 16px 16px;
        background: rgba(246, 247, 249, 0.5);
    }

    .gluck-summary-foot-label {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        color: var(--gluck-brand);
        font-weight: 700;
    }

    .gluck-summary-foot-label strong {
        font-size: 13px;
        color: var(--gluck-dark-3);
    }

    .gluck-summary-foot-meta {
        font-size: 11.5px;
        color: var(--gluck-dark);
        font-weight: 500;
        margin-left: 4px;
    }

    .gluck-summary-foot-qty {
        text-align: center;
    
        font-size: 14px;
        font-weight: 700;
        color: var(--gluck-dark-3);
    }

    .gluck-summary-foot-total {
        text-align: right;
        padding-right: 24px !important;
    
        font-size: 18px;
        font-weight: 800;
        color: #0059ff;
        letter-spacing: -0.01em;
        font-feature-settings: "tnum";
    }

    /* ── CTA row ── */
    .gluck-summary-cta-row {
        padding: 18px 24px 0px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 16px;
        flex-wrap: wrap;
    }

    .gluck-summary-disclaimer {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        font-size: 11.5px;
        color: var(--gluck-dark);
        line-height: 1.5;
        flex: 1;
        min-width: 0;
	    color: #0059ff;
    }

    .gluck-summary-disclaimer svg {
	width:14px;
        flex-shrink: 0;
       color: #0059ff;;
    }

    .gluck-summary-cta {
        flex-shrink: 0;
        height: 44px;
        padding: 0 20px;
        background: var(--gluck-brand);
        color: #fff;
        border: 0;
        border-radius: var(--gluck-radius-button);
        font-size: 13.5px;
        font-weight: 600;
        cursor: pointer;
        display: inline-flex;
        align-items: center;
        gap: 8px;
        transition: background 0.15s ease;
    }

    .gluck-summary-cta:hover:not(:disabled) {
        background: var(--gluck-brand-hover);
    }

    .gluck-summary-cta:active:not(:disabled) {
        background: var(--gluck-brand-active);
    }

    .gluck-summary-cta:disabled {
        background: var(--gluck-gray);
        cursor: not-allowed;
    }

    .gluck-summary-cta svg {
        transition: transform 0.15s ease;
    }

    .gluck-summary-cta:hover:not(:disabled) svg {
        transform: translateX(2px);
    }

    /* 모바일 대응 */
    @media (max-width: 768px) {
        .gluck-summary-cta-row {
            flex-direction: column;
            align-items: stretch;
        }

        .gluck-summary-cta {
            width: 100%;
            justify-content: center;
        }
    }

    /* ============================================================
   GLUCK V23 · SIDEBAR PART CARD EXTENSION (PART 4-2b-1.5a)
   ============================================================ */

/* 파트 카드 본체 — 선택 상태에서 액션 버튼 영역 확장 */
.gluck-part-card.is-selected {
    padding-bottom: 10px;
}

/* 재료 + 수량 한 줄 */
.gluck-part-meta {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 4px;
}

.gluck-part-mat-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    border: 1px solid rgba(0, 0, 0, 0.1);
    flex-shrink: 0;
}

.gluck-part-mat-dot.is-empty {
    background: var(--gluck-gray);
    border-color: var(--gluck-gray);
}

.gluck-part-mat-text {
    font-size: 10.5px;
    font-weight: 500;
    color: var(--gluck-dark);

    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 140px;
}

/* 견적 가격 (견적 완료 시만 표시) */
.gluck-part-price {
    margin: 6px 0 0 0;
    font-size: 12px;
    font-weight: 800;
    color: var(--gluck-dark-3);

    font-feature-settings: "tnum";
    letter-spacing: -0.01em;
}

/* "n건 검토" 뱃지 */
.gluck-part-risk-badge {
    margin-top: 6px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 2px 6px;
    background: rgba(245, 158, 11, 0.1);
    color: #d97706;
    border: 0;
    border-radius: 4px;
    font-size: 10px;
    font-weight: 700;
    cursor: pointer;
    transition: background 0.12s ease;
}

.gluck-part-risk-badge:hover {
    background: rgba(245, 158, 11, 0.2);
}

/* 액션 버튼 영역 (복제/삭제) — 선택 시만 노출 */
.gluck-part-actions {
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid rgba(0, 89, 255, 0.15);
    display: flex;
    align-items: center;
    gap: 4px;
}

.gluck-part-action-btn {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 5px 6px;
    background: transparent;
    border: 0;
    color: var(--gluck-dark-2);
    font-size: 10.5px;
    font-weight: 600;
    cursor: pointer;
    border-radius: 4px;
    transition: color 0.12s ease, background 0.12s ease;
}

.gluck-part-action-btn:hover {
    color: var(--gluck-brand);
    background: rgba(0, 89, 255, 0.05);
}

.gluck-part-action-btn.is-danger:hover {
    color: #DC2626;
    background: rgba(220, 38, 38, 0.05);
}

.gluck-part-action-sep {
    width: 1px;
    height: 12px;
    background: rgba(0, 89, 255, 0.15);
}

/* ============================================================
   GLUCK V23 · STL WARNING MODAL (PART 4-2b-1.5b)
   ============================================================ */
.gluck-stl-warning-modal {
    position: fixed;
    inset: 0;
    z-index: 10000;
    display: none;
    align-items: center;
    justify-content: center;
    padding: 24px;
}

.gluck-stl-warning-modal.is-open {
    display: flex;
    animation: gluckFadeIn 0.2s ease;
}

@keyframes gluckFadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

.gluck-stl-warning-modal-bg {
    position: absolute;
    inset: 0;
    background: rgba(26, 29, 36, 0.4);
    backdrop-filter: blur(4px);
    cursor: pointer;
}

.gluck-stl-warning-modal-card {
    position: relative;
    width: 100%;
    max-width: 440px;
    background: #fff;
    border-radius: 16px;
    border: 1px solid var(--gluck-border);
    box-shadow: 0 24px 60px rgba(0, 0, 0, 0.2);
    overflow: hidden;
    animation: gluckSlideUp 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

@keyframes gluckSlideUp {
    from {
        opacity: 0;
        transform: translateY(8px) scale(0.98);
    }
    to {
        opacity: 1;
        transform: translateY(0) scale(1);
    }
}

.gluck-stl-warning-modal-close {
    position: absolute;
    top: 14px;
    right: 14px;
    width: 32px;
    height: 32px;
    background: transparent;
    border: 0;
    color: var(--gluck-dark);
    border-radius: 8px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background 0.12s ease, color 0.12s ease;
    z-index: 1;
}

.gluck-stl-warning-modal-close:hover {
    background: rgba(246, 247, 249, 0.8);
    color: var(--gluck-dark-3);
}

.gluck-stl-warning-modal-body {
    padding: 36px 28px 24px;
    text-align: center;
}

.gluck-stl-warning-modal-icon {
    display: inline-flex;
    width: 48px;
    height: 48px;
    background: rgba(245, 158, 11, 0.12);
    border-radius: 50%;
    align-items: center;
    justify-content: center;
    color: #d97706;
    margin-bottom: 16px;
}

.gluck-stl-warning-modal-title {
    font-size: 17px;
    font-weight: 700;
    color: var(--gluck-dark-3);
    letter-spacing: -0.02em;
    margin: 0 0 8px;
}

.gluck-stl-warning-modal-subtitle {
    font-size: 12.5px;
    color: var(--gluck-dark);
    line-height: 1.6;
    margin: 0 0 20px;
}

.gluck-stl-warning-modal-list {
    list-style: none;
    padding: 14px 16px;
    margin: 0;
    background: rgba(245, 158, 11, 0.06);
    border: 1px solid rgba(245, 158, 11, 0.2);
    border-radius: 12px;
    text-align: left;
}

.gluck-stl-warning-modal-list li {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 12.5px;
    line-height: 1.6;
    color: #78350f;
    font-weight: 500;
}

.gluck-stl-warning-modal-list li + li {
    margin-top: 8px;
}

.gluck-stl-warning-modal-list li::before {
    content: '';
    flex-shrink: 0;
    margin-top: 6px;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: #f59e0b;
}

.gluck-stl-warning-modal-footer {
    padding: 0 16px 16px;
}

.gluck-stl-warning-modal-confirm {
    width: 100%;
    height: 48px;
    background: var(--gluck-brand);
    color: #fff;
    border: 0;
    border-radius: var(--gluck-radius-button);
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    letter-spacing: -0.01em;
    transition: background 0.15s ease;
}

.gluck-stl-warning-modal-confirm:hover {
    background: var(--gluck-brand-hover);
}

.gluck-stl-warning-modal-confirm:active {
    background: var(--gluck-brand-active);
}

/* 옛 .stl-warning-popup-* CSS는 이번 작업으로 deprecated.
   호환을 위해 남겨두되, 마크업이 없으므로 효과 없음.
   다음 정리 작업 (PART 6 cleanup)에서 제거 예정. */

.gluck-viewer-caption {
    margin-top: 10px;
    padding: 0 4px;
}

.gluck-viewer-caption-info {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    color: var(--gluck-dark);
    line-height: 1.5;
    font-weight: 500;
}

.gluck-viewer-caption-info svg {
    flex-shrink: 0;
    color: var(--gluck-gray);
}

.gluck-viewer-caption-cubehint strong {
    color: var(--gluck-brand);
    font-weight: 700;
}

.gluck-opt-hollow-row.is-locked {
    background: rgba(0, 89, 255, 0.04);
    border-color: rgba(0, 89, 255, 0.18);
}

.gluck-opt-hollow-row.is-locked .gluck-opt-hollow-label {
    color: var(--gluck-brand);
}

.gluck-opt-hollow-row.is-locked .gluck-opt-hollow-desc {
    color: var(--gluck-brand);
    opacity: 0.85;
    font-weight: 500;
}

/* 잠금 상태일 때 스위치 — 비활성 + 파란 톤 유지 */
.gluck-opt-hollow-row.is-locked .gluck-opt-toggle-switch {
    cursor: not-allowed;
    opacity: 0.65;
}

.gluck-opt-hollow-row.is-locked .gluck-opt-toggle-slider {
    background: var(--gluck-brand);
}

/* ============================================================
   GLUCK V23 · META BAR VOLUME HOLLOW HIGHLIGHT
   ============================================================ */

/* hollow 상태일 때 VOLUME 값 파란 강조 */
#gluck-meta-volume.is-hollow {
    color: var(--gluck-brand);
}
/* ============================================================
   [v44] 파일 용량 초과 모달 (v43 디자인 이식)
   - STL 검사 모달(#gluck-stl-warning-modal)과는 별개 인스턴스
   - 빨강 톤(에러) + 원형 alert 아이콘 + 파랑 CTA
   ============================================================ */
.gluck-size-error-modal {
    position: fixed;
    inset: 0;
    z-index: 10001;                 /* STL 모달(10000)보다 1 위 — 동시 발생 시 우선 */
    display: none;
    align-items: center;
    justify-content: center;
    padding: 24px;
}
.gluck-size-error-modal.is-open {
    display: flex;
    animation: gluckFadeIn 0.2s ease;
}
.gluck-size-error-modal-bg {
    position: absolute;
    inset: 0;
    background: rgba(26, 29, 36, 0.4);
    backdrop-filter: blur(4px);
    cursor: pointer;
}
.gluck-size-error-modal-card {
    position: relative;
    width: 100%;
    max-width: 440px;               /* v43 max-w-md */
    background: #fff;
    border-radius: 16px;            /* v43 rounded-2xl */
    border: 1px solid #E6E8EC;      /* gluck-border */
    box-shadow: 0 24px 60px rgba(0, 0, 0, 0.2);
    overflow: hidden;
    animation: gluckSlideUp 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}
.gluck-size-error-modal-body {
    padding: 28px;                  /* v43 p-7 */
}
.gluck-size-error-modal-head {
    display: flex;
    align-items: center;
    gap: 10px;                      /* v43 gap-2.5 */
    margin-bottom: 16px;            /* v43 mb-4 */
}
.gluck-size-error-modal-icon {
    width: 36px;                    /* v43 w-9 */
    height: 36px;
    background: #FEF2F2;            /* v43 bg-red-50 */
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #EF4444;                 /* v43 text-red-500 */
    flex-shrink: 0;
}
.gluck-size-error-modal-title {
    margin: 0;
    font-size: 17px;
    font-weight: 700;
    color: #1A1D24;                 /* gluck-dark-3 */
    letter-spacing: -0.02em;
}
.gluck-size-error-modal-desc {
    margin: 0 0 12px;
    font-size: 13px;
    color: #4B5260;                 /* gluck-dark */
    line-height: 1.6;
}
.gluck-size-error-modal-list {
    list-style: none;
    margin: 0;
    padding: 12px;
    background: rgba(246, 247, 249, 0.6);  /* gluck-gray-superlight/60 */
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;                       /* v43 space-y-1.5 */
}
.gluck-size-error-modal-list li {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    font-size: 11.5px;
}
.gluck-size-error-modal-list .gluck-size-error-name {
    color: #1A1D24;                 /* gluck-dark-3 */
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 260px;
    font-variant-numeric: tabular-nums;
}
.gluck-size-error-modal-list .gluck-size-error-size {
    color: #EF4444;                 /* v43 text-red-500 */
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}
.gluck-size-error-modal-footer {
    padding: 16px;                  /* v43 p-4 */
    background: rgba(246, 247, 249, 0.3);  /* gluck-gray-superlight/30 */
    border-top: 1px solid #E6E8EC;
}
.gluck-size-error-modal-confirm {
    width: 100%;
    height: 44px;                   /* v43 h-11 */
    font-size: 14px;
    font-weight: 600;
    border-radius: 8px;
    background: #0059FF;            /* gluck-blue */
    color: #fff;
    border: none;
    cursor: pointer;
    transition: background 0.15s;
    font-family: inherit;
}
.gluck-size-error-modal-confirm:hover {
    background: #0046CC;            /* gluck-blue-tone-up */
}

.gluck-opt-hollow-row.is-active {
    background: #EEF3FE;                /* gluck-blue-light 톤 */
    border-color: rgba(0, 89, 255, 0.25);
}
.gluck-opt-hollow-row.is-active .gluck-opt-hollow-label {
    color: #0059FF;                     /* gluck-blue */
}
.gluck-opt-hollow-row.is-active .gluck-opt-hollow-desc {
    color: #1A6AFF;                     /* gluck-blue-soft */
}

/* 자동 감지 상태 (is-locked): 동일한 톤으로 강조 + 토글 잠금 표시 */
.gluck-opt-hollow-row.is-locked {
    background: #EEF3FE;
    border-color: rgba(0, 89, 255, 0.25);
}
.gluck-opt-hollow-row.is-locked .gluck-opt-hollow-label {
    color: #0059FF;
}
.gluck-opt-hollow-row.is-locked .gluck-opt-hollow-desc {
    color: #1A6AFF;
}
/* is-locked일 때 토글 비활성 표시(시각적 hint만, 토글 모양은 유지) */
.gluck-opt-hollow-row.is-locked .gluck-opt-toggle-switch {
    cursor: not-allowed;
}

/* VOLUME 카드 — 속비움 적용 배지 (V43 스타일 이식) */
.gluck-meta-cell .gluck-meta-label-row {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.gluck-hollow-badge {
    display: none;                      /* 기본 숨김, JS에서 hollow ON 시 inline-flex */
    align-items: center;
    font-size: 9.5px;
    font-weight: 700;
    color: #0059FF;
    background: #EEF3FE;
    padding: 1px 5px;
    border-radius: 3px;
    letter-spacing: -0.2px;
    line-height: 1.4;
    white-space: nowrap;
}
.gluck-meta-cell.is-hollow .gluck-hollow-badge {
    display: inline-flex;
}
/* VOLUME 값 자체도 hollow일 때 파란 강조 (기존 .is-hollow 클래스 보강) */
#gluck-meta-volume.is-hollow {
    color: #0059FF;
    font-weight: 700;
}

/* ============================================================
   [v44 ISSUE#4] 사이드바 파트 카드 — 선택(활성) 상태 강조
   - v43 기준: border-gluck-blue + bg-gluck-blue-light/40 + shadow-sm
   - GLUCK Blue: #0059FF, Blue Light: #EEF3FE
   - 어댑터가 카드 div에 .is-selected 클래스를 붙이지만 기존 CSS가 없어
     모든 카드가 흰색으로 보였음. 이 블록으로 시각적 활성 표시 보강.
   ============================================================ */
.gluck-part-card {
    transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
}
.gluck-part-card.is-selected {
    background: rgba(238, 243, 254, 0.55);      /* gluck-blue-light/55 */
    border-color: #0059FF;
    box-shadow: 0 1px 3px rgba(0, 89, 255, 0.08);
}
.gluck-part-card.is-selected .gluck-part-num {
    background: #0059FF;
    color: #fff;
}
.gluck-part-card.is-selected .gluck-part-filename {
    color: #0059FF;
}
/* 비선택 카드 hover — 선택 카드와 구분되도록 약하게 */
.gluck-part-card:not(.is-selected):hover {
    background: rgba(246, 247, 249, 0.7);       /* gluck-gray-superlight/70 */
    border-color: rgba(0, 89, 255, 0.25);
}

/* ============================================================
   [v44 ISSUE#4-FOLLOWUP] 프로젝트 견적 요약 테이블 — 활성 파트 행 강조
   - 사이드바 카드(.gluck-part-card.is-selected)와 동일 톤(파란 background + 좌측 강조 바)
   - 어댑터의 renderSummaryTable이 selectedPartId === part.id인 <tr>에
     .is-selected를 부착하며, selectPart에서 자동 재렌더됨.
   - 행 첫 셀 좌측에 4px 파란 바를 깔아 시각적 앵커 제공 (테이블 전체 정렬은 그대로).
   ============================================================ */
.gluck-summary-row {
    transition: background 0.15s;
    cursor: pointer;
}
.gluck-summary-row.is-selected {
    background: rgba(238, 243, 254, 0.55);      /* gluck-blue-light/55 — 카드와 동일 */
}
.gluck-summary-row.is-selected > td {
    background: rgba(238, 243, 254, 0.55);      /* td에 background 있어도 덮어쓰기 위해 */
}

.gluck-summary-row.is-selected .gluck-summary-partnum {
    background: #0059FF;
    color: #fff;
}
.gluck-summary-row.is-selected .gluck-summary-filename {
    color: #0059FF;
    font-weight: 600;
}
/* hover (비선택일 때만) */
.gluck-summary-row:not(.is-selected):hover {
    background: rgba(246, 247, 249, 0.7);
}
.gluck-summary-row:not(.is-selected):hover > td {
    background: rgba(246, 247, 249, 0.7);
}

/* ════════════════════════════════════════════════════════════════
   v46: ViewerToolsPanel 전용 보조 스타일
   ──────────────────────────────────────────────────────────────── */
@keyframes gluckVtoolsScaleIn {
    from { opacity: 0; transform: scale(0.96); }
    to   { opacity: 1; transform: scale(1); }
}
@keyframes gluckVtoolsFadeIn {
    from { opacity: 0; transform: translateY(-4px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* 미니 버튼 hover */
#gluck-vtools-mini:hover {
    border-color: rgba(0, 89, 255, 0.30) !important;
    box-shadow: 0 4px 14px -2px rgba(15, 18, 28, 0.16) !important;
}
#gluck-vtools-mini:hover svg {
    stroke: #0059FF !important;
}
#gluck-vtools-mini:active {
    transform: scale(0.95);
}
/* 닫기 버튼 hover */
#gluck-vtools-close:hover {
    background: rgba(255, 255, 255, 0.10) !important;
}
/* 헤더 호버 (트리거 버튼들) */
#gluck-vtools-adv-toggle:hover,
#gluck-vtools-orient-toggle:hover,
#gluck-vtools-scale-toggle:hover,
#gluck-vtools-clip-toggle:hover {
    background: rgba(246, 247, 249, 0.50) !important;
}

/* 보기 모드/그리드/단면 버튼 hover (비활성) */
.gluck-vtools-vm-btn:not(.is-active):hover,
.gluck-vtools-grid-btn:not(.is-active):hover,
.gluck-vtools-clip-btn:not(.is-active):hover {
    color: #2D3139 !important;
}

/* 6면 프리셋 버튼 hover (비활성) */
.gluck-vtools-orient-btn:not(.is-active):hover {
    border-color: rgba(0, 89, 255, 0.40) !important;
    color: #0059FF !important;
}

/* 축별 각도 버튼 hover (비활성) */
.gluck-vtools-axis-btn:not(.is-active):hover {
    border-color: rgba(0, 89, 255, 0.40) !important;
}

/* 빠른 스케일 버튼 hover (비활성) */
.gluck-vtools-scale-quick:not(.is-active):hover {
    border-color: rgba(0, 89, 255, 0.40) !important;
    color: #0059FF !important;
}

/* 펼침 애니메이션 */
#gluck-vtools-panel.is-open {
    animation: gluckVtoolsScaleIn 0.18s ease-out;
}
#gluck-vtools-adv-body.is-open,
#gluck-vtools-orient-body.is-open,
#gluck-vtools-scale-body.is-open,
#gluck-vtools-clip-body.is-open,
#gluck-vtools-orient-adv.is-open {
    animation: gluckVtoolsFadeIn 0.18s ease-out;
}

/* ════════════════════════════════════════════════════════════════
   v46: DIMENSIONS mm/inch 토글 (표시 전용)
   ──────────────────────────────────────────────────────────────── */
.gluck-meta-label-row {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.gluck-dim-unit-toggle {
    display: inline-flex;
    align-items: center;
    background: rgba(246, 247, 249, 0.80);
    border: 1px solid rgba(230, 232, 236, 0.6);
    border-radius: 5px;
    padding: 1px;
    margin-left: auto;
}
.gluck-dim-unit-btn {
    padding: 1px 7px;
    border-radius: 3px;
    font-size: 8.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-variant-numeric: tabular-nums;
    background: transparent;
    color: #6B7280;
    border: none;
    cursor: pointer;
    font-family: inherit;
    transition: all 0.15s;
}
.gluck-dim-unit-btn.is-active {
    background: #fff;
    color: #0059FF;
    box-shadow: 0 1px 2px rgba(15, 18, 28, 0.06);
}
.gluck-dim-unit-btn:not(.is-active):hover {
    color: #2D3139;
}

/* ════════════════════════════════════════════════════════════════
   v46: DIMENSIONS 카드 라벨 — 토글 자리 확보를 위한 flex 정렬
   ──────────────────────────────────────────────────────────────── */
#gluck-meta-bar .gluck-meta-cell .gluck-meta-label.gluck-meta-label-with-toggle {
    display: flex;
    align-items: center;
    width: 100%;
}

/* ════════════════════════════════════════════════════════════════
   v46: 제조성 검토 알림 — 검사 항목 보기 (DfM 상세) 통합 영역
   ──────────────────────────────────────────────────────────────── */
.gluck-risk-card-dfm-toggle {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 8px 14px;
    background: transparent;
    border: none;
    border-top: 1px solid rgba(230, 232, 236, 0.6);
    cursor: pointer;
    font-family: inherit;
    transition: background 0.15s;
}
.gluck-risk-card-dfm-toggle:hover {
    background: rgba(246, 247, 249, 0.4);
}
.gluck-risk-card-dfm-body {
    display: none;
    border-top: 1px solid rgba(230, 232, 236, 0.6);
    background: rgba(246, 247, 249, 0.30);
    padding: 12px 14px;
}
.gluck-risk-card-dfm-body.is-open {
    display: block;
    animation: gluckVtoolsFadeIn 0.2s ease-out;
}
/* ═══════════════════════════════════════════════════════════
   v56 MethodTooltip 이식 (2026-05-21)
   "광경화성 레진" 박스 hover 시 표시되는 SLA 설명 팝업
   ═══════════════════════════════════════════════════════════ */
@keyframes gmtFadeIn {
    from { opacity: 0; transform: translateY(2px); }
    to   { opacity: 1; transform: translateY(0); }
}

.gluck-method-tooltip {
    position: fixed;
    top: 0;
    left: 0;
    width: 300px;
    max-width: calc(100vw - 16px);
    padding: 16px;
    background: #ffffff;
    border: 1px solid var(--gluck-border);
    border-radius: 12px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12);
    z-index: 9999;
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.15s ease, visibility 0.15s ease;
}

.gluck-method-tooltip.is-visible {
    opacity: 1;
    visibility: visible;
    animation: gmtFadeIn 0.15s ease;
}

.gluck-method-tooltip .gmt-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 10px;
    padding-bottom: 10px;
    border-bottom: 1px solid rgba(230, 232, 236, 0.6);
}

.gluck-method-tooltip .gmt-icon-wrap {
    width: 20px;
    height: 20px;
    border-radius: 6px;
    background: var(--gluck-brand-light);
    color: var(--gluck-brand);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.gluck-method-tooltip .gmt-title-wrap {
    min-width: 0;
}

.gluck-method-tooltip .gmt-title {
    margin: 0;
    font-size: 13px;
    font-weight: 700;
    color: var(--gluck-dark-3);
    font-variant-numeric: tabular-nums;
    line-height: 1.3;
}

.gluck-method-tooltip .gmt-subtitle {
    margin: 0;
    font-size: 10.5px;
    color: var(--gluck-dark);
    text-transform: uppercase;
    letter-spacing: 0.1em;
    line-height: 1.3;
}

.gluck-method-tooltip .gmt-desc {
    margin: 0 0 10px 0;
    font-size: 11.5px;
    color: var(--gluck-dark-2);
    line-height: 1.65;
    word-break: keep-all;
    overflow-wrap: break-word;
}

.gluck-method-tooltip .gmt-uses-label {
    margin: 0 0 4px 0;
    font-size: 9.5px;
    font-weight: 600;
    color: var(--gluck-dark);
    text-transform: uppercase;
    letter-spacing: 0.1em;
}

.gluck-method-tooltip .gmt-uses-list {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}

.gluck-method-tooltip .gmt-use-tag {
    display: inline-flex;
    align-items: center;
    padding: 2px 6px;
    background: #F6F7F9;
    color: var(--gluck-dark-2);
    font-size: 10px;
    font-weight: 500;
    border-radius: 4px;
}

.gluck-part-actions { display: none; }
.gluck-part-card.is-selected .gluck-part-actions { display: flex; }

/* 회전 자유각 입력 — 네이티브 스피너 제거 (숫자 가림 방지) */
.gluck-vtools-axis-num::-webkit-outer-spin-button,
.gluck-vtools-axis-num::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.gluck-vtools-axis-num { -moz-appearance: textfield; appearance: textfield; }