Files
diodiogod-TTS-Audio-Suite/web/character_alias_manager_styles.js

581 lines
19 KiB
JavaScript

const STYLE_ID = "tts-character-alias-manager-styles";
export function ensureCharacterAliasManagerStyles() {
if (document.getElementById(STYLE_ID)) return;
const style = document.createElement("style");
style.id = STYLE_ID;
style.textContent = `
.tts-alias-overlay {
position: fixed;
inset: 0;
z-index: 100000;
display: grid;
place-items: center;
padding: 24px;
background: rgba(5, 7, 10, .78);
backdrop-filter: blur(3px);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.tts-alias-sheet {
--paper: #efe1ba;
--paper-deep: #ddc998;
--paper-field: rgba(255, 250, 229, .58);
--ink: #332719;
--muted: #75664f;
--rule: rgba(100, 72, 38, .38);
--rule-strong: #8f6a3b;
--drag-accent: #9b713b;
--blue: #185f9e;
--blue-hover: #104d84;
--green: #356d38;
--green-bg: rgba(82, 130, 69, .12);
--stamp: #6e6252;
--stamp-bg: rgba(91, 82, 67, .09);
--danger: #9a3e34;
--shadow: rgba(0, 0, 0, .58);
position: relative;
display: flex;
flex-direction: column;
width: min(920px, 95vw);
height: min(820px, 92vh);
overflow: hidden;
color: var(--ink);
background-color: var(--paper);
background-image:
radial-gradient(circle at 12% 18%, rgba(127, 91, 39, .08), transparent 28%),
radial-gradient(circle at 82% 72%, rgba(104, 66, 25, .07), transparent 34%),
repeating-linear-gradient(4deg, rgba(91, 62, 25, .018) 0 1px, transparent 1px 5px),
linear-gradient(145deg, rgba(255,255,255,.3), transparent 38%);
border: 1px solid var(--rule-strong);
border-radius: 2px;
box-shadow:
0 24px 80px var(--shadow),
inset 0 0 0 4px var(--paper),
inset 0 0 0 5px var(--rule-strong),
inset 0 0 0 8px color-mix(in srgb, var(--paper) 82%, transparent),
inset 0 0 0 9px var(--rule),
inset 0 0 34px rgba(94, 61, 22, .12);
}
.tts-alias-sheet[data-theme="dark"] {
--paper: #171612;
--paper-deep: #211e18;
--paper-field: rgba(44, 40, 31, .86);
--ink: #e3d7bc;
--muted: #a79b84;
--rule: rgba(185, 160, 114, .25);
--rule-strong: #79684e;
--drag-accent: #b39a6c;
--blue: #4e9ad0;
--blue-hover: #68afe0;
--green: #83bd78;
--green-bg: rgba(91, 146, 82, .14);
--stamp: #aaa08f;
--stamp-bg: rgba(184, 172, 147, .08);
--danger: #dc7a6d;
--shadow: rgba(0, 0, 0, .82);
background-image:
radial-gradient(circle at 15% 20%, rgba(119, 79, 40, .11), transparent 31%),
radial-gradient(circle at 84% 68%, rgba(77, 91, 105, .1), transparent 36%),
repeating-linear-gradient(4deg, rgba(231, 213, 178, .012) 0 1px, transparent 1px 5px),
linear-gradient(145deg, rgba(255,255,255,.025), transparent 42%);
}
.tts-alias-header {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 18px;
padding: 28px 34px 18px;
border-bottom: 1px solid var(--rule-strong);
box-shadow: 0 3px 0 -2px var(--rule);
}
.tts-alias-title {
margin: 0;
font: 600 30px/1.05 Georgia, "Times New Roman", serif;
letter-spacing: -.02em;
}
.tts-alias-subtitle { margin-top: 6px; color: var(--muted); font: 15px/1.35 Georgia, "Times New Roman", serif; }
.tts-alias-header-actions { display: flex; align-items: flex-start; gap: 10px; }
.tts-alias-icon-button,
.tts-alias-button {
position: relative;
color: var(--ink);
background: var(--paper-field);
border: 0;
border-radius: 0;
clip-path: polygon(5px 0, calc(100% - 5px) 0, 100% 5px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 5px);
box-shadow:
inset 0 0 0 1px var(--rule-strong),
inset 0 0 0 3px color-mix(in srgb, var(--paper) 78%, transparent),
inset 0 0 0 4px var(--rule);
cursor: pointer;
transition: background .14s ease, color .14s ease, border-color .14s ease, transform .08s ease;
}
.tts-alias-icon-button { width: 34px; height: 34px; padding: 0; font: 700 18px/1 Georgia, "Times New Roman", serif; }
.tts-alias-close {
width: 34px;
height: 34px;
border: 1px solid var(--rule-strong);
border-radius: 0;
clip-path: none;
color: var(--ink);
background: color-mix(in srgb, var(--paper) 88%, var(--paper-deep));
box-shadow:
inset 0 0 0 3px color-mix(in srgb, var(--paper) 88%, transparent),
inset 0 0 0 4px var(--rule-strong),
1px 1px 0 color-mix(in srgb, var(--rule-strong) 30%, transparent);
font: 500 18px/1 Georgia, "Times New Roman", serif;
}
.tts-alias-close::before { display: none; }
.tts-alias-close:hover { color: var(--blue); border-color: var(--blue); background: var(--paper); }
.tts-alias-icon-button:hover,
.tts-alias-button:hover { border-color: var(--blue); color: var(--blue); }
.tts-alias-button:active,
.tts-alias-icon-button:active { transform: translateY(1px); }
.tts-alias-button:disabled { cursor: default; opacity: .46; transform: none; }
.tts-alias-toolbar {
position: relative;
display: grid;
grid-template-columns: minmax(210px, 1fr) auto auto auto;
gap: 18px;
align-items: center;
padding: 16px 34px;
border-bottom: 1px solid var(--rule);
}
.tts-alias-toolbar::after,
.tts-alias-table-head::after,
.tts-alias-message::after {
content: "";
position: absolute;
right: 28px;
bottom: -4px;
width: 7px;
height: 7px;
background: var(--paper);
border: 1px solid var(--rule-strong);
transform: rotate(45deg);
box-shadow: inset 0 0 0 2px var(--paper), inset 0 0 0 3px var(--rule-strong);
}
.tts-alias-search { position: relative; }
.tts-alias-search::before {
content: "";
position: absolute;
z-index: 1;
left: 13px;
top: 50%;
width: 10px;
height: 10px;
border: 1.5px solid var(--muted);
border-radius: 50%;
transform: translateY(-62%);
pointer-events: none;
}
.tts-alias-search::after {
content: "";
position: absolute;
z-index: 1;
left: 23px;
top: calc(50% + 4px);
width: 6px;
height: 1.5px;
background: var(--muted);
transform: rotate(45deg);
transform-origin: left center;
pointer-events: none;
}
.tts-alias-search input { width: 100%; padding-left: 38px; }
.tts-alias-filter-group {
display: inline-flex;
overflow: hidden;
border: 0;
border-radius: 0;
clip-path: polygon(5px 0, calc(100% - 5px) 0, 100% 5px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 5px);
box-shadow: inset 0 0 0 1px var(--rule-strong), inset 0 0 0 3px var(--paper), inset 0 0 0 4px var(--rule);
}
.tts-alias-filter {
min-width: 82px;
padding: 9px 13px;
color: var(--ink);
background: rgba(255,255,255,.05);
border: 0;
border-right: 1px solid var(--rule);
cursor: pointer;
font: 15px Georgia, "Times New Roman", serif;
}
.tts-alias-filter:last-child { border-right: 0; }
.tts-alias-filter.active { color: #f8f1df; background: var(--blue); box-shadow: inset 0 0 0 1px color-mix(in srgb, white 35%, transparent); }
.tts-alias-button { padding: 9px 15px; font: 600 14px/1.2 Georgia, "Times New Roman", serif; }
.tts-alias-add,
.tts-alias-save {
isolation: isolate;
color: #f6f1e5;
background: var(--blue);
border: 0;
border-radius: 0;
clip-path: polygon(5px 0, calc(100% - 5px) 0, 100% 5px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 5px);
box-shadow: none;
}
.tts-alias-add::before,
.tts-alias-save::before {
content: "";
position: absolute;
inset: 3px;
z-index: 0;
border: 1px solid color-mix(in srgb, #fff 62%, var(--paper-deep));
clip-path: polygon(3px 0, calc(100% - 3px) 0, 100% 3px, 100% calc(100% - 3px), calc(100% - 3px) 100%, 3px 100%, 0 calc(100% - 3px), 0 3px);
pointer-events: none;
}
.tts-alias-add:hover,
.tts-alias-save:hover { color: #fff; background: var(--blue-hover); }
.tts-alias-content {
flex: 1 1 auto;
min-height: 0;
overflow: auto;
padding: 0 24px;
scrollbar-color: var(--rule-strong) color-mix(in srgb, var(--paper-deep) 44%, transparent);
scrollbar-width: thin;
}
.tts-alias-content::-webkit-scrollbar { width: 11px; height: 11px; }
.tts-alias-content::-webkit-scrollbar-track {
background: color-mix(in srgb, var(--paper-deep) 44%, transparent);
border-left: 1px solid var(--rule);
}
.tts-alias-content::-webkit-scrollbar-thumb {
min-height: 34px;
background: var(--rule-strong);
border: 3px solid var(--paper);
border-radius: 0;
}
.tts-alias-content::-webkit-scrollbar-thumb:hover { background: var(--blue); }
.tts-alias-content::-webkit-scrollbar-corner { background: var(--paper); }
.tts-alias-content::-webkit-scrollbar-button { display: none; width: 0; height: 0; }
.tts-alias-table { min-width: 760px; }
.tts-alias-table-head,
.tts-alias-row {
display: grid;
grid-template-columns: 28px minmax(130px, .8fr) minmax(250px, 1.5fr) 112px 112px 74px;
gap: 12px;
align-items: center;
}
.tts-alias-table-head {
position: sticky;
top: 0;
z-index: 2;
padding: 14px 10px 11px;
color: var(--ink);
background: var(--paper);
border-bottom: 1px solid var(--rule-strong);
font: 600 14px Georgia, "Times New Roman", serif;
}
.tts-alias-table-head::after { right: 7px; }
.tts-alias-row {
position: relative;
min-height: 58px;
padding: 8px 10px;
border-bottom: 1px solid var(--rule);
transition: opacity 120ms ease, background-color 120ms ease, transform 120ms ease;
}
.tts-alias-row.dragging {
opacity: .3;
background: color-mix(in srgb, var(--drag-accent) 10%, transparent);
transform: scale(.995);
}
.tts-alias-row.drag-over-before::before,
.tts-alias-row.drag-over-after::after {
content: "";
position: absolute;
z-index: 3;
left: 8px;
right: 8px;
height: 2px;
background: var(--drag-accent);
box-shadow: 0 0 0 1px color-mix(in srgb, var(--paper) 70%, transparent), 0 0 8px color-mix(in srgb, var(--drag-accent) 42%, transparent);
animation: tts-alias-drop-cue 140ms ease-out;
}
.tts-alias-row.drag-over-before::before { top: -1px; }
.tts-alias-row.drag-over-after::after { bottom: -1px; }
.tts-alias-row.drag-over-before,
.tts-alias-row.drag-over-after { background: color-mix(in srgb, var(--drag-accent) 9%, transparent); }
.tts-alias-drag-ghost {
position: fixed;
z-index: 100000;
top: -10000px;
left: -10000px;
box-sizing: border-box;
color: var(--ink);
background: var(--paper);
border: 1px solid var(--drag-accent);
box-shadow: 0 10px 28px rgba(0, 0, 0, .28);
opacity: .92;
transform: rotate(.35deg);
pointer-events: none;
}
@keyframes tts-alias-drop-cue {
from { opacity: 0; transform: scaleX(.92); }
to { opacity: 1; transform: scaleX(1); }
}
.tts-alias-row.inherited { color: var(--muted); }
.tts-alias-row.invalid { background: rgba(154, 62, 52, .08); }
.tts-alias-grip { color: transparent; text-align: center; user-select: none; }
.tts-alias-grip.active { color: var(--muted); cursor: grab; font-size: 18px; }
.tts-alias-grip.active:active { cursor: grabbing; color: var(--drag-accent); }
.tts-alias-group { position: relative; }
.tts-alias-group + .tts-alias-group { margin-top: 8px; }
.tts-alias-group-header {
display: grid;
grid-template-columns: 28px minmax(150px, 1fr) auto auto auto;
gap: 7px;
align-items: center;
min-height: 43px;
padding: 5px 10px;
color: var(--ink);
background: color-mix(in srgb, var(--paper-deep) 45%, transparent);
border-top: 3px double var(--rule-strong);
border-bottom: 1px solid var(--rule);
font: 600 15px Georgia, "Times New Roman", serif;
transition: background-color 120ms ease, box-shadow 120ms ease;
}
.tts-alias-group-header.drag-over-group {
background: color-mix(in srgb, var(--drag-accent) 12%, var(--paper-deep));
box-shadow: inset 3px 0 0 var(--drag-accent);
}
.tts-alias-group.inherited .tts-alias-group-header { grid-template-columns: 28px minmax(150px, 1fr) auto; color: var(--muted); }
.tts-alias-group-ornament {
position: relative;
width: 22px;
height: 22px;
color: var(--rule-strong);
}
.tts-alias-group-ornament::before,
.tts-alias-group-ornament::after {
content: "";
position: absolute;
inset: 4px;
border: 1px solid currentColor;
transform: rotate(45deg);
}
.tts-alias-group-ornament::after {
inset: 8px;
background: currentColor;
}
.tts-alias-group-origin { font-size: 11px; font-weight: 400; letter-spacing: .04em; opacity: .75; }
.tts-alias-group-header input { height: 32px; font: 600 15px Georgia, "Times New Roman", serif; }
.tts-alias-group-action { min-width: 30px; padding: 4px 7px; }
.tts-alias-group-remove { color: var(--danger); }
.tts-alias-group-notes {
padding: 7px 46px;
color: var(--muted);
background: color-mix(in srgb, var(--paper-deep) 22%, transparent);
border-bottom: 1px dashed var(--rule);
font: italic 12px/1.35 Georgia, "Times New Roman", serif;
}
.tts-alias-sheet input,
.tts-alias-sheet select {
min-width: 0;
height: 38px;
padding: 7px 10px;
color: var(--ink);
background: var(--paper-field);
border: 1px solid var(--rule);
border-radius: 4px;
outline: none;
font: 14px/1.2 ui-sans-serif, system-ui, sans-serif;
}
.tts-alias-sheet .tts-alias-search input { padding-left: 42px; }
.tts-alias-sheet input:focus,
.tts-alias-sheet select:focus { border-color: var(--blue); box-shadow: 0 0 0 2px rgba(44, 119, 178, .15); }
.tts-alias-sheet input::placeholder { color: var(--muted); opacity: .9; }
.tts-alias-sheet option { color: var(--ink); background: var(--paper); }
.tts-alias-row.user input,
.tts-alias-row.user select,
.tts-alias-group.user .tts-alias-group-header input {
color: var(--ink);
background: transparent;
border-color: transparent;
border-radius: 0;
box-shadow: none;
font-family: Georgia, "Times New Roman", serif;
transition: background .12s ease, border-color .12s ease, box-shadow .12s ease;
}
.tts-alias-row.user select {
appearance: none;
cursor: pointer;
}
.tts-alias-row.user input:hover,
.tts-alias-row.user select:hover,
.tts-alias-group.user .tts-alias-group-header input:hover {
border-bottom-color: var(--rule);
}
.tts-alias-row.user input:focus,
.tts-alias-row.user select:focus,
.tts-alias-group.user .tts-alias-group-header input:focus {
color: var(--ink);
background: var(--paper-field);
border: 1px solid var(--blue);
border-radius: 4px;
box-shadow: 0 0 0 2px rgba(44, 119, 178, .15);
}
.tts-alias-row.user select:focus { appearance: auto; }
.tts-alias-readonly { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 14px Georgia, "Times New Roman", serif; }
.tts-alias-voice-cell {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto;
gap: 7px;
align-items: center;
min-width: 0;
}
.tts-alias-voice-cell > input,
.tts-alias-voice-cell > select,
.tts-alias-voice-cell > .tts-alias-readonly { width: 100%; min-width: 0; }
.tts-alias-transcript-warning {
width: 8px;
height: 8px;
flex: 0 0 auto;
background: #d69722;
border: 1px solid color-mix(in srgb, #7a4b00 72%, var(--ink));
box-shadow: 0 0 0 2px color-mix(in srgb, #d69722 18%, transparent);
transform: rotate(45deg);
}
.tts-alias-sheet[data-theme="dark"] .tts-alias-transcript-warning {
background: #e7ad43;
border-color: #f3c76f;
}
.tts-alias-preview {
position: relative;
width: 24px;
height: 24px;
padding: 0;
color: var(--blue);
background: color-mix(in srgb, var(--paper-field) 72%, transparent);
border: 1px solid color-mix(in srgb, var(--blue) 42%, var(--rule));
border-radius: 50%;
opacity: 0;
cursor: pointer;
transform: translateX(3px);
transition: opacity .12s ease, transform .12s ease, background .12s ease;
}
.tts-alias-preview::before {
content: "";
position: absolute;
top: 50%;
left: 52%;
width: 0;
height: 0;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
border-left: 6px solid currentColor;
transform: translate(-42%, -50%);
}
.tts-alias-preview.playing::before {
width: 7px;
height: 7px;
border: 0;
background: currentColor;
transform: translate(-50%, -50%);
}
.tts-alias-voice-cell:hover .tts-alias-preview,
.tts-alias-voice-cell:focus-within .tts-alias-preview,
.tts-alias-preview.playing {
opacity: 1;
transform: translateX(0);
}
.tts-alias-preview:hover,
.tts-alias-preview:focus-visible {
color: #fff;
background: var(--blue);
outline: none;
}
.tts-alias-source {
position: relative;
justify-self: start;
padding: 5px 9px 4px;
border: 0;
border-radius: 0;
clip-path: polygon(4px 0, calc(100% - 4px) 0, 100% 4px, 100% calc(100% - 4px), calc(100% - 4px) 100%, 4px 100%, 0 calc(100% - 4px), 0 4px);
font: 700 11px/1 Georgia, "Times New Roman", serif;
letter-spacing: .06em;
box-shadow: inset 0 0 0 1px currentColor, inset 0 0 0 3px var(--paper), inset 0 0 0 4px currentColor;
text-shadow: 0 1px 0 color-mix(in srgb, var(--paper) 75%, transparent);
}
.tts-alias-source.user { color: var(--green); background: var(--green-bg); transform: rotate(-.5deg); }
.tts-alias-source.inherited { color: var(--stamp); background: var(--stamp-bg); transform: rotate(.45deg); }
.tts-alias-link {
justify-self: start;
padding: 3px 0;
color: var(--blue);
background: transparent;
border: 0;
border-bottom: 1px solid currentColor;
cursor: pointer;
font: 13px Georgia, "Times New Roman", serif;
}
.tts-alias-remove { color: var(--danger); border-bottom-color: transparent; }
.tts-alias-message {
position: relative;
display: flex;
align-items: center;
gap: 9px;
min-height: 54px;
margin: 0 34px;
color: var(--muted);
border-bottom: 1px solid var(--rule);
font: 14px/1.35 Georgia, "Times New Roman", serif;
}
.tts-alias-message::after { right: 0; }
.tts-alias-message.error { color: var(--danger); }
.tts-alias-message::before { content: "ⓘ"; font-family: sans-serif; }
.tts-alias-message.error::before { content: "⚠"; }
.tts-alias-empty,
.tts-alias-loading { padding: 52px 20px; color: var(--muted); text-align: center; font: 16px Georgia, "Times New Roman", serif; }
.tts-alias-footer {
display: flex;
align-items: center;
gap: 10px;
padding: 17px 34px 22px;
}
.tts-alias-status { margin-right: auto; color: var(--muted); font: 15px Georgia, "Times New Roman", serif; }
.tts-alias-status.dirty { color: #a66c00; }
.tts-alias-sheet[data-theme="dark"] .tts-alias-status.dirty { color: #e1b457; }
.tts-alias-status.dirty::before { content: "●"; margin-right: 9px; font-size: 10px; }
.tts-alias-reset { margin-right: 4px; }
.tts-alias-toast {
position: absolute;
right: 24px;
bottom: 76px;
z-index: 4;
max-width: 420px;
padding: 10px 13px;
color: #f5f2e9;
background: rgba(28, 70, 45, .95);
border: 1px solid #63906d;
border-radius: 5px;
box-shadow: 0 8px 24px rgba(0,0,0,.3);
font-size: 12px;
}
@media (max-width: 820px) {
.tts-alias-overlay { padding: 10px; }
.tts-alias-header { padding: 24px 22px 14px; }
.tts-alias-toolbar { grid-template-columns: 1fr auto auto; gap: 10px; padding: 13px 22px; }
.tts-alias-search { grid-column: 1 / -1; }
.tts-alias-content { padding: 0 12px; }
.tts-alias-message { margin: 0 22px; }
.tts-alias-footer { flex-wrap: wrap; padding: 14px 22px 18px; }
.tts-alias-status { flex-basis: 100%; }
}
`;
document.head.appendChild(style);
}