@import url("https://fonts.googleapis.com/css2?family=Cascadia+Code:ital,wght@0,200..700;1,200..700&family=Geologica:wght@100..900&display=swap"); @layers system interface content colorscheme animation demonstration; @layer system { :not(details.page) > details.page { position: relative; counter-reset: page 0; } :not(details.page) > details.page[open] > summary { display: none; } details.page { --pages-page-width: max(20vw, 380px); --pages-page-height: max(40vh, 370px); --pages-page-padding: 1rem; width: var(--pages-page-width, max(20vw, 380px)); height: var(--pages-page-height, max(40vh, 370px)); box-sizing: border-box; padding: var(--pages-page-padding, 1rem); border-radius: 0.75rem; overflow: hidden; } details.page > details.page { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } details.page[open] { z-index: 10; counter-increment: page 1; } details.page > :not(details, summary) { z-index: 1; position: relative; } details.page > summary { z-index: 5; right: var(--pages-page-padding, 1rem); bottom: var(--pages-page-padding, 1rem); position: absolute; max-width: calc(50% - var(--pages-page-padding, 1rem)); min-width: 30px; width: min-content; box-sizing: border-box; padding: 0.4rem 1rem; display: flex; gap: 0.2rem; justify-content: center; cursor: pointer; border-radius: 0.75rem; } details.page[open] > summary { left: var(--pages-page-padding, 1rem); right: unset; } details.page[open] > summary:before { content: var(--localization-button-previous, "Previous"); } details.page[open] > details.page:not([open]) > summary:before { content: var(--localization-button-next, "Next"); } } @layer content { @layer page { details.page > section.content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; box-sizing: border-box; padding: var(--pages-page-padding, 1rem); display: flex; flex-direction: column; gap: 1rem; } details.page > section.content > span:has(> :is(span, a).separated) { justify-content: space-between; } details.page > section.content > :is(h2, h3) { margin: unset; margin-top: 0.2rem; text-align: center; font-weight: 200; } } @layer author { details.page#author > section.content { --pages-author-avatar-diameter: 200px; padding: var(--pages-page-padding, 1rem) calc(var(--pages-page-padding, 1rem) + 0.5rem); gap: unset; } details.page#author > section.content > h2 { font-weight: 500; font-family: "Cascadia Code"; } details.page#author > section.content > h2 + span#name { margin-bottom: 1.2rem; align-self: center; font-weight: 400; font-family: "Cascadia Code"; } details.page#author > section.content > span { margin-bottom: 0.6rem; display: inline-flex; font-family: "Cascadia Code"; } details.page#author > section.content > div.x:has(> div.y > img#avatar) { --pages-author-avatar-diameter: 100px; z-index: -10; width: 100%; height: calc(100% - (var(--pages-page-padding, 1rem) * 2 + 3rem)); } details.page#author > section.content > div.x > div.y:has(> img#avatar) { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } details.page#author > section.content > div.x > div.y > img#avatar { z-index: 20; position: absolute; width: var(--pages-author-avatar-diameter, 100px); height: var(--pages-author-avatar-diameter, 100px); align-self: center; object-fit: cover; border-radius: 5rem 5rem 100% 100%; } } @layer xiaomi { details.page#xiaomi > section.content > img.xiaomi { --pages-xiaomi-image-diameter: 120px; position: absolute; right: 15%; bottom: 30%; width: var(--pages-xiaomi-image-diameter, 120px); height: var(--pages-xiaomi-image-diameter, 120px); border-radius: 0.75rem; } } @layer destiny { details.page#destiny > section.content > img#masha { position: absolute; top: -10%; height: 150%; align-self: center; } details.page#destiny > section.content > img.masha.red { z-index: 100; position: absolute; top: -10%; height: 150%; align-self: center; mix-blend-mode: overlay; } details.page#destiny > section.content > div#css { z-index: 50; position: absolute; top: 0; left: 0; box-sizing: border-box; display: flex; width: 100%; height: 100%; mix-blend-mode: multiply; /* font-size: 0.8rem; */ } details.page#destiny > section.content > div#css > div.color { width: 100%; height: 100%; display: block; } details.page#destiny > section.content > div#css > div.color > span.flow { word-break: break-all; position: absolute; scale: 1.5; font-family: "Cascadia Code", sans-serif; /* font-size: 0.7rem; */ /* height: 130rem; */ width: 100%; overflow: hidden; /* line-height: 1rem; */ } } @layer license { details.page#license > section.content > p { margin: unset; font-family: "Cascadia Code", sans-serif; font-size: smaller; } } } @layer colorscheme { details.page { outline: var( --pages-page-outline, 2px solid var(--invert-background-color, #fff) ); background-color: var( --pages-page-background-color, var(--section-background-color, #000) ); } details.page > summary { /* outline-offset: -2px; */ } details.page > summary:hover { /* outline-offset: 2px; transition: outline-offset 0.1s ease-in; */ } details.page > summary:active { filter: brightness(0.8); /* outline-offset: -2px; transition: outline-offset 0.05s ease-out; */ } details.page[open] > summary { color: var( --pages-button-previous-text-color, var(--pages-button-previous-text-color, var(--button-text-color, #000)) ); /* outline: 2px solid var( --pages-button-previous-background-color, var( --pages-button-previous-background-color, var(--button-background-color, #fff) ) ); */ background-color: var( --pages-button-previous-background-color, var( --pages-button-previous-background-color, var(--button-background-color, #fff) ) ); } details.page[open] > details.page:not([open]) > summary { color: var( --pages-button-next-text-color, var(--pages-button-next-text-color, var(--button-text-color, #000)) ); /* outline: 2px solid var( --pages-button-next-background-color, var( --pages-button-next-background-color, var(--button-background-color, #fff) ) ); */ background-color: var( --pages-button-next-background-color, var( --pages-button-next-background-color, var(--button-background-color, #fff) ) ); } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background-color: var(--background-color, #000); filter: contrast(50); } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border { z-index: 10; position: absolute; width: calc(var(--pages-author-avatar-diameter, 100px) + 1rem); height: var(--pages-author-avatar-diameter, 100px); border-radius: 100%; filter: blur(25px); /* mix-blend-mode: multiply; */ } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border:nth-of-type(1) { background-color: white; } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border:nth-of-type(2) { width: var(--pages-author-avatar-diameter, 100px); height: calc(var(--pages-author-avatar-diameter, 100px) + 1rem); background-color: white; } details.page#author > section.content > div.x > div.y > img#avatar ~ div.border:nth-of-type(3) { background-color: white; } } @layer animation { @keyframes determination-x { 0% { transform: translateX(20%); } 100% { transform: translateX(-20%); } } @keyframes determination-y { 0%, 5% { transform: translateY(30px); } 95%, 100% { transform: translateY(-30px); } } @keyframes determination-rotate { 0% { rotate: 10deg; } 100% { rotate: -10deg; } } @keyframes determination-border { 0% { transform: rotate(0deg) translateY(9px); } 100% { transform: rotate(360deg) translateY(-9px); } } details.page#author > section.content > div.x:has(> div.y > img#avatar) { animation-name: determination-x; animation-duration: 1.8s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.5, 0, 0.55, 1); } details.page#author > section.content > div.x > div.y:has(> img#avatar) { animation-name: determination-y; animation-duration: 2.2s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.3, 0, 0.5, 1); } details.page#author > section.content > div.x > div.y > img#avatar { animation-name: determination-rotate; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.3, 0, 0.3, 1); } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border { animation-name: determination-border; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.5, 0, 0.5, 1); } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border:nth-of-type(1) { animation-duration: 2s; } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border:nth-of-type(2) { animation-duration: 3s; } details.page#author > section.content > div.x > div.y:has(> img#avatar) > div.effects > div.border:nth-of-type(3) { animation-duration: 1.7s; } @keyframes page-from { 0% { top: 0px; opacity: 1; filter: blur(0px); } 100% { top: -10px; opacity: 0; filter: blur(1px); } } @keyframes page-to { 0% { top: 10px; opacity: 0; filter: blur(1px); } 100% { top: 0px; opacity: 1; filter: blur(0px); } } /* details.page:has(> summary:focus) > section.content { animation-name: page-to; animation-duration: 0.1s; animation-iteration-count: 1; animation-fill-mode: forwards; animation-timing-function: ease-out; } details.page[open]:has(> details.page > summary:focus) > section.content { animation-name: page-from; animation-duration: 0.1s; animation-iteration-count: 1; animation-fill-mode: forwards; animation-timing-function: ease-in; } */ /* details.page[open]:has(> summary:focus) > section.content { animation-name: page-from; animation-duration: 0.1s; animation-iteration-count: 1; animation-fill-mode: forwards; animation-timing-function: ease-out; } details.page:has(> details.page[open] > summary:focus) > section.content { animation-name: page-to; animation-duration: 0.1s; animation-iteration-count: 1; animation-fill-mode: forwards; animation-timing-function: ease-in; } */ @keyframes destiny-masha { 0% { transform: translateX(-10px) translateY(10px); } 100% { transform: translateX(-20px) translateY(-20px); } } details.page#destiny > section.content > img#masha { animation-name: destiny-masha; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.5, 0, 0.5, 1); } details.page#destiny > section.content > img.masha.red { animation-name: destiny-masha; animation-duration: 2s; animation-delay: 0.4s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.5, 0, 0.5, 1); } @keyframes destiny-flow { 0% { transform: translateY(0px); } 100% { transform: translateY(-1000px); } } @keyframes destiny-color { 0%, 30% { font-size: 0.7rem; font-weight: 300; line-height: 0.7rem; opacity: 1; color: rgb(0, 0, 0); } 100% { font-size: 1.2rem; font-weight: 900; line-height: 1.5rem; opacity: 1; color: rgb(255, 0, 0); filter: blur(0px); } } @keyframes destiny-rotate { 0% { rotate: -10deg; } 100% { rotate: 10deg; } } details.page#destiny > section.content > div#css { animation-name: destiny-rotate; animation-duration: 3s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.5, 0, 0.5, 1); } details.page#destiny > section.content > div#css > div.color { animation-name: destiny-color; animation-duration: 4s; animation-iteration-count: infinite; animation-direction: alternate; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(1, 0, 0.5, 1); } details.page#destiny > section.content > div#css > div.color > span.flow { animation-name: destiny-flow; animation-duration: 0.6s; animation-iteration-count: infinite; animation-fill-mode: forwards; animation-timing-function: linear; } } @layer demonstration { :root { @layer colorscheme { @layer system { --text-color: #fff; --link-text-color: #7c84f7; --link-hover-text-color: #56b8f3; --link-active-text-color: #6f54d9; --background-color: #000; --invert-background-color: #fff; --section-background-color: #000; --button-background-color: #000; --button-text-color: #fff; } @layer pages { @layer page { --pages-page-background-color: #000; --pages-page-outline: 2px solid var(--invert-background-color, #fff); } @layer button { --pages-button-background-color: #fff; --pages-button-next-background-color: #fff; --pages-button-previous-background-color: #fff; --pages-button-text-color: #000; --pages-button-next-text-color: #000; --pages-button-previous-text-color: #000; } } } @layer localization { --localization-button-next: "Next"; --localization-button-previous: "Previous"; } color: var(--text-color, #fafafa); font-family: "Geologica", sans-serif; } body { --gap: 2rem; margin: unset; width: 100vw; height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; background-color: var(--background-color, #000); } .unselectable { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } h1 { margin: unset; margin-bottom: var(--gap, 2rem); font-weight: 200; } strong:has(+ h1) { margin-left: 2.5rem; margin-bottom: -0.8rem; font-family: "Cascadia Code", sans-serif; font-weight: 200; text-decoration: line-through; color: red; } a { font-family: "Cascadia Code", sans-serif; text-decoration: unset; color: var(--link-text-color, blue); } a:hover { color: var(--link-hover-text-color, blue); } a:is(:active, :focus) { color: var(--link-active-text-color, blue); } span#current_page { z-index: 1000; margin-top: var(--gap, 2rem); padding: 0.4rem 1rem; display: flex; gap: 0.3rem; border-radius: 0.75rem; border: 2px solid var(--invert-background-color, #fff); background-color: var(--background-color, #000); } span#current_page:after { content: counter(page); font-variant-numeric: tabular-nums; } }