chore: 基线 — 已发布壁纸现状原样入库(未做任何改动)
dist/ 为 Wallpaper Engine 网页壁纸「【崩坏:星穹铁道】昔涟」(workshopid 3604974793, version 2), 含两套预设 xilian / kv37,总计 105.1MB。本次提交不做任何修改,仅作为后续优化的对拍基线。
No files matched your search
@@ -0,0 +1,13 @@
|
|||||||
|
## Agent skills
|
||||||
|
|
||||||
|
### Issue tracker
|
||||||
|
|
||||||
|
Issues and specs live as markdown files under `.scratch/` in this repo. See `docs/agents/issue-tracker.md`.
|
||||||
|
|
||||||
|
### Triage labels
|
||||||
|
|
||||||
|
The five canonical triage roles use their default label strings. See `docs/agents/triage-labels.md`.
|
||||||
|
|
||||||
|
### Domain docs
|
||||||
|
|
||||||
|
Single-context: one `CONTEXT.md` and `docs/adr/` at the repo root. See `docs/agents/domain.md`.
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
【崩坏:星穹铁道】昔涟
|
||||||
|
[b]特色功能[/b]
|
||||||
|
[list]
|
||||||
|
[*]支持切换预设。
|
||||||
|
[olist]
|
||||||
|
[*]官方昔涟动态立绘。
|
||||||
|
[*]官方三点七版本「成为昨日的明天」专题展示页。
|
||||||
|
[/olist]
|
||||||
|
[*]支持音源切换。
|
||||||
|
[olist]
|
||||||
|
[*][quote][b]注意:[/b]目前仅支持 URL 格式。[/quote]
|
||||||
|
[/olist]
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
[Honkai: Star Rail] Cryene
|
||||||
|
[b]Special Features[/b]
|
||||||
|
[list]
|
||||||
|
[*]Supports switching presets.
|
||||||
|
[olist]
|
||||||
|
[*]Official Xilian dynamic portraits.
|
||||||
|
[*]Official version 3.7 "As Tomorrow Became Yesterday" special showcase page.
|
||||||
|
[/olist]
|
||||||
|
[*]Supports switching audio sources.
|
||||||
|
[olist]
|
||||||
|
[*][quote][b]Note: [/b]Currently only URL format is supported.[/quote]
|
||||||
|
[/olist]
|
||||||
|
[/list]
|
||||||
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 700 KiB |
|
After Width: | Height: | Size: 183 KiB |
|
After Width: | Height: | Size: 419 KiB |
|
After Width: | Height: | Size: 349 KiB |
|
After Width: | Height: | Size: 830 KiB |
|
After Width: | Height: | Size: 5.1 MiB |
|
After Width: | Height: | Size: 3.4 MiB |
|
After Width: | Height: | Size: 5.0 MiB |
|
After Width: | Height: | Size: 3.4 MiB |
@@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>昔涟动态立绘</title>
|
||||||
|
<link rel="stylesheet" href="./styles/spine-player.css" />
|
||||||
|
<link rel="stylesheet" href="./styles/index.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="spine-container"></div>
|
||||||
|
<audio id="background-music"></audio>
|
||||||
|
<script type="text/javascript" src="./scripts/spine-player.js"></script>
|
||||||
|
<script type="module" src="./scripts/index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "CommonJS",
|
||||||
|
"target": "ES6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 821 KiB |
@@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"contentrating" : "Everyone",
|
||||||
|
"description" : "[b]特色功能[/b]\r\n[list]\r\n [*]支持切换预设。\r\n [olist]\r\n [*]官方昔涟动态立绘。\r\n [*]官方三点七版本「成为昨日的明天」专题展示页。\r\n [/olist]\r\n [*]支持音源切换。\r\n [olist]\r\n [*][quote][b]注意:[/b]目前仅支持 URL 格式。[/quote]\r\n [/olist]\r\n[/list]",
|
||||||
|
"file" : "index.html",
|
||||||
|
"general" :
|
||||||
|
{
|
||||||
|
"properties" :
|
||||||
|
{
|
||||||
|
"audio_file" :
|
||||||
|
{
|
||||||
|
"index" : 6,
|
||||||
|
"order" : 106,
|
||||||
|
"text" : "🎵音频文件路径",
|
||||||
|
"type" : "textinput",
|
||||||
|
"value" : ""
|
||||||
|
},
|
||||||
|
"audio_file_note" :
|
||||||
|
{
|
||||||
|
"index" : 7,
|
||||||
|
"order" : 107,
|
||||||
|
"text" : "<small>更换背景音乐来源:<ul><li>🚨注意:目前仅支持 URL 链接。</li><li>当音源不可用时会切换至上一音源。</li></ul></small><br />",
|
||||||
|
"type" : "text"
|
||||||
|
},
|
||||||
|
"audio_volume" :
|
||||||
|
{
|
||||||
|
"fraction" : true,
|
||||||
|
"index" : 4,
|
||||||
|
"max" : 1,
|
||||||
|
"min" : 0,
|
||||||
|
"order" : 104,
|
||||||
|
"precision" : 1,
|
||||||
|
"step" : 0.1,
|
||||||
|
"text" : "🔊音频音量调整",
|
||||||
|
"type" : "slider",
|
||||||
|
"value" : 1
|
||||||
|
},
|
||||||
|
"audio_volume_note" :
|
||||||
|
{
|
||||||
|
"index" : 5,
|
||||||
|
"order" : 105,
|
||||||
|
"text" : "<small>调整背景音乐音量:<ul><li>为零时暂停。</li><li>为一时最大。</li></ul></small><br />",
|
||||||
|
"type" : "text"
|
||||||
|
},
|
||||||
|
"author_info" :
|
||||||
|
{
|
||||||
|
"condition" : "show_author_info.value == true",
|
||||||
|
"index" : 1,
|
||||||
|
"order" : 101,
|
||||||
|
"text" : "<small>作者信息:<ul><li>作者:品毅</li><li>QQ:2463253700</li><li>哔哩哔哩:<a href=\"https://space.bilibili.com/72266376\">品毅的个人空间</a></li></ul></small><br />",
|
||||||
|
"type" : "text"
|
||||||
|
},
|
||||||
|
"preset" :
|
||||||
|
{
|
||||||
|
"index" : 2,
|
||||||
|
"options" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"label" : "昔涟立绘",
|
||||||
|
"value" : "xilian"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label" : "「成为昨日的明天」",
|
||||||
|
"value" : "kv37"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"order" : 102,
|
||||||
|
"text" : "⚙️壁纸预设切换<br />",
|
||||||
|
"type" : "combo",
|
||||||
|
"value" : "xilian"
|
||||||
|
},
|
||||||
|
"preset_note" :
|
||||||
|
{
|
||||||
|
"index" : 3,
|
||||||
|
"order" : 103,
|
||||||
|
"text" : "<small>切换壁纸预设(包括背景、音乐、动画):<ul><li>当其它选项存在更改,不会覆盖其它选项。</li></ul></small><br />",
|
||||||
|
"type" : "text"
|
||||||
|
},
|
||||||
|
"schemecolor" :
|
||||||
|
{
|
||||||
|
"order" : 0,
|
||||||
|
"text" : "ui_browse_properties_scheme_color",
|
||||||
|
"type" : "color",
|
||||||
|
"value" : "0.38823529411764707 0.14901960784313725 0.6196078431372549"
|
||||||
|
},
|
||||||
|
"show_author_info" :
|
||||||
|
{
|
||||||
|
"index" : 0,
|
||||||
|
"order" : 100,
|
||||||
|
"text" : "📇显示作者信息",
|
||||||
|
"type" : "bool",
|
||||||
|
"value" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"preview" : "preview.gif",
|
||||||
|
"ratingsex" : "none",
|
||||||
|
"ratingviolence" : "none",
|
||||||
|
"tags" : [ "Anime" ],
|
||||||
|
"title" : "【崩坏:星穹铁道】昔涟",
|
||||||
|
"type" : "Web",
|
||||||
|
"version" : 2,
|
||||||
|
"visibility" : "public",
|
||||||
|
"workshopid" : "3604974793",
|
||||||
|
"workshopurl" : "steam://url/CommunityFilePage/3604974793"
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
export default class AudioController {
|
||||||
|
constructor(audioId, options = {}) {
|
||||||
|
this.audio = document.getElementById(audioId);
|
||||||
|
this.audio.src = options.source;
|
||||||
|
this.audio.volume = options.volume;
|
||||||
|
this.audio.loop = true;
|
||||||
|
this.isPlaying = false;
|
||||||
|
this.isChangingSource = false;
|
||||||
|
this.previousSource = null;
|
||||||
|
}
|
||||||
|
play() {
|
||||||
|
if (this.isPlaying) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.isChangingSource) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.audio) {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.isPlaying = true;
|
||||||
|
this.audio.play().catch((error) => {
|
||||||
|
this.isPlaying = false;
|
||||||
|
this.changeSource(this.previousSource);
|
||||||
|
});
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pause() {
|
||||||
|
this.audio.pause();
|
||||||
|
this.isPlaying = false;
|
||||||
|
}
|
||||||
|
changeSource(newSource) {
|
||||||
|
if (this.isChangingSource) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.audio) {
|
||||||
|
this.isChangingSource = true;
|
||||||
|
this.pause();
|
||||||
|
this.previousSource = this.audio.src;
|
||||||
|
this.audio.src = newSource;
|
||||||
|
this.isChangingSource = false;
|
||||||
|
this.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
changeVolume(newVolume) {
|
||||||
|
const clampedVolume = Math.max(0, Math.min(1, newVolume));
|
||||||
|
this.audio.volume = clampedVolume;
|
||||||
|
this.changeStateByVolume();
|
||||||
|
}
|
||||||
|
changeStateByVolume() {
|
||||||
|
const currentVolume = this.audio.volume;
|
||||||
|
if (currentVolume > 0 && !this.isPlaying) {
|
||||||
|
this.play();
|
||||||
|
} else if (currentVolume <= 0 && this.isPlaying) {
|
||||||
|
this.pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
changeOptions(newOptions) {
|
||||||
|
const newSource = newOptions.source;
|
||||||
|
const newVolume = newOptions.volume;
|
||||||
|
this.changeSource(newSource);
|
||||||
|
this.changeVolume(newVolume);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
export default class BackgroundController {
|
||||||
|
constructor(backgroundImage) {
|
||||||
|
this.backgroundImage = backgroundImage;
|
||||||
|
}
|
||||||
|
setImage(backgroundImage = this.backgroundImage) {
|
||||||
|
this.backgroundImage = backgroundImage;
|
||||||
|
document.getElementsByTagName(
|
||||||
|
"body"
|
||||||
|
)[0].style.backgroundImage = `url(${backgroundImage})`;
|
||||||
|
}
|
||||||
|
changeImage(newBackgroundImage) {
|
||||||
|
this.setImage(newBackgroundImage);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
import PresetStore from "./preset-store.js";
|
||||||
|
|
||||||
|
import PresetController from "./preset-controller.js";
|
||||||
|
import BackgroundController from "./background-controller.js";
|
||||||
|
import SpineController from "./spine-controller.js";
|
||||||
|
import AudioController from "./audio-controller.js";
|
||||||
|
|
||||||
|
let presetController = new PresetController(PresetStore);
|
||||||
|
|
||||||
|
let { backgroundImage, spineConfig, audioOptions } =
|
||||||
|
presetController.set("xilian");
|
||||||
|
|
||||||
|
let backgroundController = new BackgroundController(backgroundImage);
|
||||||
|
let spineController = new SpineController("spine-container", spineConfig);
|
||||||
|
let audioController = new AudioController("background-music", audioOptions);
|
||||||
|
|
||||||
|
let currentAudioSource = "";
|
||||||
|
let currentAudioVolume = 0;
|
||||||
|
|
||||||
|
window.addEventListener("load", function () {
|
||||||
|
backgroundController.setImage();
|
||||||
|
spineController.create();
|
||||||
|
audioController.play();
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener("resize", () => {
|
||||||
|
spineController.adjustCanvas();
|
||||||
|
});
|
||||||
|
|
||||||
|
window.wallpaperRegisterListener = {
|
||||||
|
applyGeneralProperties: function (properties) {
|
||||||
|
if (properties.fps) {
|
||||||
|
// wallpaperSettings.fps = properties.fps;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
applyUserProperties: function (properties) {
|
||||||
|
if (properties.preset) {
|
||||||
|
const preset = properties.preset.value;
|
||||||
|
let { backgroundImage, spineConfig, audioOptions } =
|
||||||
|
presetController.set(preset);
|
||||||
|
backgroundController.changeImage(backgroundImage);
|
||||||
|
spineController.changeConfig(spineConfig);
|
||||||
|
audioController.changeOptions(audioOptions);
|
||||||
|
}
|
||||||
|
if (properties.audio_file) {
|
||||||
|
const audio_file = properties.audio_file.value;
|
||||||
|
currentAudioSource = audio_file;
|
||||||
|
audioController.changeSource(audio_file);
|
||||||
|
}
|
||||||
|
if (properties.audio_volume) {
|
||||||
|
const audio_volume = properties.audio_volume.value;
|
||||||
|
currentAudioVolume = audio_volume;
|
||||||
|
audioController.changeVolume(audio_volume);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
window.wallpaperPropertyListener = {
|
||||||
|
applyGeneralProperties: function (properties) {
|
||||||
|
if (properties.fps) {
|
||||||
|
// wallpaperSettings.fps = properties.fps;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
applyUserProperties: function (properties) {
|
||||||
|
if (properties.preset) {
|
||||||
|
const preset = properties.preset.value;
|
||||||
|
let { backgroundImage, spineConfig, audioOptions } = presetController.set(
|
||||||
|
preset,
|
||||||
|
currentAudioSource,
|
||||||
|
currentAudioVolume
|
||||||
|
);
|
||||||
|
backgroundController.changeImage(backgroundImage);
|
||||||
|
spineController.changeConfig(spineConfig);
|
||||||
|
audioController.changeOptions(audioOptions);
|
||||||
|
}
|
||||||
|
if (properties.audio_file) {
|
||||||
|
const audio_file = properties.audio_file.value;
|
||||||
|
currentAudioSource = audio_file;
|
||||||
|
audioController.changeSource(audio_file);
|
||||||
|
}
|
||||||
|
if (properties.audio_volume) {
|
||||||
|
const audio_volume = properties.audio_volume.value;
|
||||||
|
currentAudioVolume = audio_volume;
|
||||||
|
audioController.changeVolume(audio_volume);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
export default class PresetController {
|
||||||
|
constructor(presetStore) {
|
||||||
|
this.presetStore = presetStore;
|
||||||
|
this.previousPreset = "";
|
||||||
|
this.currentPreset = "";
|
||||||
|
}
|
||||||
|
getName() {
|
||||||
|
return Object.keys(this.presetStore);
|
||||||
|
}
|
||||||
|
set(newPreset, currentAudioSource, currentAudioVolume) {
|
||||||
|
let newPresetData = JSON.parse(JSON.stringify(this.presetStore[newPreset]));
|
||||||
|
if (this.previousPreset) {
|
||||||
|
if (
|
||||||
|
currentAudioSource &&
|
||||||
|
this.presetStore[this.previousPreset].audioOptions.source !==
|
||||||
|
currentAudioSource
|
||||||
|
) {
|
||||||
|
newPresetData.audioOptions.source = currentAudioSource;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
currentAudioVolume ||
|
||||||
|
(currentAudioVolume === 0 &&
|
||||||
|
this.presetStore[this.previousPreset].audioOptions.volume !==
|
||||||
|
currentAudioVolume)
|
||||||
|
) {
|
||||||
|
newPresetData.audioOptions.volume = currentAudioVolume;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.currentPreset) {
|
||||||
|
this.previousPreset = this.currentPreset;
|
||||||
|
}
|
||||||
|
this.currentPreset = newPreset;
|
||||||
|
return newPresetData;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
const PresetStore = {
|
||||||
|
kv37: {
|
||||||
|
backgroundImage: "./assets/images/kv37_xilian.png",
|
||||||
|
spineConfig: {
|
||||||
|
jsonUrl: "./assets/effects/kv37.json",
|
||||||
|
atlasUrl: "./assets/images/kv37.atlas",
|
||||||
|
animation: "animation",
|
||||||
|
viewport: {
|
||||||
|
x: -1215,
|
||||||
|
y: -410,
|
||||||
|
width: 2048,
|
||||||
|
height: 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
audioOptions: {
|
||||||
|
source: "./assets/audios/pv37.mp3",
|
||||||
|
volume: 0.5,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
xilian: {
|
||||||
|
backgroundImage: "./assets/images/ava.jpg",
|
||||||
|
spineConfig: {
|
||||||
|
jsonUrl: "./assets/effects/xilian.json",
|
||||||
|
atlasUrl: "./assets/images/xilian.atlas",
|
||||||
|
animation: "idle",
|
||||||
|
viewport: {
|
||||||
|
padLeft: "-25%",
|
||||||
|
padRight: "-28%",
|
||||||
|
padTop: "-30%",
|
||||||
|
padBottom: "-23%",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
audioOptions: {
|
||||||
|
source: "./assets/audios/「再度和你」.flac",
|
||||||
|
volume: 0.5,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PresetStore;
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
export default class SpineController {
|
||||||
|
constructor(containerId, config = {}) {
|
||||||
|
this.containerId = containerId;
|
||||||
|
this.config = {
|
||||||
|
alpha: true,
|
||||||
|
premultipliedAlpha: false,
|
||||||
|
showControls: false,
|
||||||
|
showLoading: false,
|
||||||
|
...config,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.previousConfig = {};
|
||||||
|
|
||||||
|
this.container = document.getElementById(containerId);
|
||||||
|
this.player = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
create() {
|
||||||
|
if (!this.player) {
|
||||||
|
const containerId = this.containerId;
|
||||||
|
const config = this.config;
|
||||||
|
this.player = new spine.SpinePlayer(containerId, config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose() {
|
||||||
|
if (this.player) {
|
||||||
|
const container = this.container;
|
||||||
|
this.player.dispose();
|
||||||
|
container.innerHTML = "";
|
||||||
|
this.player = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
adjustCanvas() {
|
||||||
|
if (this.player) {
|
||||||
|
const container = this.container;
|
||||||
|
const canvas = container.querySelector("canvas");
|
||||||
|
if (canvas) {
|
||||||
|
const rect = container.getBoundingClientRect();
|
||||||
|
canvas.style.width = "100%";
|
||||||
|
canvas.style.height = "100%";
|
||||||
|
canvas.width = rect.width;
|
||||||
|
canvas.height = rect.height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
changeConfig(newConfig = {}) {
|
||||||
|
if (this.player) {
|
||||||
|
this.previousConfig = this.config;
|
||||||
|
this.config = {
|
||||||
|
...this.config,
|
||||||
|
...newConfig,
|
||||||
|
};
|
||||||
|
this.dispose();
|
||||||
|
this.create();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: white;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spine-container {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
@@ -0,0 +1,350 @@
|
|||||||
|
|
||||||
|
/** Player **/
|
||||||
|
.spine-player {
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
.spine-player * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: "PT Sans",Arial,"Helvetica Neue",Helvetica,Tahoma,sans-serif;
|
||||||
|
color: #dddddd;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spine-player-error {
|
||||||
|
font-size: 14px;
|
||||||
|
z-index: 10;
|
||||||
|
border-radius: 4px;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
-khtml-user-select: text;
|
||||||
|
-moz-user-select: text;
|
||||||
|
-ms-user-select: text;
|
||||||
|
user-select: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spine-player-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Canvas **/
|
||||||
|
.spine-player canvas {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Slider **/
|
||||||
|
.spine-player-slider {
|
||||||
|
width: 100%;
|
||||||
|
height: 16px;
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.spine-player-slider-value {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
height: 2px;
|
||||||
|
background: rgba(98, 176, 238, 0.6);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.spine-player-slider:hover .spine-player-slider-value {
|
||||||
|
height: 4px;
|
||||||
|
background: rgba(98, 176, 238, 1);
|
||||||
|
transition: height 0.2s;
|
||||||
|
}
|
||||||
|
.spine-player-slider-value.hovering {
|
||||||
|
height: 4px;
|
||||||
|
background: rgba(98, 176, 238, 1);
|
||||||
|
transition: height 0.2s;
|
||||||
|
}
|
||||||
|
.spine-player-slider.big {
|
||||||
|
height: 12px;
|
||||||
|
background: rgb(0, 0, 0);
|
||||||
|
}
|
||||||
|
.spine-player-slider.big .spine-player-slider-value {
|
||||||
|
height: 12px;
|
||||||
|
background: rgba(98, 176, 238, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Column and row layout elements **/
|
||||||
|
.spine-player-column {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.spine-player-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** List **/
|
||||||
|
.spine-player-list {
|
||||||
|
list-style: none !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
.spine-player-list li {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 8px 8px;
|
||||||
|
}
|
||||||
|
.spine-player-list .selectable {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 2px 20px 2px 0 !important;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable:first-child {
|
||||||
|
margin-top: 4px !important;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable:last-child {
|
||||||
|
margin-bottom: 4px !important;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable:hover {
|
||||||
|
background: #6e6e6e;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable .selectable-circle {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 6px;
|
||||||
|
min-width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #fff;
|
||||||
|
align-self: center;
|
||||||
|
opacity: 0;
|
||||||
|
margin: 5px 10px;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable.selected .selectable-circle {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable .selectable-text {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
.spine-player-list li.selectable.selected .selectable-text, .spine-player-list li.selectable:hover .selectable-text {
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Switch **/
|
||||||
|
.spine-player-switch {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
margin: 2px 10px;
|
||||||
|
}
|
||||||
|
.spine-player-switch-text {
|
||||||
|
flex: 1;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
.spine-player-switch-knob-area {
|
||||||
|
width: 30px; /* width of the switch */
|
||||||
|
height: 10px;
|
||||||
|
display: block;
|
||||||
|
border-radius: 5px; /* must be half of height */
|
||||||
|
background: #6e6e6e;
|
||||||
|
position: relative;
|
||||||
|
align-self: center;
|
||||||
|
justify-self: flex-end;
|
||||||
|
}
|
||||||
|
.spine-player-switch.active .spine-player-switch-knob-area {
|
||||||
|
background: #5EAFF1;
|
||||||
|
}
|
||||||
|
.spine-player-switch-knob {
|
||||||
|
display: block;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #9e9e9e;
|
||||||
|
position: absolute;
|
||||||
|
left: 0px;
|
||||||
|
top: -2px;
|
||||||
|
filter: drop-shadow(0 0 1px #333);
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
.spine-player-switch.active .spine-player-switch-knob {
|
||||||
|
background: #fff;
|
||||||
|
transform: translateX(18px);
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Popup **/
|
||||||
|
.spine-player-popup-parent {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.spine-player-popup {
|
||||||
|
user-select: none;
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(0, 0, 0, 0.75);
|
||||||
|
z-index: 1;
|
||||||
|
right: 2px;
|
||||||
|
bottom: 40px;
|
||||||
|
border-radius: 4px;
|
||||||
|
max-height: 400%;
|
||||||
|
overflow: auto;
|
||||||
|
font-size: 85%;
|
||||||
|
}
|
||||||
|
.spine-player-popup-title {
|
||||||
|
margin: 4px 15px 2px 15px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.spine-player-popup hr {
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid #cccccc70;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Player controls **/
|
||||||
|
.spine-player-controls {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity 0.4s;
|
||||||
|
}
|
||||||
|
.spine-player-controls-hidden {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Player buttons **/
|
||||||
|
.spine-player-buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 100%;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
padding: 2px 8px 3px;
|
||||||
|
}
|
||||||
|
.spine-player-button {
|
||||||
|
background: none;
|
||||||
|
outline: 0;
|
||||||
|
border: none;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
background-size: 20px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-right: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
filter: drop-shadow(0 0 1px #333);
|
||||||
|
}
|
||||||
|
.spine-player-button-spacer {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-play {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplay%3C%2Ftitle%3E%3Cg%20id%3D%22play%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2243%2023.3%204%2047%204%201%2043%2023.3%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-play:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplay%3C%2Ftitle%3E%3Cg%20id%3D%22play%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2243%2023.3%204%2047%204%201%2043%2023.3%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-play-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplay%3C%2Ftitle%3E%3Cg%20id%3D%22play%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2243%2023.3%204%2047%204%201%2043%2023.3%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-pause {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Epause%3C%2Ftitle%3E%3Cg%20id%3D%22pause%22%3E%3Crect%20class%3D%22cls-1%22%20x%3D%226%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3Crect%20class%3D%22cls-1%22%20x%3D%2228%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-pause:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Epause%3C%2Ftitle%3E%3Cg%20id%3D%22pause%22%3E%3Crect%20class%3D%22cls-1%22%20x%3D%226%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3Crect%20class%3D%22cls-1%22%20x%3D%2228%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-pause-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Epause%3C%2Ftitle%3E%3Cg%20id%3D%22pause%22%3E%3Crect%20class%3D%22cls-1%22%20x%3D%226%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3Crect%20class%3D%22cls-1%22%20x%3D%2228%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-speed {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22playback%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplayback%3C%2Ftitle%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M48%2C28V20l-4.7-1.18a20.16%2C20.16%2C0%2C0%2C0-2-4.81l2.49-4.15L38.14%2C4.2%2C34%2C6.69a20.16%2C20.16%2C0%2C0%2C0-4.81-2L28%2C0H20L18.82%2C4.7A20.16%2C20.16%2C0%2C0%2C0%2C14%2C6.7L9.86%2C4.2%2C4.2%2C9.86%2C6.69%2C14a20.16%2C20.16%2C0%2C0%2C0-2%2C4.81L0%2C20v8l4.7%2C1.18A20.16%2C20.16%2C0%2C0%2C0%2C6.7%2C34L4.2%2C38.14%2C9.86%2C43.8%2C14%2C41.31a20.16%2C20.16%2C0%2C0%2C0%2C4.81%2C2L20%2C48h8l1.18-4.7a20.16%2C20.16%2C0%2C0%2C0%2C4.81-2l4.15%2C2.49%2C5.66-5.66L41.31%2C34a20.16%2C20.16%2C0%2C0%2C0%2C2-4.81ZM24%2C38A14%2C14%2C0%2C1%2C1%2C38%2C24%2C14%2C14%2C0%2C0%2C1%2C24%2C38Z%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2234%2024%2018%2033%2018%2015%2034%2024%2034%2024%22%2F%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-speed:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22playback%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplayback%3C%2Ftitle%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M48%2C28V20l-4.7-1.18a20.16%2C20.16%2C0%2C0%2C0-2-4.81l2.49-4.15L38.14%2C4.2%2C34%2C6.69a20.16%2C20.16%2C0%2C0%2C0-4.81-2L28%2C0H20L18.82%2C4.7A20.16%2C20.16%2C0%2C0%2C0%2C14%2C6.7L9.86%2C4.2%2C4.2%2C9.86%2C6.69%2C14a20.16%2C20.16%2C0%2C0%2C0-2%2C4.81L0%2C20v8l4.7%2C1.18A20.16%2C20.16%2C0%2C0%2C0%2C6.7%2C34L4.2%2C38.14%2C9.86%2C43.8%2C14%2C41.31a20.16%2C20.16%2C0%2C0%2C0%2C4.81%2C2L20%2C48h8l1.18-4.7a20.16%2C20.16%2C0%2C0%2C0%2C4.81-2l4.15%2C2.49%2C5.66-5.66L41.31%2C34a20.16%2C20.16%2C0%2C0%2C0%2C2-4.81ZM24%2C38A14%2C14%2C0%2C1%2C1%2C38%2C24%2C14%2C14%2C0%2C0%2C1%2C24%2C38Z%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2234%2024%2018%2033%2018%2015%2034%2024%2034%2024%22%2F%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-speed-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22playback%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplayback%3C%2Ftitle%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M48%2C28V20l-4.7-1.18a20.16%2C20.16%2C0%2C0%2C0-2-4.81l2.49-4.15L38.14%2C4.2%2C34%2C6.69a20.16%2C20.16%2C0%2C0%2C0-4.81-2L28%2C0H20L18.82%2C4.7A20.16%2C20.16%2C0%2C0%2C0%2C14%2C6.7L9.86%2C4.2%2C4.2%2C9.86%2C6.69%2C14a20.16%2C20.16%2C0%2C0%2C0-2%2C4.81L0%2C20v8l4.7%2C1.18A20.16%2C20.16%2C0%2C0%2C0%2C6.7%2C34L4.2%2C38.14%2C9.86%2C43.8%2C14%2C41.31a20.16%2C20.16%2C0%2C0%2C0%2C4.81%2C2L20%2C48h8l1.18-4.7a20.16%2C20.16%2C0%2C0%2C0%2C4.81-2l4.15%2C2.49%2C5.66-5.66L41.31%2C34a20.16%2C20.16%2C0%2C0%2C0%2C2-4.81ZM24%2C38A14%2C14%2C0%2C1%2C1%2C38%2C24%2C14%2C14%2C0%2C0%2C1%2C24%2C38Z%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2234%2024%2018%2033%2018%2015%2034%2024%2034%2024%22%2F%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-animations {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eanimations%3C%2Ftitle%3E%3Cg%20id%3D%22animations%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M12%2C45V43.22a6.39%2C6.39%2C0%2C0%2C0%2C.63-.81%2C27.83%2C27.83%2C0%2C0%2C1%2C3.79-4.16c.93-.84%2C2.06-1.88%2C2.86-2.71a13.83%2C13.83%2C0%2C0%2C0%2C1.53-1.9l3.9-5.24c1-1.17.95-1.1%2C2.11%2C0l3%2C2.24a4%2C4%2C0%2C0%2C0-2.29%2C2.38c-1.37%2C3-2.39%2C4-2.68%2C4.22l-.23.18c-.54.39-1.81%2C1-1.7%2C1.54l.8%2C1.49a4.5%2C4.5%2C0%2C0%2C1%2C.39%2C1l.57%2C2.15a.69.69%2C0%2C0%2C0%2C.58.48c.47.08%2C1%2C.5%2C1.33.53%2C1.29.1%2C1.79%2C0%2C1.42-.54L26.7%2C42.72a.86.86%2C0%2C0%2C1-.2-.24%2C3.64%2C3.64%2C0%2C0%2C1-.42-2.2A5.39%2C5.39%2C0%2C0%2C1%2C26.61%2C39c1.84-2%2C6.74-6.36%2C6.74-6.36%2C1.71-1.81%2C1.4-2.52.81-3.84a27.38%2C27.38%2C0%2C0%2C0-2-3c-.41-.61-2.08-2.38-2.85-3.28-.43-.5.38-2.08.87-2.82.18-.12-.41.05%2C1.72.07a23.32%2C23.32%2C0%2C0%2C0%2C3.56-.19l1.63.61c.28%2C0%2C1.18-.09%2C1.31-.35l.12-.78c.18-.39.31-1.56-.05-1.75l-.6-.52a2.28%2C2.28%2C0%2C0%2C0-1.61.07l-.2.44c-.14.15-.52.37-.71.29l-2.24%2C0c-.5.12-1.18-.42-1.81-.73L32.05%2C15a8%2C8%2C0%2C0%2C0%2C.8-3.92%2C1.22%2C1.22%2C0%2C0%2C0-.28-.82%2C7.87%2C7.87%2C0%2C0%2C0-1.15-1.06l.11-.73c-.12-.49%2C1-.82%2C1.52-.82l.76-.33c.32%2C0%2C.68-.89.78-1.21L34.94%2C4a11.26%2C11.26%2C0%2C0%2C0%2C0-1.61C34.57.08%2C30.06-1.42%2C28.78%2C2c-.14.38-.62.77.34%2C3.21a1.55%2C1.55%2C0%2C0%2C1-.3%2C1.2L28.4%2C7a4%2C4%2C0%2C0%2C1-1.19.49c-.79%2C0-1.59-.75-4%2C.54C21%2C9.16%2C18.59%2C13%2C17.7%2C14.22a3.21%2C3.21%2C0%2C0%2C0-.61%2C1.58c-.05%2C1.16.7%2C3.74.87%2C5.75.13%2C1.53.21%2C2.52.72%2C3.06%2C1.07%2C1.14%2C2.1-.18%2C2.61-1a2.74%2C2.74%2C0%2C0%2C0-.14-1.86l-.74-.1c-.15-.15-.4-.42-.39-.64-.05-3.48-.22-3.14-.18-5.39%2C1.74-1.46%2C2.4-2.45%2C2.3-2-.2%2C1.15.28%2C2.83.09%2C4.35a6.46%2C6.46%2C0%2C0%2C1-.7%2C2.58s-2.11%2C4.22-2.14%2C4.27l-1.26%2C5.6-.7%2C1.44s-.71.54-1.59%2C1.21a9.67%2C9.67%2C0%2C0%2C0-2.27%2C3.18%2C20.16%2C20.16%2C0%2C0%2C1-1.42%2C2.83l-.87%2C1.31a1.72%2C1.72%2C0%2C0%2C1-.6.61l-1.83%2C1.1a1.39%2C1.39%2C0%2C0%2C0-.16.93l.68%2C1.71a4.07%2C4.07%2C0%2C0%2C1%2C.27%2C1.07l.17%2C1.56a.75.75%2C0%2C0%2C0%2C.71.59%2C18.13%2C18.13%2C0%2C0%2C0%2C3.26-.5c.27-.09-.29-.78-.53-1s-.45-.36-.45-.36A12.78%2C12.78%2C0%2C0%2C1%2C12%2C45Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-animations:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eanimations%3C%2Ftitle%3E%3Cg%20id%3D%22animations%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M12%2C45V43.22a6.39%2C6.39%2C0%2C0%2C0%2C.63-.81%2C27.83%2C27.83%2C0%2C0%2C1%2C3.79-4.16c.93-.84%2C2.06-1.88%2C2.86-2.71a13.83%2C13.83%2C0%2C0%2C0%2C1.53-1.9l3.9-5.24c1-1.17.95-1.1%2C2.11%2C0l3%2C2.24a4%2C4%2C0%2C0%2C0-2.29%2C2.38c-1.37%2C3-2.39%2C4-2.68%2C4.22l-.23.18c-.54.39-1.81%2C1-1.7%2C1.54l.8%2C1.49a4.5%2C4.5%2C0%2C0%2C1%2C.39%2C1l.57%2C2.15a.69.69%2C0%2C0%2C0%2C.58.48c.47.08%2C1%2C.5%2C1.33.53%2C1.29.1%2C1.79%2C0%2C1.42-.54L26.7%2C42.72a.86.86%2C0%2C0%2C1-.2-.24%2C3.64%2C3.64%2C0%2C0%2C1-.42-2.2A5.39%2C5.39%2C0%2C0%2C1%2C26.61%2C39c1.84-2%2C6.74-6.36%2C6.74-6.36%2C1.71-1.81%2C1.4-2.52.81-3.84a27.38%2C27.38%2C0%2C0%2C0-2-3c-.41-.61-2.08-2.38-2.85-3.28-.43-.5.38-2.08.87-2.82.18-.12-.41.05%2C1.72.07a23.32%2C23.32%2C0%2C0%2C0%2C3.56-.19l1.63.61c.28%2C0%2C1.18-.09%2C1.31-.35l.12-.78c.18-.39.31-1.56-.05-1.75l-.6-.52a2.28%2C2.28%2C0%2C0%2C0-1.61.07l-.2.44c-.14.15-.52.37-.71.29l-2.24%2C0c-.5.12-1.18-.42-1.81-.73L32.05%2C15a8%2C8%2C0%2C0%2C0%2C.8-3.92%2C1.22%2C1.22%2C0%2C0%2C0-.28-.82%2C7.87%2C7.87%2C0%2C0%2C0-1.15-1.06l.11-.73c-.12-.49%2C1-.82%2C1.52-.82l.76-.33c.32%2C0%2C.68-.89.78-1.21L34.94%2C4a11.26%2C11.26%2C0%2C0%2C0%2C0-1.61C34.57.08%2C30.06-1.42%2C28.78%2C2c-.14.38-.62.77.34%2C3.21a1.55%2C1.55%2C0%2C0%2C1-.3%2C1.2L28.4%2C7a4%2C4%2C0%2C0%2C1-1.19.49c-.79%2C0-1.59-.75-4%2C.54C21%2C9.16%2C18.59%2C13%2C17.7%2C14.22a3.21%2C3.21%2C0%2C0%2C0-.61%2C1.58c-.05%2C1.16.7%2C3.74.87%2C5.75.13%2C1.53.21%2C2.52.72%2C3.06%2C1.07%2C1.14%2C2.1-.18%2C2.61-1a2.74%2C2.74%2C0%2C0%2C0-.14-1.86l-.74-.1c-.15-.15-.4-.42-.39-.64-.05-3.48-.22-3.14-.18-5.39%2C1.74-1.46%2C2.4-2.45%2C2.3-2-.2%2C1.15.28%2C2.83.09%2C4.35a6.46%2C6.46%2C0%2C0%2C1-.7%2C2.58s-2.11%2C4.22-2.14%2C4.27l-1.26%2C5.6-.7%2C1.44s-.71.54-1.59%2C1.21a9.67%2C9.67%2C0%2C0%2C0-2.27%2C3.18%2C20.16%2C20.16%2C0%2C0%2C1-1.42%2C2.83l-.87%2C1.31a1.72%2C1.72%2C0%2C0%2C1-.6.61l-1.83%2C1.1a1.39%2C1.39%2C0%2C0%2C0-.16.93l.68%2C1.71a4.07%2C4.07%2C0%2C0%2C1%2C.27%2C1.07l.17%2C1.56a.75.75%2C0%2C0%2C0%2C.71.59%2C18.13%2C18.13%2C0%2C0%2C0%2C3.26-.5c.27-.09-.29-.78-.53-1s-.45-.36-.45-.36A12.78%2C12.78%2C0%2C0%2C1%2C12%2C45Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-animations-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eanimations%3C%2Ftitle%3E%3Cg%20id%3D%22animations%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M12%2C45V43.22a6.39%2C6.39%2C0%2C0%2C0%2C.63-.81%2C27.83%2C27.83%2C0%2C0%2C1%2C3.79-4.16c.93-.84%2C2.06-1.88%2C2.86-2.71a13.83%2C13.83%2C0%2C0%2C0%2C1.53-1.9l3.9-5.24c1-1.17.95-1.1%2C2.11%2C0l3%2C2.24a4%2C4%2C0%2C0%2C0-2.29%2C2.38c-1.37%2C3-2.39%2C4-2.68%2C4.22l-.23.18c-.54.39-1.81%2C1-1.7%2C1.54l.8%2C1.49a4.5%2C4.5%2C0%2C0%2C1%2C.39%2C1l.57%2C2.15a.69.69%2C0%2C0%2C0%2C.58.48c.47.08%2C1%2C.5%2C1.33.53%2C1.29.1%2C1.79%2C0%2C1.42-.54L26.7%2C42.72a.86.86%2C0%2C0%2C1-.2-.24%2C3.64%2C3.64%2C0%2C0%2C1-.42-2.2A5.39%2C5.39%2C0%2C0%2C1%2C26.61%2C39c1.84-2%2C6.74-6.36%2C6.74-6.36%2C1.71-1.81%2C1.4-2.52.81-3.84a27.38%2C27.38%2C0%2C0%2C0-2-3c-.41-.61-2.08-2.38-2.85-3.28-.43-.5.38-2.08.87-2.82.18-.12-.41.05%2C1.72.07a23.32%2C23.32%2C0%2C0%2C0%2C3.56-.19l1.63.61c.28%2C0%2C1.18-.09%2C1.31-.35l.12-.78c.18-.39.31-1.56-.05-1.75l-.6-.52a2.28%2C2.28%2C0%2C0%2C0-1.61.07l-.2.44c-.14.15-.52.37-.71.29l-2.24%2C0c-.5.12-1.18-.42-1.81-.73L32.05%2C15a8%2C8%2C0%2C0%2C0%2C.8-3.92%2C1.22%2C1.22%2C0%2C0%2C0-.28-.82%2C7.87%2C7.87%2C0%2C0%2C0-1.15-1.06l.11-.73c-.12-.49%2C1-.82%2C1.52-.82l.76-.33c.32%2C0%2C.68-.89.78-1.21L34.94%2C4a11.26%2C11.26%2C0%2C0%2C0%2C0-1.61C34.57.08%2C30.06-1.42%2C28.78%2C2c-.14.38-.62.77.34%2C3.21a1.55%2C1.55%2C0%2C0%2C1-.3%2C1.2L28.4%2C7a4%2C4%2C0%2C0%2C1-1.19.49c-.79%2C0-1.59-.75-4%2C.54C21%2C9.16%2C18.59%2C13%2C17.7%2C14.22a3.21%2C3.21%2C0%2C0%2C0-.61%2C1.58c-.05%2C1.16.7%2C3.74.87%2C5.75.13%2C1.53.21%2C2.52.72%2C3.06%2C1.07%2C1.14%2C2.1-.18%2C2.61-1a2.74%2C2.74%2C0%2C0%2C0-.14-1.86l-.74-.1c-.15-.15-.4-.42-.39-.64-.05-3.48-.22-3.14-.18-5.39%2C1.74-1.46%2C2.4-2.45%2C2.3-2-.2%2C1.15.28%2C2.83.09%2C4.35a6.46%2C6.46%2C0%2C0%2C1-.7%2C2.58s-2.11%2C4.22-2.14%2C4.27l-1.26%2C5.6-.7%2C1.44s-.71.54-1.59%2C1.21a9.67%2C9.67%2C0%2C0%2C0-2.27%2C3.18%2C20.16%2C20.16%2C0%2C0%2C1-1.42%2C2.83l-.87%2C1.31a1.72%2C1.72%2C0%2C0%2C1-.6.61l-1.83%2C1.1a1.39%2C1.39%2C0%2C0%2C0-.16.93l.68%2C1.71a4.07%2C4.07%2C0%2C0%2C1%2C.27%2C1.07l.17%2C1.56a.75.75%2C0%2C0%2C0%2C.71.59%2C18.13%2C18.13%2C0%2C0%2C0%2C3.26-.5c.27-.09-.29-.78-.53-1s-.45-.36-.45-.36A12.78%2C12.78%2C0%2C0%2C1%2C12%2C45Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-skins {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eskins%3C%2Ftitle%3E%3Cg%20id%3D%22skins%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M36%2C12.54l-6.92%2C1-.79%2C1.2c-1%2C.25-2-.62-3-.55V12.33a1.35%2C1.35%2C0%2C0%2C1%2C.55-1.07c3-2.24%2C3.28-3.75%2C3.28-5.34A5.06%2C5.06%2C0%2C0%2C0%2C24%2C.76c-2.54%2C0-4.38.71-5.49%2C2.13a5.74%2C5.74%2C0%2C0%2C0-.9%2C4.57l2.48-.61a3.17%2C3.17%2C0%2C0%2C1%2C.45-2.4c.6-.75%2C1.75-1.13%2C3.42-1.13%2C2.56%2C0%2C2.56%2C1.24%2C2.56%2C2.56%2C0%2C.92%2C0%2C1.65-2.26%2C3.34a3.92%2C3.92%2C0%2C0%2C0-1.58%2C3.12v1.86c-1-.07-2%2C.8-3%2C.55l-.79-1.2-6.92-1c-2.25%2C0-4.35%2C2.09-5.64%2C3.93L1%2C24c3.83%2C5.11%2C10.22%2C5.11%2C10.22%2C5.11V41.93c0%2C2.34%2C2.68%2C3.88%2C5.59%2C4.86a22.59%2C22.59%2C0%2C0%2C0%2C14.37%2C0c2.91-1%2C5.59-2.52%2C5.59-4.86V29.15S43.17%2C29.15%2C47%2C24l-5.33-7.57C40.38%2C14.63%2C38.27%2C12.54%2C36%2C12.54ZM23.32%2C20.09%2C21%2C17l1.8-.6a3.79%2C3.79%2C0%2C0%2C1%2C2.4%2C0L27%2C17l-2.32%2C3.09A.85.85%2C0%2C0%2C1%2C23.32%2C20.09Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
width: 31px;
|
||||||
|
height: 31px;
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-skins:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eskins%3C%2Ftitle%3E%3Cg%20id%3D%22skins%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M36%2C12.54l-6.92%2C1-.79%2C1.2c-1%2C.25-2-.62-3-.55V12.33a1.35%2C1.35%2C0%2C0%2C1%2C.55-1.07c3-2.24%2C3.28-3.75%2C3.28-5.34A5.06%2C5.06%2C0%2C0%2C0%2C24%2C.76c-2.54%2C0-4.38.71-5.49%2C2.13a5.74%2C5.74%2C0%2C0%2C0-.9%2C4.57l2.48-.61a3.17%2C3.17%2C0%2C0%2C1%2C.45-2.4c.6-.75%2C1.75-1.13%2C3.42-1.13%2C2.56%2C0%2C2.56%2C1.24%2C2.56%2C2.56%2C0%2C.92%2C0%2C1.65-2.26%2C3.34a3.92%2C3.92%2C0%2C0%2C0-1.58%2C3.12v1.86c-1-.07-2%2C.8-3%2C.55l-.79-1.2-6.92-1c-2.25%2C0-4.35%2C2.09-5.64%2C3.93L1%2C24c3.83%2C5.11%2C10.22%2C5.11%2C10.22%2C5.11V41.93c0%2C2.34%2C2.68%2C3.88%2C5.59%2C4.86a22.59%2C22.59%2C0%2C0%2C0%2C14.37%2C0c2.91-1%2C5.59-2.52%2C5.59-4.86V29.15S43.17%2C29.15%2C47%2C24l-5.33-7.57C40.38%2C14.63%2C38.27%2C12.54%2C36%2C12.54ZM23.32%2C20.09%2C21%2C17l1.8-.6a3.79%2C3.79%2C0%2C0%2C1%2C2.4%2C0L27%2C17l-2.32%2C3.09A.85.85%2C0%2C0%2C1%2C23.32%2C20.09Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-skins-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eskins%3C%2Ftitle%3E%3Cg%20id%3D%22skins%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M36%2C12.54l-6.92%2C1-.79%2C1.2c-1%2C.25-2-.62-3-.55V12.33a1.35%2C1.35%2C0%2C0%2C1%2C.55-1.07c3-2.24%2C3.28-3.75%2C3.28-5.34A5.06%2C5.06%2C0%2C0%2C0%2C24%2C.76c-2.54%2C0-4.38.71-5.49%2C2.13a5.74%2C5.74%2C0%2C0%2C0-.9%2C4.57l2.48-.61a3.17%2C3.17%2C0%2C0%2C1%2C.45-2.4c.6-.75%2C1.75-1.13%2C3.42-1.13%2C2.56%2C0%2C2.56%2C1.24%2C2.56%2C2.56%2C0%2C.92%2C0%2C1.65-2.26%2C3.34a3.92%2C3.92%2C0%2C0%2C0-1.58%2C3.12v1.86c-1-.07-2%2C.8-3%2C.55l-.79-1.2-6.92-1c-2.25%2C0-4.35%2C2.09-5.64%2C3.93L1%2C24c3.83%2C5.11%2C10.22%2C5.11%2C10.22%2C5.11V41.93c0%2C2.34%2C2.68%2C3.88%2C5.59%2C4.86a22.59%2C22.59%2C0%2C0%2C0%2C14.37%2C0c2.91-1%2C5.59-2.52%2C5.59-4.86V29.15S43.17%2C29.15%2C47%2C24l-5.33-7.57C40.38%2C14.63%2C38.27%2C12.54%2C36%2C12.54ZM23.32%2C20.09%2C21%2C17l1.8-.6a3.79%2C3.79%2C0%2C0%2C1%2C2.4%2C0L27%2C17l-2.32%2C3.09A.85.85%2C0%2C0%2C1%2C23.32%2C20.09Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-settings {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Esettings%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M40%2C3H8A5%2C5%2C0%2C0%2C0%2C3%2C8V40a5%2C5%2C0%2C0%2C0%2C5%2C5H40a5%2C5%2C0%2C0%2C0%2C5-5V8A5%2C5%2C0%2C0%2C0%2C40%2C3ZM16%2C40H9V33h7Zm0-12H9V21h7Zm0-12H9V9h7ZM39%2C38H20V35H39Zm0-12H20V23H39Zm0-12H20V11H39Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-settings:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Esettings%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M40%2C3H8A5%2C5%2C0%2C0%2C0%2C3%2C8V40a5%2C5%2C0%2C0%2C0%2C5%2C5H40a5%2C5%2C0%2C0%2C0%2C5-5V8A5%2C5%2C0%2C0%2C0%2C40%2C3ZM16%2C40H9V33h7Zm0-12H9V21h7Zm0-12H9V9h7ZM39%2C38H20V35H39Zm0-12H20V23H39Zm0-12H20V11H39Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-settings-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Esettings%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M40%2C3H8A5%2C5%2C0%2C0%2C0%2C3%2C8V40a5%2C5%2C0%2C0%2C0%2C5%2C5H40a5%2C5%2C0%2C0%2C0%2C5-5V8A5%2C5%2C0%2C0%2C0%2C40%2C3ZM16%2C40H9V33h7Zm0-12H9V21h7Zm0-12H9V9h7ZM39%2C38H20V35H39Zm0-12H20V23H39Zm0-12H20V11H39Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-fullscreen {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eexpand%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2230.14%208%2040%208%2040%2017.86%2044.5%2017.86%2044.5%203.5%2030.14%203.5%2030.14%208%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%228%2017.86%208%208%2017.86%208%2017.86%203.5%203.5%203.5%203.5%2017.86%208%2017.86%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2240%2030.14%2040%2040%2030.14%2040%2030.14%2044.5%2044.5%2044.5%2044.5%2030.14%2040%2030.14%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2217.86%2040%208%2040%208%2030.14%203.5%2030.14%203.5%2044.5%2017.86%2044.5%2017.86%2040%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-fullscreen:hover {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eexpand%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2230.14%208%2040%208%2040%2017.86%2044.5%2017.86%2044.5%203.5%2030.14%203.5%2030.14%208%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%228%2017.86%208%208%2017.86%208%2017.86%203.5%203.5%203.5%203.5%2017.86%208%2017.86%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2240%2030.14%2040%2040%2030.14%2040%2030.14%2044.5%2044.5%2044.5%2044.5%2030.14%2040%2030.14%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2217.86%2040%208%2040%208%2030.14%203.5%2030.14%203.5%2044.5%2017.86%2044.5%2017.86%2040%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-fullscreen-selected {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eexpand%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2230.14%208%2040%208%2040%2017.86%2044.5%2017.86%2044.5%203.5%2030.14%203.5%2030.14%208%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%228%2017.86%208%208%2017.86%208%2017.86%203.5%203.5%203.5%203.5%2017.86%208%2017.86%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2240%2030.14%2040%2040%2030.14%2040%2030.14%2044.5%2044.5%2044.5%2044.5%2030.14%2040%2030.14%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2217.86%2040%208%2040%208%2030.14%203.5%2030.14%203.5%2044.5%2017.86%2044.5%2017.86%2040%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-spine-logo {
|
||||||
|
height: 20px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
margin: 0 8px !important;
|
||||||
|
align-self: center;
|
||||||
|
border: none !important;
|
||||||
|
width: auto !important;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.2s;
|
||||||
|
box-shadow: none !important;
|
||||||
|
filter: drop-shadow(0 0 1px #333);
|
||||||
|
}
|
||||||
|
.spine-player-button-icon-spine-logo:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Speed slider **/
|
||||||
|
.spine-player-speed-slider {
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Player editor **/
|
||||||
|
.spine-player-editor-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.spine-player-editor-code {
|
||||||
|
flex: 1;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.spine-player-editor-player {
|
||||||
|
flex: 1;
|
||||||
|
border: none;
|
||||||
|
background: black;
|
||||||
|
}
|
||||||
|
.CodeMirror {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
# Domain Docs
|
||||||
|
|
||||||
|
How the engineering skills should consume this repo's domain documentation when exploring the codebase.
|
||||||
|
|
||||||
|
## Before exploring, read these
|
||||||
|
|
||||||
|
- **`CONTEXT.md`** at the repo root, or
|
||||||
|
- **`CONTEXT-MAP.md`** at the repo root if it exists: it points at one `CONTEXT.md` per context. Read each one relevant to the topic.
|
||||||
|
- **`docs/adr/`**: read ADRs that touch the area you're about to work in. In multi-context repos, also check `src/<context>/docs/adr/` for context-scoped decisions.
|
||||||
|
|
||||||
|
If any of these files don't exist, **proceed silently**. Don't flag their absence; don't suggest creating them upfront. The `/domain-modeling` skill (reached via `/grill-with-docs` and `/improve-codebase-architecture`) creates them lazily when terms or decisions actually get resolved.
|
||||||
|
|
||||||
|
## File structure
|
||||||
|
|
||||||
|
Single-context repo (most repos):
|
||||||
|
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── CONTEXT.md
|
||||||
|
├── docs/adr/
|
||||||
|
│ ├── 0001-event-sourced-orders.md
|
||||||
|
│ └── 0002-postgres-for-write-model.md
|
||||||
|
└── src/
|
||||||
|
```
|
||||||
|
|
||||||
|
Multi-context repo (presence of `CONTEXT-MAP.md` at the root):
|
||||||
|
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── CONTEXT-MAP.md
|
||||||
|
├── docs/adr/ ← system-wide decisions
|
||||||
|
└── src/
|
||||||
|
├── ordering/
|
||||||
|
│ ├── CONTEXT.md
|
||||||
|
│ └── docs/adr/ ← context-specific decisions
|
||||||
|
└── billing/
|
||||||
|
├── CONTEXT.md
|
||||||
|
└── docs/adr/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use the glossary's vocabulary
|
||||||
|
|
||||||
|
When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in `CONTEXT.md`. Don't drift to synonyms the glossary explicitly avoids.
|
||||||
|
|
||||||
|
If the concept you need isn't in the glossary yet, that's a signal: either you're inventing language the project doesn't use (reconsider) or there's a real gap (note it for `/domain-modeling`).
|
||||||
|
|
||||||
|
## Flag ADR conflicts
|
||||||
|
|
||||||
|
If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:
|
||||||
|
|
||||||
|
> _Contradicts ADR-0007 (event-sourced orders), but worth reopening because…_
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Issue tracker: Local Markdown
|
||||||
|
|
||||||
|
Issues and specs for this repo live as markdown files in `.scratch/`.
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
- One feature per directory: `.scratch/<feature-slug>/`
|
||||||
|
- The spec is `.scratch/<feature-slug>/spec.md`
|
||||||
|
- Implementation issues are one file per ticket at `.scratch/<feature-slug>/issues/<NN>-<slug>.md`, numbered from `01`, never a single combined tickets file
|
||||||
|
- Triage state is recorded as a `Status:` line near the top of each issue file (see `triage-labels.md` for the role strings)
|
||||||
|
- Comments and conversation history append to the bottom of the file under a `## Comments` heading
|
||||||
|
|
||||||
|
## When a skill says "publish to the issue tracker"
|
||||||
|
|
||||||
|
Create a new file under `.scratch/<feature-slug>/` (creating the directory if needed).
|
||||||
|
|
||||||
|
## When a skill says "fetch the relevant ticket"
|
||||||
|
|
||||||
|
Read the file at the referenced path. The user will normally pass the path or the issue number directly.
|
||||||
|
|
||||||
|
## Wayfinding operations
|
||||||
|
|
||||||
|
Used by `/wayfinder`. The **map** is a file with one **child** file per ticket.
|
||||||
|
|
||||||
|
- **Map**: `.scratch/<effort>/map.md` (the Notes / Decisions-so-far / Fog body).
|
||||||
|
- **Child ticket**: `.scratch/<effort>/issues/NN-<slug>.md`, numbered from `01`, with the question in the body. A `Type:` line records the ticket type (`research`/`prototype`/`grilling`/`task`); a `Status:` line records `claimed`/`resolved`.
|
||||||
|
- **Blocking**: a `Blocked by: NN, NN` line near the top. A ticket is unblocked when every file it lists is `resolved`.
|
||||||
|
- **Frontier**: scan `.scratch/<effort>/issues/` for files that are open, unblocked, and unclaimed; first by number wins.
|
||||||
|
- **Claim**: set `Status: claimed` and save before any work.
|
||||||
|
- **Resolve**: append the answer under an `## Answer` heading, set `Status: resolved`, then append a context pointer (gist + link) to the map's Decisions-so-far in `map.md`.
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Triage Labels
|
||||||
|
|
||||||
|
The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo's issue tracker.
|
||||||
|
|
||||||
|
| Label in mattpocock/skills | Label in our tracker | Meaning |
|
||||||
|
| -------------------------- | -------------------- | ---------------------------------------- |
|
||||||
|
| `needs-triage` | `needs-triage` | Maintainer needs to evaluate this issue |
|
||||||
|
| `needs-info` | `needs-info` | Waiting on reporter for more information |
|
||||||
|
| `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
|
||||||
|
| `ready-for-human` | `ready-for-human` | Requires human implementation |
|
||||||
|
| `wontfix` | `wontfix` | Will not be actioned |
|
||||||
|
|
||||||
|
When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from this table.
|
||||||
|
|
||||||
|
Edit the right-hand column to match whatever vocabulary you actually use.
|
||||||