index.css 56.4 Ko
Télécharger le fichier
@import 'tailwindcss';
@import url('https://fonts.googleapis.com/css2?family=Cherry+Bomb+One&family=Pixelify+Sans:wght@400..700&family=Vampiro+One&display=swap');
@config "../../tailwind.config.js";
@layer base {
/* Habbo text fields keep their look while typing: no focus ring and no focus border colour (undoes
@tailwindcss/forms). The caret still shows where you type. */
[type='text']:focus,
[type='email']:focus,
[type='url']:focus,
[type='password']:focus,
[type='number']:focus,
[type='date']:focus,
[type='datetime-local']:focus,
[type='month']:focus,
[type='search']:focus,
[type='tel']:focus,
[type='time']:focus,
[type='week']:focus,
[multiple]:focus,
textarea:focus,
select:focus {
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
border-color: #6b7280;
}
}
@theme {
--animate-pulse-glow: pulseGlow 1.2s ease-in-out infinite;
--animate-pulse-glow-red: pulseGlowRed 1.2s ease-in-out infinite;
--animate-drop-settle: dropSettle 0.3s ease-out;
--animate-pulse-glow-gold: pulseGlowGold 1.5s ease-in-out infinite;
}
@keyframes pulseGlow {
0%, 100% { box-shadow: 0 0 6px rgba(59, 130, 246, 0.3); }
50% { box-shadow: 0 0 14px rgba(59, 130, 246, 0.6); }
}
@keyframes pulseGlowRed {
0%, 100% { box-shadow: 0 0 6px rgba(239, 68, 68, 0.3); }
50% { box-shadow: 0 0 14px rgba(239, 68, 68, 0.6); }
}
@keyframes dropSettle {
0% { transform: scale(1.15); }
100% { transform: scale(1); }
}
@keyframes pulseGlowGold {
0%, 100% { box-shadow: 0 0 6px rgba(255, 193, 7, 0.4); }
50% { box-shadow: 0 0 14px rgba(255, 193, 7, 0.7); }
}
@font-face {
font-family: Ubuntu;
src: url("@/assets/webfonts/Ubuntu-C.ttf");
}
@font-face {
font-family: UbuntuRegular;
src: url("@/assets/webfonts/Ubuntu.ttf");
}
@font-face {
font-family: UbuntuCondensed;
src: local("Ubuntu Condensed"), local("Ubuntu");
}
:root {
--octane-pixel-art: auto;
}
@media (resolution: 1dppx), (resolution: 2dppx), (resolution: 3dppx) {
:root {
--octane-pixel-art: pixelated;
}
}
html,
body {
padding: 0;
width: 100%;
height: 100%;
min-height: 100%;
overflow: hidden;
background-color: #000;
-webkit-user-select: none;
user-select: none;
overscroll-behavior: none;
}
#root {
width: var(--octane-app-width, 100vw);
height: var(--octane-app-height, 100vh);
min-height: var(--octane-app-height, 100vh);
overflow: hidden;
}
.octane-app-root {
position: fixed;
inset: 0;
width: var(--octane-app-width, 100vw) !important;
height: var(--octane-app-height, 100vh) !important;
min-height: var(--octane-app-height, 100vh) !important;
overflow: hidden !important;
overscroll-behavior: none;
}
@supports (height: 100dvh) {
html,
body,
#root,
.octane-app-root {
height: var(--octane-app-height, 100dvh) !important;
min-height: var(--octane-app-height, 100dvh) !important;
}
}
.image-rendering-pixelated {
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-room-touch-feedback {
position: fixed;
z-index: 35;
width: 34px;
height: 18px;
margin-left: -17px;
margin-top: -9px;
border-radius: 50%;
pointer-events: none;
border: 2px solid rgba(255, 255, 255, 0.9);
background: rgba(255, 255, 255, 0.18);
transform: scale(0.35);
opacity: 0.9;
animation: octaneRoomTouchFeedback 0.42s ease-out forwards;
}
@keyframes octaneRoomTouchFeedback {
to {
transform: scale(1.15);
opacity: 0;
}
}
*,
*:focus,
*:hover {
@apply outline-0;
}
@layer components {
@keyframes blink {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
@keyframes scale {
0%,
100% {
transform: scale(1);
}
50% {
transform: scale(1.5);
}
}
.dot {
position: absolute;
width: 2px;
height: 2px;
background-color: white;
animation: blink 2s infinite;
}
.star {
position: absolute;
width: 10px;
height: 10px;
color: #ffffff;
&:after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: currentColor;
width: 5px;
height: 5px;
-webkit-animation: blink 1s linear infinite;
animation: blink 1s linear infinite;
}
.star-part {
position: absolute;
background-color: currentColor;
&:nth-child(1) {
top: 0;
left: 50%;
width: 1px;
height: 100%;
transform: translateX(-50%);
}
&:nth-child(2) {
top: 50%;
left: 0;
width: 100%;
height: 1px;
transform: translateY(-50%);
}
}
}
.toolbar {
@apply relative;
background: rgb(33, 33, 33);
background: linear-gradient(0deg, rgba(33, 33, 33, 0.9) 0%, rgba(51, 51, 51, 0.9) 100%);
&::before {
content: "";
display: block;
position: absolute;
top: 1px;
left: 0;
right: 0;
height: 2px;
background-color: rgba(255, 255, 255, 0.05);
}
&::after {
content: "";
display: block;
position: absolute;
bottom: 2px;
left: 0;
right: 0;
height: 2px;
background-color: rgba(0, 0, 0, 0.1);
}
}
.avatar-image {
@apply pointer-events-none relative h-[130px] w-[90px] bg-position-[center_-8px] bg-no-repeat;
}
}
/* The fit variant stretches to its positioned parent via absolute inset-0.
The components-layer .avatar-image above pins a fixed 90x130 box, and with
inset-0 the explicit size wins the over-constrained resolution — anchoring
the image to the tile's TOP-LEFT corner instead of filling it. Unlayered
so it beats the layered rule; auto lets inset-0 (and per-surface bottom
offsets like the catalog price strip) size the box. */
.avatar-image.avatar-image-fit {
width: auto;
height: auto;
}
.unique-item {
.unique-bg-override {
@apply z-2 bg-center bg-no-repeat;
}
&:before {
@apply absolute z-1 size-full bg-center bg-no-repeat [content:""];
background-image: url("@/assets/images/unique/grid-bg.png");
}
&:after {
@apply absolute bottom-0 z-4 size-full bg-center bg-no-repeat [content:""];
background-image: url("@/assets/images/unique/grid-bg-glass.png");
}
&.sold-out:after {
@apply bg-center bg-no-repeat;
background-image: url("@/assets/images/unique/grid-bg-sold-out.png"),
url("@/assets/images/unique/grid-bg-glass.png");
}
.unique-item-counter {
background-image: url("@/assets/images/unique/grid-count-bg.png");
@apply bottom-px z-3 mx-auto my-0 flex h-[9px] w-full items-center justify-center bg-center bg-no-repeat;
}
}
.unique-sold-out-blocker {
width: 364px;
height: 30px;
background: url("@/assets/images/unique/catalog-info-sold-out.png");
div {
float: right;
width: 140px;
text-align: center;
font-weight: bold;
margin-top: 5px;
margin-right: 17px;
color: #000;
}
}
.unique-compact-plate {
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: center;
right: 16px;
width: 34px;
height: 37px;
background: url("@/assets/images/unique/inventory-info-amount-bg.png");
div {
display: flex;
justify-content: center;
align-items: center;
height: 9.5px;
}
}
.unique-complete-plate {
box-sizing: border-box;
width: 170px;
height: 29px;
background: url("@/assets/images/unique/catalog-info-amount-bg.png") no-repeat center;
z-index: 1;
padding-top: 4px;
.plate-container {
margin-left: 45px;
width: 100px;
font-size: 10px;
line-height: 10px;
color: black;
> :first-child {
margin-bottom: 2px;
}
}
}
.limited-edition-number {
display: inline-block;
outline: 0;
height: 5px;
margin-right: 1px;
background-image: url("@/assets/images/unique/numbers.png");
background-repeat: no-repeat;
&:last-child {
margin-right: 0px;
}
&.n-0 {
width: 4px;
background-position: -1px 0px;
}
&.n-1 {
width: 2px;
background-position: -6px 0px;
}
&.n-2 {
width: 4px;
background-position: -9px 0px;
}
&.n-3 {
width: 4px;
background-position: -14px 0px;
}
&.n-4 {
width: 4px;
background-position: -19px 0px;
}
&.n-5 {
width: 4px;
background-position: -24px 0px;
}
&.n-6 {
width: 4px;
background-position: -29px 0px;
}
&.n-7 {
width: 4px;
background-position: -34px 0px;
}
&.n-8 {
width: 4px;
background-position: -39px 0px;
}
&.n-9 {
width: 4px;
background-position: -44px 0px;
}
}
.layout-grid-item {
height: var(--octane-grid-column-min-height, unset);
background-position: center;
background-repeat: no-repeat;
background-color: #cdd3d9;
border: 2px solid #c4cabf;
border-radius: 6px;
}
.layout-grid-item.is-grid-active {
border-color: #aeb7aa;
}
.octane-friends-spritesheet {
background: url('@/assets/images/friends/friends-spritesheet.png') transparent no-repeat;
&.icon-friendbar-visit {
width: 21px;
height: 21px;
background-position: -38px -5px;
}
&.icon-heart {
width: 16px;
height: 14px;
background-position: -5px -67px;
}
&.icon-new-message {
width: 14px;
height: 14px;
background-position: -96px -53px;
}
&.icon-none {
width: 16px;
height: 14px;
background-position: -31px -67px;
}
&.icon-profile {
width: 21px;
height: 21px;
background-position: -5px -36px;
}
&.icon-profile-sm {
width: 13px;
height: 11px;
background-position: -51px -91px;
&:hover {
width: 13px;
height: 11px;
background-position: -74px -91px;
}
}
&.icon-smile {
width: 16px;
height: 14px;
background-position: -57px -67px;
}
&.icon-warning {
width: 23px;
height: 21px;
background-position: -5px -5px;
}
&.icon-accept {
width: 13px;
height: 14px;
background-position: -5px -91px;
}
&.icon-add {
width: 16px;
height: 15px;
background-position: -69px -31px;
}
&.icon-bobba {
width: 16px;
height: 14px;
background-position: -96px -5px;
}
&.icon-chat {
width: 17px;
height: 16px;
background-position: -69px -5px;
}
&.icon-deny {
width: 13px;
height: 14px;
background-position: -28px -91px;
}
&.icon-follow {
width: 16px;
height: 14px;
background-position: -96px -29px;
}
&.icon-friendbar-chat {
width: 20px;
height: 21px;
background-position: -36px -36px;
}
}
.fs-custom {
font-size: var(--font-size, 16px);
}
/* -------------------------------------------------------------------------- */
/* Tooltip. habbo_skin_tooltip.xml cuts a 6px-corner bubble out of */
/* habbo_blue_skin (x 0-13, y 49-71: #232323 at 90%); text is u_tool_tip, */
/* Ubuntu 11 white. HintManager.as parks it 10px above or below the target, */
/* slides it in and bobs it 5px on |sin(t * 0.003)|, i.e. about once a second. */
/* -------------------------------------------------------------------------- */
.octane-tooltip-positioner {
z-index: 9999;
pointer-events: none;
}
.octane-tooltip {
box-sizing: border-box;
max-width: 260px;
padding: 0 1px;
border: 6px solid transparent;
border-image: url("@/assets/images/habbo-skin/slices/tooltip-blue.png") 6 fill / 6px stretch;
image-rendering: pixelated;
color: #ffffff;
font-family: Ubuntu, sans-serif;
font-size: 11px;
font-weight: 400;
line-height: 13px;
text-align: center;
white-space: pre-line;
pointer-events: none;
user-select: none;
}
.octane-tooltip[data-side='top'] {
animation: octane-tooltip-in-above 120ms ease-out, octane-tooltip-bob-above 1050ms ease-in-out 120ms infinite;
}
.octane-tooltip[data-side='bottom'] {
animation: octane-tooltip-in-below 120ms ease-out, octane-tooltip-bob-below 1050ms ease-in-out 120ms infinite;
}
@keyframes octane-tooltip-in-above {
from { opacity: 0; transform: translateY(-30px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes octane-tooltip-in-below {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes octane-tooltip-bob-above {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-5px); }
}
@keyframes octane-tooltip-bob-below {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(5px); }
}
@media (prefers-reduced-motion: reduce) {
.octane-tooltip[data-side='top'],
.octane-tooltip[data-side='bottom'] {
animation: none;
}
}
.octane-wired {
width: min(300px, calc(100vw - 16px));
min-width: 0;
max-width: calc(100vw - 16px);
background: #efefef;
border: 1px solid #8d8d8d !important;
border-radius: 6px !important;
box-shadow: inset 0 0 0 1px #fff !important;
color: #000;
outline: none !important;
overflow: hidden;
.octane-wired__header {
min-height: 21px !important;
max-height: 21px !important;
position: absolute !important;
inset: 0 0 auto 0;
z-index: 3;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
padding: 0 !important;
pointer-events: auto;
.octane-card-title {
display: block;
color: #000 !important;
font-size: 11px !important;
font-weight: 700 !important;
line-height: 21px;
text-align: center;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
pointer-events: none;
}
> .flex::before {
content: none;
}
> .flex::after {
content: none;
}
.octane-card-close-button {
right: 6px !important;
width: 18px;
height: 18px;
min-width: 18px;
border: 1px solid #777;
border-radius: 5px;
background: linear-gradient(180deg, #f9f9f9 0%, #cacaca 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9);
}
.octane-card-close-button::before,
.octane-card-close-button::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
width: 10px;
height: 2px;
border-radius: 2px;
background: #6a6a6a;
margin: 0;
transform-origin: center;
}
.octane-card-close-button::before {
transform: translate(-50%, -50%) rotate(45deg);
}
.octane-card-close-button::after {
transform: translate(-50%, -50%) rotate(-45deg);
}
}
.octane-wired__content {
position: relative;
background: #efefef !important;
border: 0 !important;
box-shadow: none !important;
padding: 0 !important;
gap: 0 !important;
overflow: visible !important;
}
.octane-wired__body {
display: flex;
flex-direction: column;
padding: 8px 10px 10px;
gap: 6px;
font-size: 12px;
line-height: 1.2;
}
.octane-wired__section {
display: flex;
flex-direction: column;
gap: 5px;
}
.octane-wired__summary {
position: relative;
min-height: 56px;
flex-direction: row;
align-items: center;
gap: 10px;
padding: 22px 10px 7px 12px;
background: linear-gradient(180deg, #e5e5e5 0%, #d7d7d7 100%);
overflow: hidden;
color: #000;
}
.octane-wired__summary-bg {
position: absolute;
width: auto;
height: auto;
top: 50%;
z-index: 0;
pointer-events: none;
user-select: none;
-webkit-user-drag: none;
}
.octane-wired__summary-bg--left {
left: 50%;
transform: translate(-150%, -50%);
opacity: 0.45;
}
.octane-wired__summary-bg--right {
left: 50%;
top: 72%;
transform: translate(-46%, -50%);
opacity: 0.24;
}
.octane-wired__summary-copy {
position: relative;
z-index: 1;
}
.octane-wired__summary-copy {
display: flex;
flex-direction: column;
min-width: 0;
gap: 1px;
}
.octane-wired__summary-kind {
color: #000;
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
line-height: 1;
text-transform: uppercase;
}
.octane-wired__summary-title {
color: #4a4a4a !important;
font-size: 15px !important;
font-weight: 700 !important;
line-height: 1.02;
text-align: left !important;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
word-break: break-word;
}
.octane-wired__section--body {
overflow: visible !important;
}
.octane-wired__section .font-bold:not(.octane-wired__summary-title) {
width: 100%;
font-size: 13px !important;
font-weight: 700 !important;
text-align: left;
}
.octane-wired__summary-description,
.octane-wired__furni-selector-description,
.octane-wired__picker-label {
font-size: 12px;
line-height: 1.15;
}
.octane-wired__source-row,
.octane-wired__give-var-section-title,
.octane-wired__advanced-toggle {
font-size: 12px;
}
.octane-wired__divider,
hr {
height: 1px;
border: 0;
background: #bababa;
box-shadow: 0 1px 0 #fff;
margin: 0 !important;
}
.form-check {
display: flex;
align-items: center;
gap: 4px;
}
.form-check-label {
margin-left: 1px;
}
.form-control,
.form-select,
input[type='text'],
input[type='number'],
.octane-number-input,
textarea {
min-height: 24px;
border: 1px solid #8d8d8d !important;
border-radius: 4px !important;
background: #f6f6f6 !important;
color: #000 !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95);
font-size: 12px;
padding: 3px 6px;
}
.octane-wired__button,
.octane-wired__picker-button,
.octane-slider-button {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
min-height: 22px !important;
border: 2px solid var(--habbo-blue-header-border, #376275) !important;
border-radius: 4px !important;
background: linear-gradient(180deg, #f2f8fb 0%, #d4e6ef 44%, #a8c9d8 45%, #d9e9f0 100%) !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85), 0 1px 0 rgba(0, 0, 0, 0.1) !important;
color: var(--habbo-text, #151515) !important;
font-weight: 700;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75);
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.octane-wired__button:hover,
.octane-wired__picker-button:hover,
.octane-slider-button:hover {
filter: brightness(1.04);
}
.octane-wired__button--primary {
border-color: var(--habbo-blue-header, #0e3f52) !important;
background: linear-gradient(180deg, #5ba4c4 0%, #418db0 44%, #2e6f8a 100%) !important;
color: #fff !important;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.4);
}
&.octane-card-shell {
resize: none !important;
}
.octane-wired__actions {
padding-top: 2px;
}
.octane-slider-wrapper {
align-items: center;
gap: 4px;
}
.octane-wired__advanced-toggle {
width: 100%;
padding: 0 !important;
border: 0;
background: transparent;
color: #000;
font: inherit;
text-align: center;
text-decoration: underline;
}
.octane-wired__advanced-body,
.octane-wired__source-detail {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-wired__advanced-body[hidden] {
display: none;
}
.octane-wired__source-row {
display: flex;
flex-direction: column;
gap: 3px;
}
.octane-wired__selection-toggle {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
padding: 0;
border: 1px solid #8e8e8e;
border-radius: 4px;
background: linear-gradient(180deg, #f6f6f6 0%, #e4e4e4 49%, #d0d0d0 50%, #ececec 100%);
color: #7b7b7b;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92);
}
.octane-wired__selection-toggle.is-active.octane-wired__selection-toggle--primary {
border-color: #66793c;
background: linear-gradient(180deg, #a5b56e 0%, #8ea25a 100%);
color: #fff;
}
.octane-wired__selection-toggle.is-active.octane-wired__selection-toggle--secondary {
border-color: #6172b7;
background: linear-gradient(180deg, #8d9bdd 0%, #7383cb 100%);
color: #fff;
}
.octane-wired__selection-toggle:disabled {
opacity: 0.55;
}
.octane-wired__selection-toggle svg {
font-size: 10px;
margin: 0;
}
.octane-wired__actions {
gap: 4px !important;
}
.octane-wired__picker-button,
.octane-slider-button {
width: 22px;
min-width: 22px !important;
flex: 0 0 22px;
padding-left: 0 !important;
padding-right: 0 !important;
}
.octane-wired__picker-button svg,
.octane-slider-button svg {
margin: 0;
}
.octane-wired__picker-label {
min-width: 0;
text-align: center;
word-break: break-word;
}
.octane-wired__give-var {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-wired__give-var--trigger-variable {
width: min(244px, 100%);
}
.octane-wired__give-var-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 4px;
}
.octane-wired__give-var-targets {
display: inline-flex;
align-items: center;
gap: 2px;
}
.octane-wired__give-var-target {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 18px;
min-height: 18px;
padding: 0;
border: 1px solid #8e8e8e;
border-radius: 4px;
background: transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55);
transition: filter 0.12s ease-in-out;
}
.octane-wired__give-var-target:hover {
filter: brightness(0.98);
}
.octane-wired__give-var-target img {
width: auto;
height: auto;
max-width: 12px;
max-height: 12px;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-wired__give-var-target--furni.is-active {
background: linear-gradient(180deg, #f7db6d 0%, #ddb948 100%);
}
.octane-wired__give-var-target--user.is-active {
background: linear-gradient(180deg, #74be68 0%, #4f9644 100%);
}
.octane-wired__give-var-target--global.is-active {
background: linear-gradient(180deg, #7bc4f0 0%, #5497d2 100%);
}
.octane-wired__give-var-target--context.is-active {
background: linear-gradient(180deg, #f0ad65 0%, #d68739 100%);
}
.octane-wired__give-var-target.is-active {
border-color: #4d4d4d;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.72), inset 0 1px 0 rgba(255, 255, 255, 0.92);
}
.octane-wired__give-var-target:disabled {
opacity: 0.72;
cursor: default;
}
.octane-wired__give-var-select {
min-height: 23px;
}
.octane-wired__give-var-checkbox {
display: flex;
align-items: center;
gap: 4px;
cursor: pointer;
white-space: nowrap;
font-size: 13px;
line-height: 1;
}
.octane-wired__give-var-section {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-wired__give-var-section-title {
font-size: 11px;
font-weight: 700;
line-height: 1.1;
}
.octane-wired__give-var-input-row {
display: flex;
align-items: center;
gap: 6px;
}
.octane-wired__give-var-number {
width: 48px;
min-width: 48px;
min-height: 18px !important;
height: 18px;
padding: 0 4px !important;
line-height: 18px;
text-align: center;
}
.octane-wired__give-var-number--blurred {
filter: blur(0.8px) !important;
opacity: 0.78;
pointer-events: none;
}
.octane-wired__resizable-textarea {
min-height: 140px !important;
resize: vertical !important;
overflow: auto;
}
.octane-wired__levelup {
display: flex;
flex-direction: column;
gap: 6px;
}
.octane-wired__levelup-section {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-wired__levelup-section-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding: 0;
border: 0;
background: transparent;
text-align: left;
}
.octane-wired__levelup-chevron {
font-size: 12px;
line-height: 1;
transform: rotate(180deg);
transition: transform 0.12s ease;
}
.octane-wired__levelup-chevron.is-open {
transform: rotate(0deg);
}
.octane-wired__levelup-section-body {
display: flex;
flex-direction: column;
gap: 8px;
}
.octane-wired__levelup-mode-block {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-wired__levelup-mode-block.is-inactive {
opacity: 0.72;
}
.octane-wired__levelup-mode-label {
display: flex;
align-items: center;
gap: 4px;
cursor: pointer;
}
.octane-wired__levelup-fields {
display: flex;
flex-direction: column;
gap: 4px;
padding-left: 22px;
}
.octane-wired__levelup-field-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
min-height: 20px;
}
.octane-wired__levelup-number {
width: 74px;
min-width: 74px;
min-height: 20px !important;
height: 20px;
padding: 0 6px !important;
line-height: 20px;
text-align: center;
}
.octane-wired__levelup-textarea {
min-height: 88px !important;
resize: vertical !important;
overflow: auto;
}
.octane-wired__levelup-preview {
max-height: 120px;
overflow-y: auto;
padding-right: 2px;
}
.octane-wired__levelup-preview-entry {
padding: 1px 0;
font-size: 11px;
line-height: 1.25;
}
.octane-wired__levelup-subvariables {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-wired__levelup-subvariable-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.octane-wired__levelup-subvariable-label {
display: flex;
align-items: center;
gap: 4px;
min-width: 0;
flex: 1 1 auto;
cursor: pointer;
}
.octane-wired__levelup-subvariable-token {
width: 96px;
min-width: 96px;
height: 20px;
padding: 0 6px;
border: 1px solid #cfcfcf;
border-radius: 6px;
background: #f3f3f3;
color: #9a9a9a;
font-size: 11px;
line-height: 20px;
}
.octane-wired__placeholder-preview {
display: flex;
width: 100%;
align-items: flex-start;
padding: 6px 8px;
border: 1px solid #b7b7b7;
border-radius: 5px;
background: linear-gradient(180deg, #fbfbfb 0%, #efefef 100%);
text-align: left;
cursor: pointer;
transition: background 0.12s ease, border-color 0.12s ease;
}
.octane-wired__placeholder-preview:hover {
background: linear-gradient(180deg, #ffffff 0%, #f4f4f4 100%);
border-color: #909090;
}
.octane-wired__placeholder-preview.is-copied {
border-color: #73a753;
background: linear-gradient(180deg, #f8fff2 0%, #eef9e2 100%);
}
.octane-wired__change-var-radio {
display: flex;
align-items: center;
gap: 4px;
}
.octane-wired__change-var-reference-block {
display: flex;
flex-direction: column;
gap: 4px;
}
.octane-slider {
height: 16px;
}
.octane-slider .track {
height: 4px;
border-radius: 999px;
border: 1px solid #9a9a9a;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95);
/* the filled part lies inside the track: it fills it without a border of its own (no double line) */
&.track-0 {
height: 100%;
border: 0;
border-radius: inherit;
box-shadow: none;
background: linear-gradient(180deg, #7f9fb1 0%, #64889e 100%);
}
&.track-1 {
background: linear-gradient(180deg, #e9e9e9 0%, #d5d5d5 100%);
}
}
/* Base UI centres the thumb on the track itself: no margin, or it sits below the line. */
.octane-slider .thumb {
width: 12px;
height: 12px;
border-radius: 50%;
border: 1px solid #7f7f7f;
background: linear-gradient(180deg, #fefefe 0%, #dadada 100%);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.85), inset 0 1px 0 rgba(255, 255, 255, 0.9);
}
}
.octane-card-shell.octane-wired {
border: 1px solid #8d8d8d !important;
border-color: #8d8d8d !important;
box-shadow: inset 0 0 0 1px #fff !important;
outline: none !important;
}
.octane-card-shell.octane-wired .octane-card-header-shell,
.octane-card-shell.octane-wired .octane-card-content-shell {
border: 0 !important;
box-shadow: none !important;
}
.color-picker-frame {
border-image-source: url('@/assets/images/avatareditor/color_frame.png');
border-image-slice: 6 6 6 6 fill;
border-image-width: 6px 6px 6px 6px;
width: 14px;
height: 21px;
border-radius: 4px;
&.active,
&:hover {
border-image-source: url('@/assets/images/avatareditor/color_frame_active.png');
height: 21px;
margin-top: -2px;
}
}
.hc-icon {
background-image: url('@/assets/images/avatareditor/hc_icon.png');
height: 9px;
width: 10px;
bottom: 2px;
left: 2px;
}
.avatar-parts {
border: 1px solid #c5c3c0 !important;
position: relative;
aspect-ratio: 1;
width: 100%;
max-width: 64px;
border-radius: 0.3rem !important;
overflow: hidden !important;
background-color: #e9e8e4;
&:hover {
box-shadow: inset 0 0 0 3px #dbdad5 !important;
background-color: #cecdc8 !important;
}
&:active,
&.part-selected {
box-shadow: inset 0 0 0 3px #c5c3c0 !important;
background-color: #b1b1b1 !important;
}
&.is-loading::after {
content: '';
position: absolute;
inset: 0;
background-image: linear-gradient(100deg, rgba(255, 255, 255, 0) 35%, rgba(255, 255, 255, 0.65) 50%, rgba(255, 255, 255, 0) 65%);
background-size: 220% 100%;
background-repeat: no-repeat;
animation: avatar-parts-shimmer 1.1s ease-in-out infinite;
pointer-events: none;
}
}
@keyframes avatar-parts-shimmer {
0% {
background-position: 160% 0;
}
100% {
background-position: -60% 0;
}
}
.avatar-container {
padding: 3px;
height: 50px;
border-radius: 0.3rem;
background-color: #a7a6a2;
width: 48px;
}
.avatar-parts-container {
height: 70%;
}
.avatar-color-palette-container {
height: 30%;
width: 100% !important;
}
.dual-palette {
display: flex !important;
flex-direction: row !important;
}
.avatar-editor-palette-set-view {
padding-right: 15px !important;
flex-grow: 1;
}
.action-buttons {
gap: 5px;
}
.avatar-editor-tabs {
position: relative;
.tab {
background-position-x: center;
background-position-y: center;
background-repeat: no-repeat;
width: 34px;
height: 22px;
}
.hd { background-image: url('@/assets/images/wardrobe/hd.png'); }
.head { background-image: url('@/assets/images/wardrobe/head.png'); }
.torso { background-image: url('@/assets/images/wardrobe/torso.png'); }
.legs { background-image: url('@/assets/images/wardrobe/legs.png'); }
.tab-pets {
width: 34px;
height: 22px;
background-image: url('@/assets/images/wardrobe/pets.png');
background-repeat: no-repeat;
background-position: center;
background-size: 22px 22px;
}
.tab-nft {
width: 34px;
height: 22px;
background-image: url('@/assets/images/wardrobe/nft.png');
background-repeat: no-repeat;
background-position: center;
background-size: 22px 22px;
}
.tab-misc {
width: 34px;
height: 22px;
background-image: url('@/assets/images/wardrobe/misc.png');
background-repeat: no-repeat;
background-position: center;
background-size: 24px 22px;
}
}
.pet-equipped-bar {
display: flex;
align-items: center;
gap: 10px;
padding: 6px 10px;
background-color: rgba(0, 0, 0, 0.25);
border-radius: 0.3rem;
margin: 0 2px;
min-height: 48px;
}
.pet-equipped-preview {
width: 42px;
height: 42px;
border-radius: 4px;
background-color: rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
flex-shrink: 0;
}
.pet-equipped-thumb {
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
.pet-paw-icon {
width: 24px;
height: 24px;
background-image: url('@/assets/images/wardrobe/pets.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
.pet-grid-container .avatar-parts {
background-size: contain;
overflow: hidden !important;
}
.pet-sellable-locked {
opacity: 0.5;
cursor: not-allowed !important;
position: relative;
}
.pet-sellable-badge {
position: absolute;
bottom: 2px;
right: 2px;
display: flex;
align-items: center;
gap: 1px;
background-color: rgba(0, 0, 0, 0.6);
border-radius: 3px;
padding: 1px 3px;
font-size: 9px;
color: #ffd700;
font-weight: bold;
}
.pet-remove-btn {
background: none;
border: none;
color: #e57373;
font-size: 11px;
cursor: pointer;
padding: 0;
text-align: left;
width: fit-content;
&:hover {
color: #ff5252;
text-decoration: underline;
}
}
.saved-outfits-title {
color: #a7a6a2;
font-weight: bold;
}
/* -------------------------------------------------------------------------- */
/* Wired chest (Scrigno) — Sulake chest_generic / coins_chest / furni_chest UI */
/* -------------------------------------------------------------------------- */
[class*='octane-widget-chest'] {
color: #2e2e2e;
.octane-chest__button {
display: inline-flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
min-height: 22px;
padding: 0 10px;
border: 1px solid #b9b2a0;
border-radius: 3px;
background: linear-gradient(180deg, #f3f0e8 0%, #e9e6df 48%, #ddd8cc 49%, #ebe8e0 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
color: #555;
font-size: 11px;
font-weight: 700;
line-height: 1;
cursor: pointer;
user-select: none;
white-space: nowrap;
}
.octane-chest__button:hover:not(:disabled) {
filter: brightness(0.98);
}
.octane-chest__button:active:not(:disabled) {
background: linear-gradient(180deg, #e4e0d6 0%, #d8d4c8 100%);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12);
}
.octane-chest__button:disabled {
opacity: 0.5;
cursor: default;
pointer-events: none;
}
/* coins_chest_contents.xml withdraw_btn: 73×22 */
.octane-chest__button--withdraw {
width: 73px;
min-width: 73px;
height: 22px;
padding: 0 6px;
}
/* upgrade_capacity_btn — square icon control in footer */
.octane-chest__button--icon {
width: 24px;
min-width: 24px;
height: 22px;
padding: 0;
font-size: 14px;
font-weight: 700;
line-height: 1;
}
/* Settings / notifications / upgrade sub-dialogs (wired UI builder style) */
.octane-chest__button--dialog {
min-height: 22px;
padding: 0 12px;
border: 1px solid #8e8e8e;
border-radius: 6px;
background: linear-gradient(180deg, #fcfcfc 0%, #e8e8e8 46%, #d5d5d5 47%, #efefef 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92);
color: #000;
}
.octane-chest__button--dialog-primary {
min-height: 22px;
padding: 0 12px;
border: 1px solid #66793c;
border-radius: 6px;
background: linear-gradient(180deg, #a5b56e 0%, #8ea25a 49%, #7f9350 50%, #96a866 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.45);
color: #fff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
}
.octane-chest__button--dialog-primary:disabled {
border-color: #8e8e8e;
background: linear-gradient(180deg, #fcfcfc 0%, #e8e8e8 46%, #d5d5d5 47%, #efefef 100%);
color: #888;
text-shadow: none;
}
.octane-chest__header-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
padding: 0;
border: 1px solid #cfcabc;
border-radius: 4px;
background: #f1f0ee;
cursor: pointer;
flex-shrink: 0;
}
.octane-chest__header-icon:hover {
filter: brightness(0.97);
}
.octane-chest__input {
box-sizing: border-box;
border: 1px solid #b9b2a0;
border-radius: 2px;
background: #fff;
color: #2e2e2e;
font-size: 11px;
text-align: center;
}
.octane-chest__input--scene {
width: 27px;
height: 19px;
padding: 0;
border-color: #d8c184;
}
.octane-chest__input--furni-withdraw {
width: 36px;
height: 22px;
padding: 0;
}
.octane-chest__actions {
display: flex;
align-items: center;
gap: 4px;
}
.octane-chest__actions--footer {
justify-content: space-between;
gap: 8px;
}
.octane-chest__actions--dialog {
gap: 4px;
}
.octane-chest__actions--dialog .octane-chest__button {
flex: 1 1 0;
}
}
/* Wired chest (Scrigno) — Putyhef buttons + inputs from chest_generic / coins_chest_contents XML */
.octane-widget-chest,
.octane-widget-chest-settings,
.octane-widget-chest-notifications,
.octane-widget-chest-upgrade,
.octane-widget-chest-log,
.octane-widget-chest-confirm {
.octane-chest__btn {
display: inline-flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
min-width: 73px;
height: 22px;
padding: 0 8px;
font-size: 11px;
font-weight: 700;
line-height: 1;
color: #555;
white-space: nowrap;
cursor: pointer;
user-select: none;
border: 1px solid #b9b2a0;
border-radius: 3px;
background: linear-gradient(180deg, #f5f3ef 0%, #e9e6df 48%, #dedad2 49%, #ebe8e1 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
}
.octane-chest__btn:hover:not(:disabled) {
filter: brightness(0.98);
}
.octane-chest__btn:active:not(:disabled) {
background: linear-gradient(180deg, #dedad2 0%, #d5d0c8 48%, #cac5bd 49%, #d8d4cc 100%);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12);
}
.octane-chest__btn:disabled {
opacity: 0.5;
cursor: default;
pointer-events: none;
}
.octane-chest__btn--fixed {
width: 73px;
min-width: 73px;
padding: 0;
}
.octane-chest__btn--wide {
min-width: 73px;
width: auto;
max-width: 100%;
}
.octane-chest__btn--icon {
min-width: 24px;
width: 24px;
height: 24px;
padding: 0;
font-size: 14px;
font-weight: 700;
line-height: 1;
color: #2e2e2e;
border-color: #cfcabc;
border-radius: 4px;
background: #f1f0ee;
box-shadow: none;
}
.octane-chest__input {
box-sizing: border-box;
height: 22px;
padding: 0 4px;
font-size: 11px;
text-align: center;
color: #000;
border: 1px solid #b9b2a0;
border-radius: 2px;
background: #fff;
}
.octane-chest__input--coin {
width: 27px;
height: 19px;
border-color: #d8c184;
}
.octane-chest__input--furni {
width: 36px;
}
.octane-chest__input--qty {
width: 72px;
}
.octane-chest__footer-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
margin-top: 4px;
}
.octane-chest__footer-group {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.octane-chest__actions {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-top: 4px;
}
.form-control,
.form-select,
input[type='text'],
input[type='number'],
.octane-number-input,
textarea {
min-height: 22px;
border: 1px solid #8d8d8d !important;
border-radius: 4px !important;
background: #f6f6f6 !important;
color: #000 !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95);
font-size: 12px;
padding: 3px 6px;
}
/* furni_chest_contents.xml — grid + detail panel */
.octane-chest__furni-body {
display: flex;
gap: 10px;
margin: 4px 0 0;
}
.octane-chest__grid-border {
width: 255px;
flex-shrink: 0;
border: 1px solid #e3e3e3;
border-radius: 3px;
background: #fff;
overflow: hidden;
}
.octane-chest__search {
position: relative;
margin: 4px 5px 0;
height: 24px;
border: 1px solid #d0d0d0;
border-radius: 3px;
background: #fff;
}
.octane-chest__search-placeholder {
position: absolute;
left: 8px;
top: 4px;
font-size: 11px;
color: #666;
opacity: 0.5;
pointer-events: none;
}
.octane-chest__search-input {
width: 100%;
height: 22px;
padding: 0 24px 0 8px;
border: none !important;
background: transparent !important;
box-shadow: none !important;
font-size: 11px;
color: #666;
text-align: left;
}
.octane-chest__search-clear {
position: absolute;
right: 2px;
top: 2px;
width: 20px;
height: 20px;
padding: 0;
border: none;
background: transparent;
color: #666;
font-size: 14px;
line-height: 1;
cursor: pointer;
}
.octane-chest__grid-scroll {
width: 100%;
height: 232px;
overflow-x: hidden;
overflow-y: auto;
padding: 5px;
box-sizing: border-box;
}
.octane-chest__grid {
display: flex;
flex-wrap: wrap;
gap: 3px;
}
.octane-chest__grid-empty {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
min-height: 120px;
}
.octane-chest__grid-cell {
position: relative;
width: 42px;
height: 42px;
flex-shrink: 0;
cursor: pointer;
}
.octane-chest__grid-cell-focus {
position: absolute;
inset: 0;
z-index: 3;
pointer-events: none;
border: 2px solid #aeb7aa;
border-radius: 4px;
box-shadow: inset 0 0 0 1px #fff;
background: rgba(228, 231, 223, 0.35);
}
.octane-chest__grid-cell-inner {
position: absolute;
left: 1px;
top: 1px;
width: 40px;
height: 40px;
border: 1px solid #cbcbcb;
border-radius: 3px;
background: #fafafa;
overflow: hidden;
}
.octane-chest__grid-icon {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
}
.octane-chest__grid-ltd-bg {
inset: 2px;
width: 36px;
height: 36px;
}
.octane-chest__grid-ltd-counter {
height: 9px;
}
.octane-chest__grid-rarity {
top: 2px;
right: 2px;
z-index: 2;
transform: scale(0.72);
transform-origin: top right;
}
.octane-chest__qty-badge {
position: absolute;
top: 2px;
right: 2px;
z-index: 4;
min-width: 13px;
height: 16px;
padding: 1px;
background: #2f6982;
border-radius: 2px;
box-sizing: border-box;
}
.octane-chest__qty-badge span {
display: block;
min-width: 11px;
height: 14px;
padding: 0 1px;
border: 1px solid #fff;
border-radius: 1px;
color: #2f6982;
background: #fff;
font-size: 10px;
font-weight: 700;
line-height: 12px;
text-align: center;
}
.octane-chest__detail-panel {
width: 175px;
flex-shrink: 0;
display: flex;
flex-direction: column;
}
.octane-chest__preview-box {
height: 211px;
border: 1px solid #d8d8d8;
border-radius: 3px;
background: #fff;
display: flex;
flex-direction: column;
align-items: center;
padding: 5px;
overflow: hidden;
box-sizing: border-box;
}
.octane-chest__preview-name {
width: 100%;
text-align: center;
font-size: 11px;
line-height: 1.25;
word-wrap: break-word;
margin-bottom: 4px;
}
.octane-chest__preview-image {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
min-height: 0;
}
.octane-chest__preview-placeholder {
max-width: 100%;
max-height: 100%;
margin: auto;
image-rendering: var(--octane-pixel-art, pixelated);
}
.octane-chest__withdraw-row {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 10px;
margin-top: 9px;
padding-right: 0;
}
.octane-chest__input--furni {
width: 30px;
height: 19px;
padding: 0;
}
/* chest_generic.xml footer band */
.octane-chest__footer {
margin: 8px -10px -10px;
padding: 8px 10px 10px;
background: #dadada;
border-top: 1px solid #c0c0c0;
}
.octane-chest__footer-capacity {
margin-bottom: 6px;
padding-bottom: 6px;
border-bottom: 1px solid #b0b0b0;
}
/* Locking sits above the capacity row, the way the official window stacks them. */
.octane-chest__locking {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 4px 12px;
margin-bottom: 6px;
padding-bottom: 6px;
border-bottom: 1px solid #b0b0b0;
}
.octane-chest__option {
display: flex;
align-items: center;
gap: 6px;
cursor: pointer;
}
.octane-chest__option input:disabled {
cursor: default;
}
.octane-chest__info-button {
width: 16px;
height: 16px;
margin-left: auto;
border: 1px solid #7a4a1c;
border-radius: 50%;
background: #f7e6cf;
color: #7a4a1c;
font-size: 10px;
font-weight: bold;
line-height: 1;
}
.octane-chest__capacity-input {
width: 84px;
height: 22px;
padding: 0 6px;
font-size: 11px;
}
.octane-chest__rules {
margin: 0;
padding-left: 18px;
list-style: disc;
}
.octane-chest__upgrade-preview {
display: flex;
align-items: center;
justify-content: center;
width: 64px;
height: 64px;
flex: 0 0 64px;
}
.octane-chest__upgrade-error {
color: #b03030;
}
.octane-chest__btn--footer {
min-width: 73px;
height: 30px;
padding: 0 10px;
font-size: 11px;
}
.octane-chest__footer-group .octane-chest__btn--footer {
min-width: 89px;
}
.octane-chest__deposit-panel {
margin-top: 8px;
padding: 8px;
border: 1px solid #d8d8d8;
border-radius: 3px;
background: #f8f8f8;
}
.octane-chest__deposit-title {
display: block;
margin-bottom: 6px;
}
.octane-chest__deposit-grid {
max-height: 168px;
overflow-y: auto;
display: flex;
flex-wrap: wrap;
gap: 3px;
}
.octane-chest__deposit-cell {
position: relative;
width: 42px;
height: 42px;
padding: 0;
border: 1px solid #cbcbcb;
border-radius: 3px;
background: #fafafa;
cursor: pointer;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.octane-chest__deposit-cell:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.octane-chest__deposit-cell:not(:disabled):hover {
border-color: #d69586;
}
.octane-chest__deposit-full {
margin-top: 6px;
color: #a33;
}
}
/* AIR Ubuntu chest settings: bordered groups and 7px section spacing. */
.octane-chest-settings .octane-card-content-shell { max-height: calc(100vh / 2.4 + 60px); overflow-y: auto; }
.octane-chest-settings__section { display: grid; gap: 5px; min-width: 0; margin: 0; padding: 7px; border: 1px solid #b0b0a8; border-radius: 3px; }
.octane-chest-settings__section > legend { float: none; width: auto; margin: 0; padding: 0 3px; font-size: 12px; font-weight: bold; }
.octane-chest-settings__wired-notifications { display: grid; gap: 3px; min-width: 0; margin-top: 7px; padding: 7px 0 0; border: 0; border-top: 1px solid #b0b0a8; }
.octane-chest-settings__wired-notifications:disabled { opacity: 0.5; }
.octane-chest-settings select { width: 100%; min-width: 0; }
/* Official BadgeImageWidget.playGlow: a 500ms run, strength 0 -> 1 (ease-in-out cubic), then
cleared. The overlay repeats the badge image on top of itself so the glow and tint follow
the badge's own pixels: outer glow (alpha .7, blur 4->8), inner glow, 48% tint plus a
brightness lift. Played once when the badge is set and again on every mouse-over. */
.badge-glow {
position: absolute;
inset: 0;
pointer-events: none;
}
.badge-glow-run {
position: absolute;
inset: 0;
background-repeat: no-repeat;
background-position: center;
opacity: 0;
animation-name: badgeGlowRun;
animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
animation-fill-mode: none;
}
/* The official ColorMatrixFilter mixes each channel 48% towards the tier colour at full
strength: a flat fill of that colour masked by the badge's own pixels, faded to 0.48. */
.badge-glow-tint {
position: absolute;
inset: 0;
background-color: var(--badge-glow);
mask-repeat: no-repeat;
mask-position: center;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
opacity: 0;
animation-name: badgeGlowTint;
animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
animation-fill-mode: none;
}
@keyframes badgeGlowTint {
0% {
opacity: 0;
}
100% {
opacity: 0.48;
}
}
/* Hover breath: the outer glow only. The layer repeats the badge's own pixels unchanged, so
only the drop shadow around them is visible as it pulses. */
.badge-glow-run--outline {
animation-name: badgeGlowOutline;
}
@keyframes badgeGlowOutline {
0% {
opacity: 0;
filter: drop-shadow(0 0 3px var(--badge-glow));
}
100% {
opacity: 1;
filter: drop-shadow(0 0 4px var(--badge-glow)) drop-shadow(0 0 8px var(--badge-glow));
}
}
@keyframes badgeGlowRun {
0% {
opacity: 0;
filter: drop-shadow(0 0 4px var(--badge-glow)) brightness(1);
}
100% {
opacity: 1;
filter: drop-shadow(0 0 4px var(--badge-glow)) drop-shadow(0 0 8px var(--badge-glow)) brightness(1.45) saturate(1.3);
}
}
@keyframes pulseGlow {
0%, 100% { box-shadow: 0 0 6px rgba(59, 130, 246, 0.3); }
50% { box-shadow: 0 0 14px rgba(59, 130, 246, 0.6); }
}
@keyframes pulseGlowRed {
0%, 100% { box-shadow: 0 0 6px rgba(239, 68, 68, 0.3); }
50% { box-shadow: 0 0 14px rgba(239, 68, 68, 0.6); }
}
@keyframes dropSettle {
0% { transform: scale(1.15); }
100% { transform: scale(1); }
}
@keyframes pulseGlowGold {
0%, 100% { box-shadow: 0 0 6px rgba(255, 193, 7, 0.4); }
50% { box-shadow: 0 0 14px rgba(255, 193, 7, 0.7); }
}
/* CollapsibleSection (common/CollapsibleSection.tsx): the Base UI stand-in for <details><summary>. */
.octane-collapsible-trigger {
display: flex;
align-items: center;
gap: 4px;
padding: 0;
border: 0;
background: none;
color: inherit;
font: inherit;
text-align: left;
cursor: pointer;
}
.octane-collapsible-trigger::before {
content: '';
flex: 0 0 auto;
width: 0;
height: 0;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
border-left: 6px solid currentColor;
transition: transform 0.12s ease;
}
.octane-collapsible-trigger[data-panel-open]::before {
transform: rotate(90deg);
}
.octane-collapsible-panel[hidden] {
display: none;
}
/* NativeLabel: a drawn raster folds its 2 px TextField gutter away so the text sits where the CSS put it; the browser-text
fallback (glyphs the native fonts lack) keeps its box. */
.octane-native-label > [data-native-text]:not([data-native-text="fallback"]) {
margin: -2px !important;
}
/* A window's descendant rules (`.window-button span { position: absolute; top: 22px; left: 60px; overflow: hidden }`) also reach
the raster's own wrapper inside a NativeLabel and push the canvas out of view. Its geometry is the label's, never the window's. */
.octane-native-label > [data-native-text] {
position: relative !important;
inset: auto !important;
float: none !important;
min-width: 0 !important;
max-width: none !important;
min-height: 0 !important;
max-height: none !important;
padding: 0 !important;
border: 0 !important;
background: none !important;
overflow: visible !important;
transform: none !important;
z-index: auto !important;
opacity: 1 !important;
line-height: normal !important;
text-indent: 0 !important;
}
.octane-native-label > [data-native-text] > canvas {
position: static !important;
max-width: none !important;
max-height: none !important;
margin: 0 !important;
padding: 0 !important;
border: 0 !important;
transform: none !important;
}
