Actions

Work Header

Rating:
Archive Warning:
Fandoms:
Additional Tags:
Language:
English
Stats:
Published:
2026-06-09
Completed:
2026-06-10
Words:
4,654
Chapters:
4/4
Comments:
9
Kudos:
31
Bookmarks:
10
Hits:
458

Skin for Recreating Persona 4 Revival’s UI Elements

Summary:

A work skin for recreating various UI elements from Persona 4 Revival, including the text boxes and dialog selection process.

For convenience’s sake, the last chapter contains all of the CSS code in one place.

LATEST ADDITIONS:
► 1. Text Boxes & Dialog Options
► 2. Current Date & Objective
► 3. Social Stats

Chapter 1: Text Boxes & Dialog Options

Notes:

(See the end of the chapter for notes.)

Chapter Text


Chie Satonaka: Either that, or you’re a total airhead. But whatever you’ve got going on, I guess it’s working.

[ Was that a compliment? ]
[ I’ll show you what I’ve got going on. ]
[ Falling for me already, huh? ]


Example HTML Code

To have a dialogue option highlighted permanently, replace the relevant top <span> tag in the ‘.p4r-select’ div with a <b> one instead.

<div class="p4r-box">
  <p>
    <b><u>Chie Satonaka</u><span>:</span></b>
    <span class="text">
      Either that, or you’re a total airhead. But whatever you’ve got going on, I guess it’s working.
    </span>
  </p>
</div>

<div class="p4r-select">
  <p align="center">
    <span>
      <span>[</span>
      <span class="text">Was that a compliment?</span>
      <span>]</span>
    </span>

    <br />
    <span>
      <span>[</span>
      <span class="text">I’ll <i>show</i> you what I’ve got going on.</span>
      <span>]</span>
    </span>

    <br />
    <span>
      <span>[</span>
      <span class="text">Falling for me already, huh?</span>
      <span>]</span>
    </span>
  </p>
</div>

CSS Code

/* P4R Text Box */

#workskin .p4r-box,
#workskin .p4r-box p {
  color: white;
  display: block;
}

#workskin .p4r-box {
  margin: 50px auto 40px;
  position: relative;
  width: 600px;
  max-width: 90%;
  z-index: 2;
}

#workskin .p4r-box p {
  background: repeating-linear-gradient(to right, #483018, #6E4A1C 15%, #6E4A1C 20%, #442E1A 35%, #483018 50%, #483018 60%);
  border-radius: 50px 0px 90px 50px;
  margin: 50px auto 40px;
  position: relative;
}

#workskin .p4r-box p:not(:first-of-type) {
  margin-top: 60px;
}

#workskin .p4r-box p::before {
  content: '';
  background-color: #E8E800;
  border-top-left-radius: 65px;
  display: block;
  padding: 10px;
  position: absolute;
  top: -20px;
  left: -20px;
  height: 50%;
  width: 300px;
  max-width: 65%;
  z-index: -1;
}

#workskin .p4r-box p::after {
  content: '';
  background-color: #a86e38;
  border-radius: 0px 0px 100px 60px;
  display: block;
  padding-right: 18px;
  position: absolute;
  bottom: -10px;
  left: -10px;
  height: 100%;
  width: 100%;
  z-index: -2;
}

/* P4R Text Box - Name Tag */

#workskin .p4r-box p > b {
  color: black;
  display: block;
  position: absolute;
  top: -20px;
  left: 32px;
  height: 20px;
}

#workskin .p4r-box p > b > span {
  display: none;
}

#workskin .p4r-box p > b > u {
  background-color: #ffff80;
  -webkit-background-clip: text;
  -webkit-text-stroke: 3px transparent;
  padding: 0 3px;
  text-decoration: none;
}

/* P4R Text Box - Text */

#workskin .p4r-box .text {
  display: table-cell;
  padding: 10px 70px 10px 40px;
  text-shadow: 0 0 4px black, 0 0 4px black;
  vertical-align: middle;
  height: 70px;
}

#workskin .p4r-box .text::before,
#workskin .p4r-box .text::after {
  content: '';
  border-radius: 100%;
  cursor: pointer;
  display: block;
  transform: rotate(-55deg);
  position: absolute;
}

#workskin .p4r-box .text::before {
  background: linear-gradient(#A45C08, #A45C08 50%, yellow 50%);
  outline: 3px solid #FCAB01;
  outline-offset: 8px;
  bottom: 20px;
  right: -5px;
  height: 40px;
  width: 40px;
}

#workskin .p4r-box .text::after {
  background: linear-gradient(yellow, yellow 50%, #FCAB01 50%);
  bottom: 27.5px;
  right: 2.5px;
  height: 25px;
  width: 25px;
}

/* P4R Dialog Select */

#workskin .p4r-select {
  color: white;
  margin: 30px 0 30px auto;
  position: relative;
  width: 500px;
  max-width: 80%;
}

#workskin .p4r-select br {
  display: none;
}

#workskin .p4r-select p {
  background: radial-gradient(circle at left, #603700, black 50%, black 85%, #603700 100%);
  border-radius: 5px;
  box-shadow: -2px 2px #E8E800;
  padding: 10px 0px 10px 10px;
  text-align: left;
}

/* P4R Dialog Select - Choices */

#workskin .p4r-select p > b,
#workskin .p4r-select p > span,
#workskin .p4r-select p > a,
#workskin .p4r-select p > strike {
  align-items: center;
  border-bottom: 0;
  color: white;
  display: flex;
  line-height: 1.2;
  padding: 2px 0 2px 4px;
  min-height: 21px;
}

#workskin .p4r-select p > b .text,
#workskin .p4r-select p > span:hover .text,
#workskin .p4r-select p > a:hover .text {
  display: inline-block;
  transform: scale(1.05);
  transform-origin: left center;
}

#workskin .p4r-select p > b,
#workskin .p4r-select p > span:hover,
#workskin .p4r-select p > a:hover {
  background-color: yellow;
  border-top-left-radius: 5px;
  border-bottom-left-radius: 5px;
  box-shadow: -2px 2px #EEAE00, 0px 2px #EEAE00;
  color: #2e2400;
  cursor: pointer;
  font-weight: bold;
}

#workskin .p4r-select p > b > span:not(.text),
#workskin .p4r-select p > span > span:not(.text),
#workskin .p4r-select p > a > span:not(.text),
#workskin .p4r-select p > strike > span:not(.text) {
  display: none;
}

#workskin .p4r-select p > strike {
  color: #ffffff80;
  cursor: default;
  text-decoration: line-through;
}

Adding CYOA-Style Links


Which of my Persona 4 work skins would you like to use?


This code supports having each choice act as a hyperlink to something else, with the ones that aren’t appearing more faded out. To do this, simply replace the requisite <span> tag with <a>, alongside an appropriate link. Unavailable choices should be marked with a <strike> tag instead.

<div class="p4r-select">
  <p align="center">
    <a href="https://archiveofourown.org/works/46327330">
      <span>[ 1 –</span>
      <span class="text">My Social Link Rank Up display.</span>
      <span>]</span>
    </a>

    <br />
    <a href="https://archiveofourown.org/works/47179210">
      <span>[ 2 –</span>
      <span class="text">My Save File display.</span>
      <span>]</span>
    </a>

    <br />
    <strike>
      <span>[ 3 –</span>
      <span class="text">Can I get something else?</span>
      <span>]</span>
    </strike>
  </p>
</div>

Notes:

So. That Persona 4 Revival trailer, huh?

Since the text boxes shown off in that trailer wasn’t too dissimilar to the CSS recreation I for Persona 3 Reload a year back, this didn’t take me too much effort to do. I might go and throw in the date and time display, as well the one for the current mission objective, sometime later—but for now, this is satisfactory. Definitely turned out better than when I tried to recreate Golden’s text boxes (you don’t want to know how that went).