Files
fvtt-chroniques-de-l-etrange/css/cde-theme.less
LeRatierBretonnier 068fca00e5 Neo-Tokyo Neon Noir design pour fiches items
- Nouvelle palette : #080c14 fond, accents néon par type (#00d4d4 item, #ff3d5a kungfu, #4a9eff spell, #cc44ff supernatural)
- Nouveaux composants LESS : .cde-neon-header (clip-path angulaire + accent line), .cde-avatar (clip-path), .cde-stat-grid/.cde-stat-cell (style terminal), .cde-badge (parallélogramme), .cde-neon-tabs (underline néon animé), .cde-check-cell
- Fix layout : .cde-sheet width: 100% + height: 100% + overflow: hidden, .cde-tab-body flex: 1 + min-height: 0, .cde-notes-editor flex stretch
- Fix positions : DEFAULT_OPTIONS height explicite pour tous les types (item 620x580, spell 660x680, kungfu 720x680, supernatural 560x520)
- 4 templates items reécrits avec nouvelles classes et structure épurée

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-26 00:18:04 +01:00

834 lines
19 KiB
Plaintext

/* -------------------------------------------
Fonts
---------------------------------------------*/
@font-face {
font-family: "DeliusUnicaseBold";
src: url(../fonts/DeliusUnicase-Bold.ttf);
}
@font-face {
font-family: "DeliusUnicase";
src: url(../fonts/DeliusUnicase-Regular.ttf);
}
// ============================================================
// Neo-Tokyo Neon Noir — Palette
// ============================================================
@cde-bg: #080c14;
@cde-surface: #101622;
@cde-surface2: #0d1520;
@cde-border: #1a2436;
@cde-border-hi: #263853;
@cde-text: #e2e8f4;
@cde-muted: #5b6b88;
// Accents néon par type
@cde-item: #00d4d4;
@cde-kungfu: #ff3d5a;
@cde-spell: #4a9eff;
@cde-supernatural: #cc44ff;
@cde-shadow: 0 8px 32px rgba(0, 0, 0, 0.6);
@cde-shadow-sm: 0 2px 12px rgba(0, 0, 0, 0.4);
@cde-radius: 8px;
@cde-radius-sm: 5px;
@cde-gap: 12px;
// Glow helpers
.glow(@color) { box-shadow: 0 0 0 1px fade(@color, 35%), 0 0 12px fade(@color, 20%); }
.glow-text(@color) { text-shadow: 0 0 8px fade(@color, 60%); }
// ============================================================
// CSS Variables (for JS access)
// ============================================================
.fvtt-chroniques-de-l-etrange {
--cde-bg: @cde-bg;
--cde-surface: @cde-surface;
--cde-border: @cde-border;
--cde-text: @cde-text;
--cde-muted: @cde-muted;
--cde-item: @cde-item;
--cde-kungfu: @cde-kungfu;
--cde-spell: @cde-spell;
--cde-supernatural: @cde-supernatural;
color: @cde-text;
background: @cde-bg;
}
// ============================================================
// Base sheet
// ============================================================
.cde-sheet {
background: @cde-bg;
color: @cde-text;
font-family: "DeliusUnicase", sans-serif;
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
overflow: hidden;
input, select, textarea {
font-family: inherit;
color: @cde-text;
background: transparent;
}
}
// ============================================================
// Item-sheet Neon Header
// ============================================================
.cde-neon-header {
position: relative;
background: @cde-surface;
display: grid;
grid-template-columns: 90px 1fr;
gap: 14px;
padding: 12px 14px 14px;
overflow: hidden;
// Angular clip on bottom-right corner
clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%);
// Top accent line — overridden per type
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: @cde-border-hi;
}
// Subtle neon scatter in background
&::after {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 0% 0%, fade(@cde-border-hi, 30%) 0%, transparent 50%);
pointer-events: none;
}
// Per-type accent colors
&.item { &::before { background: @cde-item; box-shadow: 0 0 10px fade(@cde-item, 50%); } }
&.kungfu { &::before { background: @cde-kungfu; box-shadow: 0 0 10px fade(@cde-kungfu, 50%); } }
&.spell { &::before { background: @cde-spell; box-shadow: 0 0 10px fade(@cde-spell, 50%); } }
&.supernatural { &::before { background: @cde-supernatural; box-shadow: 0 0 10px fade(@cde-supernatural, 50%); } }
}
// Avatar inside neon header — angular clip
.cde-avatar {
width: 90px;
height: 90px;
object-fit: cover;
clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%);
border: 1px solid @cde-border-hi;
background: @cde-surface2;
cursor: pointer;
position: relative;
z-index: 1;
}
// Header content zone
.cde-header-content {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
gap: 8px;
min-width: 0;
}
// Item name — flat neon-bottom-border input
.cde-item-name {
margin: 0;
input {
width: 100%;
border: none;
border-bottom: 2px solid @cde-border-hi;
background: transparent;
color: @cde-text;
font-size: 18px;
font-family: "DeliusUnicase", sans-serif;
font-weight: 700;
padding: 4px 0 6px;
letter-spacing: 0.04em;
text-transform: uppercase;
outline: none;
transition: border-color 0.15s;
&:focus {
border-bottom-color: @cde-item;
}
}
}
// Type-specific focus color on name input
.cde-neon-header.kungfu .cde-item-name input:focus { border-bottom-color: @cde-kungfu; }
.cde-neon-header.spell .cde-item-name input:focus { border-bottom-color: @cde-spell; }
.cde-neon-header.supernatural .cde-item-name input:focus { border-bottom-color: @cde-supernatural; }
// ============================================================
// Stat Grid (terminal style)
// ============================================================
.cde-stat-grid {
display: flex;
flex-wrap: wrap;
gap: 6px 10px;
align-items: flex-end;
}
.cde-stat-cell {
display: flex;
flex-direction: column;
gap: 3px;
min-width: 110px;
flex: 1 1 110px;
max-width: 200px;
}
.cde-stat-label {
font-size: 10px;
font-family: monospace;
text-transform: uppercase;
letter-spacing: 0.1em;
color: @cde-muted;
white-space: nowrap;
}
.cde-stat-value {
font-size: 15px;
font-weight: 800;
color: @cde-text;
letter-spacing: 0.02em;
}
.cde-stat-cell input,
.cde-stat-cell select {
width: 100%;
background: transparent;
border: none;
border-bottom: 1px solid @cde-border;
color: @cde-text;
font-size: 14px;
padding: 4px 0;
outline: none;
transition: border-color 0.15s;
&:focus {
border-bottom-color: @cde-item;
}
}
.cde-neon-header.kungfu .cde-stat-cell input:focus,
.cde-neon-header.kungfu .cde-stat-cell select:focus { border-bottom-color: @cde-kungfu; }
.cde-neon-header.spell .cde-stat-cell input:focus,
.cde-neon-header.spell .cde-stat-cell select:focus { border-bottom-color: @cde-spell; }
.cde-neon-header.supernatural .cde-stat-cell input:focus,
.cde-neon-header.supernatural .cde-stat-cell select:focus { border-bottom-color: @cde-supernatural; }
// ============================================================
// Type Badge — angular clip-path parallelogram
// ============================================================
.cde-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 14px 3px 10px;
clip-path: polygon(6px 0, 100% 0, calc(100% - 6px) 100%, 0 100%);
font-size: 11px;
font-weight: 800;
letter-spacing: 0.1em;
text-transform: uppercase;
color: @cde-bg;
cursor: default;
white-space: nowrap;
&.item { background: @cde-item; }
&.kungfu { background: @cde-kungfu; }
&.spell { background: @cde-spell; }
&.supernatural { background: @cde-supernatural; }
&.character { background: @cde-item; }
&.npc { background: @cde-supernatural; }
}
// ============================================================
// Neon Tabs
// ============================================================
.cde-neon-tabs {
display: flex;
gap: 0;
border-bottom: 1px solid @cde-border;
background: transparent;
margin-top: 8px;
overflow-x: auto;
.item {
padding: 8px 14px;
font-size: 11px;
font-family: monospace;
text-transform: uppercase;
letter-spacing: 0.1em;
color: @cde-muted;
border-bottom: 2px solid transparent;
white-space: nowrap;
transition: color 0.15s, border-color 0.15s;
cursor: pointer;
&:hover {
color: @cde-text;
}
&.active {
color: @cde-item;
border-bottom-color: @cde-item;
}
}
}
// Per-type active tab color
.item.kungfu .cde-neon-tabs .item.active,
form.kungfu .cde-neon-tabs .item.active { color: @cde-kungfu; border-bottom-color: @cde-kungfu; }
form.spell .cde-neon-tabs .item.active { color: @cde-spell; border-bottom-color: @cde-spell; }
form.supernatural .cde-neon-tabs .item.active { color: @cde-supernatural; border-bottom-color: @cde-supernatural; }
// ============================================================
// Tab body
// ============================================================
.cde-tab-body {
flex: 1 1 0;
min-height: 0;
padding: @cde-gap;
background: @cde-surface2;
border: 1px solid @cde-border;
border-top: none;
border-radius: 0 0 @cde-radius @cde-radius;
overflow-y: auto;
.tab {
display: none;
flex-direction: column;
gap: @cde-gap;
height: 100%;
}
.tab.active {
display: flex;
}
}
// ============================================================
// Card
// ============================================================
.cde-card {
background: @cde-surface;
border: 1px solid @cde-border;
border-radius: @cde-radius;
padding: 12px;
box-shadow: @cde-shadow-sm;
}
.cde-card .tab-sous-titre {
font-family: monospace;
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: @cde-muted;
margin-bottom: 6px;
border-bottom: 1px solid @cde-border;
padding-bottom: 4px;
}
// ============================================================
// Notes editor
// ============================================================
.cde-notes-editor {
flex: 1 1 0;
min-height: 0;
display: flex;
flex-direction: column;
.editor {
flex: 1 1 0;
min-height: 200px;
border-radius: @cde-radius;
border: 1px solid @cde-border;
background: @cde-surface;
}
}
// ============================================================
// Technique card (kungfu)
// ============================================================
.cde-technique-card {
border-left: 3px solid @cde-kungfu;
background: fade(@cde-surface, 80%);
}
.cde-technique-header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: flex-start;
gap: 10px;
margin-bottom: 10px;
}
.cde-technique-title {
display: flex;
align-items: center;
gap: 8px;
flex: 1 1 200px;
input {
flex: 1;
background: transparent;
border: none;
border-bottom: 1px solid @cde-border;
color: @cde-text;
font-size: 15px;
font-weight: 700;
padding: 4px 0;
outline: none;
&:focus { border-bottom-color: @cde-kungfu; }
}
}
.cde-technique-meta {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: flex-end;
}
.cde-technique-body .editor {
min-height: 180px;
}
// Mini technique checkbox row
.cde-check-cell {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
min-width: 70px;
label {
font-size: 10px;
font-family: monospace;
text-transform: uppercase;
letter-spacing: 0.08em;
color: @cde-muted;
}
input[type="checkbox"] {
width: 18px;
height: 18px;
accent-color: @cde-kungfu;
cursor: pointer;
}
}
// ============================================================
// Legacy chips (kept for actor sheets)
// ============================================================
.cde-chip {
background: fade(@cde-surface, 75%);
border: 1px solid @cde-border;
border-radius: @cde-radius;
padding: 8px 10px;
display: inline-flex;
flex-direction: column;
gap: 6px;
min-width: 140px;
label {
font-size: 10px;
font-family: monospace;
letter-spacing: 0.08em;
text-transform: uppercase;
color: @cde-muted;
margin: 0;
}
input, select {
width: 100%;
border: none;
border-bottom: 1px solid @cde-border;
background: transparent;
color: @cde-text;
padding: 4px 0;
outline: none;
&:focus { border-bottom-color: @cde-item; }
}
input[type="checkbox"] {
width: auto;
align-self: flex-start;
accent-color: @cde-item;
}
&.mini { min-width: 100px; padding: 6px 8px; }
}
.cde-meta-row {
display: flex;
gap: @cde-gap;
flex-wrap: wrap;
align-items: flex-end;
margin-top: 8px;
&.compact { gap: 8px; }
}
// Kept for backward compat with actor templates
.cde-pill {
display: inline-block;
padding: 3px 10px;
border-radius: 999px;
font-weight: 800;
font-size: 11px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: @cde-bg;
&.item { background: @cde-item; }
&.kungfu { background: @cde-kungfu; }
&.spell { background: @cde-spell; }
&.supernatural { background: @cde-supernatural; }
&.character { background: @cde-item; }
&.npc { background: @cde-supernatural; }
}
// ============================================================
// Actor header (kept, updated for new palette)
// ============================================================
.cde-header {
background: @cde-surface;
border: 1px solid @cde-border;
border-radius: @cde-radius;
padding: 12px;
display: grid;
grid-template-columns: 120px 1fr;
gap: @cde-gap;
box-shadow: @cde-shadow;
.profile-img {
width: 100%;
border-radius: @cde-radius;
border: 1px solid @cde-border;
box-shadow: @cde-shadow;
object-fit: cover;
}
.header-fields h1.charname input {
width: 100%;
border: none;
border-bottom: 2px solid @cde-border-hi;
background: transparent;
color: @cde-text;
font-size: 20px;
font-family: "DeliusUnicase", sans-serif;
padding: 4px 0 8px;
outline: none;
&:focus { border-bottom-color: @cde-item; }
}
}
.cde-actor-header {
grid-template-columns: 160px 1fr;
align-items: start;
}
.cde-header-top {
display: flex;
justify-content: space-between;
align-items: center;
gap: 8px;
}
.cde-icon-button {
border: 1px solid @cde-border;
background: fade(@cde-surface, 70%);
color: @cde-text;
border-radius: 999px;
padding: 6px 10px;
box-shadow: @cde-shadow-sm;
cursor: pointer;
&:hover { border-color: @cde-border-hi; }
}
.cde-quick-meta {
display: flex;
align-items: center;
gap: @cde-gap;
flex-wrap: wrap;
}
.cde-initiative-card {
border: 1px solid @cde-border;
border-radius: @cde-radius;
padding: 10px;
background: fade(@cde-surface, 70%);
box-shadow: @cde-shadow-sm;
display: inline-flex;
flex-direction: column;
gap: 6px;
}
.cde-initiative-controls {
display: inline-flex;
align-items: center;
gap: 8px;
img {
width: 30px;
height: 30px;
border: 1px solid @cde-border;
border-radius: 5px;
background: fade(@cde-bg, 90%);
cursor: pointer;
&:hover {
border-color: @cde-spell;
box-shadow: 0 0 0 2px fade(@cde-spell, 25%);
}
}
}
.cde-initiative-value {
min-width: 28px;
text-align: center;
font-weight: 800;
}
// ============================================================
// Grid, field, table, section — common
// ============================================================
.cde-grid {
display: grid;
gap: @cde-gap;
&.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
&.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.cde-field {
label {
display: block;
margin-bottom: 4px;
font-size: 10px;
font-family: monospace;
text-transform: uppercase;
letter-spacing: 0.08em;
color: @cde-muted;
}
input, select, textarea {
width: 100%;
border: none;
border-bottom: 1px solid @cde-border;
background: transparent;
color: @cde-text;
padding: 5px 0;
outline: none;
&:focus { border-bottom-color: @cde-item; }
}
}
.cde-section-title {
font-family: monospace;
font-size: 10px;
font-weight: 800;
letter-spacing: 0.1em;
text-transform: uppercase;
color: @cde-muted;
margin-bottom: 8px;
border-bottom: 1px solid @cde-border;
padding-bottom: 4px;
}
.cde-tag {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 10px;
border-radius: 999px;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
background: fade(@cde-border, 80%);
color: @cde-muted;
border: 1px solid @cde-border;
}
.cde-data-table {
table {
width: 100%;
border-collapse: collapse;
color: @cde-text;
}
td {
padding: 7px 8px;
border-bottom: 1px solid @cde-border;
}
tr:nth-child(even) { background: fade(@cde-surface, 50%); }
tr:hover { background: fade(@cde-border-hi, 20%); }
input, select {
width: 100%;
border: none;
border-bottom: 1px solid @cde-border;
background: transparent;
color: @cde-text;
padding: 4px 0;
outline: none;
}
}
.cde-centered-card {
display: flex;
gap: @cde-gap;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
img {
max-height: 280px;
border-radius: @cde-radius;
border: 1px solid @cde-border;
box-shadow: @cde-shadow;
}
}
.loksyu_wrap .schema,
.tinji_wrap .schema {
display: grid;
gap: @cde-gap;
align-items: center;
}
.loksyu-visual,
.tinji-visual {
max-width: 100%;
border-radius: @cde-radius;
border: 1px solid @cde-border;
box-shadow: @cde-shadow;
}
// Legacy tabs (actor sheets still use cde-tabs)
.cde-tabs {
margin-top: @cde-gap;
border-bottom: 1px solid @cde-border;
.item {
color: @cde-muted;
padding: 8px 12px;
font-size: 11px;
font-family: monospace;
text-transform: uppercase;
letter-spacing: 0.08em;
&:hover { color: @cde-text; }
&.active {
color: @cde-item;
background: @cde-surface;
border: 1px solid @cde-border;
border-bottom: 1px solid @cde-surface;
border-radius: @cde-radius @cde-radius 0 0;
}
}
}
/* =============================================
Global UI Rules
=============================================*/
#logo {
content: url("/systems/fvtt-chroniques-de-l-etrange/images/logo_jeu.png");
width: 100px;
height: 100px;
margin-left: 7px;
margin-top: -2px;
}
#pause > img {
content: url("/systems/fvtt-chroniques-de-l-etrange/images/wheel.webp");
height: 192px;
width: 192px;
top: -45px;
left: calc(50% - 96px);
}
#pause.paused {
animation: none;
}
a.compendium-name,
a.entry-name,
strong.ellipsis {
font-family: "DeliusUnicase";
}
/* concerne les pages de journaux */
.journal-header input {
font-family: "DeliusUnicase";
}
.journal-entry-page h1 {
font-family: "DeliusUnicaseBold";
text-align: center;
color:hsla(249, 66%, 58%, 0.874);
border-bottom: 1px solid orange;
border-top: 1px solid orange;
border-top: 1px solid orange;
}
.journal-entry-page h2 {
font-family: "DeliusUnicaseBold";
color:orange;
border-bottom: 0px;
border-top: 1px solid orange;
}
.journal-entry-page h3,
.journal-entry-page h4,
.journal-entry-page h5,
.journal-entry-page h6 {
font-family: "DeliusUnicaseBold";
color:hsla(249, 66%, 58%, 0.874);
border-bottom: 0px;
}
/* concerne le Tchat */
#interface .chat-message .message-header img {
max-width: 80px;
border-radius: 5px;
border: 0.5px solid black;
/* max-width: 50px; */
/* max-height: 50px; */
margin-right: 4px;
}
#interface .chat-message .message-header .message-sender {
width: 100px;
}