From 390ef13d61a4b7b862769e3e017d1adda78eea9d Mon Sep 17 00:00:00 2001 From: vapormusic Date: Mon, 7 Mar 2022 21:32:49 +0700 Subject: [PATCH 01/25] lol --- package.json | 1 + src/main/plugins/raop.ts | 311 ++++++++++++++++++ .../views/components/animatedartwork-view.ejs | 5 +- 3 files changed, 315 insertions(+), 2 deletions(-) create mode 100644 src/main/plugins/raop.ts diff --git a/package.json b/package.json index 89aeaf73..a4c63bf8 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@sentry/electron": "^3.0.2", "@sentry/integrations": "^6.18.1", "adm-zip": "0.4.10", + "airtunes2": "git+https://github.com/vapormusic/node_airtunes2#airplay1", "castv2-client": "^1.2.0", "chokidar": "^3.5.3", "discord-rpc": "^4.0.1", diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts new file mode 100644 index 00000000..3ae2fafa --- /dev/null +++ b/src/main/plugins/raop.ts @@ -0,0 +1,311 @@ +import * as electron from 'electron'; +import * as os from 'os'; +import * as fs from 'fs'; +import { join } from 'path'; +import * as CiderReceiver from '../base/castreceiver'; +import fetch from 'electron-fetch'; + + +export default class RAOP { + + /** + * Private variables for interaction in plugins + */ + private _win: any; + private _app: any; + private _store: any; + private _cacheAttr: any; + + private ipairplay: any = ""; + private portairplay: any = ""; + private u = require('airtunes2'); + private airtunes: any; + private device: any; + private mdns = require('mdns-js'); + private ok: any = 1; + + + + /** + * Base Plugin Details (Eventually implemented into a GUI in settings) + */ + public name: string = 'RAOP'; + public description: string = 'RAOP Plugin'; + public version: string = '0.0.1'; + public author: string = 'vapormusic / Cider Collective'; + + /** + * Runs on plugin load (Currently run on application start) + */ + constructor(app: any, store: any) { + this._app = app; + this._store = store + + } + + /** + * Runs on app ready + */ + onReady(win: any): void { + this._win = win; + electron.ipcMain.on("getAirplayDevice", (event, data) => { + console.log("scan for airplay devices"); + const browser = this.mdns.createBrowser(this.mdns.tcp('raop')); + browser.on('ready', browser.discover); + + browser.on('update', (service: any) => { + if (service.fullname.includes('_raop._tcp')) { + this._win.webContents.executeJavaScript(`console.log( + "${service.name} ${service.host}:${service.port} ${service.addresses}" + )`);} + }); + }); + + + + electron.ipcMain.on("performAirplayPCM", (event, ipv4, ipport, sepassword, title, artist, album, artworkURL) => { + + if (ipv4 != this.ipairplay || ipport != this.portairplay) { + if (this.airtunes == null) { this.airtunes = new this.u(); } + this.ipairplay = ipv4; + this.portairplay = ipport; + this.device = this.airtunes.add(ipv4, { + port: ipport, + volume: 100, + password: sepassword, + }); + this.device.on('status', (status: any) => { + console.log('device status', status); + if (status == 'stopped') { + this.airtunes.stopAll(() => { + console.log('end'); + }); + this.airtunes = null; + this.device = null; + this.ipairplay = ''; + this.portairplay = ''; + this.ok = 1; + } else { + setTimeout(() => { + if (this.ok == 1) { + console.log(this.device.key, title, artist, album); + this.airtunes.setTrackInfo(this.device.key, title, artist, album); + this.uploadImageAirplay(artworkURL); + console.log('done'); + this.ok == 2 + } + }, 1000); + } + + + }); + + } + + + + + }); + + electron.ipcMain.on('writeWAV', (event, leftpcm, rightpcm, bufferlength) => { + function interleave16(leftChannel: any, rightChannel: any) { + var length = leftChannel.length + rightChannel.length; + var result = new Int16Array(length); + + var inputIndex = 0; + + for (var index = 0; index < length;) { + result[index++] = leftChannel[inputIndex]; + result[index++] = rightChannel[inputIndex]; + inputIndex++; + } + return result; + } + + //https://github.com/HSU-ANT/jsdafx + + function quantization(audiobufferleft: any, audiobufferright: any) { + + let h = Float32Array.from([1]); + let nsState = new Array(0); + let ditherstate = new Float32Array(0); + let qt = Math.pow(2, 1 - 16); + + //noise shifting order 3 + h = Float32Array.from([1.623, -0.982, 0.109]); + for (let i = 0; i < nsState.length; i++) { + nsState[i] = new Float32Array(h.length); + } + + + function setChannelCount(nc: any) { + if (ditherstate.length !== nc) { + ditherstate = new Float32Array(nc); + } + if (nsState.length !== nc) { + nsState = new Array(nc); + for (let i = 0; i < nsState.length; i++) { + nsState[i] = new Float32Array(h.length); + } + } + } + + function hpDither(channel: any) { + const rnd = Math.random() - 0.5; + const d = rnd - ditherstate[channel]; + ditherstate[channel] = rnd; + return d; + } + + + + + setChannelCount(2); + const inputs = [audiobufferleft, audiobufferright]; + const outputs = [audiobufferleft, audiobufferright]; + + for (let channel = 0; channel < inputs.length; channel++) { + const inputData = inputs[channel]; + const outputData = outputs[channel]; + for (let sample = 0; sample < bufferlength; sample++) { + let input = inputData[sample]; + // console.log('a2',inputData.length); + for (let i = 0; i < h.length; i++) { + input -= h[i] * nsState[channel][i]; + } + // console.log('a3',input); + let d_rand = 0.0; + // ditherstate = new Float32Array(h.length); + // d_rand = hpDither(channel); + const tmpOutput = qt * Math.round(input / qt + d_rand); + for (let i = h.length - 1; i >= 0; i--) { + nsState[channel][i] = nsState[channel][i - 1]; + } + nsState[channel][0] = tmpOutput - input; + outputData[sample] = tmpOutput; + } + } + return outputs; + } + + function bitratechange(e: any) { + var t = e.length; + let sampleRate = 48.0; + let outputSampleRate = 44.1; + var s = 0, + o = sampleRate / outputSampleRate, + u = Math.ceil(t * outputSampleRate / sampleRate), + a = new Int16Array(u); + for (let i = 0; i < u; i++) { + a[i] = e[Math.floor(s)]; + s += o; + } + + return a; + } + + + function convert(n: any) { + var v = n < 0 ? n * 32768 : n * 32767; // convert in range [-32768, 32767] + return Math.max(-32768, Math.min(32768, v)); // clamp + } + + if (this.airtunes != null) { + let newaudio = quantization(leftpcm, rightpcm); + //let newaudio = [leftpcm, rightpcm]; + //let newbuffer = Buffer.from(new Int8Array(interleave16(bitratechange(Int16Array.from(newaudio[0], x => x * 32767)),bitratechange(Int16Array.from(newaudio[1], x => x * 32767))).buffer)); + let pcmData = Buffer.from(new Int8Array(interleave16(bitratechange(Int16Array.from(newaudio[0], x => convert(x))), bitratechange(Int16Array.from(newaudio[1], x => convert(x)))).buffer)); + this.airtunes.circularBuffer.write(pcmData); + // fs.writeFile(join(this._app.getPath('userData'), 'buffer.raw'), pcmData,{flag: 'a+'}, function (err) { + // if (err) throw err; + // console.log('It\'s saved!'); + //}); + } else { + // console.log('airtunes not ready'); + } + }) + + electron.ipcMain.on('disconnectAirplay', (event) => { + this.airtunes.stopAll(function () { + console.log('end'); + }); + this.airtunes = null; + this.device = null; + this.ipairplay = ''; + this.portairplay = ''; + this.ok = 1; + }); + + electron.ipcMain.on('updateAirplayInfo', (event, title, artist, album, artworkURL) => { + if (this.airtunes && this.device) { + console.log(this.device.key, title, artist, album); + this.airtunes.setTrackInfo(this.device.key, title, artist, album); + this.uploadImageAirplay(artworkURL) + } + }); + + electron.ipcMain.on('updateRPCImage', (_event, imageurl) => { + this.uploadImageAirplay(imageurl) + }) + + + + } + + private uploadImageAirplay = (url: any) => { + try { + if (url != null && url != '') { + console.log(join(this._app.getPath('userData'), 'temp.png'), url); + fetch(url) + .then(res => res.buffer()) + .then((buffer) => { + this.airtunes.setArtwork(this.device.key, buffer, "image/png"); + }).catch(err => { + console.log(err) + }); + } + } catch (e) { console.log(e) } + } + + /** + * Runs on app stop + */ + onBeforeQuit(): void { + + } + + // /** + // * Runs on song change + // * @param attributes Music Attributes + // */ + // onNowPlayingItemDidChange(attributes: any): void { + // if (this.airtunes && this.device) { + // let title = attributes.name ? attributes.name : ''; + // let artist = attributes.artistName ? attributes.artistName : ''; + // let album = attributes.albumName ? attributes.albumName : ''; + // let artworkURL = attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024') ?? null; + // console.log(this.device.key, title, artist, album); + // this.airtunes.setTrackInfo(this.device.key, title, artist, album); + // if (artworkURL) + // this.uploadImageAirplay(artworkURL) + // } + // } + + /** + * Runs on playback State Change + * @param attributes Music Attributes (attributes.status = current state) + */ + onPlaybackStateDidChange(attributes: any): void { + if (this.airtunes && this.device) { + let title = attributes.name ? attributes.name : ''; + let artist = attributes.artistName ? attributes.artistName : ''; + let album = attributes.albumName ? attributes.albumName : ''; + let artworkURL = attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024') ?? null; + console.log(this.device.key, title, artist, album); + this.airtunes.setTrackInfo(this.device.key, title, artist, album); + if (artworkURL) + this.uploadImageAirplay(artworkURL) + } + } + +} \ No newline at end of file diff --git a/src/renderer/views/components/animatedartwork-view.ejs b/src/renderer/views/components/animatedartwork-view.ejs index cf135217..ef091ee3 100644 --- a/src/renderer/views/components/animatedartwork-view.ejs +++ b/src/renderer/views/components/animatedartwork-view.ejs @@ -57,6 +57,7 @@ platformInfo: {requiresCDMAttachOnStart: !0, maxSecurityLevel: d, keySystemConfig: h}, appData: {serviceName: "Apple Music"} } + this.hls.attachMedia(this.$refs.video); this.hls.loadSource(this.video); let u = this.hls; @@ -80,8 +81,8 @@ quality = qualities[qualities.length - 1].level } } - - this.hls.loadLevel = parseInt( quality || 1);},200) + try{ + this.hls.loadLevel = parseInt( quality || 1);} catch(e){}},200) } }) } From 25ac4bd78258b4d5f73a67e5a9e704e94d5e2747 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Tue, 8 Mar 2022 06:35:09 +0700 Subject: [PATCH 02/25] remove this --- package.json | 2 +- src/main/plugins/raop.ts | 311 --------------------------------------- 2 files changed, 1 insertion(+), 312 deletions(-) delete mode 100644 src/main/plugins/raop.ts diff --git a/package.json b/package.json index a4c63bf8..1ccf2cdb 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@sentry/electron": "^3.0.2", "@sentry/integrations": "^6.18.1", "adm-zip": "0.4.10", - "airtunes2": "git+https://github.com/vapormusic/node_airtunes2#airplay1", + "castv2-client": "^1.2.0", "chokidar": "^3.5.3", "discord-rpc": "^4.0.1", diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts deleted file mode 100644 index 3ae2fafa..00000000 --- a/src/main/plugins/raop.ts +++ /dev/null @@ -1,311 +0,0 @@ -import * as electron from 'electron'; -import * as os from 'os'; -import * as fs from 'fs'; -import { join } from 'path'; -import * as CiderReceiver from '../base/castreceiver'; -import fetch from 'electron-fetch'; - - -export default class RAOP { - - /** - * Private variables for interaction in plugins - */ - private _win: any; - private _app: any; - private _store: any; - private _cacheAttr: any; - - private ipairplay: any = ""; - private portairplay: any = ""; - private u = require('airtunes2'); - private airtunes: any; - private device: any; - private mdns = require('mdns-js'); - private ok: any = 1; - - - - /** - * Base Plugin Details (Eventually implemented into a GUI in settings) - */ - public name: string = 'RAOP'; - public description: string = 'RAOP Plugin'; - public version: string = '0.0.1'; - public author: string = 'vapormusic / Cider Collective'; - - /** - * Runs on plugin load (Currently run on application start) - */ - constructor(app: any, store: any) { - this._app = app; - this._store = store - - } - - /** - * Runs on app ready - */ - onReady(win: any): void { - this._win = win; - electron.ipcMain.on("getAirplayDevice", (event, data) => { - console.log("scan for airplay devices"); - const browser = this.mdns.createBrowser(this.mdns.tcp('raop')); - browser.on('ready', browser.discover); - - browser.on('update', (service: any) => { - if (service.fullname.includes('_raop._tcp')) { - this._win.webContents.executeJavaScript(`console.log( - "${service.name} ${service.host}:${service.port} ${service.addresses}" - )`);} - }); - }); - - - - electron.ipcMain.on("performAirplayPCM", (event, ipv4, ipport, sepassword, title, artist, album, artworkURL) => { - - if (ipv4 != this.ipairplay || ipport != this.portairplay) { - if (this.airtunes == null) { this.airtunes = new this.u(); } - this.ipairplay = ipv4; - this.portairplay = ipport; - this.device = this.airtunes.add(ipv4, { - port: ipport, - volume: 100, - password: sepassword, - }); - this.device.on('status', (status: any) => { - console.log('device status', status); - if (status == 'stopped') { - this.airtunes.stopAll(() => { - console.log('end'); - }); - this.airtunes = null; - this.device = null; - this.ipairplay = ''; - this.portairplay = ''; - this.ok = 1; - } else { - setTimeout(() => { - if (this.ok == 1) { - console.log(this.device.key, title, artist, album); - this.airtunes.setTrackInfo(this.device.key, title, artist, album); - this.uploadImageAirplay(artworkURL); - console.log('done'); - this.ok == 2 - } - }, 1000); - } - - - }); - - } - - - - - }); - - electron.ipcMain.on('writeWAV', (event, leftpcm, rightpcm, bufferlength) => { - function interleave16(leftChannel: any, rightChannel: any) { - var length = leftChannel.length + rightChannel.length; - var result = new Int16Array(length); - - var inputIndex = 0; - - for (var index = 0; index < length;) { - result[index++] = leftChannel[inputIndex]; - result[index++] = rightChannel[inputIndex]; - inputIndex++; - } - return result; - } - - //https://github.com/HSU-ANT/jsdafx - - function quantization(audiobufferleft: any, audiobufferright: any) { - - let h = Float32Array.from([1]); - let nsState = new Array(0); - let ditherstate = new Float32Array(0); - let qt = Math.pow(2, 1 - 16); - - //noise shifting order 3 - h = Float32Array.from([1.623, -0.982, 0.109]); - for (let i = 0; i < nsState.length; i++) { - nsState[i] = new Float32Array(h.length); - } - - - function setChannelCount(nc: any) { - if (ditherstate.length !== nc) { - ditherstate = new Float32Array(nc); - } - if (nsState.length !== nc) { - nsState = new Array(nc); - for (let i = 0; i < nsState.length; i++) { - nsState[i] = new Float32Array(h.length); - } - } - } - - function hpDither(channel: any) { - const rnd = Math.random() - 0.5; - const d = rnd - ditherstate[channel]; - ditherstate[channel] = rnd; - return d; - } - - - - - setChannelCount(2); - const inputs = [audiobufferleft, audiobufferright]; - const outputs = [audiobufferleft, audiobufferright]; - - for (let channel = 0; channel < inputs.length; channel++) { - const inputData = inputs[channel]; - const outputData = outputs[channel]; - for (let sample = 0; sample < bufferlength; sample++) { - let input = inputData[sample]; - // console.log('a2',inputData.length); - for (let i = 0; i < h.length; i++) { - input -= h[i] * nsState[channel][i]; - } - // console.log('a3',input); - let d_rand = 0.0; - // ditherstate = new Float32Array(h.length); - // d_rand = hpDither(channel); - const tmpOutput = qt * Math.round(input / qt + d_rand); - for (let i = h.length - 1; i >= 0; i--) { - nsState[channel][i] = nsState[channel][i - 1]; - } - nsState[channel][0] = tmpOutput - input; - outputData[sample] = tmpOutput; - } - } - return outputs; - } - - function bitratechange(e: any) { - var t = e.length; - let sampleRate = 48.0; - let outputSampleRate = 44.1; - var s = 0, - o = sampleRate / outputSampleRate, - u = Math.ceil(t * outputSampleRate / sampleRate), - a = new Int16Array(u); - for (let i = 0; i < u; i++) { - a[i] = e[Math.floor(s)]; - s += o; - } - - return a; - } - - - function convert(n: any) { - var v = n < 0 ? n * 32768 : n * 32767; // convert in range [-32768, 32767] - return Math.max(-32768, Math.min(32768, v)); // clamp - } - - if (this.airtunes != null) { - let newaudio = quantization(leftpcm, rightpcm); - //let newaudio = [leftpcm, rightpcm]; - //let newbuffer = Buffer.from(new Int8Array(interleave16(bitratechange(Int16Array.from(newaudio[0], x => x * 32767)),bitratechange(Int16Array.from(newaudio[1], x => x * 32767))).buffer)); - let pcmData = Buffer.from(new Int8Array(interleave16(bitratechange(Int16Array.from(newaudio[0], x => convert(x))), bitratechange(Int16Array.from(newaudio[1], x => convert(x)))).buffer)); - this.airtunes.circularBuffer.write(pcmData); - // fs.writeFile(join(this._app.getPath('userData'), 'buffer.raw'), pcmData,{flag: 'a+'}, function (err) { - // if (err) throw err; - // console.log('It\'s saved!'); - //}); - } else { - // console.log('airtunes not ready'); - } - }) - - electron.ipcMain.on('disconnectAirplay', (event) => { - this.airtunes.stopAll(function () { - console.log('end'); - }); - this.airtunes = null; - this.device = null; - this.ipairplay = ''; - this.portairplay = ''; - this.ok = 1; - }); - - electron.ipcMain.on('updateAirplayInfo', (event, title, artist, album, artworkURL) => { - if (this.airtunes && this.device) { - console.log(this.device.key, title, artist, album); - this.airtunes.setTrackInfo(this.device.key, title, artist, album); - this.uploadImageAirplay(artworkURL) - } - }); - - electron.ipcMain.on('updateRPCImage', (_event, imageurl) => { - this.uploadImageAirplay(imageurl) - }) - - - - } - - private uploadImageAirplay = (url: any) => { - try { - if (url != null && url != '') { - console.log(join(this._app.getPath('userData'), 'temp.png'), url); - fetch(url) - .then(res => res.buffer()) - .then((buffer) => { - this.airtunes.setArtwork(this.device.key, buffer, "image/png"); - }).catch(err => { - console.log(err) - }); - } - } catch (e) { console.log(e) } - } - - /** - * Runs on app stop - */ - onBeforeQuit(): void { - - } - - // /** - // * Runs on song change - // * @param attributes Music Attributes - // */ - // onNowPlayingItemDidChange(attributes: any): void { - // if (this.airtunes && this.device) { - // let title = attributes.name ? attributes.name : ''; - // let artist = attributes.artistName ? attributes.artistName : ''; - // let album = attributes.albumName ? attributes.albumName : ''; - // let artworkURL = attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024') ?? null; - // console.log(this.device.key, title, artist, album); - // this.airtunes.setTrackInfo(this.device.key, title, artist, album); - // if (artworkURL) - // this.uploadImageAirplay(artworkURL) - // } - // } - - /** - * Runs on playback State Change - * @param attributes Music Attributes (attributes.status = current state) - */ - onPlaybackStateDidChange(attributes: any): void { - if (this.airtunes && this.device) { - let title = attributes.name ? attributes.name : ''; - let artist = attributes.artistName ? attributes.artistName : ''; - let album = attributes.albumName ? attributes.albumName : ''; - let artworkURL = attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024') ?? null; - console.log(this.device.key, title, artist, album); - this.airtunes.setTrackInfo(this.device.key, title, artist, album); - if (artworkURL) - this.uploadImageAirplay(artworkURL) - } - } - -} \ No newline at end of file From 3c3b60cee9d2a9add01be831ddbab58593de5c69 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 7 Mar 2022 19:44:14 -0800 Subject: [PATCH 03/25] macOS icon update --- resources/icons/icon.icns | Bin 35533 -> 63905 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/icons/icon.icns b/resources/icons/icon.icns index 2325c3330974c1190c6b599e0651a9c3d7c4f543..4276a463a505cc12b3805ab8e9af373bd04867ee 100644 GIT binary patch literal 63905 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ðkwteJjP$ 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 literal 35533 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 From 47768596d9ca6cff168987251dc5d719873b6995 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 7 Mar 2022 20:12:45 -0800 Subject: [PATCH 04/25] moved win.show() --- src/main/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/index.ts b/src/main/index.ts index 2d49cc66..fa96ddca 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -51,11 +51,11 @@ app.on('ready', () => { }) console.log('[Cider][Widevine] Status:', components.status()); + win.show(); win.on("ready-to-show", () => { Cider.bwCreated(); CiderPlug.callPlugins('onReady', win); - win.show(); }); }); From 4f22d0277e913d1b81bcc1a863fba284050dc1f7 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 7 Mar 2022 20:15:14 -0800 Subject: [PATCH 05/25] removed translate3d property on sweetener artwork --- src/renderer/themes/sweetener.css | 40 ++++++++++++++++++++++++++++++ src/renderer/themes/sweetener.less | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/renderer/themes/sweetener.css diff --git a/src/renderer/themes/sweetener.css b/src/renderer/themes/sweetener.css new file mode 100644 index 00000000..51e9f4e3 --- /dev/null +++ b/src/renderer/themes/sweetener.css @@ -0,0 +1,40 @@ +.menu-panel .menu-panel-body { + background-color: rgba(30, 30, 30, 0.45); + backdrop-filter: blur(32px) saturate(180%); + animation: menuIn 0.1s var(--appleEase); +} +@keyframes menuIn { + 0% { + opacity: 0; + transform: translateY(-10px) translate3d(0, 0, 0); + background: #1e1e1e; + } + 100% { + opacity: 1; + transform: translateY(0); + background: rgba(30, 30, 30, 0.45); + } +} +.cd-mediaitem-square:not(.mediaitem-card) { + transition: transform 0.2s var(--appleEase); + transition-delay: 0.1s; + padding: 12px; + height: 250px; +} +.cd-mediaitem-square:not(.mediaitem-card) .artwork-container, +.cd-mediaitem-square:not(.mediaitem-card) .info-rect { + transition: transform 0.22s var(--appleEase); + transition-delay: 0.05s; +} +.cd-mediaitem-square:not(.mediaitem-card):hover .artwork-container { + transform: scale(1.1); + transition: transform 0.1s var(--appleEase); + transition-delay: 0s; + transform-origin: center; +} +.cd-mediaitem-square:not(.mediaitem-card):hover .info-rect { + z-index: 1; + transition: transform 0.1s var(--appleEase); + transition-delay: 0s; + transform: translateY(8px) translate3d(0, 0, 0); +} diff --git a/src/renderer/themes/sweetener.less b/src/renderer/themes/sweetener.less index f497420b..681f41d3 100644 --- a/src/renderer/themes/sweetener.less +++ b/src/renderer/themes/sweetener.less @@ -47,7 +47,7 @@ &:hover { .artwork-container { - transform : scale(1.1) translate3d(0,0,0); + transform : scale(1.1); transition : transform .1s var(--appleEase); transition-delay: 0s; transform-origin: center; From f6bce2019d6c15e6b376b0f8257316c0e6018c8f Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 7 Mar 2022 20:19:26 -0800 Subject: [PATCH 06/25] increased artwork size for twopanel setting --- src/renderer/main/vueapp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index f4ca97b2..453438dd 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -3379,7 +3379,7 @@ const app = new Vue({ if (app.getThemeDirective("lcdArtworkSize") != "") { artworkSize = app.getThemeDirective("lcdArtworkSize") } else if (this.cfg.visual.directives.windowLayout == "twopanel") { - artworkSize = 70 + artworkSize = 80 } this.currentArtUrl = ''; this.currentArtUrlRaw = ''; From 082137ed9d98b8f137f7905f5ceceaee41aa0f17 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 7 Mar 2022 22:15:04 -0800 Subject: [PATCH 07/25] change to library-songs retrieval method --- src/renderer/main/musickittools.js | 23 +- src/renderer/main/vueapp.js | 270 +- src/renderer/style.css | 13152 +++++++++++++++++++++++++++ src/renderer/style.less | 4 +- 4 files changed, 13283 insertions(+), 166 deletions(-) create mode 100644 src/renderer/style.css diff --git a/src/renderer/main/musickittools.js b/src/renderer/main/musickittools.js index 7e368fa5..8967f4a9 100644 --- a/src/renderer/main/musickittools.js +++ b/src/renderer/main/musickittools.js @@ -1,17 +1,32 @@ const MusicKitTools = { - async v3Continuous (href, options = {}, reqOptions = {}) { + async v3Continuous ({ + href, + options = {}, + reqOptions = {}, + onProgress = () => {}, + onError = () => {}, + onSuccess = () => {} + } = {}) { let returnData = [] async function sendReq(href, options) { - const response = await app.mk.api.v3.music(href, options) + const response = await app.mk.api.v3.music(href, options).catch(error => onError) returnData = returnData.concat(response.data.data) if(response.data.next) { - await sendReq(response.data.next, options) + onProgress({ + response: response, + total: returnData.length + }) + try { + await sendReq(response.data.next, options) + }catch(e){ + await sendReq(response.data.next, options) + } } } await sendReq(href, options) - + onSuccess(returnData) return returnData }, getHeader() { diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 453438dd..b90183b4 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -1,4 +1,4 @@ -import {store} from './vuex-store.js'; +import { store } from './vuex-store.js'; Vue.use(VueHorizontal); Vue.use(VueObserveVisibility); @@ -542,13 +542,13 @@ const app = new Vue({ this.modals.addToPlaylist = false await app.mk.api.v3.music( `/v1/me/library/playlists/${playlist_id}/tracks`, {}, { - fetchOptions: { - method: "POST", - body: JSON.stringify({ - data: pl_items - }) - } + fetchOptions: { + method: "POST", + body: JSON.stringify({ + data: pl_items + }) } + } ).then(() => { if (this.page == 'playlist_' + this.showingPlaylist.id) { this.getPlaylistFromID(this.showingPlaylist.id, true) @@ -560,7 +560,7 @@ const app = new Vue({ if (this.cfg.visual.theme != "default.less" && this.cfg.visual.theme != "") { this.setTheme(this.cfg.visual.theme) } - + this.setLz(this.cfg.general.language) this.setLzManual() clearTimeout(this.hangtimer) @@ -1017,7 +1017,7 @@ const app = new Vue({ console.log("playlist has no cache") } - if(cachedTrackMapping) { + if (cachedTrackMapping) { console.log("using cached track mapping") this.playlists.trackMapping = cachedTrackMapping } @@ -1033,7 +1033,7 @@ const app = new Vue({ const playlistData = await app.mk.api.v3.music(`/v1/me/library/playlist-folders/${parent}/children/`) await asyncForEach(playlistData.data.data, async (playlist) => { playlist.parent = parent - if( + if ( playlist.type != "library-playlist-folders" && typeof playlist.attributes.playParams["versionHash"] != "undefined" ) { @@ -1103,12 +1103,12 @@ const app = new Vue({ this.newPlaylist() } }, - { - name: app.getLz('term.createNewPlaylistFolder'), - action: () => { - this.newPlaylistFolder() - } + { + name: app.getLz('term.createNewPlaylistFolder'), + action: () => { + this.newPlaylistFolder() } + } ] } this.showMenuPanel(menu, event) @@ -1117,13 +1117,13 @@ const app = new Vue({ let self = this this.mk.api.v3.music( `/v1/me/library/playlist-folders/${id}`, {}, { - fetchOptions: { - method: "PATCH", - body: JSON.stringify({ - attributes: { name: name } - }) - } + fetchOptions: { + method: "PATCH", + body: JSON.stringify({ + attributes: { name: name } + }) } + } ).then(res => { self.refreshPlaylists() }) @@ -1132,13 +1132,13 @@ const app = new Vue({ let self = this this.mk.api.v3.music( `/v1/me/library/playlists/${id}`, {}, { - fetchOptions: { - method: "PATCH", - body: JSON.stringify({ - attributes: { name: name } - }) - } + fetchOptions: { + method: "PATCH", + body: JSON.stringify({ + attributes: { name: name } + }) } + } ).then(res => { self.refreshPlaylists() }) @@ -1401,7 +1401,7 @@ const app = new Vue({ */ convertTime(time = 0, format = 'short') { - if(isNaN(time)) { + if (isNaN(time)) { time = 0 } if (typeof time !== "number") { @@ -1516,10 +1516,10 @@ const app = new Vue({ document.querySelector("#app-content").scrollTop = 0 } else if (kind == "editorial-elements") { console.log(item) - if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0){ + if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0) { this.routeView(item.relationships.contents.data[0]) - } else if (item.attributes?.link?.url != null){ - window.open(item.attributes.link.url) + } else if (item.attributes?.link?.url != null) { + window.open(item.attributes.link.url) } } else if (kind.toString().includes("artist")) { @@ -2048,7 +2048,7 @@ const app = new Vue({ } let librarySongs = await CiderCache.getCache(cacheId) if (librarySongs) { - this.library.songs.listing = librarySongs + this.library.songs.listing.data = librarySongs this.searchLibrarySongs() } if (this.songstest) { @@ -2058,8 +2058,9 @@ const app = new Vue({ this.library.backgroundNotification.show = true this.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') - function downloadChunk() { - const params = { + library = await MusicKitTools.v3Continuous({ + href: `/v1/me/library/songs/`, + options: { "include[library-songs]": "catalog,artists,albums", "fields[artists]": "name,url,id", "fields[albums]": "name,url,id", @@ -2067,80 +2068,28 @@ const app = new Vue({ "fields[catalog]": "artistUrl,albumUrl", "fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", limit: 100, - l: self.mklang - } - const safeparams = { - "platform": "web", - "limit": 80 - } - self.library.songs.downloadState = 1 - if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/songs/`, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/songs/`, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.songs.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.songs.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - console.log("Download next", downloaded.next) - } - } - } + l: app.mklang, + }, + onProgress: (data) => { + console.log(`${data.total}/${data.response.data.meta.total}`) + self.library.backgroundNotification.show = true + self.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') + self.library.backgroundNotification.total = data.response.data.meta.total + self.library.backgroundNotification.progress = data.total + }, + onSuccess: () => { - function processChunk(response) { - downloaded = response - library = library.concat(downloaded.data) - self.library.backgroundNotification.show = true - self.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') - self.library.backgroundNotification.total = downloaded.meta.total - self.library.backgroundNotification.progress = library.length + } + }) - if (downloaded.meta.total == 0) { - self.library.songs.downloadState = 3 - return - } - if (typeof downloaded.next == "undefined") { - console.log("downloaded.next is undefined") - self.library.songs.listing = library - self.library.songs.downloadState = 2 - self.library.backgroundNotification.show = false - self.searchLibrarySongs() - CiderCache.putCache(cacheId, library) - } - if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { - console.log(`downloading next chunk - ${library.length} songs so far`) - downloadChunk() - } else { - self.library.songs.listing = library - self.library.songs.downloadState = 2 - self.library.backgroundNotification.show = false - self.searchLibrarySongs() - CiderCache.putCache(cacheId, library) - // console.log(library) - } - } + self.library.songs.listing = library + self.library.songs.downloadState = 2 + self.library.backgroundNotification.show = false + self.searchLibrarySongs() + CiderCache.putCache(cacheId, library) + console.log("Done!") - downloadChunk() + return }, // copy the getLibrarySongsFull function except change Songs to Albums async getLibraryAlbumsFull(force = false, index) { @@ -2239,7 +2188,7 @@ const app = new Vue({ } if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { console.log(`downloading next chunk - ${library.length - } albums so far`) + } albums so far`) downloadChunk() } else { self.library.albums.listing = library @@ -2348,7 +2297,7 @@ const app = new Vue({ } if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { console.log(`downloading next chunk - ${library.length - } artists so far`) + } artists so far`) downloadChunk() } else { self.library.artists.listing = library @@ -2484,13 +2433,13 @@ const app = new Vue({ let self = this this.mk.api.v3.music( "/v1/me/library/playlist-folders/", {}, { - fetchOptions: { - method: "POST", - body: JSON.stringify({ - attributes: { name: name } - }) - } + fetchOptions: { + method: "POST", + body: JSON.stringify({ + attributes: { name: name } + }) } + } ).then((res) => { let playlist = (res.data.data[0]) self.playlists.listing.push({ @@ -3055,21 +3004,21 @@ const app = new Vue({ if (ids.length > 0) { if (app.mk.queue._itemIDs.length > 0) { app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }).then(function () { - ind += 1; - console.log(ind, Object.keys(itemsToPlay).length) - if (ind >= Object.keys(itemsToPlay).length) { - app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) - } + ind += 1; + console.log(ind, Object.keys(itemsToPlay).length) + if (ind >= Object.keys(itemsToPlay).length) { + app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) } + } ) } else { app.mk.setQueue({ [kind + "s"]: itemsToPlay[kind] }).then(function () { - ind += 1; - console.log(ind, Object.keys(itemsToPlay).length) - if (ind >= Object.keys(itemsToPlay).length) { - app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) - } + ind += 1; + console.log(ind, Object.keys(itemsToPlay).length) + if (ind >= Object.keys(itemsToPlay).length) { + app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) } + } ) } } @@ -3648,36 +3597,36 @@ const app = new Vue({ app.love(app.mk.nowPlayingItem) } }, - { - "icon": "./assets/feather/heart.svg", - "id": "unlove", - "active": true, - "name": app.getLz('action.unlove'), - "hidden": true, - "action": function () { - app.unlove(app.mk.nowPlayingItem) - } - }, - { - "icon": "./assets/feather/thumbs-down.svg", - "id": "dislike", - "name": app.getLz('action.dislike'), - "hidden": false, - "disabled": true, - "action": function () { - app.dislike(app.mk.nowPlayingItem) - } - }, - { - "icon": "./assets/feather/thumbs-down.svg", - "id": "undo_dislike", - "name": app.getLz('action.undoDislike'), - "active": true, - "hidden": true, - "action": function () { - app.unlove(app.mk.nowPlayingItem) - } - }, + { + "icon": "./assets/feather/heart.svg", + "id": "unlove", + "active": true, + "name": app.getLz('action.unlove'), + "hidden": true, + "action": function () { + app.unlove(app.mk.nowPlayingItem) + } + }, + { + "icon": "./assets/feather/thumbs-down.svg", + "id": "dislike", + "name": app.getLz('action.dislike'), + "hidden": false, + "disabled": true, + "action": function () { + app.dislike(app.mk.nowPlayingItem) + } + }, + { + "icon": "./assets/feather/thumbs-down.svg", + "id": "undo_dislike", + "name": app.getLz('action.undoDislike'), + "active": true, + "hidden": true, + "action": function () { + app.unlove(app.mk.nowPlayingItem) + } + }, ], items: [ { @@ -3868,14 +3817,15 @@ const app = new Vue({ } }, pinMiniPlayer(status = false) { - if (!status){ - if (!this.cfg.visual.miniplayer_top_toggle) { - ipcRenderer.send('windowontop', true) - this.cfg.visual.miniplayer_top_toggle = true; + if (!status) { + if (!this.cfg.visual.miniplayer_top_toggle) { + ipcRenderer.send('windowontop', true) + this.cfg.visual.miniplayer_top_toggle = true; + } else { + ipcRenderer.send('windowontop', false) + this.cfg.visual.miniplayer_top_toggle = false; + } } else { - ipcRenderer.send('windowontop', false) - this.cfg.visual.miniplayer_top_toggle = false; - }} else { ipcRenderer.send('windowontop', this.cfg.visual.miniplayer_top_toggle ?? false) } }, diff --git a/src/renderer/style.css b/src/renderer/style.css new file mode 100644 index 00000000..1ff1aa0c --- /dev/null +++ b/src/renderer/style.css @@ -0,0 +1,13152 @@ +@import url("assets/fonts/Inter/inter.css"); +@import url("less/bootstrap-vue.min.css"); +@import url("less/codicon.css"); +@font-face { + font-family: 'Noto Sans JP'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosansjp/v40/-F6ofjtqLzI2JPCgQBnw7HFQoggM.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans JP'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosansjp/v40/-F6pfjtqLzI2JPCgQBnw7HFQaioq1A.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans JP'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosansjp/v40/-F62fjtqLzI2JPCgQBnw7HFowA.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans JP'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosansjp/v40/-F6pfjtqLzI2JPCgQBnw7HFQMisq1A.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans JP'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosansjp/v40/-F6pfjtqLzI2JPCgQBnw7HFQei0q1A.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans JP'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosansjp/v40/-F6pfjtqLzI2JPCgQBnw7HFQQi8q1A.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans SC'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanssc/v24/k3kJo84MPvpLmixcA63oeALZTYKL.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans SC'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanssc/v24/k3kIo84MPvpLmixcA63oeALZhaCt9w.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans SC'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanssc/v24/k3kXo84MPvpLmixcA63oeALhLw.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans SC'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanssc/v24/k3kIo84MPvpLmixcA63oeALZ3aGt9w.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans SC'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanssc/v24/k3kIo84MPvpLmixcA63oeALZlaet9w.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans SC'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanssc/v24/k3kIo84MPvpLmixcA63oeALZraWt9w.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans HK'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanshk/v19/nKKO-GM_FYFRJvXzVXaAPe9ZUHp1.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans HK'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanshk/v19/nKKP-GM_FYFRJvXzVXaAPe9ZmFhTHA.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans HK'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanshk/v19/nKKQ-GM_FYFRJvXzVXaAPe9hMg.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans HK'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanshk/v19/nKKP-GM_FYFRJvXzVXaAPe9ZwFlTHA.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans HK'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanshk/v19/nKKP-GM_FYFRJvXzVXaAPe9ZiF9THA.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans HK'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanshk/v19/nKKP-GM_FYFRJvXzVXaAPe9ZsF1THA.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans TC'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanstc/v24/-nFlOG829Oofr2wohFbTp9i9WyEJ.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans TC'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanstc/v24/-nFkOG829Oofr2wohFbTp9i9kwMvDQ.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans TC'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanstc/v24/-nF7OG829Oofr2wohFbTp9iFOQ.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans TC'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanstc/v24/-nFkOG829Oofr2wohFbTp9i9ywIvDQ.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans TC'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanstc/v24/-nFkOG829Oofr2wohFbTp9i9gwQvDQ.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans TC'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanstc/v24/-nFkOG829Oofr2wohFbTp9i9uwYvDQ.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v25/Pby6FmXiEBPT4ITbgNA5CgmOsn7u.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v25/Pby7FmXiEBPT4ITbgNA5CgmOelzI7g.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v25/PbykFmXiEBPT4ITbgNA5Cgm20A.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v25/Pby7FmXiEBPT4ITbgNA5CgmOIl3I7g.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v25/Pby7FmXiEBPT4ITbgNA5CgmOalvI7g.otf) format('opentype'); +} +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v25/Pby7FmXiEBPT4ITbgNA5CgmOUlnI7g.otf) format('opentype'); +} +:root { + --appleEase: cubic-bezier(0.42, 0, 0.58, 1); + --appleTransition: 0.2s var(--appleEase); +} +/* Simple CSS framework for Apple Music Electron */ +.md-labeltext { + font-size: 14px; + text-transform: uppercase; + opacity: 0.75; + font-weight: 500; +} +.md-option-container { + /* border-radius: 10px; */ + overflow: hidden; +} +.md-option-line { + display: flex; + width: 100%; + padding: 14px; + background: var(--opaquePageBGColor); + font-size: 0.85em; +} +.md-option-segment.md-option-segment_auto { + width: auto; + white-space: nowrap; +} +.md-option-container .md-option-line:not(:last-child) { + border-bottom: 1px solid rgba(0, 0, 0, 0.15); +} +input[type="range"].md-slider { + -webkit-appearance: none; + height: 7px; + background: rgba(255, 255, 255, 0.6); + border-radius: 5px; + background-size: 70% 100%; + background-repeat: no-repeat; +} +input[type="range"].md-slider::-webkit-slider-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: #ffffff; + cursor: ew-resize; + box-shadow: 0 0 2px 0 #555; +} +input[type=range].md-slider::-webkit-slider-runnable-track { + -webkit-appearance: none; + box-shadow: none; + border: none; + background: transparent; +} +.md-option-header { + padding: 10px; + border-bottom: 1px solid rgba(200, 200, 200, 0.25); + font-weight: 500; + font-size: 0.9em; + background: rgba(255, 255, 255, 0.1); +} +.md-option-segment { + width: 100%; + display: flex; + justify-content: center; + flex-direction: column; +} +.md-h1 { + font-size: 3em; + text-align: center; +} +.md-header { + padding: 16px; +} +.md-header-title { + padding: 18px; + font-weight: 600; + font-size: 16px; + height: 55px; + background: var(--opaquePageBGColor); + border-bottom: 1px solid rgba(0, 0, 0, 0.15); +} +.md-footer { + padding: 16px; + text-align: center; +} +.md-transparent { + background: transparent; +} +.md-container { + display: flex; + flex-direction: column; + height: 100%; + position: absolute; + top: 0px; + left: 0px; + width: 100%; + padding: 32px; +} +.md-container_panel { + padding: 0px; +} +.md-body { + height: 100%; + padding: 16px; + font-size: 1.25em; +} +@media (prefers-color-scheme: light) { + .md-btn { + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 1px, rgba(0, 0, 0, 0.2) 0px 1px 1px; + border: 1px solid rgba(0, 0, 0, 0.15); + } + .md-close-btn { + background-color: #000; + } +} +/* Vue transitions */ +.fade_simple-enter-active, +.fade_simple-leave-active { + transition: all 0.5s; +} +.fade_simple-enter, +.fade_simple-leave-to { + opacity: 0; +} +.fade-enter-active, +.fade-leave-active { + transition: all 0.5s; +} +.fade-enter, +.fade-leave-to { + opacity: 0; + transform: scale(0.95); +} +/* CSS Grids */ +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + /*margin-top: calc(-1 * var(--bs-gutter-y));*/ + /*margin-right: calc(-0.5 * var(--bs-gutter-x));*/ + /*margin-left: calc(-0.5 * var(--bs-gutter-x));*/ +} +.row > * { + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} +.col { + flex: 1 0 0%; +} +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; +} +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; +} +.col-auto { + flex: 0 0 auto; + width: auto; +} +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} +.col-3 { + flex: 0 0 auto; + width: 25%; +} +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} +.col-6 { + flex: 0 0 auto; + width: 50%; +} +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} +.col-9 { + flex: 0 0 auto; + width: 75%; +} +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} +.col-12 { + flex: 0 0 auto; + width: 100%; +} +.offset-1 { + margin-left: 8.33333333%; +} +.offset-2 { + margin-left: 16.66666667%; +} +.offset-3 { + margin-left: 25%; +} +.offset-4 { + margin-left: 33.33333333%; +} +.offset-5 { + margin-left: 41.66666667%; +} +.offset-6 { + margin-left: 50%; +} +.offset-7 { + margin-left: 58.33333333%; +} +.offset-8 { + margin-left: 66.66666667%; +} +.offset-9 { + margin-left: 75%; +} +.offset-10 { + margin-left: 83.33333333%; +} +.offset-11 { + margin-left: 91.66666667%; +} +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} +.d-inline { + display: inline !important; +} +.d-inline-block { + display: inline-block !important; +} +.d-block { + display: block !important; +} +.d-grid { + display: grid !important; +} +.d-table { + display: table !important; +} +.d-table-row { + display: table-row !important; +} +.d-table-cell { + display: table-cell !important; +} +.d-flex { + display: flex !important; +} +.d-inline-flex { + display: inline-flex !important; +} +.d-none { + display: none !important; +} +.flex-fill { + flex: 1 1 auto !important; +} +.flex-row { + flex-direction: row !important; +} +.flex-column { + flex-direction: column !important; +} +.flex-row-reverse { + flex-direction: row-reverse !important; +} +.flex-column-reverse { + flex-direction: column-reverse !important; +} +.flex-grow-0 { + flex-grow: 0 !important; +} +.flex-grow-1 { + flex-grow: 1 !important; +} +.flex-shrink-0 { + flex-shrink: 0 !important; +} +.flex-shrink-1 { + flex-shrink: 1 !important; +} +.flex-wrap { + flex-wrap: wrap !important; +} +.flex-nowrap { + flex-wrap: nowrap !important; +} +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} +.justify-content-start { + justify-content: flex-start !important; +} +.justify-content-end { + justify-content: flex-end !important; +} +.justify-content-center { + justify-content: center !important; +} +.justify-content-between { + justify-content: space-between !important; +} +.justify-content-around { + justify-content: space-around !important; +} +.justify-content-evenly { + justify-content: space-evenly !important; +} +.align-items-start { + align-items: flex-start !important; +} +.align-items-end { + align-items: flex-end !important; +} +.align-items-center { + align-items: center !important; +} +.align-items-baseline { + align-items: baseline !important; +} +.align-items-stretch { + align-items: stretch !important; +} +.align-content-start { + align-content: flex-start !important; +} +.align-content-end { + align-content: flex-end !important; +} +.align-content-center { + align-content: center !important; +} +.align-content-between { + align-content: space-between !important; +} +.align-content-around { + align-content: space-around !important; +} +.align-content-stretch { + align-content: stretch !important; +} +.align-self-auto { + align-self: auto !important; +} +.align-self-start { + align-self: flex-start !important; +} +.align-self-end { + align-self: flex-end !important; +} +.align-self-center { + align-self: center !important; +} +.align-self-baseline { + align-self: baseline !important; +} +.align-self-stretch { + align-self: stretch !important; +} +.order-first { + order: -1 !important; +} +.order-0 { + order: 0 !important; +} +.order-1 { + order: 1 !important; +} +.order-2 { + order: 2 !important; +} +.order-3 { + order: 3 !important; +} +.order-4 { + order: 4 !important; +} +.order-5 { + order: 5 !important; +} +.order-last { + order: 6 !important; +} +.m-0 { + margin: 0 !important; +} +.m-1 { + margin: 0.25rem !important; +} +.m-2 { + margin: 0.5rem !important; +} +.m-3 { + margin: 1rem !important; +} +.m-4 { + margin: 1.5rem !important; +} +.m-5 { + margin: 3rem !important; +} +.m-auto { + margin: auto !important; +} +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} +.mt-0 { + margin-top: 0 !important; +} +.mt-1 { + margin-top: 0.25rem !important; +} +.mt-2 { + margin-top: 0.5rem !important; +} +.mt-3 { + margin-top: 1rem !important; +} +.mt-4 { + margin-top: 1.5rem !important; +} +.mt-5 { + margin-top: 3rem !important; +} +.mt-auto { + margin-top: auto !important; +} +.me-0 { + margin-right: 0 !important; +} +.me-1 { + margin-right: 0.25rem !important; +} +.me-2 { + margin-right: 0.5rem !important; +} +.me-3 { + margin-right: 1rem !important; +} +.me-4 { + margin-right: 1.5rem !important; +} +.me-5 { + margin-right: 3rem !important; +} +.me-auto { + margin-right: auto !important; +} +.mb-0 { + margin-bottom: 0 !important; +} +.mb-1 { + margin-bottom: 0.25rem !important; +} +.mb-2 { + margin-bottom: 0.5rem !important; +} +.mb-3 { + margin-bottom: 1rem !important; +} +.mb-4 { + margin-bottom: 1.5rem !important; +} +.mb-5 { + margin-bottom: 3rem !important; +} +.mb-auto { + margin-bottom: auto !important; +} +.ms-0 { + margin-left: 0 !important; +} +.ms-1 { + margin-left: 0.25rem !important; +} +.ms-2 { + margin-left: 0.5rem !important; +} +.ms-3 { + margin-left: 1rem !important; +} +.ms-4 { + margin-left: 1.5rem !important; +} +.ms-5 { + margin-left: 3rem !important; +} +.ms-auto { + margin-left: auto !important; +} +.p-0 { + padding: 0 !important; +} +.p-1 { + padding: 0.25rem !important; +} +.p-2 { + padding: 0.5rem !important; +} +.p-3 { + padding: 1rem !important; +} +.p-4 { + padding: 1.5rem !important; +} +.p-5 { + padding: 3rem !important; +} +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} +.pt-0 { + padding-top: 0 !important; +} +.pt-1 { + padding-top: 0.25rem !important; +} +.pt-2 { + padding-top: 0.5rem !important; +} +.pt-3 { + padding-top: 1rem !important; +} +.pt-4 { + padding-top: 1.5rem !important; +} +.pt-5 { + padding-top: 3rem !important; +} +.pe-0 { + padding-right: 0 !important; +} +.pe-1 { + padding-right: 0.25rem !important; +} +.pe-2 { + padding-right: 0.5rem !important; +} +.pe-3 { + padding-right: 1rem !important; +} +.pe-4 { + padding-right: 1.5rem !important; +} +.pe-5 { + padding-right: 3rem !important; +} +.pb-0 { + padding-bottom: 0 !important; +} +.pb-1 { + padding-bottom: 0.25rem !important; +} +.pb-2 { + padding-bottom: 0.5rem !important; +} +.pb-3 { + padding-bottom: 1rem !important; +} +.pb-4 { + padding-bottom: 1.5rem !important; +} +.pb-5 { + padding-bottom: 3rem !important; +} +.ps-0 { + padding-left: 0 !important; +} +.ps-1 { + padding-left: 0.25rem !important; +} +.ps-2 { + padding-left: 0.5rem !important; +} +.ps-3 { + padding-left: 1rem !important; +} +.ps-4 { + padding-left: 1.5rem !important; +} +.ps-5 { + padding-left: 3rem !important; +} +.dropup, +.dropend, +.dropdown, +.dropstart { + position: relative; +} +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} +.dropdown-menu { + position: absolute; + z-index: 1000; + display: none; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: 0.125rem; +} +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid rgba(0, 0, 0, 0.15); +} +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, +.dropdown-item:focus { + color: #1e2125; + background-color: #e9ecef; +} +.dropdown-item.active, +.dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #0d6efd; +} +.dropdown-item.disabled, +.dropdown-item:disabled { + color: #adb5bd; + pointer-events: none; + background-color: transparent; +} +.dropdown-menu.show { + display: block; +} +.dropdown-header { + display: block; + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} +.dropdown-item-text { + display: block; + padding: 0.25rem 1rem; + color: #212529; +} +.dropdown-menu-dark { + color: #dee2e6; + background-color: #343a40; + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-item:hover, +.dropdown-menu-dark .dropdown-item:focus { + color: #fff; + background-color: rgba(255, 255, 255, 0.15); +} +.dropdown-menu-dark .dropdown-item.active, +.dropdown-menu-dark .dropdown-item:active { + color: #fff; + background-color: #0d6efd; +} +.dropdown-menu-dark .dropdown-item.disabled, +.dropdown-menu-dark .dropdown-item:disabled { + color: #adb5bd; +} +.dropdown-menu-dark .dropdown-divider { + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item-text { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-header { + color: #adb5bd; +} +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: 0.25rem; +} +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > li::before { + content: counters(section, ".") ". "; + counter-increment: section; +} +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} +.list-group-item-action:hover, +.list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} +.list-group-item { + position: relative; + display: block; + padding: 0.5rem 1rem; + color: #212529; + text-decoration: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, +.list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} +.list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} +.list-group-item-primary.list-group-item-action:hover, +.list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} +.list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} +.list-group-item-secondary.list-group-item-action:hover, +.list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} +.list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} +.list-group-item-success.list-group-item-action:hover, +.list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} +.list-group-item-info { + color: #055160; + background-color: #cff4fc; +} +.list-group-item-info.list-group-item-action:hover, +.list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} +.list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} +.list-group-item-warning.list-group-item-action:hover, +.list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} +.list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} +.list-group-item-danger.list-group-item-action:hover, +.list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} +.list-group-item-light { + color: #636464; + background-color: #fefefe; +} +.list-group-item-light.list-group-item-action:hover, +.list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} +.list-group-item-dark { + color: var(--textColor); + background-color: #333; +} +.list-group-item-dark.list-group-item-action:hover, +.list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} +.toast { + width: 350px; + max-width: 100%; + font-size: 0.875rem; + pointer-events: auto; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} +.toast-container { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: 0.75rem; +} +.toast-header { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.toast-header .btn-close { + margin-right: -0.375rem; + margin-left: 0.75rem; +} +.toast-body { + padding: 0.75rem; + word-wrap: break-word; +} +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #333; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} +.card-body { + flex: 1 1 auto; + padding: 1rem 1rem; +} +.card-title { + margin-bottom: 0.5rem; +} +.card-subtitle { + margin-top: -0.25rem; + margin-bottom: 0; +} +.card-text:last-child { + margin-bottom: 0; +} +.card-link + .card-link { + margin-left: 1rem; +} +.card-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} +.card-footer { + padding: 0.5rem 1rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} +.card-header-tabs { + margin-right: -0.5rem; + margin-bottom: -0.5rem; + margin-left: -0.5rem; + border-bottom: 0; +} +.card-header-pills { + margin-right: -0.5rem; + margin-left: -0.5rem; +} +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1rem; + border-radius: calc(0.25rem - 1px); +} +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} +.card-img, +.card-img-top { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.card-img, +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.card-group > .card { + margin-bottom: 0.75rem; +} +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1055; + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; + user-select: none; +} +.modal .close { + width: 50px; + height: 42px; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; +} +.modal .close:hover { + background-color: #c42b1c; +} +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; + color: var(--textColor); +} +.modal.fade .modal-dialog { + transition: transform 0.1s var(--appleEase), opacity 0.1s var(--appleEase); + transform: scale(0.9); + opacity: 0; +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; + opacity: 1; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} +.modal-dialog-scrollable { + height: calc(100% - 1rem); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: var(--modalBackground); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; + box-shadow: var(--ciderShadow-Generic); + overflow: hidden; +} +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100vw; + height: 100vh; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: 0.5; +} +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.modal-header .btn-close { + padding: 0.5rem 0.5rem; + margin: -0.5rem -0.5rem -0.5rem auto; +} +.modal-title { + line-height: 1.5; + margin: 0; +} +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 3rem 1rem 1rem 1rem; + font-size: 0.9em; +} +.modal-footer { + display: flex; + flex-wrap: wrap; + flex-shrink: 0; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} +.modal-footer > * { + margin: 0.25rem; +} +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-sm { + max-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} +.modal-fullscreen .modal-footer { + border-radius: 0; +} +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } +} +.btn { + display: inline-block; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + border-radius: 0.25rem; + font-family: inherit; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: #212529; +} +.btn-check:focus + .btn, +.btn:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.btn:disabled, +.btn.disabled, +fieldset:disabled .btn { + pointer-events: none; + opacity: 0.65; +} +.btn-primary { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-primary:hover { + color: #fff; + background-color: #0b5ed7; + border-color: #0a58ca; +} +.btn-check:focus + .btn-primary, +.btn-primary:focus { + color: #fff; + background-color: #0b5ed7; + border-color: #0a58ca; + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); +} +.btn-check:checked + .btn-primary, +.btn-check:active + .btn-primary, +.btn-primary:active, +.btn-primary.active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0a58ca; + border-color: #0a53be; +} +.btn-check:checked + .btn-primary:focus, +.btn-check:active + .btn-primary:focus, +.btn-primary:active:focus, +.btn-primary.active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); +} +.btn-primary:disabled, +.btn-primary.disabled { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-secondary:hover { + color: #fff; + background-color: #5c636a; + border-color: #565e64; +} +.btn-check:focus + .btn-secondary, +.btn-secondary:focus { + color: #fff; + background-color: #5c636a; + border-color: #565e64; + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +} +.btn-check:checked + .btn-secondary, +.btn-check:active + .btn-secondary, +.btn-secondary:active, +.btn-secondary.active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #565e64; + border-color: #51585e; +} +.btn-check:checked + .btn-secondary:focus, +.btn-check:active + .btn-secondary:focus, +.btn-secondary:active:focus, +.btn-secondary.active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +} +.btn-secondary:disabled, +.btn-secondary.disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-success { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-success:hover { + color: #fff; + background-color: #157347; + border-color: #146c43; +} +.btn-check:focus + .btn-success, +.btn-success:focus { + color: #fff; + background-color: #157347; + border-color: #146c43; + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); +} +.btn-check:checked + .btn-success, +.btn-check:active + .btn-success, +.btn-success:active, +.btn-success.active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #146c43; + border-color: #13653f; +} +.btn-check:checked + .btn-success:focus, +.btn-check:active + .btn-success:focus, +.btn-success:active:focus, +.btn-success.active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); +} +.btn-success:disabled, +.btn-success.disabled { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-info { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-info:hover { + color: #000; + background-color: #31d2f2; + border-color: #25cff2; +} +.btn-check:focus + .btn-info, +.btn-info:focus { + color: #000; + background-color: #31d2f2; + border-color: #25cff2; + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); +} +.btn-check:checked + .btn-info, +.btn-check:active + .btn-info, +.btn-info:active, +.btn-info.active, +.show > .btn-info.dropdown-toggle { + color: #000; + background-color: #3dd5f3; + border-color: #25cff2; +} +.btn-check:checked + .btn-info:focus, +.btn-check:active + .btn-info:focus, +.btn-info:active:focus, +.btn-info.active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); +} +.btn-info:disabled, +.btn-info.disabled { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-warning { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-warning:hover { + color: #000; + background-color: #ffca2c; + border-color: #ffc720; +} +.btn-check:focus + .btn-warning, +.btn-warning:focus { + color: #000; + background-color: #ffca2c; + border-color: #ffc720; + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); +} +.btn-check:checked + .btn-warning, +.btn-check:active + .btn-warning, +.btn-warning:active, +.btn-warning.active, +.show > .btn-warning.dropdown-toggle { + color: #000; + background-color: #ffcd39; + border-color: #ffc720; +} +.btn-check:checked + .btn-warning:focus, +.btn-check:active + .btn-warning:focus, +.btn-warning:active:focus, +.btn-warning.active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); +} +.btn-warning:disabled, +.btn-warning.disabled { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-danger:hover { + color: #fff; + background-color: #bb2d3b; + border-color: #b02a37; +} +.btn-check:focus + .btn-danger, +.btn-danger:focus { + color: #fff; + background-color: #bb2d3b; + border-color: #b02a37; + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); +} +.btn-check:checked + .btn-danger, +.btn-check:active + .btn-danger, +.btn-danger:active, +.btn-danger.active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #b02a37; + border-color: #a52834; +} +.btn-check:checked + .btn-danger:focus, +.btn-check:active + .btn-danger:focus, +.btn-danger:active:focus, +.btn-danger.active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); +} +.btn-danger:disabled, +.btn-danger.disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-light { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-light:hover { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; +} +.btn-check:focus + .btn-light, +.btn-light:focus { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); +} +.btn-check:checked + .btn-light, +.btn-check:active + .btn-light, +.btn-light:active, +.btn-light.active, +.show > .btn-light.dropdown-toggle { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; +} +.btn-check:checked + .btn-light:focus, +.btn-check:active + .btn-light:focus, +.btn-light:active:focus, +.btn-light.active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); +} +.btn-light:disabled, +.btn-light.disabled { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-dark { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-dark:hover { + color: #fff; + background-color: #1c1f23; + border-color: #1a1e21; +} +.btn-check:focus + .btn-dark, +.btn-dark:focus { + color: #fff; + background-color: #1c1f23; + border-color: #1a1e21; + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); +} +.btn-check:checked + .btn-dark, +.btn-check:active + .btn-dark, +.btn-dark:active, +.btn-dark.active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1a1e21; + border-color: #191c1f; +} +.btn-check:checked + .btn-dark:focus, +.btn-check:active + .btn-dark:focus, +.btn-dark:active:focus, +.btn-dark.active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); +} +.btn-dark:disabled, +.btn-dark.disabled { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-outline-primary { + color: #0d6efd; + border-color: #0d6efd; +} +.btn-outline-primary:hover { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-check:focus + .btn-outline-primary, +.btn-outline-primary:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); +} +.btn-check:checked + .btn-outline-primary, +.btn-check:active + .btn-outline-primary, +.btn-outline-primary:active, +.btn-outline-primary.active, +.btn-outline-primary.dropdown-toggle.show { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-check:checked + .btn-outline-primary:focus, +.btn-check:active + .btn-outline-primary:focus, +.btn-outline-primary:active:focus, +.btn-outline-primary.active:focus, +.btn-outline-primary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); +} +.btn-outline-primary:disabled, +.btn-outline-primary.disabled { + color: #0d6efd; + background-color: transparent; +} +.btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; +} +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-check:focus + .btn-outline-secondary, +.btn-outline-secondary:focus { + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); +} +.btn-check:checked + .btn-outline-secondary, +.btn-check:active + .btn-outline-secondary, +.btn-outline-secondary:active, +.btn-outline-secondary.active, +.btn-outline-secondary.dropdown-toggle.show { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-check:checked + .btn-outline-secondary:focus, +.btn-check:active + .btn-outline-secondary:focus, +.btn-outline-secondary:active:focus, +.btn-outline-secondary.active:focus, +.btn-outline-secondary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); +} +.btn-outline-secondary:disabled, +.btn-outline-secondary.disabled { + color: #6c757d; + background-color: transparent; +} +.btn-outline-success { + color: #198754; + border-color: #198754; +} +.btn-outline-success:hover { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-check:focus + .btn-outline-success, +.btn-outline-success:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); +} +.btn-check:checked + .btn-outline-success, +.btn-check:active + .btn-outline-success, +.btn-outline-success:active, +.btn-outline-success.active, +.btn-outline-success.dropdown-toggle.show { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-check:checked + .btn-outline-success:focus, +.btn-check:active + .btn-outline-success:focus, +.btn-outline-success:active:focus, +.btn-outline-success.active:focus, +.btn-outline-success.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); +} +.btn-outline-success:disabled, +.btn-outline-success.disabled { + color: #198754; + background-color: transparent; +} +.btn-outline-info { + color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-outline-info:hover { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-check:focus + .btn-outline-info, +.btn-outline-info:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); +} +.btn-check:checked + .btn-outline-info, +.btn-check:active + .btn-outline-info, +.btn-outline-info:active, +.btn-outline-info.active, +.btn-outline-info.dropdown-toggle.show { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-check:checked + .btn-outline-info:focus, +.btn-check:active + .btn-outline-info:focus, +.btn-outline-info:active:focus, +.btn-outline-info.active:focus, +.btn-outline-info.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); +} +.btn-outline-info:disabled, +.btn-outline-info.disabled { + color: #0dcaf0; + background-color: transparent; +} +.btn-outline-warning { + color: #ffc107; + border-color: #ffc107; +} +.btn-outline-warning:hover { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-check:focus + .btn-outline-warning, +.btn-outline-warning:focus { + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); +} +.btn-check:checked + .btn-outline-warning, +.btn-check:active + .btn-outline-warning, +.btn-outline-warning:active, +.btn-outline-warning.active, +.btn-outline-warning.dropdown-toggle.show { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-check:checked + .btn-outline-warning:focus, +.btn-check:active + .btn-outline-warning:focus, +.btn-outline-warning:active:focus, +.btn-outline-warning.active:focus, +.btn-outline-warning.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); +} +.btn-outline-warning:disabled, +.btn-outline-warning.disabled { + color: #ffc107; + background-color: transparent; +} +.btn-outline-danger { + color: #dc3545; + border-color: #dc3545; +} +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-check:focus + .btn-outline-danger, +.btn-outline-danger:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); +} +.btn-check:checked + .btn-outline-danger, +.btn-check:active + .btn-outline-danger, +.btn-outline-danger:active, +.btn-outline-danger.active, +.btn-outline-danger.dropdown-toggle.show { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-check:checked + .btn-outline-danger:focus, +.btn-check:active + .btn-outline-danger:focus, +.btn-outline-danger:active:focus, +.btn-outline-danger.active:focus, +.btn-outline-danger.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); +} +.btn-outline-danger:disabled, +.btn-outline-danger.disabled { + color: #dc3545; + background-color: transparent; +} +.btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-outline-light:hover { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-check:focus + .btn-outline-light, +.btn-outline-light:focus { + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); +} +.btn-check:checked + .btn-outline-light, +.btn-check:active + .btn-outline-light, +.btn-outline-light:active, +.btn-outline-light.active, +.btn-outline-light.dropdown-toggle.show { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-check:checked + .btn-outline-light:focus, +.btn-check:active + .btn-outline-light:focus, +.btn-outline-light:active:focus, +.btn-outline-light.active:focus, +.btn-outline-light.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); +} +.btn-outline-light:disabled, +.btn-outline-light.disabled { + color: #f8f9fa; + background-color: transparent; +} +.btn-outline-dark { + color: #212529; + border-color: #212529; +} +.btn-outline-dark:hover { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-check:focus + .btn-outline-dark, +.btn-outline-dark:focus { + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); +} +.btn-check:checked + .btn-outline-dark, +.btn-check:active + .btn-outline-dark, +.btn-outline-dark:active, +.btn-outline-dark.active, +.btn-outline-dark.dropdown-toggle.show { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-check:checked + .btn-outline-dark:focus, +.btn-check:active + .btn-outline-dark:focus, +.btn-outline-dark:active:focus, +.btn-outline-dark.active:focus, +.btn-outline-dark.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); +} +.btn-outline-dark:disabled, +.btn-outline-dark.disabled { + color: #212529; + background-color: transparent; +} +.btn-link { + font-weight: 400; + color: #0d6efd; + text-decoration: underline; +} +.btn-link:hover { + color: #0a58ca; +} +.btn-link:disabled, +.btn-link.disabled { + color: #6c757d; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.form-control { + width: 100%; +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} +.btn-sm + .dropdown-toggle-split, +.btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} +.btn-lg + .dropdown-toggle-split, +.btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.table { + --bs-table-bg: transparent; + --bs-table-accent-bg: transparent; + --bs-table-striped-color: #212529; + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: #212529; + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: #212529; + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: #212529; + vertical-align: top; + border-color: #dee2e6; +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} +.table > :not(:first-child) { + border-top: 2px solid currentColor; +} +.caption-top { + caption-side: top; +} +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} +.table-bordered > :not(caption) > * { + border-width: 1px 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.table-borderless > :not(:first-child) { + border-top-width: 0; +} +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} +.table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} +.table-primary { + --bs-table-bg: #cfe2ff; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: #000; + border-color: #bacbe6; +} +.table-secondary { + --bs-table-bg: #e2e3e5; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: #000; + border-color: #cbccce; +} +.table-success { + --bs-table-bg: #d1e7dd; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: #000; + border-color: #bcd0c7; +} +.table-info { + --bs-table-bg: #cff4fc; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: #000; + border-color: #badce3; +} +.table-warning { + --bs-table-bg: #fff3cd; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: #000; + border-color: #e6dbb9; +} +.table-danger { + --bs-table-bg: #f8d7da; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfc2c4; +} +.table-light { + --bs-table-bg: #f8f9fa; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfe0e1; +} +.table-dark { + --bs-table-bg: #212529; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #373b3e; +} +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} +.nav-tabs .nav-link { + margin-bottom: -1px; + background: none; + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.nav-tabs .nav-link:hover, +.nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; + isolation: isolate; +} +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: 0.25rem; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #0d6efd; +} +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +/*! + * Bootstrap Grid v5.1.1 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: inherit; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: inherit; + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} +@media (min-width: 576px) { + .container-sm, + .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, + .container-sm, + .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, + .container-xl, + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 1320px; + } +} +.col { + flex: 1 0 0%; +} +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; +} +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; +} +.col-auto { + flex: 0 0 auto; + width: auto; +} +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} +.col-3 { + flex: 0 0 auto; + width: 25%; +} +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} +.col-6 { + flex: 0 0 auto; + width: 50%; +} +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} +.col-9 { + flex: 0 0 auto; + width: 75%; +} +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} +.col-12 { + flex: 0 0 auto; + width: 100%; +} +.offset-1 { + margin-left: 8.33333333%; +} +.offset-2 { + margin-left: 16.66666667%; +} +.offset-3 { + margin-left: 25%; +} +.offset-4 { + margin-left: 33.33333333%; +} +.offset-5 { + margin-left: 41.66666667%; +} +.offset-6 { + margin-left: 50%; +} +.offset-7 { + margin-left: 58.33333333%; +} +.offset-8 { + margin-left: 66.66666667%; +} +.offset-9 { + margin-left: 75%; +} +.offset-10 { + margin-left: 83.33333333%; +} +.offset-11 { + margin-left: 91.66666667%; +} +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333333%; + } + .offset-sm-2 { + margin-left: 16.66666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333333%; + } + .offset-sm-5 { + margin-left: 41.66666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333333%; + } + .offset-sm-8 { + margin-left: 66.66666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333333%; + } + .offset-sm-11 { + margin-left: 91.66666667%; + } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333333%; + } + .offset-md-2 { + margin-left: 16.66666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333333%; + } + .offset-md-5 { + margin-left: 41.66666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333333%; + } + .offset-md-8 { + margin-left: 66.66666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333333%; + } + .offset-md-11 { + margin-left: 91.66666667%; + } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333333%; + } + .offset-lg-2 { + margin-left: 16.66666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333333%; + } + .offset-lg-5 { + margin-left: 41.66666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333333%; + } + .offset-lg-8 { + margin-left: 66.66666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333333%; + } + .offset-lg-11 { + margin-left: 91.66666667%; + } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333333%; + } + .offset-xl-2 { + margin-left: 16.66666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333333%; + } + .offset-xl-5 { + margin-left: 41.66666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333333%; + } + .offset-xl-8 { + margin-left: 66.66666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333333%; + } + .offset-xl-11 { + margin-left: 91.66666667%; + } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.33333333%; + } + .offset-xxl-2 { + margin-left: 16.66666667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.33333333%; + } + .offset-xxl-5 { + margin-left: 41.66666667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.33333333%; + } + .offset-xxl-8 { + margin-left: 66.66666667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.33333333%; + } + .offset-xxl-11 { + margin-left: 91.66666667%; + } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.d-inline { + display: inline !important; +} +.d-inline-block { + display: inline-block !important; +} +.d-block { + display: block !important; +} +.d-grid { + display: grid !important; +} +.d-table { + display: table !important; +} +.d-table-row { + display: table-row !important; +} +.d-table-cell { + display: table-cell !important; +} +.d-flex { + display: flex !important; +} +.d-inline-flex { + display: inline-flex !important; +} +.d-none { + display: none !important; +} +.flex-fill { + flex: 1 1 auto !important; +} +.flex-row { + flex-direction: row !important; +} +.flex-column { + flex-direction: column !important; +} +.flex-row-reverse { + flex-direction: row-reverse !important; +} +.flex-column-reverse { + flex-direction: column-reverse !important; +} +.flex-grow-0 { + flex-grow: 0 !important; +} +.flex-grow-1 { + flex-grow: 1 !important; +} +.flex-shrink-0 { + flex-shrink: 0 !important; +} +.flex-shrink-1 { + flex-shrink: 1 !important; +} +.flex-wrap { + flex-wrap: wrap !important; +} +.flex-nowrap { + flex-wrap: nowrap !important; +} +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} +.justify-content-start { + justify-content: flex-start !important; +} +.justify-content-end { + justify-content: flex-end !important; +} +.justify-content-center { + justify-content: center !important; +} +.justify-content-between { + justify-content: space-between !important; +} +.justify-content-around { + justify-content: space-around !important; +} +.justify-content-evenly { + justify-content: space-evenly !important; +} +.align-items-start { + align-items: flex-start !important; +} +.align-items-end { + align-items: flex-end !important; +} +.align-items-center { + align-items: center !important; +} +.align-items-baseline { + align-items: baseline !important; +} +.align-items-stretch { + align-items: stretch !important; +} +.align-content-start { + align-content: flex-start !important; +} +.align-content-end { + align-content: flex-end !important; +} +.align-content-center { + align-content: center !important; +} +.align-content-between { + align-content: space-between !important; +} +.align-content-around { + align-content: space-around !important; +} +.align-content-stretch { + align-content: stretch !important; +} +.align-self-auto { + align-self: auto !important; +} +.align-self-start { + align-self: flex-start !important; +} +.align-self-end { + align-self: flex-end !important; +} +.align-self-center { + align-self: center !important; +} +.align-self-baseline { + align-self: baseline !important; +} +.align-self-stretch { + align-self: stretch !important; +} +.order-first { + order: -1 !important; +} +.order-0 { + order: 0 !important; +} +.order-1 { + order: 1 !important; +} +.order-2 { + order: 2 !important; +} +.order-3 { + order: 3 !important; +} +.order-4 { + order: 4 !important; +} +.order-5 { + order: 5 !important; +} +.order-last { + order: 6 !important; +} +.m-0 { + margin: 0 !important; +} +.m-1 { + margin: 0.25rem !important; +} +.m-2 { + margin: 0.5rem !important; +} +.m-3 { + margin: 1rem !important; +} +.m-4 { + margin: 1.5rem !important; +} +.m-5 { + margin: 3rem !important; +} +.m-auto { + margin: auto !important; +} +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} +.mt-0 { + margin-top: 0 !important; +} +.mt-1 { + margin-top: 0.25rem !important; +} +.mt-2 { + margin-top: 0.5rem !important; +} +.mt-3 { + margin-top: 1rem !important; +} +.mt-4 { + margin-top: 1.5rem !important; +} +.mt-5 { + margin-top: 3rem !important; +} +.mt-auto { + margin-top: auto !important; +} +.me-0 { + margin-right: 0 !important; +} +.me-1 { + margin-right: 0.25rem !important; +} +.me-2 { + margin-right: 0.5rem !important; +} +.me-3 { + margin-right: 1rem !important; +} +.me-4 { + margin-right: 1.5rem !important; +} +.me-5 { + margin-right: 3rem !important; +} +.me-auto { + margin-right: auto !important; +} +.mb-0 { + margin-bottom: 0 !important; +} +.mb-1 { + margin-bottom: 0.25rem !important; +} +.mb-2 { + margin-bottom: 0.5rem !important; +} +.mb-3 { + margin-bottom: 1rem !important; +} +.mb-4 { + margin-bottom: 1.5rem !important; +} +.mb-5 { + margin-bottom: 3rem !important; +} +.mb-auto { + margin-bottom: auto !important; +} +.ms-0 { + margin-left: 0 !important; +} +.ms-1 { + margin-left: 0.25rem !important; +} +.ms-2 { + margin-left: 0.5rem !important; +} +.ms-3 { + margin-left: 1rem !important; +} +.ms-4 { + margin-left: 1.5rem !important; +} +.ms-5 { + margin-left: 3rem !important; +} +.ms-auto { + margin-left: auto !important; +} +.p-0 { + padding: 0 !important; +} +.p-1 { + padding: 0.25rem !important; +} +.p-2 { + padding: 0.5rem !important; +} +.p-3 { + padding: 1rem !important; +} +.p-4 { + padding: 1.5rem !important; +} +.p-5 { + padding: 3rem !important; +} +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} +.pt-0 { + padding-top: 0 !important; +} +.pt-1 { + padding-top: 0.25rem !important; +} +.pt-2 { + padding-top: 0.5rem !important; +} +.pt-3 { + padding-top: 1rem !important; +} +.pt-4 { + padding-top: 1.5rem !important; +} +.pt-5 { + padding-top: 3rem !important; +} +.pe-0 { + padding-right: 0 !important; +} +.pe-1 { + padding-right: 0.25rem !important; +} +.pe-2 { + padding-right: 0.5rem !important; +} +.pe-3 { + padding-right: 1rem !important; +} +.pe-4 { + padding-right: 1.5rem !important; +} +.pe-5 { + padding-right: 3rem !important; +} +.pb-0 { + padding-bottom: 0 !important; +} +.pb-1 { + padding-bottom: 0.25rem !important; +} +.pb-2 { + padding-bottom: 0.5rem !important; +} +.pb-3 { + padding-bottom: 1rem !important; +} +.pb-4 { + padding-bottom: 1.5rem !important; +} +.pb-5 { + padding-bottom: 3rem !important; +} +.ps-0 { + padding-left: 0 !important; +} +.ps-1 { + padding-left: 0.25rem !important; +} +.ps-2 { + padding-left: 0.5rem !important; +} +.ps-3 { + padding-left: 1rem !important; +} +.ps-4 { + padding-left: 1.5rem !important; +} +.ps-5 { + padding-left: 3rem !important; +} +@media (min-width: 576px) { + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} +.tooltip { + position: absolute; + z-index: 1080; + display: block; + margin: 0; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: 0.9; +} +.tooltip .tooltip-arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} +.bs-tooltip-top, +.bs-tooltip-auto[data-popper-placement^=top] { + padding: 0.4rem 0; +} +.bs-tooltip-top .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} +.bs-tooltip-top .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} +.bs-tooltip-end, +.bs-tooltip-auto[data-popper-placement^=right] { + padding: 0 0.4rem; +} +.bs-tooltip-end .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-end .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} +.bs-tooltip-bottom, +.bs-tooltip-auto[data-popper-placement^=bottom] { + padding: 0.4rem 0; +} +.bs-tooltip-bottom .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} +.bs-tooltip-bottom .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} +.bs-tooltip-start, +.bs-tooltip-auto[data-popper-placement^=left] { + padding: 0 0.4rem; +} +.bs-tooltip-start .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-start .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; + -webkit-user-select: none; + user-select: none; + pointer-events: none; +} +.popover { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + z-index: 1070; + display: block; + max-width: 276px; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} +.popover .popover-arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; +} +.popover .popover-arrow::before, +.popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} +.bs-popover-top > .popover-arrow, +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} +.bs-popover-top > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-top > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} +.bs-popover-end > .popover-arrow, +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-end > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-end > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} +.bs-popover-bottom > .popover-arrow, +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-0.5rem - 1px); +} +.bs-popover-bottom > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-bottom > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} +.bs-popover-bottom .popover-header::before, +.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f0f0f0; +} +.bs-popover-start > .popover-arrow, +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-start > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-start > .popover-arrow::after, +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} +.popover-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f0f0f0; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.popover-header:empty { + display: none; +} +.popover-body { + padding: 1rem 1rem; + color: #212529; +} +@-webkit-keyframes notyf-fadeinup { + 0% { + opacity: 0; + transform: translateY(25%); + } + to { + opacity: 1; + transform: translateY(0); + } +} +@keyframes notyf-fadeinup { + 0% { + opacity: 0; + transform: translateY(25%); + } + to { + opacity: 1; + transform: translateY(0); + } +} +@-webkit-keyframes notyf-fadeinleft { + 0% { + opacity: 0; + transform: translateX(25%); + } + to { + opacity: 1; + transform: translateX(0); + } +} +@keyframes notyf-fadeinleft { + 0% { + opacity: 0; + transform: translateX(25%); + } + to { + opacity: 1; + transform: translateX(0); + } +} +@-webkit-keyframes notyf-fadeoutright { + 0% { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(25%); + } +} +@keyframes notyf-fadeoutright { + 0% { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(25%); + } +} +@-webkit-keyframes notyf-fadeoutdown { + 0% { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(25%); + } +} +@keyframes notyf-fadeoutdown { + 0% { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(25%); + } +} +@-webkit-keyframes ripple { + 0% { + transform: scale(0) translateY(-45%) translateX(13%); + } + to { + transform: scale(1) translateY(-45%) translateX(13%); + } +} +@keyframes ripple { + 0% { + transform: scale(0) translateY(-45%) translateX(13%); + } + to { + transform: scale(1) translateY(-45%) translateX(13%); + } +} +.notyf { + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 100%; + color: #fff; + z-index: 9999; + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: flex-end; + pointer-events: none; + box-sizing: border-box; + padding: 20px; +} +.notyf__icon--error, +.notyf__icon--success { + height: 21px; + width: 21px; + background: #fff; + border-radius: 50%; + display: block; + margin: 0 auto; + position: relative; +} +.notyf__icon--error:after, +.notyf__icon--error:before { + content: ""; + background: currentColor; + display: block; + position: absolute; + width: 3px; + border-radius: 3px; + left: 9px; + height: 12px; + top: 5px; +} +.notyf__icon--error:after { + transform: rotate(-45deg); +} +.notyf__icon--error:before { + transform: rotate(45deg); +} +.notyf__icon--success:after, +.notyf__icon--success:before { + content: ""; + background: currentColor; + display: block; + position: absolute; + width: 3px; + border-radius: 3px; +} +.notyf__icon--success:after { + height: 6px; + transform: rotate(-45deg); + top: 9px; + left: 6px; +} +.notyf__icon--success:before { + height: 11px; + transform: rotate(45deg); + top: 5px; + left: 10px; +} +.notyf__toast { + display: block; + overflow: hidden; + pointer-events: auto; + -webkit-animation: notyf-fadeinup 0.3s ease-in forwards; + animation: notyf-fadeinup 0.3s ease-in forwards; + box-shadow: 0 3px 7px 0 rgba(0, 0, 0, 0.25); + position: relative; + padding: 0 15px; + border-radius: 2px; + max-width: 300px; + transform: translateY(25%); + box-sizing: border-box; + flex-shrink: 0; +} +.notyf__toast--disappear { + transform: translateY(0); + -webkit-animation: notyf-fadeoutdown 0.3s forwards; + animation: notyf-fadeoutdown 0.3s forwards; + -webkit-animation-delay: 0.25s; + animation-delay: 0.25s; +} +.notyf__toast--disappear .notyf__icon, +.notyf__toast--disappear .notyf__message { + -webkit-animation: notyf-fadeoutdown 0.3s forwards; + animation: notyf-fadeoutdown 0.3s forwards; + opacity: 1; + transform: translateY(0); +} +.notyf__toast--disappear .notyf__dismiss { + -webkit-animation: notyf-fadeoutright 0.3s forwards; + animation: notyf-fadeoutright 0.3s forwards; + opacity: 1; + transform: translateX(0); +} +.notyf__toast--disappear .notyf__message { + -webkit-animation-delay: 0.05s; + animation-delay: 0.05s; +} +.notyf__toast--upper { + margin-bottom: 20px; +} +.notyf__toast--lower { + margin-top: 20px; +} +.notyf__toast--dismissible .notyf__wrapper { + padding-right: 30px; +} +.notyf__ripple { + height: 400px; + width: 400px; + position: absolute; + transform-origin: bottom right; + right: 0; + top: 0; + border-radius: 50%; + transform: scale(0) translateY(-51%) translateX(13%); + z-index: 5; + -webkit-animation: ripple 0.4s ease-out forwards; + animation: ripple 0.4s ease-out forwards; +} +.notyf__wrapper { + display: flex; + align-items: center; + padding-top: 17px; + padding-bottom: 17px; + padding-right: 15px; + border-radius: 3px; + position: relative; + z-index: 10; +} +.notyf__icon { + width: 22px; + text-align: center; + font-size: 1.3em; + opacity: 0; + -webkit-animation: notyf-fadeinup 0.3s forwards; + animation: notyf-fadeinup 0.3s forwards; + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; + margin-right: 13px; +} +.notyf__dismiss { + position: absolute; + top: 0; + right: 0; + height: 100%; + width: 26px; + margin-right: -15px; + -webkit-animation: notyf-fadeinleft 0.3s forwards; + animation: notyf-fadeinleft 0.3s forwards; + -webkit-animation-delay: 0.35s; + animation-delay: 0.35s; + opacity: 0; +} +.notyf__dismiss-btn { + background-color: rgba(0, 0, 0, 0.25); + border: none; + cursor: pointer; + transition: opacity 0.2s ease, background-color 0.2s ease; + outline: none; + opacity: 0.35; + height: 100%; + width: 100%; +} +.notyf__dismiss-btn:after, +.notyf__dismiss-btn:before { + content: ""; + background: #fff; + height: 12px; + width: 2px; + border-radius: 3px; + position: absolute; + left: calc(50% - 1px); + top: calc(50% - 5px); +} +.notyf__dismiss-btn:after { + transform: rotate(-45deg); +} +.notyf__dismiss-btn:before { + transform: rotate(45deg); +} +.notyf__dismiss-btn:hover { + opacity: 0.7; + background-color: rgba(0, 0, 0, 0.15); +} +.notyf__dismiss-btn:active { + opacity: 0.8; +} +.notyf__message { + vertical-align: middle; + position: relative; + opacity: 0; + -webkit-animation: notyf-fadeinup 0.3s forwards; + animation: notyf-fadeinup 0.3s forwards; + -webkit-animation-delay: 0.25s; + animation-delay: 0.25s; + line-height: 1.5em; +} +@media only screen and (max-width: 480px) { + .notyf { + padding: 0; + } + .notyf__ripple { + height: 600px; + width: 600px; + -webkit-animation-duration: 0.5s; + animation-duration: 0.5s; + } + .notyf__toast { + max-width: none; + border-radius: 0; + box-shadow: 0 -2px 7px 0 rgba(0, 0, 0, 0.13); + width: 100%; + } + .notyf__dismiss { + width: 56px; + } +} +.md-select { + padding: 6px; + border-radius: 6px; + border: 1px solid rgba(200, 200, 200, 0.1); + border-top: 1px solid rgba(100, 100, 100, 0.5); + font-family: inherit; + font-size: 14px; + background: rgba(100, 100, 100, 0.25); + color: #eee; +} +.md-select option { + font-size: 1em; + font-family: inherit; + padding: 8px 16px; + background: #404040; +} +.md-select optgroup { + background: #2c2c2c; +} +.md-select:focus { + outline: solid 1px var(--selected); +} +.md-btn { + font-family: inherit; + background: rgba(100, 100, 100, 0.25); + padding: 8px 14px; + border-radius: 6px; + font-size: 14px; + border: 1px solid rgba(100, 100, 100, 0.35); + border-top: 1px solid rgba(100, 100, 100, 0.5); + color: #eee; + white-space: nowrap; + transition: transform 0.2s var(--appleEase), box-shadow 0.2s var(--appleEase); +} +.md-btn.md-btn-block { + display: block; + width: 100%; +} +.md-btn.md-btn-glyph { + display: flex; + align-items: center; + justify-content: center; + width: 100%; +} +.md-btn.md-btn-primary { + background: #ff2b52a6; + color: white; + border: 1px solid rgba(220, 53, 69, 0.25); + border-top: 1px solid rgba(220, 53, 69, 0.5); +} +.md-btn.md-btn-small { + padding: 6px 8px; + font-size: 13px; +} +.md-btn:hover { + filter: brightness(125%); +} +.md-btn:active { + filter: brightness(75%); + transform: scale(0.98); + transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase); +} +.md-btn.md-btn-icon { + display: inline-flex; + vertical-align: middle; + justify-content: center; +} +.md-btn.md-btn-icon > img { + margin: 0px 16px 0px 0px; + pointer-events: none; +} +.md-btn.md-btn-icon > .md-btn-text { + margin: 0px; +} +.btn-group { + display: inline-flex; + justify-content: center; + align-items: center; +} +.btn-group > .md-btn { + border-radius: 0px; + width: 100%; +} +.btn-group > .md-btn:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.btn-group > .md-btn:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.btn-group > .md-btn:not(:first-child):not(:last-child) { + border-radius: 0px; +} +.md-close-btn { + -webkit-mask-image: url("ameres://icons/webui/close.svg"); + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + background-color: white; + opacity: 0.75; + -webkit-mask-size: contain; + height: 18px; + width: 18px; +} +.md-ico-play { + content: url("assets/play.svg"); + width: 10px; + height: 12px; + margin-right: 1px; + align-self: center; +} +.md-ico-shuffle { + content: url("assets/shuffle.svg"); + width: 1em; + height: 1em; + margin-right: 1px; + margin-bottom: -2px; + align-self: center; +} +.md-ico-remove { + content: url("assets/feather/x-circle-white.svg"); + width: 16px; + height: 16px; + margin-right: 1px; + margin-bottom: -1.5px; + align-self: center; +} +.md-ico-add { + content: url("assets/feather/plus-circle-white.svg"); + width: 1em; + height: 1em; + margin-right: 1px; + margin-bottom: -1.5px; + align-self: center; +} +.reload-btn { + background: rgba(86, 86, 86, 0.52); + border-radius: 100%; + width: 32px; + height: 32px; + border: 0px; + appearance: none; + display: flex; + justify-content: center; + align-items: center; +} +.reload-btn:hover { + background: rgba(86, 86, 86, 0.8); + cursor: pointer; +} +.reload-btn > svg { + height: 50%; + color: #eee; +} +.wr-btn { + font-family: inherit; + appearance: none; + border: 0px; + border-radius: 6px; + padding: 8px; + font-weight: 600; + background: rgba(80, 80, 80, 0.7); + color: white; +} +.cd-btn-seeall { + background: transparent; + border: 0px; + color: var(--keyColor); + font-family: inherit; + font-weight: 500; + font-size: 16px; + border-radius: 4px; + padding: 6px; +} +.cd-btn-seeall:hover { + cursor: pointer; + background: rgba(200, 200, 200, 0.1); +} +.mediaitem-artwork { + border-radius: var(--mediaItemRadius); + overflow: hidden; + flex: 0 0 auto; + position: relative; + width: 100%; + height: 100%; + background-image: url("https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg"); + background-size: cover; + background-position: center; +} +.mediaitem-artwork .animatedartwork-view-box { + position: absolute; + top: 0px; + width: 100%; + height: 100%; +} +.mediaitem-artwork .animatedartwork-view-box .animated { + position: absolute; + top: 0px; + width: 100%; + height: 100%; +} +.mediaitem-artwork .animatedartwork-view-box .animated video { + width: 100%; + height: 100%; +} +.mediaitem-artwork.rounded { + border-radius: 100%; +} +.mediaitem-artwork.rounded::after { + border-radius: 100%; +} +.mediaitem-artwork::after { + content: ""; + box-shadow: var(--mediaItemShadow); + z-index: 1; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; +} +.mediaitem-artwork img { + width: 100%; + height: 100%; + object-fit: cover; + image-rendering: -webkit-optimize-contrast; + pointer-events: none; +} +.mediaitem-artwork.no-shadow { + box-shadow: none; +} +.mediaitem-artwork.no-shadow::after { + display: none; +} +.mediaitem-artwork.subtle-shadow { + box-shadow: var(--mediaItemShadow-ShadowSubtle); +} +.mediaitem-artwork.shadow { + box-shadow: var(--mediaItemShadow-Shadow); +} +/* queue item */ +.cd-queue-item { + border-bottom: 1px solid rgba(200, 200, 200, 0.1); + padding: 8px; +} +.cd-queue-item .row, +.cd-queue-item .col { + padding: 0px; + margin: 0px; +} +.cd-queue-item .artwork { + width: 32px; + height: 32px; + flex: 0 0 auto; +} +.cd-queue-item.selected { + background: var(--selected); +} +.cd-queue-item:active { + background: var(--selected-click); + color: #eee; +} +.cd-queue-item .queue-info { + display: flex; + flex-direction: column; +} +.cd-queue-item .queue-info .queue-title { + font-size: 14px; +} +.cd-queue-item .queue-info .queue-subtitle { + font-size: 13px; + opacity: 0.85; +} +/* horizontal media scroller */ +.cd-hmedia-scroller::-webkit-scrollbar-thumb { + box-shadow: none; +} +.cd-hmedia-scroller:hover::-webkit-scrollbar-thumb { + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.5); +} +.cd-hmedia-scroller.hmedia-scroller-card .mediaitem-card { + margin: 16px; +} +/* mediaitem-list-item */ +.cd-mediaitem-list-item { + width: 100%; + height: 60px; + display: flex; + flex: 0 0 auto; + flex-direction: row; + font-size: 14px; + justify-content: center-between; + align-items: center; + border-radius: var(--mediaItemRadius); + /* CSS.gg + */ +} +.cd-mediaitem-list-item .artwork { + height: 42px; + width: 42px; + border-radius: var(--mediaItemRadius); + object-fit: cover; + object-position: center; + flex: 0 0 auto; + background-repeat: no-repeat; + margin: 12px; + border: 0px; + outline: none; + position: relative; + overflow: hidden; +} +.cd-mediaitem-list-item .artwork .overlay-play { + background: rgba(0, 0, 0, 0.5); + opacity: 0; + appearance: none; + border: 0; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 0px; + z-index: 5; + cursor: pointer; +} +.cd-mediaitem-list-item .artwork .overlay-play:hover { + opacity: 1; +} +.cd-mediaitem-list-item .artwork .overlay-play:active { + background: var(--selected-click); +} +.cd-mediaitem-list-item .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.cd-mediaitem-list-item .info-rect { + height: 100%; + display: flex; + flex-flow: column; + justify-content: center; + flex-grow: 1; +} +.cd-mediaitem-list-item .title { + width: 100%; +} +.cd-mediaitem-list-item .subtitle { + width: 90%; + font-size: 0.8em; + opacity: 0.7; +} +.cd-mediaitem-list-item .duration { + min-width: 60px; + text-align: center; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} +.cd-mediaitem-list-item .metainfo { + min-width: 145px; + text-align: center; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} +.cd-mediaitem-list-item .explicit-icon { + background-image: url("assets/explicit.svg"); + height: 12px; + width: 36px; + filter: contrast(0); + background-repeat: no-repeat; +} +@keyframes load-bar { + 10% { + box-shadow: inset 0 -4px 0; + } + 20% { + box-shadow: inset 0 -10px 0; + } + 30% { + box-shadow: inset 0 -12px 0; + } + 40% { + box-shadow: inset 0 -8px 0; + } + 50% { + box-shadow: inset 0 -4px 0; + } + 60% { + box-shadow: inset 0 -6px 0; + } + 80% { + box-shadow: inset 0 -12px 0; + } + 90% { + box-shadow: inset 0 -6px 0; + } + to { + box-shadow: inset 0 -2px 0; + } +} +.cd-mediaitem-list-item .loadbar-sound, +.cd-mediaitem-list-item .loadbar-sound::after, +.cd-mediaitem-list-item .loadbar-sound::before { + animation: load-bar 1.3s ease infinite alternate; + box-sizing: border-box; + width: 3px; + height: 28px; + box-shadow: inset 0 -12px 0; +} +.cd-mediaitem-list-item .loadbar-sound { + margin-left: 22px; + margin-top: -16px; + position: relative; + transform: scale(var(--load-bar, 1)); + color: var(--keyColor); + display: block; +} +.cd-mediaitem-list-item .loadbar-sound::after, +.cd-mediaitem-list-item .loadbar-sound::before { + content: ""; + position: absolute; + bottom: 0; +} +.cd-mediaitem-list-item .loadbar-sound::before { + left: -4.5px; + animation-delay: -2.4s; +} +.cd-mediaitem-list-item .loadbar-sound::after { + right: -4.2px; + animation-delay: -3.7s; +} +.cd-mediaitem-list-item .isLibrary { + flex: 0 0 auto; + width: 40px; + text-align: center; +} +.cd-mediaitem-list-item .isLibrary button { + appearance: none; + border: 0px; + background: transparent; + cursor: pointer; + filter: contrast(0.8); +} +.cd-mediaitem-list-item:hover { + background: rgba(200, 200, 200, 0.1); + box-shadow: var(--mediaItemShadow); +} +.cd-mediaitem-list-item:hover .overlay-play { + opacity: 1; +} +.cd-mediaitem-list-item.mediaitem-selected { + background: var(--selected); + box-shadow: var(--mediaItemShadow); +} +.cd-mediaitem-list-item:active { + background: var(--selected-click); + box-shadow: var(--mediaItemShadow); + color: #eee; +} +.cd-mediaitem-list-item.compact { + height: 40px; + font-size: 13px; +} +.cd-mediaitem-list-item.compact .artwork { + display: none; +} +.cd-mediaitem-list-item.compact .info-rect { + padding-left: 1em; +} +/* mediaitem-hrect */ +.cd-mediaitem-hrect { + background: rgba(255, 255, 255, 0.18); + width: 264px; + height: 100px; + display: inline-flex; + flex: 0 0 auto; + flex-direction: row; + font-size: 14px; + justify-content: center; + align-items: center; + border-radius: 6px; + cursor: pointer; +} +.cd-mediaitem-hrect .artwork { + height: 70px; + width: 70px; + background: blue; + border-radius: var(--mediaItemRadius); + background: var(--artwork); + background-size: contain; + flex: 0 0 auto; + background-repeat: no-repeat; + margin: 18px; +} +.cd-mediaitem-hrect .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.cd-mediaitem-hrect .info-rect { + width: 100%; +} +.cd-mediaitem-hrect .title { + width: 100%; + text-align: center; +} +.cd-mediaitem-hrect .subtitle { + width: 100%; + text-align: center; + font-size: 12px; +} +/* mediaitem-square-sp */ +.cd-mediaitem-square-sp { + --spcolor: var(""); + width: 190px; + height: 245px; + display: inline-flex; + flex: 0 0 auto; + flex-direction: column; + font-size: 14px; + justify-content: flex-start; + align-items: center; + border-radius: 6px; + margin-left: 10px; + cursor: pointer; + background-color: var(--spcolor); +} +.cd-mediaitem-square-sp .artwork { + height: 190px; + width: 190px; + background: blue; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + background: var(--artwork); + background-size: cover; + flex: 0 0 auto; + margin: 6px; + margin-top: 0px; +} +.cd-mediaitem-square-sp .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.cd-mediaitem-square-sp .artwork:hover { + box-shadow: rgba(0, 0, 0, 0.5) 0 0 0 1000000px inset; +} +.cd-mediaitem-square-sp .title { + width: 90%; + text-align: center; +} +.cd-mediaitem-square-sp .subtitle { + width: 100%; + text-align: center; + font-size: 12px; +} +.cd-mediaitem-square-sp > .cd-mediaitem-square-large-overlay { + z-index: 3; +} +.cd-mediaitem-square-sp > .cd-mediaitem-square-large-overlay:hover { + opacity: 1; +} +.cd-mediaitem-square-sp + .cd-mediaitem-square-large-overlay { + pointer-events: none; +} +.cd-mediaitem-square-sp:hover + .cd-mediaitem-square-large-overlay { + opacity: 1; +} +.cd-mediaitem-square-sp:hover { + box-shadow: rgba(0, 0, 0, 0.5) 0 0 0 1000000px inset; +} +/* mediaitem-square-large */ +.cd-mediaitem-square-large { + width: 190px; + height: 250px; + display: inline-flex; + flex: 0 0 auto; + flex-direction: column; + font-size: 14px; + justify-content: flex-start; + align-items: center; + border-radius: 6px; + margin-left: 10px; + cursor: pointer; +} +.cd-mediaitem-square-large > * { + z-index: inherit; +} +.cd-mediaitem-square-large .artwork { + height: 190px; + width: 190px; + background: blue; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + background: var(--artwork); + background-size: cover; + flex: 0 0 auto; + margin: 6px; + margin-top: 0px; +} +.cd-mediaitem-square-large-overlay { + position: absolute; + width: 190px; + float: right; + height: 250px; + top: 0px; + margin: 10px; + margin-top: 0px; + opacity: 0; +} +.cd-mediaitem-square-large-overlay > * { + pointer-events: auto; +} +.cd-mediaitem-square-large > .cd-mediaitem-square-large-overlay { + z-index: 3; +} +.cd-mediaitem-square-large > .cd-mediaitem-square-large-overlay:hover { + opacity: 1; +} +.cd-mediaitem-square-large + .cd-mediaitem-square-large-overlay { + pointer-events: none; +} +.cd-mediaitem-square-large:hover + .cd-mediaitem-square-large-overlay { + opacity: 1; +} +.cd-mediaitem-square-large .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.cd-mediaitem-square-large .title { + width: 90%; + text-align: center; +} +.cd-mediaitem-square-large .subtitle { + width: 100%; + text-align: center; + font-size: 12px; +} +/* mediaitem-mvview */ +/* mediaitem-mvview */ +.cd-mediaitem-mvview { + width: 300px; + height: 250px; + display: inline-flex; + flex: 0 0 auto; + flex-direction: column; + font-size: 14px; + justify-content: flex-start; + align-items: center; + border-radius: 6px; + margin-left: 10px; + cursor: pointer; +} +.cd-mediaitem-mvview > * { + z-index: inherit; +} +.cd-mediaitem-mvview .artwork { + height: 172px; + width: 300px; + background: blue; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + background: var(--artwork); + background-size: cover; + flex: 0 0 auto; + margin: 6px; + margin-top: 0px; +} +.cd-mediaitem-mvview-overlay { + position: absolute; + width: 300px; + float: right; + height: 250px; + top: 0px; + margin: 10px; + margin-top: 0px; + opacity: 0; +} +.cd-mediaitem-mvview-overlay > * { + pointer-events: auto; +} +.cd-mediaitem-mvview > .cd-mediaitem-mvview-overlay { + z-index: 3; +} +.cd-mediaitem-mvview > .cd-mediaitem-mvview-overlay:hover { + opacity: 1; +} +.cd-mediaitem-mvview + .cd-mediaitem-mvview-overlay { + pointer-events: none; +} +.cd-mediaitem-mvview:hover + .cd-mediaitem-mvview-overlay { + opacity: 1; +} +.cd-mediaitem-mvview .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.cd-mediaitem-mvview .title { + width: 90%; + text-align: center; +} +.cd-mediaitem-mvview .subtitle { + width: 100%; + text-align: center; + font-size: 12px; +} +/* mediaitem-square */ +.cd-mediaitem-square { + width: 220px; + height: 238px; + display: inline-flex; + flex: 0 0 auto; + flex-direction: column; + font-size: 14px; + justify-content: center; + align-items: center; + border-radius: 6px; +} +.cd-mediaitem-square .artwork-container { + position: relative; +} +.cd-mediaitem-square .artwork-container .artwork { + height: 190px; + width: 190px; + background: blue; + border-radius: var(--mediaItemRadius); + background: var(--artwork); + background-size: cover; + flex: 0 0 auto; + margin: 6px; + cursor: pointer; +} +.cd-mediaitem-square .artwork-container .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.cd-mediaitem-square .artwork-container .badge-container { + transition: opacity 0.1s var(--appleEase); + opacity: 1; +} +.cd-mediaitem-square .artwork-container .badge-container .socialBadge { + width: 32px; + height: 32px; + position: absolute; + right: 14px; + bottom: 14px; + border-radius: 100%; + overflow: hidden; + z-index: 2; + pointer-events: none; +} +.cd-mediaitem-square .artwork-container > .play-btn, +.cd-mediaitem-square .artwork-container > .menu-btn { + opacity: 0; + appearance: none; + padding: 0px; + border: 0px; + width: 30px; + height: 30px; + border-radius: 50%; + background: rgba(50, 50, 50, 0.7); + cursor: pointer; + transition: opacity 0.1s var(--appleEase); +} +.cd-mediaitem-square .artwork-container > .play-btn :hover, +.cd-mediaitem-square .artwork-container > .menu-btn :hover { + border-radius: 50%; + background: rgba(250, 0, 0, 0.7); +} +.cd-mediaitem-square .artwork-container > .play-btn { + position: absolute; + bottom: 14px; + left: 14px; + z-index: 2; +} +.cd-mediaitem-square .artwork-container > .menu-btn { + position: absolute; + bottom: 14px; + right: 14px; + z-index: 2; +} +.cd-mediaitem-square .artwork-container:hover > .badge-container { + opacity: 0; +} +.cd-mediaitem-square .artwork-container:hover > .play-btn, +.cd-mediaitem-square .artwork-container:hover > .menu-btn { + opacity: 1; +} +.cd-mediaitem-square .info-rect { + width: 90%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +.cd-mediaitem-square .title { + width: 100%; + text-align: center; + display: flex; + align-content: center; + justify-content: center; +} +.cd-mediaitem-square .subtitle { + width: 100%; + text-align: center; + font-size: 12px; +} +.cd-mediaitem-square .unavailable-overlay { + position: absolute; + top: 0px; + left: 0px; + bottom: 0; + right: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 2; + pointer-events: none; + background: rgba(0, 0, 0, 0.4); + margin: 2em; + border-radius: 10px; +} +.cd-mediaitem-square .unavailable-overlay > .codicon { + font-size: 4em; + font-weight: bold; + opacity: 0.5; +} +.cd-mediaitem-square.mediaitem-video { + height: 200px; + width: 240px; +} +.cd-mediaitem-square.mediaitem-video .artwork { + height: 120px; + width: 212px; +} +.cd-mediaitem-square.mediaitem-brick { + height: 200px; + width: 240px; +} +.cd-mediaitem-square.mediaitem-brick .artwork { + height: 123px; + width: 220px; +} +.cd-mediaitem-square.mediaitem-small { + width: 140px; + height: 180px; +} +.cd-mediaitem-square.mediaitem-small .artwork { + height: 128px; + width: 128px; +} +.cd-mediaitem-square.mediaitem-card { + background: #ccc; + background: var(--spcolor); + height: 298px; + width: 230px; + max-width: 250px; + max-height: 500px; + overflow: hidden; + position: relative; + border-radius: calc(var(--mediaItemRadius) * 2); + box-shadow: var(--mediaItemShadow-ShadowSubtle); +} +.cd-mediaitem-square.mediaitem-card .artwork { + width: 230px; + height: 230px; + overflow: hidden; + border-radius: 0px; + margin: 0; +} +.cd-mediaitem-square.mediaitem-card .artwork .mediaitem-artwork { + border-radius: 0px; +} +.cd-mediaitem-square.mediaitem-card .artwork .mediaitem-artwork::after { + box-shadow: unset; +} +.cd-mediaitem-square.mediaitem-card .info-rect-card { + padding: 10px 10px 14px; + position: relative; + width: 100%; +} +.cd-mediaitem-square.mediaitem-card .info-rect-card::before { + background: var(--bgartwork); + content: ""; + top: 0; + left: 0; + bottom: 0; + right: 0; + position: absolute; + background-size: cover; + background-position: bottom; + z-index: 0; + opacity: 1; + filter: brightness(0.5) blur(50px) saturate(180%); +} +.cd-mediaitem-square.mediaitem-card .title { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 0.9em; + font-weight: 500; + z-index: 1; +} +.cd-mediaitem-square.mediaitem-card .subtitle { + height: 100%; + justify-content: center; + align-items: center; + font-size: 0.75em; + width: 100%; + display: flex; + z-index: 1; +} +.cd-mediaitem-square.mediaitem-card::after { + box-shadow: var(--mediaItemShadow); + content: ""; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + pointer-events: none; + border-radius: inherit; +} +/* mediaitem-square */ +.albums-square-containeru > * > .cd-mediaitem-square { + --frame: max(220px, 15vw); + width: var(--frame); + height: calc(var(--frame) * 13 / 11); + display: inline-flex; + flex: 0 0 auto; + flex-direction: column; + font-size: calc(var(--frame) / 220 * 14); + justify-content: center; + align-items: center; + border-radius: calc(var(--frame) / 220 * 6); +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container { + position: relative; +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container .artwork { + height: calc(var(--frame) * 19 / 22); + width: calc(var(--frame) * 19 / 22); + background: blue; + border-radius: var(--mediaItemRadius); + background: var(--artwork); + background-size: cover; + flex: 0 0 auto; + margin: calc(var(--frame) / 220 * 6); + cursor: pointer; +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container .artwork.round { + border-radius: var(--mediaItemRadiusRound); +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container > .play-btn, +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container > .menu-btn { + opacity: 0; + appearance: none; + padding: 0px; + border: 0px; + width: calc(var(--frame) / 220 * 30); + height: calc(var(--frame) / 220 * 30); + border-radius: 50%; + background: rgba(50, 50, 50, 0.7); + cursor: pointer; + backdrop-filter: blur(32px) saturate(180%); + transition: opacity 0.1s var(--appleEase); +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container > .play-btn { + position: absolute; + bottom: calc(var(--frame) / 220 * 14); + left: calc(var(--frame) / 220 * 14); + z-index: 2; +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container > .menu-btn { + position: absolute; + bottom: calc(var(--frame) / 220 * 14); + right: calc(var(--frame) / 220 * 14); + z-index: 2; +} +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container:hover > .play-btn, +.albums-square-containeru > * > .cd-mediaitem-square .artwork-container:hover > .menu-btn { + opacity: 1; +} +.albums-square-containeru > * > .cd-mediaitem-square .title { + width: 90%; + text-align: center; +} +.albums-square-containeru > * > .cd-mediaitem-square .subtitle { + width: 100%; + text-align: center; + font-size: calc(var(--frame) / 220 * 12); +} +.albums-square-containeru > * > .cd-mediaitem-square.mediaitem-video { + height: calc(var(--frame) / 220 * 200); + width: calc(var(--frame) / 220 * 240); +} +.albums-square-containeru > * > .cd-mediaitem-square.mediaitem-video .artwork { + height: calc(var(--frame) / 220 * 120); + width: calc(var(--frame) / 220 * 212); +} +.albums-square-containeru > * > .cd-mediaitem-square.mediaitem-brick { + height: calc(var(--frame) / 220 * 200); + width: calc(var(--frame) / 220 * 240); +} +.albums-square-containeru > * > .cd-mediaitem-square.mediaitem-brick .artwork { + height: calc(var(--frame) / 220 * 123); + width: calc(var(--frame)); +} +.listitem-horizontal .cd-mediaitem-list-item { + width: 350px; + height: 60px; +} +.mediaitem-list-item__grid { + background: rgba(200, 200, 200, 0.05); + border-radius: 10px; + padding: var(--contentInnerPadding); + box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px; + width: 100%; +} +.mediaitem-list-item__grid .cd-mediaitem-list-item { + width: 350px; + height: 60px; +} +.mediaitem-list-item__grid::-webkit-scrollbar { + display: none; +} +.mediaitem-list-item__grid:hover::-webkit-scrollbar { + display: initial; +} +.svg-icon { + --color: #aaa; + --url: url("assets/feather/share.svg"); + -webkit-mask-image: var(--url); + -webkit-mask-size: cover; + height: 18px; + width: 18px; + background: var(--color); +} +.svg-icon.inline { + display: inline-block; +} +.sidebar-icon { + width: 18px; + height: 18px; + margin-right: 8px; +} +.sidebar-icon > .svg-icon { + width: 100%; + height: 100%; + --color: #aaa; +} +.sidebar-icon > svg { + width: 100%; + height: 100%; + color: #aaa; +} +/* Switch Checkbox */ +input[type=checkbox][switch] { + width: 38px; + appearance: none; + border-radius: 32px; + height: 24px; + zoom: 1; + top: 0; + cursor: pointer; + left: 0; + position: relative; + transform: scale(1); + background: #8e8e93; + padding: 0; + margin: 0; +} +input[type=checkbox][switch]:focus, +input[type=checkbox][switch]:active { + outline: none; +} +input[type=checkbox][switch]:checked { + background: var(--keyColor); + border: 0 solid var(--keyColor); + mix-blend-mode: unset; +} +input[type=checkbox][switch]:checked:hover { + background: var(--keyColor-rollover); +} +input[type=checkbox][switch]:checked:active { + background: var(--keyColor-pressed); +} +input[type=checkbox][switch]::before { + background: white; + width: 26px; + height: 26px; + top: -1px; + left: -1px; + position: absolute; + content: ' '; + border-radius: 32px; + transition: 0.1s left var(--appleEase); + transform: scale(0.75); +} +input[type=checkbox][switch]:checked::before { + background: white; + top: -1px; + left: 13px; + transition: 0.1s left var(--appleEase); + transform: scale(0.75); +} +input[type=checkbox][switch]:disabled::before { + opacity: 0.5; +} +input[type=checkbox][switch]:active::before { + left: 13px; +} +input[type=checkbox][switch]:checked:active::before { + left: -1px; +} +/* End Switch Checkbox */ +.header-text { + margin: 0px; +} +.media-item--small { + background: rgba(0, 0, 0, 0.25); + height: 162px; + width: 132px; + display: inline-flex; + flex-direction: column; + justify-content: center; + align-items: center; + border-radius: 10px; +} +.media-item--small .artwork { + background: red; + margin: 6px; + border-radius: 100%; + width: 90px; + height: 90px; + box-shadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.3); +} +.playlist-artwork { + height: 190px; + width: 190px; + background: blue; + border-radius: 6px; + background: var(--artwork); + background-size: cover; + box-shadow: var(--mediaItemShadow); + flex: 0 0 auto; + margin: 6px; + margin-top: 0px; +} +.media-item--small .text { + font-weight: 600; + font-size: 0.9em; +} +.media-item--small .subtext { + font-size: 0.75em; +} +.player-duration-time { + opacity: 0.5; +} +.player-artwork-container { + display: flex; + align-items: center; + justify-content: center; +} +.player-duration-container { + font-size: 0.85em; + font-weight: 500; +} +.media-artwork { + --artwork: url(""); + width: 80vw; + height: 80vw; + max-height: 500px; + max-width: 500px; + background: black; + background-image: var(--artwork); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border-radius: 8px; + box-shadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.16), 0 8px 40px rgba(0, 0, 0, 0.55); + transition: transform 0.1s var(--appleEase); +} +.media-artwork.paused { + transition: transform 0.35s var(--appleEase); + transform: scale(0.85); +} +.playback-slider { + width: 90%; +} +.volume-slider { + width: 100%; +} +.volume-slider-container { + width: 90%; + margin: 0 auto; + padding: 0px; +} +.volume-slider-container .col-auto, +.volume-slider-container .col { + display: flex; + align-items: center; + justify-self: center; + padding: 0px; + margin: 0px; +} +.playback-button { + font-size: 2em; + width: 40px; + height: 36px; + padding: 0px; + background: transparent; + border: 0px; + border-radius: 0px; + box-shadow: unset; + background-size: 12px; + background-position: center; + background-repeat: no-repeat; + opacity: 0.7; + border-radius: 6px; +} +.playback-button:active { + transform: scale(0.95); +} +.playback-button--small { + border-radius: 6px; + font-size: 1em; + color: inherit; + background-size: 14px; + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + width: 40px; + height: 32px; + border: 0px; + box-shadow: unset; + opacity: 0.7; +} +.playback-button:hover, +.playback-button--small:hover { + background-color: rgba(200, 200, 200, 0.1); +} +.playback-button:active, +.playback-button--small:active { + transform: scale(0.9); +} +.playback-button--small.active { + background-color: rgba(200, 200, 200, 0.25); +} +.playback-button--small.search { + background-image: url("assets/search.svg"); +} +.playback-button--small.cast { + background-image: url("assets/cast_white.svg"); +} +.playback-button--small.miniplayer { + background-image: url("assets/pip.svg"); +} +.playback-button--small.queue { + background-image: url("assets/list.svg"); +} +.playback-button--small.lyrics { + background-image: url("assets/quote-right.svg"); +} +.playback-button--small.shuffle { + background-image: url("assets/shuffle.svg"); +} +.playback-button--small.repeat { + background-image: url("assets/repeat.svg"); +} +.playback-button--small.repeat.repeatOne { + background-color: rgba(200, 200, 200, 0.25); + background-image: url("assets/repeatOne.svg"); +} +.playback-button.pause { + background-image: url('assets/pause.svg'); +} +.playback-button.play { + background-image: url('assets/play.svg'); +} +.playback-button.next { + background-image: url('assets/forward.svg'); +} +.playback-button.previous { + background-image: url('assets/backward.svg'); +} +.playback-buttons { + display: flex; + align-items: center; + justify-content: center; +} +.player-volume-glyph { + width: 32px; + height: 16px; + background-repeat: no-repeat; + background-size: contain; + background-position: center; +} +.player-volume-glyph.decrease { + background-image: url("assets/volume.svg"); + opacity: 0.5; +} +.player-volume-glyph.increase { + background-image: url("assets/volume-2.svg"); + opacity: 0.5; +} +.player-track-info { + width: 90%; + margin: 0 auto; +} +.player-song-title { + font-size: 1.25em; + text-align: left; + margin: 0 auto; + font-weight: 500; +} +.player-song-artist { + font-size: 1em; + text-align: left; + margin: 0 auto; + color: var(--keyColor); + font-weight: 400; +} +.player-song-artist:hover { + cursor: pointer; + text-decoration: underline; +} +.player-more-container { + display: flex; + align-items: center; + justify-content: center; +} +.player-more-button { + appearance: none; + width: 32px; + height: 32px; + border-radius: 50%; + border: 0px; + background: var(--keyColor); + cursor: pointer; + box-shadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.16); + color: white; + font-weight: bold; + padding: 0px; + font-size: 16px; +} +.back-button { + width: 40px; + height: 40px; + background-color: transparent; + background-size: 16px; + background-position: center; + background-repeat: no-repeat; + background-image: url("assets/arrow-left.svg"); + border: 0px; + border-radius: 0px; +} +.header-text { + height: 40px; + display: flex; + align-items: center; +} +.list-entry-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px; + font-size: 1em; + font-family: inherit; +} +.list-entry { + display: flex; + align-items: center; + /* justify-content: space-between; */ + padding: 12px; + font-size: 1em; + font-family: inherit; + border-bottom: 1px solid rgba(255 255 255 / 0.1); + cursor: pointer; +} +.list-entry-image { + --artwork: url(""); + width: 64px; + height: 64px; + background: var(--artwork); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border-radius: 8px; + box-shadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.16), 0 8px 40px rgba(0, 0, 0, 0.55); +} +.list-entry-image.artist { + border-radius: 50%; +} +.list-entry-body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 12px; +} +.list-entry-name { + font-size: 14px; + font-weight: 500; + overflow: hidden; + width: 100%; +} +.list-entry-artist { + font-size: 12px; + overflow: hidden; + width: 100%; +} +.list-entry .handle { + height: 100%; + width: 28px; + background: var(--keyColor); + display: flex; + justify-content: center; + align-items: center; +} +.artist-chip { + display: inline-flex; + align-items: center; + justify-content: center; + margin: 4px 0px; + border-radius: 4px; + color: white; + font-size: 1em; + font-weight: 500; + cursor: pointer; + padding: 8px; +} +.artist-chip:hover { + background: var(--selected); +} +.artist-chip .artist-chip__follow { + appearance: none; + border: 0; + height: 32px; + width: 32px; + background: #ffffff0f; + margin: 0px 0px 0px 10px; + font-weight: bold; + color: white; + border-radius: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + cursor: pointer; + flex: 0 0 32px; +} +.artist-chip .artist-chip__follow:hover { + background: var(--selected); +} +.artist-chip .artist-chip__image { + width: 32px; + height: 32px; + background-size: contain; + background-position: center; + background-repeat: no-repeat; + border-radius: 100%; + overflow: hidden; + margin: 0px 12px 0px 0px; + pointer-events: none; + flex: 0 0 32px; +} +.artist-chip .artist-chip__image .mediaitem-artwork { + border-radius: inherit; +} +.artist-chip .artist-chip__name { + pointer-events: none; +} +.search-panel { + background: rgba(0, 0, 0, 0.5); +} +.search-header { + position: absolute; + width: 100%; + z-index: 1; + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-bottom: 1px solid rgba(200, 200, 200, 0.08); +} +.connection-error-panel { + background: rgba(0, 0, 0, 0.5); +} +.search-type-container { + display: flex; +} +.search-type-button { + background: rgba(20, 20, 20, 0.85); + border-radius: 50px; + color: white; + border: 0px; + box-shadow: unset; + font-family: inherit; + padding: 8px 16px; + font-size: 14px; + font-weight: 500; + margin: 8px; + margin-top: 0px; + margin-bottom: 0px; +} +.search-type-button.active { + background: var(--keyColor); +} +.search-tab-container { + overflow: auto; + white-space: nowrap; + overflow-y: hidden; +} +.search-body-container { + position: relative; + width: 100%; + height: 100%; +} +.search-body { + position: absolute; + width: 100%; + height: 100%; + padding-top: 220px; +} +.search-tab { + background: rgba(20, 20, 20, 0.85); + border-radius: 50px; + color: white; + border: 0px; + box-shadow: unset; + font-family: inherit; + padding: 8px 16px; + font-size: 14px; + font-weight: 500; +} +.search-tab.active { + background: var(--keyColor); +} +.notyf__toast { + -webkit-app-region: no-drag; + cursor: pointer; +} +.notyf-info { + background: var(--keyColor); +} +.modal-fullscreen { + display: flex; + justify-content: center; + align-items: center; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.3); + z-index: 1000; +} +.modal-fullscreen .modal-window { + background: #333; + border-radius: 10px; + box-shadow: var(--mediaItemShadow-Shadow); + display: flex; + flex-flow: column; + max-height: 500px; + max-width: 360px; + background: #121212; + width: 100%; + position: relative; +} +.modal-fullscreen .modal-window:after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + box-shadow: var(--mediaItemShadow); + z-index: 1; + border-radius: inherit; +} +.modal-fullscreen .modal-window .modal-header { + width: 100%; + padding: 6px; +} +.modal-fullscreen .modal-window .modal-content { + width: 100%; + height: 100%; + overflow: hidden; + overflow-y: overlay; +} +.spatialproperties-panel .modal-window { + height: 700px; + max-height: 700px; + width: 800px; + max-width: 800px; + overflow: hidden; +} +.spatialproperties-panel .modal-window .info-header { + padding-left: 12px; +} +.spatialproperties-panel .modal-window .visual-container { + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; +} +.spatialproperties-panel .modal-window .visual { + position: relative; + height: 250px; + width: 300px; + display: inline-flex; + align-items: flex-end; + justify-content: center; + filter: drop-shadow(2px 12px 6px rgba(0, 0, 0, 0.25)); + margin: 0 auto; +} +.spatialproperties-panel .modal-window .visual .face { + position: absolute; + width: calc(12px * 6); + height: calc(12px * 6); + border-radius: 6px; + transform: rotateX(60deg) rotateZ(-45deg); + transition: transform 0.2s linear, width 0.2s linear, height 0.2s linear; +} +.spatialproperties-panel .modal-window .visual .listener { + position: absolute; + width: 32px; + height: 32px; + border-radius: 6px; + transform: rotateX(60deg) rotateZ(-45deg); + transition: transform 0.2s linear, width 0.2s linear, height 0.2s linear; + background: white; + color: black; + z-index: 2; +} +.spatialproperties-panel .modal-window .visual .audiosource { + position: absolute; + width: 32px; + height: 32px; + border-radius: 6px; + transform: rotateX(60deg) rotateZ(-45deg); + transition: transform 0.2s linear, width 0.2s linear, height 0.2s linear; + background: yellow; + z-index: 2; +} +.spatialproperties-panel .modal-window .visual .face:nth-of-type(1) { + background: linear-gradient(45deg, #28223a, #1f2038); + z-index: 1; +} +.spatialproperties-panel .modal-window .visual .face:nth-of-type(2) { + background: linear-gradient(45deg, #7d53ad, #5763ff); + transform: rotateX(60deg) rotateZ(-45deg) translateZ(30px); + opacity: 0.7; + z-index: 3; +} +.spatialproperties-panel .modal-window .modal-header { + padding: 16px; + position: relative; + overflow: hidden; +} +.spatialproperties-panel .modal-window .modal-header .modal-title { + text-align: center; +} +.spatialproperties-panel .modal-window .modal-header .close-btn { + width: 50px; + height: 100%; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; +} +.spatialproperties-panel .modal-window .modal-header .close-btn:hover { + background-color: #c42b1c; +} +.addtoplaylist-panel .modal-window { + max-height: 600px; + max-width: 400px; + background: rgba(18, 18, 18, 0.9); + overflow: hidden; + backdrop-filter: blur(16px) saturate(180%); +} +.addtoplaylist-panel .modal-window .modal-header { + padding: 16px; + position: relative; +} +.addtoplaylist-panel .modal-window .modal-header .modal-title { + text-align: center; +} +.addtoplaylist-panel .modal-window .modal-header .close-btn { + width: 50px; + height: 100%; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; +} +.addtoplaylist-panel .modal-window .modal-header .close-btn:hover { + background-color: #c42b1c; +} +.addtoplaylist-panel .modal-window .modal-search { + width: 100%; + padding: 0px 16px; + position: relative; +} +.addtoplaylist-panel .modal-window .playlist-item { + appearance: none; + border: 0px; + text-align: left; + width: 100%; + margin: 0; + display: flex; + background: rgba(32, 32, 32, 0.46); + color: #eee; + font-family: inherit; + font-size: 0.98em; + padding: 6px 12px; + align-items: center; + flex-flow: row; +} +.addtoplaylist-panel .modal-window .playlist-item .icon { + pointer-events: none; + width: 32px; + height: 32px; + display: flex; + justify-content: center; + align-items: center; + margin-right: 6px; +} +.addtoplaylist-panel .modal-window .playlist-item .name { + position: relative; +} +.addtoplaylist-panel .modal-window .playlist-item:hover { + background: var(--selected); +} +.addtoplaylist-panel .modal-window .playlist-item:active { + background: var(--selected-click); +} +.addtoplaylist-panel .modal-window .playlist-item.focused { + background: var(--keyColor); +} +.addtoplaylist-panel .modal-window .playlist-item:last-child { + border-bottom: 0px; +} +.menu-panel { + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 100001; + display: flex; + justify-content: center; + align-items: center; + -webkit-app-region: no-drag; +} +.menu-panel .menu-header-body { + padding: 6px; + display: flex; + background: rgba(200, 200, 200, 0.1); +} +.menu-panel .menu-header-body .menu-option-header { + width: 40px; + height: 40px; + display: flex; + justify-content: center; + align-items: center; + border-radius: var(--mediaItemRadius); + appearance: none; + border: 0; + background: transparent; +} +.menu-panel .menu-header-body .menu-option-header.active .sidebar-icon > .svg-icon { + --color: var(--keyColor); +} +.menu-panel .menu-header-body .menu-option-header:hover { + background: var(--selected); +} +.menu-panel .menu-header-body .menu-option-header:active { + background: var(--selected-click); +} +.menu-panel .menu-panel-body { + display: flex; + flex-flow: column; + background: #262626; + position: relative; + min-width: 200px; + box-shadow: var(--ciderShadow-Generic); + border-radius: var(--mediaItemRadius); + overflow: hidden; + font-size: 13px; +} +.menu-panel .menu-panel-body .menu-option { + text-align: left; + display: flex; + width: 100%; + padding: 9px 16px; + appearance: none; + border: 0px; + font: inherit; + background: transparent; + color: inherit; +} +.menu-panel .menu-panel-body .menu-option:hover { + background: var(--selected); +} +.menu-panel .menu-panel-body .menu-option:active { + background: var(--selected-click); +} +.menu-panel .menu-header-text { + margin: 18px 6px; +} +.menu-panel .menu-header-text .close-btn { + width: 50px; + height: 42px; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; +} +.menu-panel .menu-header-text .close-btn:hover { + background-color: #c42b1c; +} +.menu-panel .menu-body { + overflow: overlay; + height: 100%; +} +.menu-panel .menu-footer { + width: 100%; + padding: 12px; +} +.queue-panel { + height: 100%; + width: 100%; + display: flex; + flex-flow: column; +} +.queue-panel .queue-header-text { + margin: 18px 6px; +} +.queue-panel .queue-body { + overflow: overlay; + height: 100%; +} +.queue-panel .queue-footer { + width: 100%; + padding: 12px; +} +.queue-panel .autoplay { + background: rgba(200, 200, 200, 0.15); + display: flex; + justify-content: center; + appearance: none; + border: 0; + border-radius: 6px; + height: 32px; + width: 32px; +} +.queue-panel .infinity { + content: url("assets/infinity.svg"); + margin: auto; +} +.content-inner { + position: absolute; + top: var(--navigationBarHeight); + left: 0; + padding: 32px; + width: 100%; + transition: zoom 1s; + zoom: 1; +} +.content-inner.centered { + height: 100%; + display: flex; + flex-flow: column; + justify-content: center; + align-items: center; +} +.github-themes-page { + display: flex; + flex-direction: column; + padding: 0px; + height: calc(100% - var(--navigationBarHeight)); +} +.github-themes-page .github-avatar { + height: 42px; + width: 42px; + margin: 6px; + border-radius: 32px; +} +.github-themes-page .repo-name { + margin: 0px; + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + white-space: break-spaces; +} +.github-themes-page .repo-url { + color: var(--textColor); + font-size: 0.8em; +} +.github-themes-page .repo-preview-name { + margin: 0px; +} +.github-themes-page .repos-list { + height: 100%; + overflow-y: overlay; + width: 320px; + font-size: 14px; +} +.github-themes-page .repos-list > .list-group { + margin: 0px; +} +.github-themes-page .repos-list .list-group-item { + padding: 12px 6px; +} +.github-themes-page .repos-list .list-group-item:hover { + filter: brightness(1.2); +} +.github-themes-page .repos-list .list-group-item:active { + filter: brightness(0.8); +} +.github-themes-page .github-preview { + height: 100%; + flex: 1; + background: var(--color2); + padding: 16px 32px; + overflow-y: overlay; +} +.github-themes-page .gh-content { + display: flex; + flex-direction: row; + flex: 1; + overflow: hidden; +} +.github-themes-page .gh-header { + padding: 16px; +} +.library-page { + padding: 0px; +} +.library-page .library-header { + position: sticky; + top: 0; + left: 0; + border-bottom: 1px solid rgba(200, 200, 200, 0.05); + z-index: 6; + background: black; + padding: 0px 2em; + backdrop-filter: blur(32px); + background: rgba(0, 0, 0, 0.25); + top: var(--navigationBarHeight); +} +.library-page .well { + margin: 2em; +} +.content-inner.podcasts-page { + display: flex; + height: calc(100% - var(--navigationBarHeight)); + padding: 0px; +} +.content-inner.podcasts-page .list-flat { + border-radius: 0px; +} +.content-inner.podcasts-page .podcast-artwork { + width: 200px; + margin: 16px auto; + height: 200px; +} +.content-inner.podcasts-page .podcasts-list { + height: 100%; + width: 280px; + background: rgba(200, 200, 200, 0.1); + overflow-y: overlay; + border-right: 1px solid var(--color2); + flex: none; + overflow-x: hidden; +} +.content-inner.podcasts-page .podcasts-list .podcast-list-header { + border-bottom: 1px solid var(--color2); + font-size: 0.7em; + padding: 6px; + background: #ffffff17; + text-transform: uppercase; + font-weight: 600; + opacity: 0.5; +} +.content-inner.podcasts-page .podcasts-list .podcasts-search { + padding: 10px; + position: sticky; + top: 0; + left: 0; + width: 100%; + border-bottom: 1px solid var(--color2); + z-index: 2; + background: #303030; +} +.content-inner.podcasts-page .episodes-list { + height: 100%; + width: 100%; + background: rgba(200, 200, 200, 0.06); + overflow-y: overlay; + overflow-x: hidden; +} +.content-inner.podcasts-page .episodes-list .episodes-inline-info { + padding: 14px 14px 0px 14px; +} +.content-inner.podcasts-page .episodes-list .episodes-inline-info .podcast-show-info { + display: flex; + justify-content: center; + flex-direction: column; +} +.content-inner.podcasts-page .episodes-list .episodes-inline-info .podcast-show-description { + margin: 32px 6px; + font-size: 0.8rem; + white-space: pre-wrap; + display: block; +} +.content-inner.podcasts-page .episodes-list .episodes-inline-info .podcast-artwork { + width: 120px; + margin: 0px auto; + height: 120px; +} +.content-inner.podcasts-page .episodes-list .podcast-no-search-results { + text-align: center; + margin-top: 40px; +} +.content-inner.podcasts-page .podcasts-details { + width: 300px; + flex: none; + background: rgba(255, 255, 255, 0.05); + overflow-y: overlay; + overflow-x: hidden; + top: 2%; + z-index: 2; + border-left: 1px solid var(--color2); + padding-bottom: 1em; +} +.content-inner.podcasts-page .podcasts-details .meta-btn { + font-size: 0.75em; +} +.content-inner.podcasts-page .podcasts-details .podcasts-details-header { + display: flex; + justify-content: end; + align-items: center; + position: sticky; + top: 0; + z-index: 2; +} +.content-inner.podcasts-page .podcasts-details .close-btn { + width: 50px; + height: 42px; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; +} +.content-inner.podcasts-page .podcasts-details .close-btn:hover { + background-color: #c42b1c; +} +.content-inner.podcasts-page .podcasts-details .podcast-genre { + text-align: center; + margin: 6px; + font-size: 0.8em; + font-weight: 500; + opacity: 0.8; +} +.content-inner.podcasts-page .podcasts-details .podcast-metainfo { + text-align: center; + font-size: 0.7em; + opacity: 0.8; +} +.content-inner.podcasts-page .podcasts-details .podcast-header { + text-align: center; +} +.content-inner.podcasts-page .podcasts-details .podcast-play-btn { + width: 50%; + display: block; + margin: 0 auto; +} +.content-inner.podcasts-page .podcasts-details .podcast-description { + margin: 12px; + font-size: 0.75em; + white-space: pre-wrap; + display: block; + line-break: anywhere; +} +@media only screen and (max-width: 1230px) { + .content-inner.podcasts-page .podcasts-details { + height: 96%; + width: 300px; + flex: none; + background: rgba(20, 20, 20, 0.97); + overflow-y: overlay; + overflow-x: hidden; + position: absolute; + right: 2%; + top: 2%; + border-radius: 10px; + box-shadow: var(--ciderShadow-Generic); + z-index: 2; + } +} +/* Album / Playlist Page */ +.playlist-page { + --bgColor: transparent; + padding: 0px; + top: 0; + padding-top: var(--navigationBarHeight); +} +.playlist-page .playlist-body { + padding: var(--contentInnerPadding) 2em; + margin-top: -75px; +} +.playlist-page .floating-header { + position: sticky; + top: 0; + left: 0; + border-bottom: 1px solid rgba(200, 200, 200, 0.05); + z-index: 6; + padding: 0px 1em; + backdrop-filter: blur(32px); + background: rgba(0, 0, 0, 0.25); + top: var(--navigationBarHeight); + transition: opacity 0.1s var(--appleEase); +} +.playlist-page .playlist-display { + padding: var(--contentInnerPadding); + min-height: 300px; + position: relative; +} +.playlist-page .playlist-display .artworkContainer { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: 0; + margin-top: calc(var(--navigationBarHeight) * -1); + margin-bottom: -10px; + padding: 0; + -webkit-mask-image: radial-gradient(at top left, black, transparent 70%), radial-gradient(at top right, black, transparent 70%), linear-gradient(180deg, #c8c8c8, transparent 98%); + opacity: 0.7; + animation: playlistArtworkFadeIn 1s var(--appleEase); +} +.playlist-page .playlist-display .artworkContainer .artworkMaterial > img { + filter: brightness(100%) blur(80px) saturate(100%) contrast(1); + object-position: center; + object-fit: cover; + width: 100%; + height: 100%; + transform: unset; +} +.playlist-page .playlist-display .playlistInfo { + z-index: 1; + position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} +.playlist-page .playlist-display .playlistInfo > .row { + width: calc(100% - 32px); +} +.playlist-page .playlist-display .playlistInfo .playlist-info { + flex-shrink: unset; + display: flex; + flex-flow: column; + justify-content: flex-end; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-name { + font-weight: 700; + font-size: 1.6rem; + margin-right: 6px; + flex-shrink: unset; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .nameEdit { + font-weight: 700; + font-size: 1.6rem; + margin-bottom: 6px; + margin-right: 6px; + flex-shrink: unset; + background: transparent; + border: 0px; + color: inherit; + font-family: inherit; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-artist { + font-size: 20px; + margin-bottom: 6px; + margin-right: 6px; + flex-shrink: unset; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-desc { + box-sizing: border-box; + font-size: 14px; + flex-shrink: unset; + margin-right: 5px; + max-height: 100px; + position: relative; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-desc .content { + height: 100px; + -webkit-mask-image: -webkit-gradient(linear, left 50%, left 90%, from(#000000), to(rgba(0, 0, 0, 0))); +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-desc .more-btn { + appearance: none; + position: absolute; + right: 0; + bottom: 0; + padding: 0 5px; + font-size: 14px; + color: var(--keyColor); + background-color: transparent; + border: 0px; + cursor: pointer; + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + justify-content: flex-end; + align-items: flex-end; + font-weight: 600; + font-family: inherit; + text-transform: uppercase; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-desc-expanded { + box-sizing: border-box; + font-size: 14px; + position: relative; +} +.playlist-page .playlist-display .playlistInfo .playlist-info .playlist-desc-expanded .more-btn { + appearance: none; + position: absolute; + right: 0; + bottom: 0; + padding: 0 5px; + font-size: 14px; + color: var(--keyColor); + background-color: transparent; + border: 0px; + cursor: pointer; + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + justify-content: flex-end; + align-items: flex-end; + font-weight: 600; + font-family: inherit; + text-transform: uppercase; +} +.playlist-page .friends-info { + display: flex; + flex-flow: column; +} +.playlist-page .friends-info .badge-container { + display: flex; + flex-flow: wrap; +} +.playlist-page .friends-info .badge-container .socialBadge { + width: 40px; + height: 40px; + border-radius: 100%; + overflow: hidden; + box-shadow: var(--mediaItemShadow-ShadowSubtle); + transition: transform 0.2s var(--appleEase); + margin: 6px; +} +.playlist-page .friends-info .badge-container .socialBadge:hover { + transform: scale(1.2); +} +.playlist-page .friends-info .friends-name { + text-align: center; + font-size: 0.9em; + margin: 8px; +} +.playlist-page .playlist-time { + font-size: 0.9em; + margin: 6px; + opacity: 0.7; +} +.playlist-page.inline-playlist { + overflow: hidden; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 6; + position: sticky; + margin-top: calc(var(--navigationBarHeight) * -1); +} +.playlist-page.inline-playlist .floating-header { + opacity: 1; + top: 0px; + z-index: 6; + padding: 1em; + backdrop-filter: unset; + background: black; +} +.playlist-page.inline-playlist .floating-header h3 { + display: none; +} +.playlist-page.inline-playlist .playlist-inner { + background: black; + width: 80%; + height: 100%; + overflow: overlay; + box-shadow: var(--ciderShadow-Generic); + border-radius: var(--mediaItemRadius) var(--mediaItemRadius) 0px 0px; +} +.playlist-page.inline-playlist .playlist-inner .close-btn { + position: sticky; + top: 16px; + left: 16px; + margin-left: 16px; + z-index: 7; +} +@keyframes playlistArtworkFadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 0.7; + } +} +.collection-page { + padding-bottom: 128px; +} +.collection-page .top-fab { + height: 52px; + width: 52px; + position: fixed; + bottom: 32px; + right: 32px; + border-radius: 100%; + background: #3c3c3c; + border: 0px; + appearance: none; + box-shadow: var(--ciderShadow-Generic); +} +.collection-page .top-fab > svg { + height: 50%; + color: #eee; + pointer-events: none; +} +.collection-page .top-fab:hover { + background: #646464; +} +.collection-page .top-fab:active { + background: var(--keyColor); +} +.collection-page .header-text { + margin-bottom: 32px; +} +/* Artist Page */ +.artist-page { + padding: 0px; + top: 0; +} +.artist-page .floating-header { + position: sticky; + top: 0; + left: 0; + border-bottom: 1px solid rgba(200, 200, 200, 0.05); + z-index: 6; + padding: 0px 1em; + backdrop-filter: blur(32px); + background: rgba(0, 0, 0, 0.25); + top: var(--navigationBarHeight); + transition: opacity 0.1s var(--appleEase); +} +.artist-page.animated .artist-header .more-btn-round { + position: absolute; + bottom: 22px !important; + right: 28px; +} +.artist-page .artist-header { + color: white; + display: flex; + align-items: center; + justify-content: space-between; + min-height: 400px; + position: relative; + pointer-events: none; +} +.artist-page .artist-header .header-content { + z-index: 1; + margin-top: -16px; +} +.artist-page .artist-header .artworkContainer { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: 0; + padding: 0; + -webkit-mask-image: radial-gradient(at top left, black, transparent 70%), radial-gradient(at top right, black, transparent 70%), linear-gradient(180deg, #c8c8c8, transparent 98%); + opacity: 0.7; + animation: playlistArtworkFadeIn 1s var(--appleEase); +} +.artist-page .artist-header .artworkContainer .artworkMaterial > img { + filter: brightness(100%) blur(80px) saturate(100%) contrast(1); + object-position: center; + object-fit: cover; + width: 100%; + height: 100%; + transform: unset; +} +.artist-page .artist-header .more-btn-round { + position: absolute; + bottom: 82px; + right: 28px; +} +.artist-page .artist-header .animated { + width: 100%; + height: 100%; + align-self: center; + position: absolute; + overflow: hidden; + box-shadow: rgba(0, 0, 0, 0.5) 0 0 0 1000000px inset; +} +.artist-page .artist-header .animated video { + overflow: hidden; + height: 100%; + width: 100%; + min-height: 56.25vw; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.artist-page .artist-header .row .col.flex-center { + z-index: 4; +} +.artist-page .artist-image { + width: 200px; + height: 200px; + margin: 32px; + position: relative; +} +.artist-page .artist-image .overlay-play { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + background: rgba(0, 0, 0, 0.5); + transition: opacity 0.1s var(--appleEase); + border-radius: 100%; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + appearance: none; + border: 0px; + padding: 0px; +} +.artist-page .artist-image .overlay-play:hover { + opacity: 1; +} +.artist-page .artist-image .overlay-play:active { + background: var(--selected-click); +} +.artist-page .artist-image .overlay-play > svg { + width: 70%; +} +.artist-page .artist-play { + width: 32px; + height: 32px; + background: rgba(100, 100, 100, 0.5); + box-shadow: var(--ciderShadow-Generic); + border-radius: 100%; + box-shadow: var(--mediaItemShadow); + display: none; + cursor: pointer; + appearance: none; + border: 0px; + padding: 0px; +} +.artist-page .artist-play:hover { + filter: brightness(125%); +} +.artist-page .artist-play:active { + filter: brightness(75%); + transform: scale(0.98); + transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase); +} +.artist-page .artist-title .artist-play { + transform: translateY(3px); + margin: 14px; +} +.artist-page .artist-title.artist-animation-on { + width: 100%; + flex: unset; + margin-left: 0.5em; + color: whitesmoke; + position: absolute; + bottom: 0; +} +.artist-page .artist-title.artist-animation-on .artist-play { + display: block; +} +.artist-page .artist-body { + padding: 0px var(--contentInnerPadding) 0px var(--contentInnerPadding); + margin: -140px 20px; +} +.artist-page.animated > .artist-body { + padding: 0px var(--contentInnerPadding) 0px var(--contentInnerPadding); + margin-top: -57px; +} +.artist-page .showmoreless { + font-family: inherit; + font-size: 16px; + font-weight: 500; + background: transparent; + border: 0px; + border-radius: 6px; + appearance: none; + color: var(--keyColor); + padding: 8px 12px; + cursor: pointer; + margin-top: 12px; + float: right; +} +.artist-page .showmoreless:hover { + background: rgba(200, 200, 200, 0.1); +} +/* Artist Page End */ +.settings-page { + padding: 0px; +} +.settings-page .md-option-header { + padding: 1.25em 1.25em; + border-bottom: unset; + border-top: unset; + font-weight: 600; + font-size: 1em; + background: rgba(255, 255, 255, 0.03); +} +.settings-page .settings-option-body { + margin: 16px; +} +.home-page { + top: 0; + padding-top: var(--navbarHeight); +} +.home-page .md-btn-replay { + background: var(--replayGradient); + border: 0px; + box-shadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.2); + text-transform: uppercase; + font-weight: bold; +} +.home-page .md-btn-replay--hero { + font-size: 1em; + padding: 16px; + background: var(--replayGradient); + border: 0px; + box-shadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.2); + margin-top: 1em; + font-size: 0.9em; + text-transform: uppercase; + font-weight: bold; +} +.home-page .artist-feed-card { + position: absolute; + bottom: 0; + left: 10%; + z-index: 1; + background: black; + width: 80%; + height: 96%; + overflow: scroll; + border-radius: 10px; +} +.home-page .col.madeforyou-col { + width: 420px; + min-width: 0px; + max-width: 420px; +} +.home-page .well.artistfeed-well { + margin-top: 0px; + height: 392px; + align-content: flex-start; +} +.home-page .hint-text { + font-size: 0.9rem; + color: rgba(200, 200, 200, 0.7); +} +.home-page .user-icon { + border-radius: 100%; + width: 128px; + height: 128px; + overflow: hidden; + box-shadow: var(--mediaItemShadow-Shadow); + margin: 16px; +} +.home-page .well.profile-well { + flex-direction: column; + justify-content: center; + align-items: center; +} +.home-page .well.profile-well .name { + margin: 4px; + font-weight: 500; +} +.home-page .well.profile-well .handle { + margin: 4px; + opacity: 0.7; + font-weight: 500; +} +.replay-page { + --replayTextShadow: 0px 3px 2px #6f3f52; +} +.replay-page .replay-period { + height: 200px; + width: 200px; + margin: 6px; + border-radius: var(--mediaItemRadius); + overflow: hidden; + cursor: pointer; + transition: transform 0.2s var(--appleEase); + transition-delay: 0.1s; + align-self: center; +} +.replay-page .replay-period:hover { + transform: translateY(-6px); + transition-delay: 0s; +} +.replay-page .replay-period .artwork-container { + height: 200px; + width: 200px; +} +.replay-page .replay-playlist-container .cd-mediaitem-square { + height: 230px; + width: 230px; +} +.replay-page .replay-playlist-container .cd-mediaitem-square .info-rect { + display: none; +} +.replay-page .replay-video { + max-height: 300px; + max-width: 800px; + margin: 0 auto; +} +.replay-page .replay-video .mediaitem-artwork { + max-height: 300px; + max-width: 800px; +} +.replay-page .replay-video .mediaitem-artwork .animatedartwork-view-box .animated video { + object-fit: cover; +} +.replay-page .top-genres-container .genre-name { + font-size: 0.9em; + margin: 6px 0px; + font-weight: 500; +} +.replay-page .top-genres-container .genre-count { + width: 100%; + height: 32px; + background: #ffffff14; + border-radius: 10px; + overflow: hidden; +} +.replay-page .top-genres-container .genre-count .genre-count-bar { + height: 100%; + width: 0%; + background: var(--keyColor); + display: flex; + justify-content: center; + align-items: center; + min-width: 32px; + font-size: 0.9em; + font-weight: 500; +} +.replay-page .cd-mediaitem-square { + transition: transform 0.2s var(--appleEase); + transition-delay: 0.1s; +} +.replay-page .cd-mediaitem-square .mediaitem-artwork { + animation: replayFadeIn 0.5s var(--appleEase); +} +.replay-page .cd-mediaitem-square:hover { + transform: scale(1.1); + transition-delay: 0s; +} +@keyframes replayFadeIn { + 0% { + transform: translateY(10px) scale(0.9); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} +.replay-page .replay-viewport { + background: var(--replayGradient); + padding: 16px 40px; + border-radius: 10px; + box-shadow: var(--mediaItemShadow), var(--mediaItemShadow-Shadow); + color: rgba(238, 238, 238, 0.86); +} +.replay-page .replay-viewport .replay-header { + text-align: center; + font-size: 3em; + text-shadow: var(--replayTextShadow); +} +.replay-page .replay-card { + background: transparent; + border: 0px; +} +:root { + --appleEase: cubic-bezier(0.42, 0, 0.58, 1); + --mediaItemShadow: inset 0px 0px 0px 1px rgba(200, 200, 200, 0.16); + --mediaItemShadow-Shadow: 0 8px 40px rgba(0, 0, 0, 0.55); + --mediaItemShadow-ShadowSubtle: 0 4px 14px rgba(0, 0, 0, 0.1); + --ciderShadow-Generic: var(--mediaItemShadow), 0 8px 40px rgb(0 0 0 / 0.55); + --mediaItemRadius: 6px; + --mediaItemRadiusRound: 100%; + --contentInnerPadding: 16px; + --navbarHeight1: 48px; + --navbarHeight2: 0px; + --navbarHeight: calc(var(--navbarHeight1) + var(--navbarHeight2)); + --selected: rgba(130, 130, 130, 0.3); + --selected-click: rgba(80, 80, 80, 0.3); + --hover: rgba(200, 200, 200, 0.1); + --keyColor: #fa586a; + --keyColor-rgb: 250, 88, 106; + --keyColor-rollover: #ff8a9c; + --keyColor-rollover-rgb: 255, 138, 156; + --keyColor-pressed: #ff7183; + --keyColor-pressed-rgb: 255, 113, 131; + --keyColor-deepPressed: #ff8a9c; + --keyColor-deepPressed-rgb: 255, 138, 156; + --keyColor-disabled: rgba(250, 88, 106, 0.35); + --navigationBarHeight: 38px; + --modalBackground: #262626; + --songProgressColor: var(--keyColor); + --songProgressBackground: #333; + --textColor: #eee; + --replayGradient: linear-gradient(45deg, hsl(248, 58%, 29%), hsl(13, 41%, 42%)); +} +*:focus-visible { + outline: 2px solid var(--keyColor); +} +html, +body { + margin: 0; + padding: 0; + overflow: hidden; + width: 100%; + height: 100%; + box-sizing: border-box; + background-size: cover; + background-position: center; + background: #0000; + font-family: "Inter var experimental", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + transition: opacity 0.1s var(--appleEase); +} +a:-webkit-any-link { + color: var(--keyColor); +} +hr { + appearance: none; + border: none; + height: 1px; + background-color: rgba(255, 255, 255, 0.2); +} +body[loading] .app-navigation { + pointer-events: none; +} +body.stopanimation * { + animation: unset !important; +} +body.stopanimation * .loadbar-sound { + display: none; +} +body.notransparency::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0.5; + background-image: url(data:image/png;base64,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); +} +*, +*:before, +*:after { + box-sizing: inherit; +} +/* Modern style overlay scrollbars */ +::-webkit-scrollbar { + width: 16px; + height: 24px; +} +::-webkit-scrollbar-button { + display: none; +} +::-webkit-scrollbar-track-piece { + background: transparent; +} +::-webkit-scrollbar-thumb { + background: transparent; + border: 6px solid transparent; + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.5); + border-radius: 16px; + min-height: 64px; + transition: border 1s; +} +::-webkit-scrollbar-thumb:hover { + border: 5px solid transparent; + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.8); +} +[disabled] { + pointer-events: none; + opacity: 0.5; +} +#app { + --color1: rgba(30, 30, 30, 0.3); + --color2: rgba(15, 15, 15, 0.3); + --bgColor: transparent; + --bgWidth: 0px; + --bgHeight: 0px; + --chromeHeight1: 55px; + --chromeHeight2: 0px; + --chromeHeight: calc(var(--chromeHeight1) + var(--chromeHeight2)); + width: 100%; + height: 100%; + background: var(--color1); + color: var(--textColor); + user-select: none; + margin: 0 auto; + position: relative; + overflow: hidden; + background-size: 400% 400%; +} +#app.simplebg { + background: #0e0e0e; +} +#app.simplebg::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0.5; + z-index: 0; + background-image: url(data:image/png;base64,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); +} +#app.simplebg .app-chrome { + z-index: 1; +} +.bgGradientMaterial-base { + position: relative; +} +.bgGradientMaterial-base::before { + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 250%; + background-image: var(--bgColor); + content: ""; + z-index: -1; + transform: rotateZ(0deg); + transform-origin: center; + animation: bgRotate 10s linear infinite; + filter: brightness(100%) saturate(200%) contrast(1.5); +} +@keyframes bgRotate { + 0% { + transform: rotateZ(0deg); + } + 100% { + transform: rotateZ(360deg); + } +} +[hidden] { + display: none !important; +} +input[type="text"], +input[type="number"] { + background: #1c1c1c; + border-radius: 3px; + border: 1px solid rgba(200, 200, 200, 0.25); + color: #eee; + padding: 6px; + font-size: 1em; + font-family: inherit; +} +.bg-artwork--placeholder { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #222; + z-index: -1; + background-size: cover; + background-position: center; + opacity: 0.7; +} +.bg-artwork { + position: absolute; + width: 200%; + background: var(--artwork); + filter: brightness(200%) blur(180px) saturate(280%) contrast(2); + opacity: 1; + transition: opacity 0.25s var(--appleEase); + pointer-events: none; + transform: translateZ(0px); + animation: rotateBg 35s linear infinite; + backface-visibility: hidden; +} +@keyframes rotateBg { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.bg-artwork-container { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + pointer-events: none; + transform: translateZ(0px); + z-index: -1; +} +.bg-artwork-container .bg-artwork.a { + top: 0; + left: 0; +} +.bg-artwork-container .bg-artwork.b { + bottom: 0; + right: 0; + animation-direction: reverse; + animation-delay: 10s; +} +.bg-artwork-container.noanimation .bg-artwork { + animation: none; +} +.artworkMaterial { + position: relative; + height: 100%; + width: 100%; + overflow: hidden; + pointer-events: none; +} +.artworkMaterial > img { + position: absolute; + width: 200%; + opacity: 0.5; + filter: brightness(200%) blur(180px) saturate(280%) contrast(2); +} +.artworkMaterial > img:first-child { + top: 0; + left: 0; +} +.artworkMaterial > img:last-child { + bottom: 0; + right: 0; + transform: rotate(180deg); +} +[artwork-hidden] { + transition: opacity 0.25s var(--appleEase); + opacity: 0; +} +input[type="range"].web-slider { + -webkit-appearance: none; + height: 4px; + background: rgba(255, 255, 255, 0.6); + border-radius: 5px; + background-size: 70% 100%; + background-repeat: no-repeat; +} +input[type="range"].web-slider::-webkit-slider-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: #ffffff; + cursor: ew-resize; + box-shadow: 0 0 2px 0 #555; +} +input[type=range].web-slider::-webkit-slider-runnable-track { + -webkit-appearance: none; + box-shadow: none; + border: none; + background: transparent; +} +.nopadding { + padding: 0px; +} +#app-main { + display: flex; + width: 100%; + height: 100%; + flex-direction: column; + opacity: 1; + overflow: hidden; +} +#app-sidebar { + /* background-color: var(--color1); */ + height: 100%; + width: 260px; + display: flex; + flex-direction: column; + flex: 0 0 auto; + position: relative; +} +#app-navbar { + height: 40px; + width: 100%; + background: rgba(30, 30, 30, 0.85); + position: sticky; + top: 0px; + left: 0; + z-index: 2; + backdrop-filter: blur(16px) saturate(180%); +} +#app-content { + background-color: var(--color2); + height: 100%; + width: 100%; + overflow-y: scroll; + overflow-y: overlay; + overflow-x: hidden; + border-radius: 10px 0px 0px 0px; + border-left: 1px solid rgba(0, 0, 0, 0.25); + border-top: 1px solid rgba(0, 0, 0, 0.25); + position: relative; +} +.app-drawer { + width: 300px; + flex: 0 0 auto; + position: absolute; + right: 16px; + top: 3%; + background: #1c1c1c8f; + border-radius: 12px; + z-index: 9; + height: 94%; + backdrop-filter: blur(40px) saturate(180%); + box-shadow: var(--ciderShadow-Generic); + overflow: hidden; +} +.app-drawer .bgArtworkMaterial { + display: none; + position: absolute; + width: 100%; + height: 100%; +} +.app-drawer .bgArtworkMaterial .bg-artwork-container .bg-artwork { + filter: brightness(80%) blur(180px) saturate(180%) contrast(1); +} +.search-input-container { + position: relative; +} +.search-input { + width: 100%; + padding: 6px; + border-radius: 6px; + border: 1px solid rgba(200, 200, 200, 0.1); + font-family: inherit; + font-size: 14px; + background: rgba(100, 100, 100, 0.25); + color: #c8c8c8; + font-weight: 500; + padding-left: 32px; + position: relative; + filter: contrast(0.1); +} +.search-input:focus { + outline: none; + border-bottom: 1px solid var(--keyColor); +} +.search-input--icon { + content: ''; + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0px; + left: 0px; + background-image: url('assets/search.svg'); + background-position: 10px; + background-repeat: no-repeat; + background-size: 12px; + pointer-events: none; + opacity: 0.55; +} +.app-sidebar-header { + font-size: 14px; + padding: 11px; + font-weight: 600; +} +.app-sidebar-header-text { + font-size: 11px; + margin: 6px 3px; + font-weight: 600; + opacity: 0.5; +} +.app-sidebar-footer { + border-top: 1px solid rgba(200, 200, 200, 0.15); + padding: 11px; +} +.app-sidebar-footer .app-playback-controls { + margin: 0 auto; +} +.app-sidebar-footer .app-playback-controls .control-buttons { + display: flex; + justify-content: center; + align-content: center; +} +.app-sidebar-footer .app-playback-controls .volume { + display: flex; +} +.app-sidebar-button { + width: 100%; + padding: 0px; + font-family: inherit; + display: flex; + border-radius: 6px; + border: 1px solid rgba(200, 200, 200, 0.05); + background: rgba(100, 100, 100, 0.25); + color: #eee; + font-weight: 500; + align-items: center; +} +.app-sidebar-button.active { + background: rgba(200, 200, 200, 0.15); + animation: usermenuBtnClick 0.3s cubic-bezier(0.36, 0, 0.66, -0.56); +} +@keyframes usermenuBtnClick { + 0% { + transform: translateY(0px); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0px); + } +} +.app-sidebar-button > .sidebar-user-icon { + width: 32px; + height: 32px; + border-radius: 100%; + background-image: var(--artwork); + margin: 10px; + flex: 0 0 auto; + box-shadow: var(--mediaItemShadow); + background-size: contain; +} +.app-sidebar-button > .sidebar-user-text { + width: 100%; + display: flex; + font-size: 14px; + flex-direction: column; + text-align: center; + margin-right: 35px; +} +.app-sidebar-button > .sidebar-user-text .fullname { + text-align: left; +} +.app-sidebar-button > .sidebar-user-text .handle-text { + font-size: 12px; + opacity: 0.7; + text-align: left; +} +.app-sidebar-notification { + text-align: center; + font-size: 12px; + min-height: 36px; + display: flex; + justify-content: center; + align-items: center; + border-top: 1px solid rgba(200, 200, 200, 0.15); + background: rgba(0, 0, 0, 0.15); + flex-direction: column; + padding: 10px 0px; +} +.app-sidebar-notification.libraryNotification { + flex-direction: row; + padding: 0px; +} +.app-sidebar-notification.libraryNotification .message { + flex-grow: 1; +} +.app-sidebar-notification.libraryNotification .spinner { + width: 46px; + height: 30px; + margin-left: 1em; +} +.app-sidebar-content { + padding: 8px; + overflow-y: scroll; + overflow-y: overlay; + height: 100%; +} +.search-hints-container { + top: 44px; + position: absolute; + width: 100%; + padding: 10px; + z-index: 1; +} +.search-hints-container .search-hints { + background: #242424; + padding: 6px; + border-radius: 6px; + width: 100%; + box-shadow: var(--ciderShadow-Generic); +} +.search-hints-container .search-hints .search-hint { + background: transparent; + display: block; + width: 100%; + text-align: left; + color: #eee; + font-family: inherit; + font-size: 15px; + padding: 8px 12px; + border: 0px; + appearance: none; + border-radius: 6px; + margin: 2px 0px; +} +.search-hints-container .search-hints .search-hint:hover { + background: var(--keyColor); +} +.usermenu-container { + top: 0px; + z-index: 200001 !important; + position: absolute; + width: 100%; + padding: 10px; + z-index: 1; +} +.usermenu-container .usermenu-body { + background: #242424; + padding: 6px; + border-radius: 6px; + width: 100%; + box-shadow: var(--ciderShadow-Generic); +} +.usermenu-container .usermenu-body .usermenu-item { + background: transparent; + display: block; + width: 100%; + text-align: left; + color: #eee; + font-family: inherit; + font-size: 15px; + padding: 8px 12px; + border: 0px; + appearance: none; + border-radius: 6px; + margin: 2px 0px; +} +.usermenu-container .usermenu-body .usermenu-item:hover { + background: var(--keyColor); +} +.usermenu-container .usermenu-body .usermenu-item .usermenu-item-icon { + position: relative; + top: 1.5px; + right: 3px; + display: table-cell; +} +.usermenu-container .usermenu-body .usermenu-item .usermenu-item-name { + position: relative; + bottom: 2px; + padding-left: 5px; + display: table-cell; +} +.context-menu { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0); + z-index: 100; +} +.context-menu .context-menu-item { + background: transparent; + display: flex; + width: 100%; + text-align: left; + color: #eee; + font-family: inherit; + font-size: 14px; + padding: 6px 12px; + border: 0px; + appearance: none; + border-radius: 6px; + margin: 2px 0px; +} +.context-menu .context-menu-item:hover { + background: var(--selected); + cursor: pointer; +} +.context-menu .context-menu-item:active { + background: var(--selected-click); +} +.context-menu .context-menu-body { + background: #242424; + padding: 6px; + border-radius: 6px; + box-shadow: var(--ciderShadow-Generic); +} +.context-menu .context-menu-body.context-menu-open { + animation-duration: 0.1s; + animation-name: contextMenuIn; + animation-iteration-count: 1; + animation-easings: var(--appleEase); +} +.context-menu .context-menu-body.context-menu-close { + animation-duration: 0.1s; + animation-name: contextMenuOut; + animation-iteration-count: 1; + animation-easings: var(--appleEase); +} +@keyframes contextMenuIn { + 0% { + transform: scale(0.9); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} +@keyframes contextMenuOut { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.9); + opacity: 0; + } +} +.hidden-opacity { + opacity: 0; + height: 0px; + width: 0px; + margin: 0px; +} +.spinner { + background-image: url("assets/spinner.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + width: 50px; + height: 50px; + display: inline-block; +} +.app-sidebar-content::-webkit-scrollbar { + display: none; +} +.app-sidebar-content:hover::-webkit-scrollbar { + display: initial; +} +.app-sidebar-item { + display: flex; + width: 100%; + padding: 8px 12px; + font-weight: 400; + font-family: inherit; + font-size: 14px; + margin: 3px 0px; + border: 1px solid transparent; + border-radius: 6px; + background: transparent; + color: #eee; + transition: transform 0.1s; + text-align: left; +} +.app-sidebar-item.app-sidebar-item-playlist { + -webkit-user-drag: element; + overflow: hidden; + text-overflow: ellipsis; +} +.app-sidebar-item.app-sidebar-item-playlist .presentNotice { + align-self: center; + margin-left: 8px; + text-transform: uppercase; + font-size: 0.7em; + opacity: 0.6; +} +.app-sidebar-item:hover { + border: 1px solid rgba(200, 200, 200, 0.05); + background: rgba(200, 200, 200, 0.15); +} +.app-sidebar-item:active { + border: 1px solid rgba(200, 200, 200, 0.05); + background: rgba(200, 200, 200, 0.15); + transform: scale(0.98); + transition: transform 0s; +} +.app-sidebar-item.active { + border: 1px solid rgba(200, 200, 200, 0.05); + background: rgba(200, 200, 200, 0.15); + transform: scale(1); + transition: transform 0s; +} +.app-sidebar-item.active::after { + content: ''; + width: 4px; + height: 16px; + display: block; + position: absolute; + top: calc(100% - 72%); + border-radius: 10px; + left: 0px; + background: var(--keyColor); +} +.app-chrome { + background: var(--color1); + width: 100%; + height: var(--chromeHeight1); + display: flex; + flex-direction: row; + -webkit-app-region: drag; +} +.mv-chrome { + position: absolute; + top: 0; + right: 0; + width: 90%; + height: 55px; + -webkit-app-region: drag; +} +.app-chrome .app-chrome--left, +.app-chrome .app-chrome--center, +.app-chrome .app-chrome--right { + height: 100%; + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.app-chrome .app-chrome--left { + width: 30%; + justify-content: left; + -webkit-app-region: drag; +} +.app-chrome .app-chrome--center { + width: 40%; +} +.app-chrome .app-chrome--right { + width: 30%; + justify-content: right; +} +.app-chrome .app-chrome-item { + height: 100%; + width: auto; + display: flex; + justify-content: center; + align-items: center; + -webkit-app-region: no-drag; + height: auto; +} +.app-chrome .app-chrome-item.generic { + width: 50px; + opacity: 0.7; +} +.app-chrome .app-chrome-item.volume { + width: 100px; + margin-right: 6px; +} +.volume-button { + background-image: url("assets/feather/volume-2.svg"); + height: 15px; + width: 30px; + padding: 0px; + background: transparent; + border: 0px; + border-radius: 0px; + box-shadow: unset; + background-size: 12px; + background-position: center; + background-repeat: no-repeat; + opacity: 0.7; + border-radius: 6px; +} +.volume-button:active, +.volume-button--small:active { + transform: scale(0.9); +} +.volume-button.active, +.volume-button--small.active { + background-image: url("assets/feather/volume.svg"); +} +.volume-button--small { + border-radius: 6px; + color: inherit; + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + height: 15px; + width: 30px; + border: 0px; + box-shadow: unset; + opacity: 0.7; + background-image: url("assets/feather/volume-2.svg"); +} +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #323232; + cursor: default; + box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); + transition: all var(--appleTransition); +} +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:hover { + background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px); + transform: scale(1.2); +} +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:active { + background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px); + transform: scale(1); +} +.app-chrome .app-chrome-item.volume > input[type=range] { + -webkit-appearance: none; + height: 4px; + background: rgba(255, 255, 255, 0.4); + border-radius: 5px; + background-size: 70% 100%; + background-repeat: no-repeat; + width: 100%; +} +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + box-shadow: none; + border: none; + background: transparent; +} +.app-chrome .back-button { + height: 100%; + width: 60px; +} +.app-chrome .app-chrome-item.full-height { + height: 100%; +} +.app-chrome .app-chrome-item > .app-mainmenu { + width: 110px; + font-size: 13px; + background: url("assets/AppChromeBtn.svg"); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + height: 70%; + margin-right: 16px; + margin-left: 16px; + margin-top: 1.5px; + border: 0px; + border-radius: 6px; +} +.app-chrome .app-chrome-item > .app-mainmenu:hover { + background-color: var(--selected); +} +.app-chrome .app-chrome-item > .app-mainmenu:active, +.app-chrome .app-chrome-item > .app-mainmenu.active { + background-color: var(--selected-click); +} +.app-chrome .app-chrome-item > .app-mainmenu.active { + background-image: url("assets/AppChromeBtn-Open.svg"); +} +.app-chrome .app-chrome-item > .window-controls { + width: 138px; + font-size: 13px; + height: 100%; + display: flex; +} +.app-chrome .app-chrome-item > .window-controls > div { + height: 100%; + width: 32px; +} +.app-chrome .app-chrome-item > .window-controls > div:hover { + background: rgba(200, 200, 200, 0.1); +} +.app-chrome .app-chrome-item > .window-controls > div.close { + width: 100%; + height: 100%; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; +} +.app-chrome .app-chrome-item > .window-controls > div.close:hover { + background-color: #c42b1c; +} +.app-chrome .app-chrome-item > .window-controls > div.minmax { + background-image: var(--gfx-maxBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + width: 100%; + height: 100%; +} +.app-chrome .app-chrome-item > .window-controls > div.minmax.restore { + background-image: var(--gfx-restoreBtn); +} +.app-chrome .app-chrome-item > .window-controls > div.minimize { + background-image: var(--gfx-minBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + width: 100%; + height: 100%; +} +body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minimize { + height: 12px; + width: 12px; + background-color: #ff5c5c; + border-radius: 50%; + display: inline-block; + margin: auto 4px; + color: #820005; + -webkit-app-region: no-drag; + background-image: unset; +} +body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls { + width: 67px; +} +body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minmax { + height: 12px; + width: 12px; + background-color: #ffbd4c; + border-radius: 50%; + display: inline-block; + margin: auto 4px; + -webkit-app-region: no-drag; + background-image: unset; +} +body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.close { + height: 12px; + width: 12px; + background-color: #00ca56; + border-radius: 50%; + display: inline-block; + margin: auto 4px auto 4px; + -webkit-app-region: no-drag; + background-image: unset; +} +.app-chrome .app-chrome-item.playback-controls { + width: 80%; + height: 90%; + display: flex; + max-width: 500px; + border-left: 1px solid rgba(200, 200, 200, 0.08); + border-right: 1px solid rgba(200, 200, 200, 0.08); + -webkit-app-region: drag; +} +.app-chrome .app-chrome-item > .app-playback-controls { + display: flex; + justify-content: center; + align-content: center; + width: 100%; + -webkit-app-region: no-drag; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-name { + font-weight: 600; + text-align: center; + font-size: 13px; + height: 1.3em; + line-height: 1.3em; + white-space: nowrap; + max-width: 360px; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-name .song-name-normal { + height: inherit; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-name .explicit-icon { + background-image: url("assets/explicit.svg"); + height: 9px; + width: 13px; + filter: contrast(0); + background-repeat: no-repeat; + margin-left: 3px; +} +.app-chrome .app-chrome-item > .app-playback-controls .lossless-icon { + background-image: url("assets/lossless.svg") !important; +} +.app-chrome .app-chrome-item > .app-playback-controls .ppe-icon { + background-image: url("assets/ppe.svg") !important; +} +.app-chrome .app-chrome-item > .app-playback-controls .audio-type { + filter: contrast(0); + background-repeat: no-repeat; + background-size: contain; + height: 15px; + width: 15px; + position: absolute; + right: 0; + margin-bottom: 15px; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-duration p { + font-weight: 400; + font-size: 10px; + height: 1.2em; + line-height: 1.3em; + overflow: hidden; + margin: 0 0 0 0.25em; +} +.app-playback-controls:hover .marquee { + animation: unset; +} +.app-playback-controls:hover .marquee.song-artist { + overflow: hidden; +} +.app-playback-controls:hover .marquee .song-artist { + overflow: hidden; +} +.app-playback-controls:hover .marquee.song-name { + overflow: hidden; +} +.app-playback-controls:hover .marquee::after { + content: none !important; + display: none; +} +.marquee { + animation: marquee 15s linear infinite; +} +.marquee.song-artist { + overflow: unset; +} +.marquee .song-artist { + overflow: unset; +} +.marquee.song-name { + overflow: unset; +} +.marquee::after { + content: attr(data-value); +} +.app-chrome .app-chrome-item > .app-playback-controls .song-progress { + position: absolute; + bottom: 0px; + left: 0px; + background: transparent; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-progress:hover > input[type=range]::-webkit-slider-thumb { + opacity: 1; + transform: scale(1); + z-index: 1; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-progress > input[type=range] { + appearance: none; + width: 100%; + height: 4px; + background-color: rgba(200, 200, 200, 0.1); + border-radius: 2px; + margin: 0; +} +.app-chrome .app-chrome-item > .app-playback-controls .song-progress > input[type=range]::-webkit-slider-thumb { + opacity: 0; + transform: scale(0.5); + -webkit-appearance: none; + appearance: none; + width: 12px; + height: 12px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; + transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase); +} +.app-chrome .app-chrome-item > .app-playback-controls .song-progress > input[type=range]::-moz-range-thumb { + width: 8px; + height: 8px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; +} +@keyframes marquee { + from { + transform: translateX(0); + } + to { + transform: translateX(-140%); + } +} +.app-chrome .app-chrome-item > .app-playback-controls .artwork { + width: 42px; + height: 42px; + background-image: var(--artwork); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + border-radius: 4px; + flex: 0 0 auto; + margin: 6px; + image-rendering: -webkit-optimize-contrast; +} +.app-chrome .app-chrome-item > .app-playback-controls .actions { + width: 42px; + height: 42px; + border-radius: 2px; + flex: 0 0 auto; + margin: 6px; + display: flex; + justify-content: center; + align-items: center; + filter: contrast(0.8); +} +.app-chrome .app-chrome-item > .app-playback-controls .actions .lcdMenu { + height: 100%; + width: 100%; + padding: 0px; + margin: 0px; + background: transparent; + border: 0px; + appearance: none; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; +} +.app-chrome .app-chrome-item > .app-playback-controls .actions .lcdMenu:focus { + outline: none; +} +.app-chrome .app-chrome-item > .app-playback-controls .actions .lcdMenu:hover { + background: var(--hover); +} +.app-chrome .app-chrome-item > .app-playback-controls .actions .lcdMenu:active { + background: var(--selected-click); + transform: scale(0.95); +} +.app-chrome .app-chrome-item > .app-playback-controls .actions .lcdMenu .svg-icon { + --url: url('views/svg/more.svg') !important; +} +.app-chrome .app-chrome-item > .app-playback-controls .playback-info { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + position: relative; + overflow: hidden; +} +.app-chrome .app-chrome-item > .app-playback-controls .playback-info > .song-progress { + width: 100%; +} +.app-navigation { + background: var(--color1); + height: calc(100% - var(--chromeHeight)); + width: 100%; + display: flex; + position: relative; +} +.app-chrome .app-chrome-item > .app-playback-controls > div > .song-artist-album { + font-weight: 400; + font-size: 12px; + text-align: center; + /*height: 1.2em; + line-height: 1.2em;*/ + z-index: 1; + align-items: center; + justify-content: center; + width: 80%; + max-width: 340px; + overflow: hidden; +} +.app-chrome .app-chrome-item > .app-playback-controls > div > .song-artist-album .song-artist-album-content { + font-weight: 400; + font-size: 12px; + text-align: center; + width: 100%; +} +.app-chrome .app-chrome-item > .app-playback-controls > div > .song-artist-album .song-artist-album-content.song-artist-normal { + height: inherit; +} +.app-chrome .app-chrome-item > .app-playback-controls > div > .song-artist-album.song-artist-marquee > marquee { + margin-bottom: -3px; +} +.display--small { + display: none !important; +} +.web-slider.display--small { + margin: 10px; +} +input[type="range"].web-slider.display--small::-webkit-slider-thumb { + -webkit-appearance: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #323232; + cursor: default; + box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); +} +/* Window is smaller <= 1023px width */ +@media only screen and (max-width: 1120px) { + .display--small { + display: inherit !important; + } + .display--small .slider { + width: 100%; + z-index: 1; + } + .display--small .input-container { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + padding-bottom: 10px; + } + .display--small input[type=range] { + -webkit-appearance: none; + height: 4px; + background: rgba(255, 255, 255, 0.4); + border-radius: 5px; + background-size: 70% 100%; + background-repeat: no-repeat; + } + .display--small input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #323232; + cursor: default; + box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); + transition: all var(--appleTransition); + } + .display--small input[type=range]::-webkit-slider-thumb:hover { + background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px); + transform: scale(1.2); + } + .display--small input[type=range]::-webkit-slider-thumb:active { + background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px); + transform: scale(1); + } + .display--small input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + box-shadow: none; + border: none; + background: transparent; + } + .display--large { + display: none !important; + } +} +.flex-center { + display: flex; + align-items: center; + flex-wrap: wrap; +} +.md-container { + width: 100%; + position: relative; +} +.lyric-body { + -webkit-mask-image: -webkit-gradient(linear, left 95%, left bottom, from(#000000), to(rgba(0, 0, 0, 0))); + overflow-y: scroll; + overflow-x: hidden; + display: flex; + flex-flow: column; + font-family: 'Inter', 'Noto Sans JP', 'Source Han Sans SC', 'Source Han Sans HK', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans HK', 'Noto Sans KR', sans-serif; +} +.lyric-body .no-lyrics { + width: 100%; + justify-content: center; + align-items: center; + font-weight: bold; + font-size: 26px; +} +.lyric-line { + --bgSpeed: 1s; + appearance: none; + color: white; + font-size: 26px; + transform: scale(0.8); + transform-origin: left center; + transition: transform 0.2s var(--appleEase); + opacity: 0.75; + width: auto; + display: inline-block; + margin: 10px; + margin-left: 5%; + margin-right: 0px; +} +.lyric-line.active .verse { + opacity: 0.6; +} +.lyric-line.active .verse.verse-active { + opacity: 1; +} +.lyric-line:hover { + cursor: pointer; +} +.lyric-line:hover::after { + content: ' '; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + transform: scale(1.06); + background: rgba(200, 200, 200, 0.1); + pointer-events: none; + border-radius: 10px; + -webkit-backface-visibility: hidden; +} +.lyric-line.active { + --bgSpeed: 1s; + opacity: 1; + transform: scale(1); + /*background: var(--keyColor);*/ + transition: transform 0.2s var(--appleEase); +} +.lyric-line:not(.active) { + filter: blur(1px); +} +.lyric-line:not(.active).unsynced { + filter: none !important; +} +.lyric-line.unsynced { + filter: none !important; +} +.lyricWaiting { + margin-top: 8px; + display: none; +} +.lyric-line.active .lyricWaiting { + display: inline-flex; + animation: lyricWaitingLine 6s cubic-bezier(0.42, 0, 0.58, 1) infinite; +} +.lyric-line.active .lyricWaiting > div { + width: 10px; + height: 10px; + background: white; + border-radius: 50%; + margin: 3px; +} +.lyrics-translation { + font-size: 1.6rem; + font-weight: 450; + font-family: 'Inter', 'Noto Sans JP', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans HK', 'Noto Sans KR', sans-serif; + filter: contrast(0.5); +} +.lyric-footer { + bottom: 0; + height: 50px; + width: 100%; + position: absolute; + z-index: 1000; + opacity: 1; + background: rgba(30, 30, 30, 0.8); + justify-content: center; + align-items: center; + display: none; + transition: opacity 0.1s var(--appleEase); +} +.lyric-body:hover + .lyric-footer, +.lyric-footer:hover { + display: flex; +} +.modular-fs .app-drawer .lyric-footer { + background: unset; + display: flex; + opacity: 0.3; +} +.modular-fs .app-drawer .lyric-footer:hover { + opacity: 1; +} +.modular-fs .app-drawer .lyric-body .no-lyrics { + height: 100%; + display: flex; +} +@keyframes lyricWaitingLine { + 0% { + opacity: 0.25; + transform: scale(0.85); + } + 50% { + opacity: 1; + transform: scale(1); + } + 100% { + opacity: 0.25; + transform: scale(0.85); + } +} +@keyframes dotOpacity { + 0% { + opacity: 0.25; + } + 100% { + opacity: 1; + } +} +.lyric-line2:before { + background: var(--keyColor); + content: ''; + width: 0%; + height: 6px; + position: absolute; + bottom: -8px; + left: 0; + border-radius: 10px; + z-index: -1; + transition: width var(--bgSpeed); +} +.lyric-line2.active:before { + width: 100%; + transition: width var(--bgSpeed); +} +.player_top { + height: 100%; +} +/* Cider */ +.more-btn-round { + border-radius: 100%; + background: rgba(100, 100, 100, 0.5); + box-shadow: var(--ciderShadow-Generic); + width: 32px; + height: 32px; + border: 0px; + cursor: pointer; + z-index: 5; + display: flex; + justify-content: center; + align-items: center; +} +.more-btn-round:hover { + filter: brightness(125%); +} +.more-btn-round:active { + filter: brightness(75%); + transform: scale(0.98); + transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase); +} +.more-btn-round .svg-icon { + width: 100%; + background: #eee; + --url: url("views/svg/more.svg"); +} +.about-page .teamBtn { + display: flex; + align-items: center; + width: 100%; + font-size: 14px; + padding: 6px 16px; + margin: 4px; +} +.about-page .teamBtn > img { + width: 30px; + margin: 0px 16px 0px 0px; + pointer-events: none; + border-radius: 100%; + box-shadow: var(--mediaItemShadow); + image-rendering: -webkit-optimize-contrast; +} +.about-page .sponsorBtn { + display: inline-flex; + justify-content: center; + align-items: center; +} +.about-page .sponsorBtn > img { + width: 26px; + margin: 0px 16px 0px 0px; + pointer-events: none; +} +.sidebar-playlist .folder-button-active { + background: rgba(255, 255, 255, 0.12); +} +.sidebar-playlist .folder-body { + background: #ffffff0a; + border-radius: 10px; + padding: 1px 6px; +} +.sidebar-playlist .folder-body .spinner { + display: block; + width: 100%; + height: 32px; + background-size: 16px; +} +#navigation-bar { + width: 100%; + background: rgba(0, 0, 0, 0.25); + height: var(--navigationBarHeight); + display: flex; + align-items: center; + padding: 0px 6px; + z-index: 7; + position: sticky; + top: 0; + left: 0; + backdrop-filter: blur(32px); + mix-blend-mode: hard-light; +} +#navigation-bar .nav-item { + appearance: none; + border: 0px; + height: 32px; + width: 40px; + background: transparent; + padding: 6px; + display: flex; + justify-content: center; + align-items: center; + color: rgba(200, 200, 200, 0.8); + margin: 2px; + border-radius: 6px; + transition: transform 0.1s var(--appleEase); +} +#navigation-bar .nav-item:active { + background: var(--selected-click); + transform: scale(0.96); + transition: transform 0s var(--appleEase); +} +#navigation-bar .nav-item > svg { + width: 8px; + pointer-events: none; +} +#navigation-bar .nav-item:hover { + background: var(--selected); +} +#navigation-bar .nav-item:hover > svg { + color: #c8c8c8; +} +.well { + background: rgba(200, 200, 200, 0.05); + border-radius: 10px; + padding: var(--contentInnerPadding); + box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px; + margin-top: 16px; +} +.well.itemContainer { + display: flex; + flex-flow: wrap; + justify-content: center; +} +.well.itemContainer .cd-mediaitem-square { + width: 220px; + height: 260px; + display: inline-flex; + flex: 0 0 auto; + flex-direction: column; + font-size: 14px; + justify-content: center; + align-items: center; + border-radius: 6px; + max-width: 240px; + flex-grow: 1; +} +.text-overflow-elipsis { + display: -webkit-box; + min-width: 0px; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; +} +.no-animation { + animation: unset !important; +} +.fullscreen-view-container { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: black; + z-index: 99; + display: flex; + justify-content: center; + align-items: center; + opacity: 1; +} +.fullscreen-view { + width: 100%; + height: 100%; + background: black; + display: flex; + justify-content: center; + align-items: center; +} +.fullscreen-view .fs-row { + flex-grow: 1; +} +.fullscreen-view .playback-button--small.active { + background-color: rgba(200, 200, 200, 0.25); +} +.fullscreen-view .playback-button--small { + opacity: 0.7; +} +.fullscreen-view .right-col { + height: 50vh; +} +.fullscreen-view .bg-artwork-container { + display: block !important; +} +@media only screen and (max-width: 1121px) { + .fullscreen-view .display--large { + display: flex !important; + } +} +.fullscreen-view .display--large { + display: flex; +} +.fullscreen-view .display--large .slider { + width: 100%; + z-index: 1; +} +.fullscreen-view .display--large .input-container { + display: flex; + justify-content: center; + align-items: center; + width: 100%; +} +.fullscreen-view .display--large .volume-button--small { + border-radius: 6px; + color: inherit; + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + height: 15px; + width: 30px; + border: 0px; + box-shadow: unset; + opacity: 0.7; + background-image: url("assets/feather/volume-2.svg"); +} +.fullscreen-view .display--large .volume-button--small:active { + transform: scale(0.9); +} +.fullscreen-view .display--large .volume-button--small.active { + background-image: url("assets/feather/volume.svg"); +} +.fullscreen-view .display--large input[type=range] { + -webkit-appearance: none; + height: 4px; + background: rgba(255, 255, 255, 0.4); + border-radius: 5px; + background-size: 70% 100%; + background-repeat: no-repeat; +} +.fullscreen-view .display--large input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #323232; + cursor: default; + box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); + transition: all var(--appleTransition); +} +.fullscreen-view .display--large input[type=range]::-webkit-slider-thumb:hover { + background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px); + transform: scale(1.2); +} +.fullscreen-view .display--large input[type=range]::-webkit-slider-thumb:active { + background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px); + transform: scale(1); +} +.fullscreen-view .display--large input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + box-shadow: none; + border: none; + background: transparent; +} +.fullscreen-view .background { + position: absolute; + background-size: cover; + width: 100%; + height: 100%; +} +.fullscreen-view .background .bgArtworkMaterial { + position: absolute; + width: 100%; + height: 100%; +} +.fullscreen-view .background .bgArtworkMaterial .bg-artwork-container { + z-index: unset; +} +.fullscreen-view .background .bgArtworkMaterial .bg-artwork-container .bg-artwork { + filter: brightness(85%) saturate(95%) blur(180px) contrast(0.9) opacity(0.9); +} +.fullscreen-view .lyrics-col { + height: 62vh; + display: flex; + justify-content: center; + align-content: center; + width: 80%; +} +.fullscreen-view .lyrics-col ::-webkit-scrollbar-thumb { + box-shadow: unset; +} +.fullscreen-view .lyrics-col:hover ::-webkit-scrollbar-thumb { + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.5); +} +.fullscreen-view .lyrics-col .no-lyrics { + width: 100%; + height: 100%; + display: flex; + justify-content: center; +} +.fullscreen-view .lyrics-col .lyric-line { + font-size: 35px; +} +.fullscreen-view .queue-col { + width: 60vh; + height: 62vh; +} +.fullscreen-view .queue-col .queue-title { + opacity: 0.6; +} +.fullscreen-view .queue-col .queue-panel > * { + z-index: 3; +} +.fullscreen-view .queue-col ::-webkit-scrollbar-thumb { + box-shadow: unset; +} +.fullscreen-view .queue-col:hover ::-webkit-scrollbar-thumb { + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.5); +} +.fullscreen-view .tab-toggles { + display: flex; + position: absolute; + bottom: 0; + right: 0; + width: 15vh; + height: 5vh; + justify-content: space-evenly; +} +.fullscreen-view .tab-toggles .volume { + background-image: url("assets/feathers/volume.svg"); + padding: 0.5vh; + width: 2vh; + height: 2vh; + background-origin: content-box; + background-repeat: no-repeat; +} +.fullscreen-view .tab-toggles .queue { + background-image: url("assets/list.svg"); + padding: 0.5vh; + width: 2.5vh; + height: 2.5vh; + background-origin: content-box; + background-repeat: no-repeat; +} +.fullscreen-view .tab-toggles .lyrics { + background-image: url("assets/quote-right.svg"); + padding: 0.5vh; + width: 2.5vh; + height: 2.5vh; + background-origin: content-box; + background-repeat: no-repeat; +} +.fullscreen-view .tab-toggles .active { + background-color: rgba(200, 200, 200, 0.7); + border-radius: 3px; +} +.fullscreen-view .artwork-col { + justify-content: center; + align-items: center; + display: flex; + flex-direction: column; +} +.fullscreen-view .artwork-col .artwork { + width: 50vh; + height: 50vh; +} +.fullscreen-view .artwork-col .controls-parents { + width: 50vh; +} +.fullscreen-view .artwork-col .app-playback-controls .song-artist, +.fullscreen-view .artwork-col .app-playback-controls .song-name { + font-weight: 600; + text-align: center; + font-size: 0.9em; + height: 1.2em; + line-height: 0.9em; + overflow: hidden; + text-overflow: ellipsis; + max-width: 360px; +} +.fullscreen-view .artwork-col .app-playback-controls .song-artist .song-name-normal, +.fullscreen-view .artwork-col .app-playback-controls .song-name .song-name-normal { + height: inherit; +} +.fullscreen-view .artwork-col .app-playback-controls .song-artist { + font-size: 0.875em; + font-weight: 400; +} +.fullscreen-view .artwork-col .app-playback-controls .song-name { + width: unset !important; + margin-top: 0.15vh; + display: -webkit-box; + line-height: 1.2; + text-overflow: ellipsis; + text-align: center; +} +.fullscreen-view .artwork-col .app-playback-controls .playback-info { + margin-top: 0.5vh; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + position: relative; +} +.fullscreen-view .artwork-col .app-playback-controls .playback-info input[type="range"] { + width: 100%; +} +.fullscreen-view .artwork-col .app-playback-controls .playback-info > div { + width: 100%; + text-align: center; +} +.fullscreen-view .artwork-col .app-playback-controls .song-progress { + position: absolute; + bottom: -1.5vh; + left: 0px; + background: transparent; +} +.fullscreen-view .artwork-col .app-playback-controls .song-progress .song-duration p { + font-weight: 400; + font-size: 10px; + height: 1.2em; + line-height: 1.3em; + overflow: hidden; + margin: 0 0 0 0.25em; +} +.fullscreen-view .artwork-col .app-playback-controls .song-progress:hover > input[type=range]::-webkit-slider-thumb { + opacity: 1; + transform: scale(1); + z-index: 1; +} +.fullscreen-view .artwork-col .app-playback-controls .song-progress input[type=range] { + appearance: none; + width: 100%; + height: 4px; + background-color: rgba(200, 200, 200, 0.1); + border-radius: 2px; +} +.fullscreen-view .artwork-col .app-playback-controls .song-progress input[type=range]::-webkit-slider-thumb { + opacity: 0; + transform: scale(0.5); + -webkit-appearance: none; + appearance: none; + width: 12px; + height: 12px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; + transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase); +} +.fullscreen-view .artwork-col .app-playback-controls .song-progress input[type=range]::-moz-range-thumb { + width: 8px; + height: 8px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; +} +.fullscreen-view .artwork-col .control-buttons { + margin-top: 2vh; + display: inline-flex; + width: 100%; + justify-content: center; +} +.mini-view { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.mini-view .fs-row { + flex-grow: 1; +} +.mini-view .playback-button--small.active { + background-color: rgba(200, 200, 200, 0.25); +} +.mini-view .player-exit { + z-index: 3; + position: absolute; + top: 5px; + right: 5px; + -webkit-app-region: no-drag; +} +.mini-view .player-pin { + z-index: 3; + position: absolute; + min-width: 20px; + min-height: 20px; + top: 5px; + right: 30px; + -webkit-app-region: no-drag; +} +.mini-view #mini-pin { + display: none; +} +.mini-view .player-pin:hover #mini-pin { + display: block; +} +.mini-view .playback-button--small { + opacity: 0.7; +} +.mini-view .right-col { + height: 50vh; +} +@media only screen and (max-width: 1121px) { + .mini-view .display--large { + display: flex !important; + } +} +.mini-view .display--large { + display: flex; +} +.mini-view .display--large .slider { + width: 100%; + z-index: 1; +} +.mini-view .display--large .input-container { + display: flex; + justify-content: center; + align-items: center; + width: 100%; +} +.mini-view .display--large .volume-button--small { + border-radius: 6px; + color: inherit; + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + height: 15px; + width: 30px; + border: 0px; + box-shadow: unset; + opacity: 0.7; + background-image: url("assets/feather/volume-2.svg"); +} +.mini-view .display--large .volume-button--small:active { + transform: scale(0.9); +} +.mini-view .display--large .volume-button--small.active { + background-image: url("assets/feather/volume.svg"); +} +.mini-view .display--large input[type=range] { + -webkit-appearance: none; + height: 4px; + background: rgba(255, 255, 255, 0.4); + border-radius: 5px; + background-size: 70% 100%; + background-repeat: no-repeat; +} +.mini-view .display--large input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #323232; + cursor: default; + box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); + transition: all var(--appleTransition); +} +.mini-view .display--large input[type=range]::-webkit-slider-thumb:hover { + background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px); + transform: scale(1.2); +} +.mini-view .display--large input[type=range]::-webkit-slider-thumb:active { + background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px); + transform: scale(1); +} +.mini-view .display--large input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + box-shadow: none; + border: none; + background: transparent; +} +.mini-view .background { + position: absolute; + background-size: cover; + width: 100%; + height: 100%; + -webkit-user-select: none; + -webkit-app-region: drag; +} +.mini-view .background .bgArtworkMaterial { + position: absolute; + width: 100%; + height: 100%; +} +.mini-view .background .bgArtworkMaterial .bg-artwork-container { + z-index: unset; +} +.mini-view .background .bgArtworkMaterial .bg-artwork-container .bg-artwork { + filter: brightness(85%) saturate(95%) blur(180px) contrast(0.9) opacity(0.9); +} +.mini-view .background .bgArtworkMaterial .no-animation { + animation: unset; +} +.mini-view .lyrics-col { + height: 62vh; + display: flex; + justify-content: center; + align-content: center; + width: 80%; +} +.mini-view .lyrics-col ::-webkit-scrollbar-thumb { + box-shadow: unset; +} +.mini-view .lyrics-col:hover ::-webkit-scrollbar-thumb { + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.5); +} +.mini-view .lyrics-col .no-lyrics { + width: 100%; + height: 100%; + display: flex; + justify-content: center; +} +.mini-view .lyrics-col .lyric-line { + font-size: 35px; +} +.mini-view .queue-col { + width: 60vh; + height: 50vh; +} +.mini-view .queue-col .queue-title { + opacity: 0.6; +} +.mini-view .queue-col .queue-panel > * { + z-index: 3; +} +.mini-view .queue-col ::-webkit-scrollbar-thumb { + box-shadow: unset; +} +.mini-view .queue-col:hover ::-webkit-scrollbar-thumb { + box-shadow: inset 0px 0px 10px 10px rgba(200, 200, 200, 0.5); +} +.mini-view .tab-toggles { + display: flex; + position: absolute; + bottom: 0; + right: 0; + width: 15vh; + height: 5vh; + justify-content: space-evenly; +} +.mini-view .tab-toggles .volume { + background-image: url("assets/feathers/volume.svg"); + padding: 0.5vh; + width: 2vh; + height: 2vh; + background-origin: content-box; + background-repeat: no-repeat; +} +.mini-view .tab-toggles .queue { + background-image: url("assets/list.svg"); + padding: 0.5vh; + width: 2.5vh; + height: 2.5vh; + background-origin: content-box; + background-repeat: no-repeat; +} +.mini-view .tab-toggles .lyrics { + background-image: url("assets/quote-right.svg"); + padding: 0.5vh; + width: 2.5vh; + height: 2.5vh; + background-origin: content-box; + background-repeat: no-repeat; +} +.mini-view .tab-toggles .active { + background-color: rgba(200, 200, 200, 0.7); + border-radius: 3px; +} +.mini-view .artwork-col { + justify-content: center; + align-items: center; + display: flex; + flex-direction: column; +} +.mini-view .artwork-col .artwork { + width: 100%; + height: 100%; +} +.mini-view .artwork-col .artwork .mediaitem-artwork { + border-radius: unset; +} +.mini-view .artwork-col .controls-parents { + width: 100%; + position: absolute; + background: #0000009e; + backdrop-filter: blur(10px); + bottom: 0px; + z-index: 3; + opacity: 0; + padding: 3%; +} +.mini-view .artwork-col .controls-parents:hover { + opacity: 1; +} +.mini-view .artwork-col .app-playback-controls { + -webkit-app-region: no-drag; +} +.mini-view .artwork-col .app-playback-controls .song-artist, +.mini-view .artwork-col .app-playback-controls .song-name { + font-weight: 600; + text-align: center; + font-size: 0.9em; + height: 1.2em; + line-height: 0.9em; + overflow: hidden; + text-overflow: ellipsis; + max-width: 360px; +} +.mini-view .artwork-col .app-playback-controls .song-artist .song-name-normal, +.mini-view .artwork-col .app-playback-controls .song-name .song-name-normal { + height: inherit; +} +.mini-view .artwork-col .app-playback-controls .song-artist { + font-size: 0.875em; + font-weight: 400; +} +.mini-view .artwork-col .app-playback-controls .song-name { + width: unset !important; + margin-top: 0.15vh; + display: -webkit-box; + line-height: 1.2; + text-overflow: ellipsis; + text-align: center; +} +.mini-view .artwork-col .app-playback-controls .playback-info { + margin-top: 0.5vh; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + position: relative; +} +.mini-view .artwork-col .app-playback-controls .playback-info input[type="range"] { + width: 100%; +} +.mini-view .artwork-col .app-playback-controls .playback-info > div { + width: 100%; + text-align: center; +} +.mini-view .artwork-col .app-playback-controls .song-progress { + position: absolute; + bottom: -3.5vh; + left: 0px; + background: transparent; +} +.mini-view .artwork-col .app-playback-controls .song-progress .song-duration p { + font-weight: 400; + font-size: 10px; + height: 1.2em; + line-height: 1.3em; + overflow: hidden; + margin: 0 0 0 0.25em; +} +.mini-view .artwork-col .app-playback-controls .song-progress:hover > input[type=range]::-webkit-slider-thumb { + opacity: 1; + transform: scale(1); + z-index: 1; +} +.mini-view .artwork-col .app-playback-controls .song-progress input[type=range] { + appearance: none; + width: 100%; + height: 4px; + background-color: rgba(200, 200, 200, 0.1); + border-radius: 2px; +} +.mini-view .artwork-col .app-playback-controls .song-progress input[type=range]::-webkit-slider-thumb { + opacity: 0; + transform: scale(0.5); + -webkit-appearance: none; + appearance: none; + width: 12px; + height: 12px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; + transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase); +} +.mini-view .artwork-col .app-playback-controls .song-progress input[type=range]::-moz-range-thumb { + width: 8px; + height: 8px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; +} +.mini-view .artwork-col .control-buttons { + margin-top: 3.5vh; + display: inline-flex; + width: 100%; + justify-content: center; +} +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.modular-fs .app-drawer { + width: 100%; + right: 0px; + top: 0px; + height: 100%; + border-radius: 0px; + box-shadow: unset; + background: black; +} +.modular-fs .app-drawer .bgArtworkMaterial { + display: block; +} +.modular-fs .app-drawer .bgArtworkMaterial::before { + top: -50%; + left: -20%; + width: 200VH; + height: 200VH; +} +.modular-fs .app-drawer .bgArtworkMaterial .bg-artwork-container { + display: block !important; +} +.modular-fs .app-drawer .lyric-body { + justify-content: center; + align-items: center; + padding: 0px; + margin: 0px; + overflow: hidden; + filter: drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.7)); +} +.modular-fs .app-drawer .lyric-body .lyric-line { + pointer-events: none; + font-weight: 600; + font-size: 2em; + transform-origin: center; + animation: fsLyricIn var(--appleEase) 0.2s; + opacity: 0.9; +} +.modular-fs .app-drawer .lyric-body .lyric-line:not(.active) { + display: none; + margin: 0; + transform: scale(1); +} +.modular-fs .app-drawer .lyric-body .lyric-line.active { + margin: 0; + transform: scale(1); +} +@keyframes fsLyricIn { + 0% { + opacity: 0; + transform: scale(0.98); + } + 100% { + opacity: 1; + transform: scale(1); + } +} +/* Transitions */ +.replaycard-enter-active, +.replaycard-leave-active { + transition: opacity 0.5s var(--appleEase), transform 0.5s var(--appleEase); +} +.replaycard-enter, +.replaycard-leave-to { + opacity: 0; + transform: translateY(20px); +} +.modal-enter-active, +.modal-leave-active { + transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase); +} +.modal-enter, +.modal-leave-to { + opacity: 0; + transform: scale(1.1); +} +.wpfade-enter-active, +.wpfade-leave-active { + transition: opacity 0.1s var(--appleEase); +} +.wpfade-enter, +.wpfade-leave-to { + opacity: 0; +} +.wpfade_transform-enter-active, +.wpfade_transform-leave-active { + --transitionTime: 0.2s; + transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase); + will-change: opacity, transform; +} +.wpfade_transform-enter { + opacity: 0; + transform: translateX(50%) translate3d(0, 0, 0); + will-change: opacity, transform; +} +.wpfade_transform-leave-to { + opacity: 0; + transform: translateX(-50%) translate3d(0, 0, 0); + will-change: opacity, transform; +} +.wpfade_transform_backwards-enter-active, +.wpfade_transform_backwards-leave-active { + --transitionTime: 0.2s; + transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase); +} +.wpfade_transform_backwards-enter { + opacity: 0; + transform: translateX(-50%) translate3d(0, 0, 0); + will-change: opacity, transform; +} +.wpfade_transform_backwards-leave-to { + opacity: 0; + transform: translateX(50%) translate3d(0, 0, 0); + will-change: opacity, transform; +} +.fabfade-enter-active, +.fabfade-leave-active { + transition: transform 0.1s var(--appleEase), opacity 0.1s var(--appleEase); +} +.fabfade-enter, +.fabfade-leave-to { + opacity: 0; + transform: scale(0.5); +} +.fsModeSwitch-enter-active, +.fsModeSwitch-leave-active { + transition: transform 1s var(--appleEase), opacity 1s var(--appleEase); +} +.fsModeSwitch-enter, +.fsModeSwitch-leave-to { + transform: scale(1.1); + opacity: 0; +} +.drawertransition-enter-active, +.drawertransition-leave-active { + transition: right 0.25s var(--appleEase); +} +.drawertransition-enter, +.drawertransition-leave-to { + right: -300px; +} +:root { + --gfx-closeBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6Mjc6MzYtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI3OjM2LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6Mjc6MzYtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PmN2D9EAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAEtJREFUGJWNkMENwDAIA1FGY/8hkn8HOAqPfBsFKvz1yZYtbqwAlUIB6saUAH2NJ4MvL4PLgK/x13LAGTSqEaVa1a0x7XvcmI3D1wbntaRbB2haYwAAAABJRU5ErkJggg=='); + --gfx-maxBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6Mjc6NTgtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI3OjU4LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6Mjc6NTgtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PlwQMBUAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAFBJREFUGJXV0LERgCAUBNHVsQADM3uwWWbojQIs47MEGhgAuS/eSw41qeFYqGlRA7iAm74DKLyrfRABoLrOgq+/hJXngi71BOoGZKBMHqhAbtMvQzel9pREAAAAAElFTkSuQmCC'); + --gfx-restoreBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6Mjc6MjQtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI3OjI0LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6Mjc6MjQtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PqiFCFwAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHNJREFUGJWtkKEOwlAMRc+QM5AwQYJFoPjZCWb2YRPIaeRTLwfTLQs0UxzX3tumtxCog78UdVTbZmM8AmsdXIABeKH2ak221dDuamnUCjyA+WtbB0zAGXgT0ycSFk31kBky/moUeBLpbsl91wi6Nnbfs/g+7XOQq6ifjfkAAAAASUVORK5CYII='); + --gfx-minBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGOmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEzOjAwOjMyWiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0xN1QxMzowMDozMloiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDEzOjAwOjMyWiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NWQwZWRiMC1mZDAwLWI2NGYtOWVmYi1hMmI0NTg3MDVhOGEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphMzAwMWUxYS0yOTE5LWU0NDktYjk0Yy1jMjEyMjQ4YTlmOGEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ODdmNzk5Yy00YjExLWU1NGEtYjIwZC02ODYxN2VkOWM1ZTIiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3ODdmNzk5Yy00YjExLWU1NGEtYjIwZC02ODYxN2VkOWM1ZTIiIHN0RXZ0OndoZW49IjIwMjAtMDItMTdUMTM6MDA6MzJaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjg1ZDBlZGIwLWZkMDAtYjY0Zi05ZWZiLWEyYjQ1ODcwNWE4YSIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxMzowMDozMloiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSLupKEiIHBob3Rvc2hvcDpMYXllclRleHQ9Iu6koSIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+FwvRXAAAABdJREFUGNNj/P//PwMxgHGIKPw/XDwDAOr1HuzlELLnAAAAAElFTkSuQmCC'); +} +#apple-music-video-container { + background: black; + position: absolute; + float: left; + display: none; + width: 100%; + height: calc(100% - var(--chromeHeight)); + bottom: 0; + z-index: 100000; +} +#apple-music-video-player { + position: absolute; + top: 50%; + width: 100%; + transform: translate(0, -50%); + height: 100%; +} +#app.twopanel #apple-music-video-container { + top: var(--chromeHeight1); + bottom: unset; +} +#apple-music-video-player-controls { + position: absolute; + z-index: 100001; + float: left; + width: 100%; + height: 100%; +} +#apple-music-video-player-controls #player-exit { + position: absolute; + z-index: 100001; + float: left; + width: 100%; + margin: 10px; + cursor: pointer; +} +#apple-music-video-player-controls #player-pip { + position: absolute; + z-index: 100001; + width: 32px; + height: 32px; + margin: 10px; + right: 50px; + border-radius: 100%; + background: rgba(255, 255, 255, 0.5); + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} +#apple-music-video-player-controls #player-pip > svg { + width: 50%; +} +#apple-music-video-player-controls #player-fullscreen { + position: absolute; + z-index: 100001; + width: 32px; + height: 32px; + margin: 10px; + right: 0px; + border-radius: 100%; + background: rgba(255, 255, 255, 0.5); + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} +#apple-music-video-player-controls #player-fullscreen > svg { + width: 70%; +} +#apple-music-video-player-controls:hover { + opacity: 1; +} +img[src=""] { + text-indent: -10000px; +} +div#captions { + font-size: 1.2rem; + position: absolute; + top: 85%; + text-align: center; + width: auto; + align-self: center; + left: 50%; + transform: translate(-50%, -50%); + background: rgba(0, 0, 0, 0.6); + color: yellow; + white-space: pre-line; + font-family: 'Inter', 'Noto Sans JP', 'Source Han Sans SC', 'Source Han Sans HK', 'Source Han Sans SC', 'Source Han Sans HK', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans HK', 'Noto Sans KR', sans-serif; +} +[v-cloak] { + display: none !important; +} +.item-navigate:hover { + text-decoration: underline; + cursor: pointer; +} +.title-browse-sp { + width: 100%; + text-align: left; + margin-bottom: 2px; +} +.bold { + font-weight: bold; +} +.semibold { + font-weight: 500; +} +.madeforyou-body { + margin-top: 15px; +} +.albums-square-container { + text-align: center; +} +body.no-gpu { + --ciderShadow-Generic: var(--mediaItemShadow); + --mediaItemShadow-Shadow: var(--mediaItemShadow); + --mediaItemShadow-ShadowSubtle: var(--mediaItemShadow); +} +body.no-gpu .bg-artwork-container { + display: none; + animation: none !important; +} +body.no-gpu .bg-artwork-container .bg-artwork { + animation: none !important; +} +body.no-gpu #navigation-bar { + backdrop-filter: unset; + mix-blend-mode: unset; + background: #000000; +} +body.no-gpu .addtoplaylist-panel .modal-window { + background: #121212; + backdrop-filter: unset; +} +body.no-gpu .app-drawer { + backdrop-filter: unset; + mix-blend-mode: unset; + background: #1c1c1c; +} +body.no-gpu .wpfade-enter-active, +body.no-gpu .wpfade-leave-active { + transition: opacity 0s var(--appleEase); +} +body.no-gpu .wpfade-enter, +body.no-gpu .wpfade-leave-to { + opacity: 0; +} +body.no-gpu .drawertransition-enter-active, +body.no-gpu .drawertransition-leave-active { + transition: right 0s var(--appleEase); +} +body.no-gpu .drawertransition-enter, +body.no-gpu .drawertransition-leave-to { + right: -300px; +} +body.no-gpu .lyric-line:hover::after { + display: none; +} +.qrimg { + width: -webkit-fill-available; + max-block-size: -webkit-fill-available; + object-fit: contain; + overflow-x: hidden; + overflow-y: hidden; +} +.equalizer-panel .modal-window { + height: 330px; + max-height: 330px; + width: 740px; + max-width: 800px; + overflow: hidden; +} +.equalizer-panel .modal-window .info-header { + padding-left: 12px; +} +.equalizer-panel .modal-window .visual-container { + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; +} +.equalizer-panel .modal-window .modal-header { + padding: 16px; + position: relative; + overflow: hidden; +} +.equalizer-panel .modal-window .modal-header .modal-title { + text-align: center; +} +.equalizer-panel .modal-window .modal-header .close-btn { + width: 50px; + height: 100%; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; +} +.equalizer-panel .modal-window .modal-header .close-btn:hover { + background-color: #c42b1c; +} +.equalizer-panel .modal-window .modal-content { + display: block; +} +.equalizer-panel .modal-window .modal-content .inputs-container { + margin-left: 8px; +} +.equalizer-panel .modal-window .modal-content .input-container { + display: inline-grid; + width: 54px; + justify-items: center; + font-size: 0.7em; +} +.equalizer-panel .modal-window .modal-content .input-container.mini { + display: inline-grid; + width: 43px; + justify-items: center; + font-size: 0.7em; +} +.equalizer-panel .modal-window .modal-content .freq-header { + margin-bottom: 2px; +} +.equalizer-panel .modal-window .modal-content .reset-button { + width: 50%; + margin-left: 25%; + text-align: center; +} +.equalizer-panel .modal-window .modal-content input.eq-slider { + -webkit-appearance: slider-vertical; + width: 5%; +} +.equalizer-panel .modal-window .modal-content input[type="number"] { + padding: unset; + width: 55px; +} +.equalizer-panel .modal-window .modal-content .header input.eq-slider { + -webkit-appearance: slider-vertical; + width: 5%; + opacity: 0; +} +.equalizer-panel .modal-window .modal-lowercontent { + padding: 16px; + background-color: var(--modalBackground); +} +body[platform='darwin'] #window-controls-container { + display: none; +} +body[platform='darwin'] .app-chrome .app-chrome-item > .app-mainmenu { + opacity: 0; + pointer-events: none; + -webkit-app-region: drag; +} +.percent { + display: inline-block; + position: relative; +} +.percent::after { + position: relative; + right: 2em; + transition: all 0.05s ease-in-out; +} +.percent:hover::after, +.percent:focus-within::after { + right: 3.5em; +} +.percent::after { + content: '%'; +} +.spatialproperties-panel.modal-fullscreen { + flex-direction: column; +} +.cursor { + background: rgba(255, 255, 255, 0.5); + width: 16px; + height: 16px; + position: fixed; + z-index: 9999999999; + pointer-events: none; + border-radius: 100%; + box-shadow: 0px 0px 0px 2px #c8c8c8; + top: 0; + left: 0; + display: none; +} +body[platform="darwin"] html { + background: transparent!important; +} +body[platform="darwin"].notransparency::before { + display: none; +} +body[platform="darwin"] #app.simplebg { + background: transparent; +} +body[platform="darwin"] #app::before { + display: none; +} +body[platform="linux"] #window-controls-container { + display: none; +} +#app.compact .content-inner { + zoom: 0.95; +} +#app.compact .app-sidebar-content { + padding: 0px; +} +#app.compact .app-sidebar-content .app-sidebar-header-text { + padding: 6px 10px; + margin: 0px; +} +#app.compact .app-sidebar-content .app-sidebar-item { + display: flex; + width: 100%; + padding: 8px 12px; + font-size: 13px; + margin: 0px; + border: 1px solid transparent; + border-radius: 0px; + transition: unset; + transform: unset; +} +#app.compact .app-sidebar-content .app-sidebar-item:active { + background: var(--selected-click); +} +#app.compact .app-sidebar-content .app-sidebar-item::after { + display: none; +} +#app.compact .app-sidebar-content .app-sidebar-item.active { + background: var(--keyColor-disabled); +} +#app.compact .app-sidebar-content .sidebar-icon { + width: 14px; + height: 16px; + margin-right: 8px; +} +#app.compact .app-sidebar-content .folder-body { + border-radius: 0px; + padding: 0px; +} +@media (max-width: 951px) { + #app.compact #app-content { + zoom: 0.8; + } +} +@media (max-width: 951px) { + #app-content { + zoom: 0.8; + } +} +#app.twopanel { + --chromeHeight1: 42px; + --chromeHeight2: 76px; + --chromeHeight: calc(var(--chromeHeight1) + var(--chromeHeight2)); +} +#app.twopanel .app-chrome { + height: var(--chromeHeight1); +} +#app.twopanel .app-chrome .app-mainmenu { + margin-left: 10px; + width: 88px; +} +#app.twopanel .app-chrome.chrome-bottom { + height: var(--chromeHeight2); + box-shadow: 0px -1px 0px rgba(0, 0, 0, 0.25); +} +#app.twopanel .app-sidebar-footer--controls { + display: none !important; +} +#app.twopanel .app-chrome.chrome-bottom .app-playback-controls .actions { + align-self: center; +} +#app.twopanel .app-chrome.chrome-bottom .playback-button.play, +#app.twopanel .app-chrome.chrome-bottom .playback-button.pause { + width: 42px; + height: 42px; + background-color: rgba(200, 200, 200, 0.2); + border-radius: 50%; + margin: 6px; + box-shadow: 0px 0px 0px 2px var(--keyColor); +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center { + display: flex; + flex-direction: column; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-controls { + display: flex; + z-index: 1; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration { + position: relative; + width: 80%; + -webkit-app-region: no-drag; + height: 16px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration .song-progress { + height: 16px; + position: absolute; + bottom: 4px; + left: 0px; + right: 4px; + background: transparent; + z-index: 0; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration .song-progress .song-duration { + display: flex; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration .song-progress .song-duration p { + font-weight: 400; + font-size: 10px; + height: 1.2em; + line-height: 1.3em; + overflow: hidden; + margin: 0 0 0 0.25em; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration .song-progress:hover > input[type=range]::-webkit-slider-thumb { + opacity: 1; + transform: scale(1); + z-index: 1; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration .song-progress input[type=range] { + appearance: none; + width: 100%; + height: 4px; + background-color: rgba(200, 200, 200, 0.1); + border-radius: 2px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--center .app-chrome-playback-duration .song-progress input[type=range]::-webkit-slider-thumb { + opacity: 0; + transform: scale(0.5); + -webkit-appearance: none; + appearance: none; + width: 12px; + height: 12px; + border-radius: 100%; + background: var(--keyColor); + cursor: default; + transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase); +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left { + width: 30%; + justify-content: flex-start; + align-items: flex-start; + flex: 0 0 auto; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls { + width: 100%; + height: 100%; + max-width: 100%; + border: 0px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .artwork { + width: var(--chromeHeight2); + height: var(--chromeHeight2); + margin: 0px 6px 0px 0px; + box-shadow: unset; + border: 0px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .artwork .mediaitem-artwork, +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .artwork img { + border-radius: 0px; + box-shadow: unset; + border: 0px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .playback-info { + align-items: flex-start; + margin: 6px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .playback-info .song-name { + text-align: left; + font-size: 15px; + font-weight: initial; + width: 100%; + -webkit-mask-image: linear-gradient(-90deg, transparent 0%, transparent 10%, black 20%); +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .playback-info .song-artist-album { + width: 100%; + -webkit-mask-image: linear-gradient(-90deg, transparent 0%, transparent 10%, black 20%); +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .playback-info .audio-type { + margin: 0px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--left .playback-controls .playback-info .song-artist-album-content { + text-align: left; + font-size: 12px; +} +#app.twopanel .app-chrome.chrome-bottom .app-chrome--right { + width: 30%; + flex: 0 0 auto; +} +#app.twopanel .collection-page .top-fab { + bottom: 96px; +} diff --git a/src/renderer/style.less b/src/renderer/style.less index ba1f00f6..f0505165 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -558,14 +558,14 @@ input[type=range].web-slider::-webkit-slider-runnable-track { .app-sidebar-notification { text-align: center; font-size: 12px; - min-height: 60px; + min-height: 36px; display: flex; justify-content: center; align-items: center; border-top: 1px solid rgb(200 200 200 / 15%); background: rgb(0 0 0 / 15%); flex-direction: column; - padding: 20px 0px; + padding: 10px 0px; &.libraryNotification { flex-direction: row; From 10435d5b7c58a309e8767c3ccbb65b14057b8e81 Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Mon, 7 Mar 2022 22:33:24 -0800 Subject: [PATCH 08/25] planned funcs --- src/renderer/views/pages/audiolabs.ejs | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/renderer/views/pages/audiolabs.ejs b/src/renderer/views/pages/audiolabs.ejs index 09f1210c..c6daf4c6 100644 --- a/src/renderer/views/pages/audiolabs.ejs +++ b/src/renderer/views/pages/audiolabs.ejs @@ -98,6 +98,59 @@ +
+
+ {{$root.getLz('settings.header.unfinished')}} +
+
+
+ Cider Atmosphere Realizer™️ +
+ Realizes an entirely different musical atmosphere only to be found on state of the art audio setups. +
+
+ + +
+
+
+
+ Cider Origami Vocal Enhance/Remaster™️ +
+ Re-textures the vocals by carving out the frequencies and adjusts them to the selected profile.
+ Modern: + Embracing 21st Century Equipment, this revives old recordings while preserving the Master's original intent.
+ Intimate: + Bringing the vocals closer to your heart, communicating only the most personal connection between you and the artist.
+ Breathy: + Giving the perfectionists a new voice, this adds naturality to the vocals by making them more breathy and more natural.
+ Articulate: + Wrapping every detail of the vocal to your ear, resulting in a more expressive voice. +
+
+
+ +
+
From bd4a2e7d27ace34a88c22301fff58db935a22f38 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 8 Mar 2022 02:26:47 -0800 Subject: [PATCH 09/25] working on plugin pages --- src/main/base/browserwindow.ts | 7 ++++++ src/renderer/main/vueapp.js | 11 +++++++++- src/renderer/views/components/hello-world.ejs | 2 +- src/renderer/views/pages/plugin-renderer.ejs | 22 +++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/renderer/views/pages/plugin-renderer.ejs diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index c415e6bf..b9dd9734 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -60,6 +60,7 @@ export class BrowserWindow { "pages/replay", "pages/audiolabs", "pages/zoo", + "pages/plugin-renderer", "components/mediaitem-artwork", "components/artwork-material", "components/menu-panel", @@ -90,8 +91,14 @@ export class BrowserWindow { "components/miniplayer", "components/castmenu", "components/artist-chip", + "components/hello-world", ], appRoutes: [ + { + page: "plugin-renderer", + component: ``, + condition: "page == 'plugin-renderer'" + }, { page: "zoo", component: "", diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index b90183b4..638aa49b 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -217,7 +217,11 @@ const app = new Vue({ } }, pauseButtonTimer: null, - activeCasts: [] + activeCasts: [], + pluginPages: { + page: "hello-world", + pages: [], + } }, watch: { cfg: { @@ -1488,6 +1492,11 @@ const app = new Vue({ let page = hash[0] let id = hash[1] let isLibrary = hash[2] ?? false + if(page == "plugin") { + this.pluginPages.page = "plugin." + id + this.page = "plugin-renderer" + return + } this.routeView({ kind: page, id: id, diff --git a/src/renderer/views/components/hello-world.ejs b/src/renderer/views/components/hello-world.ejs index 6fa4e1f7..acbac471 100644 --- a/src/renderer/views/components/hello-world.ejs +++ b/src/renderer/views/components/hello-world.ejs @@ -3,7 +3,7 @@ \ No newline at end of file From 541d5ca7839b5e219166b3b52546b5965ce4afa0 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Tue, 8 Mar 2022 22:31:46 +0700 Subject: [PATCH 10/25] remove vibrancy for now --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ccf2cdb..571d4492 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "electron-notarize": "^1.1.1", "electron-store": "^8.0.1", "electron-updater": "^4.6.5", - "electron-vibrancy-updated": "git+https://github.com/ciderapp/electron-vibrancy-updated", + "electron-window-state": "^5.0.3", "express": "^4.17.3", "get-port": "^5.1.1", From abf5b91117a2e498a1f9b96f3b62349339420119 Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Tue, 8 Mar 2022 13:52:45 -0800 Subject: [PATCH 11/25] my brain hurts --- src/renderer/audio/audio.js | 398 +++++++++----------- src/renderer/views/components/equalizer.ejs | 16 +- 2 files changed, 187 insertions(+), 227 deletions(-) diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 8f24d107..76e3eedc 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -438,238 +438,190 @@ const CiderAudio = { }, hierarchical_loading: function (){ CiderAudio.hierarchical_unloading(); - - // Vibrant Bass, CAP, Analog Warmth, Spatial - if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - + + if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0) { // Vibrant Bass CiderAudio.vibrantbass_h2_1(true) - CiderAudio.llpw_h2_2(true, 2); - CiderAudio.analogWarmth_h2_3(true, 3); - if (app.cfg.audio.maikiwiAudio.spatial === true) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; - console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial') - } - else { - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Spatial') - } + if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { // Vibrant Bass, CAP + CiderAudio.llpw_h2_2(true, 2); - + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { // Vibrant Bass, CAP, Analog Warmth + CiderAudio.analogWarmth_h2_3(true, 3); - } - // CAP, Analog Warmth, Spatial - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - - CiderAudio.llpw_h2_2(true, 1); - CiderAudio.analogWarmth_h2_3(true, 3); - - if (app.cfg.audio.maikiwiAudio.spatial === true) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; - console.debug('[Cider][Audio] CAP, Analog Warmth, Maikiwi Spatial') - } - else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] CAP, Analog Warmth, Spatial') - } - } - // Vibrant Bass, CAP, Spatial - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === false) { - - CiderAudio.vibrantbass_h2_1(true) - CiderAudio.llpw_h2_2(true, 2); - if (app.cfg.audio.maikiwiAudio.spatial === true) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); - app.cfg.audio.normalization = true - console.debug('[Cider][Audio] Vibrant Bass, CAP, Maikiwi Spatial') - } - else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]); - console.debug('[Cider][Audio] Vibrant Bass, CAP, Spatial') - } - - } - // Vibrant Bass, CAP, Analog Warmth - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - - CiderAudio.vibrantbass_h2_1(true) - CiderAudio.llpw_h2_2(true, 2); - CiderAudio.analogWarmth_h2_3(true, 3); - - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth') - } - // CAP, Spatial - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === false) { - - CiderAudio.llpw_h2_2(true, 1); - if (app.cfg.audio.maikiwiAudio.spatial === true) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); - app.cfg.audio.normalization = true; - console.debug('[Cider][Audio] CAP, Maikiwi Spatial') - } - else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]); - console.debug('[Cider][Audio] CAP, Spatial') - } - } - // Analog Warmth, Spatial - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === false && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - - CiderAudio.analogWarmth_h2_3(true, 1); - if (app.cfg.audio.maikiwiAudio.spatial === true) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; - console.debug('[Cider][Audio] Analog Warmth, Maikiwi Spatial') - } - else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] Analog Warmth, Spatial') - } - } - // CAP, Analog Warmth - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - - CiderAudio.llpw_h2_2(true, 1); - CiderAudio.analogWarmth_h2_3(true, 3); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] CAP and Analog Warmth') - } - // Vibrant Bass, Analog Warmth - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === false && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - - CiderAudio.vibrantbass_h2_1(true) - CiderAudio.analogWarmth_h2_3(true, 2); - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth') - } - - // Vibrant Bass, CAP - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === false) { - - CiderAudio.vibrantbass_h2_1(true) - CiderAudio.llpw_h2_2(true, 2); - - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]); - console.debug('[Cider][Audio] Vibrant Bass, CAP') - } - // Vibrant Bass, Spatial - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === false && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === false) { - - CiderAudio.vibrantbass_h2_1(true) - if (app.cfg.audio.maikiwiAudio.spatial === true) { - - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); - console.debug('[Cider][Audio] Vibrant Bass, Maikiwi Spatial') - } - else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]); - console.debug('[Cider][Audio] Vibrant Bass, Spatial') - } - - } - // Vibrant Bass - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === false && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === false) { - - CiderAudio.vibrantbass_h2_1(true) - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); - console.debug('[Cider][Audio] Vibrant Bass') - - } - // CAP - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === true && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === false) { - CiderAudio.llpw_h2_2(true, 1); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]); - console.debug('[Cider][Audio] CAP') - } - // Analog Warmth - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === false && - app.cfg.audio.spatial === false && - app.cfg.audio.maikiwiAudio.analogWarmth === true) { - CiderAudio.analogWarmth_h2_3(true, 1); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - console.debug('[Cider][Audio] Analog Warmth') - } - // Spatial - else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 && - app.cfg.audio.maikiwiAudio.ciderPPE === false && - app.cfg.audio.spatial === true && - app.cfg.audio.maikiwiAudio.analogWarmth === false){ - if (app.cfg.audio.maikiwiAudio.spatial === true) { - - app.cfg.audio.normalization = true; - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.audioBands[0]); - console.debug('[Cider][Audio] Maikiwi Spatial') + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { // Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial') + } + else { // Vibrant Bass, CAP, Analog Warmth, Spatial + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Spatial') + } + } + else { + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth') + } } else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]); - console.debug('[Cider][Audio] Spatial') + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); + app.cfg.audio.normalization = true + console.debug('[Cider][Audio] Vibrant Bass, CAP, Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]); + console.debug('[Cider][Audio] Vibrant Bass, CAP, Spatial') + } + } + else { + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]); + console.debug('[Cider][Audio] Vibrant Bass, CAP') + } } + } + else { + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { + CiderAudio.analogWarmth_h2_3(true, 2); + app.cfg.audio.normalization = true; + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth, Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth, Spatial') + } + } + else { + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth') + } + } + else { + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); + console.debug('[Cider][Audio] Vibrant Bass, Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]); + console.debug('[Cider][Audio] Vibrant Bass, Spatial') + } + } + else { + app.cfg.audio.normalization = true; + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); + console.debug('[Cider][Audio] Vibrant Bass') + } + } + } } - // Nothing - else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]); - console.debug('[Cider][Audio] Nothing') // If CAP & vibrant bass is disabled + // Vibrant Bass ends here + else { + if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { + CiderAudio.llpw_h2_2(true, 1); + + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { + CiderAudio.analogWarmth_h2_3(true, 3); + + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + app.cfg.audio.normalization = true; + console.debug('[Cider][Audio] CAP, Analog Warmth, Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] CAP, Analog Warmth, Spatial') + } + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] CAP and Analog Warmth') + } + } + else { + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); + app.cfg.audio.normalization = true; + console.debug('[Cider][Audio] CAP, Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]); + console.debug('[Cider][Audio] CAP, Spatial') + } + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]); + console.debug('[Cider][Audio] CAP') + } + } + } // CAP ends here + else { + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { + CiderAudio.analogWarmth_h2_3(true, 1); + + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + app.cfg.audio.normalization = true; + console.debug('[Cider][Audio] Analog Warmth, Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Analog Warmth, Spatial') + } + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + console.debug('[Cider][Audio] Analog Warmth') + } + } + else { + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.audioBands[0]); + app.cfg.audio.normalization = true; + console.debug('[Cider][Audio] Maikiwi Spatial') + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]); + console.debug('[Cider][Audio] Spatial') + } + } + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]); + console.debug('[Cider][Audio] Direct Mode to Equalizer') + } + } + } } console.debug("[Cider][Audio] Finished hierarchical loading"); diff --git a/src/renderer/views/components/equalizer.ejs b/src/renderer/views/components/equalizer.ejs index d9ab684e..e163ee32 100644 --- a/src/renderer/views/components/equalizer.ejs +++ b/src/renderer/views/components/equalizer.ejs @@ -295,11 +295,19 @@ }, changeVibrantBass() { app.cfg.audio.maikiwiAudio.vibrantBass.multiplier = app.cfg.audio.equalizer.vibrantBass / 10 - CiderAudio.hierarchical_loading(); - if (app.cfg.audio.equalizer.vibrantBass != 0) { - for (var i = 0; i < 21; i++) { + if (app.cfg.audio.equalizer.vibrantBass !== 0) { + try { + for (var i = 0; i < 21; i++) { CiderAudio.audioNodes.vibrantbassNode[i].gain.value = app.cfg.audio.maikiwiAudio.vibrantBass.gain[i] * (app.cfg.audio.equalizer.vibrantBass / 10); - }} + }} + catch(e) { + CiderAudio.hierarchical_loading(); + } + } + + else { + CiderAudio.hierarchical_loading(); + } }, changeMix() { for (var i = 0; i < 10; i++) { From aee73bdb0ed7238b45a65428d18927e5902c3bb6 Mon Sep 17 00:00:00 2001 From: cryptofyre Date: Tue, 8 Mar 2022 16:03:02 -0600 Subject: [PATCH 12/25] Bump & Fix Widevine (note: this breaks window animations until electron fixes their shit.) --- package.json | 6 +++--- src/main/index.ts | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 571d4492..0f94d1bc 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "@types/express": "^4.17.13", "@types/qrcode-terminal": "^0.12.0", "@types/ws": "^8.5.1", - "electron": "git+https://github.com/castlabs/electron-releases.git#16-x-y", + "electron": "git+https://github.com/castlabs/electron-releases.git", "electron-builder": "^22.14.13", "electron-builder-notarize-pkg": "^1.2.0", "electron-webpack": "^2.8.2", @@ -109,9 +109,9 @@ } ], "build": { - "electronVersion": "16.0.7", + "electronVersion": "17.1.0", "electronDownload": { - "version": "16.0.7+wvcus", + "version": "18.0.0-alpha.5+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" }, "appId": "cider", diff --git a/src/main/index.ts b/src/main/index.ts index fa96ddca..5d181f04 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,6 +1,6 @@ require('v8-compile-cache'); -import {app, components, ipcMain} from 'electron'; +const {app, components, ipcMain} = require('electron'); import {join} from 'path'; if (!app.isPackaged) { @@ -41,8 +41,7 @@ app.on('ready', () => { require('vue-devtools').install() } - app.whenReady().then(async () => { - await components.whenReady(); + components.whenReady().then(async () => { const bw = new BrowserWindow() const win = await bw.createWindow() From d8539200067364fc498e762ea1538e5783572558 Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Tue, 8 Mar 2022 14:14:52 -0800 Subject: [PATCH 13/25] audio: I am speed --- src/renderer/views/pages/audiolabs.ejs | 36 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/renderer/views/pages/audiolabs.ejs b/src/renderer/views/pages/audiolabs.ejs index c6daf4c6..61f41743 100644 --- a/src/renderer/views/pages/audiolabs.ejs +++ b/src/renderer/views/pages/audiolabs.ejs @@ -30,10 +30,10 @@ {{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description')}}
- -
@@ -55,10 +55,10 @@ {{$root.getLz('settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description')}}
- -
@@ -178,5 +178,33 @@ } }, + ciderPPEStandard: function () { + app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.5; + let LLPW_GAIN = [0.38, -1.81, -0.23, -0.51, 0.4, 0.84, 0.36, -0.34, 0.27, -1.2, -0.42, -0.67, 0.81, 1.31, -0.71, 0.68, -1.04, 0.79, -0.73, -1.33, 1.17, 0.57, 0.35, 6.33]; + for (let i = 0; i < 24; i++) { + CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; + } + }, + ciderPPEClarity: function () { + app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.55; + let c_LLPW_GAIN = [-0.11, 0.27, -0.8, 0.57, 1.84, -0.38, 0.47, -1.56, 0.83, 1.58, -1.79, -0.45, 0.48, 1.22, -1.58, -1.59, -2.03, 2.56, -2.2, -2.48, 4.75, 10.5, 1.43, 3.76]; + for (let i = 0; i < 24; i++) { + CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; + } + }, + analogWarmthSmooth: function () { + app.cfg.audio.maikiwiAudio.analogWarmth_value = 1.25 + let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86]; + for (let i = 0; i < 23; i++) { + CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.25; + } + }, + analogWarmthWarm: function () { + app.cfg.audio.maikiwiAudio.analogWarmth_value = 1.75 + let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86]; + for (let i = 0; i < 23; i++) { + CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.75; + } + } }}) \ No newline at end of file From 57e5d2a98ae8123b8bd5d2fc41e15d93ce4c4839 Mon Sep 17 00:00:00 2001 From: GamingLiamStudios <58615717+GamingLiamStudios@users.noreply.github.com> Date: Wed, 9 Mar 2022 11:46:24 +1100 Subject: [PATCH 14/25] Downgrade electron to known working version --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0f94d1bc..accb7cb8 100644 --- a/package.json +++ b/package.json @@ -109,9 +109,9 @@ } ], "build": { - "electronVersion": "17.1.0", + "electronVersion": "16.0.7", "electronDownload": { - "version": "18.0.0-alpha.5+wvcus", + "version": "16.0.7+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" }, "appId": "cider", From ae4dbb4a9a441e59cdda365e73df70356211d7cb Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 8 Mar 2022 17:10:36 -0800 Subject: [PATCH 15/25] plugins update, added explore plugins --- src/i18n/en_US.json | 12 +++-- src/i18n/source/en_US.json | 9 ++++ src/main/base/browserwindow.ts | 55 ++++++++++++++++++++- src/main/base/plugins.ts | 13 ++++- src/main/base/utils.ts | 4 ++ src/renderer/main/ciderfrontapi.js | 16 ++++++ src/renderer/views/pages/plugins-github.ejs | 42 ++++++++++------ src/renderer/views/pages/settings.ejs | 9 ++++ 8 files changed, 140 insertions(+), 20 deletions(-) diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index d224beb8..c1011241 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -201,7 +201,6 @@ "action.unfollow": "Unfollow", "action.unfollow.success": "Unfollowed", "action.unfollow.error": "Error Unfollowing", - "action.relaunch.confirm": "Do you want to relaunch Cider?", "action.playNext": "Play Next", "action.playLater": "Play Later", "action.startRadio": "Start Radio", @@ -316,8 +315,6 @@ "settings.option.visual.hardwareAcceleration.description": "Requires relaunch", "settings.header.visual.hardwareAcceleration.default": "Default", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", - "settings.option.visual.transparent": "Transparent frame", - "settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)", "settings.header.visual.theme": "Theme", "settings.option.visual.theme.github.download": "Install from GitHub URL", "settings.option.visual.theme.github.explore": "Explore GitHub Themes", @@ -326,6 +323,15 @@ "settings.prompt.visual.theme.github.URL": "Enter the URL of the theme you want to install", "settings.notyf.visual.theme.install.success": "Theme installed successfully", "settings.notyf.visual.theme.install.error": "Theme installation failed", + "settings.header.visual.plugin": "Plugin", + "settings.option.visual.plugin.github.download": "Install from GitHub URL", + "settings.option.visual.plugin.github.explore": "Explore GitHub Plugins", + "settings.header.visual.plugin.github.page": "Plugins from GitHub", + "settings.option.visual.plugin.github.install.confirm": "Are you sure you want to install {{ repo }}?", + "settings.prompt.visual.plugin.github.URL": "Enter the URL of the plugin you want to install", + "settings.prompt.visual.plugin.github.success": "Plugin installed successfully, Press OK to relaunch Cider", + "settings.notyf.visual.plugin.install.success": "Plugin installed successfully", + "settings.notyf.visual.plugin.install.error": "Plugin installation failed", "settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.dark": "Dark", "settings.option.visual.showPersonalInfo": "Show Personal Info", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 7e402929..c1011241 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -323,6 +323,15 @@ "settings.prompt.visual.theme.github.URL": "Enter the URL of the theme you want to install", "settings.notyf.visual.theme.install.success": "Theme installed successfully", "settings.notyf.visual.theme.install.error": "Theme installation failed", + "settings.header.visual.plugin": "Plugin", + "settings.option.visual.plugin.github.download": "Install from GitHub URL", + "settings.option.visual.plugin.github.explore": "Explore GitHub Plugins", + "settings.header.visual.plugin.github.page": "Plugins from GitHub", + "settings.option.visual.plugin.github.install.confirm": "Are you sure you want to install {{ repo }}?", + "settings.prompt.visual.plugin.github.URL": "Enter the URL of the plugin you want to install", + "settings.prompt.visual.plugin.github.success": "Plugin installed successfully, Press OK to relaunch Cider", + "settings.notyf.visual.plugin.install.success": "Plugin installed successfully", + "settings.notyf.visual.plugin.install.error": "Plugin installation failed", "settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.dark": "Dark", "settings.option.visual.showPersonalInfo": "Show Personal Info", diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index b9dd9734..48936ec7 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -12,6 +12,7 @@ import fetch from 'electron-fetch' import {wsapi} from "./wsapi"; import {AppImageUpdater, NsisUpdater} from "electron-updater"; import {utils} from './utils'; +import {Plugins} from "./plugins"; const fileWatcher = require('chokidar'); const AdmZip = require("adm-zip"); @@ -465,7 +466,10 @@ export class BrowserWindow { }); app.get("/plugins/:plugin/*", (req: {params: {plugin: string, 0: string}}, res) => { - const plugin = req.params.plugin; + let plugin = req.params.plugin; + if(Plugins.getPluginFromMap(plugin)) { + plugin = Plugins.getPluginFromMap(plugin) + } const file = req.params[0]; const pluginPath = join(utils.getPath('plugins'), plugin); console.log(pluginPath) @@ -596,6 +600,53 @@ export class BrowserWindow { event.returnValue = process.platform; }); + ipcMain.handle("get-github-plugin", async (event, url) => { + const returnVal = { + success: true, + theme: null, + message: "" + } + try { + if (!existsSync(utils.getPath("plugins"))) { + mkdirSync(utils.getPath("plugins")); + } + if (url.endsWith("/")) url = url.slice(0, -1); + let response = await fetch( + `${url}/archive/refs/heads/main.zip` + ); + let repo = url.split("/").slice(-2).join("/"); + let apiRepo = await fetch( + `https://api.github.com/repos/${repo}` + ).then((res) => res.json()); + console.debug(`REPO ID: ${apiRepo.id}`); + // extract the files from the first folder in the zip response + let zip = new AdmZip(await response.buffer()); + let entry = zip.getEntries()[0]; + if (!existsSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id))) { + mkdirSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id)); + } + console.log(join(utils.getPath("plugins"), "gh_" + apiRepo.id)) + zip.extractEntryTo(entry, join(utils.getPath("plugins"), "gh_" + apiRepo.id), false, true); + let commit = await fetch( + `https://api.github.com/repos/${repo}/commits` + ).then((res) => res.json()); + console.debug(`COMMIT SHA: ${commit[0].sha}`); + let theme = JSON.parse( + readFileSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id, "package.json"), "utf8") + ); + theme.id = apiRepo.id + theme.commit = commit[0].sha + writeFileSync( + join(utils.getPath("plugins"), "gh_" + apiRepo.id, "package.json"), + JSON.stringify(theme, null, 4), + "utf8" + ); + } catch (e) { + returnVal.success = false; + } + BrowserWindow.win.webContents.send("plugin-installed", returnVal); + }); + ipcMain.handle("get-github-theme", async (event, url) => { const returnVal = { success: true, @@ -817,7 +868,7 @@ export class BrowserWindow { BrowserWindow.win.webContents.openDevTools({mode: 'detach'}); }) - ipcMain.on('relaunchApp',(_event, _) => { + ipcMain.handle('relaunchApp',(_event, _) => { app.relaunch() app.exit() }) diff --git a/src/main/base/plugins.ts b/src/main/base/plugins.ts index ddaebf7c..c3d11233 100644 --- a/src/main/base/plugins.ts +++ b/src/main/base/plugins.ts @@ -19,11 +19,20 @@ export class Plugins { private basePluginsPath = path.join(__dirname, '../plugins'); private userPluginsPath = path.join(electron.app.getPath('userData'), 'Plugins'); private readonly pluginsList: any = {}; + private static PluginMap: any = {}; constructor() { this.pluginsList = this.getPlugins(); } + public static getPluginFromMap(plugin: string): any { + if(Plugins.PluginMap[plugin]) { + return Plugins.PluginMap[plugin]; + }else{ + return plugin; + } + } + public getPlugins(): any { let plugins: any = {}; @@ -68,10 +77,12 @@ export class Plugins { else if (fs.lstatSync(path.join(this.userPluginsPath, file)).isDirectory()) { const pluginPath = path.join(this.userPluginsPath, file); if (fs.existsSync(path.join(pluginPath, 'package.json'))) { - const plugin = require(path.join(pluginPath, "index.js")); + const pluginPackage = require(path.join(pluginPath, "package.json")); + const plugin = require(path.join(pluginPath, pluginPackage.main)); if (plugins[plugin.name] || plugin.name in plugins) { console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`); } else { + Plugins.PluginMap[pluginPackage.name] = file; const pluginEnv = { app: electron.app, store: utils.getStore(), diff --git a/src/main/base/utils.ts b/src/main/base/utils.ts index 81bf8637..103f772f 100644 --- a/src/main/base/utils.ts +++ b/src/main/base/utils.ts @@ -86,6 +86,10 @@ export class utils { return bw.win } + static loadPluginFrontend(path: string): void { + + } + static loadJSFrontend(path: string): void { bw.win.webContents.executeJavaScript(fs.readFileSync(path, "utf8")); } diff --git a/src/renderer/main/ciderfrontapi.js b/src/renderer/main/ciderfrontapi.js index fc51f884..145bd770 100644 --- a/src/renderer/main/ciderfrontapi.js +++ b/src/renderer/main/ciderfrontapi.js @@ -10,6 +10,22 @@ const CiderFrontAPI = { AddMenuEntry(entry) { app.pluginMenuEntries.push(entry) app.pluginInstalled = true + }, + StyleSheets: { + Add(href) { + console.log("Adding stylesheet: " + href) + let id = uuidv4() + let link = document.createElement("link") + link.rel = "stylesheet/less" + link.type = "text/css" + link.href = href + link.setAttribute("css-id", id) + // insert the link before document.querySelector("#userTheme") in head + document.querySelector("head").insertBefore(link, document.querySelector("#userTheme")) + less.registerStylesheetsImmediately() + less.refresh(true, true, true) + return link + } } } diff --git a/src/renderer/views/pages/plugins-github.ejs b/src/renderer/views/pages/plugins-github.ejs index a6da8981..db6eb689 100644 --- a/src/renderer/views/pages/plugins-github.ejs +++ b/src/renderer/views/pages/plugins-github.ejs @@ -3,11 +3,11 @@
-

Plugins from GitHub

+

{{$root.getLz('settings.header.visual.plugin.github.page')}}

@@ -84,7 +84,7 @@ }, mounted() { this.getRepos(); - this.getInstalledThemes(); + // this.getInstalledThemes(); }, methods: { getInstalledThemes() { @@ -124,36 +124,50 @@ }, installThemeRepo(repo) { let self = this - let msg = app.stringTemplateParser(app.getLz('settings.option.visual.theme.github.install.confirm'), { + let msg = app.stringTemplateParser(app.getLz('settings.option.visual.plugin.github.install.confirm'), { repo: repo.full_name }); bootbox.confirm(msg, (res) => { if (res) { - ipcRenderer.once("theme-installed", (event, arg) => { + ipcRenderer.once("plugin-installed", (event, arg) => { if (arg.success) { - self.themes = ipcRenderer.sendSync("get-themes") - notyf.success(app.getLz('settings.notyf.visual.theme.install.success')); + self.themes = [] + notyf.success(app.getLz('settings.notyf.visual.plugin.install.success')); + bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), ()=>{ + if(ok) { + ipcRenderer.invoke("relaunchApp") + }else{ + return + } + }) } else { - notyf.error(app.getLz('settings.notyf.visual.theme.install.error')); + notyf.error(app.getLz('settings.notyf.visual.plugin.install.error')); } }); - ipcRenderer.invoke("get-github-theme", repo.html_url) + ipcRenderer.invoke("get-github-plugin", repo.html_url) } }) }, installThemeURL() { let self = this - bootbox.prompt(app.getLz('settings.prompt.visual.theme.github.URL'), (result) => { + bootbox.prompt(app.getLz('settings.prompt.visual.plugin.github.URL'), (result) => { if (result) { - ipcRenderer.once("theme-installed", (event, arg) => { + ipcRenderer.once("plugin-installed", (event, arg) => { if (arg.success) { self.themes = ipcRenderer.sendSync("get-themes") - notyf.success(app.getLz('settings.notyf.visual.theme.install.success')); + bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), ()=>{ + if(ok) { + ipcRenderer.invoke("relaunchApp") + }else{ + return + } + }) + notyf.success(app.getLz('settings.notyf.visual.plugin.install.success')); } else { - notyf.error(app.getLz('settings.notyf.visual.theme.install.error')); + notyf.error(app.getLz('settings.notyf.visual.plugin.install.error')); } }); - ipcRenderer.invoke("get-github-theme", result) + ipcRenderer.invoke("get-github-plugin", result) } }); }, diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index 67be8cb1..9d0a1ed4 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -662,6 +662,15 @@
+
+
+ {{$root.getLz('settings.option.visual.plugin.github.explore')}} +
+
+ +
+
+
{{$root.getLz('settings.option.experimental.unknownPlugin')}} From 16b126adfba9275680ccb23ba30038c972de5e7e Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Tue, 8 Mar 2022 17:13:51 -0800 Subject: [PATCH 16/25] I love vue --- src/renderer/views/components/equalizer.ejs | 2 +- src/renderer/views/pages/audiolabs.ejs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/renderer/views/components/equalizer.ejs b/src/renderer/views/components/equalizer.ejs index e163ee32..c8c2e6e5 100644 --- a/src/renderer/views/components/equalizer.ejs +++ b/src/renderer/views/components/equalizer.ejs @@ -295,7 +295,7 @@ }, changeVibrantBass() { app.cfg.audio.maikiwiAudio.vibrantBass.multiplier = app.cfg.audio.equalizer.vibrantBass / 10 - if (app.cfg.audio.equalizer.vibrantBass !== 0) { + if (app.cfg.audio.equalizer.vibrantBass !== '0') { try { for (var i = 0; i < 21; i++) { CiderAudio.audioNodes.vibrantbassNode[i].gain.value = app.cfg.audio.maikiwiAudio.vibrantBass.gain[i] * (app.cfg.audio.equalizer.vibrantBass / 10); diff --git a/src/renderer/views/pages/audiolabs.ejs b/src/renderer/views/pages/audiolabs.ejs index 61f41743..2f0ca426 100644 --- a/src/renderer/views/pages/audiolabs.ejs +++ b/src/renderer/views/pages/audiolabs.ejs @@ -30,10 +30,10 @@ {{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description')}}
- -
@@ -55,10 +55,10 @@ {{$root.getLz('settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description')}}
- -
From 1035b88c10d062cca0a37efd08d93b91fe44b78a Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 8 Mar 2022 17:20:19 -0800 Subject: [PATCH 17/25] Update plugins-github.ejs --- src/renderer/views/pages/plugins-github.ejs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/views/pages/plugins-github.ejs b/src/renderer/views/pages/plugins-github.ejs index db6eb689..751a8262 100644 --- a/src/renderer/views/pages/plugins-github.ejs +++ b/src/renderer/views/pages/plugins-github.ejs @@ -133,7 +133,7 @@ if (arg.success) { self.themes = [] notyf.success(app.getLz('settings.notyf.visual.plugin.install.success')); - bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), ()=>{ + bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), (ok)=>{ if(ok) { ipcRenderer.invoke("relaunchApp") }else{ @@ -155,7 +155,7 @@ ipcRenderer.once("plugin-installed", (event, arg) => { if (arg.success) { self.themes = ipcRenderer.sendSync("get-themes") - bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), ()=>{ + bootbox.confirm(app.getLz("settings.prompt.visual.plugin.github.success"), (ok)=>{ if(ok) { ipcRenderer.invoke("relaunchApp") }else{ From 4504776ac04d0e8d29830d0181c34547bdffe916 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 8 Mar 2022 17:23:56 -0800 Subject: [PATCH 18/25] readded missing keys --- src/i18n/en_US.json | 3 +++ src/i18n/source/en_US.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index c1011241..dd1e0c5e 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -230,6 +230,7 @@ "action.newpreset": "New Preset...", "action.deletepreset": "Delete Preset", "action.open": "Open", + "action.relaunch.confirm": "Do you want to relaunch Cider?", "settings.header.general": "General", "settings.header.general.description": "Adjust the general settings for Cider.", "settings.option.general.language": "Language", @@ -365,6 +366,8 @@ "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", "settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping", "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.", + "settings.option.visual.transparent": "Transparent frame", + "settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index c1011241..dd1e0c5e 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -230,6 +230,7 @@ "action.newpreset": "New Preset...", "action.deletepreset": "Delete Preset", "action.open": "Open", + "action.relaunch.confirm": "Do you want to relaunch Cider?", "settings.header.general": "General", "settings.header.general.description": "Adjust the general settings for Cider.", "settings.option.general.language": "Language", @@ -365,6 +366,8 @@ "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", "settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping", "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.", + "settings.option.visual.transparent": "Transparent frame", + "settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", From fa0a1dd63ecff45473eb73b2a9a3dba858c276fa Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Tue, 8 Mar 2022 17:55:04 -0800 Subject: [PATCH 19/25] spatial leveling --- src/renderer/audio/audio.js | 8 ++++---- src/renderer/views/pages/audiolabs.ejs | 14 +++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 76e3eedc..34740568 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -76,7 +76,8 @@ const CiderAudio = { } CiderAudio.equalizer() }, - normalizerOn: function (){}, + normalizerOn: function (){ + }, normalizerOff: function (){ CiderAudio.audioNodes.gainNode.gain.setTargetAtTime(1, CiderAudio.context.currentTime+ 1, 0.5); }, @@ -84,7 +85,7 @@ const CiderAudio = { spatialOn: function (){ if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.spatialNode = CiderAudio.context.createConvolver(); - + CiderAudio.audioNodes.spatialNode.normalize = true; switch (app.cfg.audio.maikiwiAudio.spatialType) { case 0: fetch('./audio/impulses/CiderSpatial_Conv.wav').then(async (impulseData) => { @@ -108,8 +109,7 @@ const CiderAudio = { }); app.cfg.audio.maikiwiAudio.spatialType = 0; break; - } - CiderAudio.audioNodes.spatialNode.normalize = true; + } CiderAudio.audioNodes.spatialNode.connect(CiderAudio.context.destination); } else { diff --git a/src/renderer/views/pages/audiolabs.ejs b/src/renderer/views/pages/audiolabs.ejs index 2f0ca426..21b2a6c1 100644 --- a/src/renderer/views/pages/audiolabs.ejs +++ b/src/renderer/views/pages/audiolabs.ejs @@ -119,7 +119,7 @@
- Cider Origami Vocal Enhance/Remaster™️ + Cider Origami™️ Vocal Enhancer/Remasterer
Re-textures the vocals by carving out the frequencies and adjusts them to the selected profile.
Modern: @@ -169,10 +169,22 @@ methods: { toggleSpatial: function () { if (app.cfg.audio.spatial) { + if (app.cfg.audio.maikiwiAudio.spatial === false) { + if (app.mk.volume - 0.2512 > 0) {app.mk.volume -= 0.2512} + else {app.mk.volume = 0.0001} + } CiderAudio.spatialOn() CiderAudio.hierarchical_loading(); + if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.mk.volume + 0.2512 < 1) {app.mk.volume += 0.2512} + else {app.mk.volume = 1} + } } else { + if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.mk.volume - 0.2512 > 0) {app.mk.volume -= 0.2512} + else {app.mk.volume = 0.0001} + } app.cfg.audio.maikiwiAudio.spatial = false; CiderAudio.spatialOff() } From cd0e8fb0aa2a6ac778ed06fb75c0283578f5729d Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 8 Mar 2022 17:57:26 -0800 Subject: [PATCH 20/25] added "Show in Apple Music" to now playing context menu --- src/i18n/en_US.json | 1 + src/i18n/source/en_US.json | 1 + src/renderer/assets/music.svg | 1 + src/renderer/main/vueapp.js | 14 ++++++++++++++ 4 files changed, 17 insertions(+) create mode 100644 src/renderer/assets/music.svg diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index dd1e0c5e..5d437392 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -207,6 +207,7 @@ "action.goToArtist": "Go to Artist", "action.goToAlbum": "Go to Album", "action.showInPlaylist": "Show in Playlist", + "action.showInAppleMusic": "Show in Apple Music", "action.moveToTop": "Move out of Folder", "action.share": "Share", "action.rename": "Rename", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index dd1e0c5e..5d437392 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -207,6 +207,7 @@ "action.goToArtist": "Go to Artist", "action.goToAlbum": "Go to Album", "action.showInPlaylist": "Show in Playlist", + "action.showInAppleMusic": "Show in Apple Music", "action.moveToTop": "Move out of Folder", "action.share": "Share", "action.rename": "Rename", diff --git a/src/renderer/assets/music.svg b/src/renderer/assets/music.svg new file mode 100644 index 00000000..7bee2f7e --- /dev/null +++ b/src/renderer/assets/music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 638aa49b..617b87ba 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -3687,6 +3687,15 @@ const app = new Vue({ app.appRoute(`album/${app.mk.nowPlayingItem.relationships.albums.data[0].id}`) } }, + { + "id": "showInMusic", + "icon": "./assets/music.svg", + "hidden": true, + "name": app.getLz('action.showInAppleMusic'), + "action": function () { + app.routeView(app.mk.nowPlayingItem._container) + } + }, { "icon": "./assets/feather/share.svg", "name": app.getLz('action.share'), @@ -3713,6 +3722,11 @@ const app = new Vue({ menus.normal.items = menus.normal.items.concat(this.contextExt.normal) } } + + if(app.mk.nowPlayingItem._container["attributes"] && app.mk.nowPlayingItem._container.name != "station") { + menus.normal.items.find(x => x.id == "showInMusic").hidden = false + } + this.showMenuPanel(menus[useMenu], event) try { From aec2ecdaf1d9cd3e55429c92425208b537e45cfd Mon Sep 17 00:00:00 2001 From: Maikiwi Date: Tue, 8 Mar 2022 18:34:15 -0800 Subject: [PATCH 21/25] delete webaudio garbage --- src/renderer/audio/audio.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 34740568..b929dc1d 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -67,14 +67,14 @@ const CiderAudio = { } else {try{CiderAudio.source.disconnect(CiderAudio.context.destination)}catch(e){}} CiderAudio.audioNodes.gainNode = CiderAudio.context.createGain() CiderAudio.source.connect(CiderAudio.audioNodes.gainNode); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination); if(app.cfg.audio.normalization){ CiderAudio.normalizerOn() } if (app.cfg.audio.spatial){ CiderAudio.spatialOn() } - CiderAudio.equalizer() + CiderAudio.equalizer(); + CiderAudio.hierarchical_loading(); }, normalizerOn: function (){ }, @@ -110,13 +110,9 @@ const CiderAudio = { app.cfg.audio.maikiwiAudio.spatialType = 0; break; } - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.context.destination); } else { - try{ - CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.context.destination);} catch(e){} CiderAudio.audioNodes.spatialNode = new ResonanceAudio(CiderAudio.context); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.context.destination); let roomDimensions = { width: 32, height: 12, @@ -643,13 +639,11 @@ const CiderAudio = { CiderAudio.audioNodes.audioBands[i].gain.value = GAIN[i] * app.cfg.audio.equalizer.mix; } - // Dynamic-ish loading - CiderAudio.hierarchical_loading(); - for (let i = 1; i < BANDS.length; i ++) { CiderAudio.audioNodes.audioBands[i-1].connect(CiderAudio.audioNodes.audioBands[i]); } CiderAudio.audioNodes.audioBands[BANDS.length-1].connect(CiderAudio.context.destination); + } } From d199cc35a3f44a089d8bd7b4be20311b6e37ad83 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 8 Mar 2022 19:11:21 -0800 Subject: [PATCH 22/25] added title props to mediaitems for long names --- src/renderer/views/components/mediaitem-list-item.ejs | 4 ++-- src/renderer/views/components/mediaitem-square.ejs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/renderer/views/components/mediaitem-list-item.ejs b/src/renderer/views/components/mediaitem-list-item.ejs index 0297dcf3..8625e392 100644 --- a/src/renderer/views/components/mediaitem-list-item.ejs +++ b/src/renderer/views/components/mediaitem-list-item.ejs @@ -45,10 +45,10 @@
-
+
{{ item.attributes.name }}
-
+