CatalogView.css 167.1 Ko
Télécharger le fichier
.octane-catalog-window {
/* AIR: the window body is #e9e9e1; the navigation and item-grid boxes are #d2d1cb inside a #757571 line with a
#f4f4f0 inner edge. */
--catalog-standard-bg: #e9e9e1;
--catalog-standard-box: #d2d1cb;
--catalog-standard-box-line: #757571;
--catalog-standard-box-edge: #f4f4f0;
--catalog-standard-panel: #f7f7f2;
--catalog-standard-panel-2: #e7e7df;
--catalog-standard-border: #9d9d96;
--catalog-standard-border-dark: #6f6f6a;
--catalog-standard-text: #222222;
--catalog-standard-muted: #666666;
--catalog-standard-blue: #418db0;
--catalog-standard-blue-dark: #0e3f52;
--catalog-standard-blue-border: #376275;
--catalog-standard-select: #63c5e9;
--catalog-standard-select-outer: #82d1ed;
--catalog-standard-bc: #ff8d00;
--catalog-standard-bc-outer: #ffb53c;
/* Quantity stepper +/- sprites, kept identical to origin/main so the
glyphs stay put through hover/active/disabled states. */
--habbo-stepper-plus: url("../../assets/images/catalog/buttons/plus.png");
--habbo-stepper-plus-hover: url("../../assets/images/catalog/buttons/plus_hover.png");
--habbo-stepper-plus-pressed: url("../../assets/images/catalog/buttons/plus_pressed.png");
--habbo-stepper-plus-disabled: url("../../assets/images/catalog/buttons/plus_disabled.png");
--habbo-stepper-minus: url("../../assets/images/catalog/buttons/minus.png");
--habbo-stepper-minus-hover: url("../../assets/images/catalog/buttons/minus_hover.png");
--habbo-stepper-minus-pressed: url("../../assets/images/catalog/buttons/minus_pressed.png");
--habbo-stepper-minus-disabled: url("../../assets/images/catalog/buttons/minus_disabled.png");
width: var(--octane-catalog-window-width, 570px) !important;
height: var(--octane-catalog-window-height, 635px) !important;
min-width: var(--octane-catalog-window-width, 570px) !important;
max-width: var(--octane-catalog-window-width, 570px) !important;
min-height: 570px !important;
max-height: calc(100vh - 24px) !important;
position: relative;
display: flex;
flex-direction: column;
color: var(--catalog-standard-text);
overflow: hidden;
box-sizing: border-box;
}
.draggable-window:has(> .octane-catalog-window) {
width: var(--octane-catalog-window-width, 570px) !important;
height: var(--octane-catalog-window-height, 635px) !important;
min-width: var(--octane-catalog-window-width, 570px) !important;
max-width: var(--octane-catalog-window-width, 570px) !important;
}
.octane-catalog-window img,
.octane-catalog-window canvas,
.octane-catalog-window .octane-icon,
.octane-catalog-window [class*='octane-catalog-standard-button'],
.octane-catalog-window [class*='octane-catalog-standard-buy-button'],
.octane-catalog-window [class*='octane-catalog-standard-gift-button'] {
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-mobile-header,
.octane-catalog-admin-banner,
.octane-catalog-layout-header-shell,
.octane-catalog-layout-hero,
.octane-catalog-window .octane-catalog-header,
.octane-catalog-window .builders-club-status-shell {
display: none !important;
}
.octane-catalog-window .octane-catalog-header-publish {
position: absolute !important;
top: 5px !important;
right: 32px !important;
width: auto !important;
min-width: 0 !important;
height: 22px !important;
padding: 0 10px !important;
font-size: 10px !important;
font-weight: 700 !important;
letter-spacing: 0.5px !important;
line-height: 22px !important;
z-index: 10 !important;
}
.octane-catalog-window .octane-catalog-header-publish.has-pending {
animation: octanePublishPulse 1.4s ease-in-out infinite;
}
@keyframes octanePublishPulse {
0%, 100% { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35), inset 0 -1px 0 rgba(0, 0, 0, 0.25), 0 0 0 rgba(61, 204, 69, 0); }
50% { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35), inset 0 -1px 0 rgba(0, 0, 0, 0.25), 0 0 8px rgba(61, 204, 69, 0.75); }
}
.octane-catalog-window .octane-catalog-default-admin {
flex-wrap: nowrap !important;
align-items: center !important;
gap: 6px !important;
margin-bottom: 4px !important;
overflow-x: auto !important;
overflow-y: visible !important;
}
.octane-catalog-window .octane-catalog-default-admin button {
display: inline-flex !important;
align-items: center !important;
gap: 4px !important;
height: 22px !important;
min-height: 22px !important;
padding: 0 10px !important;
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: 10px !important;
font-weight: 700 !important;
line-height: 1 !important;
text-shadow: none !important;
box-shadow: none !important;
cursor: pointer !important;
white-space: nowrap !important;
image-rendering: var(--octane-pixel-art, pixelated) !important;
}
.octane-catalog-window .octane-catalog-default-admin button:hover {
filter: none;
border-image-source: var(--habbo-skin-button-hover) !important;
color: #111111 !important;
}
.octane-catalog-window .octane-catalog-default-admin button:active {
filter: none;
border-image-source: var(--habbo-skin-button-pressed) !important;
box-shadow: none !important;
}
.octane-catalog-window .octane-catalog-default-admin button.text-success,
.octane-catalog-window .octane-catalog-default-admin button[class*="success"] {
border-width: 5px !important;
border-style: solid !important;
border-color: transparent !important;
border-image-source: var(--habbo-skin-shiny-thick-green) !important;
border-image-slice: 5 fill !important;
border-image-width: 5px !important;
border-image-repeat: stretch !important;
background: transparent !important;
color: #ffffff !important;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35) !important;
}
.octane-catalog-window .octane-catalog-default-admin button.text-success:hover,
.octane-catalog-window .octane-catalog-default-admin button[class*="success"]:hover {
border-image-source: var(--habbo-skin-shiny-thick-green-hover) !important;
color: #ffffff !important;
}
.octane-catalog-window .octane-catalog-default-admin button svg {
width: 11px !important;
height: 11px !important;
fill: currentColor !important;
flex-shrink: 0 !important;
}
.octane-catalog-window .octane-catalog-default-admin button .font-mono {
color: #4a4a44 !important;
font-weight: 600 !important;
margin-left: 4px !important;
}
.octane-catalog-tabs-shell .octane-card-tab-item.octane-catalog-admin-tab {
flex: 0 0 auto !important;
/* 18px of caps + 12px for the 10px gear. */
width: 38px !important;
min-width: 38px !important;
max-width: 38px !important;
padding: 4px 13px 8px !important;
margin-left: 0 !important;
}
.octane-catalog-admin-modal {
--catalog-admin-bg: #ecece4;
--catalog-admin-panel: #f7f7f2;
--catalog-admin-panel-alt: #e5e5dc;
--catalog-admin-panel-top: #fffdf5;
--catalog-admin-border: #9d9d96;
--catalog-admin-border-dark: #5f5f59;
--catalog-admin-text: #20201d;
--catalog-admin-muted: #60605a;
--catalog-admin-blue: #418db0;
--catalog-admin-blue-dark: #0e3f52;
--catalog-admin-danger: #b83b32;
color: var(--catalog-admin-text) !important;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-admin-modal .octane-card-header-shell {
background: linear-gradient(180deg, #58a8c5 0%, var(--catalog-admin-blue) 45%, var(--catalog-admin-blue-dark) 100%) !important;
}
.octane-catalog-admin-modal .octane-card-title {
padding: 0 28px;
font-size: 15px;
font-weight: 700;
line-height: 1.1;
white-space: nowrap;
}
.octane-catalog-admin-body {
background: var(--catalog-admin-bg);
color: var(--catalog-admin-text);
}
.octane-catalog-admin-modal :where(.bg-white, .bg-gray-50, .bg-card-grid-item) {
background: linear-gradient(180deg, var(--catalog-admin-panel-top) 0%, var(--catalog-admin-panel) 100%) !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.76), 0 1px 0 rgba(0, 0, 0, 0.08) !important;
}
.octane-catalog-admin-modal :where(.border, .border-card-grid-item-border, .border-primary\/40) {
border-color: var(--catalog-admin-border) !important;
}
.octane-catalog-admin-modal :where(.text-primary) {
color: var(--catalog-admin-blue-dark) !important;
}
.octane-catalog-admin-modal :where(.text-muted, .text-dark) {
color: var(--catalog-admin-muted) !important;
}
.octane-catalog-admin-body :where(label, p),
.octane-catalog-admin-body :where(span[class*="text-"], div[class*="text-"]) {
color: inherit;
}
.octane-catalog-admin-modal :where(input, select, .octane-select-trigger, textarea) {
min-height: 24px;
background: #fffdf4 !important;
border-color: var(--catalog-admin-border-dark) !important;
color: var(--catalog-admin-text) !important;
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.16), inset 0 0 0 1px rgba(255, 255, 255, 0.55) !important;
}
.octane-catalog-admin-modal :where(input:focus, select:focus, .octane-select-trigger:focus, textarea:focus) {
border-color: var(--catalog-admin-blue) !important;
box-shadow: 0 0 0 2px rgba(99, 197, 233, 0.35), inset 0 1px 0 rgba(0, 0, 0, 0.16) !important;
}
.octane-catalog-admin-modal :where(input::placeholder, textarea::placeholder) {
color: #77766d !important;
}
.octane-catalog-admin-modal :where(input[type="checkbox"]) {
appearance: auto;
-webkit-appearance: checkbox;
width: 14px !important;
height: 14px !important;
min-height: 0 !important;
min-width: 0 !important;
padding: 0 !important;
margin: 0;
border: none !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
accent-color: var(--catalog-admin-blue);
cursor: pointer;
flex-shrink: 0;
}
.octane-catalog-admin-input {
min-height: 24px;
padding: 4px 8px;
border: 2px solid var(--catalog-admin-border-dark);
border-radius: 4px;
background: #fffdf4;
color: var(--catalog-admin-text);
font-size: 11px;
line-height: 1.2;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.octane-catalog-admin-input::placeholder {
color: #77766d;
}
.octane-catalog-admin-input:focus {
border-color: var(--catalog-admin-blue);
outline: none;
box-shadow: 0 0 0 2px rgba(99, 197, 233, 0.35), inset 0 1px 0 rgba(0, 0, 0, 0.16);
}
.octane-catalog-admin-panel,
.octane-catalog-admin-note {
border: 2px solid var(--catalog-admin-border);
border-radius: 4px;
background: linear-gradient(180deg, var(--catalog-admin-panel-top) 0%, var(--catalog-admin-panel) 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.76), 0 1px 0 rgba(0, 0, 0, 0.08);
}
.octane-catalog-admin-panel {
padding: 10px;
}
.octane-catalog-admin-note {
padding: 4px 10px;
color: var(--catalog-admin-muted);
font-size: 10px;
}
.octane-catalog-admin-label,
.octane-catalog-admin-section-title {
color: var(--catalog-admin-muted);
font-size: 9px;
font-weight: 700;
line-height: 1.2;
}
.octane-catalog-admin-label.is-primary,
.octane-catalog-admin-label.is-uppercase,
.octane-catalog-admin-section-title {
color: var(--catalog-admin-blue-dark);
text-transform: uppercase;
letter-spacing: 0.04em;
}
.octane-catalog-admin-section-title {
margin-bottom: 6px;
}
.octane-catalog-admin-check-label {
color: var(--catalog-admin-text);
font-size: 10px;
cursor: pointer;
}
/* ---- Admin edit modals: structured form layout ---- */
.octane-catalog-admin-form {
display: flex;
flex: 1 1 auto;
flex-direction: column;
min-height: 0;
}
.octane-catalog-admin-form-sheet {
display: flex;
flex: 1 1 auto;
flex-direction: column;
min-height: 0;
overflow: hidden;
border: 1px solid var(--catalog-admin-border);
border-radius: 6px;
background: linear-gradient(180deg, #fffdf8 0%, var(--catalog-admin-panel) 100%);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.9),
0 1px 2px rgba(0, 0, 0, 0.08);
}
.octane-catalog-admin-form-scroll {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 0;
min-height: 0;
overflow-y: auto;
}
.octane-catalog-admin-form-hero,
.octane-catalog-admin-page-preview-card,
.octane-catalog-admin-offer-preview-card {
display: flex;
flex-shrink: 0;
gap: 12px;
align-items: center;
padding: 12px 14px;
border-bottom: 1px solid #c5d5dc;
background: linear-gradient(180deg, #eef6fa 0%, #e2edf2 100%);
}
.octane-catalog-admin-form-section {
display: flex;
flex-direction: column;
gap: 10px;
padding: 12px 14px;
border: none;
border-radius: 0;
background: transparent;
box-shadow: none;
}
.octane-catalog-admin-form-section + .octane-catalog-admin-form-section {
border-top: 1px solid #d8d8d0;
}
.octane-catalog-admin-form-section .octane-catalog-admin-section-title {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
color: var(--catalog-admin-text);
font-size: 11px;
font-weight: 700;
text-transform: none;
letter-spacing: 0;
}
.octane-catalog-admin-label.is-field {
color: var(--catalog-admin-muted);
font-size: 10px;
font-weight: 600;
text-transform: none;
letter-spacing: 0;
}
.octane-catalog-admin-form-grid {
display: grid;
gap: 10px 12px;
}
.octane-catalog-admin-form-grid.is-2col {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.octane-catalog-admin-form-grid.is-3col {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.octane-catalog-admin-form-field {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.octane-catalog-admin-form-field.is-span-2 {
grid-column: span 2;
}
.octane-catalog-admin-form-field.is-span-3 {
grid-column: span 3;
}
.octane-catalog-admin-form-field-hint {
color: var(--catalog-admin-muted);
font-size: 9px;
font-weight: 400;
}
.octane-catalog-admin-form-toggles {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
min-height: 28px;
}
.octane-catalog-admin-form-toggle {
display: inline-flex;
gap: 8px;
align-items: center;
min-height: 28px;
padding: 5px 10px;
border: 1px solid #c9c9c0;
border-radius: 4px;
background: #f7f7f2;
color: var(--catalog-admin-text);
font-size: 10px;
font-weight: 600;
cursor: pointer;
user-select: none;
transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.octane-catalog-admin-form-toggle:has(input:checked),
.octane-catalog-admin-form-toggle:has(.octane-checkbox[data-checked]) {
border-color: var(--catalog-admin-blue);
background: rgba(65, 141, 176, 0.12);
color: var(--catalog-admin-blue-dark);
}
.octane-catalog-admin-form-toggle input[type="checkbox"],
.octane-catalog-admin-form-toggle .octane-checkbox {
pointer-events: none;
}
.octane-catalog-admin-form-actions {
display: flex;
flex-shrink: 0;
gap: 8px;
align-items: center;
justify-content: space-between;
padding: 10px 14px;
border-top: 1px solid #d8d8d0;
background: linear-gradient(180deg, var(--catalog-admin-panel-alt) 0%, #deded6 100%);
}
.octane-catalog-admin-savebar {
display: flex;
flex-shrink: 0;
gap: 10px;
align-items: center;
justify-content: space-between;
min-height: 52px;
padding: 8px 12px;
border-top: 1px solid #c9c9c0;
background: linear-gradient(180deg, var(--catalog-admin-panel-alt) 0%, #deded6 100%);
}
.octane-catalog-admin-savebar-status {
display: flex;
flex-direction: column;
min-width: 112px;
color: #53606a;
font-size: 11px;
line-height: 1.15;
}
.octane-catalog-admin-savebar-status small {
margin-top: 3px;
color: #88929a;
font-size: 9px;
}
.octane-catalog-admin-savebar.is-dirty .octane-catalog-admin-savebar-status { color: #865a05; }
.octane-catalog-admin-savebar.is-saving .octane-catalog-admin-savebar-status { color: #296786; }
.octane-catalog-admin-savebar.is-error .octane-catalog-admin-savebar-status,
.octane-catalog-admin-savebar.is-conflict .octane-catalog-admin-savebar-status { color: #a83232; }
.octane-catalog-admin-savebar.is-saved .octane-catalog-admin-savebar-status { color: #397046; }
.octane-catalog-admin-savebar-actions {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
justify-content: flex-end;
}
.octane-catalog-admin-field-error {
color: #a83232;
font-size: 10px;
line-height: 1.2;
}
@media (max-width: 520px) {
.octane-catalog-admin-savebar {
align-items: stretch;
flex-direction: column;
}
.octane-catalog-admin-savebar-actions {
justify-content: stretch;
}
.octane-catalog-admin-savebar-actions .octane-catalog-admin-button {
flex: 1 1 auto;
}
}
.octane-catalog-admin-form .octane-catalog-admin-input,
.octane-catalog-admin-form-sheet .octane-catalog-admin-input {
min-height: 28px;
padding: 5px 9px;
border-width: 1px;
font-size: 11px;
}
.octane-catalog-admin-page-preview-icon,
.octane-catalog-admin-offer-preview-icon {
display: grid;
flex: 0 0 auto;
place-items: center;
width: 48px;
height: 48px;
border: 1px solid #b8c8cf;
border-radius: 8px;
background: #ffffff;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
overflow: hidden;
}
.octane-catalog-admin-page-preview-icon img,
.octane-catalog-admin-offer-preview-icon img {
width: 36px;
height: 36px;
image-rendering: var(--octane-pixel-art, pixelated);
object-fit: contain;
}
.octane-catalog-admin-page-preview-info,
.octane-catalog-admin-offer-preview-info {
display: flex;
flex-direction: column;
gap: 3px;
min-width: 0;
}
.octane-catalog-admin-page-preview-name,
.octane-catalog-admin-offer-preview-name {
overflow: hidden;
color: var(--catalog-admin-blue-dark);
font-size: 14px;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-admin-page-preview-sub,
.octane-catalog-admin-offer-preview-sub {
color: var(--catalog-admin-muted);
font-size: 10px;
line-height: 1.35;
}
.octane-catalog-admin-translate-bar {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
padding: 8px;
border: 1px solid var(--catalog-admin-border);
border-radius: 4px;
background: var(--catalog-admin-panel-alt);
}
.octane-catalog-admin-translate-error {
color: var(--catalog-admin-danger);
font-size: 9px;
}
.octane-catalog-admin-form-status {
color: var(--catalog-admin-muted);
font-size: 9px;
}
/* Legacy preview card rules kept for specificity elsewhere */
.octane-catalog-admin-offer-preview-card {
border: none;
border-radius: 0;
box-shadow: none;
}
.octane-catalog-admin-offer-preview-icon-empty {
color: #8aa3ad;
font-size: 20px;
}
.octane-catalog-admin-offer-preview-price {
display: flex;
gap: 6px;
margin-top: 1px;
font-size: 11px;
font-weight: 700;
}
.octane-catalog-admin-offer-preview-price .is-credits {
color: #b07a17;
}
.octane-catalog-admin-offer-preview-price .is-points {
color: #2c7fb0;
}
.octane-catalog-admin-offer-preview-price .is-free {
color: #6a8a3a;
}
.octane-catalog-admin-modal button {
text-shadow: none !important;
}
.octane-catalog-admin-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 4px;
min-height: 24px;
padding: 4px 12px;
border: 3px solid transparent;
border-image-source: var(--habbo-skin-button);
border-image-slice: 3 fill;
border-image-width: 3px;
border-image-repeat: stretch;
border-radius: 0;
background: transparent;
color: #111111;
font-size: 10px;
font-weight: 700;
line-height: 1;
cursor: pointer;
box-shadow: none;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-admin-button:disabled {
cursor: default;
opacity: 0.55;
}
.octane-catalog-admin-button:not(:disabled):hover {
filter: brightness(1.06);
}
.octane-catalog-admin-button.is-compact {
min-height: 20px;
padding: 3px 7px;
font-size: 9px;
}
.octane-catalog-admin-button.is-primary {
border-width: 5px;
border-style: solid;
border-color: transparent;
border-image-source: var(--habbo-skin-shiny-thick-green);
border-image-slice: 5 fill;
border-image-width: 5px;
border-image-repeat: stretch;
background: transparent;
color: #ffffff;
}
.octane-catalog-admin-button.is-danger {
border-width: 5px;
border-style: solid;
border-color: transparent;
border-image-source: var(--habbo-skin-shiny-red);
border-image-slice: 5 fill;
border-image-width: 5px;
border-image-repeat: stretch;
background: transparent;
color: #ffffff;
}
.octane-catalog-admin-button.is-muted,
.octane-catalog-admin-button.is-ghost {
border-image-source: var(--habbo-skin-button);
background: transparent;
color: #111111;
}
.octane-catalog-admin-modal button.bg-primary,
.octane-catalog-admin-modal button.text-primary,
.octane-catalog-admin-modal button.text-success {
border-width: 5px !important;
border-style: solid !important;
border-color: transparent !important;
border-image-source: var(--habbo-skin-shiny-thick-green) !important;
border-image-slice: 5 fill !important;
border-image-width: 5px !important;
border-image-repeat: stretch !important;
background: transparent !important;
color: #ffffff !important;
box-shadow: none !important;
}
.octane-catalog-admin-modal button.bg-primary:hover,
.octane-catalog-admin-modal button.text-primary:hover,
.octane-catalog-admin-modal button.text-success:hover {
border-image-source: var(--habbo-skin-shiny-thick-green-hover) !important;
}
.octane-catalog-admin-modal button.text-danger,
.octane-catalog-admin-modal button[class*="danger"] {
border-width: 5px !important;
border-style: solid !important;
border-color: transparent !important;
border-image-source: var(--habbo-skin-shiny-red) !important;
border-image-slice: 5 fill !important;
border-image-width: 5px !important;
border-image-repeat: stretch !important;
background: transparent !important;
color: #ffffff !important;
box-shadow: none !important;
}
.octane-catalog-admin-modal button.text-muted {
border: 3px solid transparent !important;
border-image-source: var(--habbo-skin-button) !important;
border-image-slice: 3 fill !important;
border-image-width: 3px !important;
background: transparent !important;
color: #111111 !important;
box-shadow: none !important;
}
.octane-catalog-admin-body :where(.uppercase.font-bold) {
color: var(--catalog-admin-blue-dark) !important;
letter-spacing: 0.04em;
}
.octane-catalog-admin-body :where(.font-mono) {
color: #383833 !important;
}
.octane-catalog-admin-modal .font-mono {
color: #383833 !important;
}
.octane-catalog-window :where(.bg-white, .bg-gray-50, .bg-card-grid-item),
.octane-catalog-window :where(.bg-gray-100, .bg-light) {
background: var(--catalog-standard-panel) !important;
color: var(--catalog-standard-text) !important;
box-shadow: none !important;
}
.octane-catalog-window :where(.bg-white\/50, .bg-white\/80) {
background: rgba(247, 247, 242, 0.82) !important;
color: var(--catalog-standard-text) !important;
}
.octane-catalog-window :where(.border, .border-card-grid-item-border, .border-muted, .border-white, .border-white\/10, .border-white\/20, .border-white\/30) {
border-color: var(--catalog-standard-border) !important;
box-shadow: none !important;
}
.octane-catalog-window :where(.text-muted, .text-dark) {
color: var(--catalog-standard-muted) !important;
}
.octane-catalog-window :where(.text-primary) {
color: var(--catalog-standard-blue-dark) !important;
}
.octane-catalog-window :where(input, select, .octane-select-trigger, textarea) {
min-height: 22px;
border: 1px solid var(--catalog-standard-border-dark) !important;
border-radius: 3px !important;
background: #fffdf4 !important;
color: var(--catalog-standard-text) !important;
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.16), inset 0 0 0 1px rgba(255, 255, 255, 0.55) !important;
font-size: 11px !important;
}
.octane-catalog-window :where(input[type="checkbox"], input[type="radio"]) {
min-height: 0;
accent-color: var(--catalog-standard-blue);
box-shadow: none !important;
}
/* standard: bordo esterno #376275 (2px), body #0e3f52 -> border 2px + bg body. */
.octane-catalog-standard-header {
position: relative;
flex: 0 0 90px;
height: 90px;
margin: 0 1px;
border: 2px solid #376275;
background: #0e3f52;
overflow: hidden;
}
/* The Builders Club warehouse has no tab row, so the staff admin toggle sits in the header's corner. */
.octane-catalog-builder-admin-toggle {
position: absolute;
top: 4px;
right: 4px;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 3px;
background: rgba(0, 0, 0, 0.35);
color: #ffffff;
cursor: pointer;
}
.octane-catalog-builder-admin-toggle[data-pressed] {
background: rgba(255, 255, 255, 0.25);
}
/* standard: header image blend 0.1, greyscale, zoom 2, pivot center.
L'immagine reale per-pagina arriva inline da currentPage.getImage(0);
se assente resta il body #0e3f52 (nessun finto gradiente). */
.octane-catalog-standard-header-bg {
position: absolute;
inset: -2px;
opacity: 0.1;
background-color: transparent;
background-position: center;
background-repeat: no-repeat;
/* AIR zooms the header picture 2x into its 568 px header; the window can be wider here, so the picture covers
the whole header instead of leaving dark bands beside it. */
background-size: cover;
filter: grayscale(1);
}
.octane-catalog-standard-header-icon {
position: absolute;
left: 22px;
top: 28px;
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 35px;
overflow: hidden;
}
.octane-catalog-standard-header-icon img {
width: 20px !important;
height: 20px !important;
max-width: none !important;
max-height: none !important;
transform: scale(2);
transform-origin: center;
}
.octane-catalog-standard-header-copy {
position: absolute;
left: 78px;
top: 9px;
width: 475px;
color: #fff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.7);
}
.octane-catalog-standard-header-title {
height: 24px;
min-height: 24px;
overflow: hidden;
font-family: UbuntuRegular, Ubuntu, sans-serif;
font-size: 18px;
font-weight: 700;
line-height: 24px;
white-space: nowrap;
}
.octane-catalog-standard-header-description {
margin-top: -1px;
font-family: UbuntuRegular, Ubuntu, sans-serif;
font-size: 12px;
line-height: 17px;
font-weight: 400;
text-shadow: none;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
line-clamp: 3;
max-height: 51px;
overflow: hidden;
}
/* AIR's Builders Club warehouse header runs edge to edge under the title bar: no side frame, no side margin. */
.octane-catalog-standard-header.is-builder {
margin: 0;
border-left-width: 0;
border-right-width: 0;
}
.octane-catalog-standard-header.is-builder .octane-catalog-standard-header-title {
height: 30px;
min-height: 30px;
font-size: 24px;
line-height: 30px;
}
.octane-catalog-standard-header.is-builder .octane-catalog-standard-header-description {
position: absolute;
left: 0;
width: 475px;
height: 19px;
margin-top: 0;
display: block;
-webkit-line-clamp: initial;
line-clamp: initial;
max-height: 19px;
line-height: 19px;
}
.octane-catalog-standard-header.is-builder .octane-catalog-standard-header-description.is-builder-membership {
top: 30px;
}
.octane-catalog-standard-header.is-builder .octane-catalog-standard-header-description.is-builder-limit {
top: 45px;
}
.octane-catalog-standard-header-description b,
.octane-catalog-standard-header-description strong {
font-weight: 400;
}
/* builder.header.status.*: AIR draws the duration, count and limit as <font color="#ff8d00"><b>. */
.octane-catalog-standard-header .octane-catalog-builder-header-value {
color: #ff8d00;
font-weight: 700;
}
.octane-catalog-window .octane-catalog-tabs-shell {
flex: 0 0 35px;
height: 35px;
min-height: 35px;
max-height: 35px;
gap: 0;
padding: 3px 6px 0 !important;
align-items: flex-end;
overflow: hidden;
flex-wrap: nowrap;
/* Same grey as the stage below, so the strip and the page read as one surface. */
background: var(--catalog-standard-bg);
}
/*
* A tab never shrinks on its own: the strip is measured to decide how wide the window should
* be, so a tab whose width depended on that window would feed its own measurement. Past the
* window's maximum width the strip used to run under the shell's `overflow: hidden` and the
* last categories became unreachable - no scrolling, no wrapping, just gone. The hook adds
* `is-condensed` in exactly that case, and only then are they allowed to shrink, the label
* ellipsising down to its icon the way the original client's tab context does.
*/
.octane-catalog-window .octane-catalog-tabs-shell .octane-card-tab-item {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 4px;
height: 32px !important;
min-height: 32px !important;
max-height: 32px !important;
flex: 0 0 auto;
max-width: none;
/* AIR tab_button: label only, at least 80 px; 9px of the side padding is the tab's cap bitmap. */
min-width: 80px;
padding: 4px 12px 8px !important;
/* Tabs sit edge to edge: a gap would show the white shelf as a line. */
margin: 0;
flex-shrink: 0;
white-space: nowrap;
overflow: hidden;
}
/* Only once the window has run out of room to widen. Until then the tabs keep their natural
width, which is what the strip is measured at. */
.octane-catalog-window .octane-catalog-tabs-shell.is-condensed .octane-card-tab-item {
min-width: 34px;
flex: 0 1 auto;
flex-shrink: 1;
}
.octane-catalog-window .octane-catalog-tabs-shell .octane-card-tab-item:last-of-type {
margin-right: 0;
}
.octane-catalog-window .octane-catalog-tabs-shell .octane-card-tab-item.octane-catalog-admin-tab {
min-width: 0;
padding: 4px 13px 8px !important;
}
.octane-catalog-window .octane-catalog-tabs-shell .octane-card-tab-item > div {
align-items: center !important;
justify-content: center !important;
gap: 4px;
min-width: 0;
width: auto;
height: 18px;
line-height: 17px;
}
.octane-catalog-tab-icon {
width: 18px;
height: 18px;
object-fit: contain;
image-rendering: var(--octane-pixel-art, pixelated);
flex-shrink: 0;
}
.octane-catalog-tab-label {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.octane-catalog-tab-count {
flex: 0 0 auto;
font-size: 10px;
opacity: 0.85;
}
.octane-catalog-content-shell {
position: relative;
flex: 1 1 auto;
min-height: 0;
padding: 6px 8px 8px !important;
background: var(--catalog-standard-bg) !important;
overflow: hidden;
}
.octane-catalog-stage {
display: grid;
grid-template-columns: 184px 1fr;
gap: 8px;
width: 100%;
height: 100%;
min-height: 0;
}
.octane-catalog-stage.is-navigation-hidden {
grid-template-columns: 1fr;
}
.octane-catalog-sidebar {
display: flex;
flex-direction: column;
gap: 4px;
min-height: 0;
overflow: hidden;
}
/* standard search: border x8 y131 w184 h24 style 105 (inset chiaro). */
.octane-catalog-search-shell {
position: relative;
display: flex;
align-items: center;
height: 24px;
padding: 0;
margin: 0;
border: 1px solid #b7b7ae;
border-radius: 3px;
background: #f7f7f2;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.07);
}
.octane-catalog-search-shell input {
flex: 1 1 auto;
width: 100% !important;
height: 22px !important;
min-height: 22px !important;
line-height: 22px !important;
padding: 0 16px 0 18px !important;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
color: var(--catalog-standard-muted) !important;
font-size: 11px !important;
box-shadow: none !important;
vertical-align: middle !important;
}
.octane-catalog-search-shell > div {
width: 100% !important;
height: 100% !important;
}
.octane-catalog-search-shell svg {
color: #888 !important;
font-size: 11px !important;
}
.octane-catalog-search-shell svg:first-child {
left: 4px !important;
}
.octane-catalog-search-shell button {
right: 4px !important;
}
/* standard navigationContainer: x8 y159 w184 h433 style 6 (bordo beveled inset). */
.octane-catalog-navigation-shell {
flex: 1 1 auto;
min-height: 0;
padding: 5px 3px;
border: 1px solid var(--catalog-standard-box-line);
border-radius: 3px;
background: var(--catalog-standard-box);
box-shadow: inset 0 0 0 2px var(--catalog-standard-box-edge);
overflow: auto;
}
.octane-catalog-navigation-list {
display: flex;
flex-direction: column;
}
.octane-catalog-navigation-node {
min-height: 21px;
}
/* normal_topitem_template / normal_subitem_template: 20 px rows. AIR's #b4b4ae etching is a 1 px highlight its
bitmap text renderer blends away; as a browser text-shadow it doubles the glyphs and blurs them, so it is left
out. A row keeps room on the right only when it has a drop_button. */
.octane-catalog-navigation-item {
position: relative;
display: flex;
align-items: center;
gap: 6px;
height: 20px;
min-height: 20px;
padding: 0 4px 0 0;
border: 0 !important;
border-radius: 0 !important;
background: transparent;
color: var(--catalog-standard-muted);
font-size: 11px;
font-weight: 700;
line-height: 17px;
cursor: pointer;
text-shadow: none;
}
.octane-catalog-navigation-item.is-branch {
padding-right: 30px;
}
.octane-catalog-navigation-node.is-child .octane-catalog-navigation-item {
padding-left: 15px;
color: #52819a;
font-style: italic;
}
.octane-catalog-navigation-item::before {
position: absolute;
inset: 0 1px 1px 1px;
z-index: 0;
display: none;
content: "";
border: 1px solid var(--catalog-standard-select-outer);
background: linear-gradient(180deg, var(--catalog-standard-select-outer) 0 2px, var(--catalog-standard-select) 2px calc(100% - 2px), var(--catalog-standard-select-outer) calc(100% - 2px));
}
.octane-catalog-navigation-list.is-builders-club .octane-catalog-navigation-item::before {
--catalog-standard-select: var(--catalog-standard-bc);
--catalog-standard-select-outer: var(--catalog-standard-bc-outer);
}
.octane-catalog-navigation-list.is-builders-club .octane-catalog-navigation-node.is-child .octane-catalog-navigation-item {
color: #b77734;
}
.octane-catalog-navigation-item:hover::before,
.octane-catalog-navigation-item.is-active::before {
display: block;
}
.octane-catalog-navigation-icon,
.octane-catalog-navigation-label,
.octane-catalog-navigation-caret,
.octane-catalog-navigation-favorite,
.octane-catalog-navigation-admin,
.octane-catalog-navigation-drag {
position: relative;
z-index: 1;
}
.octane-catalog-navigation-icon {
display: flex;
align-items: center;
justify-content: center;
width: 20px;
min-width: 20px;
height: 20px;
}
.octane-catalog-navigation-icon img,
.octane-catalog-navigation-icon canvas {
width: auto;
height: auto;
max-width: 20px;
max-height: 20px;
}
.octane-catalog-navigation-label {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* normal_topitem_template drop_button: AIR's grey arrow, pointing right while closed and down while open. */
.octane-catalog-navigation-caret {
position: absolute;
right: 18px;
top: 5px;
width: 9px;
height: 11px;
background: no-repeat center url("../../assets/images/catalog/navigation/arrow_right.png");
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-navigation-caret.is-open {
background-image: url("../../assets/images/catalog/navigation/arrow_down.png");
}
/* searchContainer (184 x 24): white box, the helper/input at (4, 3), common_small_pen at (160, 2). */
.octane-catalog-search .octane-catalog-search-input {
height: 24px;
padding: 3px 26px 3px 4px;
border: 1px solid #9a9a9a;
border-radius: 4px;
background: #ffffff;
outline: none;
}
.octane-catalog-search .octane-catalog-search-pen,
.octane-catalog-search .octane-catalog-search-clear {
position: absolute;
top: 3px;
right: 4px;
width: 18px;
height: 18px;
}
.octane-catalog-search .octane-catalog-search-pen {
background: no-repeat center url("../../assets/images/catalog/navigation/small_pen.png");
image-rendering: var(--octane-pixel-art, pixelated);
pointer-events: none;
}
.octane-catalog-search .octane-catalog-search-clear {
display: flex;
align-items: center;
justify-content: center;
padding: 0;
border: 0;
background: transparent;
color: #666666;
font-size: 11px;
cursor: pointer;
}
.octane-catalog-layout-shell {
display: flex;
flex-direction: column;
min-width: 0;
min-height: 0;
height: 100%;
background: transparent;
border: 0;
overflow: hidden;
}
.octane-catalog-layout-container {
flex: 1 1 auto;
min-height: 0;
padding: 0;
background: transparent;
overflow: hidden;
}
.octane-catalog-window .octane-catalog-forum-text {
font-size: 12px;
line-height: 15px;
}
.octane-catalog-window .octane-catalog-forum-text p,
.octane-catalog-window .octane-catalog-forum-text div {
margin: 0 0 8px;
}
.octane-catalog-window .octane-catalog-forum-text > :last-child {
margin-bottom: 0;
}
.octane-catalog-window .octane-catalog-guild-join-btn {
min-height: 20px !important;
width: auto !important;
padding: 1px 10px !important;
border: 1px solid #1c1c1c !important;
border-radius: 5px !important;
background: linear-gradient(180deg, #ffffff 0%, #eaeaea 55%, #d8d8d8 100%) !important;
box-shadow: inset 0 1px 0 #ffffff !important;
color: #000 !important;
font-size: 11px !important;
font-weight: 400 !important;
text-shadow: none !important;
}
.octane-catalog-window .octane-catalog-guild-join-btn:hover {
background: linear-gradient(180deg, #ffffff 0%, #f2f2f2 55%, #e2e2e2 100%) !important;
}
.octane-catalog-window .octane-catalog-guild-join-btn:active {
background: linear-gradient(180deg, #d8d8d8 0%, #eaeaea 100%) !important;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2) !important;
}
.octane-catalog-default-layout {
position: relative;
display: block !important;
width: 100%;
height: 460px;
min-height: 460px;
max-height: 460px;
}
.octane-catalog-grid-shell,
.octane-catalog-price-row,
.octane-catalog-purchase-row {
width: 100% !important;
}
.octane-catalog-grid-shell {
border: 1px solid var(--catalog-standard-box-line);
border-radius: 5px;
background: var(--catalog-standard-box);
box-shadow: inset 0 0 0 2px var(--catalog-standard-box-edge);
}
/*
* The original's `productViewWidget` is a fixed 360x240 because its window is a fixed 570. Ours
* sizes itself from its tab strip, up to 1040, and pinning this box to 360 left the rest of that
* width as dead grey beside the preview. It follows the page instead; 240 stays, since the room
* canvas behind it is drawn taller than the box and cropped, exactly as the original does.
*
* Everything placed inside it is anchored to an edge rather than to an offset measured from the
* old 360 - see `.octane-catalog-preview-limited` and `.octane-catalog-preview-controls`.
*/
.octane-catalog-product-view {
position: relative;
top: 0;
left: 0;
width: 100%;
height: 240px;
min-height: 0;
overflow: hidden;
border: 0;
border-radius: 0;
background: transparent;
}
.octane-catalog-product-view::before {
display: none;
}
.octane-catalog-offer-panel {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
}
.octane-catalog-offer-panel:has(> .octane-catalog-offer-info) {
justify-content: center;
}
.octane-catalog-offer-preview {
position: relative;
height: 100%;
padding: 0;
overflow: hidden;
background: #000;
}
/* Follows the product view now that the product view follows the page. */
.octane-catalog-offer-panel > .octane-catalog-offer-preview {
width: 100%;
min-width: 0;
}
.octane-catalog-preview-title {
position: absolute;
top: 12px;
left: 12px;
z-index: 5;
color: #ffffff !important;
font-size: 12px !important;
font-weight: 700 !important;
line-height: 15px !important;
text-shadow: 0 1px 0 #000;
}
.octane-catalog-offer-preview > .shadow-room-previewer {
position: absolute !important;
top: 0;
left: 0;
width: 100% !important;
height: 348px !important;
min-height: 348px !important;
max-height: 348px !important;
max-width: 100%;
border-radius: 0 !important;
box-shadow: none !important;
}
.octane-catalog-offer-preview > .shadow-room-previewer > .shadow-room-previewer-canvas {
display: block;
width: 100% !important;
height: 100% !important;
max-width: 100%;
max-height: 100%;
border-radius: 0 !important;
image-rendering: var(--octane-pixel-art, pixelated);
transform: none;
transform-origin: center center;
transition: transform 180ms ease-out;
}
.octane-catalog-offer-preview:has(.octane-catalog-preview-zoom-btn[aria-pressed="true"])
> .shadow-room-previewer
> .shadow-room-previewer-canvas {
transform: translateY(-41px) scale(2);
}
/* Badge offers: the black 3D-preview stage is meant for furni room previews.
Badges get a light panel, a dark title and a larger, centered badge. */
.octane-catalog-offer-preview.is-badge {
background: var(--catalog-standard-panel, #e9e9e1);
}
.octane-catalog-offer-preview.is-badge .octane-catalog-preview-title {
color: #33332e !important;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
}
.octane-catalog-offer-preview.is-badge .group-badge,
.octane-catalog-offer-preview.is-badge > *:not(.octane-catalog-preview-title) {
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-color-grid-shell {
max-height: 154px;
}
.octane-catalog-badge-display-layout {
position: relative;
width: 100%;
max-width: 360px;
height: 460px;
min-height: 460px;
overflow: hidden;
color: #000000;
background: var(--catalog-standard-bg, #e4e3db);
}
.octane-catalog-badge-product-picker {
position: absolute;
top: 245px;
left: 0;
width: 95px;
height: 175px;
padding: 3px;
border: 1px solid #777;
border-radius: 4px;
background: #c9c9c3;
overflow: hidden;
}
.octane-catalog-badge-product-picker .octane-catalog-item-grid-scroll-area,
.octane-catalog-badge-product-picker .octane-classic-scroll-area-viewport {
width: 87px;
height: 167px;
}
.octane-catalog-badge-product-picker .octane-classic-scroll-area-viewport {
padding-right: 17px;
}
.octane-catalog-badge-offer-list {
display: grid !important;
grid-template-columns: 70px !important;
grid-auto-rows: 70px !important;
align-content: start;
justify-content: start;
gap: 3px !important;
overflow: visible !important;
}
@layer utilities {
.octane-catalog-window .octane-catalog-badge-offer-list .layout-grid-item {
width: 70px !important;
min-width: 70px !important;
height: 70px !important;
min-height: 70px !important;
border-radius: 4px !important;
}
}
.octane-catalog-badge-picker {
position: absolute;
top: 245px;
left: 105px;
width: 255px;
height: 175px;
overflow: hidden;
}
.octane-catalog-badge-selector {
position: absolute;
top: 0;
left: 0;
width: 255px;
height: 175px;
overflow: hidden;
}
.octane-catalog-badge-scroll-area {
position: absolute;
top: 30px;
left: 0;
width: 255px;
height: 145px;
}
.octane-catalog-badge-scroll-area .octane-classic-scroll-area-viewport {
width: 255px;
height: 145px;
padding-right: 17px;
}
.octane-catalog-badge-grid {
display: grid !important;
grid-template-columns: repeat(auto-fill, 44px) !important;
grid-auto-rows: 44px !important;
align-content: start;
justify-content: start;
gap: 1px !important;
padding: 0;
overflow: visible !important;
}
@layer utilities {
.octane-catalog-window .octane-catalog-badge-tile {
width: 44px !important;
min-width: 44px !important;
height: 44px !important;
min-height: 44px !important;
border: 1px solid #aeb4aa !important;
border-radius: 0 !important;
background: #d9ddd5 !important;
box-shadow: inset 1px 1px 0 rgba(255, 255, 255, 0.75), inset -1px -1px 0 rgba(0, 0, 0, 0.12) !important;
overflow: hidden !important;
}
.octane-catalog-window .octane-catalog-badge-tile:hover {
background: #e5e8e1 !important;
}
.octane-catalog-window .octane-catalog-badge-tile.is-grid-active {
border-color: #222 !important;
background: #fff !important;
box-shadow: inset 0 0 0 2px #fff, inset 0 0 0 3px #222 !important;
}
}
.octane-catalog-badge-tile > div {
max-width: 40px;
max-height: 40px;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-badge-empty {
display: flex;
align-items: center;
justify-content: center;
width: 153px;
min-height: 80px;
padding: 8px;
color: #777;
font-size: 10px;
line-height: 13px;
text-align: center;
}
.octane-catalog-badge-preview {
position: absolute;
top: 0;
left: 0;
width: 360px;
height: 240px;
overflow: hidden;
background: #000;
}
.octane-catalog-badge-preview.is-empty {
top: 0;
left: 0;
width: 360px;
height: 240px;
}
.octane-catalog-badge-product-copy {
position: absolute;
top: 12px;
left: 10px;
z-index: 3;
display: flex;
flex-direction: column;
width: 280px;
max-height: 64px;
overflow: hidden;
color: #fff;
pointer-events: none;
}
.octane-catalog-badge-product-name {
width: 165px;
min-height: 17px;
overflow: hidden;
font-size: 11px;
font-weight: 700;
line-height: 17px;
text-overflow: ellipsis;
white-space: nowrap;
}
.octane-catalog-badge-product-description {
width: 165px;
max-height: 30px;
overflow: hidden;
font-size: 10px;
font-style: italic;
line-height: 15px;
text-overflow: ellipsis;
}
.octane-catalog-badge-product-render {
position: absolute;
top: 0;
left: 0;
width: 360px;
height: 240px;
overflow: hidden;
}
.octane-catalog-badge-product-render .shadow-room-previewer {
width: 360px !important;
max-width: 360px !important;
height: 240px !important;
min-height: 240px !important;
max-height: 240px !important;
border-radius: 0 !important;
}
.octane-catalog-badge-intro {
position: absolute;
top: 0;
left: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 360px;
min-height: 240px;
gap: 4px;
overflow: hidden;
font-size: 10px;
line-height: 13px;
text-align: center;
color: #fff;
}
.octane-catalog-badge-intro img {
width: auto;
height: auto;
max-width: 96px;
max-height: 54px;
object-fit: contain;
}
.octane-catalog-badge-limited {
position: absolute;
top: 20px;
left: 180px;
width: 170px;
height: 30px;
overflow: hidden;
}
.octane-catalog-badge-total-price {
position: absolute;
right: 6px;
bottom: 7px;
z-index: 4;
min-width: 90px;
}
.octane-catalog-badge-purchase {
position: absolute;
top: 430px;
left: 0;
display: flex;
align-items: center;
justify-content: space-between;
width: 360px;
height: 30px;
gap: 10px;
padding: 3px 5px;
overflow: hidden;
}
.octane-catalog-badge-purchase .octane-catalog-standard-gift-button,
.octane-catalog-badge-purchase .octane-catalog-standard-buy-button {
width: 170px !important;
min-width: 170px !important;
max-width: 170px !important;
}
.octane-catalog-badge-product-copy .octane-catalog-product-details-name,
.octane-catalog-badge-product-copy .octane-catalog-product-details-description {
color: #fff !important;
opacity: 1 !important;
}
.octane-catalog-badge-preview .octane-catalog-preview-controls {
top: 8px;
right: 6px;
}
.octane-catalog-badge-search {
position: absolute;
top: 0;
left: 0;
width: 255px;
height: 26px;
border: 1px solid #aaa;
background: #fff;
}
.octane-catalog-badge-search input {
position: absolute;
top: 3px;
left: 6px;
width: 171px;
height: 19px;
padding: 1px 0 0;
border: 0;
outline: 0;
background: transparent;
color: #333;
font-size: 10px;
line-height: 20px;
}
.octane-catalog-badge-search input:focus {
outline: 0;
}
.octane-catalog-badge-search-clear {
position: absolute;
top: 3px;
left: 232px;
width: 19px;
height: 19px;
padding: 0;
border: 0;
background: transparent;
color: #555;
font-size: 16px;
line-height: 17px;
cursor: pointer;
}
.octane-catalog-badge-preview .octane-catalog-price-frame {
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
width: max-content;
min-width: 46px;
height: 29px;
padding: 0;
border: 8px solid transparent;
border-radius: 0;
border-image-source: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABrSURBVDhP7dSxEYBACETR7dJmbMEy7MROLATHQAb2cOTQMbrgE8ELgYjABuAc6Zp7hvZt7ophxXixtwsNwXWZUoVgFbtDHcjL2QY4wEL/gRXU3ipYRQMsBispyE+VF5+yt+59fZH72G9gaxwJZL9A0RMtPQAAAABJRU5ErkJggg==");
border-image-slice: 8 fill;
border-image-width: 8px;
border-image-repeat: stretch;
background: transparent;
box-shadow: none;
}
.octane-catalog-badge-preview .octane-catalog-price-frame .octane-catalog-standard-price-display {
height: 13px;
min-height: 13px;
gap: 1px;
}
.octane-catalog-badge-preview .octane-catalog-price-frame .octane-catalog-standard-price-pill {
min-width: 0;
height: 13px;
gap: 1px;
padding: 0;
}
.octane-catalog-badge-preview .octane-catalog-price-frame .octane-catalog-standard-price-text {
color: #111 !important;
font-family: Ubuntu, Arial, sans-serif;
font-size: 14px !important;
font-weight: 700 !important;
line-height: 13px !important;
text-shadow: none !important;
}
.octane-catalog-badge-preview .octane-catalog-price-frame .octane-currency-icon {
flex: 0 0 22px;
width: 22px !important;
height: 22px !important;
background-size: auto;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-badge-preview .octane-catalog-price-frame .is-credits .octane-currency-icon {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD/SURBVEhLtZSBDYMwDAQzTTtNR2GmrlBW6SBlhFSO9OFsnJRKraUngPH5ZSCl1lr+oXZ43i8HtWQpdhhqWhuTBNZtrlGDA1hQFa7LXGxATgvdIFSF2+pFt3bNBoQ7MKECqXC57mA7l9hAcAeObgnmqrwacGR03cEZNILlUhCtmevTYCq6jNdfgW2lToBvHSw3hBMc8wSz2WmwxDydfwRbIhZzLMpRbKAX68DRdSwcic8ZuEMF5g8i5ywcSUA1GoHdSASO89a5VgO/HgGqzw1gu+lczcAGTKApuMOzmVMAOuhhE3Jb3v4gizPRZYNmm1AMV3RCPiZgRQRE5SHwr/UG8Hq+iW3+jYQAAAAASUVORK5CYII=") !important;
}
.octane-catalog-sound-layout {
position: relative;
width: 100%;
max-width: none;
height: 460px;
min-height: 460px;
overflow: hidden;
color: #000000;
background: var(--catalog-standard-bg, #e4e3db);
}
.octane-catalog-sound-product {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 240px;
overflow: hidden;
background: var(--catalog-standard-bg, #e4e3db);
}
.octane-catalog-sound-title,
.octane-catalog-sound-description,
.octane-catalog-sound-length {
position: absolute;
left: 10px;
z-index: 3;
max-width: 340px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.octane-catalog-sound-title {
top: 16px;
height: 17px;
font-size: 12px;
line-height: 17px;
}
.octane-catalog-sound-description {
top: 34px;
height: 15px;
font-size: 10px;
line-height: 15px;
}
.octane-catalog-sound-length {
top: 53px;
height: 15px;
font-size: 10px;
line-height: 15px;
}
.octane-catalog-sound-product-render {
position: absolute;
top: 70px;
right: auto;
left: 0;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 108px;
overflow: hidden;
}
.octane-catalog-sound-product-render .furni-image {
flex: 0 0 auto;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-sound-price {
position: absolute;
right: 7px;
bottom: 10px;
z-index: 4;
}
.octane-catalog-sound-listen-panel {
position: absolute;
top: 195px;
left: 7px;
z-index: 4;
width: 175px;
height: 36px;
border: 1px solid rgba(204, 204, 204, 0.9);
background: rgba(204, 204, 204, 0.5);
font-size: 10px;
}
.octane-catalog-sound-listen-panel > span {
position: absolute;
top: 11px;
left: 9px;
height: 15px;
line-height: 15px;
white-space: nowrap;
}
.octane-catalog-sound-listen-button {
position: absolute !important;
top: 8px;
left: 102px;
width: 66px;
min-width: 66px;
height: 22px;
min-height: 22px;
padding: 0 4px !important;
border: 1px solid #111111 !important;
border-radius: 3px !important;
background: linear-gradient(180deg, #f7f7f7 0%, #dedede 100%) !important;
color: #111111 !important;
font-size: 10px !important;
font-weight: 700 !important;
line-height: 20px !important;
text-shadow: 0 1px 0 #ffffff !important;
box-shadow: inset 0 0 0 1px #ffffff, 0 1px 0 rgba(0, 0, 0, 0.16) !important;
}
.octane-catalog-sound-listen-button:hover:not(:disabled) {
background: linear-gradient(180deg, #ffffff 0%, #e9e9e9 100%) !important;
filter: none;
}
.octane-catalog-sound-listen-button:active:not(:disabled) {
background: linear-gradient(180deg, #cdcdcd 0%, #eeeeee 100%) !important;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.24) !important;
}
.octane-catalog-sound-select-product {
position: absolute;
top: 130px;
left: 6px;
font-size: 10px;
}
.octane-catalog-sound-grid {
position: absolute;
top: 245px;
left: 0;
width: 100%;
height: 180px;
min-height: 0;
padding: 3px;
overflow: hidden;
border: 1px solid #777;
border-radius: 6px;
background: #c9c9c3;
}
.octane-catalog-sound-grid .octane-classic-scroll-area-viewport {
padding-right: 17px;
}
.octane-catalog-sound-purchase {
position: absolute;
top: 430px;
left: 0;
display: flex;
align-items: center;
justify-content: flex-end;
width: 100%;
height: 30px;
gap: 6px;
}
.octane-catalog-sound-purchase > button {
flex: 1 1 0;
width: auto;
min-width: 0;
height: 24px;
}
.octane-catalog-marketplace-item-icon {
width: 40px;
height: 40px;
}
.octane-catalog-vip-hc-banner {
width: 34px;
height: 20px;
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.octane-catalog-offer-info {
display: none !important;
}
.octane-catalog-offer-info .octane-text,
.octane-catalog-offer-info span,
.octane-catalog-offer-info div {
color: inherit;
}
.octane-catalog-welcome {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
padding: 18px;
color: var(--catalog-standard-muted);
}
.octane-catalog-welcome img {
width: auto !important;
height: auto !important;
max-width: 96px;
max-height: 120px;
border: 0;
background: transparent;
}
.octane-catalog-welcome.is-image-only img {
max-width: 100%;
max-height: 100%;
}
.octane-catalog-grid-shell {
position: absolute;
left: 0;
top: 245px;
width: 360px;
height: 155px;
min-height: 0;
padding: 3px;
overflow: auto;
}
.octane-catalog-default-layout:has(.octane-catalog-default-admin) .octane-catalog-grid-shell {
top: 280px !important;
}
.octane-catalog-grid {
grid-template-columns: repeat(auto-fill, minmax(var(--octane-grid-column-min-width, 53px), 1fr)) !important;
grid-auto-rows: var(--octane-grid-column-min-height, 70px);
align-content: start;
justify-content: start;
column-gap: 3px !important;
row-gap: 3px !important;
overflow: visible !important;
}
.octane-catalog-grid-virtual .grid {
column-gap: 3px !important;
row-gap: 3px !important;
}
.octane-catalog-grid-density-standard,
.octane-catalog-grid-virtual.octane-catalog-grid-density-standard .grid {
grid-template-columns: repeat(var(--octane-air-column-count, 6), 53px) !important;
row-gap: 0 !important;
}
.octane-catalog-grid-density-standard.uses-base-grid-template,
.octane-catalog-grid-virtual.octane-catalog-grid-density-standard.uses-base-grid-template .grid {
grid-template-columns: repeat(var(--octane-air-column-count, 8), 36px) !important;
grid-auto-rows: 36px;
}
.octane-catalog-air-mixed-grid.uses-mixed-grid-template {
--octane-grid-column-min-width: 53px;
--octane-grid-column-min-height: 74px;
display: block !important;
position: relative;
grid-template-columns: none !important;
grid-auto-rows: auto;
}
.octane-catalog-item-grid-scroll-area:has(.octane-catalog-grid-density-standard) > .octane-classic-scroll-area-viewport,
.octane-catalog-grid-virtual.octane-catalog-grid-density-standard .octane-classic-scroll-area > .octane-classic-scroll-area-viewport {
padding-right: 17px;
overflow-x: auto;
}
@layer utilities {
.octane-catalog-window .layout-grid-item {
width: 100% !important;
height: var(--octane-grid-column-min-height, 70px) !important;
min-width: 0 !important;
min-height: var(--octane-grid-column-min-height, 70px) !important;
border: 0 !important;
border-radius: 0 !important;
background-image: none !important;
box-shadow: none !important;
overflow: visible !important;
}
.octane-catalog-window .layout-grid-item:not(.has-highlight) {
background-color: #e4e7df !important;
border: 2px solid transparent !important;
border-radius: 4px !important;
box-shadow: none !important;
}
.octane-catalog-window .octane-catalog-pet-breeds .layout-grid-item {
width: 84px !important;
min-width: 84px !important;
height: 74px !important;
min-height: 74px !important;
}
.octane-catalog-window .layout-grid-item:not(.has-highlight):not(.is-active):hover {
background-image: none !important;
border-color: transparent !important;
box-shadow: none !important;
}
.octane-catalog-window .layout-grid-item.is-active {
background-color: #ffffff !important;
background-image: none !important;
border: 2px solid #62c4e8 !important;
box-shadow: none !important;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item:not(.has-highlight),
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.is-active {
border: 0 !important;
border-radius: 0 !important;
background-color: transparent !important;
box-shadow: none !important;
}
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.is-active::before {
content: "";
position: absolute;
top: 0;
left: 0;
z-index: 0;
width: 100%;
height: 100%;
box-sizing: border-box;
border: 1px solid #a1a19b;
border-radius: 4px;
background: #ffffff;
box-shadow: inset 0 0 0 1px #63c5e9;
pointer-events: none;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.is-active.uses-single-price-template::before {
height: 62px;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.uses-base-grid-template {
width: 36px !important;
height: 36px !important;
min-width: 36px !important;
min-height: 36px !important;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.is-active.uses-base-grid-template::before {
width: 36px;
height: 36px;
}
.octane-catalog-window .octane-catalog-grid-density-standard.is-builder-grid .layout-grid-item.is-active::before {
border-color: var(--catalog-standard-bc-outer);
}
.octane-catalog-window .is-builder-grid .layout-grid-item.is-active {
border-color: var(--catalog-standard-bc-outer) !important;
}
.octane-catalog-window .layout-grid-item.has-highlight {
width: 26px !important;
height: 26px !important;
min-width: 26px !important;
min-height: 26px !important;
margin: 1px !important;
border: 1px solid #2a2a2a !important;
border-radius: 2px !important;
box-shadow:
inset 1px 1px 0 rgba(255, 255, 255, 0.35),
inset -1px -1px 0 rgba(0, 0, 0, 0.18) !important;
cursor: pointer !important;
}
.octane-catalog-window .layout-grid-item.has-highlight:hover {
border-color: #000 !important;
box-shadow:
inset 1px 1px 0 rgba(255, 255, 255, 0.5),
inset -1px -1px 0 rgba(0, 0, 0, 0.25),
0 0 0 1px rgba(0, 0, 0, 0.45) !important;
}
.octane-catalog-window .layout-grid-item.has-highlight.is-active {
border-color: #000 !important;
box-shadow:
inset 0 0 0 2px #ffffff,
inset 0 0 0 3px #000,
0 0 0 1px #63c5e9 !important;
}
.octane-catalog-grid-offer-icon {
width: auto !important;
height: auto !important;
max-width: 100% !important;
max-height: 100% !important;
image-rendering: var(--octane-pixel-art, pixelated);
object-fit: contain;
pointer-events: none;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item > .octane-catalog-grid-offer-icon {
position: absolute;
top: 2px;
left: 8px;
z-index: 1;
width: 36px !important;
height: 36px !important;
max-width: none !important;
max-height: none !important;
object-fit: none !important;
margin: 0;
}
/* The selected tile paints an opaque plate through ::before at z-index 0, so the
habbicon has to be lifted over it the way the furni icon already is. */
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item > .octane-catalog-grid-habbicon-icon {
position: relative;
z-index: 1;
}
/* AIR gridItem_with_price: multiContainer is painted after the 36px image at
icon-local x=18/y=21, so the quantity badge sits above its lower-right edge. */
.octane-catalog-window
.octane-catalog-grid-density-standard
.layout-grid-item:not(.uses-base-grid-template):not(.unique-item)
> .layout-item-count {
top: 23px !important;
right: auto !important;
left: 26px !important;
z-index: 6;
min-width: 17px;
height: 13px;
padding: 0 3px !important;
border: 1px solid #283f5d !important;
border-radius: 4px !important;
background: #ff3300 !important;
color: #cccc66 !important;
font-family: Volter, monospace;
font-size: 9px !important;
font-weight: 700 !important;
line-height: 11px !important;
}
.octane-catalog-window
.octane-catalog-grid-density-standard
.layout-grid-item:not(.uses-base-grid-template):not(.unique-item)
> .layout-item-count::before {
content: "x";
}
.octane-catalog-window
.octane-catalog-grid-density-standard
.layout-grid-item.uses-base-grid-template:not(.unique-item)
> .layout-item-count {
top: 21px !important;
right: auto !important;
left: 18px !important;
z-index: 6;
}
.octane-catalog-window
.octane-catalog-grid-density-standard
.layout-grid-item.uses-base-grid-template:not(.unique-item)
> .octane-catalog-grid-offer-icon {
top: 0;
left: 0;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item > .avatar-image {
top: 2px !important;
right: auto !important;
bottom: auto !important;
left: 8px !important;
width: 36px !important;
height: 36px !important;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.uses-base-grid-template > .avatar-image {
top: 0 !important;
left: 0 !important;
}
/* ---- Limited edition (LTD) tiles in the catalog grid ----
The unique-bg-override placeholder carries no image here (the furni is the
separate icon img), but its w-full/h-full sizing lives in the flex flow and
eats the whole 70px tile, pushing the icon and price down/out. Take it out
of the flow, layer the icon between the backdrop (z-2) and the glass (z-4),
and overlay the price as a chip so double-currency offers can't overflow.
Scoped to the catalog window: inventory/trade LTD tiles are untouched. */
.octane-catalog-window .unique-item .unique-bg-override {
position: absolute !important;
inset: 0 !important;
}
.octane-catalog-window .unique-item .octane-catalog-grid-offer-icon {
position: relative;
z-index: 3;
/* keep the furni inside the glass, clear of the bottom counter strip */
max-height: calc(100% - 22px) !important;
margin-bottom: 8px;
}
.octane-catalog-window .unique-item .octane-catalog-grid-price {
position: absolute;
left: 50%;
bottom: 12px;
transform: translateX(-50%);
z-index: 5;
width: auto;
max-width: calc(100% - 4px);
justify-content: center;
padding: 1px 4px;
border-radius: 3px;
background: rgba(255, 255, 255, 0.85);
}
.octane-catalog-window .unique-item .octane-catalog-grid-price.is-multi-price {
flex-direction: row;
flex-wrap: wrap;
align-items: center;
column-gap: 4px;
row-gap: 0;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.unique-item:not(.is-active)::before,
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.unique-item::after {
top: 2px;
left: 8px;
right: auto;
bottom: auto;
width: 36px;
height: 36px;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.unique-item > .unique-bg-override {
display: none;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.unique-item > .octane-catalog-grid-offer-icon {
z-index: 2;
}
.octane-catalog-window .octane-catalog-grid-density-standard .layout-grid-item.unique-item > .unique-item-counter {
top: 28px;
right: auto;
bottom: auto;
left: 8px;
z-index: 3;
width: 36px;
margin: 0;
}
.octane-catalog-window .octane-catalog-grid-density-standard .unique-item .octane-catalog-grid-price {
right: auto;
bottom: auto;
transform: none;
max-width: none;
justify-content: flex-end;
padding: 0;
border-radius: 0;
background: none;
}
.octane-catalog-window .octane-catalog-grid-density-standard .unique-item .octane-catalog-grid-price.is-single-price {
top: 36px;
left: -3px;
width: 54px;
height: 19px;
min-height: 19px;
}
.octane-catalog-window .octane-catalog-grid-density-standard .unique-item .octane-catalog-grid-price.is-multi-price {
top: 36px;
left: 8px;
display: block;
width: 43px;
height: 34px;
min-height: 34px;
}
.octane-catalog-grid-price {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
gap: 3px;
width: 100%;
padding-right: 4px;
color: #000;
font-size: 11px;
font-weight: 700;
line-height: 12px;
pointer-events: none;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price {
position: absolute;
z-index: 2;
gap: 1px;
width: auto;
padding: 0;
font-size: 12px;
line-height: 17px;
text-shadow: none;
}
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .layout-grid-item:has(.avatar-image) .octane-catalog-grid-price,
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .layout-grid-item:has(> .avatar-image) > .octane-catalog-grid-price,
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .avatar-image ~ .octane-catalog-grid-price {
/* Without absolute positioning the bottom/left offsets below are ignored
on the statically-positioned badge while translateX(-50%) still applies,
leaving the price floating mid-tile and shifted left (bots page). */
position: absolute !important;
top: auto !important;
left: 50% !important;
right: auto !important;
bottom: 1px !important;
transform: translateX(-50%) !important;
width: auto !important;
background: rgba(255, 255, 255, 0.85) !important;
border-radius: 3px !important;
padding: 2px 6px !important;
min-height: 0 !important;
height: auto !important;
display: inline-flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
z-index: 5 !important;
}
/* Bots (avatar offers): keep the bottom strip of the tile clear of the
avatar so the price badge sits UNDER the bot instead of on its feet.
The avatar img itself arrives with its transparent border already
cropped off (LayoutAvatarImageView fit variant), so object-contain
centers the actual figure in this box. */
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .layout-grid-item > .avatar-image {
bottom: 18px;
}
/* Give bot tiles more room than the default furni tile — a full-body figure
plus the price strip doesn't fit in 74px, and the multi-currency price pill
(e.g. "35 credits + 5 diamonds") is wider than a 6-column tile. 4 columns
makes the tiles wide enough for the pill; the height !important is needed
to beat the grid's inline --octane-grid-column-min-height (set by AutoGrid);
grid-auto-rows and the tile height both read this variable. */
.octane-catalog-grid:not(.octane-catalog-grid-density-standard):has(.layout-grid-item > .avatar-image) {
grid-template-columns: repeat(4, 1fr) !important;
--octane-grid-column-min-height: 100px !important;
}
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .layout-grid-item:has(.avatar-image) .octane-catalog-grid-price-entry,
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .avatar-image ~ .octane-catalog-grid-price .octane-catalog-grid-price-entry {
height: auto !important;
line-height: 1 !important;
align-items: center !important;
justify-content: center !important;
gap: 3px !important;
}
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .layout-grid-item:has(.avatar-image) .octane-catalog-grid-price-currency,
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .avatar-image ~ .octane-catalog-grid-price .octane-catalog-grid-price-currency {
width: 13px !important;
height: 13px !important;
object-fit: contain !important;
vertical-align: middle !important;
display: inline-block !important;
}
.octane-catalog-grid-price.is-single-price {
height: auto;
min-height: 0;
}
.octane-catalog-grid-price.is-multi-price {
height: auto;
min-height: 0;
flex-direction: column;
align-items: flex-end;
row-gap: 1px;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price.is-single-price {
top: 36px;
left: -3px;
width: 54px;
height: 19px;
min-height: 19px;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price.is-multi-price {
top: 36px;
left: 8px;
display: block;
width: 43px;
height: 34px;
min-height: 34px;
}
.octane-catalog-grid-price-entry {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 3px;
height: 13px;
white-space: nowrap;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price-entry {
justify-content: flex-end;
gap: 3px;
height: 19px;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price.is-single-price .octane-catalog-grid-price-entry {
min-width: 54px;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price.is-multi-price .octane-catalog-grid-price-entry {
position: absolute;
right: 0;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price.is-multi-price .octane-catalog-grid-price-entry:first-child {
top: 0;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price.is-multi-price .octane-catalog-grid-price-entry:nth-child(2) {
top: 15px;
}
.octane-catalog-grid-price-plus {
padding-right: 3px;
}
.octane-catalog-grid-price-currency {
width: auto !important;
height: auto !important;
max-width: none !important;
max-height: none !important;
min-width: 0 !important;
min-height: 0 !important;
object-fit: none !important;
}
.octane-catalog-grid-density-standard .octane-catalog-grid-price-currency {
/* Match the 13px coin size used by the legacy grid rows. */
width: 12px !important;
height: 12px !important;
min-width: 12px !important;
min-height: 12px !important;
object-fit: contain !important;
}
.octane-catalog-price-row {
position: absolute;
left: 0;
top: 405px;
width: 360px;
height: 25px;
padding: 0;
overflow: visible;
}
.octane-catalog-spinner-slot {
position: absolute;
left: 0;
top: 0;
width: 200px;
height: 25px;
}
.octane-catalog-total-price-slot {
position: absolute;
left: 180px;
top: 0;
width: 180px;
min-width: 180px;
height: 25px;
z-index: 2;
display: block;
padding: 0;
}
.octane-catalog-total-price-label {
position: absolute;
top: 3px;
left: 20px;
width: 158px;
height: 17px;
overflow: hidden;
color: #666;
font-size: 12px;
font-weight: 400;
line-height: 17px;
white-space: nowrap;
}
.octane-catalog-total-price-value {
position: absolute !important;
top: 1px;
left: 85px;
display: block !important;
width: 92px;
height: 24px;
min-height: 24px;
padding: 0;
}
.octane-catalog-purchase-row {
position: absolute;
left: 0;
top: 430px;
width: 360px;
height: 30px;
padding: 0;
overflow: hidden;
}
.octane-catalog-offer-actions {
display: flex !important;
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
gap: 10px !important;
width: 350px;
height: 24px;
margin-left: 5px;
margin-right: 5px;
margin-top: 3px;
padding: 0;
}
.octane-catalog-default-layout .octane-catalog-offer-actions > .octane-catalog-standard-buy-button {
margin-left: auto !important;
}
.octane-catalog-window .octane-catalog-standard-button {
appearance: none;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
box-sizing: border-box;
min-height: 24px;
height: 24px;
margin: 0;
padding: 0 8px !important;
/* AIR's grey `button` (style 3): habbo_skin_button_shiny, button_shiny_regular 12 px black. */
border: 5px solid transparent !important;
border-radius: 0 !important;
border-image-source: var(--habbo-skin-shiny) !important;
border-image-slice: 5 fill !important;
border-image-width: 5px !important;
border-image-repeat: stretch !important;
background: transparent !important;
color: #000000 !important;
font-family: HabboAirUbuntu, UbuntuRegular, Ubuntu, sans-serif !important;
font-size: 12px !important;
font-weight: 400 !important;
line-height: 17px !important;
text-shadow: none !important;
box-shadow: none !important;
cursor: pointer;
image-rendering: var(--octane-pixel-art, pixelated) !important;
}
.octane-catalog-window button.octane-catalog-preview-btn,
.octane-catalog-window button.octane-catalog-preview-btn *,
.octane-catalog-window button.octane-catalog-preview-btn svg {
border-radius: 0 !important;
}
.octane-catalog-window .octane-catalog-standard-button:hover {
border-image-source: var(--habbo-skin-shiny-hover) !important;
filter: none !important;
}
.octane-catalog-window .octane-catalog-standard-button:active {
border-image-source: var(--habbo-skin-shiny-pressed) !important;
filter: none !important;
box-shadow: none !important;
}
.octane-catalog-window .octane-catalog-standard-button.pointer-events-none,
.octane-catalog-window .octane-catalog-standard-button:disabled {
border-image-source: var(--habbo-skin-shiny-disabled) !important;
color: #777777 !important;
opacity: 1 !important;
cursor: not-allowed !important;
}
.octane-catalog-window .octane-catalog-standard-buy-button {
width: 170px !important;
min-width: 170px !important;
height: 24px !important;
padding: 0 8px !important;
font-weight: 700 !important;
border-width: 5px !important;
border-style: solid !important;
border-color: transparent !important;
border-image-source: var(--habbo-skin-shiny-thick-green) !important;
border-image-slice: 5 fill !important;
border-image-width: 5px !important;
border-image-repeat: stretch !important;
background: transparent !important;
color: #ffffff !important;
}
.octane-catalog-window .octane-catalog-standard-gift-button {
width: 170px !important;
min-width: 170px !important;
height: 24px !important;
padding: 0 8px !important;
font-weight: 700 !important;
border-width: 5px !important;
border-style: solid !important;
border-color: transparent !important;
border-image-source: var(--habbo-skin-shiny) !important;
border-image-slice: 5 fill !important;
border-image-width: 5px !important;
border-image-repeat: stretch !important;
background: transparent !important;
}
.octane-catalog-pet-card .octane-catalog-standard-buy-button {
width: auto !important;
min-width: 0 !important;
padding: 0 14px !important;
}
.octane-catalog-window .layout-grid,
.octane-catalog-window [class*="grid-cols-["] {
overflow-x: hidden !important;
}
.octane-catalog-standard-spinner {
position: relative;
width: 200px;
height: 25px;
color: #000;
}
.octane-catalog-standard-spinner-label {
position: absolute;
left: 0;
top: 3px;
width: 53px;
height: 17px;
overflow: hidden;
color: #666666;
font-family: UbuntuRegular, Ubuntu, sans-serif;
font-size: 12px;
font-weight: 400;
line-height: 17px;
white-space: nowrap;
text-overflow: ellipsis;
}
/* The active AIR Ubuntu layout hides its legacy stacked spinner buttons.
Polaris intentionally keeps quantity controls visible, using the existing
Habbo +/- sprite family without increasing AIR's 25px purchase row. */
.octane-catalog-window button.octane-catalog-standard-spinner-button {
appearance: none;
position: absolute;
top: 1px;
z-index: 3;
width: 22px !important;
min-width: 22px !important;
height: 22px !important;
min-height: 22px !important;
margin: 0 !important;
padding: 0 !important;
border: 0 !important;
border-radius: 0 !important;
border-image-source: none !important;
outline: 0;
background-color: transparent !important;
background-position: 0 0 !important;
background-repeat: no-repeat !important;
background-size: 22px 22px !important;
box-shadow: none !important;
image-rendering: var(--octane-pixel-art, pixelated) !important;
touch-action: none;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button:focus-visible {
outline: 1px dotted #000000;
outline-offset: -2px;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-less {
left: 54px;
background-image: var(--habbo-stepper-minus) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-less:hover {
background-image: var(--habbo-stepper-minus-hover) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-less:active {
background-image: var(--habbo-stepper-minus-pressed) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-less:disabled {
background-image: var(--habbo-stepper-minus-disabled) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-more {
left: 110px;
background-image: var(--habbo-stepper-plus) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-more:hover {
background-image: var(--habbo-stepper-plus-hover) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-more:active {
background-image: var(--habbo-stepper-plus-pressed) !important;
}
.octane-catalog-window button.octane-catalog-standard-spinner-button-more:disabled {
background-image: var(--habbo-stepper-plus-disabled) !important;
}
.octane-catalog-standard-spinner-input-frame {
position: absolute;
top: 0;
left: 78px;
width: 30px;
height: 25px;
z-index: 2;
}
.octane-catalog-standard-spinner-discount {
position: absolute;
top: 0;
left: 65px;
width: 135px;
height: 25px;
overflow: visible;
border: 0;
color: #000000;
}
/* AIR border style 3: the white border-slot alpha mask colorized to the
discount container's #92d27c window color. */
.octane-catalog-standard-spinner-discount::before {
content: "";
position: absolute;
inset: 0;
z-index: 0;
background: #92d27c;
-webkit-mask-box-image: url("../../assets/images/catalog/air/gift/border-slot-e9e9e9.png") 3 fill / 3px / 0 stretch;
image-rendering: var(--octane-pixel-art, pixelated);
pointer-events: none;
}
/* Firefox has no mask-box-image, so the slot drew as a plain green square. These steps are the 3px
corner alpha of the 7px discount slot. */
@supports not (-webkit-mask-box-image-source: none) {
.octane-catalog-standard-spinner-discount::before {
clip-path: polygon(2px 0, calc(100% - 2px) 0, calc(100% - 2px) 1px, calc(100% - 1px) 1px, calc(100% - 1px) 2px, 100% 2px, 100% calc(100% - 2px), calc(100% - 1px) calc(100% - 2px), calc(100% - 1px) calc(100% - 1px), calc(100% - 2px) calc(100% - 1px), calc(100% - 2px) 100%, 2px 100%, 2px calc(100% - 1px), 1px calc(100% - 1px), 1px calc(100% - 2px), 0 calc(100% - 2px), 0 2px, 1px 2px, 1px 1px, 2px 1px);
}
}
.octane-catalog-standard-spinner-discount-copy {
/* Keep the localized "+ N free!" visible between the requested plus
control and AIR's fixed x=173 bonus star. */
position: absolute;
top: 5px;
left: 68px;
z-index: 2;
width: 67px;
height: 15px;
overflow: hidden;
color: #000000;
font-family: HabboAirUbuntu, UbuntuRegular, sans-serif;
font-size: 10px;
font-style: italic;
font-weight: 400;
letter-spacing: normal;
line-height: 15px;
white-space: nowrap;
}
.octane-catalog-standard-spinner-discount-star {
position: absolute;
top: -2px;
left: 108px;
z-index: 1;
width: 30px;
height: 30px;
background: url("../../assets/images/catalog/air/bundle-star.png") 0 0 / 29px 29px no-repeat;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-standard-spinner-input-frame::before {
content: "";
position: absolute;
inset: 0;
box-sizing: border-box;
border-width: 6px !important;
border-style: solid !important;
border-color: transparent !important;
border-radius: 0 !important;
border-image-source: var(--habbo-skin-border-white) !important;
border-image-slice: 6 fill !important;
border-image-width: 6px !important;
border-image-repeat: stretch !important;
background: transparent !important;
image-rendering: var(--octane-pixel-art, pixelated);
pointer-events: none;
}
.octane-catalog-window .octane-catalog-standard-spinner-value {
position: absolute;
left: 3px;
top: 5px;
width: 22px !important;
height: 15px !important;
min-height: 0 !important;
margin: 0 !important;
padding: 0 !important;
border: 0 !important;
border-radius: 0 !important;
outline: 0 !important;
background: transparent !important;
color: #000000 !important;
box-shadow: none !important;
font-family: UbuntuRegular, Ubuntu, sans-serif;
font-size: 10px !important;
font-weight: 400;
line-height: 15px !important;
text-align: left;
}
.octane-catalog-window .octane-catalog-standard-spinner-value:focus {
border: 0 !important;
outline: 0 !important;
box-shadow: none !important;
}
.octane-catalog-standard-price-display {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 3px;
min-height: 24px;
color: #000000;
font-size: 11px;
}
.octane-catalog-standard-price-pill {
display: inline-flex;
align-items: center;
gap: 2px;
height: 22px;
min-width: 34px;
padding: 0 2px;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
}
.octane-catalog-standard-price-text {
color: #000000 !important;
font-size: 11px !important;
font-weight: 700 !important;
line-height: 17px !important;
}
.octane-catalog-standard-price-original {
position: relative;
display: inline-block;
color: #999999 !important;
font-size: 11px !important;
font-weight: 700 !important;
line-height: 17px !important;
}
.octane-catalog-standard-price-original::after {
content: "";
position: absolute;
top: 8px;
right: 0;
left: 0;
height: 2px;
background: #ff0000;
pointer-events: none;
}
.octane-catalog-total-price-value .octane-catalog-standard-price-display {
align-items: flex-start;
width: max-content;
height: 24px;
min-height: 24px;
gap: 0;
font-size: 12px;
margin-left: auto;
}
.octane-catalog-total-price-value .octane-catalog-standard-price-pill {
align-items: flex-start;
height: 24px;
min-width: 0;
gap: 0;
padding: 0;
}
.octane-catalog-total-price-value .octane-catalog-standard-price-text {
font-size: 12px !important;
margin-top: 3px;
}
.octane-catalog-total-price-value .octane-catalog-standard-price-original {
font-size: 12px !important;
margin-top: 3px;
}
.octane-catalog-total-price-value .octane-catalog-standard-price-original::after {
top: 7px;
}
.octane-catalog-total-price-value .octane-catalog-standard-price-plus {
display: inline-block;
width: 8px;
height: 17px;
margin-left: -2px;
margin-top: 3px;
color: #000000;
font-size: 12px;
font-weight: 700;
line-height: 17px;
text-align: left;
}
.octane-catalog-total-price-value .octane-currency-icon {
width: 22px !important;
height: 22px !important;
min-width: 22px !important;
min-height: 22px !important;
margin-top: 1px;
background-position: center !important;
background-repeat: no-repeat !important;
}
.octane-catalog-total-price-value [data-currency-type="-1"] .octane-currency-icon {
background-image: url("../../assets/images/catalog/air/currency-credit-big.png") !important;
}
.octane-catalog-total-price-value [data-currency-type="0"] .octane-currency-icon {
background-image: url("../../assets/images/catalog/air/currency-ducket-big.png") !important;
}
.octane-catalog-total-price-value [data-currency-type="5"] .octane-currency-icon {
background-image: url("../../assets/images/catalog/air/currency-diamond-big.png") !important;
}
.octane-catalog-window .octane-catalog-preview-price .octane-catalog-standard-price-text {
color: #ffffff !important;
text-shadow:
0 0 2px #000,
1px 1px 1px #000,
-1px 1px 1px #000,
1px -1px 1px #000,
-1px -1px 1px #000 !important;
}
.octane-catalog-standard-price-plus {
display: inline-block;
width: 7px;
height: 17px;
color: #666;
font-size: 11px;
font-weight: 700;
line-height: 17px;
text-align: center;
}
.octane-catalog-preview-btn {
position: absolute;
z-index: 4;
width: 25px;
height: 24px;
min-width: 25px;
padding: 0 !important;
overflow: hidden;
font-size: 14px !important;
line-height: 1 !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
}
.octane-catalog-preview-btn svg {
width: 14px !important;
height: 14px !important;
color: #111 !important;
fill: #111 !important;
flex-shrink: 0 !important;
display: block !important;
}
.octane-catalog-preview-rotate {
top: 8px;
right: 35px;
}
.octane-catalog-preview-state {
top: 8px;
right: 6px;
}
.octane-catalog-window button.octane-catalog-preview-btn {
width: 25px !important;
height: 24px !important;
min-width: 25px !important;
min-height: 24px !important;
padding: 0 !important;
border: 0 !important;
border-image-source: none !important;
border-radius: 0 !important;
background: transparent !important;
background-image: none !important;
box-shadow: none !important;
z-index: 10 !important;
}
.octane-catalog-window button.octane-catalog-preview-btn::before {
content: "";
position: absolute;
inset: 0;
z-index: 0;
box-sizing: border-box;
border: solid transparent;
border-width: 6px 6px 7px;
border-image-source: var(--habbo-skin-shiny-large);
border-image-slice: 6 6 7 6 fill;
border-image-width: 6px 6px 7px;
border-image-repeat: stretch;
pointer-events: none;
}
.octane-catalog-window button.octane-catalog-preview-btn:hover::before {
border-image-source: var(--habbo-skin-shiny-large-hover);
}
.octane-catalog-window button.octane-catalog-preview-btn:active::before {
border-image-source: var(--habbo-skin-shiny-large-pressed);
}
.octane-catalog-window button.octane-catalog-preview-btn:disabled::before {
border-image-source: var(--habbo-skin-shiny-large-disabled);
}
.octane-catalog-window button.octane-catalog-preview-btn > svg {
position: relative;
z-index: 1;
}
.octane-catalog-breadcrumb {
display: none;
}
.octane-catalog-preview-controls {
position: absolute;
top: 8px;
right: 6px;
z-index: 10;
width: 54px;
height: 77px;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-btn {
position: absolute;
top: 0;
width: 25px !important;
min-width: 25px !important;
height: 24px !important;
min-height: 24px !important;
overflow: hidden;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-btn.is-left {
left: 0;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-btn.is-right {
left: 29px;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-btn:disabled {
opacity: 1 !important;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-region {
position: absolute;
left: 31px;
display: block;
padding: 0 !important;
overflow: hidden;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-zoom-btn {
top: 29px;
width: 20px !important;
min-width: 20px !important;
height: 22px !important;
min-height: 22px !important;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-action-btn {
top: 55px;
width: 22px !important;
min-width: 22px !important;
height: 22px !important;
min-height: 22px !important;
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-region:hover {
filter: brightness(1.12);
}
.octane-catalog-window .octane-catalog-preview-controls button.octane-catalog-preview-region:active {
filter: brightness(0.9);
}
.octane-catalog-window .octane-catalog-preview-controls .octane-catalog-preview-arrow {
position: absolute;
top: 7px;
display: block;
width: 10px !important;
height: 9px !important;
max-width: none !important;
max-height: none !important;
object-fit: none !important;
z-index: 1;
filter: none !important;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-window .octane-catalog-preview-controls button.is-left .octane-catalog-preview-arrow {
left: 7px;
}
.octane-catalog-window .octane-catalog-preview-controls button.is-right .octane-catalog-preview-arrow {
left: 9px;
}
.octane-catalog-window .octane-catalog-preview-controls .octane-icon.icon-zoom-more {
position: absolute;
top: 0;
left: 3px;
width: 13px;
height: 22px;
background-repeat: no-repeat;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-window .octane-catalog-preview-controls .octane-icon.icon-zoom-more:hover,
.octane-catalog-window .octane-catalog-preview-controls .octane-icon.icon-zoom-more:active {
transform: none;
filter: none;
}
.octane-catalog-window .octane-catalog-preview-controls .octane-catalog-preview-action-icon {
position: absolute;
top: 0;
left: -10px;
width: 41px;
height: 22px;
background: url("@/assets/images/catalog/preview-avatar-action.svg") no-repeat;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-grid-club-level {
position: absolute;
top: 4px;
left: 23px;
z-index: 5;
display: inline-flex;
pointer-events: none;
}
.octane-catalog-grid-density-standard .layout-grid-item.uses-base-grid-template .octane-catalog-grid-club-level {
top: 2px;
left: 15px;
}
/* Bots (avatar offers): pin the HC badge to the tile's top-left corner —
the default 23px offset suits furni tiles. */
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) .layout-grid-item:has(.avatar-image) .octane-catalog-grid-club-level {
left: 4px;
}
/* purchaseWidget with nothing picked: AIR shows "Select an item!" (u_headline_small, #666666) on the greyed
full-width buy bar. */
.octane-catalog-purchase-selection-prompt {
display: flex;
flex: 1 1 auto;
align-items: center;
justify-content: center;
align-self: stretch;
height: 30px;
border: 5px solid transparent;
border-image-source: var(--habbo-skin-shiny-thick-disabled);
border-image-slice: 5 fill;
border-image-width: 5px;
color: #666666;
font-size: 14px;
font-style: normal;
font-weight: 700;
}
/* ============================================================================
Phones and tablets
The AIR window (570 x 635) stays as it is wherever it fits. Where it does not:
- a phone held upright gets the window full screen with everything stacked:
tabs that scroll sideways, a short header, the menu, then the 360 x 460 page;
- a phone on its side keeps AIR's two columns full screen (menu left, page right);
- a screen too short for 635 px (tablet in split view, small laptop) keeps the
window, only as tall as the screen allows, with its content scrolling.
The pages keep their AIR coordinates (360 x 460); only the frame around them moves.
============================================================================ */
@media (max-height: 659px) and (min-width: 641px) and (min-height: 521px) {
body .octane-card-shell.octane-catalog-window {
height: calc(100dvh - 16px) !important;
min-height: 0 !important;
max-height: calc(100dvh - 16px) !important;
}
.draggable-window:has(> .octane-catalog-window) {
height: calc(100dvh - 16px) !important;
}
.octane-catalog-content-shell {
overflow-y: auto !important;
}
.octane-catalog-stage {
min-height: 460px;
}
}
@media (max-width: 640px), (orientation: landscape) and (max-height: 520px) {
/* Full screen: beats the generic phone centring of every draggable window. */
body .draggable-window:has(> .octane-catalog-window) {
position: fixed !important;
inset: 0 !important;
width: 100vw !important;
height: 100dvh !important;
min-width: 0 !important;
max-width: 100vw !important;
transform: none !important;
}
body .octane-card-shell.octane-catalog-window {
width: 100% !important;
min-width: 0 !important;
max-width: 100% !important;
height: 100% !important;
min-height: 0 !important;
max-height: 100% !important;
border-radius: 0 !important;
padding-bottom: env(safe-area-inset-bottom);
}
.octane-catalog-tabs-shell {
flex-wrap: nowrap !important;
overflow-x: auto !important;
overflow-y: hidden;
overscroll-behavior-x: contain;
}
.octane-catalog-tabs-shell .octane-card-tab-item {
flex: 0 0 auto !important;
}
/* Header: title and one line of text, icon kept at AIR's spot. */
.octane-catalog-standard-header {
flex: 0 0 56px;
height: 56px;
}
.octane-catalog-standard-header-icon {
top: 9px;
}
.octane-catalog-standard-header-copy {
top: 6px;
right: 8px;
width: auto;
}
.octane-catalog-standard-header-description {
-webkit-line-clamp: 1;
line-clamp: 1;
max-height: 17px;
}
.octane-catalog-content-shell {
padding: 6px !important;
overflow-x: hidden !important;
overflow-y: auto !important;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.octane-catalog-layout-shell {
flex: 0 0 auto;
width: 360px;
max-width: 100%;
height: auto;
min-height: 0;
overflow: visible;
}
.octane-catalog-layout-container {
flex: 0 0 auto;
height: auto;
min-height: 460px;
overflow: visible;
}
.octane-catalog-default-layout {
width: 100%;
height: 460px;
min-height: 460px;
overflow: visible;
}
.octane-catalog-grid:not(.octane-catalog-grid-density-standard) {
grid-template-columns: repeat(auto-fill, minmax(var(--octane-grid-column-min-width, 47px), 1fr)) !important;
}
}
/* Upright phone: one column, the menu above the page. */
@media (max-width: 640px) and (orientation: portrait), (max-width: 640px) and (min-height: 521px) {
.octane-catalog-stage,
.octane-catalog-stage.is-navigation-hidden {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
width: 100%;
height: auto;
min-height: 0;
}
.octane-catalog-sidebar {
flex: 0 0 auto;
width: 100%;
max-height: 34dvh;
}
}
/* Phone on its side: AIR's two columns, each scrolling on its own. */
@media (orientation: landscape) and (max-height: 520px) {
.octane-catalog-standard-header {
flex-basis: 40px;
height: 40px;
}
.octane-catalog-standard-header-icon {
top: 2px;
}
.octane-catalog-standard-header-copy {
top: 6px;
}
.octane-catalog-standard-header-description {
display: none;
}
.octane-catalog-content-shell {
overflow-y: hidden !important;
}
.octane-catalog-stage {
display: grid;
grid-template-columns: 184px 360px;
justify-content: center;
height: 100%;
}
.octane-catalog-layout-shell {
height: 100%;
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
}
/* The narrowest phones (320 px): the page is drawn a little smaller so it fits whole. */
@media (max-width: 371px) {
.octane-catalog-layout-shell {
zoom: 0.85;
max-width: none;
}
}
/* Touch screens: rows and tabs answer to a finger without changing how they look. */
@media (pointer: coarse) {
.octane-catalog-window .octane-catalog-navigation-shell,
.octane-catalog-window .octane-classic-scroll-area-viewport {
-webkit-overflow-scrolling: touch;
touch-action: pan-y;
}
.octane-catalog-window .octane-catalog-navigation-item {
touch-action: manipulation;
-webkit-tap-highlight-color: transparent;
}
.octane-catalog-window .octane-catalog-navigation-item::after {
content: "";
position: absolute;
inset: -3px 0;
}
}
/* ============================================================================
Catalog Admin Editor window
Compact live catalog manager that lives in its own
draggable window, so the main catalog chrome stays identical in browse and
admin mode (the tab strip no longer carries admin controls).
============================================================================ */
.octane-catalog-admin-manager {
width: 880px;
max-width: calc(100vw - 16px);
color: #263842;
font-family: Ubuntu, Arial, sans-serif;
font-size: 11px;
}
.octane-catalog-admin-manager button,
.octane-catalog-admin-manager input,
.octane-catalog-admin-manager select,
.octane-catalog-admin-manager .octane-select-trigger {
font-family: Ubuntu, Arial, sans-serif;
}
.octane-catalog-admin-preview-persona,
.octane-catalog-admin-bulk-grid,
.octane-catalog-admin-import-toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
margin: 8px 0;
padding: 7px 8px;
border: 1px solid #a8b5bd;
border-radius: 5px;
background: linear-gradient(180deg, #edf3f6 0%, #dce7ed 100%);
}
.octane-catalog-admin-preview-persona label,
.octane-catalog-admin-bulk-grid label {
display: flex;
align-items: center;
gap: 5px;
min-height: 25px;
margin: 0;
color: #3b505c;
font-size: 10px;
font-weight: 700;
}
.octane-catalog-admin-preview-persona input[type="number"],
.octane-catalog-admin-preview-persona .octane-number-input,
.octane-catalog-admin-bulk-grid input:not([type="checkbox"]),
.octane-catalog-admin-bulk-grid select,
.octane-catalog-admin-bulk-grid .octane-select-trigger,
.octane-catalog-admin-import-toolbar select,
.octane-catalog-admin-import-toolbar .octane-select-trigger {
height: 25px;
min-width: 74px;
padding: 2px 7px;
border: 1px solid #8499a5;
border-radius: 4px;
outline: 0;
background: #f9fbfc;
color: #203844;
font: 700 10px Ubuntu, Arial, sans-serif;
}
.octane-catalog-admin-preview-persona input:focus,
.octane-catalog-admin-bulk-grid input:focus,
.octane-catalog-admin-bulk-grid select:focus,
.octane-catalog-admin-bulk-grid .octane-select-trigger:focus,
.octane-catalog-admin-import-toolbar select:focus,
.octane-catalog-admin-import-toolbar .octane-select-trigger:focus,
.octane-catalog-admin-import-export textarea:focus {
border-color: #3e83b5;
box-shadow: 0 0 0 2px rgba(62, 131, 181, .18);
}
.octane-catalog-admin-preview-persona input[type="checkbox"],
.octane-catalog-admin-bulk-grid input[type="checkbox"] {
width: 13px;
height: 13px;
margin: 0;
accent-color: #438ec0;
}
.octane-catalog-admin-preview-pages {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(205px, 1fr));
gap: 6px;
max-height: 355px;
padding-right: 3px;
overflow: auto;
}
.octane-catalog-admin-preview-page,
.octane-catalog-admin-preview-offer {
border: 1px solid #aab8c0;
border-radius: 5px;
padding: 6px 7px;
background: #f8fafb;
}
.octane-catalog-admin-preview-page header,
.octane-catalog-admin-preview-offer {
display: flex;
flex-direction: column;
gap: 1px;
}
.octane-catalog-admin-preview-page header strong,
.octane-catalog-admin-preview-offer strong {
color: #223b48;
font-size: 10px;
line-height: 1.25;
}
.octane-catalog-admin-preview-page header span,
.octane-catalog-admin-preview-offer span,
.octane-catalog-admin-preview-offer small {
color: #647985;
font-size: 9px;
line-height: 1.3;
}
.octane-catalog-admin-preview-offers {
display: grid;
gap: 4px;
margin-top: 6px;
}
.octane-catalog-admin-preview-offer.is-eligible {
border-left: 3px solid #4a9b63;
}
.octane-catalog-admin-preview-offer.is-blocked {
border-left: 3px solid #bd574f;
background: #fbefee;
}
.octane-catalog-admin-preview-offer.is-blocked small {
color: #a33d36;
font-weight: 700;
}
.octane-catalog-admin-bulk,
.octane-catalog-admin-studio-preview,
.octane-catalog-admin-import-export {
height: 100%;
min-height: 0;
color: #263842;
}
.octane-catalog-admin-import-export textarea {
width: 100%;
min-height: 292px;
padding: 8px 9px;
border: 1px solid #8499a5;
border-radius: 5px;
outline: 0;
background: #f8fafb;
color: #243945;
resize: vertical;
font: 11px/1.45 Consolas, "Courier New", monospace;
tab-size: 2;
}
.octane-catalog-admin-command-bar {
display: flex;
gap: 16px;
align-items: center;
justify-content: space-between;
min-height: 54px;
padding: 10px 12px;
border-bottom: 1px solid #9eafb8;
background: linear-gradient(180deg, #f4f8fa 0%, #dce8ed 100%);
color: #203b49;
box-shadow: inset 4px 0 0 #7e949f, inset 0 1px 0 rgba(255, 255, 255, 0.85);
}
.octane-catalog-admin-command-bar.is-draft {
box-shadow: inset 4px 0 0 #d99a24, inset 0 1px 0 rgba(255, 255, 255, 0.85);
}
.octane-catalog-admin-command-bar.is-blocked {
box-shadow: inset 4px 0 0 #bd5149, inset 0 1px 0 rgba(255, 255, 255, 0.85);
}
.octane-catalog-admin-command-bar.is-clean,
.octane-catalog-admin-command-bar.is-ready {
box-shadow: inset 4px 0 0 #4f9a67, inset 0 1px 0 rgba(255, 255, 255, 0.85);
}
.octane-catalog-admin-command-title {
display: flex;
flex: 0 0 auto;
flex-direction: column;
gap: 2px;
line-height: 1.2;
}
.octane-catalog-admin-command-title strong {
color: #183541;
font-size: 15px;
font-weight: 800;
letter-spacing: 0.1px;
}
.octane-catalog-admin-command-title span {
color: #617985;
font-size: 10px;
font-weight: 600;
}
.octane-catalog-admin-command-stats {
display: flex;
flex-wrap: wrap;
gap: 6px;
justify-content: flex-end;
}
.octane-catalog-admin-command-stats > span {
display: inline-flex;
gap: 5px;
align-items: center;
min-height: 27px;
padding: 4px 9px;
border: 1px solid #adbec7;
border-radius: 7px;
background: rgba(255, 255, 255, 0.82);
color: #38515e;
font-size: 10px;
font-weight: 700;
line-height: 1;
box-shadow: 0 1px 1px rgba(36, 62, 75, 0.08), inset 0 1px 0 #ffffff;
}
.octane-catalog-admin-command-stats > span.is-revision {
border-color: #a9bac3;
background: #edf3f6;
}
.octane-catalog-admin-command-stats > span.is-actors {
border-color: #8fb8d1;
background: #e8f4fa;
color: #285e7b;
}
.octane-catalog-admin-command-stats > span.is-locks {
border-color: #aa9bc8;
background: #f1edf8;
color: #59477d;
}
.octane-catalog-admin-command-stats > span.has-pending {
border-color: #d9a13a;
background: #fff3d5;
color: #775000;
}
.octane-catalog-admin-command-stats > span.has-error {
border-color: #d46d65;
background: #fde9e7;
color: #8c302a;
}
.octane-catalog-admin-command-stats > span.has-warning {
border-color: #d6a648;
background: #fff6dc;
color: #775500;
}
.octane-catalog-admin-command-stats > span.is-valid {
border-color: #74b487;
background: #e9f6ed;
color: #2f7043;
}
.octane-catalog-admin-command-stats svg {
width: 10px;
height: 10px;
flex: 0 0 auto;
fill: currentColor;
}
@media (max-width: 760px) {
.octane-catalog-admin-command-bar {
align-items: flex-start;
flex-direction: column;
gap: 8px;
}
.octane-catalog-admin-command-stats {
justify-content: flex-start;
}
}
.octane-catalog-admin-manager-body {
display: flex;
flex-direction: column;
gap: 0;
padding: 0 !important;
background: var(--catalog-standard-bg, #d7d7cf) !important;
}
.octane-catalog-admin-operation-error {
display: flex;
align-items: center;
gap: 7px;
min-height: 30px;
padding: 6px 10px;
border-bottom: 1px solid #b85b54;
background: #f8d9d5;
color: #762c27;
font-size: 11px;
font-weight: 700;
}
.octane-catalog-admin-operation-error svg {
flex: 0 0 auto;
color: #b64038;
}
/* Tab strip under the header */
.octane-catalog-admin-tabs {
display: flex;
gap: 4px;
padding: 6px 8px 0;
background: rgba(0, 0, 0, 0.05);
border-bottom: 1px solid #9a9a90;
}
.octane-catalog-admin-tab {
display: inline-flex;
align-items: center;
gap: 6px;
height: 26px;
padding: 0 12px;
border: 1px solid #8f8f86;
border-bottom: 0;
border-radius: 7px 7px 0 0;
background: linear-gradient(180deg, #f4f4ef 0%, #dcdcd3 100%);
color: #45453f;
font-size: 11px;
font-weight: 700;
cursor: pointer;
}
.octane-catalog-admin-tab svg {
width: 11px;
height: 11px;
fill: currentColor;
}
.octane-catalog-admin-tab:hover {
filter: brightness(1.03);
}
.octane-catalog-admin-tab.is-active {
background: linear-gradient(180deg, #6aa4d8 0%, #4d8bc9 100%);
border-color: #35618f;
color: #ffffff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
}
.octane-catalog-admin-tab.has-pending:not(.is-active) {
box-shadow: inset 0 -2px 0 #1aa022;
}
.octane-catalog-admin-tab-count {
padding: 0 5px;
border-radius: 8px;
background: rgba(65, 141, 176, 0.2);
color: #345f74;
font-size: 9px;
}
.octane-catalog-admin-tab.is-active .octane-catalog-admin-tab-count {
background: rgba(0, 0, 0, 0.18);
color: #ffffff;
}
.octane-catalog-admin-panel {
flex: 1 1 auto;
height: 460px;
min-height: 0;
max-height: calc(100vh - 150px);
padding: 8px;
overflow: hidden;
}
/* Shared buttons */
.octane-catalog-admin-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
height: 28px;
padding: 0 12px;
border: 3px solid transparent;
border-image-source: var(--habbo-skin-button);
border-image-slice: 3 fill;
border-image-width: 3px;
border-image-repeat: stretch;
border-radius: 0;
background: transparent;
color: #111111;
font-size: 11px;
font-weight: 700;
cursor: pointer;
box-shadow: none;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-admin-btn:hover {
filter: brightness(1.04);
}
.octane-catalog-admin-btn:disabled {
cursor: default;
opacity: 0.5;
filter: none;
}
.octane-catalog-admin-btn svg {
width: 11px;
height: 11px;
fill: currentColor;
}
.octane-catalog-admin-btn.is-primary,
.octane-catalog-admin-btn.is-publish {
border-width: 5px;
border-style: solid;
border-color: transparent;
border-image-source: var(--habbo-skin-shiny-thick-green);
border-image-slice: 5 fill;
border-image-width: 5px;
border-image-repeat: stretch;
background: transparent;
color: #ffffff;
}
.octane-catalog-admin-btn.is-danger {
border-width: 5px;
border-style: solid;
border-color: transparent;
border-image-source: var(--habbo-skin-shiny-red);
border-image-slice: 5 fill;
border-image-width: 5px;
border-image-repeat: stretch;
background: transparent;
color: #ffffff;
}
.octane-catalog-admin-btn.is-danger:hover {
border-image-source: var(--habbo-skin-shiny-red-hover);
}
.octane-catalog-admin-btn.is-publish {
height: 34px;
padding: 0 22px;
font-size: 12px;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
}
.octane-catalog-admin-btn.is-publish.has-pending {
box-shadow: 0 0 0 2px rgba(61, 204, 69, 0.5);
}
.octane-catalog-admin-btn.is-small {
height: 23px;
padding: 0 8px;
font-size: 9px;
}
/* ---- Activity tab ---- */
.octane-catalog-admin-activity {
display: flex;
flex-direction: column;
gap: 8px;
height: 100%;
min-height: 0;
}
.octane-catalog-admin-section-head {
display: flex;
flex: 0 0 auto;
align-items: center;
justify-content: space-between;
padding: 8px 10px;
border: 1px solid #aaa9a0;
border-radius: 5px;
background: #f7f7f2;
}
.octane-catalog-admin-section-head > div,
.octane-catalog-admin-history-main,
.octane-catalog-admin-version-row > div,
.octane-catalog-admin-validation-row > div {
display: flex;
flex-direction: column;
min-width: 0;
}
.octane-catalog-admin-section-head strong,
.octane-catalog-admin-history-summary,
.octane-catalog-admin-version-row strong,
.octane-catalog-admin-validation-row strong {
color: #252521;
font-size: 11px;
font-weight: 700;
}
.octane-catalog-admin-section-head span,
.octane-catalog-admin-history-meta,
.octane-catalog-admin-version-row span,
.octane-catalog-admin-validation-row span,
.octane-catalog-admin-history-side > span {
color: #75756e;
font-size: 9px;
}
.octane-catalog-admin-history-list {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 5px;
min-height: 0;
overflow-y: auto;
}
.octane-catalog-admin-history-row,
.octane-catalog-admin-version-row {
display: flex;
gap: 10px;
align-items: center;
justify-content: space-between;
padding: 8px 10px;
border: 1px solid #b7b7ae;
border-radius: 5px;
background: #fff;
}
.octane-catalog-admin-history-side {
display: flex;
flex: 0 0 auto;
gap: 8px;
align-items: center;
}
/* Empty / placeholder states */
.octane-catalog-admin-placeholder {
display: flex;
flex: 1 1 auto;
align-items: center;
justify-content: center;
padding: 20px;
color: #8a8a80;
font-size: 12px;
font-style: italic;
text-align: center;
}
.octane-catalog-admin-placeholder.is-small {
padding: 12px;
font-size: 11px;
}
/* ---- Pages tab: sidebar tree + detail pane ---- */
.octane-catalog-admin-pages {
display: grid;
grid-template-columns: 225px minmax(0, 1fr) 220px;
grid-template-rows: minmax(0, 1fr) 82px;
gap: 8px;
height: 100%;
min-height: 0;
}
.octane-catalog-admin-sidebar {
display: flex;
flex-direction: column;
gap: 6px;
min-height: 0;
}
.octane-catalog-admin-search-row {
display: flex;
flex: 0 0 auto;
gap: 6px;
align-items: center;
}
.octane-catalog-admin-search {
display: flex;
flex: 1 1 auto;
align-items: center;
gap: 6px;
height: 26px;
padding: 0 10px;
border: 1px solid #b7b7ae;
border-radius: 13px;
background: #ffffff;
}
.octane-catalog-admin-search svg {
width: 11px;
height: 11px;
fill: #9a9a90;
}
.octane-catalog-admin-search input {
flex: 1 1 auto;
min-width: 0;
border: 0;
background: transparent;
color: #20201d;
font-size: 11px;
outline: none;
}
.octane-catalog-admin-add {
display: grid;
flex: 0 0 auto;
place-items: center;
width: 26px;
height: 26px;
border: 1px solid #3f8f4e;
border-radius: 13px;
background: linear-gradient(180deg, #b6e6bd 0%, #8fd39a 100%);
color: #1f6f2e;
cursor: pointer;
}
.octane-catalog-admin-add:hover {
filter: brightness(1.04);
}
.octane-catalog-admin-add:disabled {
cursor: default;
opacity: 0.5;
}
.octane-catalog-admin-add svg {
width: 11px;
height: 11px;
fill: currentColor;
}
.octane-catalog-admin-tree {
flex: 1 1 auto;
min-height: 0;
padding: 4px;
border: 1px solid #b7b7ae;
border-radius: 4px;
background: #f7f7f2;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.07);
overflow-y: auto;
}
.octane-catalog-admin-tree-row {
display: flex;
gap: 6px;
align-items: center;
height: 26px;
padding-right: 6px;
border-radius: 4px;
cursor: pointer;
}
.octane-catalog-admin-tree-row:hover {
background: rgba(65, 141, 176, 0.1);
}
.octane-catalog-admin-tree-row.is-selected {
background: linear-gradient(180deg, #cdeafb 0%, #a9d6ef 100%);
box-shadow: inset 0 0 0 1px rgba(65, 141, 176, 0.5);
}
.octane-catalog-admin-tree-row.is-hidden {
opacity: 0.55;
}
.octane-catalog-admin-tree-row.is-drag-over {
background: rgba(65, 141, 176, 0.22);
box-shadow: inset 0 0 0 1px rgba(65, 141, 176, 0.55);
}
.octane-catalog-admin-tree-drag {
flex: 0 0 auto;
width: 10px;
height: 10px;
color: #9a9a90;
cursor: grab;
opacity: 0.45;
}
.octane-catalog-admin-tree-row:hover .octane-catalog-admin-tree-drag {
opacity: 0.85;
}
.octane-catalog-admin-tree-caret {
display: inline-flex;
flex: 0 0 auto;
align-items: center;
justify-content: center;
width: 14px;
}
.octane-catalog-admin-tree-caret button {
display: grid;
place-items: center;
width: 14px;
height: 14px;
padding: 0;
border: 0;
background: transparent;
color: #6b6b62;
cursor: pointer;
}
.octane-catalog-admin-tree-caret button svg {
width: 8px;
height: 8px;
fill: currentColor;
}
.octane-catalog-admin-tree-caret-spacer {
display: inline-block;
width: 14px;
height: 14px;
}
.octane-catalog-admin-tree-icon {
display: inline-flex;
flex: 0 0 auto;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
}
.octane-catalog-admin-tree-icon-empty {
display: inline-block;
width: 16px;
height: 16px;
border: 1px solid #b7b7ae;
border-radius: 2px;
background: #ffffff;
}
.octane-catalog-admin-tree-label {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
color: #20201d;
font-size: 11px;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-admin-tree-count {
flex: 0 0 auto;
color: #9a9a90;
font-size: 9px;
font-weight: 600;
}
.octane-catalog-admin-detail {
display: flex;
min-height: 0;
border: 1px solid #b7b7ae;
border-radius: 4px;
background: #eceae2;
overflow: hidden;
}
.octane-catalog-admin-detail-inner {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 10px;
min-height: 0;
height: 100%;
padding: 12px;
}
.octane-catalog-admin-detail-head,
.octane-catalog-admin-detail-actions {
flex: 0 0 auto;
}
.octane-catalog-admin-detail-head {
display: flex;
gap: 10px;
align-items: center;
padding-bottom: 8px;
border-bottom: 1px solid #c9c9c0;
}
.octane-catalog-admin-detail-icon {
display: grid;
flex: 0 0 auto;
place-items: center;
width: 38px;
height: 38px;
border: 1px solid #c9c9c0;
border-radius: 6px;
background: #ffffff;
}
.octane-catalog-admin-detail-icon img {
width: 28px;
height: 28px;
}
.octane-catalog-admin-detail-titles {
display: flex;
flex-direction: column;
min-width: 0;
}
.octane-catalog-admin-detail-title {
overflow: hidden;
color: #20201d;
font-size: 14px;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-admin-detail-sub {
color: #7a7a70;
font-size: 10px;
}
.octane-catalog-admin-detail-actions {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 6px;
}
.octane-catalog-admin-detail-actions .octane-catalog-admin-btn {
justify-content: flex-start;
}
/* ---- Offers (inside page detail) ---- */
.octane-catalog-admin-offers {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 8px;
min-width: 0;
min-height: 0;
padding-top: 10px;
border-top: 1px solid #c9c9c0;
}
.octane-catalog-admin-offers-head {
display: flex;
flex: 0 0 auto;
gap: 8px;
align-items: center;
justify-content: space-between;
}
.octane-catalog-admin-offers-title {
overflow: hidden;
color: #20201d;
font-size: 13px;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-admin-offers-list {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 3px;
min-height: 0;
padding: 4px;
border: 1px solid #b7b7ae;
border-radius: 4px;
background: #f7f7f2;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.07);
overflow-y: auto;
}
.octane-catalog-admin-offer-row {
display: flex;
gap: 8px;
align-items: center;
min-height: 42px;
padding: 4px 6px;
border-radius: 3px;
background: #ffffff;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
}
.octane-catalog-admin-offer-row.is-selected {
background: linear-gradient(180deg, #cdeafb 0%, #a9d6ef 100%);
box-shadow: inset 0 0 0 1px rgba(65, 141, 176, 0.5);
}
.octane-catalog-admin-offer-row.is-drag-over {
background: rgba(65, 141, 176, 0.12);
box-shadow: inset 0 0 0 1px rgba(65, 141, 176, 0.45);
}
.octane-catalog-admin-offer-drag {
display: grid;
flex: 0 0 auto;
place-items: center;
width: 14px;
height: 14px;
color: #9a9a90;
cursor: grab;
opacity: 0.55;
}
.octane-catalog-admin-offer-row:hover .octane-catalog-admin-offer-drag {
opacity: 0.95;
}
.octane-catalog-admin-offer-drag svg {
width: 10px;
height: 10px;
fill: currentColor;
}
.octane-catalog-admin-offer-icon {
display: grid;
flex: 0 0 auto;
place-items: center;
width: 36px;
height: 36px;
border: 1px solid #d5d5cc;
border-radius: 4px;
background: #f4f4ef;
box-shadow: inset 0 0 0 1px #ffffff;
}
.octane-catalog-admin-offer-icon img {
max-width: 32px;
max-height: 32px;
object-fit: contain;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-admin-offer-icon-empty {
width: 22px;
height: 22px;
border: 1px dashed #c2c2ba;
border-radius: 3px;
background: repeating-linear-gradient(45deg, #e7e7df 0, #e7e7df 3px, #f7f7f2 3px, #f7f7f2 6px);
}
.octane-catalog-admin-offer-name {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
color: #20201d;
font-size: 11px;
font-weight: 600;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-admin-offer-price {
display: flex;
flex: 0 0 auto;
flex-wrap: wrap;
gap: 4px;
align-items: center;
color: #60605a;
font-size: 10px;
}
.octane-catalog-admin-offer-price-entry {
display: inline-flex;
gap: 2px;
align-items: center;
}
.octane-catalog-admin-offer-price-plus {
margin: 0 1px;
color: #9a9a90;
font-size: 9px;
font-weight: 700;
}
.octane-catalog-admin-offer-preview-price .octane-catalog-admin-offer-price {
font-size: 11px;
}
/* Shared reorder + control buttons (offer rows) */
.octane-catalog-admin-manager-reorder {
display: flex;
flex: 0 0 auto;
flex-direction: column;
gap: 1px;
}
.octane-catalog-admin-manager-reorder button {
display: grid;
place-items: center;
width: 15px;
height: 12px;
padding: 0;
border: 0;
background: transparent;
color: #52819a;
cursor: pointer;
}
.octane-catalog-admin-manager-reorder button:disabled {
color: #c2c2ba;
cursor: default;
}
.octane-catalog-admin-manager-reorder button svg {
width: 8px;
height: 8px;
fill: currentColor;
}
.octane-catalog-admin-manager-controls {
display: flex;
flex: 0 0 auto;
gap: 1px;
align-items: center;
}
.octane-catalog-admin-manager-controls button {
display: grid;
place-items: center;
width: 22px;
height: 22px;
padding: 0;
border: 1px solid transparent;
border-radius: 3px;
background: transparent;
color: #418db0;
cursor: pointer;
}
.octane-catalog-admin-manager-controls button:hover {
border-color: rgba(0, 0, 0, 0.12);
background: rgba(255, 255, 255, 0.7);
}
.octane-catalog-admin-manager-controls button.danger {
color: #b83b32;
}
.octane-catalog-admin-manager-controls button svg {
width: 11px;
height: 11px;
fill: currentColor;
}
/* ---- Publish tab ---- */
.octane-catalog-admin-publish {
display: flex;
flex-direction: column;
gap: 12px;
align-items: stretch;
justify-content: flex-start;
height: 100%;
min-height: 0;
padding: 16px 20px 20px;
text-align: left;
}
.octane-catalog-admin-publish-status {
flex: 0 0 auto;
align-self: flex-start;
padding: 8px 14px;
border-radius: 4px;
background: rgba(31, 111, 46, 0.12);
color: #1f6f2e;
font-size: 12px;
font-weight: 700;
}
.octane-catalog-admin-publish-status.is-draft {
background: rgba(240, 163, 24, 0.18);
color: #8a5b00;
}
.octane-catalog-admin-inspector {
display: flex;
flex-direction: column;
gap: 10px;
min-width: 0;
min-height: 0;
padding: 10px;
border: 1px solid #9fafb8;
border-radius: 7px;
background: linear-gradient(180deg, #f7fafb 0%, #eaf1f4 100%);
box-shadow: inset 0 1px 0 #ffffff, 0 1px 2px rgba(36, 62, 75, 0.08);
overflow-y: auto;
}
.octane-catalog-admin-inspector-head {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 8px;
border-bottom: 1px solid #bdcbd2;
}
.octane-catalog-admin-inspector-head strong {
color: #1d3a47;
font-size: 14px;
font-weight: 800;
}
.octane-catalog-admin-inspector-head span {
padding: 3px 7px;
border: 1px solid #aabcc5;
border-radius: 7px;
background: #ffffff;
color: #55707d;
font-size: 9px;
font-weight: 700;
}
.octane-catalog-admin-inspector-data {
display: flex;
flex-direction: column;
gap: 0;
margin: 0;
overflow: hidden;
border: 1px solid #c5d0d5;
border-radius: 5px;
background: rgba(255, 255, 255, 0.78);
}
.octane-catalog-admin-inspector-data > div {
display: grid;
grid-template-columns: minmax(70px, 0.8fr) minmax(0, 1.2fr);
gap: 8px;
align-items: center;
min-height: 30px;
padding: 5px 8px;
border-bottom: 1px solid #dce4e8;
}
.octane-catalog-admin-inspector-data > div:last-child {
border-bottom: 0;
}
.octane-catalog-admin-inspector-data dt,
.octane-catalog-admin-inspector-data dd {
margin: 0;
font-size: 10px;
}
.octane-catalog-admin-inspector-data dt {
color: #657b86;
font-weight: 600;
}
.octane-catalog-admin-inspector-data dd {
min-width: 0;
overflow: hidden;
color: #203b49;
font-weight: 700;
text-align: right;
text-overflow: ellipsis;
white-space: nowrap;
}
.octane-catalog-admin-inspector-data dd.is-positive {
color: #2f7043;
}
.octane-catalog-admin-inspector-data dd.is-muted {
color: #9a4b43;
}
.octane-catalog-admin-lock-state {
display: flex;
gap: 8px;
align-items: flex-start;
padding: 8px 9px;
border: 1px solid #d3a54b;
border-radius: 6px;
background: linear-gradient(180deg, #fff8e5 0%, #ffefc7 100%);
color: #765000;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.75);
}
.octane-catalog-admin-lock-state.is-owned {
border-color: #74ad83;
background: linear-gradient(180deg, #f1faf3 0%, #dff1e4 100%);
color: #2c6e3b;
}
.octane-catalog-admin-lock-state > svg {
width: 12px;
height: 12px;
margin-top: 1px;
flex: 0 0 auto;
fill: currentColor;
}
.octane-catalog-admin-lock-state > div {
display: flex;
flex-direction: column;
min-width: 0;
}
.octane-catalog-admin-lock-state strong,
.octane-catalog-admin-lock-state span {
font-size: 9px;
line-height: 1.35;
}
.octane-catalog-admin-lock-state strong {
font-size: 10px;
font-weight: 800;
}
.octane-catalog-admin-inspector-actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 6px;
margin-top: auto;
}
.octane-catalog-admin-inspector-actions .octane-catalog-admin-btn {
justify-content: center;
width: 100%;
}
.octane-catalog-admin-inspector-actions .octane-catalog-admin-btn:first-child {
grid-column: 1 / -1;
}
.octane-catalog-admin-changes-drawer {
display: flex;
grid-column: 1 / -1;
gap: 8px;
align-items: center;
min-width: 0;
padding: 7px 9px;
border: 1px solid #9da9b1;
border-radius: 4px;
background: linear-gradient(180deg, #eef4f7 0%, #dce7ed 100%);
}
.octane-catalog-admin-changes-title {
display: flex;
flex: 0 0 auto;
gap: 6px;
align-items: center;
}
.octane-catalog-admin-changes-title > div {
display: flex;
flex-direction: column;
}
.octane-catalog-admin-changes-title strong {
color: #273845;
font-size: 10px;
}
.octane-catalog-admin-changes-title span {
color: #60737f;
font-size: 8px;
}
.octane-catalog-admin-changes-feed {
display: flex;
flex: 1 1 auto;
gap: 5px;
min-width: 0;
overflow: hidden;
}
.octane-catalog-admin-changes-feed > button {
display: flex;
flex: 1 1 0;
flex-direction: column;
min-width: 0;
padding: 5px 7px;
border: 1px solid rgba(58, 84, 99, 0.22);
border-radius: 4px;
background: rgba(255, 255, 255, 0.7);
text-align: left;
}
.octane-catalog-admin-changes-feed > button strong,
.octane-catalog-admin-changes-feed > button span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.octane-catalog-admin-changes-feed > button strong {
color: #273845;
font-size: 8px;
}
.octane-catalog-admin-changes-feed > button span,
.octane-catalog-admin-changes-feed > span {
color: #697a85;
font-size: 8px;
}
.octane-catalog-admin-publish-status.is-blocked,
.octane-catalog-admin-publish-status.is-offline {
background: rgba(184, 59, 50, 0.14);
color: #98342d;
}
.octane-catalog-admin-publish-status.is-ready {
background: rgba(31, 111, 46, 0.16);
color: #1f6f2e;
}
.octane-catalog-admin-publish-text {
flex: 0 0 auto;
max-width: none;
margin: 0;
color: #60605a;
font-size: 11px;
line-height: 1.5;
}
.octane-catalog-admin-publish-changes {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 6px;
min-height: 0;
}
.octane-catalog-admin-publish-changes-head {
flex: 0 0 auto;
color: #20201d;
font-size: 12px;
font-weight: 700;
}
.octane-catalog-admin-publish-changes-list {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 4px;
min-height: 0;
margin: 0;
padding: 6px;
border: 1px solid #b7b7ae;
border-radius: 4px;
background: #f7f7f2;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.07);
overflow-y: auto;
list-style: none;
}
.octane-catalog-admin-publish-change {
display: flex;
gap: 10px;
align-items: baseline;
justify-content: space-between;
padding: 6px 8px;
border-radius: 3px;
background: #ffffff;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
}
.octane-catalog-admin-publish-change-summary {
flex: 1 1 auto;
min-width: 0;
color: #20201d;
font-size: 11px;
font-weight: 600;
line-height: 1.35;
}
.octane-catalog-admin-publish-change-time {
flex: 0 0 auto;
color: #9a9a90;
font-size: 10px;
font-weight: 600;
white-space: nowrap;
}
.octane-catalog-admin-publish-actions {
display: flex;
flex: 0 0 auto;
justify-content: center;
gap: 8px;
padding-top: 4px;
}
.octane-catalog-admin-validation-list,
.octane-catalog-admin-versions {
display: flex;
flex-direction: column;
gap: 5px;
min-height: 0;
overflow-y: auto;
}
.octane-catalog-admin-validation-row {
display: flex;
gap: 8px;
align-items: flex-start;
padding: 7px 9px;
border: 1px solid #d9a39f;
border-radius: 4px;
background: #fff3f2;
}
.octane-catalog-admin-validation-row > svg {
flex: 0 0 auto;
margin-top: 2px;
color: #b83b32;
}
/* Problems panel: the rules are the list, the entities are the detail underneath.
A live catalog answers with hundreds of rows, so they open one rule at a time. */
.octane-catalog-admin-validation-list .octane-catalog-admin-publish-changes-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.octane-catalog-admin-validation-meta {
display: inline-flex;
align-items: center;
gap: 6px;
color: #75756e;
font-size: 9px;
font-weight: 400;
}
.octane-catalog-admin-validation-group {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-catalog-admin-validation-group-head {
display: flex;
align-items: center;
gap: 7px;
width: 100%;
padding: 7px 9px;
border: 1px solid #d9a39f;
border-radius: 4px;
background: #fff3f2;
color: #252521;
font: inherit;
font-size: 11px;
font-weight: 700;
text-align: left;
cursor: pointer;
}
.octane-catalog-admin-validation-group-head:hover {
background: #ffe9e6;
}
.octane-catalog-admin-validation-group-head > strong {
flex: 1 1 auto;
min-width: 0;
overflow-wrap: anywhere;
}
.octane-catalog-admin-validation-count {
flex: 0 0 auto;
padding: 1px 7px;
border-radius: 9px;
background: #b4514b;
color: #fff;
font-size: 9px;
font-weight: 700;
}
.octane-catalog-admin-validation-group-body {
display: flex;
flex-direction: column;
gap: 3px;
padding-left: 16px;
}
/* The row became a button so a problem can carry you to the page it names. */
.octane-catalog-admin-validation-group-body .octane-catalog-admin-validation-row {
width: 100%;
font: inherit;
text-align: left;
cursor: pointer;
}
.octane-catalog-admin-validation-group-body .octane-catalog-admin-validation-row:disabled {
cursor: default;
opacity: 0.75;
}
.octane-catalog-admin-validation-group-body .octane-catalog-admin-validation-row:not(:disabled):hover {
border-color: #b4514b;
background: #ffe9e6;
}
/* Bundle layout (single_bundle / room_bundle): main hero item + framed "What's Included" container */
.octane-catalog-bundle-main-item {
display: flex;
flex-shrink: 0;
box-sizing: border-box;
width: 52px;
height: 52px;
padding: 4px;
align-items: center;
justify-content: center;
border-radius: 4px;
background: #e4e7df;
}
.octane-catalog-bundle-main-item > .octane-catalog-grid-offer-icon {
width: auto !important;
height: auto !important;
max-width: 100% !important;
max-height: 100% !important;
object-fit: contain;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-bundle-frame {
box-sizing: border-box;
padding: 8px;
border: 1px solid #8a8882;
border-radius: 4px;
background: #d9d9d5;
box-shadow: inset 1px 1px #ffffff, inset -1px -1px #b0aea8;
}
/* Show at most 5 rows of items; scroll when the bundle holds more. Rows are pinned
to the tile height and top-aligned so a partly-filled grid doesn't stretch. */
.octane-catalog-bundle-frame .octane-catalog-layout-bundle-grid {
height: calc(var(--octane-grid-column-min-height, 40px) * 5 + 2rem);
grid-template-rows: none !important;
grid-auto-rows: var(--octane-grid-column-min-height, 40px);
align-content: start;
}
/* Currency sits at the right of the top row on the classic golden credits panel. */
.octane-catalog-bundle-price {
display: inline-flex;
align-items: center;
box-sizing: border-box;
margin-inline-start: auto;
padding: 3px 10px;
/* 1px black outer edge, then a 2px #e3c47c ring, then the #a58d57 face. */
border: 1px solid #000000;
border-radius: 10px;
background: #a58d57;
box-shadow: inset 0 0 0 2px #e3c47c;
}
.octane-catalog-bundle-price > div {
padding: 0 !important;
background: transparent !important;
}
/* page_text_details sits at the top of a room bundle (e.g. "Also available in the Credit
page") — small, muted and left-aligned, above both columns. */
.octane-catalog-bundle-details {
color: #6b6b6b;
line-height: 1.2;
}
/* Invisible one-line stand-in for the "What's included" header in the left column: it
reserves the header's height so the currency plate lines up with the top of the furni
container on the right. Kept to a single line to match the (short) real header. */
.octane-catalog-bundle-header-spacer {
visibility: hidden;
white-space: nowrap;
overflow: hidden;
pointer-events: none;
}
/* Room bundles use the classic grey pixel plate for the currency instead of the golden
panel: a white outer edge, a thick black rounded border and a flat grey fill. */
.octane-catalog-bundle-price.octane-catalog-bundle-price--room {
padding: 3px 10px;
/* 1px black outer edge, then a 2px white ring, then the grey plate face. */
border: 1px solid #000000;
border-radius: 9px;
background: #b7b6ae;
box-shadow: inset 0 0 0 2px #ffffff, inset 0 6px 0 rgba(255, 255, 255, 0.25), inset 0 -4px 0 rgba(0, 0, 0, 0.12);
}
/* Gift + Buy share one line at the bottom of the bundle's left column. */
.octane-catalog-bundle-actions {
display: flex;
flex-direction: row;
gap: 4px;
}
.octane-catalog-bundle-actions > .octane-catalog-standard-button {
flex: 1 1 0;
width: auto !important;
min-width: 0 !important;
}
/* AIR info pages with an illustration (layout_info_loyalty_xml, layout_info_duckets_xml: 360 x 460); the views
set each layout's positions. */
.octane-catalog-layout-info-illustration {
position: relative;
width: 360px;
max-width: 100%;
height: 460px;
max-height: 100%;
overflow: hidden;
color: #000;
}
.octane-catalog-layout-info-illustration__description {
position: absolute;
overflow-x: hidden;
overflow-y: auto;
font-size: 12px;
line-height: 15px;
white-space: pre-line;
overflow-wrap: anywhere;
}
.octane-catalog-layout-info-illustration__description a {
color: inherit;
cursor: pointer;
text-decoration: underline;
}
.octane-catalog-layout-info-illustration__image {
position: absolute;
pointer-events: none;
image-rendering: pixelated;
}
/* AIR layout_info_rentables_xml, layout_info_recycler_xml, layout_monkey_xml (360 x 460). */
.octane-catalog-air-info {
position: relative;
width: 360px;
max-width: 100%;
height: 460px;
max-height: 100%;
overflow: hidden;
color: #000;
font-size: 12px;
line-height: 15px;
}
.octane-catalog-air-info__border {
position: absolute;
box-sizing: border-box;
border-style: solid;
border-width: 6px;
border-color: transparent;
border-image-source: var(--habbo-skin-border-white);
border-image-slice: 6 fill;
border-image-width: 6px;
border-image-repeat: stretch;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-catalog-air-info a {
color: inherit;
cursor: pointer;
text-decoration: underline;
}
.octane-catalog-air-info img {
image-rendering: pixelated;
}
/* info_rentables: border 17, 20 (328 x 425); the list 10, 9 inside it (309 x 407); rows 306 x 47 every 50 px. */
.octane-catalog-air-info.is-rentables .octane-catalog-air-info__border {
top: 20px;
left: 17px;
width: 328px;
height: 425px;
}
.octane-catalog-air-info__rules {
position: absolute;
top: 3px;
left: 4px;
width: 309px;
height: 407px;
overflow-x: hidden;
overflow-y: auto;
}
.octane-catalog-air-info__rule {
position: relative;
width: 306px;
height: 47px;
margin-bottom: 3px;
}
.octane-catalog-air-info__rule-icon {
position: absolute;
top: 3px;
left: 1px;
}
.octane-catalog-air-info__rule-text {
position: absolute;
top: 3px;
left: 31px;
width: 232px;
height: 44px;
overflow: hidden;
white-space: pre-line;
overflow-wrap: anywhere;
}
.octane-catalog-air-info__rule-pic {
position: absolute;
top: 1px;
left: 266px;
max-width: 40px;
max-height: 46px;
}
/* info_recycler (layout_info_recycler_xml), stretched over the catalog page: one box filled with AIR's 0xfbc362 (border
style 2), 10 px in from the page, with the Ecotron box image and the title (u_headline_medium) side by side and the
explanation under them, all in white as in AIR. */
.octane-catalog-air-info.is-recycler {
width: 100%;
max-width: none;
height: 100%;
max-height: none;
}
.octane-catalog-air-info.is-recycler .octane-catalog-air-info__border {
inset: 10px;
display: grid;
grid-template-columns: 57px minmax(0, 1fr);
grid-template-rows: 57px minmax(0, 1fr);
gap: 5px 6px;
padding: 10px 15px 10px 14px;
border: 1px solid #d9a443;
border-image-source: none;
border-radius: 6px;
background: #fbc362;
color: #fff;
}
.octane-catalog-air-info__recycler-teaser {
align-self: center;
justify-self: center;
max-width: 57px;
max-height: 57px;
}
.octane-catalog-air-info__recycler-title {
grid-column: 2;
align-self: center;
overflow: hidden;
font-family: 'Ubuntu Condensed', Ubuntu, Arial, sans-serif;
font-size: 16px;
font-weight: 700;
line-height: 19px;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
}
.octane-catalog-air-info__recycler-text {
grid-column: 1 / -1;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
white-space: pre-line;
overflow-wrap: anywhere;
}
.octane-catalog-air-info.is-recycler a {
color: inherit;
}
/* monkey: the teaser region 10, 20 (339 x 344) and the store region 10, 375 (339 x 80) are links. */
.octane-catalog-air-info__monkey-teaser,
.octane-catalog-air-info__monkey-special {
position: absolute;
left: 10px;
width: 339px;
padding: 0;
border: 0;
background: transparent;
cursor: pointer;
}
.octane-catalog-air-info__monkey-teaser {
top: 20px;
height: 344px;
}
.octane-catalog-air-info__monkey-special {
top: 375px;
height: 80px;
}
.octane-catalog-air-info__monkey-teaser img,
.octane-catalog-air-info__monkey-special img {
display: block;
max-width: 100%;
max-height: 100%;
}
/* AIR layout_trophies_xml with TrophyCatalogWidget, stretched over the catalog page: the description on top, the
preview takes the free height, then the metals, the inscription box and the purchase row, all full width. */
.octane-catalog-air-trophies {
display: flex;
flex-direction: column;
gap: 6px;
width: 100%;
height: 100%;
min-height: 0;
overflow: hidden;
color: #000;
font-size: 12px;
line-height: 15px;
}
.octane-catalog-air-trophies__description {
flex: 0 1 auto;
max-height: 145px;
overflow-x: hidden;
overflow-y: auto;
white-space: pre-line;
overflow-wrap: anywhere;
}
.octane-catalog-air-trophies__description a {
color: inherit;
text-decoration: underline;
}
.octane-catalog-air-trophies__preview {
position: relative;
display: flex;
flex: 1 1 135px;
align-items: center;
justify-content: center;
min-height: 135px;
background: #fff;
}
.octane-catalog-air-trophies__price {
position: absolute;
top: 6px;
right: 8px;
}
.octane-catalog-air-trophies__model {
position: absolute;
bottom: 4px;
display: flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
padding: 0;
border-style: solid;
/* ctlg_trophies ctlg_prevmodel_button / ctlg_nextmodel_button: container_button style 3, habbo_skin_button_shiny. */
border-width: 5px;
border-image-source: var(--habbo-skin-shiny);
border-image-slice: 5 fill;
border-image-width: 5px;
background: transparent;
color: #000000;
font-size: 12px;
cursor: pointer;
}
.octane-catalog-air-trophies__model:hover {
border-image-source: var(--habbo-skin-shiny-hover);
}
.octane-catalog-air-trophies__model:active {
border-image-source: var(--habbo-skin-shiny-pressed);
}
.octane-catalog-air-trophies__model:disabled {
border-image-source: var(--habbo-skin-shiny-disabled);
}
/* AIR keeps the buttons 95 px apart around the middle of the preview. */
.octane-catalog-air-trophies__model.is-previous {
left: calc(50% - 65px);
}
.octane-catalog-air-trophies__model.is-next {
left: calc(50% + 30px);
}
.octane-catalog-air-trophies__metals {
display: flex;
flex: none;
justify-content: center;
gap: 6px;
height: 36px;
}
.octane-catalog-air-trophies__metal {
width: 40px;
height: 32px;
padding: 0;
border: 2px solid #fff;
outline: 1px solid #8c8c8c;
cursor: pointer;
}
.octane-catalog-air-trophies__metal.is-selected {
outline: 2px solid #000;
}
.octane-catalog-air-trophies__inscription-label {
flex: none;
padding-left: 6px;
overflow: hidden;
font-size: 11px;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-air-trophies__inscription-label:empty {
display: none;
}
.octane-catalog-air-trophies__inscription {
flex: none;
box-sizing: border-box;
height: 83px;
padding: 6px;
border: 1px solid #8c8c8c;
border-radius: 3px;
background: #fff;
}
.octane-catalog-air-trophies__inscription textarea {
width: 100%;
height: 100%;
padding: 0;
border: 0;
outline: 0;
background: transparent;
font: inherit;
resize: none;
}
.octane-catalog-air-trophies__purchase {
display: flex;
flex: none;
gap: 6px;
}
.octane-catalog-air-trophies__purchase > .octane-catalog-standard-button {
flex: 1 1 0;
}
/* AIR layout_spaces_new_xml with SpacesNewCatalogWidget, stretched over the catalog page: the room preview takes the
free height, then the tabs, the item grid and the purchase row, all full width. */
.octane-catalog-air-spaces {
display: flex;
flex-direction: column;
gap: 5px;
width: 100%;
height: 100%;
min-height: 0;
overflow: hidden;
color: #000;
font-size: 12px;
}
.octane-catalog-air-spaces__preview {
position: relative;
flex: 1 1 240px;
min-height: 160px;
overflow: hidden;
}
.octane-catalog-air-spaces__tabs {
display: flex;
flex: none;
height: 22px;
}
.octane-catalog-air-spaces__tab {
flex: 1 1 0;
height: 21px;
padding: 0 4px;
border-style: solid;
border-width: 3px;
border-image-source: var(--habbo-skin-button);
border-image-slice: 3 fill;
border-image-width: 3px;
background: transparent;
color: #111;
font-size: 12px;
line-height: 15px;
cursor: pointer;
}
.octane-catalog-air-spaces__tab:hover {
border-image-source: var(--habbo-skin-button-hover);
}
.octane-catalog-air-spaces__tab.is-active {
border-image-source: var(--habbo-skin-button-pressed);
font-weight: 700;
}
.octane-catalog-air-spaces__grid {
flex: none;
box-sizing: border-box;
height: 155px;
padding: 2px;
overflow: hidden;
border: 1px solid #b6b6b6;
border-radius: 3px;
background: #fff;
}
.octane-catalog-air-spaces__grid > * {
height: 100%;
}
.octane-catalog-air-spaces__purchase {
display: flex;
flex: none;
align-items: center;
gap: 6px;
height: 30px;
}
.octane-catalog-air-spaces__name {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
}
/* AIR layout_single_bundle_xml, stretched over the catalog page: the description on top, the teaser (with the add-on
badge and the main product's price on it) on the left next to the special text and the bundle grid, then the
footer box and the purchase row, all full width. The grid takes the free height. */
.octane-catalog-air-bundle {
display: grid;
grid-template-columns: minmax(157px, 45%) minmax(0, 1fr);
grid-template-rows: auto auto minmax(0, 1fr) auto auto;
grid-template-areas:
'description description'
'teaser special'
'teaser grid'
'footer footer'
'purchase purchase';
gap: 5px 8px;
width: 100%;
height: 100%;
min-height: 0;
overflow: hidden;
color: #000;
font-size: 12px;
line-height: 15px;
}
.octane-catalog-air-bundle a {
color: inherit;
text-decoration: underline;
}
.octane-catalog-air-bundle__description {
grid-area: description;
max-height: 62px;
padding: 0 6px;
overflow-y: auto;
white-space: pre-line;
}
.octane-catalog-air-bundle__special {
grid-area: special;
max-height: 45px;
overflow-y: auto;
white-space: pre-line;
}
.octane-catalog-air-bundle__teaser {
grid-area: teaser;
width: 100%;
height: 100%;
min-height: 0;
object-fit: contain;
object-position: top left;
}
.octane-catalog-air-bundle__addon {
position: relative;
grid-area: teaser;
align-self: start;
justify-self: start;
width: 40px;
height: 40px;
margin: 52px 0 0 6px;
}
/* The main product and its price as one tag on the teaser's top-left corner, readable over any picture. */
.octane-catalog-air-bundle__price {
position: relative;
z-index: 1;
grid-area: teaser;
align-self: start;
justify-self: start;
display: flex;
align-items: center;
gap: 6px;
box-sizing: border-box;
height: 40px;
margin: 6px 0 0 6px;
padding: 3px 8px 3px 4px;
border: 1px solid #8c8c8c;
border-radius: 4px;
background: rgba(255, 255, 255, 0.92);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
font-weight: 700;
}
.octane-catalog-air-bundle__price img {
max-width: 32px;
max-height: 32px;
image-rendering: pixelated;
}
/* CatalogSimplePriceWidgetView brings its own grey box; the tag is the box here. */
.octane-catalog-air-bundle__price > div {
padding: 0;
background: transparent;
}
.octane-catalog-air-bundle__grid {
grid-area: grid;
box-sizing: border-box;
min-height: 0;
padding: 3px 4px;
overflow-x: hidden;
overflow-y: auto;
border: 1px solid #b6b6b6;
border-radius: 3px;
background: #fff;
}
.octane-catalog-air-bundle__footer {
grid-area: footer;
display: flex;
align-items: center;
gap: 9px;
box-sizing: border-box;
height: 40px;
padding: 5px 10px;
}
.octane-catalog-air-bundle__footer img {
max-width: 32px;
max-height: 30px;
}
.octane-catalog-air-bundle__footer-text {
flex: 1 1 auto;
min-width: 0;
max-height: 30px;
overflow: hidden;
}
.octane-catalog-air-bundle__purchase {
grid-area: purchase;
display: flex;
gap: 6px;
}
.octane-catalog-air-bundle__purchase > .octane-catalog-standard-button {
flex: 1 1 0;
}
/* Fixed-height rows from the top, so a short bundle doesn't stretch its tiles over the box. */
.octane-catalog-air-bundle__items {
height: auto;
grid-template-rows: none !important;
grid-auto-rows: 48px;
align-content: start;
}
/* AIR layout_roomads_xml, stretched over the catalog page: every field full width, the description box takes the
free height, the price and the purchase button share the bottom row. */
.octane-catalog-air-roomads {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
grid-template-rows: auto auto auto auto auto minmax(60px, 1fr) auto auto auto;
grid-template-areas:
'text text'
'categories categories'
'name-label name-label'
'name name'
'description-label description-label'
'description description'
'room-label room-label'
'rooms rooms'
'price purchase';
gap: 4px 8px;
width: 100%;
height: 100%;
min-height: 0;
padding: 4px 6px 0;
box-sizing: border-box;
overflow: hidden;
color: #000;
font-size: 12px;
}
.octane-catalog-air-roomads__text {
grid-area: text;
max-height: 42px;
margin-bottom: 4px;
overflow: hidden;
font-size: 13px;
font-weight: 700;
line-height: 14px;
}
.octane-catalog-air-roomads__categories {
grid-area: categories;
}
.octane-catalog-air-roomads__rooms {
grid-area: rooms;
}
.octane-catalog-air-roomads__categories > *,
.octane-catalog-air-roomads__rooms > *,
.octane-catalog-air-roomads__name > * {
width: 100%;
}
.octane-catalog-air-roomads__label {
margin-top: 4px;
font-size: 11px;
line-height: 15px;
}
.octane-catalog-air-roomads__label.is-name {
grid-area: name-label;
}
.octane-catalog-air-roomads__label.is-description {
grid-area: description-label;
}
.octane-catalog-air-roomads__label.is-room {
grid-area: room-label;
}
.octane-catalog-air-roomads__name {
grid-area: name;
}
.octane-catalog-air-roomads__description {
grid-area: description;
box-sizing: border-box;
min-height: 0;
padding: 4px 5px;
border: 1px solid #8c8c8c;
border-radius: 3px;
background: #fff;
font: inherit;
resize: none;
}
.octane-catalog-air-roomads__price {
grid-area: price;
align-self: center;
justify-self: end;
}
.octane-catalog-air-roomads__purchase {
grid-area: purchase;
display: flex;
align-items: center;
min-width: 160px;
padding: 6px 0;
}
.octane-catalog-air-roomads__purchase > * {
flex: 1 1 auto;
}
/* AIR layout_frontpage_featured_xml, stretched over the catalog page: the first item as the 184 px column on the left,
the featured list beside it taking the free height, the voucher box under the list. */
.octane-catalog-air-frontpage {
display: grid;
grid-template-columns: 184px 360px;
grid-template-rows: 392px 61px;
grid-template-areas:
'first list'
'first voucher';
gap: 7px 8px;
width: 552px;
height: 460px;
margin: 0 auto;
overflow: hidden;
color: #000;
}
/* layout_frontpage_featured: AIR's promo pictures are made at the slot size (184 x 460, 356 x 126); a hotel's own
pictures often are not, so they cover the slot, centred, instead of leaving white around them. */
.octane-catalog-air-frontpage__first,
.octane-catalog-air-frontpage__item {
position: relative;
display: block;
padding: 0;
overflow: hidden;
border: 0;
background-color: #0e3f52;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
image-rendering: var(--octane-pixel-art, pixelated);
cursor: pointer;
text-align: left;
}
.octane-catalog-air-frontpage__first {
grid-area: first;
width: 184px;
height: 460px;
}
.octane-catalog-air-frontpage__list {
grid-area: list;
display: flex;
flex-direction: column;
gap: 4px;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
}
.octane-catalog-air-frontpage__item {
flex: 0 0 126px;
width: 356px;
height: 126px;
}
/* text_container: a dark bar 5 px in from the bottom, as wide as its ubuntu_condensed_title in white. */
.octane-catalog-air-frontpage__title {
position: absolute;
bottom: 3px;
left: 5px;
max-width: calc(100% - 10px);
box-sizing: border-box;
padding: 5px;
overflow: hidden;
border-radius: 3px;
background: rgba(0, 0, 0, 0.6);
color: #ffffff !important;
font-family: 'Ubuntu Condensed', Ubuntu, Arial, sans-serif;
font-size: 16px;
font-weight: 700;
line-height: 19px;
white-space: normal;
text-overflow: ellipsis;
}
/* bgBorder 345 x 61 at (200, 399), colour 0x51bbee: the label (u_regular) at (10, 6), the 216 x 25 input box at
(10, 25) and the 62 x 22 redeem button at (274, 25). */
.octane-catalog-air-frontpage__voucher {
grid-area: voucher;
position: relative;
box-sizing: border-box;
width: 345px;
height: 61px;
margin-left: 8px;
border-radius: 6px;
background: #51bbee;
}
.octane-catalog-air-frontpage__voucher-label {
position: absolute;
top: 6px;
left: 10px;
width: 272px;
height: 17px;
overflow: hidden;
color: #000000;
font-size: 12px;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-air-frontpage__voucher > .flex {
position: absolute;
top: 25px;
left: 10px;
right: 9px;
align-items: center;
justify-content: space-between;
}
.octane-catalog-air-frontpage__voucher input {
width: 216px !important;
height: 25px !important;
min-height: 25px !important;
padding: 0 6px !important;
border: 1px solid #7b7b7b !important;
border-radius: 6px !important;
background: #ffffff !important;
}
.octane-catalog-air-frontpage__voucher .octane-catalog-redeem-button {
width: auto;
min-width: 62px;
white-space: nowrap;
height: 22px;
min-height: 22px !important;
padding: 0 4px !important;
font-size: 12px !important;
}
/* Phones: AIR's fixed 552 x 460 block does not fit, so the pictures stack and take the width. */
@media (max-width: 640px), (orientation: landscape) and (max-height: 520px) {
.octane-catalog-air-frontpage {
grid-template-columns: minmax(0, 1fr);
grid-template-rows: 200px auto 61px;
grid-template-areas:
'first'
'list'
'voucher';
width: 100%;
height: auto;
}
.octane-catalog-air-frontpage__first,
.octane-catalog-air-frontpage__item,
.octane-catalog-air-frontpage__voucher {
width: 100%;
margin-left: 0;
}
.octane-catalog-air-frontpage__first {
height: 200px;
}
}
/* AIR layout_recycler_xml + recyclerWidget_xml. The Furnimatic is pixel art at AIR's sizes, so it is not stretched:
the title and machine are centred at the top, the widget (status, button, slots, dial) is centred at the bottom of
the catalog page, whatever its size. Offsets are AIR's, measured from the middle of its 360 px page. */
.octane-catalog-air-recycler {
position: relative;
width: 100%;
height: 100%;
min-height: 0;
overflow: hidden;
color: #000;
font-size: 12px;
}
.octane-catalog-air-recycler img {
image-rendering: pixelated;
}
.octane-catalog-air-recycler__title {
position: absolute;
top: 5px;
left: calc(50% - 129px);
}
.octane-catalog-air-recycler__machine {
position: absolute;
top: 58px;
left: calc(50% - 99px);
}
.octane-catalog-air-recycler__widget {
position: absolute;
bottom: 0;
left: calc(50% - 180px);
width: 360px;
height: 202px;
overflow: hidden;
}
/* AIR shows the status in the catalog header; here it sits beside the button, clear of the machine. */
.octane-catalog-air-recycler__status {
position: absolute;
top: 41px;
left: 220px;
box-sizing: border-box;
width: 130px;
height: 30px;
padding: 1px 4px;
overflow: hidden;
border-radius: 3px;
background: rgba(255, 255, 255, 0.9);
font-size: 10px;
line-height: 13px;
}
.octane-catalog-air-recycler .octane-catalog-air-recycler__recycle {
position: absolute;
top: 41px;
left: 19px;
width: 194px;
height: 30px;
}
.octane-catalog-air-recycler__frame {
position: absolute;
top: 85px;
height: 115px;
background:
url('../../assets/images/catalog/air/recycler/container-left.png') left top no-repeat,
url('../../assets/images/catalog/air/recycler/container-right.png') right top no-repeat,
url('../../assets/images/catalog/air/recycler/container-slice.png') left top repeat-x;
background-origin: border-box;
}
.octane-catalog-air-recycler__frame.is-slots {
left: 16px;
width: 185px;
}
.octane-catalog-air-recycler__frame.is-indicator {
left: 214px;
width: 123px;
}
.octane-catalog-air-recycler__slots {
position: absolute;
top: 16px;
left: 21px;
width: 145px;
height: 124px;
}
.octane-catalog-air-recycler__slot {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
width: 34px;
height: 34px;
padding: 0;
border: 0;
background: url('../../assets/images/catalog/air/recycler/slot-bg.png') no-repeat;
cursor: pointer;
}
.octane-catalog-air-recycler__slot:disabled {
cursor: default;
}
.octane-catalog-air-recycler__slot img {
max-width: 30px;
max-height: 30px;
}
.octane-catalog-air-recycler__dial {
position: absolute;
top: 2px;
left: 15px;
}
.octane-catalog-air-recycler__pointer {
position: absolute;
top: 43px;
left: 37px;
width: 50px;
height: 50px;
}
.octane-catalog-air-recycler__pointer img {
position: absolute;
inset: 0;
}
.octane-catalog-air-recycler__closed {
position: absolute;
inset: 0;
}
.octane-catalog-air-recycler__bubble {
position: absolute;
top: 98px;
left: 107px;
box-sizing: border-box;
width: 155px;
min-height: 60px;
padding: 6px 8px;
border: 1px solid #000;
border-radius: 6px;
background: #fff;
font-size: 11px;
line-height: 14px;
}
.octane-catalog-air-recycler__frank {
position: absolute;
top: 99px;
left: 235px;
}
.octane-catalog-air-recycler__chooser {
position: absolute;
top: 58px;
left: calc(50% - 160px);
z-index: 5;
display: flex;
flex-direction: column;
gap: 4px;
box-sizing: border-box;
width: 320px;
height: 200px;
padding: 8px;
border-style: solid;
border-width: 6px;
border-color: transparent;
border-image-source: var(--habbo-skin-border-white);
border-image-slice: 6 fill;
border-image-width: 6px;
border-image-repeat: stretch;
}
.octane-catalog-air-recycler__chooser-head {
display: flex;
align-items: center;
justify-content: space-between;
font-weight: 700;
}
.octane-catalog-air-recycler__chooser-close {
padding: 0 4px;
border: 0;
background: transparent;
font-size: 14px;
cursor: pointer;
}
.octane-catalog-air-recycler__choices {
display: flex;
flex-wrap: wrap;
gap: 3px;
overflow-y: auto;
}
.octane-catalog-air-recycler__choice {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
padding: 0;
border: 1px solid #b6b6b6;
border-radius: 3px;
background: #fff;
cursor: pointer;
}
.octane-catalog-air-recycler__choice img {
max-width: 36px;
max-height: 36px;
}
/* AIR layout_recycler_prizes_xml + recyclerPrizesWidgetLevelItem_xml, stretched over the catalog page: the product
view on top, under it the scrolling list of levels, all full width. */
.octane-catalog-air-prizes {
display: flex;
flex-direction: column;
gap: 4px;
width: 100%;
height: 100%;
min-height: 0;
color: #000;
font-size: 12px;
}
.octane-catalog-air-prizes__view {
position: relative;
flex: 0 0 240px;
height: 240px;
overflow: hidden;
background: #fff;
}
.octane-catalog-air-prizes__teaser {
display: block;
max-width: 100%;
max-height: 240px;
margin: 0 auto;
}
.octane-catalog-air-prizes__preview {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
}
.octane-catalog-air-prizes__name {
position: absolute;
top: 16px;
right: 10px;
left: 10px;
overflow: hidden;
font-weight: 700;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-air-prizes__list {
flex: 1 1 auto;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
}
.octane-catalog-air-prizes__level {
box-sizing: border-box;
width: 100%;
margin-bottom: 4px;
padding: 5px;
border: 1px solid #b6b6b6;
border-radius: 3px;
background: #fff;
}
.octane-catalog-air-prizes__level-head {
display: flex;
align-items: center;
gap: 3px;
height: 23px;
border-bottom: 1px solid #d0d0d0;
}
.octane-catalog-air-prizes__star {
font-size: 15px;
line-height: 17px;
text-shadow: 0 0 1px #000;
}
.octane-catalog-air-prizes__items {
display: flex;
flex-wrap: wrap;
gap: 2px;
padding: 5px;
}
.octane-catalog-air-prizes__item {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 42px;
height: 42px;
padding: 0;
overflow: hidden;
border: 1px solid transparent;
border-radius: 3px;
background: transparent;
cursor: pointer;
}
/* The furni icon at its own size; one larger than the tile shrinks to fit instead of being cut off. */
.octane-catalog-air-prizes__item img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.octane-catalog-air-prizes__item.is-selected {
border-color: #3a7ac2;
}
.octane-catalog-air-prizes__item small {
position: absolute;
right: 1px;
bottom: 0;
font-size: 9px;
}
/* AIR layout_guild_frontpage_xml, stretched over the catalog page: the title and description on top, the
start-a-guild button centred under them, the teaser at the bottom. */
.octane-catalog-air-info.is-guild-frontpage {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
box-sizing: border-box;
width: 100%;
max-width: none;
height: 100%;
max-height: none;
padding: 20px 15px 0;
}
.octane-catalog-air-info__guild-title {
align-self: stretch;
flex: none;
overflow: hidden;
font-size: 14px;
font-weight: 700;
line-height: 18px;
}
.octane-catalog-air-info__guild-text {
align-self: stretch;
flex: 0 1 auto;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
white-space: pre-line;
overflow-wrap: anywhere;
}
.octane-catalog-air-info .octane-catalog-air-info__guild-buy {
flex: none;
width: 213px;
height: 28px;
}
.octane-catalog-air-info__guild-teaser {
flex: none;
max-width: 100%;
max-height: 163px;
margin-top: auto;
}
/* AIR layout_builders_club_frontpage / _addons / _loyalty, stretched over the catalog page: the description and the
offer rows on the left, the Builders Club art (bc_top.png, bc_bottom.png) on the right of add-ons and loyalty. */
.octane-catalog-air-bc {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
grid-template-rows: auto minmax(0, 1fr);
grid-template-areas:
'description art'
'list art';
gap: 8px 10px;
box-sizing: border-box;
width: 100%;
height: 100%;
min-height: 0;
padding: 10px 0 0 15px;
overflow: hidden;
color: #000;
font-size: 12px;
line-height: 15px;
}
.octane-catalog-air-bc.is-frontpage {
grid-template-columns: minmax(0, 1fr);
grid-template-areas:
'description'
'list';
padding-right: 15px;
}
.octane-catalog-air-bc a {
color: inherit;
text-decoration: underline;
}
.octane-catalog-air-bc__description {
grid-area: description;
max-height: 200px;
overflow-x: hidden;
overflow-y: auto;
white-space: pre-line;
overflow-wrap: anywhere;
}
.octane-catalog-air-bc__list {
grid-area: list;
display: flex;
flex-direction: column;
gap: 12px;
min-height: 0;
padding: 0 2px 6px 0;
overflow-x: hidden;
overflow-y: auto;
}
.octane-catalog-air-bc__item {
flex: none;
box-sizing: border-box;
padding: 5px;
border-radius: 4px;
background: #d7d7cf;
}
.octane-catalog-air-bc__item-head {
display: flex;
align-items: center;
gap: 10px;
height: 25px;
padding: 0 8px;
border-radius: 3px;
background: #afafa9;
color: #fff;
font-family: 'Ubuntu Condensed', Ubuntu, Arial, sans-serif;
font-size: 15px;
font-weight: 700;
}
.octane-catalog-air-bc__item-head span {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.octane-catalog-air-bc__item-head img {
width: 15px;
height: 15px;
image-rendering: pixelated;
}
.octane-catalog-air-bc__item-body {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 7px 0 0 4px;
}
.octane-catalog-air-bc__price {
display: flex;
align-items: center;
gap: 3px;
font-size: 13px;
font-weight: 700;
}
.octane-catalog-air-bc__price small {
margin-left: 6px;
font-size: 11px;
font-weight: 400;
}
.octane-catalog-air-bc__buy {
min-width: 142px;
height: 35px;
padding: 0 10px;
border: 1px solid #077a9c;
border-radius: 4px;
background: linear-gradient(#2ab3dc, #0a9bc5);
color: #fff;
font-weight: 700;
cursor: pointer;
}
.octane-catalog-air-bc__buy:hover:not(:disabled) {
background: linear-gradient(#3cc2ea, #10a7d3);
}
.octane-catalog-air-bc__buy.is-confirm {
border-color: #b57b00;
background: linear-gradient(#ffcc4d, #f0a800);
color: #000;
}
.octane-catalog-air-bc__buy:disabled {
border-color: #9a9a94;
background: #c9c9c2;
color: #5c5c58;
cursor: default;
}
.octane-catalog-air-bc__buy.is-short:disabled {
border-color: #a81a12;
background: #e9a49e;
color: #6b0c07;
}
.octane-catalog-air-bc__warning {
color: #cc0000;
font-weight: 700;
}
.octane-catalog-air-bc__art {
grid-area: art;
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: space-between;
min-height: 0;
overflow: hidden;
}
.octane-catalog-air-bc__art img {
max-width: 111px;
image-rendering: pixelated;
}
