Mercurial
diff mrjunejune/src/jrpg/jrpg.css @ 273:e02e2036ef84 default tip
add Layer 2 JRPG component system
Add reusable content and window modals, an isolated component sandbox, shared cyberpunk scroll areas, production-safe cache freshness, and server-rendered JRPG panel state.
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sat, 08 Aug 2026 02:08:08 -0700 |
| parents | 41a49c29a28f |
| children |
line wrap: on
line diff
--- a/mrjunejune/src/jrpg/jrpg.css Fri Aug 07 16:05:29 2026 -0700 +++ b/mrjunejune/src/jrpg/jrpg.css Sat Aug 08 02:08:08 2026 -0700 @@ -41,7 +41,15 @@ --zenbu-sys-font-family-ui: "Pixel Mplus"; --zenbu-sys-font-family-content: "Pixel Mplus"; --zenbu-sys-font-family-code: "Pixel Mplus"; + --zenbu-sys-type-caption-family: "Pixel Mplus"; --zenbu-sys-type-label-family: "Pixel Mplus"; + --zenbu-sys-type-body-family: "Pixel Mplus"; + --zenbu-sys-type-body-large-family: "Pixel Mplus"; + --zenbu-sys-type-subtitle-family: "Pixel Mplus"; + --zenbu-sys-type-title-family: "Pixel Mplus"; + --zenbu-sys-type-page-title-family: "Pixel Mplus"; + --zenbu-sys-type-reading-family: "Pixel Mplus"; + --zenbu-sys-type-code-family: "Pixel Mplus"; min-width: 20rem; min-height: 100dvh; overflow: hidden; @@ -741,38 +749,6 @@ box-sizing: border-box; width: min(82vw, 46rem); max-width: calc(100% - var(--zenbu-sys-space-content)); - padding: var(--zenbu-sys-padding-xl); - border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); - border-radius: 0; - background: var(--mjj-jrpg-surface-raised); - color: var(--mjj-jrpg-text); - box-shadow: - inset 0 0 0 var(--zenbu-sys-stroke-width) - var(--mjj-jrpg-accent), - var(--zenbu-sys-space-control) - var(--zenbu-sys-space-control) - 0 - var(--mjj-jrpg-accent); -} - -.jrpg-preview-dialog dialog::backdrop { - background: color-mix(in srgb, var(--mjj-jrpg-canvas) 84%, transparent); -} - -.jrpg-preview-dialog dialog[open] { - animation: mjj-jrpg-dialog-open var(--zenbu-sys-motion-duration-layout) - var(--zenbu-sys-motion-ease-enter); -} - -@keyframes mjj-jrpg-dialog-open { - from { - clip-path: inset(48% 25%); - transform: scaleX(0.35); - } - to { - clip-path: inset(0); - transform: scaleX(1); - } } .jrpg-dialog-heading { @@ -780,8 +756,6 @@ align-items: center; justify-content: space-between; gap: var(--zenbu-sys-space-group); - padding-bottom: var(--zenbu-sys-padding-md); - border-bottom: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft); } .jrpg-dialog-heading p, @@ -800,8 +774,13 @@ } .jrpg-dialog-heading zen-button > :where(button, a) { + box-sizing: border-box; width: auto; min-width: var(--zenbu-control-height); + height: var(--zenbu-control-height); + padding: + var(--zenbu-control-padding-block) + var(--zenbu-control-padding-inline); border-color: var(--mjj-jrpg-accent); background: var(--mjj-jrpg-surface); color: var(--mjj-jrpg-text); @@ -812,40 +791,32 @@ padding: 0; } -.jrpg-preview-dialog dialog h2 { - margin-top: var(--zenbu-sys-space-content); -} - -.jrpg-preview-dialog dialog > p { - margin-bottom: var(--zenbu-sys-space-content); -} - .jrpg-preview-dialog dialog.jrpg-detail-dialog { - width: min(94vw, 72rem); + width: min(92vw, 60rem); max-height: calc(100dvh - var(--zenbu-sys-space-container)); overflow: hidden; } .jrpg-preview-dialog dialog.jrpg-detail-dialog[open] { display: grid; - grid-template-rows: auto auto minmax(0, 1fr) auto; + grid-template-rows: auto minmax(0, 1fr) auto; gap: var(--zenbu-sys-space-group); } +mjj-window-modal .jrpg-detail-content { + box-sizing: border-box; + height: 100%; + min-height: 0; + padding: var(--zenbu-sys-padding-lg); +} + +mjj-content-modal .jrpg-detail-content { + padding: var(--zenbu-sys-padding-lg); +} + .jrpg-preview-dialog dialog.jrpg-detail-dialog[data-detail-mode="tools"] { - width: calc(100vw - var(--zenbu-sys-space-content)); - max-width: none; - height: calc(100dvh - var(--zenbu-sys-space-content)); - max-height: none; - padding: 0; - border: 0; - background: transparent; - box-shadow: none; -} - -.jrpg-preview-dialog dialog.jrpg-detail-dialog[data-detail-mode="tools"][open] { - grid-template-rows: auto minmax(0, 1fr); - gap: var(--zenbu-sys-space-control); + width: min(90vw, 56rem); + height: min(78dvh, 44rem); } .jrpg-detail-dialog[data-detail-mode="tools"] > h2 { @@ -854,19 +825,14 @@ .jrpg-detail-dialog[data-detail-mode="tools"] .jrpg-dialog-heading { padding: var(--zenbu-sys-padding-sm); - border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); - background: var(--mjj-jrpg-surface-raised); - box-shadow: - inset 0 0 0 var(--zenbu-sys-stroke-width) - var(--mjj-jrpg-accent); } .jrpg-resume-dossier { min-height: 0; - padding: var(--zenbu-sys-padding-lg); + padding: 0; overflow: auto; - border: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft); - background: var(--mjj-jrpg-surface-sunken); + border: 0; + background: transparent; scrollbar-color: var(--mjj-jrpg-frame) transparent; } @@ -901,9 +867,10 @@ .jrpg-resume-dossier .info { display: grid; gap: var(--zenbu-sys-space-control); - padding: var(--zenbu-sys-padding-lg); - border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-primary); - background: var(--mjj-jrpg-panel); + padding: 0 0 var(--zenbu-sys-padding-lg); + border: 0; + border-bottom: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft); + background: transparent; } .jrpg-resume-dossier .info > p { @@ -972,6 +939,10 @@ text-underline-offset: var(--zenbu-sys-space-icon-label); } +.jrpg-resume-dossier a[href="/public/resume.pdf"] { + display: none; +} + .jrpg-dialog-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -1127,56 +1098,18 @@ } .jrpg-tool-panes { - position: relative; box-sizing: border-box; display: grid; - grid-template-columns: - minmax(0, 1fr) - calc(var(--zenbu-sys-space-container) * 2) - minmax(0, 1fr); + grid-template-columns: minmax(0, 1fr); + grid-template-rows: repeat(2, minmax(18rem, auto)); gap: var(--zenbu-sys-space-control); - height: 100%; + height: auto; min-height: 0; padding: var(--zenbu-sys-padding-sm); } .jrpg-tool-panes::before { - grid-column: 2; - grid-row: 1; - border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); - background-image: - radial-gradient( - circle at 50% var(--zenbu-sys-space-content), - var(--mjj-jrpg-highlight) 0 var(--zenbu-sys-stroke-width-emphasis), - var(--mjj-jrpg-frame) var(--zenbu-sys-stroke-width-emphasis) - calc(var(--zenbu-sys-stroke-width-emphasis) * 2), - transparent calc(var(--zenbu-sys-stroke-width-emphasis) * 2) - ), - radial-gradient( - circle at 50% calc(100% - var(--zenbu-sys-space-content)), - var(--mjj-jrpg-highlight) 0 var(--zenbu-sys-stroke-width-emphasis), - var(--mjj-jrpg-frame) var(--zenbu-sys-stroke-width-emphasis) - calc(var(--zenbu-sys-stroke-width-emphasis) * 2), - transparent calc(var(--zenbu-sys-stroke-width-emphasis) * 2) - ), - linear-gradient( - 90deg, - var(--mjj-jrpg-surface-sunken), - var(--mjj-jrpg-surface-raised) 45%, - var(--mjj-jrpg-frame) 50%, - var(--mjj-jrpg-surface-raised) 55%, - var(--mjj-jrpg-surface-sunken) - ), - var(--mjj-jrpg-art); - background-position: center; - background-size: auto, auto, auto, cover; - box-shadow: - inset 0 0 0 var(--zenbu-sys-stroke-width) - var(--mjj-jrpg-info), - 0 0 var(--zenbu-sys-space-related) - color-mix(in srgb, var(--mjj-jrpg-primary) 65%, transparent); - content: ""; - image-rendering: pixelated; + display: none; } .jrpg-tool-window:first-of-type { @@ -1185,8 +1118,8 @@ } .jrpg-tool-window:last-of-type { - grid-column: 3; - grid-row: 1; + grid-column: 1; + grid-row: 2; } .jrpg-tool-pane { @@ -1981,26 +1914,10 @@ box-sizing: border-box; min-width: min(22rem, calc(100vw - var(--zenbu-sys-space-content))); max-width: min(26rem, calc(100vw - var(--zenbu-sys-space-content))); - padding: var(--zenbu-sys-padding-lg); - border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); - border-radius: 0; - background: var(--mjj-jrpg-surface-raised); - color: var(--mjj-jrpg-text); - box-shadow: - inset 0 0 0 var(--zenbu-sys-stroke-width) var(--mjj-jrpg-accent), - var(--zenbu-sys-space-control) var(--zenbu-sys-space-control) 0 var(--mjj-jrpg-accent); } -.jrpg-archive-dialog::backdrop { - background: color-mix(in srgb, var(--mjj-jrpg-canvas) 84%, transparent); -} - -.jrpg-archive-dialog[open] { - display: grid; - grid-template-rows: auto auto auto; - gap: var(--zenbu-sys-space-group); - animation: mjj-jrpg-dialog-open var(--zenbu-sys-motion-duration-layout) - var(--zenbu-sys-motion-ease-enter); +mjj-window-modal [data-archive-rename-dialog] { + height: auto; } .jrpg-archive-dialog-title { @@ -2276,7 +2193,7 @@ } /* Hamburger button: transparent overlay over baked art */ - .jrpg-mobile-destination-owner > .jrpg-mobile-menu-btn { + .jrpg-mobile-destination-owner > zen-dialog > .jrpg-mobile-menu-btn { display: grid; place-items: center; position: absolute; @@ -2381,10 +2298,13 @@ cursor: pointer; } - .jrpg-mobile-destination-content { + mjj-window-modal .jrpg-mobile-destination-content { min-width: 0; min-height: 0; - overflow: hidden; + padding: 0; + overflow-x: auto; + overflow-y: scroll; + scrollbar-gutter: stable; } .jrpg-mobile-destination-content > :is(mjj-jrpg-menu, .jrpg-utility) { @@ -2538,27 +2458,7 @@ .jrpg-login-dialog { box-sizing: border-box; width: min(24rem, calc(100vw - var(--zenbu-sys-space-content))); - padding: var(--zenbu-sys-padding-xl); - border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); - border-radius: 0; - background: var(--mjj-jrpg-surface-raised); - color: var(--mjj-jrpg-text); - box-shadow: - inset 0 0 0 var(--zenbu-sys-stroke-width) var(--mjj-jrpg-accent), - var(--zenbu-sys-space-control) var(--zenbu-sys-space-control) 0 - var(--mjj-jrpg-accent); -} - -.jrpg-login-dialog::backdrop { - background: color-mix(in srgb, var(--mjj-jrpg-canvas) 84%, transparent); -} - -.jrpg-login-dialog[open] { - display: grid; - grid-template-rows: auto auto minmax(0, 1fr); - gap: var(--zenbu-sys-space-group); - animation: mjj-jrpg-dialog-open var(--zenbu-sys-motion-duration-layout) - var(--zenbu-sys-motion-ease-enter); + height: auto; } .jrpg-login-dialog-header { @@ -2566,8 +2466,6 @@ align-items: center; justify-content: space-between; gap: var(--zenbu-sys-space-group); - padding-bottom: var(--zenbu-sys-padding-md); - border-bottom: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft); } .jrpg-login-dialog-header h2 {