Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Join the Playtest on Steam Now: SpiritVale

MediaWiki:Common.css: Difference between revisions

MediaWiki interface page
No edit summary
Tags: Mobile edit Mobile web edit
No edit summary
Tags: Mobile edit Mobile web edit
Line 174: Line 174:
/* ----------------------------------------------------------------------------
/* ----------------------------------------------------------------------------
SV utility: hover lift (micro-interaction)
SV utility: hover lift (micro-interaction)
- Universal, reusable (icons, buttons, tiles, etc.)
---------------------------------------------------------------------------- */
---------------------------------------------------------------------------- */


.sv-hover-lift{
.sv-hover-lift{
  transition:transform 0.15s ease-in-out;
transition:transform 0.15s ease-in-out;
  will-change:transform;
will-change:transform;
}
}


.sv-hover-lift:hover{
.sv-hover-lift:hover{
  transform:translateY(-2px);
transform:translateY(-2px);
}
}


@media (prefers-reduced-motion: reduce){
@media (prefers-reduced-motion: reduce){
  .sv-hover-lift{
.sv-hover-lift{transition:none;}
    transition:none;
.sv-hover-lift:hover{transform:none;}
  }
  .sv-hover-lift:hover{
    transform:none;
  }
}
}


Line 211: Line 206:
}
}


/* Optional size modifiers for future boxes */
/* Optional size modifiers */
.sv-card.sv-infobox-right.sv-infobox-right--md{max-width:260px;}
.sv-card.sv-infobox-right.sv-infobox-right--md{max-width:260px;}
.sv-card.sv-infobox-right.sv-infobox-right--lg{max-width:320px;}
.sv-card.sv-infobox-right.sv-infobox-right--lg{max-width:320px;}
Line 261: Line 256:


/* ----------------------------------------------------------------------------
/* ----------------------------------------------------------------------------
4) Legacy safety blocks (kept, but unified to tokens)
4) Legacy safety blocks (kept, unified to tokens)
---------------------------------------------------------------------------- */
---------------------------------------------------------------------------- */


Line 611: Line 606:
}
}


/* Notes button: solid (no transparency) */
/* Notes button: solid */
:is(table.spiritvale-skill-infobox, table.spiritvale-passive-infobox) .module-icon-name .sv-tip-btn--notes{
:is(table.spiritvale-skill-infobox, table.spiritvale-passive-infobox) .module-icon-name .sv-tip-btn--notes{
display:inline-flex;
display:inline-flex;
Line 852: Line 847:
/* ---------------------------------------------------------------------------
/* ---------------------------------------------------------------------------
SV Shared Utilities (global)
SV Shared Utilities (global)
- Used by GameInfo + future bot-rendered modules
- Used by GameInfo + bot-rendered modules
--------------------------------------------------------------------------- */
--------------------------------------------------------------------------- */


/* Phase 4.1 visibility contract (JS toggles these) */
/* Visibility contract (JS toggles these) */
.sv-hidden,
.sv-hidden,
.mw-parser-output .sv-hidden {
.mw-parser-output .sv-hidden{
  display: none !important;
display:none !important;
}
}


[hidden] {
[hidden]{display:none !important;}
  display: none !important;
}


/* Missing icon fallback badge (“?”) */
/* Missing icon fallback badge (“?”) */
.sv-miss,
.sv-miss,
.mw-parser-output .sv-miss {
.mw-parser-output .sv-miss{
  display: inline-flex;
display:inline-flex;
  align-items: center;
align-items:center;
  justify-content: center;
justify-content:center;
  width: 18px;
width:18px;
  height: 18px;
height:18px;
  border-radius: var(--sv-ui-rad-pill);
border-radius:var(--sv-ui-rad-pill);
  border: 1px solid var(--sv-ui-line2);
border:1px solid var(--sv-ui-line2);
  background: var(--sv-ui-bg3);
background:var(--sv-ui-bg3);
  color: var(--sv-ui-text1);
color:var(--sv-ui-text1);
  font-weight: 900;
font-weight:900;
  font-size: 12px;
font-size:12px;
  line-height: 1;
line-height:1;
}
}


/* Generic image wrapper (bot can emit this for consistent rounding) */
/* Generic image wrapper */
.sv-img,
.sv-img,
.mw-parser-output .sv-img {
.mw-parser-output .sv-img{
  display: inline-flex;
display:inline-flex;
  align-items: center;
align-items:center;
  justify-content: center;
justify-content:center;
}
}


.sv-img img,
.sv-img img,
.mw-parser-output .sv-img img {
.mw-parser-output .sv-img img{
  display: block;
display:block;
  max-width: 100%;
max-width:100%;
  height: auto;
height:auto;
  border-radius: var(--sv-ui-rad-sm);
border-radius:var(--sv-ui-rad-sm);
}
}


/* Optional: shadow variant (only when explicitly requested in markup) */
/* Optional: shadow variant */
.sv-img--shadow img,
.sv-img--shadow img,
.mw-parser-output .sv-img--shadow img {
.mw-parser-output .sv-img--shadow img{
  box-shadow: 0 10px 18px rgba(0,0,0,0.35);
box-shadow:0 10px 18px rgba(0,0,0,0.35);
}
}


/* ---------------------------------------------------------------------------
/* ---------------------------------------------------------------------------
SV Tabs (shared component)
SV Tabs (shared component)
- GameInfo can drop its local .sv-tab* rules once this exists
--------------------------------------------------------------------------- */
--------------------------------------------------------------------------- */


.sv-tabs,
.sv-tabs,
.mw-parser-output .sv-tabs {
.mw-parser-output .sv-tabs{
  margin: 10px 0 0;
margin:10px 0 0;
}
}


.sv-tabs-list,
.sv-tabs-list,
.mw-parser-output .sv-tabs-list {
.mw-parser-output .sv-tabs-list{
  display: flex;
display:flex;
  gap: 8px;
gap:8px;
  flex-wrap: wrap;
flex-wrap:wrap;
  margin: 0 0 10px 0;
margin:0 0 10px 0;
  padding: 0;
padding:0;
}
}


.sv-tab,
.sv-tab,
.mw-parser-output .sv-tab {
.mw-parser-output .sv-tab{
  display: inline-flex;
display:inline-flex;
  align-items: center;
align-items:center;
  justify-content: center;
justify-content:center;
  border-radius: var(--sv-ui-rad-pill);
border-radius:var(--sv-ui-rad-pill);
  padding: 7px 10px;
padding:7px 10px;
  border: 1px solid var(--sv-ui-line2);
border:1px solid var(--sv-ui-line2);
  background: var(--sv-ui-bg2);
background:var(--sv-ui-bg2);
  color: var(--sv-ui-text1);
color:var(--sv-ui-text1);
  font-weight: 900;
font-weight:900;
  font-size: 13px;
font-size:13px;
  cursor: pointer;
cursor:pointer;
  user-select: none;
user-select:none;
}
}


.sv-tab:hover,
.sv-tab:hover,
.mw-parser-output .sv-tab:hover {
.mw-parser-output .sv-tab:hover{
  background: var(--sv-ui-bg3);
background:var(--sv-ui-bg3);
}
}


.sv-tab[aria-selected="true"],
.sv-tab[aria-selected="true"],
.mw-parser-output .sv-tab[aria-selected="true"] {
.mw-parser-output .sv-tab[aria-selected="true"]{
  background: var(--sv-ui-bg3);
background:var(--sv-ui-bg3);
  border-color: var(--sv-ui-accent);
border-color:var(--sv-ui-accent);
}
}


.sv-tabpanel,
.sv-tabpanel,
.mw-parser-output .sv-tabpanel {
.mw-parser-output .sv-tabpanel{
  padding: 10px 12px;
padding:10px 12px;
  border-radius: var(--sv-ui-rad-md);
border-radius:var(--sv-ui-rad-md);
  border: 1px solid var(--sv-ui-line1);
border:1px solid var(--sv-ui-line1);
  background: var(--sv-ui-bg1);
background:var(--sv-ui-bg1);
}
}


/* ---------------------------------------------------------------------------
/* ---------------------------------------------------------------------------
SV Disclosure (shared popover component)
SV Disclosure (shared source markup)
- Used by “Requirements / Users” style dropdowns
- Hidden source popups live in the DOM; Universal Popups clones their content.
--------------------------------------------------------------------------- */
--------------------------------------------------------------------------- */


.sv-disclose,
.sv-disclose,
.mw-parser-output .sv-disclose {
.mw-parser-output .sv-disclose{position:relative;}
  position: relative;
}


.sv-disclose-btn,
.sv-disclose-btn,
.mw-parser-output .sv-disclose-btn {
.mw-parser-output .sv-disclose-btn{
  display: flex;
display:flex;
  align-items: center;
align-items:center;
  justify-content: space-between;
justify-content:space-between;
  gap: 12px;
gap:12px;
  width: 100%;
width:100%;
  padding: 10px 12px;
padding:10px 12px;
  border-radius: var(--sv-ui-rad-md);
border-radius:var(--sv-ui-rad-md);
  border: 1px solid var(--sv-ui-line1);
border:1px solid var(--sv-ui-line1);
  background: var(--sv-ui-bg1);
background:var(--sv-ui-bg1);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.05);
box-shadow:inset 0 1px 0 rgba(255,255,255,0.05);
  background-image: linear-gradient(180deg, rgba(255,255,255,0.05), rgba(255,255,255,0.00));
background-image:linear-gradient(180deg, rgba(255,255,255,0.05), rgba(255,255,255,0.00));
  color: var(--sv-ui-text1);
color:var(--sv-ui-text1);
  font-weight: 900;
font-weight:900;
  cursor: pointer;
cursor:pointer;
  user-select: none;
user-select:none;
}
}


.sv-disclose-btn:hover,
.sv-disclose-btn:hover,
.mw-parser-output .sv-disclose-btn:hover {
.mw-parser-output .sv-disclose-btn:hover{
  background: var(--sv-ui-bg2);
background:var(--sv-ui-bg2);
}
}


.sv-disclose-count,
.sv-disclose-count,
.mw-parser-output .sv-disclose-count {
.mw-parser-output .sv-disclose-count{
  font-weight: 800;
font-weight:800;
  font-size: 13px;
font-size:13px;
  color: var(--sv-ui-text3);
color:var(--sv-ui-text3);
  white-space: nowrap;
white-space:nowrap;
}
}


/* IMPORTANT: do not set display:none; JS controls via .sv-hidden / [hidden] */
/* ====================================================================== */
.sv-disclose-pop,
/* LEGACY POPUP STYLES (deprecated)                                       */
.mw-parser-output .sv-disclose-pop {
/*                                                                        */
  position: absolute;
/* Kept temporarily for older markup patterns. Delete this section after  */
  z-index: 99999;
/* migration if no pages rely on these classes.                           */
  top: calc(100% + 8px);
/* ====================================================================== */
  left: 0;
  width: min(420px, calc(100vw - 16px));
  max-height: 60vh;
  overflow: auto;
  border-radius: var(--sv-ui-rad-md);
  border: 1px solid var(--sv-ui-pop-line, var(--sv-ui-line2));
  background: var(--sv-ui-pop-bg, var(--sv-ui-bg0));
  color: var(--sv-ui-text1);
  box-shadow: var(--sv-ui-pop-shadow, 0 10px 30px rgba(0,0,0,0.35)), inset 0 1px 0 rgba(255,255,255,0.04);
  background-image: radial-gradient(900px 260px at 35% 0, rgba(106,166,255,0.12), rgba(0,0,0,0) 60%);
}


.sv-disclose-pop-head,
/* Legacy tooltip shells (suppressed when Universal Popups is active) */
.mw-parser-output .sv-disclose-pop-head {
/* .sv-def-tip, .sv-pop-tip may still exist as leftover markup in content */
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  border-bottom: 1px solid var(--sv-ui-line1);
  background: var(--sv-ui-bg1);
  cursor: pointer;
}
 
.sv-disclose-pop-title,
.mw-parser-output .sv-disclose-pop-title {
  font-weight: 900;
  font-size: 13px;
  letter-spacing: 0.02em;
}
 
.sv-disclose-pop-hint,
.mw-parser-output .sv-disclose-pop-hint {
  font-size: 12px;
  color: var(--sv-ui-text3);
}
 
.sv-disclose-list,
.mw-parser-output .sv-disclose-list {
  margin: 0;
  padding: 10px 12px 12px;
  list-style: none;
}
 
.sv-disclose-list li,
.mw-parser-output .sv-disclose-list li {
  padding: 6px 0;
  border-top: 1px solid var(--sv-ui-line1);
  font-size: 13px;
}
 
.sv-disclose-list li:first-child,
.mw-parser-output .sv-disclose-list li:first-child {
  border-top: none;
  padding-top: 0;
}
 
.sv-disclose-group-title,
.mw-parser-output .sv-disclose-group-title {
  padding-top: 10px;
  font-weight: 900;
  font-size: 12px;
  letter-spacing: 0.02em;
  color: var(--sv-ui-text2);
}


/* ============================================================================
/* ============================================================================
SV Universal Popup v3.1 (TESTING)
SV Universal Popups v3.1
- Popup B aesthetic, site-wide
- Popup B aesthetic, site-wide
- Compact width: popups grow vertically (mobile-friendly)
- Compact width: popups grow vertically (mobile-friendly)
- Header centered + larger, no hint text
- Header centered + larger
- Linked definitions: header title can be a real link (Popups/PagePreviews-friendly)
- Linked definitions: header title can be a real link (Popups/PagePreviews-friendly)
- JS adds .sv-uipop-v3 to <html> when enabled
- JS adds .sv-uipop-v3 to <html> when enabled
Line 1,082: Line 1,011:
.sv-uipop-v3 .sv-def-tip,
.sv-uipop-v3 .sv-def-tip,
.sv-uipop-v3 .sv-pop-tip{
.sv-uipop-v3 .sv-pop-tip{
  display:none !important; /* hide legacy injected black tooltips/pops */
display:none !important;
}
}


Line 1,092: Line 1,021:
.sv-uipop-title,
.sv-uipop-title,
.sv-uipop-title-link{
.sv-uipop-title-link{
  -webkit-touch-callout:none;
-webkit-touch-callout:none;
  -webkit-user-select:none;
-webkit-user-select:none;
  user-select:none;
user-select:none;
  touch-action:manipulation;
touch-action:manipulation;
}
}


Line 1,101: Line 1,030:
.sv-disclose-btn *,
.sv-disclose-btn *,
.sv-uipop-head *{
.sv-uipop-head *{
  -webkit-user-select:none;
-webkit-user-select:none;
  user-select:none;
user-select:none;
}
}


Line 1,108: Line 1,037:


.sv-uipop{
.sv-uipop{
  position:fixed;
position:fixed;
  z-index:99999;
z-index:9000; /* stays above page UI; allows Popups/PagePreviews to overlay if needed */
top:0;
left:0;
box-sizing:border-box;


  /* JS sets top/left */
border-radius:var(--sv-ui-rad-lg);
  top:0;
border:1px solid var(--sv-ui-pop-line, var(--sv-ui-line2));
  left:0;
background:var(--sv-ui-pop-bg, var(--sv-ui-bg0));
background-image:
radial-gradient(900px 260px at 35% 0, rgba(106,166,255,0.14), rgba(0,0,0,0) 60%),
linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.00));


  box-sizing:border-box;
color:var(--sv-ui-text1);
box-shadow:var(--sv-ui-pop-shadow, 0 10px 30px rgba(0,0,0,0.35)),
inset 0 1px 0 rgba(255,255,255,0.04);


  border-radius:var(--sv-ui-rad-lg);
overflow:hidden;
  border:1px solid var(--sv-ui-pop-line, var(--sv-ui-line2));
  background:var(--sv-ui-pop-bg, var(--sv-ui-bg0));
  background-image:
    radial-gradient(900px 260px at 35% 0, rgba(106,166,255,0.14), rgba(0,0,0,0) 60%),
    linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.00));
 
  color:var(--sv-ui-text1);
  box-shadow:var(--sv-ui-pop-shadow, 0 10px 30px rgba(0,0,0,0.35)),
            inset 0 1px 0 rgba(255,255,255,0.04);
 
  overflow:hidden;
}
}


.sv-uipop[aria-hidden="true"]{ display:none; }
.sv-uipop[aria-hidden="true"]{display:none;}


/* v3 sizing: same compact width for ALL popups; height differs by mode */
/* Compact width for all popups; height differs by mode */
.sv-uipop--sm,
.sv-uipop--sm,
.sv-uipop--lg{
.sv-uipop--lg{
  width:240px;                   /* compact default */
width:240px;
  max-width:calc(100vw - 20px);   /* always fit viewport */
max-width:calc(100vw - 20px);
}
}


/* Small: short tooltip-ish */
.sv-uipop--sm{max-height:min(45vh, 320px);}
.sv-uipop--sm{
.sv-uipop--lg{max-height:min(70vh, 560px);}
  max-height:min(45vh, 320px);
}


/* Large: more height for lists (still same width) */
/* Header: centered title */
.sv-uipop--lg{
  max-height:min(70vh, 560px);
}
 
/* Header bar: centered + bigger, no hint */
.sv-uipop-head{
.sv-uipop-head{
  display:flex;
display:flex;
  align-items:center;
align-items:center;
  justify-content:center; /* centered header */
justify-content:center;
  padding:12px 12px;
padding:12px 12px;
 
border-bottom:1px solid var(--sv-ui-line1);
  border-bottom:1px solid var(--sv-ui-line1);
background:var(--sv-ui-bg1);
  background:var(--sv-ui-bg1);
}
}


.sv-uipop-head--clickable{ cursor:pointer; }
.sv-uipop-head--clickable{cursor:pointer;}


.sv-uipop-title{
.sv-uipop-title{
  width:100%;
width:100%;
  text-align:center;
text-align:center;
 
font-weight:900;
  font-weight:900;
font-size:16px;
  font-size:16px;         /* bigger title */
letter-spacing:0.02em;
  letter-spacing:0.02em;
color:var(--color-emphasized, var(--sv-ui-text1));
  color:var(--color-emphasized, var(--sv-ui-text1));
}
}


/* Header title link (Definitions with data-sv-def-link) */
/* Header title link (Definitions with data-sv-def-link) */
.sv-uipop-title a.sv-uipop-title-link{
.sv-uipop-title a.sv-uipop-title-link{
  color:inherit;
color:inherit;
  text-decoration:none;
text-decoration:none;
}
}
.sv-uipop-title a.sv-uipop-title-link:hover{
.sv-uipop-title a.sv-uipop-title-link:hover{
  text-decoration:underline;
text-decoration:underline;
  text-decoration-thickness:2px;
text-decoration-thickness:2px;
  text-underline-offset:2px;
text-underline-offset:2px;
}
}


/* Body */
/* Body */
.sv-uipop-body{
.sv-uipop-body{
  padding:10px 12px 12px;
padding:10px 12px 12px;
  font-size:13px;
font-size:13px;
  line-height:1.4;
line-height:1.4;
  color:var(--sv-ui-text2);
color:var(--sv-ui-text2);
 
overflow:auto;
  overflow:auto;
overflow-wrap:anywhere;
  overflow-wrap:anywhere;
word-break:break-word;
  word-break:break-word;
-webkit-user-select:text;
 
user-select:text;
  -webkit-user-select:text; /* allow copy inside body */
  user-select:text;
}
}


.sv-uipop-body--pre{ white-space:pre-line; }
.sv-uipop-body--pre{white-space:pre-line;}


/* Normalize common blocks inside popup body (fixes “Notes is bigger than Definition”) */
/* Normalize common blocks inside popup body */
.sv-uipop-body p,
.sv-uipop-body p,
.sv-uipop-body ul,
.sv-uipop-body ul,
.sv-uipop-body ol{
.sv-uipop-body ol{margin:0;}
  margin:0;
}


.sv-uipop-body ul,
.sv-uipop-body ul,
.sv-uipop-body ol{
.sv-uipop-body ol{padding-left:1.15em;}
  padding-left:1.15em; /* keep bullets but reduce default indent */
}


.sv-uipop-body li{
.sv-uipop-body li{margin:0;}
  margin:0;
}


/* Links in popups */
/* Links in popups */
.sv-uipop a{
.sv-uipop a{
  color:var(--color-link, var(--sv-ui-accent));
color:var(--color-link, var(--sv-ui-accent));
  text-decoration:underline;
text-decoration:underline;
  text-decoration-thickness:2px;
text-decoration-thickness:2px;
  text-underline-offset:2px;
text-underline-offset:2px;
}
}
.sv-uipop a:hover{ text-decoration-thickness:3px; }
.sv-uipop a:hover{text-decoration-thickness:3px;}


/* Normalize “Users/Requirements” list styling, supporting both old + new classes */
/* Normalize list styling for Users/Requirements clones */
.sv-uipop :where(.sv-disclose-list, .sv-uipop-list){
.sv-uipop :where(.sv-disclose-list, .sv-uipop-list){
  margin:0;
margin:0;
  padding:0;
padding:0;
  list-style:none;
list-style:none;
}
}


.sv-uipop :where(.sv-disclose-list, .sv-uipop-list) > li{
.sv-uipop :where(.sv-disclose-list, .sv-uipop-list) > li{
  padding:6px 0;
padding:6px 0;
  border-top:1px solid var(--sv-ui-line1);
border-top:1px solid var(--sv-ui-line1);
  font-size:13px;
font-size:13px;
  color:var(--sv-ui-text2);
color:var(--sv-ui-text2);
}
}
.sv-uipop :where(.sv-disclose-list, .sv-uipop-list) > li:first-child{
.sv-uipop :where(.sv-disclose-list, .sv-uipop-list) > li:first-child{
  border-top:none;
border-top:none;
  padding-top:0;
padding-top:0;
}
}


.sv-uipop :where(.sv-disclose-group-title, .sv-uipop-group-title){
.sv-uipop :where(.sv-disclose-group-title, .sv-uipop-group-title){
  padding-top:10px;
padding-top:10px;
  font-weight:900;
font-weight:900;
  font-size:12px;
font-size:12px;
  letter-spacing:0.02em;
letter-spacing:0.02em;
  color:var(--sv-ui-text1);
color:var(--sv-ui-text1);
}
}