ui/loadoutitempanel.razor.scss
LoadoutItemPanel {
    position: relative;
    width: 250px;
    height: 130px;
    flex-direction: column;
    flex-shrink: 0;
    border-radius: 3px;
    pointer-events: all;
    cursor: pointer;
    font-family: Inter-Black;
    font-weight: 700;

    .frame {
        position: absolute;
        width: 100%;
        height: 100%;
        background-image: url("/textures/ui/panel/panel_02.png");
        background-position: center;
        background-size: 100% 100%;
        pointer-events: none;
    }

    .top_row {
        position: relative;
        flex-direction: row;
        align-items: center;
        width: 100%;
        height: 64px;
    }

    .item_icon {
        position: relative;
        width: 52px;
        height: 52px;
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        flex-shrink: 0;
        margin-left: 6px;
    }

    .top_text {
        position: relative;
        flex-direction: column;
        align-items: flex-start;
        padding: 10px 0 0 4px;
        height: 100%;
        gap: 3px;
        flex-grow: 1;
    }

    .item_name {
        position: relative;
        white-space: nowrap;
        font-size: 15px;
        color: rgba(232, 255, 244, 1);
        text-shadow: 1px 1px 0px black;
        line-height: 14px;
    }

    .item_price {
        position: relative;
        flex-direction: row;
        align-items: center;
        gap: 3px;
    }

    .owned_label {
        position: relative;
        font-size: 12px;
        color: rgba(120, 220, 120, 0.9);
        text-shadow: 1px 1px 0px black;
        opacity: 0.6;
    }

    .price_coin_icon {
        position: relative;
        width: 14px;
        height: 14px;
        background-image: url("/textures/ui/coin.png");
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        flex-shrink: 0;
    }

    .price_amount {
        position: relative;
        font-size: 12px;
        color: rgba(255, 220, 80, 0.95);
        text-shadow: 1px 1px 0px black;
        opacity: 0.6;
    }

    .middle {
        position: absolute;
        top: 56px;
        left: 14px;
        width: 221px;
        height: 56px;
        pointer-events: none;
        align-content: center;
        justify-content: center;
        overflow: visible;
    }

    .item_desc {
        pointer-events: none;
        color: rgba(232, 255, 244, 0.7);
        text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25);
        font-size: 13px;
        white-space: pre;
        text-align: center;
        align-items: center;
        align-content: center;
        justify-content: center;
        overflow: visible;

        i { top: 0; }
    }

    .level_indicator {
        position: absolute;
        right: 0px;
        top: 3px;
        pointer-events: none;
        flex-direction: row;
        align-items: center;
        justify-content: center;
        font-size: 13px;
        font-weight: 800;
        text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.8);
        background-color: #00000088;
        border-radius: 2px;
        padding: 2px;
        opacity: 0.75;
        color: rgba(140, 220, 255, 0.9);

        .level_sep {
            opacity: 0.4;
        }
    }

    .lock_label {
        position: relative;
        font-size: 11px;
        color: rgba(255, 100, 100, 0.9);
        text-shadow: 1px 1px 0px black;
        white-space: nowrap;
        text-align: center;
    }

    &:hover {
        bottom: 2px;
        sound-in: ui.button.over;
    }

    &:active {
        bottom: 0px;
        transition: all 0.1s ease-out;
        sound-in: ui.button.press;
    }

    // ── Shop state classes ──

    &.affordable {
        // default — interactive, no extra styling
    }

    &.owned {
        opacity: 0.55;
        pointer-events: none;
    }

    &.too_expensive {
        opacity: 0.5;
        pointer-events: none;
    }

    &.gem_upgradeable {
        // interactive — no extra styling
    }

    &.gem_upgrade_expensive {
        opacity: 0.5;
        pointer-events: none;
    }

    &.gem_maxed {
        opacity: 0.55;
        pointer-events: none;
    }

    &.locked {
        opacity: 0.65;
        pointer-events: none;

        .frame {
            background-color: rgba(220, 60, 60, 0.1);
        }
    }

    // ── Loadout state classes ──

    &.selected {
        border: 2px solid rgba(100, 210, 255, 0.85);

        .frame {
            background-color: rgba(80, 180, 220, 0.30);
        }
    }

    &.slot_full {
        opacity: 0.4;
        pointer-events: none;
    }
}