5180 fichiers 38.5 Mo 0 téléchargements 95 vues mis à jour il y a 4 heures ui
index.css 56.4 Ko Télécharger le fichier
@import 'tailwindcss';
@import url('https://fonts.googleapis.com/css2?family=Cherry+Bomb+One&family=Pixelify+Sans:wght@400..700&family=Vampiro+One&display=swap');

@config "../../tailwind.config.js";

@layer base {
    /* Habbo text fields keep their look while typing: no focus ring and no focus border colour (undoes
       @tailwindcss/forms). The caret still shows where you type. */
    [type='text']:focus,
    [type='email']:focus,
    [type='url']:focus,
    [type='password']:focus,
    [type='number']:focus,
    [type='date']:focus,
    [type='datetime-local']:focus,
    [type='month']:focus,
    [type='search']:focus,
    [type='tel']:focus,
    [type='time']:focus,
    [type='week']:focus,
    [multiple]:focus,
    textarea:focus,
    select:focus {
        --tw-ring-offset-shadow: 0 0 #0000;
        --tw-ring-shadow: 0 0 #0000;
        border-color: #6b7280;
    }
}

@theme {
    --animate-pulse-glow: pulseGlow 1.2s ease-in-out infinite;
    --animate-pulse-glow-red: pulseGlowRed 1.2s ease-in-out infinite;
    --animate-drop-settle: dropSettle 0.3s ease-out;
    --animate-pulse-glow-gold: pulseGlowGold 1.5s ease-in-out infinite;
}

@keyframes pulseGlow {
    0%, 100% { box-shadow: 0 0 6px rgba(59, 130, 246, 0.3); }
    50%      { box-shadow: 0 0 14px rgba(59, 130, 246, 0.6); }
}

@keyframes pulseGlowRed {
    0%, 100% { box-shadow: 0 0 6px rgba(239, 68, 68, 0.3); }
    50%      { box-shadow: 0 0 14px rgba(239, 68, 68, 0.6); }
}

@keyframes dropSettle {
    0%   { transform: scale(1.15); }
    100% { transform: scale(1); }
}

@keyframes pulseGlowGold {
    0%, 100% { box-shadow: 0 0 6px rgba(255, 193, 7, 0.4); }
    50%      { box-shadow: 0 0 14px rgba(255, 193, 7, 0.7); }
}

@font-face {
    font-family: Ubuntu;
    src: url("@/assets/webfonts/Ubuntu-C.ttf");
}

@font-face {
    font-family: UbuntuRegular;
    src: url("@/assets/webfonts/Ubuntu.ttf");
}

@font-face {
    font-family: UbuntuCondensed;
    src: local("Ubuntu Condensed"), local("Ubuntu");
}

:root {
    --octane-pixel-art: auto;
}

@media (resolution: 1dppx), (resolution: 2dppx), (resolution: 3dppx) {
    :root {
        --octane-pixel-art: pixelated;
    }
}

html,
body {
    padding: 0;
    width: 100%;
    height: 100%;
    min-height: 100%;
    overflow: hidden;
	background-color: #000;
    -webkit-user-select: none;
    user-select: none;
    overscroll-behavior: none;
}

#root {
    width: var(--octane-app-width, 100vw);
    height: var(--octane-app-height, 100vh);
    min-height: var(--octane-app-height, 100vh);
    overflow: hidden;
}

.octane-app-root {
    position: fixed;
    inset: 0;
    width: var(--octane-app-width, 100vw) !important;
    height: var(--octane-app-height, 100vh) !important;
    min-height: var(--octane-app-height, 100vh) !important;
    overflow: hidden !important;
    overscroll-behavior: none;
}

@supports (height: 100dvh) {
    html,
    body,
    #root,
    .octane-app-root {
        height: var(--octane-app-height, 100dvh) !important;
        min-height: var(--octane-app-height, 100dvh) !important;
    }
}

.image-rendering-pixelated {
    image-rendering: var(--octane-pixel-art, pixelated);
}

.octane-room-touch-feedback {
    position: fixed;
    z-index: 35;
    width: 34px;
    height: 18px;
    margin-left: -17px;
    margin-top: -9px;
    border-radius: 50%;
    pointer-events: none;
    border: 2px solid rgba(255, 255, 255, 0.9);
    background: rgba(255, 255, 255, 0.18);
    transform: scale(0.35);
    opacity: 0.9;
    animation: octaneRoomTouchFeedback 0.42s ease-out forwards;
}

@keyframes octaneRoomTouchFeedback {
    to {
        transform: scale(1.15);
        opacity: 0;
    }
}

*,
*:focus,
*:hover {
    @apply outline-0;
}

@layer components {
    @keyframes blink {

        0%,
        100% {
            opacity: 1;
        }

        50% {
            opacity: 0;
        }
    }

    @keyframes scale {

        0%,
        100% {
            transform: scale(1);
        }

        50% {
            transform: scale(1.5);
        }
    }

    .dot {
        position: absolute;
        width: 2px;
        height: 2px;
        background-color: white;
        animation: blink 2s infinite;
    }

    .star {
        position: absolute;
        width: 10px;
        height: 10px;
        color: #ffffff;

        &:after {
            content: "";
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background: currentColor;
            width: 5px;
            height: 5px;
            -webkit-animation: blink 1s linear infinite;
            animation: blink 1s linear infinite;
        }

        .star-part {
            position: absolute;
            background-color: currentColor;

            &:nth-child(1) {
                top: 0;
                left: 50%;
                width: 1px;
                height: 100%;
                transform: translateX(-50%);
            }

            &:nth-child(2) {
                top: 50%;
                left: 0;
                width: 100%;
                height: 1px;
                transform: translateY(-50%);
            }
        }
    }

    .toolbar {
        @apply relative;
        background: rgb(33, 33, 33);
        background: linear-gradient(0deg, rgba(33, 33, 33, 0.9) 0%, rgba(51, 51, 51, 0.9) 100%);

        &::before {
            content: "";
            display: block;
            position: absolute;
            top: 1px;
            left: 0;
            right: 0;
            height: 2px;
            background-color: rgba(255, 255, 255, 0.05);
        }

        &::after {
            content: "";
            display: block;
            position: absolute;
            bottom: 2px;
            left: 0;
            right: 0;
            height: 2px;
            background-color: rgba(0, 0, 0, 0.1);
        }
    }

    .avatar-image {
        @apply pointer-events-none relative h-[130px] w-[90px] bg-position-[center_-8px] bg-no-repeat;
    }

}

/* The fit variant stretches to its positioned parent via absolute inset-0.
   The components-layer .avatar-image above pins a fixed 90x130 box, and with
   inset-0 the explicit size wins the over-constrained resolution — anchoring
   the image to the tile's TOP-LEFT corner instead of filling it. Unlayered
   so it beats the layered rule; auto lets inset-0 (and per-surface bottom
   offsets like the catalog price strip) size the box. */
.avatar-image.avatar-image-fit {
    width: auto;
    height: auto;
}

.unique-item {
    .unique-bg-override {
        @apply z-2 bg-center bg-no-repeat;
    }

    &:before {
        @apply absolute z-1 size-full bg-center bg-no-repeat [content:""];
        background-image: url("@/assets/images/unique/grid-bg.png");
    }

    &:after {
        @apply absolute bottom-0 z-4 size-full bg-center bg-no-repeat [content:""];
        background-image: url("@/assets/images/unique/grid-bg-glass.png");
    }

    &.sold-out:after {
        @apply bg-center bg-no-repeat;
        background-image: url("@/assets/images/unique/grid-bg-sold-out.png"),
            url("@/assets/images/unique/grid-bg-glass.png");
    }

    .unique-item-counter {
        background-image: url("@/assets/images/unique/grid-count-bg.png");
        @apply bottom-px z-3 mx-auto my-0 flex h-[9px] w-full items-center justify-center bg-center bg-no-repeat;
    }
}

.unique-sold-out-blocker {
    width: 364px;
    height: 30px;
    background: url("@/assets/images/unique/catalog-info-sold-out.png");

    div {
        float: right;
        width: 140px;
        text-align: center;
        font-weight: bold;
        margin-top: 5px;
        margin-right: 17px;
        color: #000;
    }
}

.unique-compact-plate {
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    align-items: center;
    right: 16px;
    width: 34px;
    height: 37px;
    background: url("@/assets/images/unique/inventory-info-amount-bg.png");

    div {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 9.5px;
    }
}

.unique-complete-plate {
    box-sizing: border-box;
    width: 170px;
    height: 29px;
    background: url("@/assets/images/unique/catalog-info-amount-bg.png") no-repeat center;
    z-index: 1;
    padding-top: 4px;

    .plate-container {
        margin-left: 45px;
        width: 100px;
        font-size: 10px;
        line-height: 10px;
        color: black;

        > :first-child {
            margin-bottom: 2px;
        }
    }
}

.limited-edition-number {
    display: inline-block;
    outline: 0;
    height: 5px;
    margin-right: 1px;
    background-image: url("@/assets/images/unique/numbers.png");
    background-repeat: no-repeat;

    &:last-child {
        margin-right: 0px;
    }

    &.n-0 {
        width: 4px;
        background-position: -1px 0px;
    }

    &.n-1 {
        width: 2px;
        background-position: -6px 0px;
    }

    &.n-2 {
        width: 4px;
        background-position: -9px 0px;
    }

    &.n-3 {
        width: 4px;
        background-position: -14px 0px;
    }

    &.n-4 {
        width: 4px;
        background-position: -19px 0px;
    }

    &.n-5 {
        width: 4px;
        background-position: -24px 0px;
    }

    &.n-6 {
        width: 4px;
        background-position: -29px 0px;
    }

    &.n-7 {
        width: 4px;
        background-position: -34px 0px;
    }

    &.n-8 {
        width: 4px;
        background-position: -39px 0px;
    }

    &.n-9 {
        width: 4px;
        background-position: -44px 0px;
    }
}

.layout-grid-item {
    height: var(--octane-grid-column-min-height, unset);
    background-position: center;
    background-repeat: no-repeat;
    background-color: #cdd3d9;
    border: 2px solid #c4cabf;
    border-radius: 6px;
}

.layout-grid-item.is-grid-active {
    border-color: #aeb7aa;
}

.octane-friends-spritesheet {
    background: url('@/assets/images/friends/friends-spritesheet.png') transparent no-repeat;

    &.icon-friendbar-visit {
        width: 21px;
        height: 21px;
        background-position: -38px -5px;
    }

    &.icon-heart {
        width: 16px;
        height: 14px;
        background-position: -5px -67px;
    }

    &.icon-new-message {
        width: 14px;
        height: 14px;
        background-position: -96px -53px;
    }

    &.icon-none {
        width: 16px;
        height: 14px;
        background-position: -31px -67px;
    }

    &.icon-profile {
        width: 21px;
        height: 21px;
        background-position: -5px -36px;
    }

    &.icon-profile-sm {
        width: 13px;
        height: 11px;
        background-position: -51px -91px;

        &:hover {
            width: 13px;
            height: 11px;
            background-position: -74px -91px;
        }
    }

    &.icon-smile {
        width: 16px;
        height: 14px;
        background-position: -57px -67px;
    }

    &.icon-warning {
        width: 23px;
        height: 21px;
        background-position: -5px -5px;
    }

    &.icon-accept {
        width: 13px;
        height: 14px;
        background-position: -5px -91px;
    }

    &.icon-add {
        width: 16px;
        height: 15px;
        background-position: -69px -31px;
    }

    &.icon-bobba {
        width: 16px;
        height: 14px;
        background-position: -96px -5px;
    }

    &.icon-chat {
        width: 17px;
        height: 16px;
        background-position: -69px -5px;
    }

    &.icon-deny {
        width: 13px;
        height: 14px;
        background-position: -28px -91px;
    }

    &.icon-follow {
        width: 16px;
        height: 14px;
        background-position: -96px -29px;
    }

    &.icon-friendbar-chat {
        width: 20px;
        height: 21px;
        background-position: -36px -36px;
    }
}

.fs-custom {
    font-size: var(--font-size, 16px);
}

/* -------------------------------------------------------------------------- */
/* Tooltip. habbo_skin_tooltip.xml cuts a 6px-corner bubble out of             */
/* habbo_blue_skin (x 0-13, y 49-71: #232323 at 90%); text is u_tool_tip,      */
/* Ubuntu 11 white. HintManager.as parks it 10px above or below the target,    */
/* slides it in and bobs it 5px on |sin(t * 0.003)|, i.e. about once a second.  */
/* -------------------------------------------------------------------------- */
.octane-tooltip-positioner {
    z-index: 9999;
    pointer-events: none;
}

.octane-tooltip {
    box-sizing: border-box;
    max-width: 260px;
    padding: 0 1px;
    border: 6px solid transparent;
    border-image: url("@/assets/images/habbo-skin/slices/tooltip-blue.png") 6 fill / 6px stretch;
    image-rendering: pixelated;
    color: #ffffff;
    font-family: Ubuntu, sans-serif;
    font-size: 11px;
    font-weight: 400;
    line-height: 13px;
    text-align: center;
    white-space: pre-line;
    pointer-events: none;
    user-select: none;
}

.octane-tooltip[data-side='top'] {
    animation: octane-tooltip-in-above 120ms ease-out, octane-tooltip-bob-above 1050ms ease-in-out 120ms infinite;
}

.octane-tooltip[data-side='bottom'] {
    animation: octane-tooltip-in-below 120ms ease-out, octane-tooltip-bob-below 1050ms ease-in-out 120ms infinite;
}

@keyframes octane-tooltip-in-above {
    from { opacity: 0; transform: translateY(-30px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes octane-tooltip-in-below {
    from { opacity: 0; transform: translateY(30px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes octane-tooltip-bob-above {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-5px); }
}

@keyframes octane-tooltip-bob-below {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(5px); }
}

@media (prefers-reduced-motion: reduce) {
    .octane-tooltip[data-side='top'],
    .octane-tooltip[data-side='bottom'] {
        animation: none;
    }
}

.octane-wired {
    width: min(300px, calc(100vw - 16px));
    min-width: 0;
    max-width: calc(100vw - 16px);
    background: #efefef;
    border: 1px solid #8d8d8d !important;
    border-radius: 6px !important;
    box-shadow: inset 0 0 0 1px #fff !important;
    color: #000;
    outline: none !important;
    overflow: hidden;

    .octane-wired__header {
        min-height: 21px !important;
        max-height: 21px !important;
        position: absolute !important;
        inset: 0 0 auto 0;
        z-index: 3;
        border: 0 !important;
        border-radius: 0 !important;
        background: transparent !important;
        box-shadow: none !important;
        padding: 0 !important;
        pointer-events: auto;

        .octane-card-title {
            display: block;
            color: #000 !important;
            font-size: 11px !important;
            font-weight: 700 !important;
            line-height: 21px;
            text-align: center;
            text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
            pointer-events: none;
        }

        > .flex::before {
            content: none;
        }

        > .flex::after {
            content: none;
        }

        .octane-card-close-button {
            right: 6px !important;
            width: 18px;
            height: 18px;
            min-width: 18px;
            border: 1px solid #777;
            border-radius: 5px;
            background: linear-gradient(180deg, #f9f9f9 0%, #cacaca 100%);
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9);
        }

        .octane-card-close-button::before,
        .octane-card-close-button::after {
            content: '';
            position: absolute;
            left: 50%;
            top: 50%;
            width: 10px;
            height: 2px;
            border-radius: 2px;
            background: #6a6a6a;
            margin: 0;
            transform-origin: center;
        }

        .octane-card-close-button::before {
            transform: translate(-50%, -50%) rotate(45deg);
        }

        .octane-card-close-button::after {
            transform: translate(-50%, -50%) rotate(-45deg);
        }
    }

    .octane-wired__content {
        position: relative;
        background: #efefef !important;
        border: 0 !important;
        box-shadow: none !important;
        padding: 0 !important;
        gap: 0 !important;
        overflow: visible !important;
    }

    .octane-wired__body {
        display: flex;
        flex-direction: column;
        padding: 8px 10px 10px;
        gap: 6px;
        font-size: 12px;
        line-height: 1.2;
    }

    .octane-wired__section {
        display: flex;
        flex-direction: column;
        gap: 5px;
    }

    .octane-wired__summary {
        position: relative;
        min-height: 56px;
        flex-direction: row;
        align-items: center;
        gap: 10px;
        padding: 22px 10px 7px 12px;
        background: linear-gradient(180deg, #e5e5e5 0%, #d7d7d7 100%);
        overflow: hidden;
        color: #000;
    }

    .octane-wired__summary-bg {
        position: absolute;
        width: auto;
        height: auto;
        top: 50%;
        z-index: 0;
        pointer-events: none;
        user-select: none;
        -webkit-user-drag: none;
    }

    .octane-wired__summary-bg--left {
        left: 50%;
        transform: translate(-150%, -50%);
        opacity: 0.45;
    }

    .octane-wired__summary-bg--right {
        left: 50%;
        top: 72%;
        transform: translate(-46%, -50%);
        opacity: 0.24;
    }

    .octane-wired__summary-copy {
        position: relative;
        z-index: 1;
    }

    .octane-wired__summary-copy {
        display: flex;
        flex-direction: column;
        min-width: 0;
        gap: 1px;
    }

    .octane-wired__summary-kind {
        color: #000;
        font-size: 10px;
        font-weight: 700;
        letter-spacing: 0.08em;
        line-height: 1;
        text-transform: uppercase;
    }

    .octane-wired__summary-title {
        color: #4a4a4a !important;
        font-size: 15px !important;
        font-weight: 700 !important;
        line-height: 1.02;
        text-align: left !important;
        text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
        word-break: break-word;
    }

    .octane-wired__section--body {
        overflow: visible !important;
    }

    .octane-wired__section .font-bold:not(.octane-wired__summary-title) {
        width: 100%;
        font-size: 13px !important;
        font-weight: 700 !important;
        text-align: left;
    }

    .octane-wired__summary-description,
    .octane-wired__furni-selector-description,
    .octane-wired__picker-label {
        font-size: 12px;
        line-height: 1.15;
    }

    .octane-wired__source-row,
    .octane-wired__give-var-section-title,
    .octane-wired__advanced-toggle {
        font-size: 12px;
    }

    .octane-wired__divider,
    hr {
        height: 1px;
        border: 0;
        background: #bababa;
        box-shadow: 0 1px 0 #fff;
        margin: 0 !important;
    }

    .form-check {
        display: flex;
        align-items: center;
        gap: 4px;
    }

    .form-check-label {
        margin-left: 1px;
    }

    .form-control,
    .form-select,
    input[type='text'],
    input[type='number'],
    .octane-number-input,
    textarea {
        min-height: 24px;
        border: 1px solid #8d8d8d !important;
        border-radius: 4px !important;
        background: #f6f6f6 !important;
        color: #000 !important;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95);
        font-size: 12px;
        padding: 3px 6px;
    }

    .octane-wired__button,
    .octane-wired__picker-button,
    .octane-slider-button {
        display: inline-flex !important;
        align-items: center !important;
        justify-content: center !important;
        min-height: 22px !important;
        border: 2px solid var(--habbo-blue-header-border, #376275) !important;
        border-radius: 4px !important;
        background: linear-gradient(180deg, #f2f8fb 0%, #d4e6ef 44%, #a8c9d8 45%, #d9e9f0 100%) !important;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85), 0 1px 0 rgba(0, 0, 0, 0.1) !important;
        color: var(--habbo-text, #151515) !important;
        font-weight: 700;
        text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
        padding-top: 0 !important;
        padding-bottom: 0 !important;
    }

    .octane-wired__button:hover,
    .octane-wired__picker-button:hover,
    .octane-slider-button:hover {
        filter: brightness(1.04);
    }

    .octane-wired__button--primary {
        border-color: var(--habbo-blue-header, #0e3f52) !important;
        background: linear-gradient(180deg, #5ba4c4 0%, #418db0 44%, #2e6f8a 100%) !important;
        color: #fff !important;
        text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.4);
    }

    &.octane-card-shell {
        resize: none !important;
    }

    .octane-wired__actions {
        padding-top: 2px;
    }

    .octane-slider-wrapper {
        align-items: center;
        gap: 4px;
    }

    .octane-wired__advanced-toggle {
        width: 100%;
        padding: 0 !important;
        border: 0;
        background: transparent;
        color: #000;
        font: inherit;
        text-align: center;
        text-decoration: underline;
    }

    .octane-wired__advanced-body,
    .octane-wired__source-detail {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-wired__advanced-body[hidden] {
        display: none;
    }

    .octane-wired__source-row {
        display: flex;
        flex-direction: column;
        gap: 3px;
    }

    .octane-wired__selection-toggle {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 18px;
        height: 18px;
        padding: 0;
        border: 1px solid #8e8e8e;
        border-radius: 4px;
        background: linear-gradient(180deg, #f6f6f6 0%, #e4e4e4 49%, #d0d0d0 50%, #ececec 100%);
        color: #7b7b7b;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92);
    }

    .octane-wired__selection-toggle.is-active.octane-wired__selection-toggle--primary {
        border-color: #66793c;
        background: linear-gradient(180deg, #a5b56e 0%, #8ea25a 100%);
        color: #fff;
    }

    .octane-wired__selection-toggle.is-active.octane-wired__selection-toggle--secondary {
        border-color: #6172b7;
        background: linear-gradient(180deg, #8d9bdd 0%, #7383cb 100%);
        color: #fff;
    }

    .octane-wired__selection-toggle:disabled {
        opacity: 0.55;
    }

    .octane-wired__selection-toggle svg {
        font-size: 10px;
        margin: 0;
    }

    .octane-wired__actions {
        gap: 4px !important;
    }

    .octane-wired__picker-button,
    .octane-slider-button {
        width: 22px;
        min-width: 22px !important;
        flex: 0 0 22px;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    .octane-wired__picker-button svg,
    .octane-slider-button svg {
        margin: 0;
    }

    .octane-wired__picker-label {
        min-width: 0;
        text-align: center;
        word-break: break-word;
    }

    .octane-wired__give-var {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-wired__give-var--trigger-variable {
        width: min(244px, 100%);
    }

    .octane-wired__give-var-heading {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 4px;
    }

    .octane-wired__give-var-targets {
        display: inline-flex;
        align-items: center;
        gap: 2px;
    }

    .octane-wired__give-var-target {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 18px;
        min-height: 18px;
        padding: 0;
        border: 1px solid #8e8e8e;
        border-radius: 4px;
        background: transparent;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55);
        transition: filter 0.12s ease-in-out;
    }

    .octane-wired__give-var-target:hover {
        filter: brightness(0.98);
    }

    .octane-wired__give-var-target img {
        width: auto;
        height: auto;
        max-width: 12px;
        max-height: 12px;
        image-rendering: var(--octane-pixel-art, pixelated);
    }

    .octane-wired__give-var-target--furni.is-active {
        background: linear-gradient(180deg, #f7db6d 0%, #ddb948 100%);
    }

    .octane-wired__give-var-target--user.is-active {
        background: linear-gradient(180deg, #74be68 0%, #4f9644 100%);
    }

    .octane-wired__give-var-target--global.is-active {
        background: linear-gradient(180deg, #7bc4f0 0%, #5497d2 100%);
    }

    .octane-wired__give-var-target--context.is-active {
        background: linear-gradient(180deg, #f0ad65 0%, #d68739 100%);
    }

    .octane-wired__give-var-target.is-active {
        border-color: #4d4d4d;
        box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.72), inset 0 1px 0 rgba(255, 255, 255, 0.92);
    }

    .octane-wired__give-var-target:disabled {
        opacity: 0.72;
        cursor: default;
    }

    .octane-wired__give-var-select {
        min-height: 23px;
    }

    .octane-wired__give-var-checkbox {
        display: flex;
        align-items: center;
        gap: 4px;
        cursor: pointer;
        white-space: nowrap;
        font-size: 13px;
        line-height: 1;
    }

    .octane-wired__give-var-section {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-wired__give-var-section-title {
        font-size: 11px;
        font-weight: 700;
        line-height: 1.1;
    }

    .octane-wired__give-var-input-row {
        display: flex;
        align-items: center;
        gap: 6px;
    }

    .octane-wired__give-var-number {
        width: 48px;
        min-width: 48px;
        min-height: 18px !important;
        height: 18px;
        padding: 0 4px !important;
        line-height: 18px;
        text-align: center;
    }

    .octane-wired__give-var-number--blurred {
        filter: blur(0.8px) !important;
        opacity: 0.78;
        pointer-events: none;
    }

    .octane-wired__resizable-textarea {
        min-height: 140px !important;
        resize: vertical !important;
        overflow: auto;
    }

    .octane-wired__levelup {
        display: flex;
        flex-direction: column;
        gap: 6px;
    }

    .octane-wired__levelup-section {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-wired__levelup-section-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        width: 100%;
        padding: 0;
        border: 0;
        background: transparent;
        text-align: left;
    }

    .octane-wired__levelup-chevron {
        font-size: 12px;
        line-height: 1;
        transform: rotate(180deg);
        transition: transform 0.12s ease;
    }

    .octane-wired__levelup-chevron.is-open {
        transform: rotate(0deg);
    }

    .octane-wired__levelup-section-body {
        display: flex;
        flex-direction: column;
        gap: 8px;
    }

    .octane-wired__levelup-mode-block {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-wired__levelup-mode-block.is-inactive {
        opacity: 0.72;
    }

    .octane-wired__levelup-mode-label {
        display: flex;
        align-items: center;
        gap: 4px;
        cursor: pointer;
    }

    .octane-wired__levelup-fields {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding-left: 22px;
    }

    .octane-wired__levelup-field-row {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 8px;
        min-height: 20px;
    }

    .octane-wired__levelup-number {
        width: 74px;
        min-width: 74px;
        min-height: 20px !important;
        height: 20px;
        padding: 0 6px !important;
        line-height: 20px;
        text-align: center;
    }

    .octane-wired__levelup-textarea {
        min-height: 88px !important;
        resize: vertical !important;
        overflow: auto;
    }

    .octane-wired__levelup-preview {
        max-height: 120px;
        overflow-y: auto;
        padding-right: 2px;
    }

    .octane-wired__levelup-preview-entry {
        padding: 1px 0;
        font-size: 11px;
        line-height: 1.25;
    }

    .octane-wired__levelup-subvariables {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-wired__levelup-subvariable-row {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 8px;
    }

    .octane-wired__levelup-subvariable-label {
        display: flex;
        align-items: center;
        gap: 4px;
        min-width: 0;
        flex: 1 1 auto;
        cursor: pointer;
    }

    .octane-wired__levelup-subvariable-token {
        width: 96px;
        min-width: 96px;
        height: 20px;
        padding: 0 6px;
        border: 1px solid #cfcfcf;
        border-radius: 6px;
        background: #f3f3f3;
        color: #9a9a9a;
        font-size: 11px;
        line-height: 20px;
    }

    .octane-wired__placeholder-preview {
        display: flex;
        width: 100%;
        align-items: flex-start;
        padding: 6px 8px;
        border: 1px solid #b7b7b7;
        border-radius: 5px;
        background: linear-gradient(180deg, #fbfbfb 0%, #efefef 100%);
        text-align: left;
        cursor: pointer;
        transition: background 0.12s ease, border-color 0.12s ease;
    }

    .octane-wired__placeholder-preview:hover {
        background: linear-gradient(180deg, #ffffff 0%, #f4f4f4 100%);
        border-color: #909090;
    }

    .octane-wired__placeholder-preview.is-copied {
        border-color: #73a753;
        background: linear-gradient(180deg, #f8fff2 0%, #eef9e2 100%);
    }

    .octane-wired__change-var-radio {
        display: flex;
        align-items: center;
        gap: 4px;
    }

    .octane-wired__change-var-reference-block {
        display: flex;
        flex-direction: column;
        gap: 4px;
    }

    .octane-slider {
        height: 16px;
    }

    .octane-slider .track {
        height: 4px;
        border-radius: 999px;
        border: 1px solid #9a9a9a;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95);

        /* the filled part lies inside the track: it fills it without a border of its own (no double line) */
        &.track-0 {
            height: 100%;
            border: 0;
            border-radius: inherit;
            box-shadow: none;
            background: linear-gradient(180deg, #7f9fb1 0%, #64889e 100%);
        }

        &.track-1 {
            background: linear-gradient(180deg, #e9e9e9 0%, #d5d5d5 100%);
        }
    }

    /* Base UI centres the thumb on the track itself: no margin, or it sits below the line. */
    .octane-slider .thumb {
        width: 12px;
        height: 12px;
        border-radius: 50%;
        border: 1px solid #7f7f7f;
        background: linear-gradient(180deg, #fefefe 0%, #dadada 100%);
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.85), inset 0 1px 0 rgba(255, 255, 255, 0.9);
    }
}

.octane-card-shell.octane-wired {
    border: 1px solid #8d8d8d !important;
    border-color: #8d8d8d !important;
    box-shadow: inset 0 0 0 1px #fff !important;
    outline: none !important;
}

.octane-card-shell.octane-wired .octane-card-header-shell,
.octane-card-shell.octane-wired .octane-card-content-shell {
    border: 0 !important;
    box-shadow: none !important;
}

.color-picker-frame {
    border-image-source: url('@/assets/images/avatareditor/color_frame.png');
    border-image-slice: 6 6 6 6 fill;
    border-image-width: 6px 6px 6px 6px;
    width: 14px;
    height: 21px;
    border-radius: 4px;

    &.active,
    &:hover {
        border-image-source: url('@/assets/images/avatareditor/color_frame_active.png');
        height: 21px;
        margin-top: -2px;
    }
}

.hc-icon {
    background-image: url('@/assets/images/avatareditor/hc_icon.png');
    height: 9px;
    width: 10px;
    bottom: 2px;
    left: 2px;
}

.avatar-parts {
    border: 1px solid #c5c3c0 !important;
    position: relative;
    aspect-ratio: 1;
    width: 100%;
    max-width: 64px;
    border-radius: 0.3rem !important;
    overflow: hidden !important;
    background-color: #e9e8e4;

    &:hover {
        box-shadow: inset 0 0 0 3px #dbdad5 !important;
        background-color: #cecdc8 !important;
    }

    &:active,
    &.part-selected {
        box-shadow: inset 0 0 0 3px #c5c3c0 !important;
        background-color: #b1b1b1 !important;
    }

    &.is-loading::after {
        content: '';
        position: absolute;
        inset: 0;
        background-image: linear-gradient(100deg, rgba(255, 255, 255, 0) 35%, rgba(255, 255, 255, 0.65) 50%, rgba(255, 255, 255, 0) 65%);
        background-size: 220% 100%;
        background-repeat: no-repeat;
        animation: avatar-parts-shimmer 1.1s ease-in-out infinite;
        pointer-events: none;
    }
}

@keyframes avatar-parts-shimmer {
    0% {
        background-position: 160% 0;
    }
    100% {
        background-position: -60% 0;
    }
}

.avatar-container {
    padding: 3px;
    height: 50px;
    border-radius: 0.3rem;
    background-color: #a7a6a2;
    width: 48px;
}

.avatar-parts-container {
    height: 70%;
}

.avatar-color-palette-container {
    height: 30%;
    width: 100% !important;
}

.dual-palette {
    display: flex !important;
    flex-direction: row !important;
}

.avatar-editor-palette-set-view {
    padding-right: 15px !important;
    flex-grow: 1;
}

.action-buttons {
    gap: 5px;
}

.avatar-editor-tabs {
    position: relative;

    .tab {
        background-position-x: center;
        background-position-y: center;
        background-repeat: no-repeat;
        width: 34px;
        height: 22px;
    }

    .hd    { background-image: url('@/assets/images/wardrobe/hd.png'); }
    .head  { background-image: url('@/assets/images/wardrobe/head.png'); }
    .torso { background-image: url('@/assets/images/wardrobe/torso.png'); }
    .legs  { background-image: url('@/assets/images/wardrobe/legs.png'); }

    .tab-pets {
        width: 34px;
        height: 22px;
        background-image: url('@/assets/images/wardrobe/pets.png');
        background-repeat: no-repeat;
        background-position: center;
        background-size: 22px 22px;
    }

    .tab-nft {
        width: 34px;
        height: 22px;
        background-image: url('@/assets/images/wardrobe/nft.png');
        background-repeat: no-repeat;
        background-position: center;
        background-size: 22px 22px;
    }

    .tab-misc {
        width: 34px;
        height: 22px;
        background-image: url('@/assets/images/wardrobe/misc.png');
        background-repeat: no-repeat;
        background-position: center;
        background-size: 24px 22px;
    }
}


.pet-equipped-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 10px;
    background-color: rgba(0, 0, 0, 0.25);
    border-radius: 0.3rem;
    margin: 0 2px;
    min-height: 48px;
}

.pet-equipped-preview {
    width: 42px;
    height: 42px;
    border-radius: 4px;
    background-color: rgba(255, 255, 255, 0.1);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    flex-shrink: 0;
}

.pet-equipped-thumb {
    width: 100%;
    height: 100%;
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

.pet-paw-icon {
    width: 24px;
    height: 24px;
    background-image: url('@/assets/images/wardrobe/pets.png');
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

.pet-grid-container .avatar-parts {
    background-size: contain;
    overflow: hidden !important;
}

.pet-sellable-locked {
    opacity: 0.5;
    cursor: not-allowed !important;
    position: relative;
}

.pet-sellable-badge {
    position: absolute;
    bottom: 2px;
    right: 2px;
    display: flex;
    align-items: center;
    gap: 1px;
    background-color: rgba(0, 0, 0, 0.6);
    border-radius: 3px;
    padding: 1px 3px;
    font-size: 9px;
    color: #ffd700;
    font-weight: bold;
}

.pet-remove-btn {
    background: none;
    border: none;
    color: #e57373;
    font-size: 11px;
    cursor: pointer;
    padding: 0;
    text-align: left;
    width: fit-content;

    &:hover {
        color: #ff5252;
        text-decoration: underline;
    }
}

.saved-outfits-title {
    color: #a7a6a2;
    font-weight: bold;
}

/* -------------------------------------------------------------------------- */
/* Wired chest (Scrigno) — Sulake chest_generic / coins_chest / furni_chest UI  */
/* -------------------------------------------------------------------------- */
[class*='octane-widget-chest'] {
    color: #2e2e2e;

    .octane-chest__button {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        box-sizing: border-box;
        min-height: 22px;
        padding: 0 10px;
        border: 1px solid #b9b2a0;
        border-radius: 3px;
        background: linear-gradient(180deg, #f3f0e8 0%, #e9e6df 48%, #ddd8cc 49%, #ebe8e0 100%);
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
        color: #555;
        font-size: 11px;
        font-weight: 700;
        line-height: 1;
        cursor: pointer;
        user-select: none;
        white-space: nowrap;
    }

    .octane-chest__button:hover:not(:disabled) {
        filter: brightness(0.98);
    }

    .octane-chest__button:active:not(:disabled) {
        background: linear-gradient(180deg, #e4e0d6 0%, #d8d4c8 100%);
        box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12);
    }

    .octane-chest__button:disabled {
        opacity: 0.5;
        cursor: default;
        pointer-events: none;
    }

    /* coins_chest_contents.xml withdraw_btn: 73×22 */
    .octane-chest__button--withdraw {
        width: 73px;
        min-width: 73px;
        height: 22px;
        padding: 0 6px;
    }

    /* upgrade_capacity_btn — square icon control in footer */
    .octane-chest__button--icon {
        width: 24px;
        min-width: 24px;
        height: 22px;
        padding: 0;
        font-size: 14px;
        font-weight: 700;
        line-height: 1;
    }

    /* Settings / notifications / upgrade sub-dialogs (wired UI builder style) */
    .octane-chest__button--dialog {
        min-height: 22px;
        padding: 0 12px;
        border: 1px solid #8e8e8e;
        border-radius: 6px;
        background: linear-gradient(180deg, #fcfcfc 0%, #e8e8e8 46%, #d5d5d5 47%, #efefef 100%);
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92);
        color: #000;
    }

    .octane-chest__button--dialog-primary {
        min-height: 22px;
        padding: 0 12px;
        border: 1px solid #66793c;
        border-radius: 6px;
        background: linear-gradient(180deg, #a5b56e 0%, #8ea25a 49%, #7f9350 50%, #96a866 100%);
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.45);
        color: #fff;
        text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
    }

    .octane-chest__button--dialog-primary:disabled {
        border-color: #8e8e8e;
        background: linear-gradient(180deg, #fcfcfc 0%, #e8e8e8 46%, #d5d5d5 47%, #efefef 100%);
        color: #888;
        text-shadow: none;
    }

    .octane-chest__header-icon {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 24px;
        height: 24px;
        padding: 0;
        border: 1px solid #cfcabc;
        border-radius: 4px;
        background: #f1f0ee;
        cursor: pointer;
        flex-shrink: 0;
    }

    .octane-chest__header-icon:hover {
        filter: brightness(0.97);
    }

    .octane-chest__input {
        box-sizing: border-box;
        border: 1px solid #b9b2a0;
        border-radius: 2px;
        background: #fff;
        color: #2e2e2e;
        font-size: 11px;
        text-align: center;
    }

    .octane-chest__input--scene {
        width: 27px;
        height: 19px;
        padding: 0;
        border-color: #d8c184;
    }

    .octane-chest__input--furni-withdraw {
        width: 36px;
        height: 22px;
        padding: 0;
    }

    .octane-chest__actions {
        display: flex;
        align-items: center;
        gap: 4px;
    }

    .octane-chest__actions--footer {
        justify-content: space-between;
        gap: 8px;
    }

    .octane-chest__actions--dialog {
        gap: 4px;
    }

    .octane-chest__actions--dialog .octane-chest__button {
        flex: 1 1 0;
    }
}

/* Wired chest (Scrigno) — Putyhef buttons + inputs from chest_generic / coins_chest_contents XML */
.octane-widget-chest,
.octane-widget-chest-settings,
.octane-widget-chest-notifications,
.octane-widget-chest-upgrade,
.octane-widget-chest-log,
.octane-widget-chest-confirm {
    .octane-chest__btn {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        box-sizing: border-box;
        min-width: 73px;
        height: 22px;
        padding: 0 8px;
        font-size: 11px;
        font-weight: 700;
        line-height: 1;
        color: #555;
        white-space: nowrap;
        cursor: pointer;
        user-select: none;
        border: 1px solid #b9b2a0;
        border-radius: 3px;
        background: linear-gradient(180deg, #f5f3ef 0%, #e9e6df 48%, #dedad2 49%, #ebe8e1 100%);
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
    }

    .octane-chest__btn:hover:not(:disabled) {
        filter: brightness(0.98);
    }

    .octane-chest__btn:active:not(:disabled) {
        background: linear-gradient(180deg, #dedad2 0%, #d5d0c8 48%, #cac5bd 49%, #d8d4cc 100%);
        box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12);
    }

    .octane-chest__btn:disabled {
        opacity: 0.5;
        cursor: default;
        pointer-events: none;
    }

    .octane-chest__btn--fixed {
        width: 73px;
        min-width: 73px;
        padding: 0;
    }

    .octane-chest__btn--wide {
        min-width: 73px;
        width: auto;
        max-width: 100%;
    }

    .octane-chest__btn--icon {
        min-width: 24px;
        width: 24px;
        height: 24px;
        padding: 0;
        font-size: 14px;
        font-weight: 700;
        line-height: 1;
        color: #2e2e2e;
        border-color: #cfcabc;
        border-radius: 4px;
        background: #f1f0ee;
        box-shadow: none;
    }

    .octane-chest__input {
        box-sizing: border-box;
        height: 22px;
        padding: 0 4px;
        font-size: 11px;
        text-align: center;
        color: #000;
        border: 1px solid #b9b2a0;
        border-radius: 2px;
        background: #fff;
    }

    .octane-chest__input--coin {
        width: 27px;
        height: 19px;
        border-color: #d8c184;
    }

    .octane-chest__input--furni {
        width: 36px;
    }

    .octane-chest__input--qty {
        width: 72px;
    }

    .octane-chest__footer-row {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 6px;
        margin-top: 4px;
    }

    .octane-chest__footer-group {
        display: flex;
        flex-wrap: wrap;
        gap: 4px;
    }

    .octane-chest__actions {
        display: flex;
        flex-wrap: wrap;
        gap: 4px;
        margin-top: 4px;
    }

    .form-control,
    .form-select,
    input[type='text'],
    input[type='number'],
    .octane-number-input,
    textarea {
        min-height: 22px;
        border: 1px solid #8d8d8d !important;
        border-radius: 4px !important;
        background: #f6f6f6 !important;
        color: #000 !important;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95);
        font-size: 12px;
        padding: 3px 6px;
    }

    /* furni_chest_contents.xml — grid + detail panel */
    .octane-chest__furni-body {
        display: flex;
        gap: 10px;
        margin: 4px 0 0;
    }

    .octane-chest__grid-border {
        width: 255px;
        flex-shrink: 0;
        border: 1px solid #e3e3e3;
        border-radius: 3px;
        background: #fff;
        overflow: hidden;
    }

    .octane-chest__search {
        position: relative;
        margin: 4px 5px 0;
        height: 24px;
        border: 1px solid #d0d0d0;
        border-radius: 3px;
        background: #fff;
    }

    .octane-chest__search-placeholder {
        position: absolute;
        left: 8px;
        top: 4px;
        font-size: 11px;
        color: #666;
        opacity: 0.5;
        pointer-events: none;
    }

    .octane-chest__search-input {
        width: 100%;
        height: 22px;
        padding: 0 24px 0 8px;
        border: none !important;
        background: transparent !important;
        box-shadow: none !important;
        font-size: 11px;
        color: #666;
        text-align: left;
    }

    .octane-chest__search-clear {
        position: absolute;
        right: 2px;
        top: 2px;
        width: 20px;
        height: 20px;
        padding: 0;
        border: none;
        background: transparent;
        color: #666;
        font-size: 14px;
        line-height: 1;
        cursor: pointer;
    }

    .octane-chest__grid-scroll {
        width: 100%;
        height: 232px;
        overflow-x: hidden;
        overflow-y: auto;
        padding: 5px;
        box-sizing: border-box;
    }

    .octane-chest__grid {
        display: flex;
        flex-wrap: wrap;
        gap: 3px;
    }

    .octane-chest__grid-empty {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 100%;
        min-height: 120px;
    }

    .octane-chest__grid-cell {
        position: relative;
        width: 42px;
        height: 42px;
        flex-shrink: 0;
        cursor: pointer;
    }

    .octane-chest__grid-cell-focus {
        position: absolute;
        inset: 0;
        z-index: 3;
        pointer-events: none;
        border: 2px solid #aeb7aa;
        border-radius: 4px;
        box-shadow: inset 0 0 0 1px #fff;
        background: rgba(228, 231, 223, 0.35);
    }

    .octane-chest__grid-cell-inner {
        position: absolute;
        left: 1px;
        top: 1px;
        width: 40px;
        height: 40px;
        border: 1px solid #cbcbcb;
        border-radius: 3px;
        background: #fafafa;
        overflow: hidden;
    }

    .octane-chest__grid-icon {
        position: absolute;
        inset: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        pointer-events: none;
    }

    .octane-chest__grid-ltd-bg {
        inset: 2px;
        width: 36px;
        height: 36px;
    }

    .octane-chest__grid-ltd-counter {
        height: 9px;
    }

    .octane-chest__grid-rarity {
        top: 2px;
        right: 2px;
        z-index: 2;
        transform: scale(0.72);
        transform-origin: top right;
    }

    .octane-chest__qty-badge {
        position: absolute;
        top: 2px;
        right: 2px;
        z-index: 4;
        min-width: 13px;
        height: 16px;
        padding: 1px;
        background: #2f6982;
        border-radius: 2px;
        box-sizing: border-box;
    }

    .octane-chest__qty-badge span {
        display: block;
        min-width: 11px;
        height: 14px;
        padding: 0 1px;
        border: 1px solid #fff;
        border-radius: 1px;
        color: #2f6982;
        background: #fff;
        font-size: 10px;
        font-weight: 700;
        line-height: 12px;
        text-align: center;
    }

    .octane-chest__detail-panel {
        width: 175px;
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
    }

    .octane-chest__preview-box {
        height: 211px;
        border: 1px solid #d8d8d8;
        border-radius: 3px;
        background: #fff;
        display: flex;
        flex-direction: column;
        align-items: center;
        padding: 5px;
        overflow: hidden;
        box-sizing: border-box;
    }

    .octane-chest__preview-name {
        width: 100%;
        text-align: center;
        font-size: 11px;
        line-height: 1.25;
        word-wrap: break-word;
        margin-bottom: 4px;
    }

    .octane-chest__preview-image {
        flex: 1;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 100%;
        min-height: 0;
    }

    .octane-chest__preview-placeholder {
        max-width: 100%;
        max-height: 100%;
        margin: auto;
        image-rendering: var(--octane-pixel-art, pixelated);
    }

    .octane-chest__withdraw-row {
        display: flex;
        align-items: center;
        justify-content: flex-end;
        gap: 10px;
        margin-top: 9px;
        padding-right: 0;
    }

    .octane-chest__input--furni {
        width: 30px;
        height: 19px;
        padding: 0;
    }

    /* chest_generic.xml footer band */
    .octane-chest__footer {
        margin: 8px -10px -10px;
        padding: 8px 10px 10px;
        background: #dadada;
        border-top: 1px solid #c0c0c0;
    }

    .octane-chest__footer-capacity {
        margin-bottom: 6px;
        padding-bottom: 6px;
        border-bottom: 1px solid #b0b0b0;
    }

    /* Locking sits above the capacity row, the way the official window stacks them. */
    .octane-chest__locking {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 4px 12px;
        margin-bottom: 6px;
        padding-bottom: 6px;
        border-bottom: 1px solid #b0b0b0;
    }

    .octane-chest__option {
        display: flex;
        align-items: center;
        gap: 6px;
        cursor: pointer;
    }

    .octane-chest__option input:disabled {
        cursor: default;
    }

    .octane-chest__info-button {
        width: 16px;
        height: 16px;
        margin-left: auto;
        border: 1px solid #7a4a1c;
        border-radius: 50%;
        background: #f7e6cf;
        color: #7a4a1c;
        font-size: 10px;
        font-weight: bold;
        line-height: 1;
    }

    .octane-chest__capacity-input {
        width: 84px;
        height: 22px;
        padding: 0 6px;
        font-size: 11px;
    }

    .octane-chest__rules {
        margin: 0;
        padding-left: 18px;
        list-style: disc;
    }

    .octane-chest__upgrade-preview {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 64px;
        height: 64px;
        flex: 0 0 64px;
    }

    .octane-chest__upgrade-error {
        color: #b03030;
    }

    .octane-chest__btn--footer {
        min-width: 73px;
        height: 30px;
        padding: 0 10px;
        font-size: 11px;
    }

    .octane-chest__footer-group .octane-chest__btn--footer {
        min-width: 89px;
    }

    .octane-chest__deposit-panel {
        margin-top: 8px;
        padding: 8px;
        border: 1px solid #d8d8d8;
        border-radius: 3px;
        background: #f8f8f8;
    }

    .octane-chest__deposit-title {
        display: block;
        margin-bottom: 6px;
    }

    .octane-chest__deposit-grid {
        max-height: 168px;
        overflow-y: auto;
        display: flex;
        flex-wrap: wrap;
        gap: 3px;
    }

    .octane-chest__deposit-cell {
        position: relative;
        width: 42px;
        height: 42px;
        padding: 0;
        border: 1px solid #cbcbcb;
        border-radius: 3px;
        background: #fafafa;
        cursor: pointer;
        overflow: hidden;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .octane-chest__deposit-cell:disabled {
        opacity: 0.45;
        cursor: not-allowed;
    }

    .octane-chest__deposit-cell:not(:disabled):hover {
        border-color: #d69586;
    }

    .octane-chest__deposit-full {
        margin-top: 6px;
        color: #a33;
    }
}

/* AIR Ubuntu chest settings: bordered groups and 7px section spacing. */
.octane-chest-settings .octane-card-content-shell { max-height: calc(100vh / 2.4 + 60px); overflow-y: auto; }
.octane-chest-settings__section { display: grid; gap: 5px; min-width: 0; margin: 0; padding: 7px; border: 1px solid #b0b0a8; border-radius: 3px; }
.octane-chest-settings__section > legend { float: none; width: auto; margin: 0; padding: 0 3px; font-size: 12px; font-weight: bold; }
.octane-chest-settings__wired-notifications { display: grid; gap: 3px; min-width: 0; margin-top: 7px; padding: 7px 0 0; border: 0; border-top: 1px solid #b0b0a8; }
.octane-chest-settings__wired-notifications:disabled { opacity: 0.5; }
.octane-chest-settings select { width: 100%; min-width: 0; }

/* Official BadgeImageWidget.playGlow: a 500ms run, strength 0 -> 1 (ease-in-out cubic), then
   cleared. The overlay repeats the badge image on top of itself so the glow and tint follow
   the badge's own pixels: outer glow (alpha .7, blur 4->8), inner glow, 48% tint plus a
   brightness lift. Played once when the badge is set and again on every mouse-over. */
.badge-glow {
    position: absolute;
    inset: 0;
    pointer-events: none;
}

.badge-glow-run {
    position: absolute;
    inset: 0;
    background-repeat: no-repeat;
    background-position: center;
    opacity: 0;
    animation-name: badgeGlowRun;
    animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
    animation-fill-mode: none;
}

/* The official ColorMatrixFilter mixes each channel 48% towards the tier colour at full
   strength: a flat fill of that colour masked by the badge's own pixels, faded to 0.48. */
.badge-glow-tint {
    position: absolute;
    inset: 0;
    background-color: var(--badge-glow);
    mask-repeat: no-repeat;
    mask-position: center;
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-position: center;
    opacity: 0;
    animation-name: badgeGlowTint;
    animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
    animation-fill-mode: none;
}

@keyframes badgeGlowTint {
    0% {
        opacity: 0;
    }
    100% {
        opacity: 0.48;
    }
}

/* Hover breath: the outer glow only. The layer repeats the badge's own pixels unchanged, so
   only the drop shadow around them is visible as it pulses. */
.badge-glow-run--outline {
    animation-name: badgeGlowOutline;
}

@keyframes badgeGlowOutline {
    0% {
        opacity: 0;
        filter: drop-shadow(0 0 3px var(--badge-glow));
    }
    100% {
        opacity: 1;
        filter: drop-shadow(0 0 4px var(--badge-glow)) drop-shadow(0 0 8px var(--badge-glow));
    }
}

@keyframes badgeGlowRun {
    0% {
        opacity: 0;
        filter: drop-shadow(0 0 4px var(--badge-glow)) brightness(1);
    }
    100% {
        opacity: 1;
        filter: drop-shadow(0 0 4px var(--badge-glow)) drop-shadow(0 0 8px var(--badge-glow)) brightness(1.45) saturate(1.3);
    }
}

@keyframes pulseGlow {
    0%, 100% { box-shadow: 0 0 6px rgba(59, 130, 246, 0.3); }
    50%      { box-shadow: 0 0 14px rgba(59, 130, 246, 0.6); }
}

@keyframes pulseGlowRed {
    0%, 100% { box-shadow: 0 0 6px rgba(239, 68, 68, 0.3); }
    50%      { box-shadow: 0 0 14px rgba(239, 68, 68, 0.6); }
}

@keyframes dropSettle {
    0%   { transform: scale(1.15); }
    100% { transform: scale(1); }
}

@keyframes pulseGlowGold {
    0%, 100% { box-shadow: 0 0 6px rgba(255, 193, 7, 0.4); }
    50%      { box-shadow: 0 0 14px rgba(255, 193, 7, 0.7); }
}

/* CollapsibleSection (common/CollapsibleSection.tsx): the Base UI stand-in for <details><summary>. */
.octane-collapsible-trigger {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    text-align: left;
    cursor: pointer;
}

.octane-collapsible-trigger::before {
    content: '';
    flex: 0 0 auto;
    width: 0;
    height: 0;
    border-top: 4px solid transparent;
    border-bottom: 4px solid transparent;
    border-left: 6px solid currentColor;
    transition: transform 0.12s ease;
}

.octane-collapsible-trigger[data-panel-open]::before {
    transform: rotate(90deg);
}

.octane-collapsible-panel[hidden] {
    display: none;
}

/* NativeLabel: a drawn raster folds its 2 px TextField gutter away so the text sits where the CSS put it; the browser-text
   fallback (glyphs the native fonts lack) keeps its box. */
.octane-native-label > [data-native-text]:not([data-native-text="fallback"]) {
    margin: -2px !important;
}

/* A window's descendant rules (`.window-button span { position: absolute; top: 22px; left: 60px; overflow: hidden }`) also reach
   the raster's own wrapper inside a NativeLabel and push the canvas out of view. Its geometry is the label's, never the window's. */
.octane-native-label > [data-native-text] {
    position: relative !important;
    inset: auto !important;
    float: none !important;
    min-width: 0 !important;
    max-width: none !important;
    min-height: 0 !important;
    max-height: none !important;
    padding: 0 !important;
    border: 0 !important;
    background: none !important;
    overflow: visible !important;
    transform: none !important;
    z-index: auto !important;
    opacity: 1 !important;
    line-height: normal !important;
    text-indent: 0 !important;
}

.octane-native-label > [data-native-text] > canvas {
    position: static !important;
    max-width: none !important;
    max-height: none !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    transform: none !important;
}
15Sujets
1Dépôts
20Membres
7En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser