.dialog-root { --menu-button-size: min(9vh, 4.5vw); --button-height: calc(min(25vh, 12.5vw) - 2px); --gap: min(2vh, 1vw); --scrollbar-gutter: max(20px, 1.25 * var(--gap)); display: grid; gap: var(--gap); grid-template: ". dialog-status" min-content "dialog-paginate dialog-grid" auto / var(--menu-button-size) auto; } .dialog-root[data-unload], .dialog-root [data-unload] { display: none; } .dialog-menubar { display: grid; grid-area: dialog-menubar; grid-template-columns: repeat(9, 1fr); grid-template-rows: repeat(auto-fill, 1fr); direction: rtl; gap: var(--gap); padding-right: var(--scrollbar-gutter); } .dialog-menubar-button { width: var(--menu-button-size); aspect-ratio: 1 / 1; } .dialog-menubar-button > .button-image { width: min(90px, 94%); height: min(90px, 94%); top: 50%; transform: translate(-50%, -50%); } .dialog-menubar-button > .button-tooltip { --tooltip-gap: var(--gap); } .dialog-paginate { grid-area: dialog-paginate; align-self: end; display: grid; gap: var(--gap); grid-template-rows: repeat(2, min-content); padding-bottom: 3px; } .dialog-paginate-button { height: var(--menu-button-size); width: var(--menu-button-size); } .dialog-paginate-button > .button-tooltip { --tooltip-gap: var(--gap); } .dialog-icon { --hover-color: var(--button-color); display: none; cursor: auto; grid-area: dialog-grid; align-self: self-start; justify-self: center; } .dialog-icon > .button-label { text-align: center; } .dialog-icon:empty { display: none !important; } .dialog-status { font: inherit; color: white; user-select: none; min-height: 1.15em; /* 1 line */ max-height: 4.6em; /* 4 lines */ align-self: center; justify-self: center; grid-area: dialog-status; } .dialog-grid { display: grid; gap: var(--gap); grid-template-rows: repeat(auto-fill, var(--button-height)); grid-template-columns: repeat(4, 1fr); padding: 3px; padding-right: var(--scrollbar-gutter); grid-area: dialog-grid; scroll-snap-type: y proximity; } .dialog-root[data-show-icon] { gap: calc(3px + var(--gap)); } .dialog-root[data-show-icon] > .dialog-icon { display: block; } .dialog-root[data-show-icon] > .dialog-grid { display: none; } .dialog-grid-button { scroll-snap-align: start; height: var(--button-height); width: min(100%, calc(0.8 * var(--button-height))); } .dialog-grid-button:disabled[aria-checked="true"], .dialog-grid-button[aria-disabled="true"][aria-checked="true"] { background-color: var(--disabled-color) !important; } .dialog-grid-button:disabled[aria-checked="true"] > .button-label, .dialog-grid-button[aria-disabled="true"][aria-checked="true"] > .button-label { background-color: var(--disabled-color) !important; } .dialog-grid-button > .button-tooltip { --tooltip-gap: var(--gap); width: calc(400% + 4 * min(0.2vh, 0.1vw) + 3 * var(--gap)); font-size: 0.65em; max-height: calc(2 * var(--button-height) + var(--gap)); display: -webkit-box; line-clamp: 15; -webkit-line-clamp: 15; -webkit-box-orient: vertical; overflow: hidden; } @supports selector(:nth-child(1n of :not([data-unload]))) { .dialog-grid .dialog-grid-button:nth-child(4n - 3 of :not([data-unload])) > .button-tooltip { left: unset; transform: unset; } .dialog-grid .dialog-grid-button:nth-child(4n - 2 of :not([data-unload])) > .button-tooltip { left: calc(100% / 3); transform: translateX(calc(-100% / 3)); } .dialog-grid .dialog-grid-button:nth-child(4n - 1 of :not([data-unload])) > .button-tooltip { left: calc(100% / 1.5); transform: translateX(calc(-100% / 1.5)); } .dialog-grid .dialog-grid-button:nth-child(4n of :not([data-unload])) > .button-tooltip { left: 100%; transform: translateX(-100%); } } /* Fallback for browsers that do not support https://caniuse.com/css-nth-child-of */ @supports not selector(:nth-child(1n of :not([data-unload]))) { .dialog-grid .dialog-grid-button:nth-child(4n - 3) > .button-tooltip { left: unset; transform: unset; } .dialog-grid .dialog-grid-button:nth-child(4n - 2) > .button-tooltip { left: calc(100% / 3); transform: translateX(calc(-100% / 3)); } .dialog-grid .dialog-grid-button:nth-child(4n - 1) > .button-tooltip { left: calc(100% / 1.5); transform: translateX(calc(-100% / 1.5)); } .dialog-grid .dialog-grid-button:nth-child(4n) > .button-tooltip { left: 100%; transform: translateX(-100%); } } .dialog-grid-button[data-craft]:not([aria-checked="true"]) { --button-color: #FFFF88; } .dialog-grid-button[data-permission="Block"] { --button-color: red; --hover-color: pink; } .dialog-grid-button[data-permission="Limited"] { --button-color: orange; --hover-color: #fed8b1; } .dialog-grid-button[data-permission="Favorite"] { --button-color: green; --hover-color: lime; } #dialog-crafted-info { display: grid; overflow: hidden; grid-area: dialog-grid; gap: var(--gap) 0px; grid-template: "dialog-crafted-name dialog-crafted-gap dialog-crafted-icon ." minmax(auto, min-content) "dialog-crafted-crafter dialog-crafted-gap dialog-crafted-icon ." minmax(auto, min-content) "dialog-crafted-property dialog-crafted-gap dialog-crafted-icon ." minmax(auto, min-content) "dialog-crafted-private dialog-crafted-gap dialog-crafted-icon ." minmax(auto, min-content) "dialog-crafted-footer dialog-crafted-footer dialog-crafted-footer dialog-crafted-footer" minmax(auto, min-content) / auto var(--gap) min(100%, calc(0.8 * var(--button-height))) var(--scrollbar-gutter) } #dialog-crafted ul { padding: unset; margin: unset; list-style-type: none; } .dialog-crafted-info { font: inherit; overflow-wrap: break-word; height: min-content; width: 100%; color: white; user-select: none; text-indent: 1em hanging each-line; } #dialog-crafted-name { grid-area: dialog-crafted-name; } #dialog-crafted-crafter { grid-area: dialog-crafted-crafter; } #dialog-crafted-property { grid-area: dialog-crafted-property; } #dialog-crafted-private { grid-area: dialog-crafted-private; } #dialog-crafted-gap { grid-area: dialog-crafted-gap; } #dialog-crafted-icon { grid-area: dialog-crafted-icon; margin-top: 3px; display: block; } #dialog-crafted-footer { height: 100%; overflow: hidden auto; grid-area: dialog-crafted-footer; } #dialog-crafted-footer > * { display: block; max-width: calc(100% - var(--scrollbar-gutter)); padding-right: unset; } #dialog-dialog { --dialog-button-size: min(8vh, 4vw); grid-template: ". dialog-status dialog-menubar" min-content "dialog-paginate dialog-grid dialog-grid" auto / var(--menu-button-size) auto calc(var(--menu-button-size) + 3px + var(--scrollbar-gutter)); } #dialog-dialog-grid { max-height: calc(6px + 8 * var(--dialog-button-size) + 7 * var(--gap)); } #dialog-dialog-status { min-height: 3.45em; /* 3 lines */ max-height: 7.9em; /* 6 lines */ } #dialog-dialog-grid { display: block; height: minmax(auto, min-content); } .dialog-dialog-button { width: 100%; min-height: var(--dialog-button-size); height: min-content; padding-top: 0.15em; padding-bottom: 0.15em; margin-block: calc(var(--gap) / 2); } /* For browsers that support https://caniuse.com/css-nth-child-of */ @supports selector(:nth-child(1 of :not([data-unload]))) { .dialog-dialog-button:nth-child(1 of :not([data-unload])) { margin-top: unset; } .dialog-dialog-button:nth-last-child(1 of :not([data-unload])) { margin-bottom: unset; } } .dialog-dialog-button > .button-label { position: unset; padding-inline: 0.15em 0.15em; } .dialog-focus-grid [role="radiogroup"] { position: relative; width: 100%; height: 100%; border: min(0.3vh, 0.15vw) solid #80808040; } .dialog-focus-grid [role="radio"] { position: absolute; border: min(0.3vh, 0.15vw) solid #80808040; } .dialog-focus-grid [role="radio"][data-blocked] { border-color: #88000580; } .dialog-focus-grid [role="radio"][data-equipped] { border-color: #D5A30080; } .dialog-focus-grid [role="radio"][aria-checked="true"] { border-width: min(0.5vh, 0.25vw); border-color: cyan; } .dialog-self-menu-root { gap: 0 var(--gap); } .dialog-self-menu-root > .dialog-grid { width: calc(100% - var(--scrollbar-gutter)); padding-right: var(--scrollbar-gutter); } .dialog-self-menu-root > .dialog-status { padding-bottom: var(--gap); } .dialog-self-menu-menubar { min-width: calc(5 * var(--menu-button-size) + 2 * var(--gap)); grid-area: dialog-menubar; display: grid; gap: calc(0.5 * var(--gap)); direction: rtl; grid-auto-flow: column; grid-template-columns: repeat(3, var(--menu-button-size)) calc(3px + var(--menu-button-size) + 0.5 * var(--gap)) repeat(auto-fill, var(--menu-button-size)); } .dialog-expression-grid > .dialog-menubar-button, .dialog-pose-grid > .dialog-menubar-button, .dialog-expression-preset-slot > canvas, #dialog-owner-rules-grid > li { scroll-snap-align: start; } #dialog-expression { grid-template: "dialog-menubar dialog-menubar" var(--menu-button-size) "dialog-status dialog-status" min-content "dialog-left-menu dialog-grid" auto / var(--menu-button-size) min-content; } #dialog-expression-menu-left { grid-area: dialog-left-menu; display: grid; padding-top: 3px; gap: calc(0.5 * var(--gap)); grid-template-rows: repeat(auto-fill, var(--menu-button-size)); } .dialog-expression-grid { display: grid; gap: calc(0.5 * var(--gap)); grid-template-columns: repeat(3, var(--menu-button-size)); grid-template-rows: repeat(auto-fill, var(--menu-button-size)); height: calc(7 * var(--menu-button-size) + 3 * var(--gap)); } .dialog-expression-grid[data-unload] { display: grid; visibility: hidden; } #dialog-expression-button-grid { display: none; } #dialog-pose { width: fit-content; grid-template: "dialog-menubar dialog-menubar" var(--menu-button-size) "dialog-status dialog-status" min-content ". dialog-grid" auto / var(--menu-button-size) min-content; } #dialog-pose > .dialog-grid { gap: calc(0.5 * var(--gap)); } .dialog-pose-grid { display: grid; gap: calc(0.5 * var(--gap)); } #dialog-expression-preset { width: fit-content; grid-template: "dialog-menubar dialog-menubar" var(--menu-button-size) "dialog-status dialog-status" min-content "dialog-grid dialog-grid" auto / var(--menu-button-size) min-content; } #dialog-expression-preset-button-grid { display: block; padding-block: 3px; margin: unset; } .dialog-expression-preset-slot { --expression-preset-size: min(8dvh, 4dvw); display: grid; gap: calc(var(--gap) / 2); grid-template: "canvas save-button" 50% "canvas load-button" 50% / calc(2 * var(--menu-button-size) + var(--gap)) min-content; } .dialog-expression-preset-slot button { height: var(--expression-preset-size); width: calc(2 * var(--menu-button-size) + 0.5 * var(--gap)); justify-self: start; } .dialog-expression-preset-slot button[name="save"] { grid-area: save-button; margin-top: calc(var(--gap) / 4); align-self: self-end; } .dialog-expression-preset-slot button[name="load"] { grid-area: load-button; margin-bottom: calc(var(--gap) / 4); align-self: self-start; } .dialog-expression-preset-slot:first-child button { margin-top: unset; } .dialog-expression-preset-slot:last-child button { margin-bottom: unset; } .dialog-expression-preset-slot canvas { grid-area: canvas; max-height: calc(2 * var(--expression-preset-size) + var(--gap) / 2); max-width: calc(2 * var(--expression-preset-size) + var(--gap) / 2); min-height: min(20dvh, 10dvw, 200px) !important; min-width: min(20dvh, 10dvw, 200px) !important; position: static; } #dialog-owner-rules { grid-template: "dialog-menubar dialog-menubar" var(--menu-button-size) "dialog-status dialog-status" min-content "dialog-grid dialog-grid" auto / var(--menu-button-size) min-content; } #dialog-owner-rules-grid { width: 100% !important; display: block; color: white; margin-block: unset; user-select: none; } #dialog-owner-rules-grid > li { text-indent: 1em hanging each-line; } @supports(height: 100dvh) { .dialog-root { --menu-button-size: min(9dvh, 4.5dvw); --button-height: calc(min(25dvh, 12.5dvw) - 2px); --gap: min(2dvh, 1dvw); } #dialog-dialog { --dialog-button-size: min(8dvh, 4dvw); } .dialog-grid-button > .button-tooltip { width: calc(400% + 4 * min(0.2dvh, 0.1dvw) + 3 * var(--gap)); } .dialog-focus-grid [role="radiogroup"] { border-width: min(0.3dvh, 0.15dvw); } .dialog-focus-grid [role="radio"] { border-width: min(0.3dvh, 0.15dvw); } .dialog-focus-grid [role="radio"][aria-checked="true"] { border-width: min(0.5dvh, 0.25dvw); } } @supports (background-color: color-mix(in srgb, black 50%, transparent)) { .dialog-grid-button:disabled[aria-checked="true"], .dialog-grid-button[aria-disabled="true"][aria-checked="true"] { background-color: color-mix(in srgb, var(--disabled-color) 50%, var(--hover-color) 50%) !important; } .dialog-grid-button:disabled[aria-checked="true"] > .button-label, .dialog-grid-button[aria-disabled="true"][aria-checked="true"] > .button-label { background-color: color-mix( in srgb, color-mix(in srgb, var(--disabled-color) 50%, var(--hover-color) 50%) 50%, transparent ) !important; } }