.octane-alert {
    min-height: 150px;
    max-height: 350px;

    .notification-frank {
        background-image: url('@/assets/images/notifications/frank.gif');
        width:47px;
        height: 85px;
    }

    .notification-text {
        min-width: 250px;
    }

    &.octane-alert-default,
    &.octane-alert-motd {
        width: 350px;
        .notification-text {
            min-width: auto;
        }
    }

	&.octane-alert-credits {
        width: 370px;
        .notification-text {
            min-width: auto;
        }
    }

    &.octane-alert-moderation,
    &.octane-alert-alert {
        width: 250px;
        .notification-text {
            min-width: 225px;
        }
    }

    /* Hotel event announcement. The box is a fixed 530x300 so that a one word
       message and a long one produce exactly the same window: the message is the
       only part that scrolls, and the button never moves. */
    &.octane-alert-hotel-event {
        width: 530px;
        height: 300px;
        min-height: 300px;
        max-height: 300px;

        animation: hotelEventPop 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);

        .octane-card-content-shell {
            display: flex;
            flex-direction: column;
            /* The shell carries h-full from the card defaults, which inside a card
               of a fixed height would add up to the header's height on top of it.
               It takes what is left under the header instead. */
            flex: 1 1 auto;
            height: auto;
            min-height: 0;
            overflow: hidden;
        }

        .hotel-event-body {
            display: flex;
            /* Stretch, not flex-start: the text column has to take the body's
               height, otherwise a long message grows past the fixed box instead
               of scrolling inside it. The image centres itself instead. */
            align-items: stretch;
            gap: 14px;
            padding: 6px 4px 0 4px;
            flex: 1;
            /* Without this the flex child refuses to shrink and the message pushes
               the button out of the fixed height. */
            min-height: 0;
        }

        .hotel-event-figure {
            position: relative;
            width: 170px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            align-self: center;
        }

        .hotel-event-promo {
            width: 170px;
            image-rendering: var(--octane-pixel-art, pixelated);
        }

        .hotel-event-avatar {
            filter: drop-shadow(0 3px 5px rgba(0, 0, 0, 0.35));
            animation: hotelEventBob 2.6s ease-in-out infinite;
        }

        .hotel-event-avatar-shadow {
            width: 54px;
            height: 9px;
            border-radius: 50%;
            background: radial-gradient(ellipse, rgba(0, 0, 0, 0.32) 0%, transparent 70%);
        }

        .hotel-event-details {
            flex: 1;
            min-width: 0;
            min-height: 0;
            display: flex;
            flex-direction: column;
            gap: 9px;
            color: #2b4a63;
            font-size: 12px;
        }

        .hotel-event-headline {
            font-size: 32px;
            line-height: 1.05;
            font-weight: 700;
            /* No text-shadow here: the glyphs are filled by the gradient through
               background-clip, so a shadow shows straight through them. */
            background: linear-gradient(180deg, #ffa412 0%, #ef6c00 100%);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
            /* A long headline stays on one line rather than eating the box. */
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        .hotel-event-intro,
        .hotel-event-room {
            /* Two lines at most: a 60 character room name cannot reflow the card. */
            display: -webkit-box;
            -webkit-line-clamp: 2;
            -webkit-box-orient: vertical;
            overflow: hidden;
        }

        .hotel-event-host {
            font-weight: 700;
            color: #1b3a52;
        }

        .hotel-event-room-label {
            font-style: italic;
        }

        .hotel-event-room-name {
            font-weight: 700;
            word-break: break-word;
        }

        .hotel-event-message {
            flex: 1;
            min-height: 0;
            padding: 7px 9px;
            border: 1px solid #b6c6d8;
            border-radius: 6px;
            background: linear-gradient(180deg, #ffffff 0%, #eef3f9 100%);
            box-shadow: inset 0 1px 0 #fff;
            word-break: break-word;
            /* The only part that scrolls, so the window keeps its size. */
            overflow-y: auto;
        }

        .hotel-event-footer {
            display: flex;
            flex-direction: column;
            gap: 2px;
            /* The message box is optional. Without it nothing else fills the column,
               so the footer takes the slack and stays at the bottom of the card. */
            margin-top: auto;
            font-style: italic;
            color: #4a6880;
            font-size: 11px;
        }

        .hotel-event-actions {
            display: flex;
            justify-content: center;
            padding: 12px 0 6px 0;
        }

        .hotel-event-visit {
            padding: 7px 26px;
            font-size: 14px;
            font-weight: 700;
            background: linear-gradient(180deg, #35a3d6 0%, #1f7fb5 100%);
            border-color: #16597f;
        }

        .hotel-event-countdown {
            height: 4px;
            margin: 0 -10px -10px -10px;
            background: rgba(0, 0, 0, 0.12);
            overflow: hidden;
        }

        .hotel-event-countdown-bar {
            height: 100%;
            width: 100%;
            transform-origin: left center;
            background: linear-gradient(90deg, #ffd166 0%, #f28c28 100%);
            animation-name: hotelEventCountdown;
            animation-timing-function: linear;
            animation-fill-mode: forwards;
        }
    }

    &.octane-alert-octane-info {
        width: 460px;
        min-height: 320px;
        max-height: 640px;
        animation: octaneInfoPop 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);

        .octane-info-hero {
            position: relative;
            display: flex;
            flex-direction: column;
            align-items: center;
            margin: -8px -8px 6px -8px;
            padding: 14px 10px 18px 10px;
            background:
                radial-gradient(ellipse at top, rgba(255, 220, 120, 0.45) 0%, transparent 60%),
                linear-gradient(135deg, #4a72b8 0%, #2d4a82 45%, #5a3d9a 100%);
            border-bottom: 2px solid #1c2a4a;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.25),
                inset 0 -3px 0 rgba(0, 0, 0, 0.25);
            overflow: hidden;
        }

        .octane-info-hero-stars {
            position: absolute;
            inset: 0;
            background-image:
                radial-gradient(2px 2px at 18% 28%, rgba(255, 255, 255, 0.85), transparent 60%),
                radial-gradient(1.5px 1.5px at 72% 18%, rgba(255, 255, 255, 0.7), transparent 60%),
                radial-gradient(1px 1px at 42% 65%, rgba(255, 255, 255, 0.9), transparent 60%),
                radial-gradient(1.5px 1.5px at 88% 78%, rgba(255, 255, 255, 0.75), transparent 60%),
                radial-gradient(1px 1px at 12% 80%, rgba(255, 255, 255, 0.8), transparent 60%);
            opacity: 0.85;
            animation: octaneInfoTwinkle 2.6s ease-in-out infinite alternate;
            pointer-events: none;
        }

        .octane-info-version-badge {
            position: relative;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            margin: 0 auto;
            padding: 6px 18px;
            background: linear-gradient(180deg, #ffeb8a 0%, #ffd54d 50%, #f0a318 100%);
            border: 2px solid #8a5b00;
            border-radius: 18px;
            color: #4a2b00;
            font-weight: 700;
            font-size: 14px;
            letter-spacing: 0.4px;
            text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5);
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.7),
                inset 0 -2px 0 rgba(140, 75, 0, 0.4),
                0 3px 0 rgba(0, 0, 0, 0.25),
                0 0 18px rgba(255, 200, 80, 0.55);
            width: max-content;
            max-width: 90%;
        }

        .octane-info-version-spark {
            color: #fff;
            text-shadow: 0 0 6px rgba(255, 255, 200, 0.9);
            animation: octaneInfoSpin 3s linear infinite;
            display: inline-block;
        }

        .octane-info-version-spark:last-child {
            animation-direction: reverse;
        }

        .octane-info-content {
            padding: 0 2px;
        }

        .octane-info-avatar-wrap {
            position: relative;
            width: 90px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: flex-start;
            padding-top: 2px;
        }

        .octane-info-avatar {
            filter: drop-shadow(0 3px 5px rgba(0, 0, 0, 0.35));
            animation: octaneInfoBob 2.6s ease-in-out infinite;
        }

        .octane-info-avatar-shadow {
            width: 60px;
            height: 8px;
            margin-top: -4px;
            background: radial-gradient(ellipse, rgba(0, 0, 0, 0.4) 0%, transparent 70%);
            animation: octaneInfoShadowPulse 2.6s ease-in-out infinite;
        }

        .octane-info-body {
            font-family: Volter, Volter_Goldfish, "Ubuntu", sans-serif;
            color: #2f2f2f;
            padding-right: 4px;
        }

        .octane-info-section {
            background: linear-gradient(to bottom, #ffffff 0%, #eaf1fb 100%);
            border: 1px solid #6f8db5;
            border-radius: 6px;
            overflow: hidden;
            flex-shrink: 0;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.8),
                0 2px 0 rgba(0, 0, 0, 0.12);
            transition: transform 0.18s ease, box-shadow 0.18s ease;
        }

        .octane-info-section:hover {
            transform: translateY(-1px);
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.8),
                0 3px 0 rgba(0, 0, 0, 0.18),
                0 0 0 1px rgba(110, 160, 230, 0.4);
        }

        .octane-info-section-header {
            display: flex;
            align-items: center;
            gap: 6px;
            color: #ffffff;
            font-weight: bold;
            text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.45);
            padding: 4px 10px;
            letter-spacing: 0.3px;
            border-bottom: 1px solid rgba(0, 0, 0, 0.25);
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
        }

        .octane-info-section-icon {
            font-size: 14px;
            filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.4));
        }

        .octane-info-section-hotel .octane-info-section-header {
            background: linear-gradient(180deg, #4fb3ff 0%, #1f6dc7 100%);
        }

        .octane-info-section-server .octane-info-section-header {
            background: linear-gradient(180deg, #6bd66b 0%, #2a8a2a 100%);
        }

        .octane-info-section-credits .octane-info-section-header {
            background: linear-gradient(180deg, #ff9a44 0%, #d9591a 100%);
        }

        .octane-info-section-generic .octane-info-section-header {
            background: linear-gradient(180deg, #8da0bc 0%, #4b5d7a 100%);
        }

        .octane-info-section-body {
            padding: 6px 10px;
            color: #1f2f4a;
        }

        .octane-info-stats-list,
        .octane-info-credits-list {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex;
            flex-direction: column;
            gap: 2px;
        }

        .octane-info-stats-list li {
            display: flex;
            justify-content: space-between;
            align-items: center;
            gap: 8px;
            padding: 2px 4px;
            border-radius: 3px;
        }

        .octane-info-stats-list li:nth-child(odd) {
            background: rgba(110, 160, 230, 0.08);
        }

        .octane-info-stat-label {
            font-size: 12px;
            color: #4a5a76;
            font-weight: 500;
            flex-shrink: 0;
        }

        .octane-info-stat-value {
            font-size: 12px;
            color: #1a3a6b;
            font-weight: 700;
            background: linear-gradient(180deg, #ffffff 0%, #e6efff 100%);
            border: 1px solid #b8cce6;
            border-radius: 4px;
            padding: 1px 8px;
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
            text-align: right;
            word-break: break-word;
        }

        .octane-info-credits-list li {
            display: flex;
            align-items: flex-start;
            gap: 6px;
            padding: 3px 4px;
            font-size: 12px;
            color: #4a2b00;
            border-radius: 3px;
            transition: background 0.15s ease;
            word-break: break-word;
        }

        .octane-info-credits-list li:hover {
            background: rgba(255, 180, 80, 0.15);
        }

        .octane-info-credit-star {
            color: #f0a318;
            text-shadow: 0 0 4px rgba(240, 163, 24, 0.6);
            font-size: 13px;
            flex-shrink: 0;
        }

        .octane-info-footer {
            margin-top: 6px;
            padding-top: 8px;
            border-top: 1px dashed #b0b0b0;
            display: flex;
            flex-direction: column;
            gap: 6px;
        }

        .octane-info-actions {
            margin-top: 2px;
        }

        .octane-info-report-btn {
            position: relative;
            overflow: hidden;
            background: linear-gradient(180deg, #ff6b6b 0%, #c92a2a 100%) !important;
            border-color: #8a1a1a !important;
            text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.35);
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.3),
                inset 0 -2px 0 rgba(0, 0, 0, 0.25),
                0 0 12px rgba(255, 100, 100, 0.4);
            transition: transform 0.12s ease, box-shadow 0.12s ease;
        }

        .octane-info-report-btn:hover {
            transform: translateY(-1px);
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.4),
                inset 0 -2px 0 rgba(0, 0, 0, 0.25),
                0 2px 0 rgba(0, 0, 0, 0.2),
                0 0 18px rgba(255, 100, 100, 0.7);
        }

        .octane-info-report-btn:active {
            transform: translateY(1px);
        }

        .octane-info-report-btn::after {
            content: '';
            position: absolute;
            top: 0;
            left: -120%;
            width: 60%;
            height: 100%;
            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
            transform: skewX(-20deg);
            animation: octaneInfoShine 2.8s ease-in-out infinite;
        }
    }

    &.octane-alert-furnidata {
        width: 400px;
        max-height: 520px;

        .notification-text {
            min-width: auto;
        }

        .furnidata-item-banner {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            margin: -8px -8px 8px -8px;
            padding: 10px;
            background: linear-gradient(135deg, #4a72b8 0%, #2d4a82 60%, #1c2a4a 100%);
            border-bottom: 2px solid #1c2a4a;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.25),
                inset 0 -3px 0 rgba(0, 0, 0, 0.25);
        }

        .furnidata-item-icon {
            font-size: 16px;
            filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.4));
        }

        .furnidata-item-name {
            color: #ffffff;
            font-weight: 700;
            font-size: 14px;
            letter-spacing: 0.3px;
            text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.45);
            word-break: break-word;
        }

        .furnidata-body {
            font-family: Volter, Volter_Goldfish, "Ubuntu", sans-serif;
            padding-right: 4px;
        }

        .furnidata-section {
            background: linear-gradient(to bottom, #ffffff 0%, #eaf1fb 100%);
            border: 1px solid #6f8db5;
            border-radius: 6px;
            overflow: hidden;
            flex-shrink: 0;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.8),
                0 2px 0 rgba(0, 0, 0, 0.12);
        }

        .furnidata-section-header {
            display: flex;
            align-items: center;
            gap: 6px;
            color: #ffffff;
            font-weight: bold;
            text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.45);
            padding: 4px 8px;
            letter-spacing: 0.3px;
            border-bottom: 1px solid rgba(0, 0, 0, 0.25);
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
        }

        .furnidata-section-base .furnidata-section-header {
            background: linear-gradient(180deg, #4fb3ff 0%, #1f6dc7 100%);
        }

        .furnidata-section-room .furnidata-section-header {
            background: linear-gradient(180deg, #6bd66b 0%, #2a8a2a 100%);
        }

        .furnidata-section-icon {
            font-size: 13px;
            filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.4));
        }

        .furnidata-section-title {
            flex-grow: 1;
        }

        .furnidata-copy-btn {
            display: flex;
            align-items: center;
            gap: 4px;
            font-size: 11px;
            font-weight: 700;
            color: #1f2f4a;
            text-shadow: none;
            background: linear-gradient(180deg, #ffffff 0%, #d9e6f7 100%);
            border: 1px solid rgba(0, 0, 0, 0.35);
            border-radius: 4px;
            padding: 1px 8px;
            cursor: pointer;
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.9),
                0 1px 0 rgba(0, 0, 0, 0.25);
            transition: transform 0.12s ease, box-shadow 0.12s ease;
        }

        .furnidata-copy-btn:hover {
            transform: translateY(-1px);
            box-shadow:
                inset 0 1px 0 rgba(255, 255, 255, 0.9),
                0 2px 0 rgba(0, 0, 0, 0.3);
        }

        .furnidata-copy-btn:active {
            transform: translateY(1px);
            box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25);
        }

        .furnidata-rows {
            list-style: none;
            margin: 0;
            padding: 6px 8px;
            display: flex;
            flex-direction: column;
            gap: 2px;
        }

        .furnidata-rows li {
            display: flex;
            justify-content: space-between;
            align-items: center;
            gap: 8px;
            padding: 2px 4px;
            border-radius: 3px;
        }

        .furnidata-rows li:nth-child(odd) {
            background: rgba(110, 160, 230, 0.08);
        }

        .furnidata-row-label {
            font-size: 12px;
            color: #4a5a76;
            font-weight: 500;
            flex-shrink: 0;
        }

        .furnidata-row-value {
            font-size: 12px;
            color: #1a3a6b;
            font-weight: 700;
            background: linear-gradient(180deg, #ffffff 0%, #e6efff 100%);
            border: 1px solid #b8cce6;
            border-radius: 4px;
            padding: 1px 8px;
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
            text-align: right;
            word-break: break-word;
        }
    }
}

@keyframes octaneInfoPop {
    0% { transform: scale(0.85); opacity: 0; }
    60% { transform: scale(1.04); opacity: 1; }
    100% { transform: scale(1); opacity: 1; }
}

@keyframes octaneInfoTwinkle {
    0% { opacity: 0.4; }
    100% { opacity: 1; }
}

@keyframes octaneInfoSpin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

@keyframes octaneInfoBob {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-3px); }
}

@keyframes octaneInfoShadowPulse {
    0%, 100% { transform: scaleX(1); opacity: 0.55; }
    50% { transform: scaleX(0.8); opacity: 0.35; }
}

@keyframes octaneInfoShine {
    0% { left: -120%; }
    60%, 100% { left: 140%; }
}

.octane-notification-bubble {
    pointer-events: all;
    padding: 6px 5px;
    pointer-events: all;
    padding: 10px;
    background-color: #262626;
    box-shadow: inset 0 5px rgba(38,38,57,.6), inset 0 -4px rgba(25,25,37,.6);
    font-size: .7875rem;
    border-radius: 0.5rem;
    font-size: 0.7875rem;
	color: white;

    .bubble-image-container {
        width: 50px;
        height: 50px;
    }
}
.topnotifications{
    margin-top: -6px;
}

.octane-rightside-notifications {
    width: 100%;
    align-items: flex-end;
    gap: 4px;
    pointer-events: none;
}

.octane-rightside-notifications > * {
    margin-left: auto;
    pointer-events: auto;
}

.octane-swf-notification-bubble {
    width: 188px;
    max-width: 188px;
    min-height: 42px;
    margin-left: auto;
    padding: 6px 7px !important;
    border: 1px solid rgba(0, 0, 0, 0.72);
    border-right: 0;
    border-radius: 7px 0 0 7px !important;
    background: rgba(46, 45, 44, 0.82) !important;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.10),
        inset 0 -1px 0 rgba(0, 0, 0, 0.42),
        0 2px 0 rgba(0, 0, 0, 0.24) !important;
    color: #ffffff;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 11px !important;
    line-height: 1.15;
    text-shadow: 1px 1px 0 #000000;
}

.octane-swf-notification-bubble .w-\[50px\],
.octane-swf-notification-bubble .h-\[50px\],
.octane-swf-notification-bubble .bubble-image-container {
    width: 38px !important;
    height: 38px !important;
}

.octane-swf-notification-bubble img {
    width: auto;
    height: auto;
    max-width: 38px;
    max-height: 38px;
    object-fit: contain;
}

.octane-swf-notification-bubble .btn,
.octane-swf-notification-bubble button {
    min-height: 24px;
    padding: 0 8px;
    border: 3px solid transparent !important;
    border-image-source: var(--habbo-skin-button) !important;
    border-image-slice: 3 fill !important;
    border-image-width: 3px !important;
    border-image-repeat: stretch !important;
    border-radius: 0 !important;
    background: transparent !important;
    color: #111111 !important;
    font-size: 11px;
    font-weight: 700;
    line-height: 1;
    text-shadow: none;
}

.octane-swf-notification-bubble .btn:hover,
.octane-swf-notification-bubble button:hover {
    border-image-source: var(--habbo-skin-button-hover) !important;
}

.octane-friendonline-notification {
    position: relative;
    min-width: 86px;
    height: 58px;
    margin-left: auto;
    cursor: pointer;
    pointer-events: auto;
    image-rendering: var(--octane-pixel-art, pixelated);
    user-select: none;
}

.octane-friendonline-notification__content {
    position: absolute;
    left: 0;
    top: 12px;
    display: flex;
    height: 34px;
    overflow: hidden;
}

.octane-friendonline-notification__left,
.octane-friendonline-notification__right {
    width: auto;
    height: auto;
    flex: 0 0 auto;
}

.octane-friendonline-notification__middle {
    height: 34px;
    flex: 1 1 auto;
    background-repeat: repeat-x;
}

.octane-friendonline-notification__message {
    /* notification_friendonline: a style 3 text without text_style, u_regular 12 px 0xcfcfcf (regular Ubuntu). */
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    position: absolute;
    left: 8px;
    top: 6px;
    display: flex;
    align-items: center;
    gap: 5px;
    height: 19px;
    max-width: calc(100% - 16px);
    color: #cfcfcf;
    font-size: 12px;
    line-height: 19px;
    white-space: nowrap;
    text-shadow: 0 1px 0 #000;
}

.octane-friendonline-notification__message span {
    display: block;
    overflow: hidden;
    text-align: center;
    text-overflow: ellipsis;
}

.octane-friendonline-notification__message img {
    width: auto;
    height: auto;
    margin-top: 1px;
    flex: 0 0 auto;
}

.octane-friendonline-notification__avatar {
    position: absolute;
    left: 33px;
    top: 3px;
    width: 53px;
    height: 53px;
}

.octane-friendonline-notification__circle-inner,
.octane-friendonline-notification__circle {
    position: absolute;
    inset: 0;
    width: auto;
    height: auto;
    pointer-events: none;
}

.octane-friendonline-notification__head {
    position: absolute;
    left: 2px;
    top: 1px;
    width: 50px;
    height: 50px;
    overflow: hidden;
    border-radius: 50%;
}

.octane-friendonline-notification__head .avatar-image {
    width: 50px !important;
    height: 50px !important;
    background-size: 76px auto !important;
    background-position: center 34% !important;
    background-repeat: no-repeat !important;
}

/* Command list produced by ":commands". NotificationDefaultAlertView tags the alert
   with .octane-alert-command-list and renders one button per command; without these
   rules the buttons stay inline and several commands share a visual line. */
.octane-alert.octane-alert-command-list {
    width: 430px;
    max-height: 470px;
}

.notification-command-template {
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-height: 370px;
    padding-right: 4px;
    overflow-y: auto;
    overflow-x: hidden;
}

/* The listing names itself on its first line; that line becomes the card header,
   so the body carries no heading of its own. */
.notification-command-search {
    --notification-command-search-bg: #fff;
    --notification-command-search-border: #a8a8a8;

    position: sticky;
    top: 0;
    z-index: 1;
    width: 100%;
    margin-bottom: 4px;
    padding: 3px 7px;
    background: var(--notification-command-search-bg);
    border: 1px solid var(--notification-command-search-border);
    border-radius: 3px;
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12);
    color: inherit;
    font-family: inherit;
    font-size: 11px;
}

.notification-command-copy {
    padding: 0 8px 4px 8px;
    color: #4b5563;
    font-size: 11px;
    line-height: 1.35;
}

.notification-command-row {
    display: grid;
    grid-template-columns: minmax(0, 150px) minmax(0, 1fr);
    align-items: baseline;
    gap: 2px 10px;
    width: 100%;
    padding: 4px 8px;
    background: rgba(255, 255, 255, 0.55);
    border: 1px solid transparent;
    border-radius: 4px;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.notification-command-row:nth-child(even) {
    background: rgba(0, 0, 0, 0.04);
}

.notification-command-row:hover {
    background: #fff6d6;
    border-color: #d8a72a;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
}

.notification-command-row:active {
    background: #ffe9a8;
}

.notification-command-name {
    min-width: 0;
    color: #2d4a82;
    font-weight: 700;
    font-size: 12px;
    font-family: 'Consolas', 'Courier New', monospace;
    overflow-wrap: anywhere;
}

.notification-command-detail {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
}

.notification-command-args {
    color: #7a6a35;
    font-size: 11px;
    font-family: 'Consolas', 'Courier New', monospace;
    overflow-wrap: anywhere;
}

.notification-command-description {
    color: #6b7280;
    font-size: 11px;
    line-height: 1.35;
    overflow-wrap: anywhere;
}

@keyframes hotelEventPop {
    from {
        opacity: 0;
        transform: scale(0.92) translateY(-8px);
    }
    to {
        opacity: 1;
        transform: scale(1) translateY(0);
    }
}

@keyframes hotelEventBob {
    0%,
    100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-3px);
    }
}

@keyframes hotelEventCountdown {
    from {
        transform: scaleX(1);
    }
    to {
        transform: scaleX(0);
    }
}

/* Official layout_notification on the "black borderless" border skin (style 1). */
@font-face {
    font-family: Volter;
    font-weight: 700;
    font-style: normal;
    src: url("@/assets/webfonts/Volter-b.ttf") format("truetype");
}

.octane-swf-notification-bubble.octane-notification-item {
    width: 190px;
    max-width: 190px;
    min-height: 66px;
    gap: 8px;
    align-items: flex-start;
    padding: 2px !important;
    border: 6px solid transparent;
    border-image: url("@/assets/images/notifications/notification_border_black.png") 6 fill / 6px stretch;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    color: #ffffff;
    font-family: Volter, Ubuntu, sans-serif;
    font-size: 9px !important;
    font-weight: 700;
    line-height: 11px;
    text-shadow: none;
    cursor: pointer;
    image-rendering: var(--octane-pixel-art, pixelated);
}

.octane-notification-item__icon {
    display: flex;
    flex: 0 0 50px;
    align-items: center;
    justify-content: center;
    width: 50px;
    height: 50px;
    overflow: hidden;
}

.octane-notification-item__icon img {
    max-width: 50px !important;
    max-height: 50px !important;
    object-fit: contain;
    image-rendering: var(--octane-pixel-art, pixelated);
}

.octane-notification-item__text {
    display: flex;
    flex-direction: column;
    width: 116px;
    min-width: 0;
    overflow-wrap: break-word;
    word-break: break-word;
}

.octane-notification-item__rarity {
    margin-top: 2px;
}

/* Official club_gift_notification on the border_9 skin. */
.octane-swf-notification-bubble.octane-club-gift-notification {
    position: relative;
    display: block;
    width: 192px;
    max-width: 192px;
    height: 82px;
    min-height: 82px;
    padding: 0 !important;
    border: 0;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    color: #ffffff;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 12px !important;
    line-height: 14px;
    text-shadow: none;
}

.octane-club-gift-notification__border {
    position: absolute;
    inset: 0;
    border-style: solid;
    border-color: transparent;
    border-width: 7px 7px 8px 7px;
    border-image: url("@/assets/images/notifications/notification_border_9.png") 7 7 8 7 fill / 7px 7px 8px 7px stretch;
    image-rendering: var(--octane-pixel-art, pixelated);
    pointer-events: none;
}

.octane-club-gift-notification__icon {
    position: absolute;
    top: 7px;
    left: 6px;
    width: 16px;
    height: 16px;
    image-rendering: var(--octane-pixel-art, pixelated);
}

.octane-club-gift-notification__text {
    position: absolute;
    top: 7px;
    left: 25px;
    width: 161px;
    height: 36px;
    overflow: hidden;
    overflow-wrap: break-word;
}

.octane-swf-notification-bubble .octane-club-gift-notification__button {
    position: absolute;
    top: 44px;
    right: 6px;
    min-width: 96px;
    height: 28px;
    padding: 0 10px;
    border: 5px solid transparent !important;
    border-image-source: url("@/assets/images/habbicons/slices/button-shiny-black-default.png") !important;
    border-image-slice: 5 fill !important;
    border-image-width: 5px !important;
    border-image-repeat: stretch !important;
    background: transparent !important;
    color: #ffffff !important;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 12px;
    font-weight: 400;
    line-height: 16px;
    cursor: pointer;
    image-rendering: var(--octane-pixel-art, pixelated);
}

.octane-swf-notification-bubble .octane-club-gift-notification__button:hover {
    border-image-source: url("@/assets/images/habbicons/slices/button-shiny-black-hover.png") !important;
}

.octane-swf-notification-bubble .octane-club-gift-notification__button:active {
    border-image-source: url("@/assets/images/habbicons/slices/button-shiny-black-pressed.png") !important;
}

.octane-swf-notification-bubble .octane-club-gift-notification__later {
    position: absolute;
    top: 49px;
    left: 8px;
    min-height: 0;
    padding: 0;
    border: 0 !important;
    border-image-source: none !important;
    background: transparent !important;
    color: #ffffff !important;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 12px;
    font-weight: 400;
    text-decoration: underline;
    cursor: pointer;
}

.octane-swf-notification-bubble .octane-club-gift-notification__later:hover {
    color: #bae1f9 !important;
}

/*
 * AIR's new feature notifications (new_feature_notification_xml 192x92, _promo_xml 192x34,
 * _countdown_xml 192x76) on the border_9 skin, which the hotel can recolour (notifications.new_feature.color).
 */
.octane-new-feature-notification {
    position: relative;
    display: block;
    width: 192px;
    height: 92px;
    isolation: isolate;
    color: #ffffff;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 12px;
    line-height: 14px;
}

.octane-new-feature-notification[data-type="promo"] {
    height: auto;
    min-height: 34px;
}

.octane-new-feature-notification[data-type="countdown"] {
    height: 76px;
}

.octane-new-feature-notification__border {
    position: absolute;
    inset: 0;
    border-style: solid;
    border-color: transparent;
    border-width: 7px 7px 8px 7px;
    border-image: url("@/assets/images/notifications/notification_border_9.png") 7 7 8 7 fill / 7px 7px 8px 7px stretch;
    image-rendering: var(--octane-pixel-art, pixelated);
    pointer-events: none;
}

/* A hotel colour other than the skin's own 0x686661 takes the border's hue, keeping its shading. */
.octane-new-feature-notification__border[data-tinted="true"]::after {
    position: absolute;
    inset: -7px -7px -8px -7px;
    border-radius: 6px;
    background: var(--octane-new-feature-color);
    mix-blend-mode: color;
    content: "";
}

.octane-new-feature-notification__image {
    position: absolute;
    top: 5px;
    left: 6px;
    width: 55px;
    height: 55px;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

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

.octane-new-feature-notification__desc {
    position: absolute;
    top: 7px;
    left: 67px;
    width: 113px;
    height: 45px;
    overflow: hidden;
    overflow-wrap: break-word;
}

.octane-new-feature-notification__open {
    position: absolute;
    top: 54px;
    left: 133px;
    min-width: 51px;
    height: 28px;
    padding: 0 6px;
    border: 5px solid transparent !important;
    border-image-source: url("@/assets/images/habbicons/slices/button-shiny-black-default.png") !important;
    border-image-slice: 5 fill !important;
    border-image-width: 5px !important;
    border-image-repeat: stretch !important;
    background: transparent !important;
    color: #ffffff !important;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 12px;
    line-height: 16px;
    cursor: pointer;
    image-rendering: var(--octane-pixel-art, pixelated);
}

.octane-new-feature-notification__open:hover {
    border-image-source: url("@/assets/images/habbicons/slices/button-shiny-black-hover.png") !important;
}

.octane-new-feature-notification__open:active {
    border-image-source: url("@/assets/images/habbicons/slices/button-shiny-black-pressed.png") !important;
}

/* cancel_link_region (8,60 155x17): underlined white link, 0xBAE1F9 while hovered. */
.octane-new-feature-notification__cancel-link {
    position: absolute;
    top: 60px;
    left: 8px;
    max-width: 155px;
    min-height: 0;
    padding: 0;
    border: 0 !important;
    background: transparent !important;
    color: #ffffff !important;
    font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
    font-size: 12px;
    line-height: 17px;
    text-decoration: underline;
    cursor: pointer;
}

.octane-new-feature-notification__cancel-link:hover {
    color: #bae1f9 !important;
}

/* promo / countdown: the whole box is main_region (brightness_and_shadow_under_gentle). */
.octane-new-feature-notification__main-region {
    position: relative;
    display: block;
    width: 192px;
    min-height: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: left;
    cursor: pointer;
}

.octane-new-feature-notification[data-type="promo"] .octane-new-feature-notification__main-region {
    min-height: 34px;
    padding: 7px 0 9px;
}

.octane-new-feature-notification[data-type="countdown"] .octane-new-feature-notification__main-region {
    height: 76px;
}

.octane-new-feature-notification__main-region:hover {
    filter: brightness(1.08) drop-shadow(0 1px 1px rgba(0, 0, 0, 0.35));
}

.octane-new-feature-notification__main-region .octane-new-feature-notification__image {
    top: 7px;
    left: 8px;
    width: 20px;
    height: 20px;
}

.octane-new-feature-notification__main-region .octane-new-feature-notification__desc {
    position: relative;
    top: 0;
    left: 0;
    display: block;
    margin-left: 30px;
    width: auto;
    max-width: 148px;
    height: auto;
    text-decoration: underline;
}

.octane-new-feature-notification[data-type="countdown"] .octane-new-feature-notification__desc {
    position: absolute;
    top: 7px;
    left: 14px;
    margin-left: 0;
    width: 154px;
    max-width: 154px;
}

/* NewFeatureNotification: hovering a promo / countdown lights its text up (LINK_COLOR_HIGHLIGHT). */
.octane-new-feature-notification:hover .octane-new-feature-notification__main-region .octane-new-feature-notification__desc {
    color: #bae1f9;
}

/* cancel_link_region of promo (174,12) and countdown (174,9): common_close_x at 0.55. */
.octane-new-feature-notification__cancel-region {
    position: absolute;
    top: 12px;
    left: 174px;
    width: 10px;
    height: 10px;
    min-height: 0;
    padding: 0;
    border: 0;
    background: transparent;
    cursor: pointer;
}

.octane-new-feature-notification[data-type="countdown"] .octane-new-feature-notification__cancel-region {
    top: 9px;
}

.octane-new-feature-notification__cancel-region img {
    display: block;
    opacity: 0.55;
    image-rendering: var(--octane-pixel-art, pixelated);
}

/* countdown_widget (46,33 99x37): three counters, value over unit, colon separated. */
.octane-new-feature-notification__countdown {
    position: absolute;
    top: 33px;
    left: 46px;
    width: 99px;
    height: 37px;
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;
}

.octane-new-feature-notification__counter {
    display: flex;
    align-items: center;
}

.octane-new-feature-notification__separator {
    padding: 0 1px;
    font-weight: bold;
}

.octane-new-feature-notification__counter-box {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-width: 26px;
    padding: 2px 1px;
    border-radius: 3px;
    background: rgba(0, 0, 0, 0.35);
}

.octane-new-feature-notification__counter-value {
    font-size: 14px;
    font-weight: bold;
    line-height: 16px;
}

.octane-new-feature-notification__counter-unit {
    font-size: 9px;
    line-height: 10px;
}
