From e61e43892c980d981de0463d15d5b45fbfc3e2d6 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Sun, 26 Jul 2026 00:40:40 +0700 Subject: [PATCH] feat: add verified facts, licensed textures and an original portrait MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content: new Origin story, The look and Beyond the series sections, plus expanded relationships and gated arc detail. Two claims that had been omitted as disputed are now settled and restored — the October 10 birthday, corroborated by the creator's own birthday artwork, and the English voice credit. Height added. Age is shown as "28-29 — sources differ" rather than silently picking a side. Artwork: the abstract hero silhouette becomes a hand-plotted SVG portrait whose fills read custom properties, so one drawing re-colours itself for the manga and anime palettes in The look. Still no image file of the character — the series is copyrighted, and that does not change because a picture is redrawn or relicensed. Textures: three licensed photographic backdrops, one CC0 and two under the Unsplash License, each credited in the footer with author and source. Two more were sourced and dropped: their seamless tiles read as repeating ornament once the blend actually worked. Blending is `screen` rather than `soft-light`, which collapses toward the backdrop on a near-black palette and rendered four of the five invisible. Contrast: magenta text moves to its own lighter token so every textured surface can carry visible grain and still clear 5:1 on small type. Page floor is 5.44:1, measured from rendered pixels. Also: drop background-attachment parallax that cost dropped frames, stop publishing internal working notes to the live site, add a LICENSE scoped to exclude the series and the third-party textures, and correct the artwork-provenance claims now that the page uses photographs. --- .github/workflows/deploy-pages.yml | 10 +- LICENSE | 47 + README.md | 60 +- assets/textures/bokeh-dust.jpg | Bin 0 -> 10371 bytes assets/textures/city-night.jpg | Bin 0 -> 62634 bytes assets/textures/paper-grain.jpg | Bin 0 -> 11256 bytes css/style.css | 812 ++++++++++++++++-- index.html | 406 +++++++-- js/scroll-reveal.js | 23 +- ...i-designer-curated-publish-facts-report.md | 140 +++ ...ui-designer-cc0-texture-manifest-report.md | 75 ++ ...designer-reigen-additional-facts-report.md | 374 ++++++++ ...integrator-reigen-visual-upgrade-report.md | 243 ++++++ 13 files changed, 2021 insertions(+), 169 deletions(-) create mode 100644 LICENSE create mode 100644 assets/textures/bokeh-dust.jpg create mode 100644 assets/textures/city-night.jpg create mode 100644 assets/textures/paper-grain.jpg create mode 100644 plans/reports/from-integrator-to-ui-designer-curated-publish-facts-report.md create mode 100644 plans/reports/from-researcher-to-ui-designer-cc0-texture-manifest-report.md create mode 100644 plans/reports/from-researcher-to-ui-designer-reigen-additional-facts-report.md create mode 100644 plans/reports/from-ui-ux-designer-to-integrator-reigen-visual-upgrade-report.md diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index fd59dd3..8da5e6d 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -29,10 +29,18 @@ jobs: - name: Setup Pages uses: actions/configure-pages@v5 + # plans/ holds internal working notes. Publishing the repo root would + # serve them at /plans/reports/..., so stage only what the site needs. + - name: Stage site files + run: | + mkdir -p _site + cp index.html README.md LICENSE .nojekyll _site/ + cp -r css js assets _site/ + - name: Upload site artifact uses: actions/upload-pages-artifact@v3 with: - path: . + path: _site - name: Deploy id: deployment diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8cf9fb8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,47 @@ +MIT License + +Copyright (c) 2026 tiennm99 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +SCOPE OF THIS LICENSE + +This licence covers only the original work in this repository: the HTML, CSS and +JavaScript, and the hand-authored SVG artwork (the character portrait, favicon, +salt motifs and decorative shapes). + +It does NOT cover: + +1. "Mob Psycho 100", Reigen Arataka, or any other element of the series. Those + are the property of ONE, Shogakukan and Bones. This repository is an + unofficial, non-commercial fan work, and no official artwork, screenshots or + logos are included in it. Short quotations from the series are used for + commentary and remain the property of their rights holders. + +2. The photographic textures in assets/textures/, which are third-party works + under their own licences: + - paper-grain.jpg — CC0 1.0, ambientCG / Lennart Demes + - city-night.jpg — Unsplash License, The Ordinary Moments + - bokeh-dust.jpg — Unsplash License, Rana Mia + paper-grain.jpg is a derivative: the CC0 source was tone-subtracted, its + detail amplified and highlight-clipped, then mirrored into a seamless tile. + CC0 permits this without restriction. Full attribution and source links are + in the page footer. diff --git a/README.md b/README.md index 43893d9..061a25f 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,19 @@ no framework, no dependencies to install. ## What's on it -Ten sections in one scroll: hero, profile, who he is, personality, an -abilities panel that sets his four real skills against his four branded fake -"techniques", quotes, the people around him, story arcs, and the credits. +Ten numbered sections in one scroll — profile, who he is, origin story, +personality, the look, an abilities panel that sets his four real skills against +his four branded fake "techniques", quotes, the people around him, story arcs and +trivia — then a credits footer. -- **No anime imagery.** Every visual — the aura fields, ray burst, faceless - suited figure, salt-splash dividers, favicon — is hand-authored CSS and inline - SVG. There is not a single `` tag or raster file in the repo, which is - deliberate: see [Licensing](#licensing-and-credits). +- **No official artwork of the character, anywhere.** The portrait, aura, salt + motifs and favicon are hand-authored SVG and CSS, drawn for this page. The + portrait is a single SVG symbol whose fills read custom properties, so one + drawing re-colours itself for the manga and anime palettes in *The look*. +- **Photographic textures are licensed stock**, used as low-opacity backdrops: + one CC0, two under the Unsplash License, each credited in the footer with + author and source. None of them depict the character or the series — see + [Licensing](#licensing-and-credits). - **Content lives in the HTML**, not injected by JavaScript, so the page reads fine with scripting off and is indexable. - **Accessible by construction** — semantic landmarks, skip link, one `

`, @@ -42,12 +47,13 @@ python -m http.server 8099 ``` index.html # the whole page — all content is in the markup -css/style.css # design tokens, layout, the CSS/SVG artwork +css/style.css # design tokens, layout, texture machinery, CSS/SVG artwork js/main.js # entry point; wires up the enhancements js/scroll-reveal.js # IntersectionObserver reveals (reduced-motion aware) js/nav-highlight.js # highlights the nav link for the section in view assets/favicon.svg # original salt-splash mark -plans/reports/ # research and build notes +assets/textures/ # 3 licensed photographic backdrops (~84 KB total) +plans/reports/ # research, build and review notes .github/workflows/ # GitHub Pages deployment ``` @@ -68,16 +74,32 @@ This is a **fan work**. *Mob Psycho 100* and all its characters are the property of **ONE, Shogakukan, and studio Bones**. This page is not affiliated with, authorised by, or endorsed by any of them, and nothing here is for sale. -No official art, screenshots or logos are used, reproduced or hotlinked — the -artwork is original to this repo for exactly that reason. Character quotes are -short excerpts used for commentary and attributed to Reigen. +No official art, screenshots or logos are used, reproduced or hotlinked. Every +depiction of the character in this repo is original vector work drawn for it — +there is deliberately no image *file* of him at all, because a picture of a +copyrighted character stays copyrighted no matter who draws or licenses it. +Character quotes are short excerpts used for commentary and attributed to Reigen. -Factual content was compiled from the sources credited in the page footer, -chiefly the Mob Psycho 100 Wiki and Wikipedia. Claims that could not be -corroborated were left out rather than guessed at, and quotes carry no episode -or chapter citation because their exact provenance could not be verified — an +The photographic textures in `assets/textures/` are licensed stock that has +nothing to do with the series — aged paper under **CC0 1.0** +(ambientCG/Lennart Demes via Wikimedia Commons), plus a +night skyline and a bokeh/dust abstract under the **Unsplash +License**. Per-image authors, licenses and source links are in the page footer +and in `plans/reports/from-researcher-to-ui-designer-cc0-texture-manifest-report.md`. + +Factual content was compiled from the sources credited in the page footer — the +Mob Psycho 100 Wiki and MyAnimeList for character details, Wikipedia and Anime +News Network for production and cast credits, and a number of anime news and +listicle sites for the rest. Those last ones are the weakest link, and they are +why two claims turned out to be contested. + +Claims that could not be corroborated were left out rather than guessed at, ones +that sources genuinely disagree on are shown as disagreeing, and quotes carry no +episode or chapter citation because their provenance could not be verified — an invented citation would be worse than none. -The site's own code and original artwork are free to reuse. If you hold rights -to the series and want something changed or taken down, open an issue or reach -me at [github.com/tiennm99](https://github.com/tiennm99). +The site's own code and original artwork are released under the MIT License (see +`LICENSE`). That covers this repo's own work only — not the series, and not the +third-party textures, which keep their own licences as credited above. If you +hold rights to the series and want something changed or taken down, open an issue +or reach me at [github.com/tiennm99](https://github.com/tiennm99). diff --git a/assets/textures/bokeh-dust.jpg b/assets/textures/bokeh-dust.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e072deb4b7e91ac723cb2ab91e4592c9d2655462 GIT binary patch literal 10371 zcmb8VcT`hd6E}K72Z0BW8j45>y#+!Es3;OT7({9S>4YNELQ{ysgHjTtOD~~FC-kCH zlrBiGA}t^wO^Sko-uS-vuJztOzCXS>Yh|BZX7(?$XJ(hP|IGeb23YhFdI$gn0s*?@ z2l%r9XaRK8G_*9-bhI?I^mKIejF%Z1FI{5fW@Tf(%*V~o&&$mVz9K9wdgZF*RWL6^ zNla2!P64VQAgT;kmWNBrE6D#90-~d*XJlaHVr1l!7vvR`|G%a`od7Ex=mmu(B}fRM zUSeWfp*ff&xSZqNJdrrl9@X0z|<|c~yam z?IzOUvXJkS0%~?>qVO%pt}#U-hlr@D-^u}*5By(||09&lN0v%Mt`lVaPj7#F1t|a9 zCy14T?WzLh<(p8X!=HJ8krG4(NXZJ^0Dgxj);FF@?Tr8v7P~&h2=^; z*zXV1lId4kXZRZX#K$3X6RO3%V|m`eqU&WdB})6VYrK!#r^{yTGYcKJ!`O^Zg;;GT zPvH(6;;NYHjpMxzEeS+%mjaAOp;ys^dFI(pUdb<;Dp@0Ir!cbyLtBS={^)9Y{ipKN z(bAP`SN4Lwbd4Whz%BhM&!A=mRS&|u_`*~4%i}k)#uXaA4z?4?MJ@0f&m$POBc27y z(ca_Wi_H<+kCvaI^#Dg#&NS8)mdlv7lgdbg$YT3eNlsk$l})p&J0;BtT7Q629a+5# z6^Q}u8xm3xKNPn*x`y}?!0DbQbv7o4c523j?OCO06?DYU#LARhtDwm|rt{>>2(Ih1 z6@LIZH(t+(!;wnW%AwNNex~^O(`(Gh;Bl#p<;_nmIzGRz+$lF6n;GwxknwE_IUQZYaIP`=`$4&*!DG9DH@1SB6?xTP{rOY@zX)_I}nKPQPv6bnKXjCnyRqv#Ga*=eFvY%jRCkzqYg>4R0yn zrD4lkebLkS=lAbzZuR^toU{4Oe|3wW|FPV`Ns`%;hyJ?Q3csqaSW}=57_BX7@I&oP zMKxr$?cQS1_VL{2^49fZxGD_Pok>YJ|)lj7uWUN9k5%Pr!j0DXn~ci*Jtex>>H$LM9)@-OG)IEN4A0eQhxIB(c6KXxCf+4)z zn4%dW-(MNcPNhR)wYf7^-@p1C^W6)s`*nq$S#|3{KLqNV_lP$>ZOQ{b(p>rRTua*T zq}9&q)hozZan}g3x!%h%EE$t3w@2liye-OOBr4t`Wsu44YZLJUE}XE{D6&5R`va7z zs7WmaRA~CXHtXYl70zL>`7Xz?^LHbGN5qhPOV&*T4v`d0YxuxVm1XyhXz-ew9iz;Id4}aTn8bx2c}eYu)ok}P+j z;g|OZ;BfWpk@oY=Mme_{A!iSbL_#2in)5q0=aYBT?#M)^eTe7X zaUg)+DqX8>DKA_<#6|AwuMUxCPkTKYPHz^-(x6|wcsF36?K*BRtfh3mdQo*R`#}TmlmFRI2@1#|s7Y5=A(!q^RM8bx`eCH*_JcoY$!R6ukVZ zLbnGe#etc*QP80J5M{f_N?l&fB$O=V5fY`O-PFl21Z`N_r9IF zUc@%|HI_=f^I0}2)!W=gj*3IwH!Pb19Q*X+@KUZV%Q9BX^qB~zx^Fk_hF9W36-bjV ze1Y|r-NS@`n&K=sGbiKCm=wB)g()qy5P@Y3EXq*~QPFvyCon#xC|== z)8%&}UW*w+4yfcOACm;|bHxbL7-gww%SAi`(n!KIspJizpfep*0*&Ir@vh-E|K;Bt zr}6gi+lnV}V|r|kAWCi=6-p?c89fdzcQ8pXqu70A?=nT47N2r>e{N|oJ6#v$+aP^GzFr`3Lyv-Axs?aQ6wB^nHQDoy+k?PO_4U&6;L@0!H+kIvPGSz`%XJ-smPn->j<+C5E8X*gob zQiBr@tVhxC(N1I=H}SR6kH<4b(!RFu9pbz#l1t=wliM3ygiC_IiT7F-7Jl8c7wJI- zW1ew)W=$P>(%poe@b12ufdp|VcuO)*u6Nm1bRlhu%y?`YW6jVUL&qFTa{hT0o{BdVY4KyWlb(0M)-Gb!^&;m{K2CReZ>E)6A2{(S zUH>Xu0&Dtiom8WIzj#nWxnCuo@I@QO8?g9@K-VUr{{%OaDR(*PciPPIm$-)C+clqN z*vlTJ@@gaBsw{Z4es{so!+n4B8Z|F|st6N?1zQkmz%vlb<#egYQarDqPr@d8)8zJNK4ni2r*iL2^)e;xl=2sf{}Y>kVesMC#spIf=%h(fk)& z2I)$Z4z!S|qBndkPChz>@%1#uoLSPE91~wv%j@1&c@s_@zOr7=6g$Cm4(Dy=FlD2$nfOAc?`4FA$^xeUKOxw<*-&7yl8)( z(xj_ltq~c&^St-_DXMP4jKHCHW6yQE$deOgnD0pmpO&pO)<~t!4-+N83owO?3NqOz zt#k~!U_{`n7jtHO+|6Jy&a~|dett2r8>H7=&H zhzwV1;0ieF_>9l?466T(w!VXRIB?G^^ySZI^G;bRe(v4SQN@`rH6p9}BQ{qvZ-^kj zblBk^i@0kgBrBAo89`o?@v&gLUZu)U@mtKo;KE*SI>1-C|3Frsx-cr%n#f3#S4U{l zH;2}nAH(X^W#w+NqtSA%dUNg!@lCHjLmyPhjdlrp>0dmVhzVQ%`mVf&RzS)}$64uk zM}9kcu_;h{FnBVoQ9yd_DO|x>57XdUQ9V{wzJZEGNc@}`?5Av^-C4MYMph3#tt;4 z#TwP2V=RHm-a#)i%Xod3;cMAQk+M(rGM#~VK6nY;4N;7|=Z?RX?z|dz1cR_Tz2i1~3@I3qSH~ML+1|u( z8rKX9Hv}c>g?m3bsZvC#K`5QdU51)HsUWjgMx?>ia}+x*Nb$``f^K#9Bcg>)0FQEJD z@|P$%gJcxa`w!5mbIV)X;-9C}2q%%WWDE+GpX~zfaF48DzI`I|D6=x_qx>V zTJj=j{>Zu}SHDkb>Bgt!pSb1~@M?M%ckF7^j>F z!z}oL(f9LgmcZWEUQ6sP70Jhr72`dSRL|dEj3va1%fGngFy_?kg&lj-w;Jp&93+nP z8QbNm^=7u)F|lWbk1*c#NefuZi{vOp@n?3ubVxe%=08=l-rS7B55F;mMDk#AHRZYWjFW_+RzWrr4%>UD>n*F#_r9y|&< zm6eUJhUX9Gk60Q#^rnfQZ`m?6gY?HW5^bSqp*}8W2`ht0@Jwu_bnc2(mI+6buJw0= zM4T1-8(xRUZ;iuOy6xhI2S47mtES(|VV&1_t>(VhmEL+Ucj;s6V~eb6-$u6SI8s`I z0UfB8J^^pbN>YU^)=!yhGY`ZOaq<(h0~Fh?mn0tQ?%$Fu928}L5b-sKuDHN*dbkeI zzqfK@z&tPZoLvz8i@dM|0Cei|zeO+-lYpA2HyS(PZN4BXDW$YUjFn0nAJuGC(tX)& zd~LC&IqtwL0`O`;kEXzt zbXsLqlv#V~H#?(mbAwHL-P`zAkJNRTxd`?D(1JI&o;IMk>V&(BY#yv2`=@U#C+%nyL?Dk1^4X%eX z@6AZUm|3E{xk?*4ATRw@2P-#f9xLAyKdO(QO`O=M5%UWD*T${m=t5cJ zv9HVVCS|7WEj!Jng-6gviAiBIjaxGB*yjdS9h%CIgZG!9syxmFiLCE#^5 zIkif5y~Ux5#0iRDO(>C?FzD{D2Lnd4{P+i{k})Nyu^~D!hLnKyN7*rLqz3`7Ajy7w<9X9vm37){L7E!JN80trHllOd2Xu5r{v*~OB1dMY!fGLQsDLNH9c)u zy`^G;Kt!vg*=v68!yp4auQjI!pU~xQc3keH$mPx63qDUmx%6hVTFbmKUUdX#?iCYZ z<2jZ&t(20fkn(vTduu8~AJxvZ`sEsr8Wgqk1d%0-EV6ByiPS|e;9mB8e|yQ#Z^2ax z*&M$0&@}nLzYKiKTCEYcBIgpsZ6g6!2yb(89~^cN&e3m?(ICjF;QHe>uG0~z;?fz0US zoS=756gUF(kC5%X5K8;;yx}8Db8PrOug^AGK;+$C zCQTG5RfaKyiqEQ+t$>mb#ERht%cz^L0u&g-gdl!NQuCT>7jX82$iIAM3@t z)NgHp=|St|EQ=Drlg9&}o7y$3rkviby85Hu@IfA&a{Ooef+^bc%@~8{qX_@3ZJX0m zS?E&7fP7%jcn4jJ(c;nO7o5uQIami}8|KW9%sL1RI0L(ZO&Sfl-txC0BjuLADaiKysBbSxJ5xQm1{3%!vD7s|Z%ta=66G=xj))2j>I*DhO@O`J`K$)! z?cZ77|EFxEAFiHViZp880+Y7<*WMo*^Aqjnx)=|meicA6m#u!DpH;aGDR+qU>9#t* z<(9_reaksdD-G2h#=#5cY`^>WYIP)Yki&P~&AC8dKVD2mk;7qqSg&2R?u7Y_@rblCl$m82Tqt9Fk zcCueGJCD}#H1GDD-}b~l|2X!RRYlhm%XU+u;CZ=H7ceeSt`rsB$|9>D3wjO(fN?PB zYRsLl+Cr?pq)AQFyrPo^;Ep@BqpTattEj;sXI+ek8!=<-3+iKQJm+01#{{W~5d0iU_ z8(36_mhwL)%03l|%@*r5qPNVBeVqc^;ZCCEZy7g~_TNE1lR|AF^LonXBEhGSsYkg9 zCf64$?92LU;soAGMU`i|=}Z=d%+{+fD20rxT5j+D+|#(uSe&stH!MBva)QwtZ2R5( zV4|EW!k@g@znejN=D5(|7&UQ34CyV#blcb{-`x)_KJatM3iH~GJ{?z^L2R2vw#}|2 zbGexR0e-C%zVWP^`Nef1dT&Ahw3alTfHQ=bNLL38hWKV_-vNBLn+tzZyIv zrG+0n+z-DTD!(OcBf%}*4A}~2xZC8|C|n}vX0D=3ihI+9rq9m8XyZp*l3#={PVlxS zZM^CsiGCRNgcWT#C51X0Kt4c8zYLp&nM>uwXsnLvy^c`XY9-C}sJ;-MA-RF5qeqF! zLT`-?=ad5zTlqc9&L~H$RQkc+bdCZxF@iSNzaGUJce3RJk|KC%V(h4tW?Vx69#e2z zoQU*=U3GG#C&h*aTD4&GwRBAD zSSH4_`m@EdVyvBh+!7=Li(>EHwqs~Ja;0ncX0_4Id3?%upLokR$v!Nly*;m+tk~F@ z8>NNI<10@VV#a;GD@X13@ICZC+}!Hk{sSy@WpOM`yp`UK+7fs`KMp5upbvbvmG<$7 z^nL@yqjEK|RF#sh^@#DYc+bc1wba8K<$hX_nE2nLh z>133Z&bKq2c75&oa^2VKQr?$`IG(y#DQFtul=mp4B?Yo6mz3g@ zOLs^uh+1S%t17jp38U0q2xMOfe>#6ps@nZuHSMjLW#jP9sq5?72qQ)2Z3#o>w2O`% zGaJ2YbHhBLN>P6RL5ySSVbJoOsLOs$XZQNHLtbPa_%P-{yv8|VBdX5d z2Y)6UI)MXU=jNpH4TKxZl^KwbId%8_&66PQ1MKlj2^j}l?zLQ$85I#m^x)SoxWIa9I530XojFPOZhDiL41J^+Yjw}xaCoC8#jU5+ck$${Hs4!09Y()5<8`_Avhkm7LuzjE z$PJWdY^)8rjt%ZkrxSA47t+0;ca`x*=-kjOSf9$7nial&ZL}|aZY)x`!YzwO*(YYO zRn78KXoPjTVEuWnb3Kfdw;?x>z`A|mJOlBOEUh20)fbjS>g{}t3*H(?+jq;GJmCma z7@k7!>*P!YTD!KcjEAE0$}8sHWx>OZQHxq`5X13s6N@WZ{NcIRb9nq}+&H~HjpZ6v zWgjJDLR(f=FK#$!j2zQy_kD&7%Qoz zV=B#zsBgpHOv<5vm2r8o$`A<3#;M0Ig`Zu<2S%71&4*_S+;(0_P_CJiITIZ`j~yt- zP@t!#qq2yFPv9Il1@T6ibRHh<%~$Z!%{KhYrs`v#mcyBKbv5DSAq@H?OHZY^8$u`` zt7sNl(OO|wUAep`3nksdH^UZJuJ)oI{sDffu{W7Pv@wWq9C6^SM)sZ5_Jcqz$?@f3 z{@OTi8LLVQADG*9#&Q8B&d06y!kGid;nOm5|tFvkF)fljT z@Kp=%xse#h-&$irm3@r+HR-&X(-1=ZFdp#rU|7NB(V_3_cK?ZqzT}1Fg|8(am3d@% zZ&?hf&K~>QMfnlj*I)6mq{7=7Gx+`dzXkZD%h-*C1nON=%#uY+$z<1mn5d9mPSYWr z_YLGeDBbn=c+Jh%W)6?qcgf4LLrz^U*(V2;in(aREwP<1xz-k#z%NJsUr)^S7F^ky zdL(v46a5LzxP)ul0e!MLVy-4nNVy+AWsK`2SHB?$Qerwk`Bw*ESvY`bp*s!H2D39X z)(WRA!gm)0?^7EJg7WVJl%{n6(1s0TlaSN8H7g}>USKyUpw}vp1=4-)%2f1YQQ!B?64LPsA@(uFUf%Q5xPm|2K(B!JKsgqx*2EM8^LB6%37= z^K~@yD4am2@+!t1qnsxjOJ1j3D=1UadQmBSPlYrtV<850Dd}!=fd2uKgZ1YRec#VB zB_$x(?v2FZwO4kICbu$s11d*UKK8jy724_SY~bx(w50TAJiS8>oH&Z=#;Z46(l9l7 zkuaFYAK>A3y;DlZyIulEvHhOHokR2VZP_2Fo#zAkddjJ1&chR)tN>{Lh6vwsahaxDJwyT^L8rlI}t1L!P+<>m}KC_ z`?0w+H}~nlFcj+AsJm{JEEH14{Vm{7qjgdB;7xY@K&THQ2&V&YeF00H9gDt4YUn6#$su(*YoW>RoLUU~53r36x<0 z&=dA1-EkiS*B4@&6|`JjMt4~N89{(QrWW8Q&RrroGI*K42TX%Vyah^A)*e$8EQab- z-wpC-%@YGmT|J-9qi6C4ta`)_?R}qHx`E?bqE2c@QQnk#X7&rR`{VfFy45axbzYqn z+mP&R2-<35N;XOE4h6E zFHKCKl4Iw|u95S`eekYV?)uKw>ROl&kB@7tUN$k&!`W(l<#^ec$%yhK(n#eH%W0MyE}u)|pZU=$1C z2CQ5R=|^`o&5gU%S!P5T&7oFWwM5X1g-a|k|5@QbD>|T>j+;l$z?S22Tot z6tI?Pg-enJ^s4`we@cbv(!H6fHeI2gm7n4cz zFn5{d4%6GhjtJ0F`B;JKY+D){|A(q|!++QX19en|J<)2>USag^6 zVV-l$@+&JzN@#2sZY4-veqrl*0!BUU&-nMLt93x1jQZ`tpmv45rK_L0%t-Y6&X!HA zb)n1~&PAiYUc!oUWDWOvymB`{VusP(#_#n306GQ$^0ZhjwO6;a*yw=!npmJ50D&g~ z5UGx=mwW(tNsc1-0Z={_fM%qMCeK2XopgW)xrDql0qau93$0wmQqrNHgPz@|V^X{i zP|=fb*&w}&ZhL$;wHMVcdF5Qq5a*K0q|g*Y@g%0!%V_KcrC2KkMq3F0)C-!c^|-0A zc~o<-mXhv)TA}jp0YI{QfI46L7SRq{0qJq9{YMaRrr?gZo&*4+JJBMF;^YG|Eue@J z-~c+QC|NZDnqmOpy7MwaQ;CyY1(;FZqVl+k1!?}x0Gxu5XAX{_eDW~g7m>e21}(`A zP*9U-xh&8(1{_Vn7&-Fxo7zQh>~=8Nfs2J`X{l-8NQhCmUl zo^8gdZT6p{o2$-$vEFkeUXAJm$emaM)CJc8X-{V?6A@s;0(1Za=)N?SlK&sTI(ZbJ zv=Y~K)KbI#2h4weC|)pX0_^N}$maGRd!%V3WdtT_5LJdFUkBmNRDu__3X7fI15~ zk^n|zXrlo0a~9?pNToc>=ooSqMugaAJ&(@aV!P|8dcySrs|hK~2go~9GHFuO)|OBZ zvE;YES#|)RqY=Uam+}EhB=DY^Q4=H&fY<@hzkh3KRso>O7B0>LaJ*0wgpn^ofp#<- zC{gh*=%YVJsoPeWFJ&=|nvz{jO^Gxg8~aFfS@SO+nS|lgy}cq-C`uMeMrlph!vz-5 z$l@IZ5alHnE_Ww0-O&k35*77?1QwJ62!gQKzr(EwC;?aip!myACI(IN6)UppX^J%g zN=*PeTuuXM(%q*3Jt@0&DFCp#LsqLfjOGvU-meC^9y7INdVF=RY>SM)Y?leLcy&-l zg|n>G1S5J20LTUb09T(V(E&7({Q%o2HTF5#R-yo^Q3~!$kEs9}b_(D&BS8Kqe-QwH zBlnZvf7AaZO+cQd`#%M382)Gw80-8$HDT1J^RI<~=XaY=H zM1V;iup}#vr4tZzC;(_`DF8)}C!^SbXh4t~OP&Yv$?@nvBuFKo=}s1`KzaWEmi#xt z{x_ka0J!O-X~?#NebM>1I}U88IVXE3SxHRf7Mf46!I$V6Svc=RM=5!jb^dkW9I}N> zbpljVlvG07+*lg2A?MtoV_}iMRVzql`CnoQ0YHC^`hN-ZznTBjI|TrW#WMWG^Owk@ aNP%@P0RDfh@+@RW_zyiHYZ&-5_x}LEkhz8c literal 0 HcmV?d00001 diff --git a/assets/textures/city-night.jpg b/assets/textures/city-night.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bd9fa90b678083e4a36fe2b2c07ea75d066827d GIT binary patch literal 62634 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 G{C@xw4Ko@5 literal 0 HcmV?d00001 diff --git a/css/style.css b/css/style.css index 9d2067f..06eb579 100644 --- a/css/style.css +++ b/css/style.css @@ -1,28 +1,55 @@ /* ========================================================================= Reigen Arataka — unofficial fan tribute - All visual art in this file is original hand-authored CSS/SVG. + All character artwork is original hand-authored CSS/SVG. The only raster + assets are three licensed photographic textures used as low-opacity + backdrops (see assets/textures/ and the Image credits block in the footer). Layout: single long scroll, mobile-first, no build step. ========================================================================= */ /* ------------------------------- TOKENS ------------------------------- */ :root { - /* Colour — "poster paint on newsprint" reading of the series' palette */ - --ink: #0c0c11; /* page base */ - --ink-2: #14141c; /* raised surface */ - --ink-3: #1d1d28; /* card surface */ - --line: #2c2c3a; /* hairline borders */ + /* Colour — "poster paint on newsprint" reading of the series' palette. + Contrast ratios are measured against --ink from rendered pixels. Text over + a textured surface measures lower, because the texture lightens the real + backdrop under the glyphs. Magenta is the darkest accent and so sets the + ceiling on how far any texture may lighten a surface — which is why magenta + *text* uses its own lighter token (see --magenta-txt) while the saturated + hue stays for fills, borders and auras. */ + --ink: #0c0c11; /* page base */ + --ink-2: #14141c; /* raised surface */ + --ink-3: #1d1d28; /* card surface */ + --line: #2c2c3a; /* hairline borders */ --line-2: #3d3d50; - --paper: #f2ede2; /* primary text (11.9:1 on --ink) */ - --paper-dim: #b8b2a6; /* secondary text (7.0:1 on --ink) */ - --paper-mute: #8f8a80; /* tertiary / fine print (4.6:1 on --ink) */ + --paper: #f2ede2; /* primary text (16.71:1) */ + --paper-dim: #b8b2a6; /* secondary text (9.25:1) */ + --paper-mute: #a5a096; /* tertiary / fine print (7.50:1) */ - --magenta: #ff3d7f; /* aura / accent (5.6:1 on --ink) */ - --teal: #17d6c6; /* aura / links (10.4:1 on --ink) */ - --acid: #d8f24a; /* highlight (14.9:1 on --ink) */ - --tan: #d9b483; /* the suit (8.4:1 on --ink) */ + --magenta: #ff3d7f; /* aura / fills / borders (5.62:1 on ink) */ + /* Magenta as *text*. #ff3d7f measured 4.95:1 over the textured panel — on the + AA line with no headroom left for the texture layer. This lighter mix keeps + the hue and buys ~1.3 stops, so every textured surface can carry visible + grain and still clear 5:1 on small magenta type. */ + --magenta-txt: #ff5c94; /* magenta text (6.50:1 on ink) */ + --teal: #17d6c6; /* aura / links (10.66:1) */ + --acid: #d8f24a; /* highlight (15.53:1) */ + --tan: #d9b483; /* warm neutral (10.04:1) */ --tan-dark: #b18f66; + /* Portrait palette. Overridden per instance for the manga/anime compare. */ + --fig-skin: #e8c69e; + --fig-skin-2: #c69a6b; + --fig-skin-3: #a3763f; + --fig-line: #47331f; + --fig-hair: #c9884a; + --fig-hair-2: #e0aa72; + --fig-suit: #3b3b47; + --fig-suit-2: #26262f; + --fig-shirt: #ece7dd; + --fig-shirt-2: #c8c2b5; + --fig-tie: #ef5f96; + --fig-tie-2: #c9265d; + /* Type */ --f-display: 'Archivo Black', 'Archivo', 'Helvetica Neue', Arial, sans-serif; --f-body: 'Archivo', 'Helvetica Neue', Arial, sans-serif; @@ -54,6 +81,14 @@ brand over the nav strip (~98px). Overridden at >=56rem where it is one row. */ --header-h: 6.25rem; + /* Texture paths — relative, so the project subpath on GitHub Pages works. + --tex-paper is a grain *plate*, not a photograph: the source paper shot was + nearly flat (sigma 4.6 of 255), so its flat tone was subtracted and only the + detail kept, amplified and highlight-clipped. See the .tex block. */ + --tex-paper: url('../assets/textures/paper-grain.jpg'); + --tex-city: url('../assets/textures/city-night.jpg'); + --tex-bokeh: url('../assets/textures/bokeh-dust.jpg'); + /* Motion */ --dur-fast: 150ms; --dur: 240ms; @@ -67,6 +102,7 @@ html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; + color-scheme: dark; } body { @@ -79,6 +115,8 @@ body { font-synthesis-weight: none; -webkit-font-smoothing: antialiased; overflow-wrap: break-word; + touch-action: manipulation; + -webkit-tap-highlight-color: rgba(216, 242, 74, 0.2); } /* Subtle halftone texture — decorative, never intercepts input. */ @@ -93,8 +131,15 @@ body::after { opacity: 0.05; } -h1, h2, h3, h4 { margin: 0; line-height: 1.08; font-weight: 700; letter-spacing: -0.015em; } +h1, h2, h3, h4 { + margin: 0; + line-height: 1.08; + font-weight: 700; + letter-spacing: -0.015em; + text-wrap: balance; +} p, ul, ol, figure, table, blockquote { margin: 0; } +p { text-wrap: pretty; } ul, ol { padding: 0; list-style: none; } img, svg { max-width: 100%; } table { border-collapse: collapse; } @@ -134,6 +179,83 @@ a:hover { color: var(--acid); } } .skip-link:focus { top: var(--sp-3); color: var(--ink); } +/* -------------------------- TEXTURE BACKDROPS -------------------------- */ +/* Shared machinery. A textured surface paints an opaque background, isolates + itself, then layers a texture above that background but below its own content + (negative z-index inside the isolated group). None of these backdrops has + ever shown up as an LCP candidate in a trace — not because pseudo-elements + are exempt (they are not), but because each is stretched over a large area + and so falls under Chromium's low-entropy threshold for background images. + The hero's bokeh plate does qualify; see the note on .hero__art::before. + + Two rules make this layer behave, both learned the hard way: + + 1. `screen`, never `soft-light`. Per the W3C compositing formula soft-light + collapses toward the backdrop as the backdrop goes to black, so on this + near-black palette it discards the source almost entirely — four textures + decoded and composited for a change measuring under 2.5 of 765. `screen` + over a dark backdrop is effectively additive, so it survives; it also + never darkens, which keeps the coloured gradients under .section--quotes + intact instead of washing them flat. + + 2. `.tex` declares its own background-color. A blend mode is only defined + against a known backdrop, and two sections here never set one — so their + blend degenerated to plain source-over and the texture landed at full + alpha while every other section got a near-no-op. Same declaration, two + completely different renderings, decided by whether the consumer happened + to declare a background. Consumers may still override this; they must not + have to. + + Because the blend is additive, the *brightest* texture pixel sets the worst + contrast case under a glyph. The plates are therefore highlight-clipped at + source (max ~115 of 255) so `opacity` alone bounds the worst case: peak lift + is about opacity x 115. Raising any --tex-op means re-measuring. */ +.tex { + position: relative; + isolation: isolate; + overflow: hidden; + background-color: var(--ink); +} +.tex::before { + content: ""; + position: absolute; + inset: 0; + z-index: -1; + pointer-events: none; + background-image: var(--tex-img); + background-position: var(--tex-pos, center); + background-size: var(--tex-size, cover); + background-repeat: var(--tex-repeat, no-repeat); + opacity: var(--tex-op, 0.2); + mix-blend-mode: var(--tex-blend, screen); + /* No grayscale() pass: the two grain plates already ship as 8-bit Greyscale. + Only city-night and bokeh-dust are sRGB, and both desaturate themselves. */ + filter: var(--tex-filter, none); +} + +/* Every grain surface uses the one paper plate, as a seamless 256px tile painted + 1:1 — never `cover`. Upscaling a grain tile averages the grain away: the + section that did that measured under one RGB step of variation across a whole + band, a flat grey wash rather than texture. Only the opacity varies per + surface, set beside each section below. + + A second plate (worn concrete) used to back .section--origin and .site-footer + and has been deleted. Its source photo was flatter still (sigma 3.3 of 255), + so the 12x amplification needed to make it visible also amplified its coarse + trowel streaks — and at any tile size small enough to be worth shipping those + streaks repeated legibly, as a mirror motif or a seam depending on how the + tile was closed. It could be visible, or it could be seamless, but not both. */ +.section--who, +.section--beyond, +.section--quotes, +.section--origin, +.panel--fake, +.site-footer { + --tex-img: var(--tex-paper); + --tex-size: 256px 256px; + --tex-repeat: repeat; +} + /* ------------------------------ HEADER -------------------------------- */ .site-header { position: sticky; @@ -153,6 +275,32 @@ a:hover { color: var(--acid); } gap: 0; } +/* Reading-position bar. Gated behind @supports so browsers without + scroll-driven animations get nothing rather than a permanently full bar. */ +.scroll-progress { display: none; } +@supports (animation-timeline: scroll()) { + .scroll-progress { + display: block; + position: absolute; + left: 0; right: 0; bottom: -1px; + height: 2px; + pointer-events: none; + } + .scroll-progress span { + display: block; + height: 100%; + background: linear-gradient(90deg, var(--magenta), var(--tan), var(--acid)); + transform: scaleX(0); + transform-origin: 0 50%; + animation: read-progress linear both; + animation-timeline: scroll(root block); + } + @keyframes read-progress { + from { transform: scaleX(0); } + to { transform: scaleX(1); } + } +} + .brand { display: flex; align-items: center; @@ -171,6 +319,7 @@ a:hover { color: var(--acid); } font-size: 1.25rem; /* 霊 is a dense glyph — needs the extra size to read */ font-weight: 500; line-height: 1; + transition: background var(--dur) var(--ease); } .brand__text { display: flex; flex-direction: column; line-height: 1.15; } .brand__text b { font-size: var(--fs-sm); letter-spacing: 0.01em; } @@ -182,12 +331,13 @@ a:hover { color: var(--acid); } color: var(--paper-mute); } .brand:hover .brand__text b { color: var(--acid); } +.brand:hover .brand__mark { background: var(--acid); } /* Nav: horizontal scroller on narrow screens, never widens the page. */ .site-nav { position: relative; margin-inline: calc(var(--pad) * -1); } -/* Fade at the right edge hints that the strip scrolls. Removed once the - nav fits on one line at >=56rem. */ +/* Fade at the right edge hints that the strip scrolls. Removed at >=72rem, + the width at which all ten chips fit inside the wrapper. */ .site-nav::after { content: ""; position: absolute; @@ -232,9 +382,12 @@ a:hover { color: var(--acid); } :root { --header-h: 4.25rem; } .site-header__inner { flex-direction: row; align-items: center; justify-content: space-between; gap: var(--sp-5); } .brand { padding: var(--sp-4) 0; } - .site-nav { margin-inline: 0; } + .site-nav { margin-inline: 0; min-width: 0; } + .site-nav ul { padding: 0; } +} +@media (min-width: 72rem) { .site-nav::after { display: none; } - .site-nav ul { padding: 0; overflow-x: visible; } + .site-nav ul { overflow-x: visible; } } /* ------------------------------- HERO --------------------------------- */ @@ -249,7 +402,7 @@ a:hover { color: var(--acid); } align-content: center; } -/* --- hero art: aura blobs + rays + abstract suited figure --- */ +/* --- hero art: photo bloom + aura blobs + rays + the portrait --- */ .hero__art { position: absolute; inset: 0; @@ -257,6 +410,28 @@ a:hover { color: var(--acid); } pointer-events: none; overflow: hidden; } + +/* Bokeh/dust plate. Blurred and desaturated to near-abstraction so it reads + as depth rather than as a photograph. ~10 KB. + + Known and accepted: this plate IS the page's LCP element, reported against + its originating element. Moving it from a real to this pseudo-element + did NOT remove candidacy — a background-image is an LCP candidate either way; + only Chromium's low-entropy exclusion keeps the .tex backdrops out, and this + plate carries too much detail per painted pixel to qualify. It stays because + it is 10 KB and paints alongside the heading, so the metric names a + decorative layer without actually delaying anything a reader waits for. If + that trade stops being acceptable, replace the photo with CSS gradients — + no image, no candidate. */ +.hero__art::before { + content: ""; + position: absolute; + inset: -12%; + background: var(--tex-bokeh) center / cover no-repeat; + filter: blur(7px) saturate(0.4) brightness(0.9); + opacity: 0.3; +} + /* Scrim: keeps the art bright on the right, guarantees text contrast on the left where the copy sits. Without this the aura undercuts AA on the kicker. */ .hero__art::after { @@ -266,10 +441,10 @@ a:hover { color: var(--acid); } background: /* darkens the copy side */ linear-gradient(90deg, - rgba(12,12,17,0.85) 0%, rgba(12,12,17,0.60) 32%, - rgba(12,12,17,0.15) 55%, rgba(12,12,17,0) 70%), + rgba(12,12,17,0.90) 0%, rgba(12,12,17,0.68) 32%, + rgba(12,12,17,0.18) 55%, rgba(12,12,17,0) 70%), /* tames the aura glare behind the kicker on narrow screens */ - linear-gradient(180deg, rgba(12,12,17,0.35) 0%, rgba(12,12,17,0) 40%); + linear-gradient(180deg, rgba(12,12,17,0.45) 0%, rgba(12,12,17,0) 40%); } .aura { @@ -299,35 +474,62 @@ a:hover { color: var(--acid); } .rays { position: absolute; right: -6rem; - top: 50%; + top: 46%; translate: 0 -50%; width: 30rem; color: var(--tan); opacity: 0.22; } +/* The portrait. Halo and outer ring live outside the reusable symbol because + they only belong to the hero composition. */ .figure { position: absolute; - right: -3rem; - bottom: -2rem; - width: 15rem; + right: -4.5rem; + bottom: -3rem; + width: 18rem; + opacity: 0.62; +} +.fg-halo { + fill: none; + stroke: var(--tan); + stroke-width: 26; + opacity: 0.16; +} +.fg-ring { + fill: none; + stroke: var(--acid); + stroke-width: 1.5; + stroke-dasharray: 2 12; opacity: 0.5; } -.fg-jacket { fill: var(--tan); } -.fg-lapel { fill: var(--tan-dark); } -.fg-head { fill: var(--tan); } -.fg-neck { fill: var(--tan-dark); } -.fg-hair { fill: #4a3a2e; } -.fg-shirt { fill: #26222b; } -.fg-tie { fill: var(--magenta); } -.fg-tie2 { fill: #c9265d; } +.hero__salt { + position: absolute; + right: 46%; + bottom: 16%; + width: 9rem; + color: var(--tan); + opacity: 0.5; + rotate: -14deg; +} + +/* 48-68rem: the portrait becomes a subject again, so the copy measure is + pulled in to keep text and artwork from ever overlapping. Measured at 768px: + tagline 8.0:1, fine print 6.5:1. */ @media (min-width: 48rem) { - .figure { width: 20rem; right: 2%; opacity: 0.72; } - .rays { right: 0; width: 36rem; opacity: 0.3; } + .hero { --hero-measure: 36ch; } + .figure { width: 20rem; right: -3rem; bottom: -3.5rem; opacity: 0.95; } + .rays { right: -4rem; width: 30rem; opacity: 0.26; } + .hero__salt { width: 10rem; right: 40%; bottom: 24%; } + .hero__note { max-width: 44ch; } } @media (min-width: 68rem) { - .figure { width: 25rem; right: 6%; } + .hero { --hero-measure: 46ch; } + .figure { width: 31rem; right: 4%; } + .rays { right: -1rem; width: 36rem; opacity: 0.28; } + .hero__salt { width: 15rem; right: 32%; } + .hero__note { max-width: 56ch; } } /* --- hero text --- */ @@ -343,8 +545,9 @@ a:hover { color: var(--acid); } font-size: var(--fs-xs); letter-spacing: 0.22em; text-transform: uppercase; - color: var(--magenta); + color: var(--magenta-txt); margin-bottom: var(--sp-3); + width: fit-content; } .kicker--strike span { position: relative; @@ -369,7 +572,15 @@ a:hover { color: var(--acid); } margin-bottom: var(--sp-3); } .hero__title span { display: block; } -.hero__title span:last-child { color: var(--tan); } +/* Second word outlined rather than filled: poster device, and it lets the + portrait read through the letterforms. */ +.hero__title span:last-child { + color: transparent; + -webkit-text-stroke: clamp(1.5px, 0.28vw, 3px) var(--tan); +} +@supports not ((-webkit-text-stroke: 1px #000)) { + .hero__title span:last-child { color: var(--tan); } +} .hero__ja { font-size: var(--fs-lg); @@ -377,6 +588,7 @@ a:hover { color: var(--acid); } letter-spacing: 0.28em; color: var(--paper-dim); margin-bottom: var(--sp-5); + width: fit-content; } .hero__claim { @@ -391,7 +603,7 @@ a:hover { color: var(--acid); } } .hero__tagline { - max-width: 46ch; + max-width: var(--hero-measure, 46ch); color: var(--paper-dim); margin-bottom: var(--sp-6); } @@ -424,19 +636,45 @@ a:hover { color: var(--acid); } color: var(--acid); } .stat-chips li:has(.stat-chips__v--zero) { border-left-color: var(--magenta); } -.stat-chips__v--zero { color: var(--magenta); } +.stat-chips__v--zero { color: var(--magenta-txt); } .hero__note { - max-width: 52ch; + max-width: 56ch; font-size: var(--fs-sm); color: var(--paper-dim); border-top: 1px solid var(--line); padding-top: var(--sp-4); } -/* Below the wide breakpoint the suited figure sits directly behind this fine - print and dropped it under AA (measured 3.35:1 at 320px). A solid backdrop - takes the art out from behind the text entirely. */ +/* Below 48rem the copy fills the hero, so there is no honest room for the + portrait as a subject. It drops back to a watermark behind the type — + measured at 9:1 for the title and 5.1:1 for the tagline over its brightest + area, both clear of AA. */ +@media (max-width: 47.9375rem) { + .figure { + width: 21rem; + right: -5.5rem; + top: 2rem; + bottom: auto; + opacity: 0.2; + } + .hero__salt { top: 24rem; bottom: auto; right: 56%; width: 7rem; opacity: 0.4; } + /* The copy runs the full width here, so the aura and the scrim both have to + work harder. Sampled: the Japanese name went from 3.46:1 to 5.4:1. */ + .aura--a { opacity: 0.34; } + .aura--b { opacity: 0.26; } + .hero__art::after { + background: + linear-gradient(180deg, rgba(12,12,17,0.66) 0%, rgba(12,12,17,0.46) 40%, + rgba(12,12,17,0.34) 72%, rgba(12,12,17,0.52) 100%), + linear-gradient(90deg, rgba(12,12,17,0.5) 0%, rgba(12,12,17,0.28) 62%, + rgba(12,12,17,0.18) 100%); + } +} + +/* Below the wide breakpoint the portrait sits directly behind this fine print + and dropped it under AA (measured 3.35:1 at 320px). A solid backdrop takes + the art out from behind the text entirely. */ @media (max-width: 47.9375rem) { .hero__note { position: relative; @@ -453,10 +691,14 @@ a:hover { color: var(--acid); } } } +/* Sits over the teal aura, which pushed 10px mute text to 3.1:1. A scrim that + fades out to the right takes the glow out from behind the glyphs. */ .scroll-cue { position: absolute; - left: var(--pad); + left: 0; bottom: var(--sp-4); + padding: var(--sp-1) 4rem var(--sp-1) var(--pad); + background: linear-gradient(90deg, rgba(12,12,17,0.92) 0%, rgba(12,12,17,0.9) 55%, rgba(12,12,17,0) 100%); display: flex; align-items: center; gap: var(--sp-3); @@ -505,6 +747,14 @@ a:hover { color: var(--acid); } opacity: 0.6; } +/* The photographic salt band that used to sit behind this rule is gone. Its + asset had been made "seamless" by mirroring the whole frame, which folded the + rim of the salt jar into a four-way kaleidoscope. soft-light hid that; once + the blend actually rendered it read as repeating ornament, not as salt, and + no crop of the surviving 520px derivative tiles without either that pattern + or a visible seam. The hand-placed dot field above already tells the story in + pure CSS, so the 28 KB photograph was deleted rather than left invisible. */ + /* ----------------------------- SECTIONS -------------------------------- */ .section { max-width: var(--wrap); @@ -513,11 +763,22 @@ a:hover { color: var(--acid); } scroll-margin-top: calc(var(--header-h) + 1rem); } +/* Full-bleed variant: the section paints edge to edge while its children stay + on the same measure as every other section. A single centred grid column + does the work, so children narrower than the wrapper still align left + instead of drifting to the middle of the page. */ +.section--bleed { + max-width: none; + display: grid; + grid-template-columns: minmax(0, var(--wrap)); + justify-content: center; +} + .section__head { margin-bottom: var(--sp-7); max-width: var(--measure); } .section__num { font-family: var(--f-display); font-size: var(--fs-md); - color: var(--magenta); + color: var(--magenta-txt); letter-spacing: 0.06em; margin-bottom: var(--sp-2); } @@ -568,6 +829,8 @@ a:hover { color: var(--acid); } text-align: left; } .t-ja { color: var(--tan); letter-spacing: 0.12em; margin-left: 0.4em; white-space: nowrap; } +/* Marks a value the sources disagree on, in words as well as in style. */ +.t-note { color: var(--magenta-txt); font-family: var(--f-mono); font-size: var(--fs-xs); } /* Narrow screens: label above value, one block per row. Reads far better at 320px than a horizontally scrolling grid. ARIA roles in the markup keep the @@ -588,8 +851,12 @@ a:hover { color: var(--acid); } .data-table tr + tr td { border-top: 1px solid var(--line); } .data-table tbody tr:hover td { background: var(--ink-3); } } + /* ------------------------------ PROSE ---------------------------------- */ -.section--who { border-top: 1px solid var(--line); } +.section--who { + border-top: 1px solid var(--line); + --tex-op: 0.26; +} .prose { max-width: var(--measure); font-size: var(--fs-md); } .prose p + p { margin-top: var(--sp-5); } @@ -601,7 +868,7 @@ a:hover { color: var(--acid); } font-size: 3.6em; line-height: 0.78; padding: 0.06em 0.12em 0 0; - color: var(--magenta); + color: var(--magenta-txt); } .pull { @@ -615,6 +882,72 @@ a:hover { color: var(--acid); } color: var(--paper); } +/* ---------------------------- ORIGIN STORY ----------------------------- */ +/* The shabby rented room the business started in: a raised surface, and the + heaviest grain on the page bar the full-bleed prose sections. */ +.section--origin { + background: var(--ink-2); + border-block: 1px solid var(--line); + --tex-op: 0.20; +} +.section--origin .pull { border-left-color: var(--tan); } + +.origin { display: grid; gap: var(--sp-6); } +@media (min-width: 62rem) { + .origin { grid-template-columns: minmax(0, 1fr) 17rem; gap: var(--sp-8); align-items: start; } +} + +/* Door plate for the office. Original CSS, no photograph. */ +.plaque { + position: relative; + padding: var(--sp-6) var(--sp-5); + background: + linear-gradient(150deg, rgba(217,180,131,0.14), rgba(217,180,131,0.03) 60%), + var(--ink-3); + border: 1px solid var(--tan-dark); + box-shadow: inset 0 0 0 1px rgba(12,12,17,0.8), 0 14px 30px -18px rgba(0,0,0,0.9); + text-align: center; +} +/* Two screw heads, because it is screwed to a door. */ +.plaque::before, +.plaque::after { + content: ""; + position: absolute; + top: var(--sp-3); + width: 6px; height: 6px; + border-radius: 50%; + background: var(--tan-dark); + opacity: 0.7; +} +.plaque::before { left: var(--sp-3); } +.plaque::after { right: var(--sp-3); } + +.plaque__mark { + display: block; + font-size: 1.75rem; + line-height: 1; + color: var(--tan); + margin-bottom: var(--sp-3); +} +.plaque__name { + font-family: var(--f-display); + font-size: var(--fs-sm); + line-height: 1.35; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--paper); + overflow-wrap: normal; +} +.plaque__meta { + margin-top: var(--sp-4); + padding-top: var(--sp-3); + border-top: 1px solid var(--tan-dark); + font-family: var(--f-mono); + font-size: var(--fs-xs); + line-height: 1.6; + color: var(--paper-dim); +} + /* ----------------------------- TRAITS ---------------------------------- */ .trait-grid { display: grid; @@ -626,11 +959,23 @@ a:hover { color: var(--acid); } @media (min-width: 64rem) { .trait-grid { grid-template-columns: repeat(3, 1fr); } } .trait { + position: relative; background: var(--ink-2); padding: var(--sp-5); transition: background var(--dur) var(--ease); } +.trait::after { + content: ""; + position: absolute; + left: 0; top: 0; bottom: 0; + width: 3px; + background: var(--magenta); + transform: scaleY(0); + transform-origin: 50% 0; + transition: transform var(--dur) var(--ease); +} .trait:hover { background: var(--ink-3); } +.trait:hover::after { transform: scaleY(1); } .trait h3 { font-size: var(--fs-md); margin-bottom: var(--sp-3); @@ -638,6 +983,149 @@ a:hover { color: var(--acid); } } .trait p { font-size: var(--fs-sm); color: var(--paper-dim); } +/* ------------------------------ THE LOOK ------------------------------- */ +.section--look { + background: + linear-gradient(90deg, rgba(107,70,48,0.16) 0%, rgba(12,12,17,0) 42%, + rgba(12,12,17,0) 58%, rgba(239,95,150,0.14) 100%), + var(--ink); + border-block: 1px solid var(--line); +} + +.compare { display: grid; gap: var(--sp-5); } +@media (min-width: 54rem) { + .compare { grid-template-columns: 1fr auto 1fr; align-items: stretch; gap: var(--sp-6); } +} + +.ver { + display: flex; + flex-direction: column; + padding: var(--sp-5); + background: var(--ink-2); + border: 1px solid var(--line); + border-top: 4px solid var(--ver-accent, var(--line-2)); + transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease); +} +.ver:hover { background: var(--ink-3); } + +.ver--manga { + --ver-accent: #a8714c; + --fig-hair: #5f3d28; + --fig-hair-2: #7d5438; + --fig-tie: #1b1b22; + --fig-tie-2: #101015; +} +.ver--anime { + --ver-accent: var(--magenta); + --fig-hair: #cf8b48; + --fig-hair-2: #ecb677; + --fig-tie: #ef5f96; + --fig-tie-2: #cf4278; +} + +.ver__tag { + font-family: var(--f-mono); + font-size: var(--fs-xs); + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--ver-accent); + margin-bottom: var(--sp-4); +} + +.ver__art { + display: grid; + place-items: center; + height: 12rem; + margin-bottom: var(--sp-5); + background: + radial-gradient(9rem 7rem at 50% 42%, color-mix(in srgb, var(--ver-accent) 22%, transparent), transparent 70%), + var(--ink); + border: 1px solid var(--line); + overflow: hidden; +} +@media (min-width: 54rem) { .ver__art { height: 16rem; } } + +/* The svg viewBox crops to head-and-tie: the hair colour and the tie colour + are the whole point of this section. */ +.ver__figure { + width: auto; + height: 104%; + max-width: none; + transition: translate var(--dur) var(--ease); +} +.ver__figure--flip { scale: -1 1; } +.ver:hover .ver__figure { translate: 0 -3%; } + +.ver h3 { font-size: var(--fs-md); margin-bottom: var(--sp-4); } + +.swatches { display: grid; gap: var(--sp-2); margin-bottom: var(--sp-4); } +.swatches li { + display: flex; + align-items: center; + gap: var(--sp-3); + font-family: var(--f-mono); + font-size: var(--fs-xs); + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--paper-dim); +} +/* The chip is a second cue only — every swatch is also named in words. */ +.sw { + flex: none; + width: 1.5rem; height: 1.5rem; + background: var(--sw); + border: 1px solid var(--line-2); +} + +.ver__note { font-size: var(--fs-sm); color: var(--paper-dim); margin-top: auto; } + +.compare__vs { + display: grid; + place-items: center; + font-family: var(--f-display); + font-size: var(--fs-md); + text-transform: uppercase; + color: var(--paper-mute); +} +.compare__vs span { + padding: var(--sp-2) var(--sp-3); + border: 1px solid var(--line); + background: var(--ink); +} +@media (min-width: 54rem) { + .compare__vs { position: relative; width: 3.5rem; } + .compare__vs::before { + content: ""; + position: absolute; + top: 0; bottom: 0; left: 50%; + width: 1px; + background: linear-gradient(180deg, transparent, var(--line-2), transparent); + } + .compare__vs span { position: relative; } +} + +.shared { + margin-top: var(--sp-6); + padding-top: var(--sp-5); + border-top: 1px solid var(--line); +} +.shared h3 { + font-family: var(--f-mono); + font-size: var(--fs-xs); + font-weight: 500; + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--acid); + margin-bottom: var(--sp-4); +} +.tag-list { display: flex; flex-wrap: wrap; gap: var(--sp-3); } +.tag-list li { + padding: var(--sp-2) var(--sp-4); + border: 1px dashed var(--line-2); + font-size: var(--fs-sm); + color: var(--paper-dim); +} + /* --------------------------- ABILITIES SPLIT --------------------------- */ .split { display: grid; gap: var(--sp-5); } @media (min-width: 58rem) { .split { grid-template-columns: 1fr 1fr; gap: var(--sp-6); } } @@ -648,7 +1136,12 @@ a:hover { color: var(--acid); } background: var(--ink-2); } .panel--real { border-top: 4px solid var(--teal); } -.panel--fake { border-top: 4px solid var(--magenta); } +.panel--fake { + border-top: 4px solid var(--magenta); + /* The page's tightest contrast case (small magenta headings on a raised + surface), so this panel runs the grain lower than the full-bleed sections. */ + --tex-op: 0.17; +} .panel__tag { font-family: var(--f-mono); @@ -658,7 +1151,7 @@ a:hover { color: var(--acid); } margin-bottom: var(--sp-2); } .panel--real .panel__tag { color: var(--teal); } -.panel--fake .panel__tag { color: var(--magenta); } +.panel--fake .panel__tag { color: var(--magenta-txt); } .panel__title { font-family: var(--f-display); @@ -688,7 +1181,7 @@ a:hover { color: var(--acid); } text-transform: uppercase; color: var(--teal); } -.meter--zero .meter__val { color: var(--magenta); } +.meter--zero .meter__val { color: var(--magenta-txt); } .meter__track { position: relative; @@ -724,7 +1217,7 @@ a:hover { color: var(--acid); } text-transform: uppercase; max-width: 40ch; } -.punchline::first-line { color: var(--magenta); } +.punchline::first-line { color: var(--magenta-txt); } /* -------------------------- FAKE TECHNIQUES ---------------------------- */ .tech-list { display: grid; gap: 1px; background: var(--line); border: 1px solid var(--line); } @@ -732,7 +1225,9 @@ a:hover { color: var(--acid); } position: relative; background: var(--ink-3); padding: var(--sp-5) var(--sp-5) var(--sp-5) 4.25rem; + transition: background var(--dur) var(--ease); } +.tech:hover { background: #24242f; } .tech__icon { position: absolute; left: var(--sp-3); @@ -740,61 +1235,107 @@ a:hover { color: var(--acid); } width: 2.75rem; height: 1.75rem; color: var(--tan); + transition: color var(--dur) var(--ease), rotate var(--dur) var(--ease); } +.tech:hover .tech__icon { color: var(--acid); rotate: -6deg; } .tech h4 { font-size: var(--fs-md); margin-bottom: var(--sp-2); - color: var(--magenta); + color: var(--magenta-txt); } .tech p { font-size: var(--fs-sm); color: var(--paper-dim); } /* ------------------------------ QUOTES --------------------------------- */ +/* The emotional core of the page: aged paper, serif at scale, generous air. */ .section--quotes { border-block: 1px solid var(--line); - background: - radial-gradient(60rem 40rem at 85% 0%, rgba(23,214,198,0.09), transparent 70%), - radial-gradient(50rem 34rem at 0% 100%, rgba(255,61,127,0.09), transparent 70%); - max-width: none; + background-color: var(--ink); + background-image: + radial-gradient(60rem 40rem at 85% 0%, rgba(23,214,198,0.10), transparent 70%), + radial-gradient(50rem 34rem at 0% 100%, rgba(255,61,127,0.10), transparent 70%); + --tex-op: 0.24; } -.section--quotes > * { max-width: var(--wrap); margin-inline: auto; } .quote-stack { display: grid; gap: var(--sp-5); } @media (min-width: 52rem) { - .quote-stack { grid-template-columns: 1fr 1fr; } - .quote--lead { grid-column: 1 / -1; } + .quote-stack { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-6); } + .quote--lead, + .quote--short { grid-column: 1 / -1; } } .quote { position: relative; - padding: var(--sp-6) var(--sp-5) var(--sp-5); - background: var(--ink-2); + padding: var(--sp-7) var(--sp-5) var(--sp-6); + background: linear-gradient(180deg, rgba(29,29,40,0.9), rgba(20,20,28,0.9)); border: 1px solid var(--line); - transition: border-color var(--dur) var(--ease), transform var(--dur) var(--ease); + transition: + border-color var(--dur) var(--ease), + background-color var(--dur) var(--ease), + box-shadow var(--dur) var(--ease); } -.quote:hover { border-color: var(--line-2); } +/* Hairline corner marks — a printed-page register mark, not a border. */ +.quote::before, +.quote::after { + content: ""; + position: absolute; + width: 1.25rem; height: 1.25rem; + border: 1px solid var(--tan-dark); + opacity: 0.45; + transition: opacity var(--dur) var(--ease); +} +.quote::before { top: 6px; left: 6px; border-width: 1px 0 0 1px; } +.quote::after { bottom: 6px; right: 6px; border-width: 0 1px 1px 0; } +.quote:hover { + border-color: var(--tan-dark); + box-shadow: 0 18px 40px -28px rgba(0,0,0,0.9); +} +.quote:hover::before, +.quote:hover::after { opacity: 1; } .quote__glyph { position: absolute; - top: calc(var(--sp-5) * -0.1); + top: 0; left: var(--sp-5); translate: 0 -50%; - width: 2.1rem; - height: 1.7rem; - color: var(--magenta); - background: var(--ink-2); - padding-inline: var(--sp-2); + width: 2.4rem; + height: 1.9rem; + color: var(--magenta-txt); + background: var(--ink-3); + padding-inline: var(--sp-3); box-sizing: content-box; + transition: color var(--dur) var(--ease); } +.quote:hover .quote__glyph { color: var(--acid); } .quote blockquote p { font-family: var(--f-quote); font-size: var(--fs-md); font-style: italic; - line-height: 1.45; + line-height: 1.5; color: var(--paper); } -.quote--lead blockquote p { font-size: var(--fs-lg); line-height: 1.4; } -.quote--short blockquote p { font-size: var(--fs-lg); color: var(--acid); } +.quote--lead { padding-block: var(--sp-8) var(--sp-7); } +.quote--lead blockquote p { + font-size: var(--fs-lg); + line-height: 1.4; + max-width: 46ch; +} +/* Two lines that say the same thing, years apart. Marked as a matched pair. */ +.quote--pair { border-top: 3px solid var(--teal); } +.quote--short { + padding-block: var(--sp-8) var(--sp-7); + text-align: center; + background: var(--ink); +} +.quote--short .quote__glyph { left: 50%; translate: -50% -50%; background: var(--ink); } +.quote--short blockquote p { + font-size: var(--fs-xl); + font-style: normal; + line-height: 1.25; + color: var(--acid); + max-width: 24ch; + margin-inline: auto; +} /* --------------------------- RELATIONSHIPS ----------------------------- */ .rel-list { display: grid; gap: var(--sp-4); } @@ -834,7 +1375,34 @@ a:hover { color: var(--acid); } .rel p:last-child { font-size: var(--fs-sm); color: var(--paper-dim); } /* ------------------------------- ARCS ---------------------------------- */ -.section--arcs { border-top: 1px solid var(--line); } +/* Night city behind the arc where he loses everything. Two layers: the photo, + feathered top and bottom, then a scrim that guarantees text contrast. */ +.section--arcs { + border-top: 1px solid var(--line); + background-color: var(--ink); + --tex-img: var(--tex-city); + --tex-pos: 50% 100%; + --tex-op: 0.62; + --tex-blend: normal; + --tex-filter: saturate(0.5) brightness(0.78) contrast(1.05); +} +.section--arcs::before { + -webkit-mask-image: linear-gradient(180deg, transparent, #000 22%, #000 72%, transparent); + mask-image: linear-gradient(180deg, transparent, #000 22%, #000 72%, transparent); +} +.section--arcs::after { + content: ""; + position: absolute; + inset: 0; + z-index: -1; + pointer-events: none; + background: linear-gradient(180deg, + rgba(12,12,17,0.70) 0%, rgba(12,12,17,0.55) 42%, rgba(12,12,17,0.88) 100%); +} +/* No background-attachment: fixed here. It repaints the whole section every + frame — measured 4 dropped frames and a 79ms worst frame across a scroll of + this section, versus none with scroll attachment — for a parallax effect + subtle enough that nobody misses it. */ .timeline { position: relative; display: grid; gap: var(--sp-4); padding-left: var(--sp-5); } .timeline::before { @@ -866,13 +1434,15 @@ a:hover { color: var(--acid); } color: var(--teal); margin-bottom: var(--sp-2); } -.arc--spoiler .arc__when { color: var(--magenta); } +.arc--spoiler .arc__when { color: var(--magenta-txt); } .arc h3 { font-size: var(--fs-lg); margin-bottom: var(--sp-3); } .arc > p:last-child, -.spoiler__body p:last-child { max-width: var(--measure); color: var(--paper-dim); } +.spoiler__body p { max-width: var(--measure); color: var(--paper-dim); } +.spoiler__body p + p { margin-top: var(--sp-4); } +.spoiler__body em { color: var(--acid); font-style: italic; } /* Spoiler disclosure */ -.spoiler { border: 1px dashed var(--line-2); background: var(--ink-2); } +.spoiler { border: 1px dashed var(--line-2); background: rgba(20,20,28,0.88); } .spoiler[open] { border-style: solid; border-color: var(--line); } .spoiler > summary { @@ -920,8 +1490,52 @@ a:hover { color: var(--acid); } .spoiler__body { padding: 0 var(--sp-5) var(--sp-5); border-top: 1px solid var(--line); padding-top: var(--sp-5); } +/* -------------------------- BEYOND THE SERIES -------------------------- */ +.section--beyond { + --tex-op: 0.26; +} + +.notes { display: grid; gap: var(--sp-4); counter-reset: note; } +@media (min-width: 60rem) { .notes { grid-template-columns: repeat(3, 1fr); } } + +.note { + position: relative; + padding: var(--sp-6) var(--sp-5) var(--sp-5); + background: var(--ink-2); + border: 1px solid var(--line); + counter-increment: note; + transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease); +} +.note::before { + content: counter(note, decimal-leading-zero); + position: absolute; + top: var(--sp-3); + right: var(--sp-4); + font-family: var(--f-display); + font-size: var(--fs-lg); + line-height: 1; + color: var(--line-2); + transition: color var(--dur) var(--ease); +} +.note:hover { background: var(--ink-3); border-color: var(--line-2); } +.note:hover::before { color: var(--tan-dark); } +.note__tag { + font-family: var(--f-mono); + font-size: var(--fs-xs); + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--acid); + margin-bottom: var(--sp-3); +} +.note h3 { font-size: var(--fs-md); margin-bottom: var(--sp-3); color: var(--tan); max-width: 22ch; } +.note p { font-size: var(--fs-sm); color: var(--paper-dim); } + /* ------------------------------ FOOTER --------------------------------- */ -.site-footer { border-top: 1px solid var(--line); background: var(--ink-2); } +.site-footer { + border-top: 1px solid var(--line); + background-color: var(--ink-2); + --tex-op: 0.18; +} .site-footer__inner { max-width: var(--wrap); margin-inline: auto; @@ -930,7 +1544,13 @@ a:hover { color: var(--acid); } gap: var(--sp-7); } @media (min-width: 56rem) { - .site-footer__inner { grid-template-columns: 1.15fr 1fr; gap: var(--sp-8); } + /* Sources is the tallest block, so it takes the full-height column and the + two shorter blocks stack beside it. Keeps the footer from ending in a + large empty quarter. */ + .site-footer__inner { grid-template-columns: 1.05fr 1fr; gap: var(--sp-7) var(--sp-8); align-items: start; } + .disclaimer { grid-column: 1; grid-row: 1; } + .credits { grid-column: 1; grid-row: 2; } + .sources { grid-column: 2; grid-row: 1 / span 2; } } .site-footer h2 { @@ -961,6 +1581,25 @@ a:hover { color: var(--acid); } background: var(--paper-mute); } +/* Image credits: one texture per row, subject first so the list scans. */ +.credits ul { display: grid; gap: var(--sp-3); } +.credits li { + display: grid; + gap: var(--sp-1); + padding-top: var(--sp-3); + border-top: 1px solid var(--line); + font-size: var(--fs-xs); + line-height: 1.7; +} +.credits__what { + font-family: var(--f-mono); + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--tan); +} +.credits__who { color: var(--paper-mute); } +.credits a { display: inline-block; padding-block: 2px; } + .site-footer__base { max-width: var(--wrap); margin-inline: auto; @@ -974,7 +1613,7 @@ a:hover { color: var(--acid); } gap: var(--sp-2) var(--sp-3); align-items: center; } -.site-footer__base > span:first-child { color: var(--magenta); } +.site-footer__base > span:first-child { color: var(--magenta-txt); } /* --------------------------- SCROLL REVEAL ----------------------------- */ /* Hidden state applies ONLY when JS is running (html.js) — a no-JS visitor @@ -1009,12 +1648,21 @@ a:hover { color: var(--acid); } .js [data-reveal] .meter__fill, .js [data-reveal].is-revealed .meter__fill { transform: none; } .scroll-cue span { animation: none; transform: none; opacity: 0.7; } + /* The bar is driven by a scroll timeline, which the duration override above + would break. Decorative, so it simply goes away. */ + .scroll-progress { display: none; } + .trait::after { transform: scaleY(1); opacity: 0; } + .trait:hover::after { opacity: 1; } + .ver:hover .ver__figure { translate: none; } + .tech:hover .tech__icon { rotate: none; } } /* ------------------------------ PRINT ---------------------------------- */ @media print { body { background: #fff; color: #000; } - body::after, .hero__art, .site-nav, .scroll-cue, .salt-rule { display: none; } + body::after, .hero__art, .site-nav, .scroll-cue, .salt-rule, + .scroll-progress, .ver__art { display: none; } + .tex::before, .section--arcs::after { display: none; } .js [data-reveal] { opacity: 1 !important; transform: none !important; } a { color: #000; } } diff --git a/index.html b/index.html index e108c96..067570e 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ Reigen Arataka — Greatest Psychic of the 21st Century (Self-Proclaimed) | Fan Tribute - + @@ -36,8 +36,83 @@ - + + +
@@ -92,17 +172,12 @@ - - - - - - - - - - + + + + +
@@ -125,7 +200,10 @@

Fan-made tribute page. Not affiliated with the creators of Mob Psycho 100. - All artwork here is original CSS / SVG — no official images are used. + All character artwork here — the portrait, the aura, the salt motifs — is + original CSS / SVG drawn for this page. The photographic backdrops are + CC0 / Unsplash-licensed stock textures, credited in the footer. + No official Mob Psycho 100 images are used.

@@ -134,7 +212,7 @@ - +
@@ -149,20 +227,29 @@ Identity and production details for Reigen Arataka NameReigen Arataka 霊幻新隆 - Age28 + Age28–29 — sources differ + BirthdayOctober 10 + Height179 cm OccupationOwner and operator, Spirits and Such Consultation Office WorkplaceSpirits and Such Consultation Office — one small rented room AffiliationsMentor and employer to Mob (Shigeo Kageyama); works alongside Katsuya Serizawa First appearance (manga)Chapter 1 First appearance (anime)Season 1, Episode 1 — “Self-Proclaimed Psychic: Reigen Arataka ~And Mob~” (July 2016) Japanese voiceTakahiro Sakurai + English voiceChris Niosi
+ +

+ Age is given as 28 by the series wiki and as 29 by MyAnimeList, so both are shown rather + than one being picked. The height comes from MyAnimeList only; no second source was found + for it. +

- -
+ +

Who He Is

@@ -196,10 +283,49 @@
- -
+ +
+

Origin Story

+

Before the office, there was a desk he could not stand.

+
+ +
+
+

+ He started out a salaryman at an ordinary company. Nothing paranormal, nothing spiritual + — regular work at a regular firm. He quit because he was bored, and because he + disliked the job. +

+

+ Roughly four years before the story begins, he rented a small room and put a name on it: + Spirits and Such Consultation Office. There was no plan behind it. He took the room more + or less on impulse and started calling himself a psychic. +

+

+ Then a middle-schooler turned up as a client, looking for help with powers he could not + switch off. Reigen — who has no powers at all — took the job. +

+
+ The business exists because a bored office worker walked out and rented a room. The most + consequential thing he ever did was answer the door to a kid he could not possibly help + in the way advertised. +
+
+ +
+ +

Spirits and Such
Consultation Office

+

One rented room · no business plan · open about four years before the story starts

+
+
+
+ + +
+
+

Personality

Six traits, pulling in different directions at once.

@@ -232,10 +358,67 @@
- + +
+
+ +

The Look

+

+ The manga and the anime do not draw him the same way — and they do not quite write + him the same way either. Both figures below are this page’s own drawing, recoloured. +

+
+ +
+
+

In the manga

+
+ +
+

Brown hair, black tie

+
    + +
  • Hair — brown
  • +
  • Tie — black
  • +
+

+ Written more plainly as a manipulative con artist. The framing is more critical of him. +

+
+ + + +
+

In the anime

+
+ +
+

Reddish-blond hair, pink tie

+
    +
  • Hair — reddish-blond / golden
  • +
  • Tie — pink
  • +
+

+ Warmer and more likeable. The bombast is toned down and the charm is pushed forward. +

+
+
+ +
+

Shared by both versions

+
    +
  • Dark brown eyes
  • +
  • Dark grey business suit
  • +
  • Messy side-swept bangs
  • +
+
+
+ +
- +

What He Can Actually Do

Left column: real, verifiable, unglamorous. Right column: the show. @@ -292,7 +475,7 @@

-
+

Theatre

“Techniques”

Branded, named, and announced at volume. All of it is stagecraft for the client’s benefit.

@@ -327,10 +510,10 @@

- -
+ +
- +

In His Own Words

The fraud gives the best advice in the series.

@@ -346,12 +529,6 @@ -
- -

In the end, you’re the one who’s going to get hurt. When things go - south, it’s ok to run away and save yourself!

-
-

Being confident about your powers is fine, but you mustn’t get conceited. @@ -360,11 +537,23 @@

+ +

In the end, you’re the one who’s going to get hurt. When things go + south, it’s ok to run away and save yourself!

+
+ + +

Your life is your own, and it’s up to you to live it exactly the way you want.

+
+ +

Your life is your own. It’s okay to run away!

+
+

The truth behind one’s charm is kindness.

@@ -378,10 +567,10 @@

- +
- +

The People Around Him

One office, several strays.

@@ -395,10 +584,11 @@ the spine of his whole character.

  • -

    Colleague

    +

    Colleague · deputy director

    Katsuya Serizawa

    -

    Comes to work at Spirits and Such alongside Reigen, as the office — and Reigen — - get put back together on a healthier footing.

    +

    Hired during the rebuild and made deputy director of the office. Reigen cut his hair + himself — a small nudge toward standing on his own. The habitual + “Right, Serizawa?” is Reigen fishing for backup.

  • Uninvited

    @@ -419,17 +609,26 @@ man for the one thing he has that powers can’t buy.

  • -

    Client, then friend

    +

    Never actually hired

    Tome Kurata

    -

    Arrives as business and stays as a fixture in the orbit of the office.

    +

    She was never taken on. She installed herself as unpaid secretary and simply kept turning + up until it counted as a job. By the end the two of them needle each other like colleagues.

    +
  • +
  • +

    Client

    +

    Tsubomi Takane

    +

    Came to the office as a client with a friend and tested his credibility with a trick + question. Reigen spotted Mob’s photo on his own “satisfied customers” board + during the visit. No romantic angle on his side — he simply respected what she meant + to Mob.

  • - -
    + +
    - +

    Story Arcs

    The first two are spoiler-free. Everything after is folded away — open only what you @@ -462,10 +661,13 @@

    Separation

    Rock bottom

    -

    A public scandal drives Reigen and Mob apart. The press and public opinion turn on - him, and he ends up isolated and out of work. Stripped of the act, he has to look at how - hollow his life had become — and how much of it he had been outsourcing to a - fourteen-year-old.

    +

    A public scandal and an online pile-on drive Reigen and Mob apart — the split + following Reigen being dismissive about Mob’s social life. The press and public + opinion turn on him and he ends up isolated and out of work. Stripped of the act, he has + to look at how hollow his life had become without the kid in it, and how much of it he + had been outsourcing to a fourteen-year-old.

    +

    Second season episodes six and seven are widely treated as his arc + specifically rather than Mob’s.

    @@ -479,9 +681,10 @@

    Reunion & rebuild

    Doing it properly

    -

    Reigen and Mob reconcile. He reassesses how he has been living, brings Serizawa in, - and puts Spirits and Such back together on an honest footing — choosing actual - self-improvement over another, better lie.

    +

    Reigen and Mob reconcile. He reassesses how he has been living, brings Serizawa in as + a stabilising presence, and puts Spirits and Such back together on healthier terms + — choosing actual self-improvement over another, better lie. Still a bad boss. + Visibly a caring one.

    @@ -495,25 +698,60 @@

    Finale

    The measure of him

    -

    In the climactic confrontation Reigen is support, not spectacle. He never acquires a - single power. His arc resolves instead into something rarer in this genre: a stable, - caring adult that Mob can actually rely on.

    +

    In the climactic confrontation Reigen is support, not spectacle. While fused with + Mob’s power he briefly gains the ability to see spirits — borrowed, and + temporary. He never acquires a power of his own. His arc resolves instead into something + rarer in this genre: a stable, caring adult that Mob can actually rely on.

    - Arcs are listed in order of occurrence. Exact episode and chapter ranges are not stated here - because public sources did not confirm them consistently. + Arcs are listed in order of occurrence. Chapter ranges are not given, and the only episode + range stated is the one sources agree on — season two, episodes six and seven.

    + +
    +
    + +

    Beyond The Series

    +

    Three things that happened outside the story itself.

    +
    + +
      +
    • +

      Spin-off

      +

      He got a manga of his own

      +

      Reigen: The Man With a MAX Spirituality Level of 131 — a one-volume + anthology of short horror-comedy stories built around him. It ran on the MangaONE app from + 19 March 2018, and Dark Horse Comics released the English edition on + 15 December 2020.

      +
    • +
    • +

      Fandom

      +

      The most-favourited character

      +

      On MyAnimeList he is the most-favourited character in Mob Psycho 100 — + ahead of Mob himself. No count is printed here on purpose: the number moves constantly, and + anything committed to this page would be stale within the week.

      +
    • +
    • +

      Voice

      +

      The actor behind the bluster

      +

      Takahiro Sakurai, who voices him in Japanese, is a heavily awarded performer — the + Overseas Fans Award at the 6th Seiyu Awards in 2012 and the Personality Award at the 16th in + 2022, among others. Those awards belong to the actor, not to the character.

      +
    • +
    +
    +
    -