Changeset 16fd4fe in Klonkt for src/assets
- Timestamp:
- 08/22/2026 09:32:29 AM (3 weeks ago)
- Branches:
- main
- Children:
- e679bce
- Parents:
- 8e1af9c
- Location:
- src/assets
- Files:
-
- 1 added
- 1 edited
-
css/style.css (modified) (1 diff)
-
js/mod/tape.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/css/style.css
r8e1af9c r16fd4fe 5076 5076 background: var(--accent, #e8b04b); color: #1a1205; 5077 5077 } 5078 5079 /* ── Het bandje (mixtape) ────────────────────────────────────────────── 5080 Zelfde familie als .post-album hierboven: dezelfde rand, dezelfde radius, 5081 dezelfde papierkleur. Het verschil zit in wat je ziet draaien, niet in een 5082 ander jasje -- een mixtape is een soort uitgave binnen Klonkt, geen ander 5083 product. 5084 5085 Alles hieronder gebruikt de bestaande variabelen (--rule, --paper-2, --ink, 5086 --accent), dus het volgt licht en donker en het accent van de site vanzelf. */ 5087 .post-tape { 5088 position: relative; 5089 border: 1px solid var(--rule, rgba(0,0,0,.1)); 5090 border-radius: 14px; 5091 overflow: hidden; 5092 margin: 1.25rem 0; 5093 background: var(--paper-2, color-mix(in srgb, var(--ink) 3%, transparent)); 5094 } 5095 5096 /* De cassette zelf. De verhouding is die van een echt bandje (ongeveer 10:6), 5097 zodat hij ook op een telefoon als cassette leest en niet als balk. */ 5098 .tape-shell { 5099 display: grid; 5100 grid-template-rows: auto auto; 5101 gap: .5rem; 5102 padding: .8rem .8rem .4rem; 5103 } 5104 .tape-window { 5105 position: relative; 5106 display: flex; 5107 align-items: center; 5108 justify-content: center; 5109 gap: 12%; 5110 padding: .9rem 1.2rem; 5111 border-radius: 10px; 5112 background: color-mix(in srgb, var(--ink) 8%, transparent); 5113 border: 1px solid var(--rule, rgba(0,0,0,.12)); 5114 } 5115 /* De band tussen de spoelen. Een dun lijntje is genoeg: het gaat om de twee 5116 draaiende schijven, dat is wat een cassette een cassette maakt. */ 5117 .tape-band { 5118 position: absolute; 5119 left: 22%; right: 22%; 5120 height: 3px; 5121 background: color-mix(in srgb, var(--ink) 35%, transparent); 5122 border-radius: 2px; 5123 } 5124 .tape-reel { 5125 position: relative; 5126 width: clamp(48px, 16vw, 76px); 5127 aspect-ratio: 1; 5128 border-radius: 50%; 5129 background: 5130 repeating-conic-gradient(from 0deg, 5131 color-mix(in srgb, var(--ink) 22%, transparent) 0deg 12deg, 5132 transparent 12deg 24deg); 5133 border: 2px solid color-mix(in srgb, var(--ink) 30%, transparent); 5134 display: grid; 5135 place-items: center; 5136 } 5137 .tape-reel-hub { 5138 width: 34%; 5139 aspect-ratio: 1; 5140 border-radius: 50%; 5141 background: var(--paper, #fff); 5142 border: 2px solid color-mix(in srgb, var(--ink) 40%, transparent); 5143 } 5144 /* Draaien doet hij alleen als hij speelt. De animatie staat op de spoel en niet 5145 op de hele cassette: het label hoort stil te blijven, anders wordt de titel 5146 onleesbaar. */ 5147 .post-tape.is-playing .tape-reel { animation: tape-spin 2.4s linear infinite; } 5148 .post-tape.is-playing .tape-reel--right { animation-duration: 3.2s; } 5149 @keyframes tape-spin { to { transform: rotate(360deg); } } 5150 /* Wie liever geen beweging ziet, krijgt geen beweging. De cassette blijft dan 5151 gewoon staan; de statusregel eronder vertelt nog steeds wat er speelt. */ 5152 @media (prefers-reduced-motion: reduce) { 5153 .post-tape.is-playing .tape-reel { animation: none; } 5154 } 5155 5156 .tape-label { 5157 padding: .5rem .6rem; 5158 border-radius: 8px; 5159 background-size: cover; 5160 background-position: center; 5161 position: relative; 5162 } 5163 /* Staat er een hoes achter het label, dan moet de tekst leesbaar blijven. */ 5164 .tape-label[style] { color: #fff; text-shadow: 0 1px 3px rgba(0,0,0,.7); } 5165 .tape-kind { 5166 margin: 0; 5167 font-size: .7rem; 5168 letter-spacing: .06em; 5169 text-transform: uppercase; 5170 opacity: .75; 5171 } 5172 .tape-title { margin: .1rem 0 0; font-size: 1.05rem; line-height: 1.25; } 5173 .tape-artist { margin: .05rem 0 0; font-size: .85rem; opacity: .8; } 5174 .tape-meta { margin: .15rem 0 0; font-size: .75rem; opacity: .65; } 5175 5176 /* De knoppen: terugspoelen, spelen, vooruitspoelen. Meer heeft een bandje niet, 5177 en dat is de bedoeling -- er is geen zoekbalk omdat je op een cassette niet 5178 kunt zoeken. */ 5179 .tape-controls { 5180 display: flex; 5181 align-items: center; 5182 justify-content: center; 5183 gap: .6rem; 5184 padding: .3rem 0 .7rem; 5185 } 5186 .tape-btn { 5187 display: grid; 5188 place-items: center; 5189 width: 40px; height: 40px; 5190 border-radius: 50%; 5191 border: 1px solid var(--rule, rgba(0,0,0,.15)); 5192 background: var(--paper, #fff); 5193 color: var(--ink); 5194 cursor: pointer; 5195 padding: 0; 5196 } 5197 .tape-btn svg { width: 18px; height: 18px; } 5198 .tape-btn:hover { border-color: var(--accent); color: var(--accent); } 5199 .tape-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } 5200 .tape-btn--play { 5201 width: 52px; height: 52px; 5202 background: var(--accent); 5203 border-color: var(--accent); 5204 color: var(--paper, #fff); 5205 } 5206 .tape-btn--play svg { width: 22px; height: 22px; } 5207 /* Speelt hij, dan is dezelfde knop de pauzeknop. Twee knoppen zou een bandje 5208 niet hebben. */ 5209 .post-tape.is-playing .tape-btn--play svg path { d: path("M7 5h4v14H7zM13 5h4v14h-4z"); } 5210 5211 .tape-now { 5212 margin: 0; 5213 padding: 0 .8rem .4rem; 5214 text-align: center; 5215 font-size: .8rem; 5216 opacity: .8; 5217 min-height: 1.2em; 5218 } 5219 5220 /* De nummers staan er als INHOUD, niet als knoppen. Geen cursor, geen hover, 5221 geen aanwijzing dat je erop kunt drukken: op een cassette kun je dat niet. */ 5222 .tape-tracks { 5223 margin: 0; 5224 padding: 0 .8rem .8rem; 5225 list-style: none; 5226 counter-reset: tape; 5227 display: grid; 5228 gap: .1rem; 5229 } 5230 .tape-track { 5231 counter-increment: tape; 5232 display: flex; 5233 gap: .5rem; 5234 align-items: baseline; 5235 font-size: .85rem; 5236 padding: .18rem .3rem; 5237 border-radius: 6px; 5238 opacity: .75; 5239 } 5240 .tape-track::before { 5241 content: counter(tape) "."; 5242 opacity: .55; 5243 min-width: 1.4em; 5244 font-variant-numeric: tabular-nums; 5245 } 5246 .tape-track-title { flex: 1; } 5247 .tape-track-dur { opacity: .6; font-variant-numeric: tabular-nums; } 5248 .tape-track.is-current { 5249 opacity: 1; 5250 background: color-mix(in srgb, var(--accent) 12%, transparent); 5251 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)