sinzmise-cetastories-en 2.0.0-1731236813758 → 2.0.0-1731239057774

Sign up to get free protection for your applications and to get access to all the features.
package/content.json CHANGED
@@ -1 +1 @@
1
- {"meta":{"title":"Ceta Magical House","subtitle":"Only a magical house","description":"The Story,The Dream.","author":"SZ·Ninty Ong","url":"https://en.blog.sinzmise.top","root":"/"},"pages":[{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"baidu_verify_codeva-NA6uDlCuZg.html","permalink":"https://en.blog.sinzmise.top/baidu_verify_codeva-NA6uDlCuZg","excerpt":"","text":"fbef504749e3eb3d8c01aba00d679782"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"google8073542809160a67.html","permalink":"https://en.blog.sinzmise.top/google8073542809160a67","excerpt":"","text":"google-site-verification: google8073542809160a67.html"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"manifest.json","permalink":"https://en.blog.sinzmise.top/manifest.json","excerpt":"","text":"{\"name\":\"Ceta Storical House\",\"short_name\":\"CetaHouse\",\"theme_color\":\"#ccf6f4\",\"background_color\":\"#ccf6f4\",\"display\":\"standalone\",\"scope\":\"/\",\"start_url\":\"/\",\"icons\":[{\"src\":\"/images/siteicon/windows11/SmallTile.scale-100.png\",\"sizes\":\"71x71\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-125.png\",\"sizes\":\"89x89\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-150.png\",\"sizes\":\"107x107\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-200.png\",\"sizes\":\"142x142\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-400.png\",\"sizes\":\"284x284\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-100.png\",\"sizes\":\"150x150\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-125.png\",\"sizes\":\"188x188\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-150.png\",\"sizes\":\"225x225\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-200.png\",\"sizes\":\"300x300\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-400.png\",\"sizes\":\"600x600\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-100.png\",\"sizes\":\"310x150\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-125.png\",\"sizes\":\"388x188\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-150.png\",\"sizes\":\"465x225\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-200.png\",\"sizes\":\"620x300\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-400.png\",\"sizes\":\"1240x600\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-100.png\",\"sizes\":\"310x310\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-125.png\",\"sizes\":\"388x388\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-150.png\",\"sizes\":\"465x465\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-200.png\",\"sizes\":\"620x620\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-400.png\",\"sizes\":\"1240x1240\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-100.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-125.png\",\"sizes\":\"55x55\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-150.png\",\"sizes\":\"66x66\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-200.png\",\"sizes\":\"88x88\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-400.png\",\"sizes\":\"176x176\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-100.png\",\"sizes\":\"50x50\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-125.png\",\"sizes\":\"63x63\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-150.png\",\"sizes\":\"75x75\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-200.png\",\"sizes\":\"100x100\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-400.png\",\"sizes\":\"200x200\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-100.png\",\"sizes\":\"620x300\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-125.png\",\"sizes\":\"775x375\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-150.png\",\"sizes\":\"930x450\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-200.png\",\"sizes\":\"1240x600\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-400.png\",\"sizes\":\"2480x1200\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-24.png\",\"sizes\":\"24x24\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-30.png\",\"sizes\":\"30x30\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-36.png\",\"sizes\":\"36x36\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-44.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-24.png\",\"sizes\":\"24x24\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-30.png\",\"sizes\":\"30x30\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-36.png\",\"sizes\":\"36x36\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-44.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png\",\"sizes\":\"24x24\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png\",\"sizes\":\"30x30\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png\",\"sizes\":\"36x36\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/android/android-launchericon-512-512.png\",\"sizes\":\"512x512\"},{\"src\":\"/images/siteicon/android/android-launchericon-192-192.png\",\"sizes\":\"192x192\"},{\"src\":\"/images/siteicon/android/android-launchericon-144-144.png\",\"sizes\":\"144x144\"},{\"src\":\"/images/siteicon/android/android-launchericon-96-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/android/android-launchericon-72-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/android/android-launchericon-48-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/ios/16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/ios/20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/ios/29.png\",\"sizes\":\"29x29\"},{\"src\":\"/images/siteicon/ios/32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/ios/40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/ios/50.png\",\"sizes\":\"50x50\"},{\"src\":\"/images/siteicon/ios/57.png\",\"sizes\":\"57x57\"},{\"src\":\"/images/siteicon/ios/58.png\",\"sizes\":\"58x58\"},{\"src\":\"/images/siteicon/ios/60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/ios/64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/ios/72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/ios/76.png\",\"sizes\":\"76x76\"},{\"src\":\"/images/siteicon/ios/80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/ios/87.png\",\"sizes\":\"87x87\"},{\"src\":\"/images/siteicon/ios/100.png\",\"sizes\":\"100x100\"},{\"src\":\"/images/siteicon/ios/114.png\",\"sizes\":\"114x114\"},{\"src\":\"/images/siteicon/ios/120.png\",\"sizes\":\"120x120\"},{\"src\":\"/images/siteicon/ios/128.png\",\"sizes\":\"128x128\"},{\"src\":\"/images/siteicon/ios/144.png\",\"sizes\":\"144x144\"},{\"src\":\"/images/siteicon/ios/152.png\",\"sizes\":\"152x152\"},{\"src\":\"/images/siteicon/ios/167.png\",\"sizes\":\"167x167\"},{\"src\":\"/images/siteicon/ios/180.png\",\"sizes\":\"180x180\"},{\"src\":\"/images/siteicon/ios/192.png\",\"sizes\":\"192x192\"},{\"src\":\"/images/siteicon/ios/256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/ios/512.png\",\"sizes\":\"512x512\"},{\"src\":\"/images/siteicon/ios/1024.png\",\"sizes\":\"1024x1024\"}]}"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"sw.js","permalink":"https://en.blog.sinzmise.top/sw.js","excerpt":"","text":"// 全站打包上传 npm,sw 并发请求 cdn const prefix = 'sinzmise-cetastories-en'; const cacheSuffixVersion = '00000018-::cacheSuffixVersion::'; const CACHE_NAME = prefix + '-v' + cacheSuffixVersion; const PreCachlist = [ \"/css/style.css\", \"/js/app.js\", \"/js/search/hexo.js\", ]; let NPMMirror = true; const NPMPackage = \"sinzmise-cetastories-en\"; let NPMPackageVersion = \"latest\"; let debug = true; // location.hostname == 'localhost' && (debug = true) && (NPMMirror = false); const handleFetch = async (event) => { const url = event.request.url; if (/hm\\.baidu\\.com/.test(url)) { return NetworkOnly(event) } else if (/collect-perf\\.51\\.la/.test(url)) { return NetworkOnly(event) } else if (/sdk\\.51\\.la/.test(url)) { return NetworkOnly(event) } else if (/www\\.google-analytics\\.com/.test(url)) { return NetworkOnly(event) } else if (/@latest/.test(url)) { return CacheFirst(event) } else if (/cdnjs\\.cloudflare\\.com/.test(url)) { return CacheAlways(event) } else if (/music\\.126\\.net/.test(url)) { return CacheAlways(event) } else if (/qqmusic\\.qq\\.com/.test(url)) { return CacheAlways(event) } else if (/jsd\\.cdn\\.storisinz\\.site/.test(url)) { return CacheAlways(event) } else if (/jsdelivr\\.net/.test(url)) { return CacheAlways(event) } else if (/npm\\.elemecdn\\.com/.test(url)) { return CacheAlways(event) } else if (/unpkg\\.com/.test(url)) { return CacheAlways(event) } else if (/.*\\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)$/.test(url)) { return CacheAlways(event) } else if (/.*\\.(css|js)$/.test(url)) { return CacheAlways(event) } else { return CacheFirst(event) } } const cdn = { gh: { jsdelivr: 'https://cdn.jsdelivr.net/gh', fastly: 'https://fastly.jsdelivr.net/gh', gcore: 'https://gcore.jsdelivr.net/gh', testingcf: 'https://testingcf.jsdelivr.net/gh', test1: 'https://test1.jsdelivr.net/gh', storisinz: 'https://jsd.cdn.storisinz.site/gh', webcache: 'https://code.webcache.cn/gh', }, combine: { jsdelivr: 'https://cdn.jsdelivr.net/combine', fastly: 'https://fastly.jsdelivr.net/combine', gcore: 'https://gcore.jsdelivr.net/combine', testingcf: 'https://testingcf.jsdelivr.net/combine', test1: 'https://test1.jsdelivr.net/combine', storisinz: 'https://jsd.cdn.storisinz.site/combine', }, npm: { jsdelivr: 'https://cdn.jsdelivr.net/npm', fastly: 'https://fastly.jsdelivr.net/npm', gcore: 'https://gcore.jsdelivr.net/npm', testingcf: 'https://testingcf.jsdelivr.net/npm', test1: 'https://test1.jsdelivr.net/npm', unpkg: 'https://unpkg.com', eleme: 'https://npm.elemecdn.com', storisinz: 'https://jsd.cdn.storisinz.site/npm', webcache: 'https://npm.webcache.cn', }, cdnjs: { cdnjs: 'https://cdnjs.cloudflare.com/ajax/libs', baomitu: 'https://lib.baomitu.com', bytedance: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M', sustech: 'https://mirrors.sustech.edu.cn/cdnjs/ajax/libs', webcache: 'https://cdnjs.webstatic.cn/ajax/libs', } } const cdn_match_list = [] for (const type in cdn) { for (const key in cdn[type]) { cdn_match_list.push({ type: type, key: cdn[type][key] }) } } const _console = console; const color = { black: '#000000', red: '#FF0000', green: '#008000', yellow: '#FFFF00', blue: '#0000FF', magenta: '#FF00FF', cyan: '#00FFFF', white: '#FFFFFF', }; const add = (...arr) => { let fi = [ [] ]; for (let key = 0; key < arr.length; key++) { const [first, ...other] = arr[key]; fi[0] += first; fi = fi.concat(other); } return fi; }; const createlog = (util) => (...args) => { // const fun = _console[util] ? _console[util] : _console.log; const fun = util == \"error\" ? _console[util] : _console.log; fun.apply(void 0, args); }; const creategroup = (util) => (...args) => { const fun = _console.groupCollapsed; fun.apply(void 0, args); }; const colorUtils = { bold: (str) => { if (typeof str === 'string' || typeof str === 'number') { return `${str};font-weight: bold;`; } for (let key = 1; key < str.length; key++) { str[key] += `;font-weight: bold;`; } return str; } }; const colorHash = { log: 'black', wait: 'cyan', error: 'red', warn: 'yellow', ready: 'green', info: 'blue', event: 'magenta', }; const createChalk = (name) => (...str) => { if (typeof str[0] === 'object') { createlog(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), ...str)); return; } let strArr = str; if (typeof str === 'string' || typeof str === 'number') { strArr = colorUtils[colorHash[name]](str); } createlog(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), strArr)); }; const createChalkBg = (name) => (...str) => { if (typeof str[0] === 'object') { createlog(name)(...add(colorUtils.bold(colorUtils[`bg${firstToUpperCase(colorHash[name])}`](`[${firstToUpperCase(name)}] `)), ...str)); return; } let strArr = str; if (typeof str === 'string' || typeof str === 'number') { strArr = colorUtils[colorHash[name]](str); } createlog(name)(...add(colorUtils.bold(colorUtils[`bg${firstToUpperCase(colorHash[name])}`](`[${firstToUpperCase(name)}] `)), strArr)); }; const createChalkGroup = (name) => (...str) => { if (typeof str[0] === 'object') { creategroup(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), ...str)); return; } let strArr = str; if (typeof str === 'string' || typeof str === 'number') { strArr = colorUtils[colorHash[name]](str); } creategroup(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), strArr)); }; const chalk = { group: { end: _console.groupEnd }, bg: {} }; Object.keys(colorHash).forEach(key => { chalk[key] = createChalk(key); chalk.group[key] = createChalkGroup(key); chalk.bg[key] = createChalkBg(key); }); const firstToUpperCase = (str) => str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()); Object.keys(color).forEach(key => { colorUtils[key] = (str) => { if (typeof str === 'string' || typeof str === 'number') { return [`%c${str}`, `color:${color[key]}`]; } for (let i = 1; i < str.length; i++) { str[i] += `;color:${color[key]}`; } return str; }; colorUtils[`bg${firstToUpperCase(key)}`] = (str) => { if (typeof str === 'string' || typeof str === 'number') { return [`%c${str}`, `padding: 2px 4px; border-radius: 3px; color: ${key === 'white' ? '#000' : '#fff'}; font-weight: bold; background:${color[key]};`]; } for (let i = 1; i < str.length; i++) { str[i] += `;padding: 2px 4px; border-radius: 3px; font-weight: bold; background:${color[key]};`; } return str; }; }); self.logger = { add, ...chalk, ...colorUtils, }; if (!debug) { logger = { log: () => { }, wait: () => { }, error: () => { }, warn: () => { }, ready: () => { }, info: () => { }, event: () => { }, group: { log: () => { }, wait: () => { }, error: () => { }, warn: () => { }, ready: () => { }, info: () => { }, event: () => { }, end: () => { }, }, bg: { log: () => { }, wait: () => { }, error: () => { }, warn: () => { }, ready: () => { }, info: () => { }, event: () => { }, } }; console.log = () => { }; } const generate_uuid = () => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } self.db = { read: (key, config) => { if (!config) { config = { type: \"text\" } } return new Promise((resolve, reject) => { caches.open(CACHE_NAME).then(cache => { cache.match(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`)).then(function (res) { if (!res) resolve(null) res.text().then(text => resolve(text)) }).catch(() => { resolve(null) }) }) }) }, write: (key, value) => { return new Promise((resolve, reject) => { caches.open(CACHE_NAME).then(function (cache) { cache.put(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`), new Response(value)); resolve() }).catch(() => { reject() }) }) } } const compareVersion = (a, b) => { let v1 = a.split('.'); let v2 = b.split('.'); const len = Math.max(v1.length, v2.length); while (v1.length < len) { v1.push('0'); } while (v2.length < len) { v2.push('0'); } for (let i = 0; i < len; i++) { const num1 = parseInt(v1[i]); const num2 = parseInt(v2[i]); if (num1 > num2) { return a; } else if (num1 < num2) { return b; } } return a; } const mirrors = [ `https://registry.npmjs.org/${NPMPackage}/latest`, `https://mirrors.cloud.tencent.com/npm/${NPMPackage}/latest` ] const getLocalVersion = async () => { NPMPackageVersion = await db.read('blog_version') || NPMPackageVersion logger.bg.info(`Local Version: ${NPMPackage}@${NPMPackageVersion}`) } let mirror_time = 0; const setNewestVersion = async () => { if (!NPMMirror) { return } let f = null; if (!(mirror_time % (mirrors.length + 1))) { f = FetchEngine(mirrors); } else { f = fetch(mirrors[(mirror_time % (mirrors.length + 1)) - 1]); } mirror_time++; return f .then(res => res.json()) .then(async res => { if (!res.version) throw ('No Version Found!') NPMPackageVersion = compareVersion(res.version, await db.read('blog_version') || NPMPackageVersion) logger.bg.ready(`${NPMPackage}@${NPMPackageVersion}`) await db.write('blog_version', NPMPackageVersion) }) .catch(error => { logger.error('[Set Newest Version] ' + (error.stack || error)) }) } setInterval(async () => { await setNewestVersion() }, 60 * 1000); setTimeout(async () => { await setNewestVersion() }, 5000) const installFunction = async () => { await getLocalVersion(); return caches.open(CACHE_NAME + \"-precache\") .then(async function (cache) { if (!await db.read('uuid')) { await db.write('uuid', generate_uuid()) } if (PreCachlist.length) { logger.group.event(`Precaching ${PreCachlist.length} files.`); let index = 0; PreCachlist.forEach(function (url) { cache.match(new Request(url)).then(function (response) { if (response) { logger.ready(`Precaching ${url}`); } else { logger.wait(`Precaching ${url}`); cache.add(new Request(url)); } index++; if (index === PreCachlist.length) { logger.ready(`Precached ${PreCachlist.length} files.`); logger.group.end(); } }) }) } }).catch((error) => { logger.error('[install] ' + (error.stack || error)); }) } self.addEventListener('install', async function (event) { logger.bg.event(\"service worker install event listening\"); try { self.skipWaiting(); event.waitUntil(installFunction()); logger.bg.ready('service worker install sucess!'); } catch (error) { logger.error('[install] ' + (error.stack || error)); } }); self.addEventListener('activate', async event => { logger.bg.event(\"service worker activate event listening\"); try { event.waitUntil( caches.keys().then((keys) => { return Promise.all(keys.map((key) => { if (!key.includes(cacheSuffixVersion)) { caches.delete(key); logger.bg.ready('Deleted Outdated Cache: ' + key); } })); }).catch((error) => { logger.error('[activate] ' + (error.stack || error)); }) ); await self.clients.claim() logger.bg.ready('service worker activate sucess!'); } catch (error) { logger.error('[activate] ' + (error.stack || error)); } }) self.addEventListener('fetch', async event => { event.respondWith( handleFetch(event).catch((error) => { logger.error('[fetch] ' + event.request.url + '\\n[error] ' + (error.stack || error)); }) ) }); const NetworkOnly = async (event) => { logger.group.info('NetworkOnly: ' + new URL(event.request.url).pathname); logger.wait('service worker fetch: ' + event.request.url) logger.group.end(); return fetch(event.request) } const CacheFirst = async (event) => { return caches.match(event.request).then(function (resp) { logger.group.info('CacheFirst: ' + new URL(event.request.url).pathname); logger.wait('service worker fetch: ' + event.request.url) if (resp) { logger.group.ready(`Cache Hit`); console.log(resp) logger.group.end(); logger.group.end(); event.waitUntil(CacheRuntime(event.request)) return resp; } else { logger.warn(`Cache Miss`); logger.group.end(); return CacheRuntime(event.request) } }) } const CacheAlways = async (event) => { return caches.match(event.request).then(function (resp) { logger.group.info('CacheAlways: ' + new URL(event.request.url).pathname); logger.wait('service worker fetch: ' + event.request.url) if (resp) { logger.group.ready(`Cache Hit`); console.log(resp) logger.group.end(); logger.group.end(); return resp; } else { logger.warn(`Cache Miss`); logger.group.end(); return CacheRuntime(event.request) } }) } const matchCache = async (event) => { return caches.match(event.request).then(function (resp) { logger.group.info('service worker fetch: ' + event.request.url) if (resp) { logger.group.ready(`Cache Hit`); console.log(resp) logger.group.end(); logger.group.end(); return resp; } else { logger.warn(`Cache Miss`); logger.group.end(); return CacheRuntime(event.request) } }) } async function CacheRuntime(request) { const url = new URL(request.url); let response = await matchCDN(request); if (!response) { response = await fetch(request).catch(() => null) } logger.group.event(`Cache Runtime ${url.pathname}`); logger.wait(`Caching url: ${request.url}`); console.log(response); if (request.method === \"GET\" && (url.protocol == \"https:\")) { const cache = await caches.open(CACHE_NAME + \"-runtime\"); cache.put(request, response.clone()).catch(error => { logger.error('[Cache Runtime] ' + (error.stack || error)); if (error.name === 'QuotaExceededError') { caches.delete(CACHE_NAME + \"-runtime\"); logger.ready(\"deleted cache\") } }) logger.ready(`Cached url: ${request.url}`); } else { logger.warn(`Not Cached url: ${request.url}`); } logger.group.end(); return response; } const matchCDN = async (req) => { const nav = navigator const { saveData, effectiveType } = nav.connection || nav.mozConnection || nav.webkitConnection || {} if (saveData || /2g/.test(effectiveType)) { logger.warn(\"Slow Network: Transparent Proxy\"); return fetch(req); } const urls = [] let urlObj = new URL(req.url) let pathType = urlObj.pathname.split('/')[1] let pathTestRes = \"\"; if (NPMMirror && new RegExp(location.origin).test(req.url)) { logger.group.ready(`Match NPM Mirror: ` + req.url); for (const key in cdn.npm) { let url = cdn.npm[key] + \"/\" + NPMPackage + \"@\" + NPMPackageVersion + req.url.replace(location.origin, '') url = fullPath(fullPath(url)) console.log(url); urls.push(url) } logger.group.end() } if (!urls.length) { for (const item of cdn_match_list) { if (new RegExp(item.key).test(req.url)) { pathType = item.type pathTestRes = new RegExp(item.key).exec(req.url)[0] break; } } for (const type in cdn) { if (type === pathType) { logger.group.ready(`Match CDN ${pathType}: ` + req.url); for (const key in cdn[type]) { const url = cdn[type][key] + req.url.replace(pathTestRes, '') console.log(url); urls.push(url) } logger.group.end() } } } let res; if (urls.length) res = FetchEngine(urls) else res = fetch(req) if (res && NPMMirror && new RegExp(location.origin).test(req.url)) { const ext = fullPath(fullPath(req.url)).split('.').pop() const contentType = getContentType(ext) res = res .then(res => res.arrayBuffer()) .then(buffer => new Response(buffer, { headers: { \"Content-Type\": contentType } })) .catch(() => null) } return res } const fullPath = (url) => { url = url.split('?')[0].split('#')[0] if (url.endsWith('/')) { url += 'index.html' } else { const list = url.split('/') const last = list[list.length - 1] if (last.indexOf('.') === -1) { url += '.html' } } return url } async function progress(res) { return new Response(await res.arrayBuffer(), { status: res.status, headers: res.headers }) } function createPromiseAny() { Promise.any = function (promises) { return new Promise((resolve, reject) => { promises = Array.isArray(promises) ? promises : [] let len = promises.length let errs = [] if (len === 0) return reject(new AggregateError('All promises were rejected')) promises.forEach((p) => { if (p instanceof Promise) { p.then( (res) => resolve(res), (err) => { len-- errs.push(err) if (len === 0) reject(new AggregateError(errs)) } ) } else { reject(p) } }) }) } } function fetchAny(reqs) { const controller = new AbortController() return reqs.map(req => { return new Promise((resolve, reject) => { fetch(req, { signal: controller.signal }) .then(progress) .then(res => { controller.abort() if (res.status !== 200) reject(null) else resolve(res) }) .catch(() => reject(null)) }) }) } function fetchParallel(reqs) { const abortEvent = new Event(\"abortOtherInstance\") const eventTarget = new EventTarget(); return reqs.map(async req => { const controller = new AbortController(); let tagged = false; eventTarget.addEventListener(abortEvent.type, () => { if (!tagged) controller.abort(); }) return new Promise((resolve, reject) => { fetch(req, { signal: controller.signal, }).then(res => { tagged = true; eventTarget.dispatchEvent(abortEvent) if (res.status !== 200) reject(null) else resolve(res) }).catch(() => reject(null)) }) }); } const FetchEngine = (reqs) => { if (!Promise.any) createPromiseAny(); return Promise.any(fetchParallel(reqs)).then(res => res) .catch((e) => { if (e == \"AggregateError: All promises were rejected\") { return Promise.any(fetchAny(reqs)) .then((res) => res) .catch(() => null); } return null; }); }; const getContentType = (ext) => { switch (ext) { case 'js': return 'text/javascript' case 'html': return 'text/html' case 'css': return 'text/css' case 'json': return 'application/json' case 'webp': return 'image/webp' case 'jpg': return 'image/jpg' case 'jpeg': return 'image/jpeg' case 'png': return 'image/png' case 'gif': return 'image/gif' case 'xml': return 'text/xml' case 'xsl': return 'text/xml' case 'webmanifest': return 'text/webmanifest' case 'map': return 'application/json' case 'bcmap': return 'image/vnd.wap.wbmp' case 'wbmp': return 'image/vnd.wap.wbmp' case 'bmp': return 'image/bmp' case 'ico': return 'image/vnd.microsoft.icon' case 'tiff': return 'image/tiff' case 'tif': return 'image/tiff' case 'svg': return 'image/svg+xml' case 'svgz': return 'image/svg+xml' case 'woff': return 'application/font-woff' case 'woff2': return 'application/font-woff2' case 'ttf': return 'application/font-ttf' case 'otf': return 'application/font-otf' case 'eot': return 'application/vnd.ms-fontobject' case 'zip': return 'application/zip' case 'tar': return 'application/x-tar' case 'gz': return 'application/gzip' case 'bz2': return 'application/x-bzip2' case 'rar': return 'application/x-rar-compressed' case '7z': return 'application/x-7z-compressed' case 'doc': return 'application/msword' case 'docx': return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' case 'xls': return 'application/vnd.ms-excel' case 'xlsx': return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' case 'ppt': return 'application/vnd.ms-powerpoint' case 'pptx': return 'application/vnd.openxmlformats-officedocument.presentationml.presentation' case 'pdf': return 'application/pdf' case 'txt': return 'text/plain' case 'rtf': return 'application/rtf' case 'mp3': return 'audio/mpeg' case 'wav': return 'audio/x-wav' case 'ogg': return 'audio/ogg' case 'mp4': return 'video/mp4' case 'm4v': return 'video/x-m4v' case 'mov': return 'video/quicktime' case 'avi': return 'video/x-msvideo' case 'wmv': return 'video/x-ms-wmv' case 'flv': return 'video/x-flv' case 'swf': return 'application/x-shockwave-flash' case 'mpg': return 'video/mpeg' case 'mpeg': return 'video/mpeg' case 'mpe': return 'video/mpeg' case 'mpv': return 'video/mpeg' case 'm2v': return 'video/mpeg' case 'm4a': return 'audio/mp4' case 'aac': return 'audio/aac' case 'm3u': return 'audio/x-mpegurl' case 'm3u8': return 'application/vnd.apple.mpegurl' case 'pls': return 'audio/x-scpls' case 'cue': return 'application/x-cue' case 'wma': return 'audio/x-ms-wma' case 'flac': return 'audio/flac' case 'aif': return 'audio/x-aiff' case 'aiff': return 'audio/x-aiff' case 'aifc': return 'audio/x-aiff' case 'au': return 'audio/basic' case 'snd': return 'audio/basic' case 'mid': return 'audio/midi' case 'midi': return 'audio/midi' case 'kar': return 'audio/midi' default: return 'text/plain' } }"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"test.json","permalink":"https://en.blog.sinzmise.top/test.json","excerpt":"","text":"[{\"class_name\":\"即刻短文\",\"essay_list\":[{\"content\":\"园长新造型!爱死\",\"date\":\"2023/08/01 17:12:30\",\"video\":{\"bilibili\":\"//player.bilibili.com/player.html?aid=701381935&bvid=BV1dm4y1L7vj&cid=1212026428&page=1\",\"autoplay\":true}},{\"content\":\"这辈子都不想完善项目了 😭 两点了 一看才搓完三分之一..\",\"date\":\"2023/08/01 02:02:44\",\"video\":{\"player\":\"https://meuicat.com/video/1.mp4\"}},{\"content\":\"让我看看是谁在路上都还在敲键盘 噢 原来是我自己啊..\",\"date\":\"2023/07/31 15:54:26\",\"from\":\"iPhone XR\"},{\"content\":\"落班 烧个排骨778~\",\"date\":\"2023/07/26 17:55:36\",\"from\":\"iPhone XR\",\"image\":[\"https://s11.ax1x.com/2023/07/26/pCjWbY4.jpg || 图片描述\",\"https://s11.ax1x.com/2023/07/26/pCjWqfJ.jpg\"]},{\"content\":\"嘘..听歌..睡觉...\",\"date\":\"2023/07/20 00:38:41\",\"aplayer\":{\"server\":\"netease\",\"id\":\"1430702919\"},\"top\":true},{\"content\":\"人生应该是一个轴对称的形状,最后失去的,也就是最开始拥有的。现在没人记得你的生日,有好处也有坏处,至少我是这么理解的。但无论是好还是坏,忍一忍,都会很快过去的\",\"date\":\"2023/07/19 01:48:36\",\"from\":\"iPhone XR\",\"link\":\"/blog/64 || 链接描述\"},{\"content\":\"用堆AI重绘一下我最爱的头像(图一 👉 图二)\",\"date\":\"2023/07/06 16:30:32\",\"from\":\"iPhone XR\",\"link\":\"/blog/61\",\"image\":[\"https://img.meuicat.com/posts/2023/7/10.webp\",\"https://img.meuicat.com/posts/2023/7/11.webp\"]},{\"content\":\"\",\"date\":\"2023/06/30 08:26:22\",\"aplayer\":{\"server\":\"netease\",\"id\":\"2009974513\"}}]}]"},{"title":"分类","date":"2022-02-23T17:56:00.000Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"categories/index.html","permalink":"https://en.blog.sinzmise.top/categories/","excerpt":"","text":""},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/custom2.css","permalink":"https://en.blog.sinzmise.top/css/custom2.css","excerpt":"","text":".DocSearch-Input{ margin-bottom: 0!important; }"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/plane.css","permalink":"https://en.blog.sinzmise.top/css/plane.css","excerpt":"","text":"/* --------------------首页飞机操作样式-------------------- */ .planeOpt kbd { margin: 0 3px; padding: 3px 5px; border: 1px solid #b4b4b4; border-radius: 3px; background-color: #f8f8f8; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .25), 0 2px 1px 0 rgba(255, 255, 255, .6) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, .25), 0 2px 1px 0 rgba(255, 255, 255, .6) inset; color: #34495e; white-space: nowrap; font-weight: 600; font-size: .9em; font-family: Monaco, 'Ubuntu Mono', monospace; line-height: 1em; } .planeOpt button { cursor: pointer; font-family: inherit; font-size: 12px; background: #49b1f5; color: white; padding: 0.5em 1em; display: flex; align-items: center; border: none; border-radius: 8px; overflow: hidden; transition: all 0.2s; } .planeOpt button span { display: block; margin-left: 0.3em; transition: all 0.3s ease-in-out; } .planeOpt button svg { display: block; transform-origin: center center; transition: transform 0.3s ease-in-out; } .planeOpt button:hover .svg-wrapper { animation: fly-1 0.6s ease-in-out infinite alternate; } .planeOpt button:hover svg { transform: translateX(1.2em) rotate(45deg) scale(1.1); } .planeOpt button:hover span { transform: translateX(5em); } .planeOpt button:active { transform: scale(0.95); }"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/tags.css","permalink":"https://en.blog.sinzmise.top/css/tags.css","excerpt":"","text":"[data-theme=\"dark\"] div.btns { filter: brightness(0.7); } [data-theme=\"dark\"] div.btns a { background: 0 0; } [data-theme=\"dark\"] .checkbox { filter: brightness(0.7); } div.btns { margin: 0 -8px; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-align: start; -moz-box-align: start; -o-box-align: start; -ms-flex-align: start; -webkit-align-items: flex-start; align-items: flex-start; overflow: visible; line-height: 1.8; } div.btns b { font-size: 0.875rem; } div.btns.wide > a { padding-left: 32px; padding-right: 32px; } div.btns.fill > a { -webkit-box-flex: 1; -moz-box-flex: 1; -o-box-flex: 1; -ms-box-flex: 1; box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; width: auto; } div.btns.around { -webkit-box-pack: distribute; -moz-box-pack: distribute; -o-box-pack: distribute; -ms-flex-pack: distribute; -webkit-justify-content: space-around; justify-content: space-around; } div.btns.center { -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } div.btns.grid2 > a { width: calc(100% / 2 - 16px); } div.btns.grid3 > a { width: calc(100% / 3 - 16px); } div.btns.grid4 > a { width: calc(100% / 4 - 16px); } div.btns.grid5 > a { width: calc(100% / 5 - 16px); } div.btns a { -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; margin: 8px; margin-top: calc(1.25 * 16px + 32px); min-width: 120px; font-weight: bold; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -ms-flex-line-pack: center; -webkit-align-content: center; align-content: center; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; -webkit-box-orient: vertical; -moz-box-orient: vertical; -o-box-orient: vertical; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; padding: 8px; text-align: center; background: #f6f6f6; border-radius: 4px; } div.btns a > i { background: #2196f3 !important; } div.btns a > i:first-child { color: #fff; background: #2196f3; } div.btns a b { font-weight: bold; line-height: 1.3; } div.btns a img { margin: 0.4em auto; } div.btns a:not([href]) { cursor: default; color: inherit; } div.btns a[href]:hover { background: rgba(255,87,34,0.15); } div.btns a[href]:hover > i:first-child { background: #ff5722; } div.btns, div.btns p, div.btns a { font-size: 0.8125rem; color: #555; } @media screen and (max-width: 1024px) { div.btns.grid2 > a { width: calc(100% / 2 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid2 > a { width: calc(100% / 2 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid2 > a { width: calc(100% / 1 - 16px); } } @media screen and (max-width: 1024px) { div.btns.grid3 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid3 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid3 > a { width: calc(100% / 1 - 16px); } } @media screen and (max-width: 1024px) { div.btns.grid4 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid4 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid4 > a { width: calc(100% / 2 - 16px); } } @media screen and (max-width: 1024px) { div.btns.grid5 > a { width: calc(100% / 4 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid5 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid5 > a { width: calc(100% / 2 - 16px); } } div.btns a > img:first-child, div.btns a > i:first-child { -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; height: 64px; width: 64px; -webkit-box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); margin: 16px 8px 4px 8px; margin-top: calc(-1.25 * 16px - 32px); border: 2px solid #fff; background: #fff; line-height: 60px; font-size: 28px; } div.btns a > img:first-child.auto, div.btns a > i:first-child.auto { width: auto; } div.btns a p, div.btns a b { margin: 0.25em; font-weight: normal; line-height: 1.25; word-wrap: break-word; } div.btns a[href]:hover, div.btns a[href]:hover b { color: #ff5722; } div.btns a[href]:hover > img:first-child, div.btns a[href]:hover > i:first-child { -webkit-transform: scale(1.1) translateY(-8px); -moz-transform: scale(1.1) translateY(-8px); -o-transform: scale(1.1) translateY(-8px); -ms-transform: scale(1.1) translateY(-8px); transform: scale(1.1) translateY(-8px); -webkit-box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); } div.btns.circle a > img:first-child, div.btns.circle a > i:first-child { border-radius: 32px; } div.btns.rounded a > img:first-child, div.btns.rounded a > i:first-child { border-radius: 16px; } :root { --bubble-text-color: #e9a218; --bubble-text-hover-color: #2c7fe7; --bubble-text-shadow: rgba(35,35,35,0.5); } [data-theme=\"dark\"] { --bubble-text-color: #f2b94b; --bubble-text-hover-color: #2c7fe7; --bubble-text-shadow: rgba(35,35,35,0.5); } .bubble-content { display: inline-block; color: var(--bubble-text-color); font-weight: bold; -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; text-shadow: var(--bubble-text-shadow); } .bubble-content:hover { -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; color: var(--bubble-text-hover-color); } .bubble-content:hover + .bubble-notation .bubble-item { -webkit-transform: translate(-40px, 10px) rotateX(0deg); -moz-transform: translate(-40px, 10px) rotateX(0deg); -o-transform: translate(-40px, 10px) rotateX(0deg); -ms-transform: translate(-40px, 10px) rotateX(0deg); transform: translate(-40px, 10px) rotateX(0deg); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 1; -ms-filter: none; filter: none; } .bubble-notation { display: inline-block; } .bubble-item { -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); color: #fff; z-index: 99; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; position: absolute; -webkit-transform: translate(-40px, 10px) rotateX(90deg); -moz-transform: translate(-40px, 10px) rotateX(90deg); -o-transform: translate(-40px, 10px) rotateX(90deg); -ms-transform: translate(-40px, 10px) rotateX(90deg); transform: translate(-40px, 10px) rotateX(90deg); width: auto; height: auto; max-width: 400px; overflow: hidden; padding: 20px 10px 10px 10px; clip-path: polygon(5px 10px, 20px 10px, 30px 0, 40px 10px, calc(100% - 5px) 10px, 100% 15px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 15px, 5px 10px); } #article-container .btn-center { margin: 0 0 20px; text-align: center; } #article-container .btn-beautify { display: inline-block; margin: 0 4px 6px; padding: 0 15px; background-color: var(--btn-beautify-color, #777); color: #fff; line-height: 2; border-radius: 8px; } #article-container .btn-beautify.blue { --btn-beautify-color: #428bca; } #article-container .btn-beautify.pink { --btn-beautify-color: #ff69b4; } #article-container .btn-beautify.red { --btn-beautify-color: #f00; } #article-container .btn-beautify.purple { --btn-beautify-color: #6f42c1; } #article-container .btn-beautify.orange { --btn-beautify-color: #ff8c00; } #article-container .btn-beautify.green { --btn-beautify-color: #5cb85c; } #article-container .btn-beautify:hover { background-color: var(--btn-hover-color); } #article-container .btn-beautify i + span { margin-left: 6px; } #article-container .btn-beautify:not(.block) + .btn-beautify:not(.block) { margin: 0 4px 20px; } #article-container .btn-beautify.block { display: block; margin: 0 0 20px; width: fit-content; width: -moz-fit-content; } #article-container .btn-beautify.block.center { margin: 0 auto 20px; } #article-container .btn-beautify.block.right { margin: 0 0 20px auto; } #article-container .btn-beautify.larger { padding: 6px 15px; } #article-container .btn-beautify:hover { text-decoration: none; } #article-container .btn-beautify.outline { border: 1px solid transparent; border-color: var(--btn-beautify-color, #777); background-color: transparent; color: var(--btn-beautify-color, #777); } #article-container .btn-beautify.outline:hover { background-color: var(--btn-beautify-color, #777); } #article-container .btn-beautify.outline:hover { color: #fff !important; } .carousel { touch-action: none; overflow: hidden; display: -webkit-box; display: -ms-flexbox; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; background: transparent; height: fit-content; min-height: 600px; -webkit-perspective: 1000px; -webkit-perspective: 1000px; -moz-perspective: 1000px; -ms-perspective: 1000px; perspective: 1000px; -webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; } .drag-container, .spin-container { position: relative; display: -webkit-box; display: -ms-flexbox; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; margin: auto; -webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-transform: rotateX(-10deg); -webkit-transform: rotateX(-10deg); -moz-transform: rotateX(-10deg); -o-transform: rotateX(-10deg); -ms-transform: rotateX(-10deg); transform: rotateX(-10deg); } .drag-container img, .drag-container video { -webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; position: absolute; left: 0; top: 0; object-fit: cover; height: 100%; width: 100%; line-height: 200px; font-size: 50px; text-align: center; -webkit-box-shadow: 0 0 8px #fff; -webkit-box-shadow: 0 0 8px #fff; box-shadow: 0 0 8px #fff; -webkit-box-reflect: below 10px linear-gradient(transparent, transparent, rgba(0,0,0,0.333)); } .drag-container .img-alt.is-center { display: none; } .drag-container br { display: none; } .drag-container p { font-family: Serif; position: absolute; top: 100%; left: 50%; -webkit-transform: translate(-50%, -50%) rotateX(90deg); -webkit-transform: translate(-50%, -50%) rotateX(90deg); -moz-transform: translate(-50%, -50%) rotateX(90deg); -o-transform: translate(-50%, -50%) rotateX(90deg); -ms-transform: translate(-50%, -50%) rotateX(90deg); transform: translate(-50%, -50%) rotateX(90deg); color: #fff; } .drag-container img:hover, .drag-container video:hover { -webkit-box-shadow: 0 0 15px rgba(255,255,255,0.867); -webkit-box-shadow: 0 0 15px rgba(255,255,255,0.867); box-shadow: 0 0 15px rgba(255,255,255,0.867); -webkit-box-reflect: below 10px linear-gradient(transparent, transparent, rgba(0,0,0,0.467)); } .carousel-ground { width: 900px; height: 900px; position: absolute; top: 100%; left: 50%; -webkit-transform: translate(-50%, -50%) rotateX(90deg); -webkit-transform: translate(-50%, -50%) rotateX(90deg); -moz-transform: translate(-50%, -50%) rotateX(90deg); -o-transform: translate(-50%, -50%) rotateX(90deg); -ms-transform: translate(-50%, -50%) rotateX(90deg); transform: translate(-50%, -50%) rotateX(90deg); background: -webkit--webkit-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit--moz-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit--o-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit--ms-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); } img.medium-zoom-image.entered.loaded.medium-zoom-image--opened { width: auto !important; } @-webkit-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-webkit-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @-moz-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-webkit-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-o-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-moz-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @-webkit-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @-o-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } .checkbox { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } .checkbox input { -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; -o-appearance: none; -webkit-appearance: none; -moz-appearance: none; appearance: none; position: relative; height: 16px; width: 16px; -webkit-transition: all 0.15s ease-out 0s; -moz-transition: all 0.15s ease-out 0s; -o-transition: all 0.15s ease-out 0s; -ms-transition: all 0.15s ease-out 0s; transition: all 0.15s ease-out 0s; cursor: pointer; display: inline-block; outline: none; border-radius: 2px; -webkit-flex-shrink: 0; flex-shrink: 0; margin-right: 8px; border: 2px solid #2196f3; pointer-events: none; } .checkbox input[type=\"checkbox\"]:before { left: 1px; top: 5px; width: 0; height: 2px; -webkit-transition: all 0.2s ease-in; -moz-transition: all 0.2s ease-in; -o-transition: all 0.2s ease-in; -ms-transition: all 0.2s ease-in; transition: all 0.2s ease-in; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); } .checkbox input[type=\"checkbox\"]:after { right: 7px; bottom: 3px; width: 2px; height: 0; -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -ms-transition: all 0.2s ease-out; transition: all 0.2s ease-out; -webkit-transform: rotate(40deg); -moz-transform: rotate(40deg); -o-transform: rotate(40deg); -ms-transform: rotate(40deg); transform: rotate(40deg); -webkit-transform: rotate(40deg); -moz-transform: rotate(40deg); -ms-transform: rotate(40deg); -o-transform: rotate(40deg); -webkit-transition-delay: 0.25s; -moz-transition-delay: 0.25s; -o-transition-delay: 0.25s; -ms-transition-delay: 0.25s; transition-delay: 0.25s; } .checkbox input[type=\"checkbox\"]:checked { background: #2196f3; } .checkbox input[type=\"checkbox\"]:checked:before { left: 0; top: 7px; width: 6px; height: 2px; } .checkbox input[type=\"checkbox\"]:checked:after { right: 3px; bottom: 1px; width: 2px; height: 10px; } .checkbox.minus input[type=\"checkbox\"]:before { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 1px; top: 5px; width: 0; height: 2px; } .checkbox.minus input[type=\"checkbox\"]:after { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 1px; top: 5px; width: 0; height: 2px; } .checkbox.minus input[type=\"checkbox\"]:checked:before { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.minus input[type=\"checkbox\"]:checked:after { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.plus input[type=\"checkbox\"]:before { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 1px; top: 5px; width: 0; height: 2px; } .checkbox.plus input[type=\"checkbox\"]:after { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 5px; top: 1px; width: 2px; height: 0; } .checkbox.plus input[type=\"checkbox\"]:checked:before { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.plus input[type=\"checkbox\"]:checked:after { left: 5px; top: 1px; width: 2px; height: 10px; } .checkbox.times input[type=\"checkbox\"]:before { -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); left: 3px; top: 1px; width: 0; height: 2px; } .checkbox.times input[type=\"checkbox\"]:after { -webkit-transform: rotate(135deg); -moz-transform: rotate(135deg); -o-transform: rotate(135deg); -ms-transform: rotate(135deg); transform: rotate(135deg); right: 3px; top: 1px; width: 0; height: 2px; } .checkbox.times input[type=\"checkbox\"]:checked:before { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.times input[type=\"checkbox\"]:checked:after { right: 1px; top: 5px; width: 10px; height: 2px; } .checkbox input[type=\"radio\"] { border-radius: 50%; } .checkbox input[type=\"radio\"]:before { content: \"\"; display: block; width: 8px; height: 8px; border-radius: 50%; margin: 2px; -webkit-transform: scale(0); -moz-transform: scale(0); -o-transform: scale(0); -ms-transform: scale(0); transform: scale(0); -webkit-transition: all 0.25s ease-out; -moz-transition: all 0.25s ease-out; -o-transition: all 0.25s ease-out; -ms-transition: all 0.25s ease-out; transition: all 0.25s ease-out; } .checkbox input[type=\"radio\"]:checked:before { -webkit-transform: scale(1); -moz-transform: scale(1); -o-transform: scale(1); -ms-transform: scale(1); transform: scale(1); background: var(--text-bg-hover); } .checkbox.red input { border-color: #fe5f58; } .checkbox.red input[type=\"checkbox\"]:checked { background: #fe5f58; } .checkbox.red input[type=\"radio\"]:checked:before { background: #fe5f58; } .checkbox.green input { border-color: #3dc550; } .checkbox.green input[type=\"checkbox\"]:checked { background: #3dc550; } .checkbox.green input[type=\"radio\"]:checked:before { background: #3dc550; } .checkbox.yellow input { border-color: #ffbd2b; } .checkbox.yellow input[type=\"checkbox\"]:checked { background: #ffbd2b; } .checkbox.yellow input[type=\"radio\"]:checked:before { background: #ffbd2b; } .checkbox.cyan input { border-color: #1bcdfc; } .checkbox.cyan input[type=\"checkbox\"]:checked { background: #1bcdfc; } .checkbox.cyan input[type=\"radio\"]:checked:before { background: #1bcdfc; } .checkbox.blue input { border-color: #2196f3; } .checkbox.blue input[type=\"checkbox\"]:checked { background: #2196f3; } .checkbox.blue input[type=\"radio\"]:checked:before { background: #2196f3; } .checkbox p { display: inline-block; margin-top: 2px !important; margin-bottom: 0 !important; } .checkbox input[type=\"checkbox\"]:before, .checkbox input[type=\"checkbox\"]:after { position: absolute; content: \"\"; background: #fff; } [data-theme=\"dark\"] .checkbox { filter: brightness(0.7); } details.folding-tag { display: block; padding: 16px; margin: 1em 0; border-radius: 4px; background: #fff; font-size: var(--global-font-size); -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; border: 1px solid #f6f6f6; } details.folding-tag summary { cursor: pointer; padding: 16px; margin: -16px; border-radius: 4px; color: rgba(68,68,68,0.7); font-size: 0.875rem !important; font-weight: bold; position: relative; line-height: normal; } details.folding-tag summary > p, details.folding-tag summary > h1, details.folding-tag summary > h2, details.folding-tag summary > h3, details.folding-tag summary > h4, details.folding-tag summary > h5, details.folding-tag summary > h6 { display: inline; border-bottom: none !important; } details.folding-tag summary:hover { color: #444; } details.folding-tag summary:hover:after { position: absolute; content: '+'; text-align: center; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -o-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); right: 16px; } details.folding-tag >summary { background: #f6f6f6; } details.folding-tag[purple] { border-color: #fae7fd; } details.folding-tag[purple] >summary { background: #fae7fd; } details.folding-tag[blue] { border-color: #e8f4fd; } details.folding-tag[blue] >summary { background: #e8f4fd; } details.folding-tag[cyan] { border-color: #e8fafe; } details.folding-tag[cyan] >summary { background: #e8fafe; } details.folding-tag[green] { border-color: #ebf9ed; } details.folding-tag[green] >summary { background: #ebf9ed; } details.folding-tag[yellow] { border-color: #fff8e9; } details.folding-tag[yellow] >summary { background: #fff8e9; } details.folding-tag[orange] { border-color: #fdf1e7; } details.folding-tag[orange] >summary { background: #fdf1e7; } details.folding-tag[red] { border-color: #feefee; } details.folding-tag[red] >summary { background: #feefee; } details.folding-tag[open] { border-color: rgba(68,68,68,0.2); } details.folding-tag[open] >summary { border-bottom: 1px solid rgba(68,68,68,0.2); border-bottom-left-radius: 0; border-bottom-right-radius: 0; } details.folding-tag[open][purple] { border-color: rgba(208,23,238,0.3); } details.folding-tag[open][purple] >summary { border-bottom-color: rgba(208,23,238,0.3); } details.folding-tag[open][blue] { border-color: rgba(33,150,243,0.3); } details.folding-tag[open][blue] >summary { border-bottom-color: rgba(33,150,243,0.3); } details.folding-tag[open][cyan] { border-color: rgba(27,205,252,0.3); } details.folding-tag[open][cyan] >summary { border-bottom-color: rgba(27,205,252,0.3); } details.folding-tag[open][green] { border-color: rgba(61,197,80,0.3); } details.folding-tag[open][green] >summary { border-bottom-color: rgba(61,197,80,0.3); } details.folding-tag[open][yellow] { border-color: rgba(255,189,43,0.3); } details.folding-tag[open][yellow] >summary { border-bottom-color: rgba(255,189,43,0.3); } details.folding-tag[open][orange] { border-color: rgba(236,118,22,0.3); } details.folding-tag[open][orange] >summary { border-bottom-color: rgba(236,118,22,0.3); } details.folding-tag[open][red] { border-color: rgba(254,95,88,0.3); } details.folding-tag[open][red] >summary { border-bottom-color: rgba(254,95,88,0.3); } details.folding-tag[open] >summary { color: #444; margin-bottom: 0; } details.folding-tag[open] >summary:hover:after { content: '-'; } details.folding-tag[open] >div.content { padding: 16px; margin: -16px; margin-top: 0; } details.folding-tag[open] >div.content p>a:hover { text-decoration: underline; } details.folding-tag[open] >div.content > p:first-child, details.folding-tag[open] >div.content > .tabs:first-child, details.folding-tag[open] >div.content > ul:first-child, details.folding-tag[open] >div.content > ol:first-child, details.folding-tag[open] >div.content > .highlight:first-child, details.folding-tag[open] >div.content > .note:first-child, details.folding-tag[open] >div.content > details:first-child { margin-top: 0; } details.folding-tag[open] >div.content > p:last-child, details.folding-tag[open] >div.content > .tabs:last-child, details.folding-tag[open] >div.content > ul:last-child, details.folding-tag[open] >div.content > ol:last-child, details.folding-tag[open] >div.content > .highlight:last-child, details.folding-tag[open] >div.content > .note:last-child, details.folding-tag[open] >div.content > details:last-child { margin-bottom: 0; } [data-theme=\"dark\"] details[open] > div.content { padding: 16px; margin: -16px; margin-top: 0; background: #2c2d2d; color: rgba(255,255,255,0.6); } [data-theme=\"dark\"] details > summary { filter: brightness(0.7); } #article-container figure.gallery-group { position: relative; float: left; overflow: hidden; margin: 6px 4px; width: calc(50% - 8px); height: 250px; border-radius: 8px; background: #000; -webkit-transform: translate3d(0, 0, 0); } @media screen and (max-width: 600px) { #article-container figure.gallery-group { width: calc(100% - 8px); } } #article-container figure.gallery-group:hover img { opacity: 0.4; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\"; filter: alpha(opacity=40); -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } #article-container figure.gallery-group:hover .gallery-group-name::after { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } #article-container figure.gallery-group:hover p { opacity: 1; -ms-filter: none; filter: none; -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } #article-container figure.gallery-group img { position: relative; margin: 0; max-width: none; width: calc(100% + 20px); height: 250px; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; opacity: 0.8; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\"; filter: alpha(opacity=80); -webkit-transition: all 0.3s, filter 375ms ease-in 0.2s; -moz-transition: all 0.3s, filter 375ms ease-in 0.2s; -o-transition: all 0.3s, filter 375ms ease-in 0.2s; -ms-transition: all 0.3s, filter 375ms ease-in 0.2s; transition: all 0.3s, filter 375ms ease-in 0.2s; -webkit-transform: translate3d(-10px, 0, 0); -moz-transform: translate3d(-10px, 0, 0); -o-transform: translate3d(-10px, 0, 0); -ms-transform: translate3d(-10px, 0, 0); transform: translate3d(-10px, 0, 0); object-fit: cover; } #article-container figure.gallery-group figcaption { position: absolute; top: 0; left: 0; padding: 30px; width: 100%; height: 100%; color: #fff; text-transform: uppercase; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; } #article-container figure.gallery-group figcaption > a { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1000; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); } #article-container figure.gallery-group p { margin: 0; padding: 8px 0 0; letter-spacing: 1px; font-size: 1.1em; line-height: 1.5; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; -moz-transition: opacity 0.35s, -moz-transform 0.35s; -o-transition: opacity 0.35s, -o-transform 0.35s; -ms-transition: opacity 0.35s, -ms-transform 0.35s; transition: opacity 0.35s, transform 0.35s; -webkit-transform: translate3d(100%, 0, 0); -moz-transform: translate3d(100%, 0, 0); -o-transform: translate3d(100%, 0, 0); -ms-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); -webkit-line-clamp: 4; } #article-container figure.gallery-group .gallery-group-name { position: relative; margin: 0; padding: 8px 0; font-weight: bold; font-size: 1.65em; line-height: 1.5; -webkit-line-clamp: 2; } #article-container figure.gallery-group .gallery-group-name:after { position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background: #fff; content: ''; -webkit-transition: -webkit-transform 0.35s; -moz-transition: -moz-transform 0.35s; -o-transition: -o-transform 0.35s; -ms-transition: -ms-transform 0.35s; transition: transform 0.35s; -webkit-transform: translate3d(-100%, 0, 0); -moz-transform: translate3d(-100%, 0, 0); -o-transform: translate3d(-100%, 0, 0); -ms-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } #article-container .gallery-group-main { overflow: auto; padding: 0 0 16px; } #article-container .gallery { margin: 0 0 16px; text-align: center; } #article-container .gallery .fj-gallery { opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); } #article-container .gallery .fj-gallery .img-alt { display: none; } #article-container .gallery .fj-gallery.lazyload + button { display: inline-block; } #article-container .gallery .fj-gallery .gallery-data { display: none; } #article-container .gallery button { display: none; margin-top: 25px; padding: 10px; width: 9em; border-radius: 5px; background: var(--btn-bg); color: var(--btn-color); font-weight: bold; font-size: 1.1em; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -o-transition: all 0.3s; -ms-transition: all 0.3s; transition: all 0.3s; } #article-container .gallery button > * { -webkit-transition: all 0.4s; -moz-transition: all 0.4s; -o-transition: all 0.4s; -ms-transition: all 0.4s; transition: all 0.4s; } #article-container .gallery button i { width: 0; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); } #article-container .gallery button:hover { background: var(--btn-hover-color); } #article-container .gallery button:hover i { margin-left: 2px; width: 20px; opacity: 1; -ms-filter: none; filter: none; } a.ghcard { display: inline-block; line-height: 0; } .md .ghcard-group { -webkit-column-count: 2; -moz-column-count: 2; column-count: 2; -webkit-column-gap: 0; -moz-column-gap: 0; column-gap: 0; margin: 0 -8px; } .md .ghcard-group .ghcard { margin: 8px; } blockquote.pullquote { position: relative; max-width: 45%; font-size: 110%; } blockquote.pullquote.left { float: left; margin: 1em 0.5em 0 0; } blockquote.pullquote.right { float: right; margin: 1em 0 0 0.5em; } .video-container { position: relative; overflow: hidden; margin-bottom: 16px; padding-top: 56.25%; height: 0; } .video-container iframe { position: absolute; top: 0; left: 0; margin-top: 0; width: 100%; height: 100%; } .hide-inline > .hide-button, .hide-block > .hide-button { display: inline-block; padding: 5px 18px; background: #49b1f5; color: var(--white); } .hide-inline > .hide-button:hover, .hide-block > .hide-button:hover { background-color: var(--btn-hover-color); } .hide-inline > .hide-button.open, .hide-block > .hide-button.open { display: none; } .hide-inline > .hide-button.open + div, .hide-block > .hide-button.open + div { display: block; } .hide-inline > .hide-button.open + span, .hide-block > .hide-button.open + span { display: inline; } .hide-inline > .hide-content, .hide-block > .hide-content { display: none; } .hide-inline > .hide-button { margin: 0 6px; } .hide-inline > .hide-content { margin: 0 6px; } .hide-block { margin: 0 0 16px; } .toggle { margin-bottom: 20px; border: 1px solid #f0f0f0; } .toggle > .toggle-button { padding: 6px 15px; background: #f0f0f0; color: #1f2d3d; cursor: pointer; } .toggle > .toggle-content { margin: 30px 24px; } .md .img { object-fit: contain; } img.inline { display: inline !important; vertical-align: middle; -webkit-transform: translateY(-4px); -moz-transform: translateY(-4px); -o-transform: translateY(-4px); -ms-transform: translateY(-4px); transform: translateY(-4px); } p .img-alt { display: inline-block; width: 100%; } s, del { color: #8e8e8e; text-decoration-color: #8e8e8e; } u { color: #444; text-decoration: none; border-bottom: 1px solid #fe5f58; } emp { color: #444; border-bottom: 4px dotted #fe5f58; } wavy { color: #444; text-decoration-style: wavy; text-decoration-line: underline; text-decoration-color: #fe5f58; } psw { color: transparent; background: #a1a1a1; border-radius: 2px; -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } psw:hover { color: #444; background: none; } kbd { display: inline-block; color: #666; font: bold 9pt arial; text-decoration: none; text-align: center; padding: 2px 5px; margin: 0 5px; background: #eff0f2; -moz-border-radius: 4px; border-radius: 4px; border-top: 1px solid #f5f5f5; -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; -moz-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; text-shadow: 0 1px 0 #f5f5f5; } #article-container .inline-img { display: inline; margin: 0 3px; height: 1.1em; vertical-align: text-bottom; } .hl-label { padding: 2px 4px; border-radius: 3px; color: #fff; } .hl-label.default { background-color: #777; } .hl-label.blue { background-color: #428bca; } .hl-label.pink { background-color: #ff69b4; } .hl-label.red { background-color: #f00; } .hl-label.purple { background-color: #6f42c1; } .hl-label.orange { background-color: #ff8c00; } .hl-label.green { background-color: #5cb85c; } #article-container a.link_card { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; margin: 10px 0; color: var(--font-color) !important; text-decoration: none !important; background: var(--heo-background); border-radius: 8px; border: var(--style-border); padding: 12px; } #article-container a.link_card:hover { background: var(--heo-theme); color: #fff !important; } #article-container a.link_card .link_icon, #article-container a.link_card .link_content { height: 4rem; } #article-container a.link_card .link_icon img, #article-container a.link_card .link_icon svg { height: 4rem; width: 4rem; border-radius: 6px !important; } #article-container a.link_card .link_content { margin-left: 1rem; width: calc(100% - 6rem); overflow: hidden; line-height: 1.5; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-orient: vertical; -moz-box-orient: vertical; -o-box-orient: vertical; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } #article-container a.link_card .link_content .link_title { font-weight: bold; font-size: 1.2rem; } #article-container a.link_card .link_content .link_title, #article-container a.link_card .link_content .link_desc { word-break: break-all; overflow: hidden; -o-text-overflow: ellipsis; text-overflow: ellipsis; } #article-container a.link_card .link_content:not(:has(.link_desc)) .link_title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } #article-container a.link_card .link_content .link_desc { opacity: 0.6; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\"; filter: alpha(opacity=60); } #article-container a.link_card .link_content .link_desc, #article-container a.link_card .link_content:has(.link_desc) .link_title { white-space: nowrap; } audio, video { border-radius: 4px; max-width: 100%; } video { z-index: 1; -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } video:hover { -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); } div.video { line-height: 0; text-align: center; } div.videos { max-width: calc(100% + 2 * 4px); display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-box-align: end; -moz-box-align: end; -o-box-align: end; -ms-flex-align: end; -webkit-align-items: flex-end; align-items: flex-end; margin: 1em -4px; } div.videos .video, div.videos iframe { width: 100%; margin: 4px; } div.videos iframe { border-radius: 4px; width: 100%; min-height: 300px; } div.videos.left { -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; } div.videos.center { -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } div.videos.right { -webkit-box-pack: end; -moz-box-pack: end; -o-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } div.videos.stretch { -webkit-box-align: stretch; -moz-box-align: stretch; -o-box-align: stretch; -ms-flex-align: stretch; -webkit-align-items: stretch; align-items: stretch; } div.videos[col='1'] .video, div.videos[col='1'] iframe { width: 100%; } div.videos[col='2'] .video, div.videos[col='2'] iframe { width: calc(50% - 2 * 4px); } div.videos[col='3'] .video, div.videos[col='3'] iframe { width: calc(33.33% - 2 * 4px); } div.videos[col='4'] .video, div.videos[col='4'] iframe { width: calc(25% - 2 * 4px); } [data-theme=\"dark\"] audio, [data-theme=\"dark\"] video { filter: brightness(0.7); } span.nota { color: #99a9bf; text-decoration: none; word-wrap: break-word; -webkit-transition: all 0.2s; -moz-transition: all 0.2s; -o-transition: all 0.2s; -ms-transition: all 0.2s; transition: all 0.2s; overflow-wrap: break-word; } span.nota:hover { color: var(--text-bg-hover); } span.nota:hover:before { position: fixed; width: fit-content; max-width: 80%; margin: auto; left: 0; right: 0; top: 10%; border-radius: 10px; text-align: center; z-index: 100; content: attr(data-nota); font-size: 16px; color: #fff; padding: 10px; background-color: var(--text-bg-hover); } [data-theme=dark] span.nota:hover:before { background-color: rgba(18,18,18,0.8); } .note { position: relative; margin: 0 0 20px; padding: 15px; border-radius: 3px; } .note.icon-padding { padding-left: 3em; } .note > .note-icon { position: absolute; top: calc(50% - 0.5em); left: 0.8em; font-size: larger; } .note.blue:not(.disabled) { border-left-color: #428bca !important; } .note.blue:not(.disabled).modern { border-left-color: transparent !important; color: #428bca; } .note.blue:not(.disabled):not(.simple) { background: #e3eef7 !important; } .note.blue > .note-icon { color: #428bca; } .note.pink:not(.disabled) { border-left-color: #ff69b4 !important; } .note.pink:not(.disabled).modern { border-left-color: transparent !important; color: #ff69b4; } .note.pink:not(.disabled):not(.simple) { background: #ffe9f4 !important; } .note.pink > .note-icon { color: #ff69b4; } .note.red:not(.disabled) { border-left-color: #f00 !important; } .note.red:not(.disabled).modern { border-left-color: transparent !important; color: #f00; } .note.red:not(.disabled):not(.simple) { background: #ffd9d9 !important; } .note.red > .note-icon { color: #f00; } .note.purple:not(.disabled) { border-left-color: #6f42c1 !important; } .note.purple:not(.disabled).modern { border-left-color: transparent !important; color: #6f42c1; } .note.purple:not(.disabled):not(.simple) { background: #e9e3f6 !important; } .note.purple > .note-icon { color: #6f42c1; } .note.orange:not(.disabled) { border-left-color: #ff8c00 !important; } .note.orange:not(.disabled).modern { border-left-color: transparent !important; color: #ff8c00; } .note.orange:not(.disabled):not(.simple) { background: #ffeed9 !important; } .note.orange > .note-icon { color: #ff8c00; } .note.green:not(.disabled) { border-left-color: #5cb85c !important; } .note.green:not(.disabled).modern { border-left-color: transparent !important; color: #5cb85c; } .note.green:not(.disabled):not(.simple) { background: #e7f4e7 !important; } .note.green > .note-icon { color: #5cb85c; } .note.simple { border: 1px solid #eee; border-left-width: 5px; } .note.modern { border: 1px solid transparent !important; background-color: #f5f5f5; color: #4c4948; } .note.flat { border: initial; border-left: 5px solid #eee; background-color: #f9f9f9; color: #4c4948; } .note h2, .note h3, .note h4, .note h5, .note h6 { margin-top: 3px; margin-bottom: 0; padding-top: 0 !important; border-bottom: initial; } .note p:first-child, .note ul:first-child, .note ol:first-child, .note table:first-child, .note pre:first-child, .note blockquote:first-child, .note img:first-child { margin-top: 0 !important; } .note p:last-child, .note ul:last-child, .note ol:last-child, .note table:last-child, .note pre:last-child, .note blockquote:last-child, .note img:last-child { margin-bottom: 0 !important; } .note:not(.no-icon) { padding-left: 3em; } .note:not(.no-icon)::before { position: absolute; top: calc(50% - 0.95em); left: 0.8em; font-size: larger; } .note.default.flat { background: #f7f7f7; } .note.default.modern { border-color: #e1e1e1; background: #f3f3f3; color: #666; } .note.default.modern a:not(.btn) { color: #666; } .note.default.modern a:not(.btn):hover { color: #454545; } .note.default:not(.modern) { border-left-color: #777; } .note.default:not(.modern) h2, .note.default:not(.modern) h3, .note.default:not(.modern) h4, .note.default:not(.modern) h5, .note.default:not(.modern) h6 { color: #777; } .note.default:not(.no-icon)::before { content: '\\f0a9'; } .note.default:not(.no-icon):not(.modern)::before { color: #777; } .note.primary.flat { background: #f5f0fa; } .note.primary.modern { border-color: #e1c2ff; background: #f3daff; color: #6f42c1; } .note.primary.modern a:not(.btn) { color: #6f42c1; } .note.primary.modern a:not(.btn):hover { color: #453298; } .note.primary:not(.modern) { border-left-color: #6f42c1; } .note.primary:not(.modern) h2, .note.primary:not(.modern) h3, .note.primary:not(.modern) h4, .note.primary:not(.modern) h5, .note.primary:not(.modern) h6 { color: #6f42c1; } .note.primary:not(.no-icon)::before { content: '\\f055'; } .note.primary:not(.no-icon):not(.modern)::before { color: #6f42c1; } .note.info.flat { background: #eef7fa; } .note.info.modern { border-color: #b3e5ef; background: #d9edf7; color: #31708f; } .note.info.modern a:not(.btn) { color: #31708f; } .note.info.modern a:not(.btn):hover { color: #215761; } .note.info:not(.modern) { border-left-color: #428bca; } .note.info:not(.modern) h2, .note.info:not(.modern) h3, .note.info:not(.modern) h4, .note.info:not(.modern) h5, .note.info:not(.modern) h6 { color: #428bca; } .note.info:not(.no-icon)::before { content: '\\f05a'; } .note.info:not(.no-icon):not(.modern)::before { color: #428bca; } .note.success.flat { background: #eff8f0; } .note.success.modern { border-color: #d0e6be; background: #dff0d8; color: #3c763d; } .note.success.modern a:not(.btn) { color: #3c763d; } .note.success.modern a:not(.btn):hover { color: #32562c; } .note.success:not(.modern) { border-left-color: #5cb85c; } .note.success:not(.modern) h2, .note.success:not(.modern) h3, .note.success:not(.modern) h4, .note.success:not(.modern) h5, .note.success:not(.modern) h6 { color: #5cb85c; } .note.success:not(.no-icon)::before { content: '\\f058'; } .note.success:not(.no-icon):not(.modern)::before { color: #5cb85c; } .note.warning.flat { background: #fdf8ea; } .note.warning.modern { border-color: #fae4cd; background: #fcf4e3; color: #8a6d3b; } .note.warning.modern a:not(.btn) { color: #8a6d3b; } .note.warning.modern a:not(.btn):hover { color: #714f30; } .note.warning:not(.modern) { border-left-color: #f0ad4e; } .note.warning:not(.modern) h2, .note.warning:not(.modern) h3, .note.warning:not(.modern) h4, .note.warning:not(.modern) h5, .note.warning:not(.modern) h6 { color: #f0ad4e; } .note.warning:not(.no-icon)::before { content: '\\f06a'; } .note.warning:not(.no-icon):not(.modern)::before { color: #f0ad4e; } .note.danger.flat { background: #fcf1f2; } .note.danger.modern { border-color: #ebcdd2; background: #f2dfdf; color: #a94442; } .note.danger.modern a:not(.btn) { color: #a94442; } .note.danger.modern a:not(.btn):hover { color: #84333f; } .note.danger:not(.modern) { border-left-color: #d9534f; } .note.danger:not(.modern) h2, .note.danger:not(.modern) h3, .note.danger:not(.modern) h4, .note.danger:not(.modern) h5, .note.danger:not(.modern) h6 { color: #d9534f; } .note.danger:not(.no-icon)::before { content: '\\f056'; } .note.danger:not(.no-icon):not(.modern)::before { color: #d9534f; } @media (min-width: 1200px) { .poem { margin: 0 auto; height: auto; writing-mode: vertical-rl; writing-mode: tb-rl; } .poem p { text-decoration: underline; text-decoration-color: rgba(193,11,11,0.72); text-decoration-style: dashed; } } @font-face { font-family: 'Poem'; src: url(\"https://unpkg.zhimg.com/akilar-candyassets/fonts/Poem.ttf\"); font-display: swap; } .poem p { font-family: 'Poem', 'KaiTi', sans-serif !important; font-size: 25px; text-align: center; } .poem-title { font-family: 'Poem', 'KaiTi', sans-serif !important; font-size: 2.5em; text-align: center; } .poem-author { text-align: center !important; font-family: 'Poem', 'KaiTi', sans-serif !important; font-size: 16px; color: #424242; } .progress { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; font-size: var(--global-font-size); background-color: rgba(88,88,88,0.6); border-radius: 0.25rem; margin: 1rem 0; height: 2rem; overflow: hidden; } .progress p { margin: 0 0 0 10px !important; } .progress .progress-bar-animated { background-color: #a7b5fd !important; -webkit-animation: progress-bar-stripes 1s linear infinite; -moz-animation: progress-bar-stripes 1s linear infinite; -o-animation: progress-bar-stripes 1s linear infinite; -ms-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite; } .progress .progress-bar-striped { background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: -ms-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress .progress-bar { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-orient: vertical; -moz-box-orient: vertical; -o-box-orient: vertical; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; overflow: visible; color: #fff; text-align: center; white-space: nowrap; background-color: #0d6efd; -webkit-transition: width 0.6s ease; -moz-transition: width 0.6s ease; -o-transition: width 0.6s ease; -ms-transition: width 0.6s ease; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress .progress-bar { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; transition: none; } } .progress .bg-green { background-color: #28a745 !important; } .progress .bg-yellow { background-color: #ffc107 !important; } .progress .bg-red { background-color: #dc3545 !important; } .progress .bg-cyan { background-color: #17a2b8 !important; } .progress .bg-blue { background-color: #0d6efd !important; } .progress .bg-gray { background-color: #7f838a !important; } @-moz-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @-webkit-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @-o-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } :root { --referto-text-color: #e9a218; --referto-text-hover-color: #2c7fe7; --referto-literature-background-color: #318efd; --referto-title-background-color: #183153; --referto-content-text-color: #f1f1ef; --referfrom-text-shadow: rgba(35,35,35,0.5); --referfrom-text-color: #f1f1ef; --referfrom-text-hover-color: #f2b94b; --referfrom-link-color: #403e3b; --referfrom-link-hover-color: #235dac; --referfrom-background-color: #f1f1ef; --reference-anchor-color: #183153; --reference-anchor-up-color: #318efd; } [data-theme=\"dark\"] { --referto-text-color: #f2b94b; --referto-text-hover-color: #2c7fe7; --referto-literature-background-color: #5c6167; --referto-title-background-color: #090a0b; --referto-content-text-color: #f1f1ef; --referfrom-text-shadow: rgba(35,35,35,0.5); --referfrom-text-color: #f1f1ef; --referfrom-text-hover-color: #f2b94b; --referfrom-link-color: #f1f1ef; --referfrom-link-hover-color: #f2b94b; --referfrom-background-color: rgba(92,97,103,0.68); --reference-anchor-color: #090a0b; --reference-anchor-up-color: #183153; } .hidden-anchor { position: relative; top: -150px; display: inline-block; height: 0; overflow: hidden; } .reference a { display: inline-block; color: var(--referto-text-color) !important; font-weight: bold; -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } .reference:hover a { -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; text-decoration: none !important; color: var(--referto-text-hover-color) !important; } .reference:hover + .reference-bubble .reference-item { -webkit-transform: translate(-40px, 10px) rotateX(0deg); -moz-transform: translate(-40px, 10px) rotateX(0deg); -o-transform: translate(-40px, 10px) rotateX(0deg); -ms-transform: translate(-40px, 10px) rotateX(0deg); transform: translate(-40px, 10px) rotateX(0deg); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 1; -ms-filter: none; filter: none; } .reference-bubble { display: inline-block; } .reference-item { -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); z-index: 99; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; position: absolute; -webkit-transform: translate(-40px, 10px) rotateX(90deg); -moz-transform: translate(-40px, 10px) rotateX(90deg); -o-transform: translate(-40px, 10px) rotateX(90deg); -ms-transform: translate(-40px, 10px) rotateX(90deg); transform: translate(-40px, 10px) rotateX(90deg); width: auto; height: auto; clip-path: polygon(5px 10px, 20px 10px, 30px 0, 40px 10px, calc(100% - 5px) 10px, 100% 15px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 15px, 5px 10px); } .reference-literature { max-width: 200px; padding: 20px 10px 10px 10px; background: var(--referto-literature-background-color); color: var(--referto-content-text-color) !important; word-wrap: break-word; word-break: break-all; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } .reference-title { padding: 20px 10px 10px 10px; background: var(--referto-title-background-color); color: var(--referto-content-text-color) !important; writing-mode: vertical-lr; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } .reference-source { font-size: 16px; height: auto; line-height: 26px; width: fit-content; margin: 5px 0; max-width: 90%; background: var(--referfrom-background-color); -webkit-box-shadow: 1px 1px 1px var(--referfrom-text-shadow); box-shadow: 1px 1px 1px var(--referfrom-text-shadow); border-radius: 8px; padding-right: 10px; } .reference-source pangu { display: none; } a.reference-anchor { border-bottom-left-radius: 5px; border-top-left-radius: 5px; color: var(--referfrom-text-color) !important; background: var(--reference-anchor-color); height: 30px; display: inline-block; width: fit-content; padding: 0px 0px 0px 10px; } a.reference-anchor:hover { color: var(--referfrom-text-hover-color) !important; text-decoration: none !important; } a.reference-anchor:hover .reference-anchor-up { color: var(--referfrom-text-hover-color) !important; } a.reference-link { color: var(--referfrom-link-color) !important; padding: 0px 10px; } a.reference-link:hover { color: var(--referfrom-link-hover-color) !important; text-decoration: none !important; } .reference-anchor-up { color: var(--referfrom-text-color) !important; height: 30px; width: 40px; padding: 0px 0px 0px 10px; background: var(--reference-anchor-up-color); display: -webkit-inline-box !important; display: -moz-inline-box !important; display: -webkit-inline-flex !important; display: -ms-inline-flexbox !important; display: inline-box !important; display: inline-flex !important; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; clip-path: polygon(0 0, 10px 50%, 0 100%, 100% 100%, 100% 0); } .site-card-group { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; margin: -8px; -webkit-box-align: stretch; -moz-box-align: stretch; -o-box-align: stretch; -ms-flex-align: stretch; -webkit-align-items: stretch; align-items: stretch; } .site-card { margin: 8px; width: calc(100% / 4 - 16px); display: block; line-height: 1.4; height: 100%; } @media screen and (min-width: 2048px) { .site-card { width: calc(100% / 5 - 16px); } } @media screen and (max-width: 768px) { .site-card { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { .site-card { width: calc(100% / 2 - 16px); } } .site-card .img { width: 100%; height: 120px; overflow: hidden; border-radius: 6px; -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); background: #f6f6f6; } @media screen and (max-width: 500px) { .site-card .img { height: 100px; } } .site-card .img img { width: 100%; height: 100%; pointer-events: none; -webkit-transition: -webkit-transform 2s ease; -moz-transition: -moz-transform 2s ease; -o-transition: -o-transform 2s ease; -ms-transition: -ms-transform 2s ease; transition: transform 2s ease; object-fit: cover; } .site-card .info { margin-top: 8px; } .site-card .info img { width: 32px; height: 32px; pointer-events: none; border-radius: 16px; float: left; margin-right: 8px; margin-top: 2px; } .site-card .info span { display: block; } .site-card .info .title { font-weight: 600; font-size: var(--global-font-size); color: #444; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; -webkit-line-clamp: 1; -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } .site-card .info .desc { font-size: var(--global-font-size); word-wrap: break-word; line-height: 1.2; color: #888; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; -webkit-line-clamp: 2; } .site-card .img { -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } .site-card:hover .img { -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); } .site-card:hover .info .title { color: #ff5722; } p.p.subtitle { font-weight: bold; color: #44b299; font-size: 1.25rem !important; padding-top: 1.5rem; } p.p.subtitle:first-child { padding-top: 1rem; } span.p.left, p.p.left { display: block; text-align: left; } span.p.center, p.p.center { display: block; text-align: center; } span.p.right, p.p.right { display: block; text-align: right; } span.p.small, p.p.small { font-size: var(--global-font-size); } span.p.large, p.p.large { font-size: 2.5rem; line-height: 1.4; } span.p.huge, p.p.huge { font-size: 4rem; line-height: 1.4; } span.p.ultra, p.p.ultra { font-size: 6rem; line-height: 1.4; } span.p.small, p.p.small, span.p.large, p.p.large, span.p.huge, p.p.huge, span.p.ultra, p.p.ultra { margin: 0; padding: 0; } span.p.bold, p.p.bold { font-weight: bold; } span.p.h1, p.p.h1, span.p.h2, p.p.h2 { padding-bottom: 0.2rem; font-weight: 500; } span.p.h1, p.p.h1 { font-size: 1.625rem; color: var(--color-h1); padding-top: 2em; } span.p.h2, p.p.h2 { font-size: 1.625rem; color: var(--color-h2); padding-top: 2em; border-bottom: 1px solid rgba(68,68,68,0.1); } span.p.h3, p.p.h3 { font-size: 1.375rem; color: var(--color-h3); padding-top: 2em; } span.p.h4, p.p.h4 { font-size: 1.125rem; color: var(--color-h4); padding-top: 2em; } span.p.h5, p.p.h5 { font-size: 1rem; color: var(--color-h5); padding-top: 1.5em; } span.p.red, p.p.red { color: #e8453c; } span.p.yellow, p.p.yellow { color: #fcec60; } span.p.green, p.p.green { color: #3dc550; } span.p.cyan, p.p.cyan { color: #1bcdfc; } span.p.blue, p.p.blue { color: #2196f3; } span.p.purple, p.p.purple { color: #9c27b0; } span.p.gray, p.p.gray { color: #999; } #article-container .tabs { position: relative; margin: 0 0 20px; border-right: 1px solid var(--tab-border-color); border-bottom: 1px solid var(--tab-border-color); border-left: 1px solid var(--tab-border-color); } #article-container .tabs > .nav-tabs { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; margin: 0; padding: 0; background: var(--tab-botton-bg); } #article-container .tabs > .nav-tabs > .tab { margin: 0; padding: 0; list-style: none; } @media screen and (max-width: 768px) { #article-container .tabs > .nav-tabs > .tab { -webkit-box-flex: 1; -moz-box-flex: 1; -o-box-flex: 1; -ms-box-flex: 1; box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; } } #article-container .tabs > .nav-tabs > .tab button { display: block; padding: 8px 18px; width: 100%; border-top: 2px solid var(--tab-border-color); background: var(--tab-botton-bg); color: var(--tab-botton-color); line-height: 2; -webkit-transition: all 0.4s; -moz-transition: all 0.4s; -o-transition: all 0.4s; -ms-transition: all 0.4s; transition: all 0.4s; } #article-container .tabs > .nav-tabs > .tab button i { width: 1.5em; } #article-container .tabs > .nav-tabs > .tab.active button { border-top: 2px solid #49b1f5; background: var(--tab-button-active-bg); cursor: default; } #article-container .tabs > .nav-tabs > .tab:not(.active) button:hover { border-top: 2px solid var(--tab-button-hover-bg); background: var(--tab-button-hover-bg); } #article-container .tabs > .tab-contents .tab-item-content { position: relative; display: none; padding: 36px 24px; } @media screen and (max-width: 768px) { #article-container .tabs > .tab-contents .tab-item-content { padding: 24px 14px; } } #article-container .tabs > .tab-contents .tab-item-content.active { display: block; -webkit-animation: tabshow 0.5s; -moz-animation: tabshow 0.5s; -o-animation: tabshow 0.5s; -ms-animation: tabshow 0.5s; animation: tabshow 0.5s; } #article-container .tabs .tab-to-top { position: relative; display: block; margin: 0 0 0 auto; color: #99a9bf; } @-moz-keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } @-webkit-keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } @-o-keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } @keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } #article-container .timeline { margin: 0 0 20px 10px; padding: 14px 20px 5px; border-left: 2px solid var(--timeline-color, #49b1f5); } #article-container .timeline.blue { --timeline-color: #428bca; --timeline-bg: rgba(66,139,202, 0.2); } #article-container .timeline.pink { --timeline-color: #ff69b4; --timeline-bg: rgba(255,105,180, 0.2); } #article-container .timeline.red { --timeline-color: #f00; --timeline-bg: rgba(255,0,0, 0.2); } #article-container .timeline.purple { --timeline-color: #6f42c1; --timeline-bg: rgba(111,66,193, 0.2); } #article-container .timeline.orange { --timeline-color: #ff8c00; --timeline-bg: rgba(255,140,0, 0.2); } #article-container .timeline.green { --timeline-color: #5cb85c; --timeline-bg: rgba(92,184,92, 0.2); } #article-container .timeline .timeline-item { margin: 0 0 15px; } #article-container .timeline .timeline-item:hover .item-circle:before { border-color: var(--timeline-color, #49b1f5); } #article-container .timeline .timeline-item.headline .timeline-item-title .item-circle > p { font-weight: 600; font-size: 1.2em; } #article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before { left: -28px; border: 4px solid var(--timeline-color, #49b1f5); } #article-container .timeline .timeline-item.headline:hover .item-circle:before { border-color: var(--pseudo-hover); } #article-container .timeline .timeline-item .timeline-item-title { position: relative; } #article-container .timeline .timeline-item .item-circle:before { position: absolute; top: 50%; left: -27px; width: 6px; height: 6px; border: 3px solid var(--pseudo-hover); border-radius: 50%; background: var(--card-bg); content: ''; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -o-transition: all 0.3s; -ms-transition: all 0.3s; transition: all 0.3s; -webkit-transform: translate(0, -50%); -moz-transform: translate(0, -50%); -o-transform: translate(0, -50%); -ms-transform: translate(0, -50%); transform: translate(0, -50%); } #article-container .timeline .timeline-item .item-circle > p { margin: 0 0 8px; font-weight: 500; } #article-container .timeline .timeline-item .timeline-item-content { position: relative; padding: 12px 15px; border-radius: 8px; background: var(--timeline-bg, #e4f3fd); font-size: 0.93em; } #article-container .timeline .timeline-item .timeline-item-content > :last-child { margin-bottom: 0; } #article-container .timeline + .timeline { margin-top: -20px; } .tip { padding: 6px 20px; position: relative; color: #fff; margin-bottom: 20px; background: #41363c; background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit--webkit-linear-gradient(left, #41363c, #494648); background: -webkit--moz-linear-gradient(left, #41363c, #494648); background: -webkit--o-linear-gradient(left, #41363c, #494648); background: -webkit--ms-linear-gradient(left, #41363c, #494648); background: -webkit-linear-gradient(to right, #41363c, #494648); background: -webkit-linear-gradient(0deg, #41363c, #494648); background: -moz-linear-gradient(0deg, #41363c, #494648); background: -o-linear-gradient(0deg, #41363c, #494648); background: -ms-linear-gradient(0deg, #41363c, #494648); background: linear-gradient(90deg, #41363c, #494648); padding: 6px 20px; border-radius: 10px; -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); box-shadow: 0 3px 5px rgba(50,50,50,0.5); } .tip p { margin: 0 !important; padding: 0.5rem 0; } .tip:before { background: #41363c; background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit--webkit-linear-gradient(bottom, #41363c, #494648); background: -webkit--moz-linear-gradient(bottom, #41363c, #494648); background: -webkit--o-linear-gradient(bottom, #41363c, #494648); background: -webkit--ms-linear-gradient(bottom, #41363c, #494648); background: -webkit-linear-gradient(to top, #41363c, #494648); background: -webkit-linear-gradient(90deg, #41363c, #494648); background: -moz-linear-gradient(90deg, #41363c, #494648); background: -o-linear-gradient(90deg, #41363c, #494648); background: -ms-linear-gradient(90deg, #41363c, #494648); background: linear-gradient(0deg, #41363c, #494648); text-shadow: 0 -1px #41363c; border-radius: 50%; color: #fff; font-size: 12px; position: absolute; width: 24px; height: 24px; line-height: 24.5px; left: -12px; top: -12px; -webkit-box-shadow: 0 0 0 2.5px #f7f8f9; -webkit-box-shadow: 0 0 0 2.5px #f7f8f9; box-shadow: 0 0 0 2.5px #f7f8f9; font-weight: 600; font-family: \"Font Awesome 5 Free\"; text-align: center; } .tip ol { margin: 0; } .tip.info { background: #20a0ff; background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit--webkit-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit--moz-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit--o-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit--ms-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit-linear-gradient(to right, #20a0ff, #20b8ff); background: -webkit-linear-gradient(0deg, #20a0ff, #20b8ff); background: -moz-linear-gradient(0deg, #20a0ff, #20b8ff); background: -o-linear-gradient(0deg, #20a0ff, #20b8ff); background: -ms-linear-gradient(0deg, #20a0ff, #20b8ff); background: linear-gradient(90deg, #20a0ff, #20b8ff); padding: 6px 20px; border-radius: 10px; -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); box-shadow: 0 3px 5px rgba(32,160,255,0.5); } .tip.info:before { background: #20a0ff; background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit--webkit-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit--moz-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit--o-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit--ms-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit-linear-gradient(to top, #0092ff, #20b8ff); background: -webkit-linear-gradient(90deg, #0092ff, #20b8ff); background: -moz-linear-gradient(90deg, #0092ff, #20b8ff); background: -o-linear-gradient(90deg, #0092ff, #20b8ff); background: -ms-linear-gradient(90deg, #0092ff, #20b8ff); background: linear-gradient(0deg, #0092ff, #20b8ff); content: \"\\f129\"; text-shadow: 0 -1px #20a0ff; } .tip.success { background: #61be33; background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit--webkit-linear-gradient(left, #61be33, #8fce44); background: -webkit--moz-linear-gradient(left, #61be33, #8fce44); background: -webkit--o-linear-gradient(left, #61be33, #8fce44); background: -webkit--ms-linear-gradient(left, #61be33, #8fce44); background: -webkit-linear-gradient(to right, #61be33, #8fce44); background: -webkit-linear-gradient(0deg, #61be33, #8fce44); background: -moz-linear-gradient(0deg, #61be33, #8fce44); background: -o-linear-gradient(0deg, #61be33, #8fce44); background: -ms-linear-gradient(0deg, #61be33, #8fce44); background: linear-gradient(90deg, #61be33, #8fce44); text-shadow: 0 -1px #61be33; -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); box-shadow: 0 3px 5px rgba(104,195,59,0.5); } .tip.success:before { background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit--webkit-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit--moz-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit--o-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit--ms-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit-linear-gradient(to top, #52bb1d, #95d34b); background: -webkit-linear-gradient(90deg, #52bb1d, #95d34b); background: -moz-linear-gradient(90deg, #52bb1d, #95d34b); background: -o-linear-gradient(90deg, #52bb1d, #95d34b); background: -ms-linear-gradient(90deg, #52bb1d, #95d34b); background: linear-gradient(0deg, #52bb1d, #95d34b); content: \"\\f00c\"; text-shadow: 0 -1px #61be33; } .tip.warning { background: #ff953f; background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit--webkit-linear-gradient(left, #ff953f, #ffb449); background: -webkit--moz-linear-gradient(left, #ff953f, #ffb449); background: -webkit--o-linear-gradient(left, #ff953f, #ffb449); background: -webkit--ms-linear-gradient(left, #ff953f, #ffb449); background: -webkit-linear-gradient(to right, #ff953f, #ffb449); background: -webkit-linear-gradient(0deg, #ff953f, #ffb449); background: -moz-linear-gradient(0deg, #ff953f, #ffb449); background: -o-linear-gradient(0deg, #ff953f, #ffb449); background: -ms-linear-gradient(0deg, #ff953f, #ffb449); background: linear-gradient(90deg, #ff953f, #ffb449); text-shadow: 0 -1px #ff953f; -webkit-box-shadow: 0 3px 5px rgba(255,154,73,0.5); -webkit-box-shadow: 0 3px 5px rgba(255,154,73,0.5); box-shadow: 0 3px 5px rgba(255,154,73,0.5); } .tip.warning:before { background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit--webkit-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit--moz-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit--o-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit--ms-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit-linear-gradient(to top, #ff8f35, #ffc149); background: -webkit-linear-gradient(90deg, #ff8f35, #ffc149); background: -moz-linear-gradient(90deg, #ff8f35, #ffc149); background: -o-linear-gradient(90deg, #ff8f35, #ffc149); background: -ms-linear-gradient(90deg, #ff8f35, #ffc149); background: linear-gradient(0deg, #ff8f35, #ffc149); content: \"\\f12a\"; text-shadow: 0 -1px #ff953f; } .tip.error { background: #ff4949; background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit--webkit-linear-gradient(left, #ff4949, #ff7849); background: -webkit--moz-linear-gradient(left, #ff4949, #ff7849); background: -webkit--o-linear-gradient(left, #ff4949, #ff7849); background: -webkit--ms-linear-gradient(left, #ff4949, #ff7849); background: -webkit-linear-gradient(to right, #ff4949, #ff7849); background: -webkit-linear-gradient(0deg, #ff4949, #ff7849); background: -moz-linear-gradient(0deg, #ff4949, #ff7849); background: -o-linear-gradient(0deg, #ff4949, #ff7849); background: -ms-linear-gradient(0deg, #ff4949, #ff7849); background: linear-gradient(90deg, #ff4949, #ff7849); text-shadow: 0 -1px #ff4949; -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); box-shadow: 0 3px 5px rgba(255,73,73,0.5); } .tip.error:before { background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit--webkit-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit--moz-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit--o-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit--ms-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit-linear-gradient(to top, #ff3838, #ff7849); background: -webkit-linear-gradient(90deg, #ff3838, #ff7849); background: -moz-linear-gradient(90deg, #ff3838, #ff7849); background: -o-linear-gradient(90deg, #ff3838, #ff7849); background: -ms-linear-gradient(90deg, #ff3838, #ff7849); background: linear-gradient(0deg, #ff3838, #ff7849); content: \"\\f00d\"; text-shadow: 0 -1px #ff4949; } .tip.bolt { background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit--webkit-linear-gradient(bottom, #3c3, #459431); background: -webkit--moz-linear-gradient(bottom, #3c3, #459431); background: -webkit--o-linear-gradient(bottom, #3c3, #459431); background: -webkit--ms-linear-gradient(bottom, #3c3, #459431); background: -webkit-linear-gradient(to top, #3c3, #459431); background: -webkit-linear-gradient(80deg, #78ca33, #25822c); background: -moz-linear-gradient(80deg, #78ca33, #25822c); background: -o-linear-gradient(80deg, #78ca33, #25822c); background: -ms-linear-gradient(80deg, #78ca33, #25822c); background: linear-gradient(530deg, #78ca33, #25822c); content: \"\\f00d\"; text-shadow: 0 -1px #4cf706; } .tip.bolt:before { background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit--webkit-linear-gradient(bottom, #3c3, #459431); background: -webkit--moz-linear-gradient(bottom, #3c3, #459431); background: -webkit--o-linear-gradient(bottom, #3c3, #459431); background: -webkit--ms-linear-gradient(bottom, #3c3, #459431); background: -webkit-linear-gradient(to top, #3c3, #459431); background: -webkit-linear-gradient(326deg, #78ca33, #25822c); background: -moz-linear-gradient(326deg, #78ca33, #25822c); background: -o-linear-gradient(326deg, #78ca33, #25822c); background: -ms-linear-gradient(326deg, #78ca33, #25822c); background: linear-gradient(776deg, #78ca33, #25822c); content: \"\\f0e7\"; text-shadow: 0 -1px #4cf706; } .tip.ban { background: #ff4949; background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit--webkit-linear-gradient(left, #ff4949, #ff1022); background: -webkit--moz-linear-gradient(left, #ff4949, #ff1022); background: -webkit--o-linear-gradient(left, #ff4949, #ff1022); background: -webkit--ms-linear-gradient(left, #ff4949, #ff1022); background: -webkit-linear-gradient(to right, #ff4949, #ff1022); background: -webkit-linear-gradient(0deg, #ff4949, #f03b49); background: -moz-linear-gradient(0deg, #ff4949, #f03b49); background: -o-linear-gradient(0deg, #ff4949, #f03b49); background: -ms-linear-gradient(0deg, #ff4949, #f03b49); background: linear-gradient(90deg, #ff4949, #f03b49); text-shadow: 0 -1px #ff4949; -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); box-shadow: 0 3px 5px rgba(255,73,73,0.5); } .tip.ban:before { background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit--webkit-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit--moz-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit--o-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit--ms-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit-linear-gradient(to top, #ff3838, #d23e49); background: -webkit-linear-gradient(90deg, #ff3838, #ff1022); background: -moz-linear-gradient(90deg, #ff3838, #ff1022); background: -o-linear-gradient(90deg, #ff3838, #ff1022); background: -ms-linear-gradient(90deg, #ff3838, #ff1022); background: linear-gradient(0deg, #ff3838, #ff1022); content: \"\\f05e\"; text-shadow: 0 -1px #ff4949; } .tip.home { background: #15e5ff; background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit--webkit-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit--moz-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit--o-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit--ms-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit-linear-gradient(to right, #0ec0ef, #80e0f9); background: -webkit-linear-gradient(0deg, #0ec0ef, #80e0f7); background: -moz-linear-gradient(0deg, #0ec0ef, #80e0f7); background: -o-linear-gradient(0deg, #0ec0ef, #80e0f7); background: -ms-linear-gradient(0deg, #0ec0ef, #80e0f7); background: linear-gradient(90deg, #0ec0ef, #80e0f7); text-shadow: 0 -1px #0ec0ef; -webkit-box-shadow: 0 3px 5px #01caff; -webkit-box-shadow: 0 3px 5px #01caff; box-shadow: 0 3px 5px #01caff; } .tip.home:before { background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit--webkit-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit--moz-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit--o-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit--ms-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit-linear-gradient(to top, #0ec0ee, #0ec2ee); background: -webkit-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: -moz-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: -o-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: -ms-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: linear-gradient(0deg, #0ec0ee, #0ec0ea); content: \"\\f015\"; text-shadow: 0 -1px #0ec0ea; } .tip.sync { background: #00a9ff; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit--webkit-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit--moz-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit--o-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit--ms-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit-linear-gradient(to right, #53cff1, #2e9fbd); background: -webkit-linear-gradient(220deg, #47c0e0, #2dc342); background: -moz-linear-gradient(220deg, #47c0e0, #2dc342); background: -o-linear-gradient(220deg, #47c0e0, #2dc342); background: -ms-linear-gradient(220deg, #47c0e0, #2dc342); background: linear-gradient(230deg, #47c0e0, #2dc342); text-shadow: 0 -1px #1bcdfc; -webkit-box-shadow: 0 3px 5px #1bcdfc; -webkit-box-shadow: 0 3px 5px #20b1ad; box-shadow: 0 3px 5px #20b1ad; } .tip.sync:before { background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit--webkit-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit--moz-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit--o-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit--ms-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit-linear-gradient(to top, #83e5ff, #0aa8d2); background: -webkit-linear-gradient(180deg, #40c0e2, #3dc550); background: -moz-linear-gradient(180deg, #40c0e2, #3dc550); background: -o-linear-gradient(180deg, #40c0e2, #3dc550); background: -ms-linear-gradient(180deg, #40c0e2, #3dc550); background: linear-gradient(270deg, #40c0e2, #3dc550); content: \"\\f021\"; text-shadow: 0 -1px #17cfff; } .tip.cogs { background: #1502ff; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit--webkit-linear-gradient(left, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(left, #5246e2, #5246e2); background: -webkit--o-linear-gradient(left, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(left, #5246e2, #5246e2); background: -webkit-linear-gradient(to right, #5246e2, #5246e2); background: -webkit-linear-gradient(220deg, #40c0e2, #5247e2); background: -moz-linear-gradient(220deg, #40c0e2, #5247e2); background: -o-linear-gradient(220deg, #40c0e2, #5247e2); background: -ms-linear-gradient(220deg, #40c0e2, #5247e2); background: linear-gradient(230deg, #40c0e2, #5247e2); text-shadow: 0 -1px #8278fd; -webkit-box-shadow: 0 3px 5px #4037a7; -webkit-box-shadow: 1 3px 5px #5e52ec; box-shadow: 1 3px 5px #5e52ec; } .tip.cogs:before { background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit--webkit-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--o-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit-linear-gradient(to top, #5246e2, #5246e2); background: -webkit-linear-gradient(110deg, #40c0e2, #5246e2); background: -moz-linear-gradient(110deg, #40c0e2, #5246e2); background: -o-linear-gradient(110deg, #40c0e2, #5246e2); background: -ms-linear-gradient(110deg, #40c0e2, #5246e2); background: linear-gradient(560deg, #40c0e2, #5246e2); content: \"\\f085\"; text-shadow: 0 -1px #098cf5; } .tip.key { background: #25c33b; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit--webkit-linear-gradient(left, #648798, #90a4ae); background: -webkit--moz-linear-gradient(left, #648798, #90a4ae); background: -webkit--o-linear-gradient(left, #648798, #90a4ae); background: -webkit--ms-linear-gradient(left, #648798, #90a4ae); background: -webkit-linear-gradient(to right, #648798, #90a4ae); background: -webkit-linear-gradient(220deg, #90a4ae, #b7a7a7); background: -moz-linear-gradient(220deg, #90a4ae, #b7a7a7); background: -o-linear-gradient(220deg, #90a4ae, #b7a7a7); background: -ms-linear-gradient(220deg, #90a4ae, #b7a7a7); background: linear-gradient(230deg, #90a4ae, #b7a7a7); text-shadow: 0 -1px #c1c0d4; -webkit-box-shadow: 0 3px 5px #d3d2de; -webkit-box-shadow: 1 3px 5px #d5d4de; box-shadow: 1 3px 5px #d5d4de; } .tip.key:before { background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit--webkit-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--o-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit-linear-gradient(to top, #5246e2, #5246e2); background: -webkit-linear-gradient(110deg, #bccdd2, #cfced4); background: -moz-linear-gradient(110deg, #bccdd2, #cfced4); background: -o-linear-gradient(110deg, #bccdd2, #cfced4); background: -ms-linear-gradient(110deg, #bccdd2, #cfced4); background: linear-gradient(560deg, #bccdd2, #cfced4); content: \"\\f084\"; text-shadow: 0 -1px #a9b2b9; } .tip.bell { background: #25c33b; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit--webkit-linear-gradient(left, #648798, #90a4ae); background: -webkit--moz-linear-gradient(left, #648798, #90a4ae); background: -webkit--o-linear-gradient(left, #648798, #90a4ae); background: -webkit--ms-linear-gradient(left, #648798, #90a4ae); background: -webkit-linear-gradient(to right, #648798, #90a4ae); background: -webkit-linear-gradient(220deg, #ffaa0d, #deb455); background: -moz-linear-gradient(220deg, #ffaa0d, #deb455); background: -o-linear-gradient(220deg, #ffaa0d, #deb455); background: -ms-linear-gradient(220deg, #ffaa0d, #deb455); background: linear-gradient(230deg, #ffaa0d, #deb455); text-shadow: 0 -1px #c1c0d4; -webkit-box-shadow: 0 3px 5px #d3d2de; -webkit-box-shadow: 1 3px 5px #d5d4de; box-shadow: 1 3px 5px #d5d4de; } .tip.bell:before { background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit--webkit-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--o-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit-linear-gradient(to top, #5246e2, #5246e2); background: -webkit-linear-gradient(110deg, #f9ae07, #ffb615); background: -moz-linear-gradient(110deg, #f9ae07, #ffb615); background: -o-linear-gradient(110deg, #f9ae07, #ffb615); background: -ms-linear-gradient(110deg, #f9ae07, #ffb615); background: linear-gradient(560deg, #f9ae07, #ffb615); content: \"\\f0f3\"; text-shadow: 0 -1px #ffb81b; } [data-theme=\"dark\"] .tip { filter: brightness(0.7); } #article-container .tip a { color: #e6eaed; }"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/autoload.js","permalink":"https://en.blog.sinzmise.top/js/autoload.js","excerpt":"","text":"// live2d_path 参数建议使用绝对路径 const live2d_path = \"https://jsd.onmicrosoft.cn/gh/stevenjoezhang/live2d-widget@latest/\"; //const live2d_path = \"/live2d-widget/\"; // 封装异步加载资源的方法 function loadExternalResource(url, type) { return new Promise((resolve, reject) => { let tag; if (type === \"css\") { tag = document.createElement(\"link\"); tag.rel = \"stylesheet\"; tag.href = url; } else if (type === \"js\") { tag = document.createElement(\"script\"); tag.src = url; } if (tag) { tag.onload = () => resolve(url); tag.onerror = () => reject(url); document.head.appendChild(tag); } }); } // 加载 waifu.css live2d.min.js waifu-tips.js if (screen.width >= 768) { Promise.all([ loadExternalResource(live2d_path + \"waifu.css\", \"css\"), loadExternalResource(live2d_path + \"live2d.min.js\", \"js\"), loadExternalResource(live2d_path + \"waifu-tips.js\", \"js\") ]).then(() => { // 配置选项的具体用法见 README.md initWidget({ waifuPath: \"/js/waifu-tips.json\", //apiPath: \"https://live2d.fghrsh.net/api/\", cdnPath: \"https://cdn.cbd.int/akilar-live2dapi@latest/\", tools: [\"hitokoto\", \"asteroids\", \"switch-model\", \"switch-texture\", \"photo\", \"info\", \"quit\"] }); }); } console.log(` く__,.ヘヽ. / ,ー、 〉 \ ', !-─‐-i / /´ /`ー' L//`ヽ、 / /, /| , , ', イ / /-‐/ i L_ ハ ヽ! i レ ヘ 7イ`ト レ'ァ-ト、!ハ| | !,/7 '0' ´0iソ| | |.从\" _ ,,,, / |./ | レ'| i>.、,,__ _,.イ / .i | レ'| | / k_7_/レ'ヽ, ハ. | | |/i 〈|/ i ,.ヘ | i | .|/ / i: ヘ! \ | kヽ>、ハ _,.ヘ、 /、! !'〈//`T´', \ `'7'ーr' レ'ヽL__|___i,___,ンレ|ノ ト-,/ |___./ 'ー' !_,.: `);"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/clock.js","permalink":"https://en.blog.sinzmise.top/js/clock.js","excerpt":"","text":"(function () { var t = 820; var a = 250; var r = 7; var n = 10; var e = .65; var f; var o = []; const v = [\"#33B5E5\", \"#0099CC\", \"#AA66CC\", \"#9933CC\", \"#99CC00\", \"#669900\", \"#FFBB33\", \"#FF8800\", \"#FF4444\", \"#CC0000\"]; var h = []; var u = [[[0, 0, 1, 1, 1, 0, 0], [0, 1, 1, 0, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 0, 1, 1, 0], [0, 0, 1, 1, 1, 0, 0]], [[0, 0, 0, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1]], [[0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 1, 1, 1, 1, 1]], [[1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 0], [0, 1, 1, 0, 1, 1, 0], [1, 1, 0, 0, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 1, 1]], [[1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[0, 0, 0, 0, 1, 1, 0], [0, 0, 1, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [1, 1, 0, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0]], [[0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 1, 1, 0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]; function l(t) { var a = []; f.fillStyle = \"#005EAC\"; var r = new Date; var e = 70, o = 30; var v = r.getHours(); var u = Math.floor(v / 10); var l = v % 10; a.push({ num: u }); a.push({ num: l }); a.push({ num: 10 }); var c = r.getMinutes(); var u = Math.floor(c / 10); var l = c % 10; a.push({ num: u }); a.push({ num: l }); a.push({ num: 10 }); var M = r.getSeconds(); var u = Math.floor(M / 10); var l = M % 10; a.push({ num: u }); a.push({ num: l }); for (var p = 0; p < a.length; p++) { a[p].offsetX = e; e = m(e, o, a[p].num, t); if (p < a.length - 1) { if (a[p].num != 10 && a[p + 1].num != 10) { e += n } } } if (h.length == 0) { h = a } else { for (var C = 0; C < h.length; C++) { if (h[C].num != a[C].num) { s(a[C]); h[C].num = a[C].num } } } i(t); g(); return r } function s(t) { var a = t.num; var n = u[a]; for (var e = 0; e < n.length; e++) { for (var f = 0; f < n[e].length; f++) { if (n[e][f] == 1) { var h = { offsetX: t.offsetX + r + r * 2 * f, offsetY: 30 + r + r * 2 * e, color: v[Math.floor(Math.random() * v.length)], g: 1.5 + Math.random(), vx: Math.pow(-1, Math.ceil(Math.random() * 10)) * 4 + Math.random(), vy: -5 }; o.push(h) } } } } function i(t) { for (var a = 0; a < o.length; a++) { t.beginPath(); t.fillStyle = o[a].color; t.arc(o[a].offsetX, o[a].offsetY, r, 0, 2 * Math.PI); t.fill() } } function g() { var n = 0; for (var f = 0; f < o.length; f++) { var v = o[f]; v.offsetX += v.vx; v.offsetY += v.vy; v.vy += v.g; if (v.offsetY > a - r) { v.offsetY = a - r; v.vy = -v.vy * e } if (v.offsetX > r && v.offsetX < t - r) { o[n] = o[f]; n++ } } for (; n < o.length; n++) { o.pop() } } function m(t, a, n, e) { var f = u[n]; for (var o = 0; o < f.length; o++) { for (var v = 0; v < f[o].length; v++) { if (f[o][v] == 1) { e.beginPath(); e.arc(t + r + r * 2 * v, a + r + r * 2 * o, r, 0, 2 * Math.PI); e.fill() } } } e.beginPath(); t += f[0].length * r * 2; return t } var c = document.getElementById(\"canvas\"); c.width = t; c.height = a; f = c.getContext(\"2d\"); var M = new Date; setInterval(function () { f.clearRect(0, 0, f.canvas.width, f.canvas.height); l(f) }, 50) })();"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/kslink.js","permalink":"https://en.blog.sinzmise.top/js/kslink.js","excerpt":"","text":"var leonus = { linkCom: e => { var t = document.querySelector(\".el-textarea__inner\"); \"bf\" == e ? (t.value = \"```yml\\n\", t.value += \"- name: \\n link: \\n avatar: \\n descr: \\n rss: \",t.style.height = \"165px\", t.value += \"\\n```\", t.setSelectionRange(15, 15)) : (t.value = \"站点名称:\\n站点地址:\\n头像链接:\\n站点描述:\\nRSS地址:\",t.style.height = \"205px\", t.setSelectionRange(5, 5)), t.focus() }, owoBig: () => { if (!document.getElementById(\"post-comment\") || document.body.clientWidth < 768) return; let e = 1, t = \"\", o = document.createElement(\"div\"), n = document.querySelector(\"body\"); o.id = \"owo-big\", n.appendChild(o), new MutationObserver((l => { for (let a = 0; a < l.length; a++) { let i = l[a].addedNodes, s = \"\"; if (2 == i.length && \"OwO-body\" == i[1].className) s = i[1]; else { if (1 != i.length || \"tk-comment\" != i[0].className) continue; s = i[0] } s.onmouseover = l => { e && (\"OwO-body\" == s.className && \"IMG\" == l.target.tagName || \"tk-owo-emotion\" == l.target.className) && (e = 0, t = setTimeout((() => { let e = 3 * l.path[0].clientHeight, t = 3 * l.path[0].clientWidth, a = l.x - l.offsetX - (t - l.path[0].clientWidth) / 2, i = l.y - l.offsetY; a + t > n.clientWidth && (a -= a + t - n.clientWidth + 10), a < 0 && (a = 10), o.style.cssText = `display:flex; height:${e}px; width:${t}px; left:${a}px; top:${i}px;`, o.innerHTML = `` }), 300)) }, s.onmouseout = () => { o.style.display = \"none\", e = 1, clearTimeout(t) } } })).observe(document.getElementById(\"post-comment\"), { subtree: !0, childList: !0 }) }, };"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/newyear.js","permalink":"https://en.blog.sinzmise.top/js/newyear.js","excerpt":"","text":"function newYear() { if (!document.querySelector('#newYear')) return; // 新年时间戳 and 星期对象 let SpringFestival = new Date('2024-02-10 00:00:00') let newYear = SpringFestival.getTime() / 1000, week = { 0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六' } function nol(h) { h = Number(h); return h > 9 ? h : '0' + h; } time(); function time() { // 现在 时间对象 let now = new Date(); // 右下角 今天 document.querySelector('#newYear .today').innerHTML = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' ' + week[now.getDay()] // 现在与新年相差秒数 let second = newYear - Math.round(now.getTime() / 1000); // 小于0则表示已经过年 if (second < 0) { window.newYearTimer = null document.querySelector('#newYear .title').innerHTML = 'Happy New Year!'; document.querySelector('#newYear .newYear-time').innerHTML = '新年快乐'; } else { // 大于0则还未过年 document.querySelector('#newYear .title').innerHTML = '距离' + SpringFestival.getFullYear() + '年春节:' // 大于一天则直接渲染天数 if (second > 86400) { document.querySelector('#newYear .newYear-time').innerHTML = `${Math.ceil(second / 86400)}天` } else { // 小于一天则使用时分秒计时。 let h = nol(parseInt(second / 3600)); second %= 3600; let m = nol(parseInt(second / 60)); second %= 60; let s = nol(second); document.querySelector('#newYear .newYear-time').innerHTML = `${h}:${m}:${s}`; // 计时 if (!window.newYearTimer) window.newYearTimer = setInterval(time, 1000); } } } } function newYearSwiper() { var swiper = new Swiper('.newYear-slider', { passiveListeners: true, loop: true, // autoplay: false, autoplay: { disableOnInteraction: true, delay: 5000 }, effect: 'fade', mousewheel: true, autoHeight: true }); var comtainer = document.querySelector('.newYear-slider'); if (comtainer !== null) { comtainer.onmouseenter = () => { swiper.autoplay.stop() }; comtainer.onmouseleave = () => { swiper.autoplay.start() }; } } // 适配了pjax function whenDOMReady() { // pjax加载完成(切换页面)后需要执行的函数和代码 newYear() newYearSwiper() } whenDOMReady() // 打开网站先执行一次 document.addEventListener(\"pjax:complete\", whenDOMReady) // pjax加载完成(切换页面)后再执行一次"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/plane.js","permalink":"https://en.blog.sinzmise.top/js/plane.js","excerpt":"","text":"/* Copyright (c) Rootof Creations HB, rootof.com, kickassapp.com */ (function (window) { var JSONP = (function () { var counter = 0, head, query, key, window = this; function load(url) { var script = document.createElement('script'), done = false; script.src = url; script.async = true; script.onload = script.onreadystatechange = function () { if (!done && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\")) { done = true; script.onload = script.onreadystatechange = null; if (script && script.parentNode) { script.parentNode.removeChild(script); } } }; if (!head) { head = document.getElementsByTagName('head')[0]; if (!head) head = document.body; } head.appendChild(script); } function jsonp(url, params, callback) { query = \"?\"; params = params || {}; for (key in params) { if (params.hasOwnProperty(key)) { query += encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]) + \"&\"; } } var jsonp = \"json\" + (++counter); window[jsonp] = function (data) { callback(data); try { delete window[jsonp]; } catch (e) { } window[jsonp] = null; }; load(url + query + \"callback=\" + jsonp); return jsonp; } return {get: jsonp}; }()); var CORS = { request: function (url, params, callback) { if (this.calledByExtension()) { this._callbacks[this._callbackId++] = callback; window.postMessage(JSON.stringify({ from: \"kickassapp-page\", url: url, type: \"callApi\", params: params }), \"*\"); return; } params = params || {}; var query = \"?\"; for (key in params) { if (params.hasOwnProperty(key)) { query += encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]) + \"&\"; } } var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { callback(JSON.parse(xhr.responseText)); } } xhr.open(\"GET\", url + query); xhr.withCredentials = true; xhr.setRequestHeader(\"Content-Type\", \"application/json\"); xhr.send(); }, calledByExtension: function () { return !!document.getElementById(\"kickass-has-been-initialized-yes-yes-yes\"); }, _callbacks: {}, _callbackId: 0 } if (CORS.calledByExtension()) { window.addEventListener(\"message\", function (e) { var messageData; try { messageData = JSON.parse(e.data); } catch (e) { return; } if (messageData.from === \"kickassapp-extension\" && messageData.sanityCheck === \"kickassapp-extension-version1\") { var message = messageData.payload; if (message.type === \"response\") { CORS._callbacks[message.requestId](message.body); delete CORS._callbacks[message.requestId]; } else if (message.type === \"destroy\") { window.KICKASSGAME.destroy(); } } }, false); } function getGlobalNamespace() { return window && window.INSTALL_SCOPE ? window.INSTALL_SCOPE : window; } var Class = function (methods) { var ret = function () { if (ret.$prototyping) return this; if (typeof this.initialize == 'function') return this.initialize.apply(this, arguments); }; if (methods.Extends) { ret.parent = methods.Extends; methods.Extends.$prototyping = true; ret.prototype = new methods.Extends; methods.Extends.$prototyping = false; } for (var key in methods) if (methods.hasOwnProperty(key)) ret.prototype[key] = methods[key]; return ret; }; if (typeof exports != 'undefined') exports.Class = Class; var Vector = new Class({ initialize: function (x, y) { if (typeof x == 'object') { this.x = x.x; this.y = x.y; } else { this.x = x; this.y = y; } }, cp: function () { return new Vector(this.x, this.y); }, mul: function (factor) { this.x *= factor; this.y *= factor; return this; }, mulNew: function (factor) { return new Vector(this.x * factor, this.y * factor); }, div: function (factor) { this.x /= factor; this.y /= factor; return this; }, divNew: function (factor) { return new Vector(this.x / factor, this.y / factor); }, add: function (vec) { this.x += vec.x; this.y += vec.y; return this; }, addNew: function (vec) { return new Vector(this.x + vec.x, this.y + vec.y); }, sub: function (vec) { this.x -= vec.x; this.y -= vec.y; return this; }, subNew: function (vec) { return new Vector(this.x - vec.x, this.y - vec.y); }, rotate: function (angle) { var x = this.x, y = this.y; this.x = x * Math.cos(angle) - Math.sin(angle) * y; this.y = x * Math.sin(angle) + Math.cos(angle) * y; return this; }, rotateNew: function (angle) { return this.cp().rotate(angle); }, setAngle: function (angle) { var l = this.len(); this.x = Math.cos(angle) * l; this.y = Math.sin(angle) * l; return this; }, setAngleNew: function (angle) { return this.cp().setAngle(angle); }, setLength: function (length) { var l = this.len(); if (l) this.mul(length / l); else this.x = this.y = length; return this; }, setLengthNew: function (length) { return this.cp().setLength(length); }, normalize: function () { var l = this.len(); if (l == 0) return this; this.x /= l; this.y /= l; return this; }, normalizeNew: function () { return this.cp().normalize(); }, angle: function () { return Math.atan2(this.y, this.x); }, collidesWith: function (rect) { return this.x > rect.x && this.y > rect.y && this.x < rect.x + rect.width && this.y < rect.y + rect.height; }, len: function () { var l = Math.sqrt(this.x * this.x + this.y * this.y); if (l < 0.005 && l > -0.005) return 0; return l; }, is: function (test) { return typeof test == 'object' && this.x == test.x && this.y == test.y; }, dot: function (v2) { return this.x * v2.x + this.y * v2.y; }, inTriangle: function (a, b, c) { var v0 = c.subNew(a); var v1 = b.subNew(a); var v2 = p.subNew(a); var dot00 = v0.dot(v0); var dot01 = v0.dot(v1); var dot02 = v0.dot(v2); var dot11 = v1.dot(v1); var dot12 = v1.dot(v2); var invDenom = 1 / (dot00 * dot11 - dot01 * dot01); var u = (dot11 * dot02 - dot01 * dot12) * invDenom; var v = (dot00 * dot12 - dot01 * dot02) * invDenom; return (u > 0) && (v > 0) && (u + v < 1); }, distanceFrom: function (vec) { return Math.sqrt(Math.pow((this.x - vec.x), 2), Math.pow(this.y - vec.y, 2)); }, toString: function () { return '[Vector(' + this.x + ', ' + this.y + ') angle: ' + this.angle() + ', length: ' + this.len() + ']'; } }); if (typeof exports != 'undefined') exports.Vector = Vector; var Rect = new Class({ initialize: function (x, y, w, h) { this.pos = new Vector(x, y); this.size = {width: w, height: h}; }, hasPoint: function (point) { return point.x > this.getLeft() && point.x < this.getRight() && point.y > this.getTop() && point.y < this.getBottom(); }, setLeft: function (left) { this.pos.x = left + this.size.width / 2; }, setTop: function (top) { this.pos.y = top + this.size.height / 2; }, getLeft: function () { return this.pos.x - this.size.width / 2; }, getTop: function () { return this.pos.y - this.size.height / 2; }, getRight: function () { return this.pos.x + this.size.width / 2; }, getBottom: function () { return this.pos.y + this.size.height / 2; }, cp: function () { return new Rect(this.pos.x, this.pos.y, this.size.width, this.size.height); } }); if (typeof exports != 'undefined') exports.Rect = Rect; var Fx = new Class({ initialize: function () { this.listeners = []; this.tweens = {}; this.running = {}; }, addListener: function (listener) { this.listeners.push(listener); }, add: function (key, props) { props = props || {}; props.duration = props.duration || 500; props.transition = props.transition || Tween.Linear; props.repeats = typeof props.repeats == 'undefined' ? false : props.repeats; if (!props.tweens) { var start = props.start || 0; var end = typeof props.end == 'undefined' ? 1 : props.end; props.tweens = [[start, end]]; } this.tweens[key] = props; }, update: function (time) { time = typeof time === 'number' ? time : now(); for (var key in this.tweens) if (this.tweens.hasOwnProperty(key)) { if (!this.running[key]) { this.tweenStart(key, time); continue; } var tween = this.tweens[key]; var tdelta = time - this.running[key].startTime; if (tdelta > tween.duration) { this.tweenFinished(tween, key); continue; } var delta = tween.transition(tdelta / tween.duration); var changes = []; for (var i = 0, t; t = tween.tweens[i]; i++) { var x = delta * (t[1] - t[0]) + t[0]; changes.push(x); } this.fire(key, changes, delta); } }, tweenStart: function (key, time) { this.running[key] = {startTime: time}; var values = []; for (var i = 0, tween; tween = this.tweens[key].tweens[i]; i++) values.push(tween[0]); this.fire(key, values, 0); }, tweenFinished: function (tween, key) { var values = []; for (var i = 0, t; t = tween.tweens[i]; i++) values.push(t[1]); this.fire(key, values, 1); if (!tween.repeats) { delete this.running[key]; delete this.tweens[key]; return; } this.tweenStart(key, now()); }, fire: function (key, values, delta) { for (var i = 0, listener; listener = this.listeners[i]; i++) listener.set.call(listener, key, values, delta); } }); var Tween = { Linear: function (x) { return x; }, Quadratic: function (x) { return x * x; }, Quintic: function (x) { return x * x * x; }, Shake: function (x) { return Math.sin(x); } }; var GameGlobals = { FPS: 60, useAnimationFrame: true, boids: {flockRadius: 400, size: 100}, path: function () { return \"https://kickassapp.com/\" + Array.prototype.slice.call(arguments).join(\"\"); }, hasCanvas: (typeof document.createElement('canvas').getContext !== 'undefined'), bulletColor: 'black' }; window.GameGlobals = GameGlobals; if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement) { if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (len === 0) return -1; var n = 0; if (arguments.length > 0) { n = Number(arguments[1]); if (n !== n) n = 0; else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n)); } if (n >= len) return -1; var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) return k; } return -1; }; } function now() { return (new Date()).getTime(); } function bind(bound, func) { return function () { return func.apply(bound, arguments); }; } function each(arr, func, bindObject) { if (typeof arr.forEach == 'function') { arr.forEach(func, bindObject); return arr; } for (var key in arr) if (arr.hasOwnProperty(key)) func.call(bindObject || window, arr[key], key); return arr; } function addEvent(obj, type, fn) { if (obj.addEventListener) obj.addEventListener(type, fn, false); else if (obj.attachEvent) { obj[\"e\" + type + fn] = fn; obj[type + fn] = function () { return obj[\"e\" + type + fn](window.event); }; obj.attachEvent(\"on\" + type, obj[type + fn]); } } function removeEvent(obj, type, fn) { if (obj.removeEventListener) obj.removeEventListener(type, fn, false); else if (obj.detachEvent) { obj.detachEvent(\"on\" + type, obj[type + fn]); obj[type + fn] = null; obj[\"e\" + type + fn] = null; } } function stopEvent(e) { if (e.stopPropogation) e.stopPropogation(); if (e.preventDefault) e.preventDefault(); e.returnValue = false; } function elementIsContainedIn(element1, element2) { if (element.contains) return element1.contains(element2); return !!(element1.compareDocumentPosition(element2) & 16); }; function code(name) { var table = {38: 'up', 40: 'down', 37: 'left', 39: 'right', 27: 'esc'}; if (table[name]) return table[name]; return String.fromCharCode(name); }; function random(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); }; function getRect(element) { if (typeof element.getBoundingClientRect === 'function') { var rect = element.getBoundingClientRect(); var sx = window.pageXOffset; var sy = window.pageYOffset; return {width: rect.width, height: rect.height, left: rect.left + sx, top: rect.top + sy}; } var rect = {width: element.offsetWidth, height: element.offsetHeight, left: 0, top: 0}; var el = element; while (el) { rect.left += el.offsetLeft; rect.top += el.offsetTop; el = el.offsetParent; } return rect; } function getCompatElement() { var doc = document; return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.documentElement : doc.body; } function getScrollSize() { var doc = getCompatElement(); var min = {x: doc.clientWidth, y: doc.clientHeight}; var body = document.body; return { x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y) }; } function getStyle(element, prop) { if (element.style[prop]) return element.style[prop]; if (element.currentStyle) return element.currentStyle[prop]; return document.defaultView.getComputedStyle(element, null).getPropertyValue(prop); } function setStyles(element, props) { for (var key in props) if (props.hasOwnProperty(key)) { var val = props[key]; if (typeof val === \"number\" && key !== \"opacity\" && key !== \"zIndex\") val = val + 'px'; element.style[key] = val; } }; function hasClass(ele, cls) { return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)')); } function addClass(ele, cls) { if (!hasClass(ele, cls)) ele.className += \" \" + cls; } function removeClass(ele, cls) { if (hasClass(ele, cls)) { var reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'); ele.className = ele.className.replace(reg, ' '); } } function cloneElement(element) { return element.cloneNode(true); } function newElement(tag, props) { var el = document.createElement(tag); for (var key in props) if (props.hasOwnProperty(key)) { if (key === 'styles') { setStyles(el, props[key]); } else { el[key] = props[key]; } } return el; } var requestAnimFrame = (function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) { window.setTimeout(callback, 1000 / 60); }; })(); function delay(d, func, bound) { return setTimeout(bind(bound, func), d); } var KickAss = new Class({ initialize: function (options) { if (options && options.mySite) { this.mySite = options.mySite; } this.players = []; this.elements = []; this.weaponClass = Weapons[1].cannonClass; this.scrollPos = new Vector(0, 0); this.scrollSize = new Vector(0, 0); this.windowSize = {width: 0, height: 0}; this.updateWindowInfo(); this.bulletManager = new BulletManager(this); this.bulletManager.updateEnemyIndex(); this.explosionManager = new ExplosionManager(this); this.ui = new UIManager(this); this.bombManager = new BombManager(this); this.menuManager = new MenuManager(this); this.menuManager.create(); if (typeof StatisticsManager !== \"undefined\") { this.statisticsManager = new StatisticsManager(this); } this.sessionManager = new SessionManager(this); this.lastUpdate = now(); this.keyMap = {}; this.keydownEvent = bind(this, this.keydown); this.keyupEvent = bind(this, this.keyup); this.multiplier = 10; if (this.isCampaign()) { this.audioManager = { explosion: new AudioManager(GameGlobals.path(\"static/sounds/game/explosion\"), [\"mp3\", \"ogg\"]), shot: new AudioManager(GameGlobals.path(\"static/sounds/game/shot\"), [\"mp3\", \"ogg\"]) } } else { this.audioManager = {}; } if (window.KickAssStyle && window.KickAssStyle === \"white\") { GameGlobals.bulletColor = \"white\"; } addEvent(document, 'keydown', this.keydownEvent); addEvent(document, 'keyup', this.keyupEvent); addEvent(document, 'keypress', this.keydownEvent); }, begin: function () { this.addPlayer(); this.sessionManager.isPlaying = true; if (!GameGlobals.useAnimationFrame) { this.loopTimer = window.setInterval(bind(this, this.loop), 1000 / GameGlobals.FPS); } if (GameGlobals.useAnimationFrame) { requestAnimFrame(bind(this, this.loop)); } }, keydown: function (e) { var c = code(e.keyCode); this.keyMap[c] = true; switch (c) { case'left': case'right': case'up': case'down': case'esc': case' ': stopEvent(e); break; } switch (c) { case'esc': this.destroy(); break; } }, keyup: function (e) { var c = code(e.keyCode); this.keyMap[c] = false; switch (c) { case'left': case'right': case'up': case'down': case'esc': case' ': if (e.stopPropogation) { e.stopPropogation(); } if (e.preventDefault) { e.preventDefault(); } e.returnValue = false; break; } }, loop: function () { var currentTime = now(); var tdelta = (currentTime - this.lastUpdate) / 1000; this.updateWindowInfo(); for (var i = 0, player; player = this.players[i]; i++) { player.update(tdelta); } this.bulletManager.update(tdelta); this.bombManager.update(tdelta); this.explosionManager.update(tdelta); this.ui.update(tdelta); if (this.statisticsManager) { this.statisticsManager.update(tdelta); } this.sessionManager.update(tdelta); this.lastUpdate = currentTime; if (GameGlobals.useAnimationFrame) { requestAnimFrame(bind(this, this.loop)); } }, addPlayer: function () { var data = false; var ship = Ships.Standard; if (window.KICKASSSHIP && window.KICKASSSHIP.points) { ship = KICKASSSHIP; } if (this.mySite && this.mySite.getShipConfig()) { ship = this.mySite.getShipConfig(); } var player = new Player(this); player.setShip(ship); this.players.push(player); this.explosionManager.addExplosion(player.pos); }, registerElement: function (el) { if (!el) { throw new Error(\"Can't register unexisting element.\"); } this.elements.push(el); }, unregisterElement: function (el) { this.elements.splice(this.elements.indexOf(el), 1); }, isKickAssElement: function (el) { for (var i = 0, element; element = this.elements[i]; i++) { if (el === element || elementIsContainedIn(element, el)) { return true; } } return false; }, isKeyPressed: function (key) { return !!this.keyMap[key]; }, updateWindowInfo: function () { var isIEQuirks = (!!window.ActiveXObject) && document.compatMode == \"BackCompat\"; this.windowSize = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }; if (isIEQuirks) { this.windowSize.width = document.body.clientWidth; this.windowSize.height = document.body.clientHeight; } if (this.menuManager && this.menuManager.isVisible()) { this.windowSize.height -= this.menuManager.getHeight(); } this.scrollPos.x = window.pageXOffset || document.documentElement.scrollLeft; this.scrollPos.y = window.pageYOffset || document.documentElement.scrollTop; this.scrollSize = getScrollSize(); }, hideAll: function () { for (var i = 0, el; el = this.elements[i]; i++) { el.style.visibility = 'hidden'; } }, showAll: function () { for (var i = 0, el; el = this.elements[i]; i++) { el.style.visibility = 'visible'; } }, updateShips: function (ship, isInitial) { if (!isInitial) { this.ui.showMessage(\"You're now flying\" + ship.name + \"!!\"); } for (var i = 0, player; player = this.players[i]; i++) { player.setShip(ship); } }, changeWeapon: function (weapon, isInitial) { this.weaponClass = weapon.cannonClass; if (!isInitial) { this.ui.showMessage(\"Changed to \" + weapon.name.toUpperCase() + \"!!!!\"); } for (var i = 0, player; player = this.players[i]; i++) { player.setCannons(weapon.cannonClass); } }, changeWeaponById: function (id, isInitial) { if (Weapons[id]) { this.changeWeapon(Weapons[id], isInitial); } }, flyOutPlayers: function (x, y) { for (var i = 0, player; player = this.players[i]; i++) { player.flyTo(x, -player.size.height); player.isBound = false; } }, flyInPlayers: function () { for (var i = 0, player; player = this.players[i]; i++) { player.flyTo(player.pos.x, 100, function () { this.isBound = true; }); } }, newRank: function (rank) { this.ui.showMessage(\"OMG. You leveled up to: \" + rank + '!Be sure to check what cool new stuff you get in the menu.'); }, fireBomb: function () { this.bombManager.blow(); }, destroy: function () { removeEvent(document, 'keydown', this.keydownEvent); removeEvent(document, 'keypress', this.keydownEvent); removeEvent(document, 'keyup', this.keyupEvent); for (var i = 0, player; player = this.players[i]; i++) { player.destroy(); } this.bulletManager.destroy(); this.explosionManager.destroy(); this.menuManager.destroy(); if (!GameGlobals.useAnimationFrame) { clearInterval(this.loopTimer); } getGlobalNamespace().KICKASSGAME = false; if (this.isCampaign()) { document.location.reload(); } }, isCampaign: function () { return getGlobalNamespace().IS_CLOUDFLARE_GAME; }, isMySite: function () { return !!getGlobalNamespace().KICKASS_SITE_KEY; }, shouldShowAd: function () { return !this.mySite && !this.isCampaign(); }, shouldShowMenu: function () { return !this.mySite && !this.isCampaign(); }, shouldShowHowToImage: function () { return this.mySite || this.isCampaign(); } }); window.KickAss = KickAss; var StatisticsManager = new Class({ initialize: function (game) { this.game = game; this.data = {}; this.data.startedPlaying = now(); this.data.elementsDestroyed = 0; this.data.shotsFired = 0; this.data.distanceFlownInPixels = 0; this.data.totalPointsThisSession = 0; this.data.usedThrusters = 0; this.lastUpdate = 0; }, usedThrusters: function () { this.data.usedThrusters = 1; }, increaseDistanceWithPixels: function (px) { this.data.distanceFlownInPixels += px; }, increasePointsGainedWithPoints: function (points) { this.data.totalPointsThisSession += points; }, addShotFired: function () { this.data.shotsFired++; if (this.game.audioManager.shot) { this.game.audioManager.shot.play(); } }, addElementsDestroyed: function () { this.data.elementsDestroyed++; }, update: function (tdelta) { this.lastUpdate += tdelta; if (this.lastUpdate > 0.25) { this.syncWithServer(); this.lastUpdate = 0; } }, syncWithServer: function () { var fragment = []; for (var key in this.data) if (this.data.hasOwnProperty(key)) { fragment.push(key + ':' + this.data[key]); } this.game.menuManager.sendMessageToMenu(\"stats:!\" + fragment.join('|')); } }); var MySite = new Class({ initialize: function (key) { this.key = key; }, load: function (callback) { CORS.request(GameGlobals.path('mysite/api.json'), { site_key: this.key, url: document.location.toString() }, bind(this, function (data) { if (data && data.embed) { this.mySiteData = data.embed; callback(true); } else { callback(false); } })); }, install: function () { }, getShipId: function () { return this.mySiteData && this.mySiteData.settings.ship; }, getShipConfig: function () { return this.mySiteData && this.mySiteData.settings.ship_config; }, getShareURL: function () { return this.mySiteData && this.mySiteData.settings.share_url; } }); var Menu = new Class({ initialize: function (game) { this.game = game; this.size = {height: 300}; }, generate: function (parent) { this.container = document.createElement('div'); this.container.className = 'KICKASSELEMENT'; this.container.id = 'kickass-profile-menu'; parent.appendChild(this.container); var shipId = getGlobalNamespace().KICKASSSHIPID || \"\"; this.url = GameGlobals.path('intermediate_postmessage.html?url=' + encodeURIComponent(getGlobalNamespace().KICKASSURL || document.location.href) + \"&origin=\" + encodeURIComponent(document.location.href) + \"&preship=\" + (shipId) + \"&is_campaign=\" + (this.game.isCampaign() ? \"true\" : \"\") + \"&is_mysite=\" + (this.game.isMySite() ? \"true\" : \"\")); this.isSocketReady = false; this.socketIframe = document.createElement(\"iframe\"); this.socketIframe.frameborder = '0'; this.socketIframe.className = 'KICKASSELEMENT'; this.socketIframe.width = '100%'; this.socketIframe.height = this.size.height + 'px'; this.container.appendChild(this.socketIframe); this.menuOrigin = \"https://kickassapp.com/\".replace(/\\/$/, \"\"); this.socketIframe.src = this.url; this.onMessage = bind(this, function (event) { if (event.origin !== this.menuOrigin && event.origin !== this.menuOrigin.replace(\"http://\", \"https://\")) { console.log(\"ignoring event from\", event.origin); return; } var message = event.data; if (message === \"ready\") { this.onGameReady(); return; } var t = message.split(':!'); if (t.length !== 2) { return; } var type = t.shift().replace(/^./g, function (match) { return match.charAt(0).toUpperCase(); }); if (typeof this['messageType' + type] === \"function\") { this['messageType' + type](t.join(\":!\")); } }); window.addEventListener(\"message\", this.onMessage, false); this.game.registerElement(this.container); }, socketPostMessage: function (message) { this.socketIframe.contentWindow.postMessage(message, this.menuOrigin); }, onGameReady: function () { this.isSocketReady = true; this.game.registerElement(this.container.getElementsByTagName('iframe')[0]); this.socketPostMessage(\"url:!\" + (getGlobalNamespace().KICKASSURL || document.location.href)); if (this.game.statisticsManager) { this.game.statisticsManager.syncWithServer(); } this.game.menuManager.onGameReady(); }, sendMessage: function (message) { if (!this.isSocketReady) { return; } if (message != this.lastMessage) { try { this.socketPostMessage(message); } catch (e) { } this.lastMessage = message; } }, messageTypeChangeShip: function (pieces) { pieces = pieces.split(\",\"); var shipId = pieces[0]; var weaponId = pieces[1]; var isInitial = pieces[2] === 'initial'; if (this.shipId === shipId) { return; } if (isInitial && getGlobalNamespace().KICKASSSHIP) { return; } this.shipId = shipId; CORS.request(GameGlobals.path('designer/ship/' + shipId + '/construction.json'), { ship_id: shipId, is_initial: isInitial ? '1' : '0' }, bind(this, function (data) { this.game.updateShips(data.data, isInitial); try { window.focus(); } catch (e) { } })); if (!isInitial) { this.parent.hideMenu(); } }, messageTypeChangeWeapon: function (weaponId, isInitial) { this.game.changeWeaponById(weaponId, isInitial); }, messageTypeSetMultiplier: function (mod) { mod = parseInt(mod, 10); if (isNaN(mod) || !mod) { return; } this.game.multiplier = mod; }, messageTypeNewRank: function (rank) { this.game.newRank(rank); }, messageTypePlayerMessage: function (message) { this.game.ui.showMessage(message); }, destroy: function () { this.game.unregisterElement(this.container); this.game.unregisterElement(this.iframe); window.removeEventListener(\"message\", this.onMessage, false); this.container.parentNode.removeChild(this.container); } }); var MenuManager = new Class({ initialize: function (game) { this.game = game; this.numPoints = 0; if (!getGlobalNamespace().KICKASS_INLINE_CSS) { this.includeCSS(GameGlobals.path('css/menustyles.css')); } }, generateDefaults: function () { for (var id in Weapons) if (Weapons.hasOwnProperty(id)) { this.addWeapon(Weapons[id], id); } this.hideBombMenu(); }, create: function () { this.container = document.createElement('div'); this.container.className = 'KICKASSELEMENT KICKASShidden ' + (this.game.shouldShowMenu() ? \"\" : \"KICKASSNOMENU\"); this.container.id = 'kickass-menu'; if (this.game.shouldShowMenu()) { this.container.style.bottom = '-250px'; this.container.style.display = 'none'; } else { removeClass(this.container, \"KICKASShidden\"); } getAppContainerElement().appendChild(this.container); var adHTML = \"\"; this.container.innerHTML = '' + '' + adHTML + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + this.numPoints + '' + 'Press esc to quit' + this.getShareHTML() + '' + ''; this.pointsTab = document.getElementById('kickass-pointstab'); this.pointsTabWrapper = document.getElementById('kickass-pointstab-wrapper'); this.points = document.getElementById('kickass-points'); this.escToQuit = document.getElementById('kickass-esctoquit'); this.howToImage = document.getElementById('kickass-howto-image'); this.weaponsMenu = document.getElementById('kickass-weapons-menu'); this.weaponsList = document.getElementById('kickass-weapons-list'); this.bombLink = document.getElementById('kickass-bomb-menu'); var all = this.container.getElementsByTagName('*'); for (var i = 0; i < all.length; i++) { this.game.registerElement(all[i]); } this.game.registerElement(this.container); if (this.game.shouldShowMenu()) { this.menu = new Menu(this.game); this.menu.parent = this; this.menu.generate(this.container); } else { setTimeout(function () { this.onGameReady(); }.bind(this), 100); } addEvent(this.bombLink, 'click', bind(this, function (e) { stopEvent(e); this.game.fireBomb(); })); addEvent(this.pointsTabWrapper, 'click', bind(this, this.toggleMenu)); addEvent(this.weaponsMenu, 'click', bind(this, this.toggleWeaponsMenu)); this.generateDefaults(); }, getShareHTML: function () { return \"\"; }, onGameReady: function () { this.container.style.display = 'block'; if (this.game.shouldShowHowToImage()) { setTimeout(bind(this, function () { removeClass(this.howToImage, \"kickass-howto-invisible\"); }), 10); setTimeout(bind(this, function () { addClass(this.howToImage, \"kickass-howto-invisible\"); }), 4000); } }, navigateTo: function (page, dontShowMenu) { if (!dontShowMenu) { this.showMenu(); } if (this.menu) { this.menu.socketPostMessage('navigate:!' + page); } }, toggleMenu: function () { if (this.game.shouldShowMenu()) { if (hasClass(this.container, 'KICKASShidden')) { this.showMenu(); } else { this.hideMenu(); } } else { this.showMenu(); } }, toggleWeaponsMenu: function () { if (hasClass(this.weaponsMenu, 'KICKASShidden')) { this.showWeaponsMenu(); } else { this.hideWeaponsMenu(); } }, hideWeaponsMenu: function () { this.weaponsMenu.style.width = ''; addClass(this.weaponsMenu, 'KICKASShidden'); }, showWeaponsMenu: function () { var last = this.weaponsMenu.getElementsByTagName('li'); last = last[last.length - 1]; this.weaponsMenu.style.width = (last.offsetLeft + last.offsetWidth - 47) + 'px'; removeClass(this.weaponsMenu, 'KICKASShidden'); }, showMenu: function () { if (this.game.shouldShowMenu()) { this.container.style.bottom = ''; removeClass(this.container, 'KICKASShidden'); } }, hideMenu: function () { this.container.style.bottom = ''; addClass(this.container, 'KICKASShidden'); }, showBombMenu: function () { this.bombLink.style.width = \"\"; }, hideBombMenu: function () { this.bombLink.style.width = \"0px\"; }, getHeight: function () { return this.container.clientHeight; }, isVisible: function () { return !hasClass(this.container, 'KICKASShidden'); }, addPoints: function (killed, pos) { var points = killed * this.game.multiplier; this.numPoints += points; this.points.innerHTML = this.numPoints; if (this.game.statisticsManager) { this.game.statisticsManager.increasePointsGainedWithPoints(points); } this.game.ui.addPointsBubbleAt(pos, points); }, includeCSS: function (file) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = file; (document.head || document.body).appendChild(link); }, sendMessageToMenu: function (fragment) { if (this.menu) { this.menu.sendMessage(fragment); } }, addWeapon: function (weapon, id) { var li = document.createElement('li'); li.className = 'KICKASSELEMENT kickass-weapon-item'; li.weapon = weapon; li.style.backgroundImage = 'url(' + GameGlobals.path('css/gfx/kickass/weap-' + weapon.id + '.png') + ')'; li.innerHTML = '' + weapon.name + ''; this.weaponsList.appendChild(li); addEvent(li, 'click', bind(this, function (e) { stopEvent(e); this.changeWeapon(weapon); this.sendMessageToMenu(\"changeWeapon:!\" + id); })); }, changeWeapon: function (weapon) { this.game.changeWeapon(weapon); }, destroy: function () { var all = this.container.getElementsByTagName('*'); for (var i = 0; i < all.length; i++) { this.game.unregisterElement(all[i]); } this.game.unregisterElement(this.container); if (this.menu) { this.menu.destroy(); } this.container.parentNode.removeChild(this.container); } }); var UIManager = new Class({ initialize: function (game) { this.UNIQID = 0; this.game = game; this.pointBubbles = {}; this.messages = {}; this.fx = new Fx(); this.fx.addListener(this); }, update: function (tdelta) { this.fx.update(); }, set: function (key, value, delta) { var type = key.split('-')[0]; var id = key.split('-')[1]; if (this.pointBubbles[id]) { var bubble = this.pointBubbles[id]; bubble.style.top = value[0] + 'px'; bubble.style.opacity = value[1]; if (delta == 1 && bubble.parentNode) { bubble.parentNode.removeChild(bubble); delete this.pointBubbles[id]; } } else if (this.messages[id] && type == 'messagedown') { var message = this.messages[id]; message.style.top = value[0] + 'px'; if (delta == 1) { setTimeout(bind(this, function () { this.fx.add('messageup-' + id, { tweens: [[value[0], -100]], transition: Tween.Quadratic, duration: 300 }); }), message.staytime || 4000); } } else if (this.messages[id] && type == 'messageup') { var message = this.messages[id]; message.style.top = value[0] + 'px'; if (delta == 1) { message.parentNode.removeChild(message); delete this.messages[id]; } } }, addPointsBubbleAt: function (pos, points) { var id = 'bubble' + (this.UNIQID++); var y = this.game.scrollPos.y + pos.y; var bubble = newElement('span', { innerHTML: points, className: 'KICKASSELEMENT', styles: { position: 'absolute', font: \"20px Arial\", fontWeight: \"bold\", opacity: \"1\", color: \"black\", textShadow: \"#fff 1px 1px 3px\", top: y, zIndex: \"10000000\" } }); bubble.style.left = pos.x - bubble.offsetWidth / 2 + 'px'; getAppContainerElement().appendChild(bubble); this.pointBubbles[id] = bubble; this.fx.add('bubble-' + id, {tweens: [[y, y - 15], [1, 0]]}); }, showMessage: function (html, staytime) { staytime = staytime || false; var width = 300; var id = this.UNIQID++; var message = newElement('div', { innerHTML: html, className: 'KICKASSELEMENT', id: 'kickass-message-' + id, styles: { position: 'fixed', top: -100, left: '50%', marginLeft: -width / 2, width: width, background: '#222', opacity: 0.8, padding: '10px', color: '#fff', textAlign: 'center', borderRadius: 15, font: '20px Arial', fontWeight: 'bold', zIndex: \"10000000\" } }); message.staytime = staytime; getAppContainerElement().appendChild(message); var to = this.getLowestBubbleY(); message.kickassto = to; this.fx.add('messagedown-' + id, {duration: 300, tweens: [[-100, to]], transition: Tween.Quadratic}); this.messages[id] = message; return message; }, getLowestBubbleY: function () { var top = 100; for (var id in this.messages) if (this.messages.hasOwnProperty(id)) top = Math.max(this.messages[id].kickassto + this.messages[id].offsetHeight + 10, top); return top; } }); var AudioManager = new Class({ initialize: function (src, formats) { this.src = src; this.formats = formats; channels = 8; this.supportsAudio = (typeof document.createElement('audio').play) != 'undefined'; if (this.supportsAudio) { this.numChannels = channels; this.channels = []; for (var i = 0; i < this.numChannels; i++) { this.channels.push({isPlaying: false, element: this.prepareElement(this.buildAudioElement())}); } } }, buildAudioElement: function () { var TYPES = {\"ogg\": \"audio/ogg\", \"mp3\": \"audio/mpeg\"} var audio = document.createElement(\"audio\"); for (var i = 0, format; format = this.formats[i]; i++) { var source = document.createElement(\"source\"); source.src = this.src + \".\" + format; source.type = TYPES[format]; audio.appendChild(source); } return audio; }, prepareElement: function (el) { if (typeof el.addEventListener == 'undefined') return el; var self = this; el.addEventListener('ended', function (e) { self.audioEnded(el); }, false); return el; }, audioEnded: function (target) { for (var i = 0, channel; channel = this.channels[i]; i++) { if (channel.element === target) { channel.isPlaying = false; } } }, play: function () { if (!this.supportsAudio) return; for (var i = 0, channel; channel = this.channels[i]; i++) { if (!channel.isPlaying) { channel.isPlaying = true; if (typeof channel.element.play == 'function') channel.element.play(); return; } } } }); var Ships = { Standard: { points: [[-10, 10], [0, -15], [10, 10]], thrusters: [{s: {w: 20, h: 7}, p: {x: 0, y: 14}, a: 0}], cannons: [{p: {x: 0, y: -15}, a: 0}] } }; var PLAYERIDS = 0; var Player = new Class({ initialize: function (game) { this.id = PLAYERIDS++; this.game = game; this.tween = false; this.isBound = true; this.pos = new Vector(1630, 217);//飞机初始化位置 this.vel = new Vector(0, 0); this.acc = new Vector(0, 0); this.dir = new Vector(0, 1); this.currentRotation = 0; this.isBroken = false; this.lineOffsets = []; this.deadTime = 0; this.friction = 0.95; this.terminalVelocity = 2000; this.lastPos = new Vector(0, 0); }, setShip: function (ship) { this.ship = ship; this.verts = []; for (var i = 0, vert; vert = this.ship.points[i]; i++) this.verts.push(new Vector(vert[0], vert[1])); this.verts.push(this.verts[0]); this.thrusters = []; this.cannons = []; this.addThrusters(this.ship.thrusters); this.addCannons(this.ship.cannons); this.size = this.getSizeFromVertsAndObjects(); this.bounds = this.calculateBounds(); if (this.sheet) { this.sheet.destroy(); } this.sheet = new Sheet(new Rect(100, 100, this.bounds.x, this.bounds.y)); this.forceRedraw = true; }, setCannons: function (cannonClass) { var newCannons = []; for (var i = 0, cannon; cannon = this.cannons[i]; i++) { var newCannon = new cannonClass(this, this.game, cannon.pos.x, cannon.pos.y, cannon.angle); newCannons.push(newCannon); cannon.destroy(); } this.cannons = newCannons; }, addThrusters: function (thrusters) { for (var i = 0, data; data = thrusters[i]; i++) { var thruster = new Thruster(data); this.thrusters.push(thruster); } }, addCannons: function (cannons) { for (var i = 0, data; data = cannons[i]; i++) { var weaponClass = WeaponMap[data.m] || WeaponMap.cannon; var cannon = new weaponClass.cannonClass(this, this.game, data.p.x, data.p.y, data.a); cannon.player = this; cannon.game = this.game; this.cannons.push(cannon); } }, update: function (tdelta) { if (this.isBroken) { if (!this.lineOffsets.length) { for (var i = 0; i < (this.verts.length - 1); i++) this.lineOffsets[i] = { pos: new Vector(0, 0), dir: (new Vector(1, 1)).setAngle(Math.PI * 2 * Math.random()) }; } for (var i = 0; i < this.lineOffsets.length; i++) { this.lineOffsets[i].pos.add(this.lineOffsets[i].dir.cp().setLength(50).mul(tdelta)); } this.sheet.clear(); this.sheet.setAngle(this.dir.angle()); this.sheet.setPosition(this.pos); this.sheet.drawBrokenPlayer(this.verts, this.lineOffsets); if (now() - this.deadTime > 1000.0) { this.isBroken = false; this.lineOffsets = []; this.randomPos(); } return; } if (!this.tween) { if (this.game.isKeyPressed('left') || this.game.isKeyPressed('right')) { if (this.game.isKeyPressed('left')) this.rotateLeft(tdelta); if (this.game.isKeyPressed('right')) this.rotateRight(tdelta); } else { this.stopRotate(); } if (this.game.isKeyPressed('up')) this.activateThrusters(); else this.stopThrusters(); } if (this.game.isKeyPressed(' ')) { this.isShooting = true; if (!this.isBroken) this.shootPressed(); } else if (this.isShooting) { this.isShooting = false; this.shootReleased(); } if (this.currentRotation) this.dir.setAngle(this.dir.angle() + this.currentRotation * tdelta); var frictionedAcc = this.acc.mulNew(tdelta).sub(this.vel.mulNew(tdelta * this.friction)); this.vel.add(frictionedAcc); if (this.vel.len() > this.terminalVelocity) this.vel.setLength(this.terminalVelocity); var posDelta = this.vel.mulNew(tdelta); this.pos.add(posDelta); if (this.game.statisticsManager) { this.game.statisticsManager.increaseDistanceWithPixels(posDelta.len()); } var showFlames = !this.acc.is({x: 0, y: 0}); for (var i = 0, thruster; thruster = this.thrusters[i]; i++) { thruster.setIsShown(showFlames); thruster.update(tdelta); } if (this.isBound) this.checkBounds(); if (!this.lastPos.is(this.pos) || this.currentRotation || this.forceRedraw) { this.forceRedraw = false; this.sheet.clear(); this.sheet.setAngle(this.dir.angle() + Math.PI / 2); this.sheet.setPosition(this.pos); if (showFlames) { for (var i = 0, thruster; thruster = this.thrusters[i]; i++) thruster.drawTo(this.sheet); } this.sheet.drawPlayer(this.verts); this.lastPos = this.pos.cp(); } for (var i = 0, cannon; cannon = this.cannons[i]; i++) { cannon.update(tdelta); } }, randomPos: function () { var w = this.game.windowSize.width; var h = this.game.windowSize.height; this.pos = new Vector(random(0, w), random(0, h)); }, checkBounds: function () { if (this.tween) return; var w = this.game.windowSize.width; var h = this.game.windowSize.height; var rightBound = this.pos.x + this.sheet.rect.size.width / 2; var bottomBound = this.pos.y + this.sheet.rect.size.height / 2; if (rightBound > w) { window.scrollTo(this.game.scrollPos.x + 50, this.game.scrollPos.y); this.pos.x = 0; } else if (this.pos.x < 0) { window.scrollTo(this.game.scrollPos.x - 50, this.game.scrollPos.y); this.pos.x = w - this.sheet.rect.size.width / 2; } if (bottomBound > h) { window.scrollTo(this.game.scrollPos.x, this.game.scrollPos.y + h * 0.75); this.pos.y = 0; } else if (this.pos.y < 0) { window.scrollTo(this.game.scrollPos.x, this.game.scrollPos.y - h * 0.75); this.pos.y = h - this.sheet.rect.size.height / 2; } }, inRect: function (rect) { var ret = false; for (var i = 0, vert; vert = this.verts[i]; i++) { if (rect.hasPoint(new Vector(vert.x + this.pos.x, vert.y + this.pos.y))) ret = true; } return ret; }, hit: function (by) { if (this.isBroken) return; this.isBroken = true; this.deadTime = now(); }, activateThrusters: function () { if (this.game.statisticsManager) { this.game.statisticsManager.usedThrusters(); } this.acc = (new Vector(500, 0)).setAngle(this.dir.angle()); }, stopThrusters: function () { this.acc = new Vector(0, 0); }, rotateLeft: function (tdelta) { this.currentRotation = Math.max(-Math.PI * 2, this.currentRotation - Math.PI * 10 * tdelta); }, rotateRight: function (tdelta) { this.currentRotation = Math.min(Math.PI * 2, this.currentRotation + Math.PI * 10 * tdelta); }, stopRotate: function () { this.currentRotation = 0; }, getSizeFromVertsAndObjects: function () { var largestDistance = 0; for (var i = 0, vert; vert = this.verts[i]; i++) largestDistance = Math.max(largestDistance, (new Vector(vert)).len()); for (var i = 0, obj; obj = this.thrusters[i]; i++) { var p1 = (new Vector(obj.pos.x - obj.size.width / 2, obj.pos.y - obj.size.height / 2)).rotate(obj.angle); var p2 = (new Vector(obj.pos.x + obj.size.width / 2, obj.pos.y - obj.size.height / 2)).rotate(obj.angle); var p3 = (new Vector(obj.pos.x - obj.size.width / 2, obj.pos.y + obj.size.height / 2)).rotate(obj.angle); var p4 = (new Vector(obj.pos.x + obj.size.width / 2, obj.pos.y + obj.size.height / 2)).rotate(obj.angle); largestDistance = Math.max(largestDistance, p1.len(), p2.len(), p3.len(), p4.len()); } return {width: largestDistance * 2, height: largestDistance * 2}; }, calculateBounds: function () { return { x: Math.max(this.size.width, this.size.height) * 1, y: Math.max(this.size.height, this.size.width) * 1 }; }, shootPressed: function () { for (var i = 0, cannon; cannon = this.cannons[i]; i++) cannon.shootPressed(); }, shootReleased: function () { for (var i = 0, cannon; cannon = this.cannons[i]; i++) cannon.shootReleased(); }, flyTo: function (x, y, callback) { this.tween = { start: {pos: this.pos.cp(), dir: this.dir.cp()}, to: new Vector(x, y), callback: callback || function () { } }; this.tween.time = this.getTimeforTween(); }, destroy: function () { this.sheet.destroy(); } }); var Thruster = new Class({ initialize: function (data, ship) { this.pos = new Vector(data.p); this.size = {width: data.s.w, height: data.s.h}; this.angle = data.a || 0; this.ship = ship; this.isShown = false; this.flameY = 1; this.fx = new Fx(); this.fx.addListener(this); this.flames = {r: [], y: []}; this.lastFrameUpdate = 0; this.generateFlames(); }, update: function (tdelta) { this.fx.update(); if (now() - this.lastFrameUpdate > 1000 / 60) this.generateFlames(); }, set: function (key, value) { switch (key) { case'flames': this.flameY = value; break; } }, setIsShown: function (isShown) { if (!this.isShown && isShown) { this.flameY = 0.0; this.generateFlames(); this.fx.add('flames', {start: this.flameY, end: 1, duration: 250, transition: Tween.Quintic}); } this.isShown = isShown; }, drawTo: function (sheet) { sheet.drawFlames(this.flames, this.angle); }, generateFlames: function () { var redWidth = this.size.width, redIncrease = this.size.width * 0.05, yellowWidth = this.size.width * 0.8, yellowIncrease = yellowWidth * 0.1, halfRed = redWidth / 2, halfYellow = yellowWidth / 2, offsetY = -this.size.height / 2, metaY = 0; var px = this.pos.x; var py = this.pos.y - this.size.height / 2; function vec(x, y) { return new Vector(x, y); } this.flames.r = [vec(-halfRed + px, py)]; this.flames.y = [vec(-halfYellow + px, py)]; this.flames.self = this; for (var x = 0; x < redWidth; x += redIncrease) this.flames.r.push(vec(x - halfRed + px, this.flameY * random(this.size.height * 0.7, this.size.height) + py)); this.flames.r.push(vec(halfRed + px, py)); for (var x = 0; x < yellowWidth; x += yellowIncrease) this.flames.y.push(vec(x - halfYellow + px, this.flameY * random(this.size.height * 0.4, this.size.height * 0.7) + py)); this.flames.y.push(vec(halfYellow + px, py)); this.lastFrameUpdate = now(); var pos = vec(px, py); for (var i = 0, p; p = this.flames.r[i]; i++) p.sub(pos).rotate(this.angle).add(pos); for (var i = 0, p; p = this.flames.y[i]; i++) p.sub(pos).rotate(this.angle).add(pos); } }); var BombManager = new Class({ initialize: function (game) { this.game = game; this.bombShowDelay = 30; this.nextBomb = this.bombShowDelay; }, update: function (tdelta) { if (this.game.isKeyPressed('F') && this.isReady()) { this.blow(); } if (this.nextBomb === -1 || !this.game.sessionManager.isPlaying) { return; } this.nextBomb -= tdelta; if (this.nextBomb < 0) { this.game.menuManager.showBombMenu(); this.nextBomb = -1; this.game.ui.showMessage(\"BOMB IS READY(lower right corner or F)\"); } }, blow: function () { var message = this.game.ui.showMessage(\"3...\", 5000); delay(1000, function () { message.innerHTML = \"2...\"; }, this); delay(2000, function () { message.innerHTML = \"1...\"; }, this); delay(3000, function () { message.innerHTML = \"boom\"; }, this); delay(3000, this.blowStuffUp, this); this.nextBomb = this.bombShowDelay; }, blowStuffUp: function () { this.game.bulletManager.updateEnemyIndex(); var index = this.game.bulletManager.enemyIndex; for (var i = 0, el; (el = index[i]) && i < 10; i++) { var rect = getRect(el); var center = new Vector(rect.left + rect.width / 2, rect.top + rect.height / 2); this.game.explosionManager.addExplosion(center, el, MegaParticleExplosion); el.parentNode.removeChild(el); } this.game.menuManager.hideBombMenu(); this.nextBomb = this.bombShowDelay; }, isReady: function () { return this.nextBomb === -1; } }); var ELEMENTSTHATARENOTTOBEINCLUDED = ['BR', 'SCRIPT', 'STYLE', 'TITLE', 'META', 'HEAD', 'OPTION', 'OPTGROUP', 'LINK']; var ELEMENTSIZETHRESHOLD = 5; var BulletManager = new Class({ initialize: function (game) { this.game = game; this.lastBlink = 0; this.blinkActive = false; this.enemyIndex = []; this.updateDelay = 2.5; this.nextUpdate = this.updateDelay; }, update: function (tdelta) { if (this.game.isKeyPressed('B')) { this.blink(); } else if (this.blinkActive) { this.endBlink(); } this.nextUpdate -= tdelta; if (this.nextUpdate < 0) { this.updateEnemyIndex(); } }, blink: function () { if (now() - this.lastBlink > 250) { for (var i = 0, el; el = this.enemyIndex[i]; i++) { if (!this.blinkActive) el.style.outline = '1px solid red'; else el.style.outline = el.KICKASSOLDBORDER; } this.blinkActive = !this.blinkActive; this.lastBlink = now(); if (!this.blinkActive) { this.updateEnemyIndex(); } } }, endBlink: function () { for (var i = 0, el; el = this.enemyIndex[i]; i++) el.style.outline = el.KICKASSOLDBORDER; this.lastBlink = 0; this.blinkActive = false; }, updateEnemyIndex: function () { var all = document.getElementsByTagName('*'); this.enemyIndex = []; for (var i = 0, el; el = all[i]; i++) { if (this.isDestroyable(el)) { this.enemyIndex.push(el); el.KICKASSOLDBORDER = el.style.outline || (document.defaultView.getComputedStyle(el, null).outline); } } this.nextUpdate = this.updateDelay; }, isDestroyable: function (element, ignoreSize) { if (this.shouldIgnoreElement(element, ignoreSize)) return false; for (var i = 0, child; child = element.childNodes[i]; i++) { if (child.nodeType === 1 && ELEMENTSTHATARENOTTOBEINCLUDED.indexOf(child.tagName) === -1 && (child.offsetWidth >= ELEMENTSIZETHRESHOLD && child.offsetHeight >= ELEMENTSIZETHRESHOLD) && document.defaultView.getComputedStyle(child, null).visibility !== 'hidden') { return false; } } return true; }, isDestroyableFromCollision: function (element) { return this.isDestroyable(element, true); }, shouldIgnoreElement: function (element, ignoreSize) { if (element.nodeType !== 1) return true; if (element == document.documentElement || element == document.body) return true; if (ELEMENTSTHATARENOTTOBEINCLUDED.indexOf(element.tagName) !== -1) return true; if (element.style.visibility == 'hidden' || element.style.display == 'none') return true; if (typeof element.className == \"string\" && element.className.indexOf('KICKASSELEMENT') != -1) return true; if (!ignoreSize) { if (element.offsetWidth < ELEMENTSIZETHRESHOLD || element.offsetHeight < ELEMENTSIZETHRESHOLD) return true; } var rect; if (element.offsetLeft < 0 || element.offsetTop < 0) { rect = getRect(element); if (rect.left + rect.width < 0 || rect.top + rect.height < 0) return true; } if (!rect) rect = getRect(element); if (rect.top >= this.game.scrollSize.y) return true; return false; }, destroy: function () { for (var key in this.bullets) if (this.bullets.hasOwnProperty(key)) for (var i = 0, bullet; bullet = this.bullets[key][i]; i++) bullet.destroy(); this.bullets = {}; } }); var SessionManager = new Class({ initialize: function (game) { this.game = game; this.isPlaying = false; }, update: function (tdelta) { if (this.isPlaying && this.game.bulletManager.enemyIndex.length == 0) { this.weHaveWon(); } }, weHaveWon: function () { this.isPlaying = false; this.game.ui.showMessage(\"You're done!\"); if (this.game.isCampaign()) { this.game.menuManager.showMenu(); this.game.menuManager.navigateTo('highscores'); } else { this.game.menuManager.showMenu(); } this.game.menuManager.sendMessageToMenu(\"gameFinished:!\"); } }); var ExplosionManager = new Class({ initialize: function (game) { this.game = game; this.explosions = []; }, update: function (tdelta) { var time = now(); for (var i = 0, explosion; explosion = this.explosions[i]; i++) { if (time - explosion.bornAt > (explosion.ttl || 500)) { explosion.destroy(); this.explosions.splice(i, 1); continue; } explosion.update(tdelta); } }, addExplosion: function (pos, forElement, explosionClass) { explosionClass = explosionClass || ParticleExplosion; var explosion = new explosionClass(pos, forElement); explosion.game = this.game; explosion.checkBounds(); this.explosions.push(explosion); if (this.game.audioManager.explosion) { this.game.audioManager.explosion.play(); } }, destroy: function () { for (var i = 0, explosion; explosion = this.explosions[i]; i++) explosion.destroy(); this.explosions = []; } }); var Cannon = new Class({ initialize: function (player, game, x, y, angle) { this.player = player; this.game = game; this.pos = new Vector(x, y); this.angle = angle || 0; }, shootPressed: function () { }, shootReleased: function () { }, checkCollisions: function () { }, getExplosionClass: function () { return ParticleExplosion; }, update: function (tdelta) { this.game.hideAll(); this.checkCollisions(tdelta); this.game.showAll(); }, checkCollision: function (bullet) { var hit = bullet.checkCollision(); if (!hit) return false; this.game.explosionManager.addExplosion(bullet.pos, hit, this.getExplosionClass()); this.game.menuManager.addPoints(Math.min(hit.getElementsByTagName('*').length + 1, 100), bullet.pos); if (!hit.isShot) { hit.parentNode.removeChild(hit); } if (this.game.statisticsManager) { this.game.statisticsManager.addElementsDestroyed(); } return true; }, createBullet: function (bulletClass) { var pos = this.getABulletPos(); var dir = this.getABulletDir(); var bullet = new bulletClass(pos, dir); bullet.game = this.game; bullet.manager = this; bullet.initCanvas(); bullet.vel.add(bullet.vel.cp().setLength(this.player.vel.len())); return bullet; }, getABulletPos: function () { return this.player.pos.cp().add(this.pos.cp().rotate(this.player.dir.angle() + Math.PI / 2)); }, getABulletDir: function () { return this.player.dir.cp().rotate(this.angle); }, destroy: function () { } }); var LaserCannon = new Class({ Extends: Cannon, initialize: function (player, game, x, y, angle) { Cannon.prototype.initialize.apply(this, arguments); this.lasers = []; }, getExplosionClass: function () { return SplitExplosion; }, update: function (tdelta) { if (!this.lasers.length) return; this.removeOld(); Cannon.prototype.update.call(this, tdelta); }, checkCollisions: function (tdelta) { for (var i = 0, laser; laser = this.lasers[i]; i++) { laser.update(tdelta); if (this.checkCollision(laser)) { } } }, removeOld: function () { for (var i = 0, laser; laser = this.lasers[i]; i++) { if (laser.outOfBounds) { laser.destroy(); this.lasers.splice(i, 1); } } }, shootPressed: function () { if (this.lasers.length > 5) { return; } if (now() - this.lastFired < 500) { return; } this.lastFired = now(); if (this.game.statisticsManager) { this.game.statisticsManager.addShotFired(); } this.lasers.push(this.createBullet(LaserBullet)); }, destroy: function () { if (this.lasers.length) { for (var i = 0, laser; laser = this.lasers[i]; i++) { laser.destroy(); } this.lasers = []; } } }); var BallCannon = new Class({ Extends: Cannon, initialize: function () { Cannon.prototype.initialize.apply(this, arguments); this.lastFired = 0; this.bullets = []; }, getExplosionClass: function () { return ParticleExplosion; }, update: function (tdelta) { if (!this.bullets.length) { return; } this.removeOld(); Cannon.prototype.update.call(this, tdelta); }, removeOld: function () { var time = now(); for (var i = 0, bullet; bullet = this.bullets[i]; i++) { if (time - bullet.bornAt > 2000) { bullet.destroy(); this.bullets.splice(i, 1); } } }, checkCollisions: function (tdelta) { for (var i = 0, bullet; bullet = this.bullets[i]; i++) { bullet.update(tdelta); if (this.checkCollision(bullet)) { bullet.destroy(); this.bullets.splice(i, 1); } } }, shootPressed: function () { if (now() - this.lastFired < 200) { return; } this.lastFired = now(); this.addBullet(); if (this.game.statisticsManager) { this.game.statisticsManager.addShotFired(); } }, addBullet: function () { if (this.bullets.length > 7) { this.bullets[0].destroy(); this.bullets.shift(); } var bullet = this.createBullet(Bullet); this.bullets.push(bullet); }, destroy: function () { for (var i = 0, bullet; bullet = this.bullets[i]; i++) { bullet.destroy(); } this.bullets = []; } }); var Bullet = new Class({ initialize: function (pos, dir) { this.pos = pos.cp(); this.dir = dir; this.vel = new Vector(500, 500); this.bornAt = now(); }, initCanvas: function () { this.sheet = new Sheet(new Rect(this.pos.x, this.pos.y, 5, 5)); this.sheet.drawBullet(); }, draw: function () { this.sheet.setPosition(this.pos); }, update: function (tdelta) { this.pos.add(this.vel.setAngle(this.dir.angle()).mulNew(tdelta)); this.checkBounds(); this.draw(); }, checkCollision: function () { var element = document.elementFromPoint(this.pos.x, this.pos.y); if (element && element.nodeType == 3) element = element.parentNode; var didFind = element && this.game.bulletManager.isDestroyableFromCollision(element) ? element : false; return didFind; }, checkBounds: function () { var w = this.game.windowSize.width; var h = this.game.windowSize.height; var rightBound = this.pos.x + this.sheet.rect.size.width / 2; var bottomBound = this.pos.y + this.sheet.rect.size.height / 2; if (rightBound > w) this.pos.x = 0; else if (this.pos.x < 0) this.pos.x = w - this.sheet.rect.size.width / 2; if (bottomBound > h) this.pos.y = 0; else if (this.pos.y < 0) this.pos.y = h - this.sheet.rect.size.height / 2; }, destroy: function () { this.sheet.destroy(); } }); var LaserBullet = new Class({ Extends: Bullet, initialize: function () { Bullet.prototype.initialize.apply(this, arguments); this.vel = new Vector(750, 750); this.lastDrawPos = this.pos.cp(); }, initCanvas: function () { var s = Math.max(GameGlobals.laserImage.width, GameGlobals.laserImage.height); this.sheet = new Sheet(new Rect(0, 0, s, s)); }, update: function (tdelta) { Bullet.prototype.update.apply(this, arguments); }, draw: function () { this.sheet.drawLaser(this.pos, this.dir); this.lastDrawPos = this.pos.cp(); }, checkBounds: function () { var w = this.game.windowSize.width; var h = this.game.windowSize.height; var rightBound = this.pos.x + this.sheet.rect.size.width / 2; var bottomBound = this.pos.y + this.sheet.rect.size.height / 2; if (rightBound > w || this.pos.x < 0) this.outOfBounds = true; if (bottomBound > h || this.pos.y < 0) this.outOfBounds = true; }, destroy: function () { this.sheet.destroy(); } }); GameGlobals.laserImage = document.createElement('img'); GameGlobals.laserImage.src = GameGlobals.path('css/gfx/kickass/laser.png'); var Explosion = new Class({ initialize: function (pos, element) { this.bornAt = now(); this.pos = pos.cp(); }, update: function (tdelta) { }, checkBounds: function () { }, destroy: function () { } }); var ParticleExplosion = new Class({ Extends: Explosion, initialize: function (pos, element) { Explosion.prototype.initialize.apply(this, arguments); this.particleVel = new Vector(150, 0); this.particles = []; this.generateParticles(); this.sheet = new Sheet(new Rect(pos.x, pos.y, 250, 250)); }, update: function (tdelta) { for (var i = 0, particle; particle = this.particles[i]; i++) particle.pos.add(particle.vel.mulNew(tdelta).mul(random(0.5, 1.0)).setAngle(particle.dir.angle())); this.sheet.clear(); this.sheet.drawExplosion(this.particles); }, generateParticles: function () { for (var i = 0, j = !GameGlobals.hasCanvas ? 10 : 40; i < j; i++) { this.particles.push({ dir: (new Vector(random(0, 20) - 10, random(0, 20) - 10)).normalize(), vel: this.particleVel.cp(), pos: new Vector(0, 0), color: ['yellow', 'red'][random(0, 1)] }); } }, checkBounds: function () { var right = this.sheet.rect.getRight(); var bottom = this.sheet.rect.getBottom(); var w = this.game.windowSize.width; var h = this.game.windowSize.height; if (right > w) this.pos.x -= right - w; if (bottom > h) this.pos.y -= bottom - h; this.sheet.setPosition(this.pos); }, destroy: function () { this.sheet.destroy(); } }); var MegaParticleExplosion = new Class({ Extends: ParticleExplosion, initialize: function (pos, element) { Explosion.prototype.initialize.apply(this, arguments); this.particleVel = new Vector(200, 0); this.particles = []; this.generateParticles(); this.sheet = new Sheet(new Rect(pos.x, pos.y, 500, 500)); this.ttl = 2000; this.generationDelay = 0.6; this.generationTimes = 2; this.nextGenerate = this.generationDelay; }, update: function (tdelta) { this.nextGenerate -= tdelta; if (this.nextGenerate 0) { this.nextGenerate = this.generationDelay; this.generateParticles(); this.generationTimes--; } ParticleExplosion.prototype.update.call(this, tdelta); } }); var SplitExplosion = new Class({ Extends: Explosion, initialize: function (pos, element) { if (!element) return; Explosion.prototype.initialize.apply(this, arguments); this.element = element; this.fx = new Fx(); this.fx.addListener(this); this.start(); }, update: function (tdelta) { if (!this.element) return; this.fx.update(); }, set: function (key, value) { if (key == 'opacity') { } }, start: function () { var pieces = this.createClones(); var left = pieces[0], right = pieces[1]; var lT = 'rotate(-' + random(30, 50) + 'deg) translate(-100px, 40px)'; var rT = 'rotate(' + random(30, 50) + 'deg) translate(100px, 40px)'; setStyles(left, {'transform': lT}); setStyles(right, {'transform': rT}); this.left = left; this.right = right; this.fx.add('opacity', {start: 1, end: 0.5, duration: 500}); }, createClones: function () { var coords = getRect(this.element); var leftContainer = this.createContainer(coords); var rightContainer = this.createContainer(coords); var left = cloneElement(this.element); var right = cloneElement(this.element); addClass(left, 'KICKASSELEMENT'); addClass(right, 'KICKASSELEMENT'); var styles = {margin: 0, overflow: 'hidden'}; setStyles(left, styles); setStyles(right, styles); leftContainer.appendChild(left); rightContainer.appendChild(right); rightContainer.style.left = coords.left + coords.width / 2 + 'px'; rightContainer.scrollLeft += coords.width / 2; this.element.style.opacity = 0; this.element.style.visibility = 'hidden'; this.element.style.display = 'none'; return each([leftContainer, rightContainer], function (el) { el.style.transition = 'transform 500ms ease-in'; }); }, createContainer: function (coords) { var ret = document.createElement('div'); setStyles(ret, { position: 'absolute', left: coords.left, top: coords.top, width: coords.width * 0.5, height: coords.height, overflow: 'hidden' }); getAppContainerElement().appendChild(ret); return ret; }, destroy: function () { try { this.left.parentNode.removeChild(this.left); this.right.parentNode.removeChild(this.right); this.element.parentNode.removeChild(this.element); } catch (e) { } } }); var Weapons = { 1: {name: 'Cannon', id: 'cannon', cannonClass: BallCannon}, 2: {name: 'Laser', id: 'laser', cannonClass: LaserCannon} }; var WeaponMap = {'cannon': Weapons[1], 'laser': Weapons[2]}; var SheetCanvas = new Class({ initialize: function (rect) { this.canvas = document.createElement('canvas'); this.canvas.className = 'KICKASSELEMENT'; with (this.canvas.style) { position = 'absolute'; zIndex = '1000000'; } GameGlobals.kickass.registerElement(this.canvas); if (this.canvas.getContext) this.ctx = this.canvas.getContext('2d'); this.rect = rect; this.angle = 0; this.updateCanvas(); getAppContainerElement().appendChild(this.canvas); }, tracePoly: function (verts) { if (!verts[0]) return; this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); this.ctx.rotate(this.angle); this.ctx.beginPath(); this.ctx.moveTo(verts[0].x, verts[0].y); for (var i = 0; i < verts.length; i++) { this.ctx.lineTo(verts[i].x, verts[i].y); } this.ctx.restore(); }, setAngle: function (angle) { this.angle = angle; }, updateCanvas: function () { if (this.canvas.width != this.rect.size.width) this.canvas.width = this.rect.size.width; if (this.canvas.height != this.rect.size.height) this.canvas.height = this.rect.size.height; this.canvas.style.left = GameGlobals.kickass.scrollPos.x + (this.rect.pos.x - this.rect.size.width / 2) + 'px'; this.canvas.style.top = GameGlobals.kickass.scrollPos.y + (this.rect.pos.y - this.rect.size.height / 2) + 'px'; }, drawLine: function (xFrom, yFrom, xTo, yTo) { this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); this.ctx.beginPath(); this.ctx.moveTo(xFrom, yFrom); this.ctx.lineTo(xTo, yTo); this.ctx.closePath(); this.ctx.stroke(); this.ctx.restore(); }, drawCircle: function (radius, pos) { pos = pos || {x: 0, y: 0}; this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); if (pos) this.ctx.translate(pos.x, pos.y); this.ctx.beginPath(); this.ctx.arc(0, 0, radius, 0, Math.PI * 2, true); this.ctx.fill(); this.ctx.closePath(); this.ctx.restore(); }, drawRect: function (x, y, w, h) { this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); this.ctx.translate(x, y); this.ctx.fillRect(x, y, w, h); this.ctx.restore(); this.ctx.fill(); }, drawImageFull: function (image) { this.ctx.drawImage(image, 0, 0, this.rect.size.width, this.rect.size.height); }, drawImage: function (image, x, y) { this.ctx.save(); this.ctx.translate(this.rect.size.width / 2 + x, this.rect.size.height / 2 + y); this.ctx.rotate(this.angle); this.ctx.drawImage(image, 0, -11); this.ctx.restore(); }, setFillColor: function (color) { this.ctx.fillStyle = color; }, setStrokeColor: function (color) { this.ctx.strokeStyle = color; }, setLineWidth: function (width) { this.ctx.lineWidth = width; }, fillPath: function () { this.ctx.fill(); }, strokePath: function () { this.ctx.stroke(); }, clear: function () { this.ctx.clearRect(0, 0, this.rect.size.width, this.rect.size.height); }, destroy: function () { GameGlobals.kickass.unregisterElement(this.canvas); this.canvas.parentNode.removeChild(this.canvas); } }); var Sheet = new Class({ initialize: function (rect) { this.rect = rect; this.drawer = new SheetCanvas(rect); }, clear: function () { this.drawer.clear(); }, setPosition: function (pos) { this.rect.pos = pos.cp(); this.drawer.rect = this.rect; this.drawer.updateCanvas(); }, setAngle: function (angle) { this.drawer.setAngle(angle); }, drawPlayer: function (verts) { this.drawer.setFillColor('white'); this.drawer.setStrokeColor('black'); this.drawer.setLineWidth(1.5); this.drawer.tracePoly(verts); this.drawer.fillPath(); this.drawer.tracePoly(verts); this.drawer.strokePath(); }, drawBrokenPlayer: function (verts, lineOffsets) { this.drawer.setStrokeColor('black'); this.drawer.setLineWidth(1.5); for (var i = 1, vert, lastVert = verts[0]; vert = verts[i]; i++, lastVert = vert) { var o = lineOffsets[i - 1]; this.drawer.drawLine(lastVert.x + o.pos.x, lastVert.x + o.pos.y, vert.x + o.pos.x, vert.y + o.pos.y); } }, drawFlames: function (flames, angle) { this.drawer.setLineWidth(1.5); this.drawer.setFillColor('red'); this.drawer.tracePoly(flames.r); this.drawer.fillPath(); this.drawer.setFillColor('yellow'); this.drawer.tracePoly(flames.y); this.drawer.fillPath(); }, drawBullet: function () { this.drawer.setFillColor(GameGlobals.bulletColor); this.drawer.drawCircle(2.5); }, drawExplosion: function (particles) { for (var i = 0, particle; particle = particles[i]; i++) { this.drawer.setFillColor(particle.color); this.drawer.drawRect(particle.pos.x, particle.pos.y, 3, 3); } }, drawFace: function (face) { this.drawer.drawImageFull(face); }, drawLaser: function (pos, dir) { this.clear(); this.setPosition(pos); this.drawer.setAngle(dir.angle()); this.drawer.drawImage(GameGlobals.laserImage, 0, 0); }, transformToSheetCoordinates: function (vec) { var ret = vec.cp().sub(new Vector(this.rect.size.width / 2, this.rect.size.height / 2)); return ret; }, destroy: function () { this.drawer.destroy(); } }); var namespace = getGlobalNamespace(); var initKickAss = function () { // If an instance of KickAss is already present, we add a player if (!namespace.KICKASSGAME) { if (namespace.KICKASS_SITE_KEY) { var mySite = new MySite(namespace.KICKASS_SITE_KEY); mySite.load(function (ok) { namespace.KICKASSGAME = GameGlobals.kickass = new KickAss({ mySite: ok ? mySite : false }); namespace.KICKASSGAME.begin(); }); } else { namespace.KICKASSGAME = GameGlobals.kickass = new KickAss(); namespace.KICKASSGAME.begin(); } } else { namespace.KICKASSGAME.addPlayer(); } }; if (namespace.LAZYLOAD_KICKASS) { window.startBrowserBlaster = initKickAss; } else { initKickAss(); } function getAppContainerElement() { if (namespace.KICKASS_CONTAINER_ELEMENT) { return document.getElementById(namespace.KICKASS_CONTAINER_ELEMENT); } else { return document.body; } } })(typeof exports != 'undefined' ? exports : window);"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/txmap.js","permalink":"https://en.blog.sinzmise.top/js/txmap.js","excerpt":"","text":"//get请求 $.ajax({ type: 'get', url: 'https://apis.map.qq.com/ws/location/v1/ip', data: { key: 'RIPBZ-MLQ64-A6WUR-KL2YV-O4KY5-DZFTC', output: 'jsonp', }, dataType: 'jsonp', success: function (res) { ipLocation = res; } }) function getDistance(e1, n1, e2, n2) { const R = 6371 const { sin, cos, asin, PI, hypot } = Math let getPoint = (e, n) => { e *= PI / 180 n *= PI / 180 return { x: cos(n) * cos(e), y: cos(n) * sin(e), z: sin(n) } } let a = getPoint(e1, n1) let b = getPoint(e2, n2) let c = hypot(a.x - b.x, a.y - b.y, a.z - b.z) let r = asin(c / 2) * 2 * R return Math.round(r); } function showWelcome() { let dist = getDistance(114.21416, 22.576264, ipLocation.result.location.lng, ipLocation.result.location.lat); //这里记得换成自己的经纬度 let pos = ipLocation.result.ad_info.nation; let ip; let posdesc; //根据国家、省份、城市信息自定义欢迎语 switch (ipLocation.result.ad_info.nation) { case \"日本\": posdesc = \"よろしく,一起去看樱花吗\"; break; case \"美国\": posdesc = \"Let us live in peace!\"; break; case \"英国\": posdesc = \"想同你一起夜乘伦敦眼\"; break; case \"俄罗斯\": posdesc = \"干了这瓶伏特加!\"; break; case \"法国\": posdesc = \"C'est La Vie\"; break; case \"德国\": posdesc = \"Die Zeit verging im Fluge.\"; break; case \"澳大利亚\": posdesc = \"一起去大堡礁吧!\"; break; case \"加拿大\": posdesc = \"拾起一片枫叶赠予你\"; break; case \"中国\": pos = ipLocation.result.ad_info.province + \" \" + ipLocation.result.ad_info.city + \" \" + ipLocation.result.ad_info.district; ip = ipLocation.result.ip; switch (ipLocation.result.ad_info.province) { case \"北京市\": posdesc = \"北——京——欢迎你~~~\"; break; case \"天津市\": posdesc = \"讲段相声吧\"; break; case \"河北省\": posdesc = \"山势巍巍成壁垒,天下雄关铁马金戈由此向,无限江山\"; break; case \"山西省\": posdesc = \"展开坐具长三尺,已占山河五百余\"; break; case \"内蒙古自治区\": posdesc = \"天苍苍,野茫茫,风吹草低见牛羊\"; break; case \"辽宁省\": posdesc = \"我想吃烤鸡架!\"; break; case \"吉林省\": posdesc = \"状元阁就是东北烧烤之王\"; break; case \"黑龙江省\": posdesc = \"很喜欢哈尔滨大剧院\"; break; case \"上海市\": posdesc = \"众所周知,中国只有两个城市\"; break; case \"江苏省\": switch (ipLocation.result.ad_info.city) { case \"南京市\": posdesc = \"这是我挺想去的城市啦\"; break; case \"苏州市\": posdesc = \"上有天堂,下有苏杭\"; break; default: posdesc = \"散装是必须要散装的\"; break; } break; case \"浙江省\": posdesc = \"东风渐绿西湖柳,雁已还人未南归\"; break; case \"河南省\": switch (ipLocation.result.ad_info.city) { case \"郑州市\": posdesc = \"豫州之域,天地之中\"; break; case \"南阳市\": posdesc = \"臣本布衣,躬耕于南阳此南阳非彼南阳!\"; break; case \"驻马店市\": posdesc = \"峰峰有奇石,石石挟仙气嵖岈山的花很美哦!\"; break; case \"开封市\": posdesc = \"刚正不阿包青天\"; break; case \"洛阳市\": posdesc = \"洛阳牡丹甲天下\"; break; default: posdesc = \"可否带我品尝河南烩面啦?\"; break; } break; case \"安徽省\": posdesc = \"蚌埠住了,芜湖起飞\"; break; case \"福建省\": posdesc = \"井邑白云间,岩城远带山\"; break; case \"江西省\": posdesc = \"落霞与孤鹜齐飞,秋水共长天一色\"; break; case \"山东省\": posdesc = \"遥望齐州九点烟,一泓海水杯中泻\"; break; case \"湖北省\": switch (ipLocation.result.ad_info.city) { case \"黄冈市\": posdesc = \"红安将军县!辈出将才!\"; break; default: posdesc = \"来碗热干面~\"; break; } break; case \"湖南省\": posdesc = \"74751,长沙斯塔克\"; break; case \"广东省\": switch (ipLocation.result.ad_info.city) { case \"广州市\": posdesc = \"看小蛮腰,喝早茶了嘛~\"; break; case \"深圳市\": posdesc = \"今天你逛商场了嘛~\"; break; case \"阳江市\": posdesc = \"阳春合水!博主家乡~ 欢迎来玩~\"; break; default: posdesc = \"来两斤福建人~\"; break; } break; case \"广西壮族自治区\": posdesc = \"桂林山水甲天下\"; break; case \"海南省\": posdesc = \"朝观日出逐白浪,夕看云起收霞光\"; break; case \"四川省\": posdesc = \"康康川妹子\"; break; case \"贵州省\": posdesc = \"茅台,学生,再塞200\"; break; case \"云南省\": posdesc = \"玉龙飞舞云缠绕,万仞冰川直耸天\"; break; case \"西藏自治区\": posdesc = \"躺在茫茫草原上,仰望蓝天\"; break; case \"陕西省\": posdesc = \"来份臊子面加馍\"; break; case \"甘肃省\": posdesc = \"羌笛何须怨杨柳,春风不度玉门关\"; break; case \"青海省\": posdesc = \"牛肉干和老酸奶都好好吃\"; break; case \"宁夏回族自治区\": posdesc = \"大漠孤烟直,长河落日圆\"; break; case \"新疆维吾尔自治区\": posdesc = \"驼铃古道丝绸路,胡马犹闻唐汉风\"; break; case \"台湾省\": posdesc = \"我在这头,大陆在那头\"; break; case \"香港特别行政区\": posdesc = \"永定贼有残留地鬼嚎,迎击光非岁玉\"; break; case \"澳门特别行政区\": posdesc = \"性感荷官,在线发牌\"; break; default: posdesc = \"带我去你的城市逛逛吧!\"; break; } break; default: posdesc = \"带我去你的国家逛逛吧\"; break; } //根据本地时间切换欢迎语 let timeChange; let date = new Date(); if (date.getHours() >= 5 && date.getHours() < 11) timeChange = \"🌤️ 早上好,一日之计在于晨\"; else if (date.getHours() >= 11 && date.getHours() < 13) timeChange = \"☀️ 中午好,记得午休喔~\"; else if (date.getHours() >= 13 && date.getHours() < 17) timeChange = \"🕞 下午好,饮茶先啦!\"; else if (date.getHours() >= 17 && date.getHours() < 19) timeChange = \"🚶‍♂️ 即将下班,记得按时吃饭~\"; else if (date.getHours() >= 19 && date.getHours() < 24) timeChange = \"🌙 晚上好,夜生活嗨起来!\"; else timeChange = \"夜深了,早点休息,少熬夜\"; // 新增ipv6显示为指定内容 if (ip.includes(\":\")) { ip = \"好复杂,咱看不懂~(ipv6)\"; } try { //自定义文本和需要放的位置 document.getElementById(\"welcome-info\").innerHTML = `欢迎来自 ${pos} 的小友💖${posdesc}🍂当前位置距博主约 ${dist} 公里!您的IP地址为:${ip}${timeChange} `; } catch (err) { console.log(\"Pjax无法获取元素\") } } window.onload = showWelcome; // 如果使用了pjax在加上下面这行代码 document.addEventListener('pjax:complete', showWelcome);"},{"title":"","date":"2024-11-10T11:06:15.732Z","updated":"2024-11-10T11:06:15.732Z","comments":true,"path":"js/waifu-tips.json","permalink":"https://en.blog.sinzmise.top/js/waifu-tips.json","excerpt":"","text":"{\"mouseover\":[{\"selector\":\"#live2d\",\"text\":[\"干嘛呢你,快把手拿开~~\",\"鼠…鼠标放错地方了!\",\"你要干嘛呀?\",\"喵喵喵?\",\"怕怕(ノ≧∇≦)ノ\",\"非礼呀!救命!\",\"这样的话,只能使用武力了!\",\"我要生气了哦\",\"不要动手动脚的!\",\"真…真的是不知羞耻!\",\"Hentai!\"]},{\"selector\":\"#waifu-tool-hitokoto\",\"text\":[\"猜猜我要说些什么?\",\"我从青蛙王子那里听到了不少人生经验。\"]},{\"selector\":\"#waifu-tool-asteroids\",\"text\":[\"要不要来玩飞机大战?\",\"这个按钮上写着「不要点击」。\",\"怎么,你想来和我玩个游戏?\",\"听说这样可以蹦迪!\"]},{\"selector\":\"#waifu-tool-switch-model\",\"text\":[\"你是不是不爱人家了呀,呜呜呜~\",\"要见见我的姐姐嘛?\",\"想要看我妹妹嘛?\",\"要切换看板娘吗?\"]},{\"selector\":\"#waifu-tool-switch-texture\",\"text\":[\"喜欢换装 PLAY 吗?\",\"这次要扮演什么呢?\",\"变装!\",\"让我们看看接下来会发生什么!\"]},{\"selector\":\"#waifu-tool-photo\",\"text\":[\"你要给我拍照呀?一二三~茄子~\",\"要不,我们来合影吧!\",\"保持微笑就好了~\"]},{\"selector\":\"#waifu-tool-info\",\"text\":[\"想要知道更多关于我的事么?\",\"这里记录着我搬家的历史呢。\",\"你想深入了解我什么呢?\"]},{\"selector\":\"#waifu-tool-quit\",\"text\":[\"到了要说再见的时候了吗?\",\"呜呜 QAQ 后会有期……\",\"不要抛弃我呀……\",\"我们,还能再见面吗……\",\"哼,你会后悔的!\"]},{\"selector\":\".menu-item-home a\",\"text\":[\"点击前往首页,想回到上一页可以使用浏览器的后退功能哦。\",\"点它就可以回到首页啦!\",\"回首页看看吧。\"]},{\"selector\":\".menu-item-about a\",\"text\":[\"你想知道我家主人是谁吗?\",\"这里有一些关于我家主人的秘密哦,要不要看看呢?\",\"发现主人出没地点!\"]},{\"selector\":\".menu-item-tags a\",\"text\":[\"点击就可以看文章的标签啦!\",\"点击来查看所有标签哦。\"]},{\"selector\":\".menu-item-categories a\",\"text\":[\"文章都分类好啦~\",\"点击来查看文章分类哦。\"]},{\"selector\":\".menu-item-archives a\",\"text\":[\"翻页比较麻烦吗,那就来看看文章归档吧。\",\"文章目录都整理在这里啦!\"]},{\"selector\":\".menu-item-friends a\",\"text\":[\"这是我的朋友们哦ヾ(◍°∇°◍)ノ゙\",\"要去大佬们的家看看吗?\",\"要去拜访一下我的朋友们吗?\"]},{\"selector\":\".menu-item-search a\",\"text\":[\"找不到想看的内容?搜索看看吧!\",\"在找什么东西呢,需要帮忙吗?\"]},{\"selector\":\".menu-item a\",\"text\":[\"快看看这里都有什么呢?\"]},{\"selector\":\".site-author\",\"text\":[\"我家主人好看吗?\",\"这是我家主人(*´∇`*)\"]},{\"selector\":\".site-state\",\"text\":[\"这是文章的统计信息~\",\"要不要点进去看看?\"]},{\"selector\":\".feed-link a\",\"text\":[\"这里可以使用 RSS 订阅呢!\",\"利用 feed 订阅器,就能快速知道博客有没有更新了呢。\"]},{\"selector\":\".cc-opacity, .post-copyright-author\",\"text\":[\"要记得规范转载哦。\",\"所有文章均采用 CC BY-NC-SA 4.0 许可协议~\",\"转载前要先注意下文章的版权协议呢。\"]},{\"selector\":\".links-of-author\",\"text\":[\"这里是主人的常驻地址哦。\",\"这里有主人的联系方式!\"]},{\"selector\":\".followme\",\"text\":[\"手机扫一下就能继续看,很方便呢~\",\"扫一扫,打开新世界的大门!\"]},{\"selector\":\".fancybox img, img.medium-zoom-image\",\"text\":[\"点击图片可以放大呢!\"]},{\"selector\":\".copy-btn\",\"text\":[\"代码可以直接点击复制哟。\"]},{\"selector\":\".highlight .table-container, .gist\",\"text\":[\"GitHub!我是新手!\",\"PHP 是最好的语言!\"]},{\"selector\":\"a[href^='mailto']\",\"text\":[\"邮件我会及时回复的!\",\"点击就可以发送邮件啦~\"]},{\"selector\":\"a[href^='/tags/']\",\"text\":[\"要去看看 {text} 标签么?\",\"点它可以查看此标签下的所有文章哟!\"]},{\"selector\":\"a[href^='/categories/']\",\"text\":[\"要去看看 {text} 分类么?\",\"点它可以查看此分类下的所有文章哟!\"]},{\"selector\":\".post-title-link\",\"text\":[\"要看看 {text} 这篇文章吗?\"]},{\"selector\":\"a[rel='contents']\",\"text\":[\"点击来阅读全文哦。\"]},{\"selector\":\"a[itemprop='discussionUrl']\",\"text\":[\"要去看看评论吗?\"]},{\"selector\":\".beian a\",\"text\":[\"我也是有户口的人哦。\",\"我的主人可是遵纪守法的好主人。\"]},{\"selector\":\".container a[href^='http'], .nav-link .nav-text\",\"text\":[\"要去看看 {text} 么?\",\"去 {text} 逛逛吧。\",\"到 {text} 看看吧。\"]},{\"selector\":\".back-to-top\",\"text\":[\"点它就可以回到顶部啦!\",\"又回到最初的起点~\",\"要回到开始的地方么?\"]},{\"selector\":\".reward-container\",\"text\":[\"我是不是棒棒哒~快给我点赞吧!\",\"要打赏我嘛?好期待啊~\",\"主人最近在吃土呢,很辛苦的样子,给他一些钱钱吧~\"]},{\"selector\":\"#wechat\",\"text\":[\"这是我的微信二维码~\"]},{\"selector\":\"#alipay\",\"text\":[\"这是我的支付宝哦!\"]},{\"selector\":\"#bitcoin\",\"text\":[\"这是我的比特币账号!\"]},{\"selector\":\"#needsharebutton-postbottom .btn\",\"text\":[\"好东西要让更多人知道才行哦。\",\"觉得文章有帮助的话,可以分享给更多需要的朋友呢。\"]},{\"selector\":\".need-share-button_weibo\",\"text\":[\"微博?来分享一波喵!\"]},{\"selector\":\".need-share-button_wechat\",\"text\":[\"分享到微信吧!\"]},{\"selector\":\".need-share-button_douban\",\"text\":[\"分享到豆瓣好像也不错!\"]},{\"selector\":\".need-share-button_qqzone\",\"text\":[\"QQ 空间,一键转发,耶~\"]},{\"selector\":\".need-share-button_twitter\",\"text\":[\"Twitter?好像是不存在的东西?\"]},{\"selector\":\".need-share-button_facebook\",\"text\":[\"emmm…FB 好像也是不存在的东西?\"]},{\"selector\":\".post-nav-item a[rel='next']\",\"text\":[\"来看看下一篇文章吧。\",\"点它可以看下一篇文章哦!\",\"要翻到下一篇文章吗?\"]},{\"selector\":\".post-nav-item a[rel='prev']\",\"text\":[\"来看看上一篇文章吧。\",\"点它可以看上一篇文章哦!\",\"要翻到上一篇文章吗?\"]},{\"selector\":\".extend.next\",\"text\":[\"去下一页看看吧。\",\"点它可以前进哦!\",\"要翻到下一页吗?\"]},{\"selector\":\".extend.prev\",\"text\":[\"去上一页看看吧。\",\"点它可以后退哦!\",\"要翻到上一页吗?\"]},{\"selector\":\"input.vnick\",\"text\":[\"该怎么称呼你呢?\",\"留下你的尊姓大名!\"]},{\"selector\":\".vmail\",\"text\":[\"留下你的邮箱,不然就是无头像人士了!\",\"记得设置好 Gravatar 头像哦!\",\"为了方便通知你最新消息,一定要留下邮箱!\"]},{\"selector\":\".vlink\",\"text\":[\"快快告诉我你的家在哪里,好让我去参观参观!\"]},{\"selector\":\".veditor\",\"text\":[\"想要去评论些什么吗?\",\"要说点什么吗?\",\"觉得博客不错?快来留言和主人交流吧!\"]},{\"selector\":\".vcontrol a\",\"text\":[\"你会不会熟练使用 Markdown 呀?\",\"使用 Markdown 让评论更美观吧~\"]},{\"selector\":\".vemoji-btn\",\"text\":[\"要插入一个萌萌哒的表情吗?\",\"要来一发表情吗?\"]},{\"selector\":\".vpreview-btn\",\"text\":[\"要预览一下你的发言吗?\",\"快看看你的评论有多少负熵!\"]},{\"selector\":\".vsubmit\",\"text\":[\"评论没有审核,要对自己的发言负责哦~\",\"要提交了吗,请耐心等待回复哦~\"]},{\"selector\":\".vcontent\",\"text\":[\"哇,快看看这个精彩评论!\",\"如果有疑问,请尽快留言哦~\"]}],\"click\":[{\"selector\":\"#live2d\",\"text\":[\"是…是不小心碰到了吧…\",\"萝莉控是什么呀?\",\"你看到我的小熊了吗?\",\"再摸的话我可要报警了!⌇●﹏●⌇\",\"110 吗,这里有个变态一直在摸我(ó﹏ò。)\",\"不要摸我了,我会告诉老婆来打你的!\",\"干嘛动我呀!小心我咬你!\",\"别摸我,有什么好摸的!\"]},{\"selector\":\".veditor\",\"text\":[\"要吐槽些什么呢?\",\"一定要认真填写喵~\",\"有什么想说的吗?\"]},{\"selector\":\".vsubmit\",\"text\":[\"输入验证码就可以提交评论啦~\"]}],\"seasons\":[{\"date\":\"01/01\",\"text\":\"元旦了呢,新的一年又开始了,今年是{year}年~\"},{\"date\":\"02/14\",\"text\":\"又是一年情人节,{year}年找到对象了嘛~\"},{\"date\":\"03/08\",\"text\":\"今天是国际妇女节!\"},{\"date\":\"03/12\",\"text\":\"今天是植树节,要保护环境呀!\"},{\"date\":\"04/01\",\"text\":\"悄悄告诉你一个秘密~今天是愚人节,不要被骗了哦~\"},{\"date\":\"05/01\",\"text\":\"今天是五一劳动节,计划好假期去哪里了吗~\"},{\"date\":\"06/01\",\"text\":\"儿童节了呢,快活的时光总是短暂,要是永远长不大该多好啊…\"},{\"date\":\"09/03\",\"text\":\"中国人民抗日战争胜利纪念日,铭记历史、缅怀先烈、珍爱和平、开创未来。\"},{\"date\":\"09/10\",\"text\":\"教师节,在学校要给老师问声好呀~\"},{\"date\":\"10/01\",\"text\":\"国庆节到了,为祖国母亲庆生!\"},{\"date\":\"11/05-11/12\",\"text\":\"今年的双十一是和谁一起过的呢~\"},{\"date\":\"12/20-12/31\",\"text\":\"这几天是圣诞节,主人肯定又去剁手买买买了~\"}],\"time\":[{\"hour\":\"6-7\",\"text\":\"早上好!一日之计在于晨,美好的一天就要开始了~\"},{\"hour\":\"8-11\",\"text\":\"上午好!工作顺利嘛,不要久坐,多起来走动走动哦!\"},{\"hour\":\"12-13\",\"text\":\"中午了,工作了一个上午,现在是午餐时间!\"},{\"hour\":\"14-17\",\"text\":\"午后很容易犯困呢,今天的运动目标完成了吗?\"},{\"hour\":\"18-19\",\"text\":\"傍晚了!窗外夕阳的景色很美丽呢,最美不过夕阳红~\"},{\"hour\":\"20-21\",\"text\":\"晚上好,今天过得怎么样?\"},{\"hour\":\"22-23\",\"text\":[\"已经这么晚了呀,早点休息吧,晚安~\",\"深夜时要爱护眼睛呀!\"]},{\"hour\":\"0-5\",\"text\":\"你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?\"}],\"message\":{\"default\":[\"好久不见,日子过得好快呢……\",\"大坏蛋!你都多久没理人家了呀,嘤嘤嘤~\",\"嗨~快来逗我玩吧!\",\"拿小拳拳锤你胸口!\",\"记得把小家加入收藏夹哦!\"],\"console\":\"哈哈,你打开了控制台,是想要看看我的小秘密吗?\",\"copy\":\"你都复制了些什么呀,转载要记得加上出处哦!\",\"visibilitychange\":\"哇,你终于回来了~\"}}"},{"title":"标签","date":"2021-04-06T12:01:51.000Z","updated":"2024-11-10T11:06:15.732Z","comments":false,"path":"tags/index.html","permalink":"https://en.blog.sinzmise.top/tags/","excerpt":"","text":""},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/pace/big-counter.css","permalink":"https://en.blog.sinzmise.top/css/pace/big-counter.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pace.pace-inactive .pace-progress { display: none; } .pace .pace-progress { position: fixed; z-index: 2000; top: 0; right: 0; height: 5rem; width: 5rem; -webkit-transform: translate3d(0, 0, 0) !important; -ms-transform: translate3d(0, 0, 0) !important; transform: translate3d(0, 0, 0) !important; } .pace .pace-progress:after { display: block; position: absolute; top: 0; right: .5rem; content: attr(data-progress-text); font-family: \"Helvetica Neue\", sans-serif; font-weight: 100; font-size: 5rem; line-height: 1; text-align: right; color: rgba(0, 0, 0, 0.19999999999999996); }"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/pace/corner-indicator.css","permalink":"https://en.blog.sinzmise.top/css/pace/corner-indicator.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pace .pace-activity { display: block; position: fixed; z-index: 2000; top: 0; right: 0; width: 300px; height: 300px; background: #29d; -webkit-transition: -webkit-transform 0.3s; transition: transform 0.3s; -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg); transform: translateX(100%) translateY(-100%) rotate(45deg); pointer-events: none; } .pace.pace-active .pace-activity { -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg); transform: translateX(50%) translateY(-50%) rotate(45deg); } .pace .pace-activity::before, .pace .pace-activity::after { -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; bottom: 30px; left: 50%; display: block; border: 5px solid #fff; border-radius: 50%; content: ''; } .pace .pace-activity::before { margin-left: -40px; width: 80px; height: 80px; border-right-color: rgba(0, 0, 0, .2); border-left-color: rgba(0, 0, 0, .2); -webkit-animation: pace-theme-corner-indicator-spin 3s linear infinite; animation: pace-theme-corner-indicator-spin 3s linear infinite; } .pace .pace-activity::after { bottom: 50px; margin-left: -20px; width: 40px; height: 40px; border-top-color: rgba(0, 0, 0, .2); border-bottom-color: rgba(0, 0, 0, .2); -webkit-animation: pace-theme-corner-indicator-spin 1s linear infinite; animation: pace-theme-corner-indicator-spin 1s linear infinite; } @-webkit-keyframes pace-theme-corner-indicator-spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); } } @keyframes pace-theme-corner-indicator-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } }"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/pace/flash.css","permalink":"https://en.blog.sinzmise.top/css/pace/flash.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pace-inactive { display: none; } .pace .pace-progress { background: #29d; position: fixed; z-index: 2000; top: 0; right: 100%; width: 100%; height: 2px; } .pace .pace-progress-inner { display: block; position: absolute; right: 0px; width: 100px; height: 100%; box-shadow: 0 0 10px #29d, 0 0 5px #29d; opacity: 1.0; -webkit-transform: rotate(3deg) translate(0px, -4px); -moz-transform: rotate(3deg) translate(0px, -4px); -ms-transform: rotate(3deg) translate(0px, -4px); -o-transform: rotate(3deg) translate(0px, -4px); transform: rotate(3deg) translate(0px, -4px); } .pace .pace-activity { display: block; position: fixed; z-index: 2000; top: 15px; right: 15px; width: 14px; height: 14px; border: solid 2px transparent; border-top-color: #29d; border-left-color: #29d; border-radius: 10px; -webkit-animation: pace-spinner 400ms linear infinite; -moz-animation: pace-spinner 400ms linear infinite; -ms-animation: pace-spinner 400ms linear infinite; -o-animation: pace-spinner 400ms linear infinite; animation: pace-spinner 400ms linear infinite; } @-webkit-keyframes pace-spinner { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @-moz-keyframes pace-spinner { 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } } @-o-keyframes pace-spinner { 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } } @-ms-keyframes pace-spinner { 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes pace-spinner { 0% { transform: rotate(0deg); transform: rotate(0deg); } 100% { transform: rotate(360deg); transform: rotate(360deg); } }"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/pace/mac-osx.css","permalink":"https://en.blog.sinzmise.top/css/pace/mac-osx.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; overflow: hidden; position: fixed; top: 0; left: 0; z-index: 2000; width: 100%; height: 12px; background: #fff; } .pace-inactive { display: none; } .pace .pace-progress { background-color: #0087E1; position: fixed; top: 0; right: 100%; width: 100%; height: 12px; overflow: hidden; -webkit-border-radius: 0 0 4px 0; -moz-border-radius: 0 0 4px 0; -o-border-radius: 0 0 4px 0; border-radius: 0 0 4px 0; -webkit-box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); -moz-box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); -o-box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); } .pace .pace-activity { position: fixed; top: 0; left: 0; right: -28px; bottom: 0; -webkit-background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); -moz-background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); -o-background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); -webkit-background-size: 28px 100%; -moz-background-size: 28px 100%; -o-background-size: 28px 100%; background-size: 28px 100%; -webkit-animation: pace-theme-mac-osx-motion 500ms linear infinite; -moz-animation: pace-theme-mac-osx-motion 500ms linear infinite; -ms-animation: pace-theme-mac-osx-motion 500ms linear infinite; -o-animation: pace-theme-mac-osx-motion 500ms linear infinite; animation: pace-theme-mac-osx-motion 500ms linear infinite; } @-webkit-keyframes pace-theme-mac-osx-motion { 0% { -webkit-transform: none; transform: none; } 100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @-moz-keyframes pace-theme-mac-osx-motion { 0% { -moz-transform: none; transform: none; } 100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @-o-keyframes pace-theme-mac-osx-motion { 0% { -o-transform: none; transform: none; } 100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @-ms-keyframes pace-theme-mac-osx-motion { 0% { -ms-transform: none; transform: none; } 100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @keyframes pace-theme-mac-osx-motion { 0% { transform: none; transform: none; } 100% { transform: translate(-28px, 0); transform: translate(-28px, 0); } }"},{"title":"","date":"2024-11-10T11:06:15.708Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"css/pace/pace.css","permalink":"https://en.blog.sinzmise.top/css/pace/pace.css","excerpt":"","text":".pace { pointer-events: none; -moz-user-select: none; -webkit-user-select: none; user-select: none; z-index: 2; position: fixed; margin: auto; top: 4px; left: 0; right: 0; height: 8px; border-radius: 8px; width: 6rem; background: #eaecf2; overflow: hidden; } .pace-inactive .pace-progress { opacity: 0; transition: 0.3s ease-in; } .pace.pace-inactive { opacity: 0; transition: 0.3s; top: -8px; } .pace .pace-progress { box-sizing: border-box; transform: translate3d(0, 0, 0); position: fixed; z-index: 2; display: block; position: absolute; top: 0; right: 100%; height: 100%; width: 100%; background: #49b1f5; background: linear-gradient( to right, rgb(18, 194, 233), rgb(196, 113, 237), rgb(246, 79, 89) ); animation: gradient 2s ease infinite; background-size: 200%; }"}],"posts":[{"title":"En Test","slug":"testen","date":"2023-12-30T17:36:56.000Z","updated":"2024-11-10T11:06:15.708Z","comments":true,"path":"posts/46521/","permalink":"https://en.blog.sinzmise.top/posts/46521/","excerpt":"","text":"Hello! This is my first English article.","categories":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/categories/Test/"}],"tags":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/tags/Test/"}]}],"categories":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/categories/Test/"}],"tags":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/tags/Test/"}]}
1
+ {"meta":{"title":"Ceta Magical House","subtitle":"Only a magical house","description":"The Story,The Dream.","author":"SZ·Ninty Ong","url":"https://en.blog.sinzmise.top","root":"/"},"pages":[{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"google8073542809160a67.html","permalink":"https://en.blog.sinzmise.top/google8073542809160a67","excerpt":"","text":"google-site-verification: google8073542809160a67.html"},{"title":"","date":"2024-11-10T11:43:39.727Z","updated":"2024-11-10T11:43:39.727Z","comments":true,"path":"baidu_verify_codeva-NA6uDlCuZg.html","permalink":"https://en.blog.sinzmise.top/baidu_verify_codeva-NA6uDlCuZg","excerpt":"","text":"fbef504749e3eb3d8c01aba00d679782"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"manifest.json","permalink":"https://en.blog.sinzmise.top/manifest.json","excerpt":"","text":"{\"name\":\"Ceta Storical House\",\"short_name\":\"CetaHouse\",\"theme_color\":\"#ccf6f4\",\"background_color\":\"#ccf6f4\",\"display\":\"standalone\",\"scope\":\"/\",\"start_url\":\"/\",\"icons\":[{\"src\":\"/images/siteicon/windows11/SmallTile.scale-100.png\",\"sizes\":\"71x71\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-125.png\",\"sizes\":\"89x89\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-150.png\",\"sizes\":\"107x107\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-200.png\",\"sizes\":\"142x142\"},{\"src\":\"/images/siteicon/windows11/SmallTile.scale-400.png\",\"sizes\":\"284x284\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-100.png\",\"sizes\":\"150x150\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-125.png\",\"sizes\":\"188x188\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-150.png\",\"sizes\":\"225x225\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-200.png\",\"sizes\":\"300x300\"},{\"src\":\"/images/siteicon/windows11/Square150x150Logo.scale-400.png\",\"sizes\":\"600x600\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-100.png\",\"sizes\":\"310x150\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-125.png\",\"sizes\":\"388x188\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-150.png\",\"sizes\":\"465x225\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-200.png\",\"sizes\":\"620x300\"},{\"src\":\"/images/siteicon/windows11/Wide310x150Logo.scale-400.png\",\"sizes\":\"1240x600\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-100.png\",\"sizes\":\"310x310\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-125.png\",\"sizes\":\"388x388\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-150.png\",\"sizes\":\"465x465\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-200.png\",\"sizes\":\"620x620\"},{\"src\":\"/images/siteicon/windows11/LargeTile.scale-400.png\",\"sizes\":\"1240x1240\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-100.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-125.png\",\"sizes\":\"55x55\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-150.png\",\"sizes\":\"66x66\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-200.png\",\"sizes\":\"88x88\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.scale-400.png\",\"sizes\":\"176x176\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-100.png\",\"sizes\":\"50x50\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-125.png\",\"sizes\":\"63x63\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-150.png\",\"sizes\":\"75x75\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-200.png\",\"sizes\":\"100x100\"},{\"src\":\"/images/siteicon/windows11/StoreLogo.scale-400.png\",\"sizes\":\"200x200\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-100.png\",\"sizes\":\"620x300\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-125.png\",\"sizes\":\"775x375\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-150.png\",\"sizes\":\"930x450\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-200.png\",\"sizes\":\"1240x600\"},{\"src\":\"/images/siteicon/windows11/SplashScreen.scale-400.png\",\"sizes\":\"2480x1200\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-24.png\",\"sizes\":\"24x24\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-30.png\",\"sizes\":\"30x30\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-36.png\",\"sizes\":\"36x36\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-44.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.targetsize-256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-24.png\",\"sizes\":\"24x24\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-30.png\",\"sizes\":\"30x30\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-36.png\",\"sizes\":\"36x36\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-44.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-unplated_targetsize-256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png\",\"sizes\":\"24x24\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png\",\"sizes\":\"30x30\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png\",\"sizes\":\"36x36\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png\",\"sizes\":\"44x44\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/android/android-launchericon-512-512.png\",\"sizes\":\"512x512\"},{\"src\":\"/images/siteicon/android/android-launchericon-192-192.png\",\"sizes\":\"192x192\"},{\"src\":\"/images/siteicon/android/android-launchericon-144-144.png\",\"sizes\":\"144x144\"},{\"src\":\"/images/siteicon/android/android-launchericon-96-96.png\",\"sizes\":\"96x96\"},{\"src\":\"/images/siteicon/android/android-launchericon-72-72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/android/android-launchericon-48-48.png\",\"sizes\":\"48x48\"},{\"src\":\"/images/siteicon/ios/16.png\",\"sizes\":\"16x16\"},{\"src\":\"/images/siteicon/ios/20.png\",\"sizes\":\"20x20\"},{\"src\":\"/images/siteicon/ios/29.png\",\"sizes\":\"29x29\"},{\"src\":\"/images/siteicon/ios/32.png\",\"sizes\":\"32x32\"},{\"src\":\"/images/siteicon/ios/40.png\",\"sizes\":\"40x40\"},{\"src\":\"/images/siteicon/ios/50.png\",\"sizes\":\"50x50\"},{\"src\":\"/images/siteicon/ios/57.png\",\"sizes\":\"57x57\"},{\"src\":\"/images/siteicon/ios/58.png\",\"sizes\":\"58x58\"},{\"src\":\"/images/siteicon/ios/60.png\",\"sizes\":\"60x60\"},{\"src\":\"/images/siteicon/ios/64.png\",\"sizes\":\"64x64\"},{\"src\":\"/images/siteicon/ios/72.png\",\"sizes\":\"72x72\"},{\"src\":\"/images/siteicon/ios/76.png\",\"sizes\":\"76x76\"},{\"src\":\"/images/siteicon/ios/80.png\",\"sizes\":\"80x80\"},{\"src\":\"/images/siteicon/ios/87.png\",\"sizes\":\"87x87\"},{\"src\":\"/images/siteicon/ios/100.png\",\"sizes\":\"100x100\"},{\"src\":\"/images/siteicon/ios/114.png\",\"sizes\":\"114x114\"},{\"src\":\"/images/siteicon/ios/120.png\",\"sizes\":\"120x120\"},{\"src\":\"/images/siteicon/ios/128.png\",\"sizes\":\"128x128\"},{\"src\":\"/images/siteicon/ios/144.png\",\"sizes\":\"144x144\"},{\"src\":\"/images/siteicon/ios/152.png\",\"sizes\":\"152x152\"},{\"src\":\"/images/siteicon/ios/167.png\",\"sizes\":\"167x167\"},{\"src\":\"/images/siteicon/ios/180.png\",\"sizes\":\"180x180\"},{\"src\":\"/images/siteicon/ios/192.png\",\"sizes\":\"192x192\"},{\"src\":\"/images/siteicon/ios/256.png\",\"sizes\":\"256x256\"},{\"src\":\"/images/siteicon/ios/512.png\",\"sizes\":\"512x512\"},{\"src\":\"/images/siteicon/ios/1024.png\",\"sizes\":\"1024x1024\"}]}"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"sw.js","permalink":"https://en.blog.sinzmise.top/sw.js","excerpt":"","text":"// 全站打包上传 npm,sw 并发请求 cdn const prefix = 'sinzmise-cetastories-en'; const cacheSuffixVersion = '00000018-::cacheSuffixVersion::'; const CACHE_NAME = prefix + '-v' + cacheSuffixVersion; const PreCachlist = [ \"/css/style.css\", \"/js/app.js\", \"/js/search/hexo.js\", ]; let NPMMirror = true; const NPMPackage = \"sinzmise-cetastories-en\"; let NPMPackageVersion = \"latest\"; let debug = true; // location.hostname == 'localhost' && (debug = true) && (NPMMirror = false); const handleFetch = async (event) => { const url = event.request.url; if (/hm\\.baidu\\.com/.test(url)) { return NetworkOnly(event) } else if (/collect-perf\\.51\\.la/.test(url)) { return NetworkOnly(event) } else if (/sdk\\.51\\.la/.test(url)) { return NetworkOnly(event) } else if (/www\\.google-analytics\\.com/.test(url)) { return NetworkOnly(event) } else if (/@latest/.test(url)) { return CacheFirst(event) } else if (/cdnjs\\.cloudflare\\.com/.test(url)) { return CacheAlways(event) } else if (/music\\.126\\.net/.test(url)) { return CacheAlways(event) } else if (/qqmusic\\.qq\\.com/.test(url)) { return CacheAlways(event) } else if (/jsd\\.cdn\\.storisinz\\.site/.test(url)) { return CacheAlways(event) } else if (/jsdelivr\\.net/.test(url)) { return CacheAlways(event) } else if (/npm\\.elemecdn\\.com/.test(url)) { return CacheAlways(event) } else if (/unpkg\\.com/.test(url)) { return CacheAlways(event) } else if (/.*\\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)$/.test(url)) { return CacheAlways(event) } else if (/.*\\.(css|js)$/.test(url)) { return CacheAlways(event) } else { return CacheFirst(event) } } const cdn = { gh: { jsdelivr: 'https://cdn.jsdelivr.net/gh', fastly: 'https://fastly.jsdelivr.net/gh', gcore: 'https://gcore.jsdelivr.net/gh', testingcf: 'https://testingcf.jsdelivr.net/gh', test1: 'https://test1.jsdelivr.net/gh', storisinz: 'https://jsd.cdn.storisinz.site/gh', webcache: 'https://code.webcache.cn/gh', }, combine: { jsdelivr: 'https://cdn.jsdelivr.net/combine', fastly: 'https://fastly.jsdelivr.net/combine', gcore: 'https://gcore.jsdelivr.net/combine', testingcf: 'https://testingcf.jsdelivr.net/combine', test1: 'https://test1.jsdelivr.net/combine', storisinz: 'https://jsd.cdn.storisinz.site/combine', }, npm: { jsdelivr: 'https://cdn.jsdelivr.net/npm', fastly: 'https://fastly.jsdelivr.net/npm', gcore: 'https://gcore.jsdelivr.net/npm', testingcf: 'https://testingcf.jsdelivr.net/npm', test1: 'https://test1.jsdelivr.net/npm', unpkg: 'https://unpkg.com', eleme: 'https://npm.elemecdn.com', storisinz: 'https://jsd.cdn.storisinz.site/npm', webcache: 'https://npm.webcache.cn', }, cdnjs: { cdnjs: 'https://cdnjs.cloudflare.com/ajax/libs', baomitu: 'https://lib.baomitu.com', bytedance: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M', sustech: 'https://mirrors.sustech.edu.cn/cdnjs/ajax/libs', webcache: 'https://cdnjs.webstatic.cn/ajax/libs', } } const cdn_match_list = [] for (const type in cdn) { for (const key in cdn[type]) { cdn_match_list.push({ type: type, key: cdn[type][key] }) } } const _console = console; const color = { black: '#000000', red: '#FF0000', green: '#008000', yellow: '#FFFF00', blue: '#0000FF', magenta: '#FF00FF', cyan: '#00FFFF', white: '#FFFFFF', }; const add = (...arr) => { let fi = [ [] ]; for (let key = 0; key < arr.length; key++) { const [first, ...other] = arr[key]; fi[0] += first; fi = fi.concat(other); } return fi; }; const createlog = (util) => (...args) => { // const fun = _console[util] ? _console[util] : _console.log; const fun = util == \"error\" ? _console[util] : _console.log; fun.apply(void 0, args); }; const creategroup = (util) => (...args) => { const fun = _console.groupCollapsed; fun.apply(void 0, args); }; const colorUtils = { bold: (str) => { if (typeof str === 'string' || typeof str === 'number') { return `${str};font-weight: bold;`; } for (let key = 1; key < str.length; key++) { str[key] += `;font-weight: bold;`; } return str; } }; const colorHash = { log: 'black', wait: 'cyan', error: 'red', warn: 'yellow', ready: 'green', info: 'blue', event: 'magenta', }; const createChalk = (name) => (...str) => { if (typeof str[0] === 'object') { createlog(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), ...str)); return; } let strArr = str; if (typeof str === 'string' || typeof str === 'number') { strArr = colorUtils[colorHash[name]](str); } createlog(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), strArr)); }; const createChalkBg = (name) => (...str) => { if (typeof str[0] === 'object') { createlog(name)(...add(colorUtils.bold(colorUtils[`bg${firstToUpperCase(colorHash[name])}`](`[${firstToUpperCase(name)}] `)), ...str)); return; } let strArr = str; if (typeof str === 'string' || typeof str === 'number') { strArr = colorUtils[colorHash[name]](str); } createlog(name)(...add(colorUtils.bold(colorUtils[`bg${firstToUpperCase(colorHash[name])}`](`[${firstToUpperCase(name)}] `)), strArr)); }; const createChalkGroup = (name) => (...str) => { if (typeof str[0] === 'object') { creategroup(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), ...str)); return; } let strArr = str; if (typeof str === 'string' || typeof str === 'number') { strArr = colorUtils[colorHash[name]](str); } creategroup(name)(...add(colorUtils.bold(colorUtils[colorHash[name]](`[${firstToUpperCase(name)}] `)), strArr)); }; const chalk = { group: { end: _console.groupEnd }, bg: {} }; Object.keys(colorHash).forEach(key => { chalk[key] = createChalk(key); chalk.group[key] = createChalkGroup(key); chalk.bg[key] = createChalkBg(key); }); const firstToUpperCase = (str) => str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()); Object.keys(color).forEach(key => { colorUtils[key] = (str) => { if (typeof str === 'string' || typeof str === 'number') { return [`%c${str}`, `color:${color[key]}`]; } for (let i = 1; i < str.length; i++) { str[i] += `;color:${color[key]}`; } return str; }; colorUtils[`bg${firstToUpperCase(key)}`] = (str) => { if (typeof str === 'string' || typeof str === 'number') { return [`%c${str}`, `padding: 2px 4px; border-radius: 3px; color: ${key === 'white' ? '#000' : '#fff'}; font-weight: bold; background:${color[key]};`]; } for (let i = 1; i < str.length; i++) { str[i] += `;padding: 2px 4px; border-radius: 3px; font-weight: bold; background:${color[key]};`; } return str; }; }); self.logger = { add, ...chalk, ...colorUtils, }; if (!debug) { logger = { log: () => { }, wait: () => { }, error: () => { }, warn: () => { }, ready: () => { }, info: () => { }, event: () => { }, group: { log: () => { }, wait: () => { }, error: () => { }, warn: () => { }, ready: () => { }, info: () => { }, event: () => { }, end: () => { }, }, bg: { log: () => { }, wait: () => { }, error: () => { }, warn: () => { }, ready: () => { }, info: () => { }, event: () => { }, } }; console.log = () => { }; } const generate_uuid = () => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } self.db = { read: (key, config) => { if (!config) { config = { type: \"text\" } } return new Promise((resolve, reject) => { caches.open(CACHE_NAME).then(cache => { cache.match(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`)).then(function (res) { if (!res) resolve(null) res.text().then(text => resolve(text)) }).catch(() => { resolve(null) }) }) }) }, write: (key, value) => { return new Promise((resolve, reject) => { caches.open(CACHE_NAME).then(function (cache) { cache.put(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`), new Response(value)); resolve() }).catch(() => { reject() }) }) } } const compareVersion = (a, b) => { let v1 = a.split('.'); let v2 = b.split('.'); const len = Math.max(v1.length, v2.length); while (v1.length < len) { v1.push('0'); } while (v2.length < len) { v2.push('0'); } for (let i = 0; i < len; i++) { const num1 = parseInt(v1[i]); const num2 = parseInt(v2[i]); if (num1 > num2) { return a; } else if (num1 < num2) { return b; } } return a; } const mirrors = [ `https://registry.npmjs.org/${NPMPackage}/latest`, `https://mirrors.cloud.tencent.com/npm/${NPMPackage}/latest` ] const getLocalVersion = async () => { NPMPackageVersion = await db.read('blog_version') || NPMPackageVersion logger.bg.info(`Local Version: ${NPMPackage}@${NPMPackageVersion}`) } let mirror_time = 0; const setNewestVersion = async () => { if (!NPMMirror) { return } let f = null; if (!(mirror_time % (mirrors.length + 1))) { f = FetchEngine(mirrors); } else { f = fetch(mirrors[(mirror_time % (mirrors.length + 1)) - 1]); } mirror_time++; return f .then(res => res.json()) .then(async res => { if (!res.version) throw ('No Version Found!') NPMPackageVersion = compareVersion(res.version, await db.read('blog_version') || NPMPackageVersion) logger.bg.ready(`${NPMPackage}@${NPMPackageVersion}`) await db.write('blog_version', NPMPackageVersion) }) .catch(error => { logger.error('[Set Newest Version] ' + (error.stack || error)) }) } setInterval(async () => { await setNewestVersion() }, 60 * 1000); setTimeout(async () => { await setNewestVersion() }, 5000) const installFunction = async () => { await getLocalVersion(); return caches.open(CACHE_NAME + \"-precache\") .then(async function (cache) { if (!await db.read('uuid')) { await db.write('uuid', generate_uuid()) } if (PreCachlist.length) { logger.group.event(`Precaching ${PreCachlist.length} files.`); let index = 0; PreCachlist.forEach(function (url) { cache.match(new Request(url)).then(function (response) { if (response) { logger.ready(`Precaching ${url}`); } else { logger.wait(`Precaching ${url}`); cache.add(new Request(url)); } index++; if (index === PreCachlist.length) { logger.ready(`Precached ${PreCachlist.length} files.`); logger.group.end(); } }) }) } }).catch((error) => { logger.error('[install] ' + (error.stack || error)); }) } self.addEventListener('install', async function (event) { logger.bg.event(\"service worker install event listening\"); try { self.skipWaiting(); event.waitUntil(installFunction()); logger.bg.ready('service worker install sucess!'); } catch (error) { logger.error('[install] ' + (error.stack || error)); } }); self.addEventListener('activate', async event => { logger.bg.event(\"service worker activate event listening\"); try { event.waitUntil( caches.keys().then((keys) => { return Promise.all(keys.map((key) => { if (!key.includes(cacheSuffixVersion)) { caches.delete(key); logger.bg.ready('Deleted Outdated Cache: ' + key); } })); }).catch((error) => { logger.error('[activate] ' + (error.stack || error)); }) ); await self.clients.claim() logger.bg.ready('service worker activate sucess!'); } catch (error) { logger.error('[activate] ' + (error.stack || error)); } }) self.addEventListener('fetch', async event => { event.respondWith( handleFetch(event).catch((error) => { logger.error('[fetch] ' + event.request.url + '\\n[error] ' + (error.stack || error)); }) ) }); const NetworkOnly = async (event) => { logger.group.info('NetworkOnly: ' + new URL(event.request.url).pathname); logger.wait('service worker fetch: ' + event.request.url) logger.group.end(); return fetch(event.request) } const CacheFirst = async (event) => { return caches.match(event.request).then(function (resp) { logger.group.info('CacheFirst: ' + new URL(event.request.url).pathname); logger.wait('service worker fetch: ' + event.request.url) if (resp) { logger.group.ready(`Cache Hit`); console.log(resp) logger.group.end(); logger.group.end(); event.waitUntil(CacheRuntime(event.request)) return resp; } else { logger.warn(`Cache Miss`); logger.group.end(); return CacheRuntime(event.request) } }) } const CacheAlways = async (event) => { return caches.match(event.request).then(function (resp) { logger.group.info('CacheAlways: ' + new URL(event.request.url).pathname); logger.wait('service worker fetch: ' + event.request.url) if (resp) { logger.group.ready(`Cache Hit`); console.log(resp) logger.group.end(); logger.group.end(); return resp; } else { logger.warn(`Cache Miss`); logger.group.end(); return CacheRuntime(event.request) } }) } const matchCache = async (event) => { return caches.match(event.request).then(function (resp) { logger.group.info('service worker fetch: ' + event.request.url) if (resp) { logger.group.ready(`Cache Hit`); console.log(resp) logger.group.end(); logger.group.end(); return resp; } else { logger.warn(`Cache Miss`); logger.group.end(); return CacheRuntime(event.request) } }) } async function CacheRuntime(request) { const url = new URL(request.url); let response = await matchCDN(request); if (!response) { response = await fetch(request).catch(() => null) } logger.group.event(`Cache Runtime ${url.pathname}`); logger.wait(`Caching url: ${request.url}`); console.log(response); if (request.method === \"GET\" && (url.protocol == \"https:\")) { const cache = await caches.open(CACHE_NAME + \"-runtime\"); cache.put(request, response.clone()).catch(error => { logger.error('[Cache Runtime] ' + (error.stack || error)); if (error.name === 'QuotaExceededError') { caches.delete(CACHE_NAME + \"-runtime\"); logger.ready(\"deleted cache\") } }) logger.ready(`Cached url: ${request.url}`); } else { logger.warn(`Not Cached url: ${request.url}`); } logger.group.end(); return response; } const matchCDN = async (req) => { const nav = navigator const { saveData, effectiveType } = nav.connection || nav.mozConnection || nav.webkitConnection || {} if (saveData || /2g/.test(effectiveType)) { logger.warn(\"Slow Network: Transparent Proxy\"); return fetch(req); } const urls = [] let urlObj = new URL(req.url) let pathType = urlObj.pathname.split('/')[1] let pathTestRes = \"\"; if (NPMMirror && new RegExp(location.origin).test(req.url)) { logger.group.ready(`Match NPM Mirror: ` + req.url); for (const key in cdn.npm) { let url = cdn.npm[key] + \"/\" + NPMPackage + \"@\" + NPMPackageVersion + req.url.replace(location.origin, '') url = fullPath(fullPath(url)) console.log(url); urls.push(url) } logger.group.end() } if (!urls.length) { for (const item of cdn_match_list) { if (new RegExp(item.key).test(req.url)) { pathType = item.type pathTestRes = new RegExp(item.key).exec(req.url)[0] break; } } for (const type in cdn) { if (type === pathType) { logger.group.ready(`Match CDN ${pathType}: ` + req.url); for (const key in cdn[type]) { const url = cdn[type][key] + req.url.replace(pathTestRes, '') console.log(url); urls.push(url) } logger.group.end() } } } let res; if (urls.length) res = FetchEngine(urls) else res = fetch(req) if (res && NPMMirror && new RegExp(location.origin).test(req.url)) { const ext = fullPath(fullPath(req.url)).split('.').pop() const contentType = getContentType(ext) res = res .then(res => res.arrayBuffer()) .then(buffer => new Response(buffer, { headers: { \"Content-Type\": contentType } })) .catch(() => null) } return res } const fullPath = (url) => { url = url.split('?')[0].split('#')[0] if (url.endsWith('/')) { url += 'index.html' } else { const list = url.split('/') const last = list[list.length - 1] if (last.indexOf('.') === -1) { url += '.html' } } return url } async function progress(res) { return new Response(await res.arrayBuffer(), { status: res.status, headers: res.headers }) } function createPromiseAny() { Promise.any = function (promises) { return new Promise((resolve, reject) => { promises = Array.isArray(promises) ? promises : [] let len = promises.length let errs = [] if (len === 0) return reject(new AggregateError('All promises were rejected')) promises.forEach((p) => { if (p instanceof Promise) { p.then( (res) => resolve(res), (err) => { len-- errs.push(err) if (len === 0) reject(new AggregateError(errs)) } ) } else { reject(p) } }) }) } } function fetchAny(reqs) { const controller = new AbortController() return reqs.map(req => { return new Promise((resolve, reject) => { fetch(req, { signal: controller.signal }) .then(progress) .then(res => { controller.abort() if (res.status !== 200) reject(null) else resolve(res) }) .catch(() => reject(null)) }) }) } function fetchParallel(reqs) { const abortEvent = new Event(\"abortOtherInstance\") const eventTarget = new EventTarget(); return reqs.map(async req => { const controller = new AbortController(); let tagged = false; eventTarget.addEventListener(abortEvent.type, () => { if (!tagged) controller.abort(); }) return new Promise((resolve, reject) => { fetch(req, { signal: controller.signal, }).then(res => { tagged = true; eventTarget.dispatchEvent(abortEvent) if (res.status !== 200) reject(null) else resolve(res) }).catch(() => reject(null)) }) }); } const FetchEngine = (reqs) => { if (!Promise.any) createPromiseAny(); return Promise.any(fetchParallel(reqs)).then(res => res) .catch((e) => { if (e == \"AggregateError: All promises were rejected\") { return Promise.any(fetchAny(reqs)) .then((res) => res) .catch(() => null); } return null; }); }; const getContentType = (ext) => { switch (ext) { case 'js': return 'text/javascript' case 'html': return 'text/html' case 'css': return 'text/css' case 'json': return 'application/json' case 'webp': return 'image/webp' case 'jpg': return 'image/jpg' case 'jpeg': return 'image/jpeg' case 'png': return 'image/png' case 'gif': return 'image/gif' case 'xml': return 'text/xml' case 'xsl': return 'text/xml' case 'webmanifest': return 'text/webmanifest' case 'map': return 'application/json' case 'bcmap': return 'image/vnd.wap.wbmp' case 'wbmp': return 'image/vnd.wap.wbmp' case 'bmp': return 'image/bmp' case 'ico': return 'image/vnd.microsoft.icon' case 'tiff': return 'image/tiff' case 'tif': return 'image/tiff' case 'svg': return 'image/svg+xml' case 'svgz': return 'image/svg+xml' case 'woff': return 'application/font-woff' case 'woff2': return 'application/font-woff2' case 'ttf': return 'application/font-ttf' case 'otf': return 'application/font-otf' case 'eot': return 'application/vnd.ms-fontobject' case 'zip': return 'application/zip' case 'tar': return 'application/x-tar' case 'gz': return 'application/gzip' case 'bz2': return 'application/x-bzip2' case 'rar': return 'application/x-rar-compressed' case '7z': return 'application/x-7z-compressed' case 'doc': return 'application/msword' case 'docx': return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' case 'xls': return 'application/vnd.ms-excel' case 'xlsx': return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' case 'ppt': return 'application/vnd.ms-powerpoint' case 'pptx': return 'application/vnd.openxmlformats-officedocument.presentationml.presentation' case 'pdf': return 'application/pdf' case 'txt': return 'text/plain' case 'rtf': return 'application/rtf' case 'mp3': return 'audio/mpeg' case 'wav': return 'audio/x-wav' case 'ogg': return 'audio/ogg' case 'mp4': return 'video/mp4' case 'm4v': return 'video/x-m4v' case 'mov': return 'video/quicktime' case 'avi': return 'video/x-msvideo' case 'wmv': return 'video/x-ms-wmv' case 'flv': return 'video/x-flv' case 'swf': return 'application/x-shockwave-flash' case 'mpg': return 'video/mpeg' case 'mpeg': return 'video/mpeg' case 'mpe': return 'video/mpeg' case 'mpv': return 'video/mpeg' case 'm2v': return 'video/mpeg' case 'm4a': return 'audio/mp4' case 'aac': return 'audio/aac' case 'm3u': return 'audio/x-mpegurl' case 'm3u8': return 'application/vnd.apple.mpegurl' case 'pls': return 'audio/x-scpls' case 'cue': return 'application/x-cue' case 'wma': return 'audio/x-ms-wma' case 'flac': return 'audio/flac' case 'aif': return 'audio/x-aiff' case 'aiff': return 'audio/x-aiff' case 'aifc': return 'audio/x-aiff' case 'au': return 'audio/basic' case 'snd': return 'audio/basic' case 'mid': return 'audio/midi' case 'midi': return 'audio/midi' case 'kar': return 'audio/midi' default: return 'text/plain' } }"},{"title":"分类","date":"2022-02-23T17:56:00.000Z","updated":"2024-11-10T11:43:39.727Z","comments":true,"path":"categories/index.html","permalink":"https://en.blog.sinzmise.top/categories/","excerpt":"","text":""},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"test.json","permalink":"https://en.blog.sinzmise.top/test.json","excerpt":"","text":"[{\"class_name\":\"即刻短文\",\"essay_list\":[{\"content\":\"园长新造型!爱死\",\"date\":\"2023/08/01 17:12:30\",\"video\":{\"bilibili\":\"//player.bilibili.com/player.html?aid=701381935&bvid=BV1dm4y1L7vj&cid=1212026428&page=1\",\"autoplay\":true}},{\"content\":\"这辈子都不想完善项目了 😭 两点了 一看才搓完三分之一..\",\"date\":\"2023/08/01 02:02:44\",\"video\":{\"player\":\"https://meuicat.com/video/1.mp4\"}},{\"content\":\"让我看看是谁在路上都还在敲键盘 噢 原来是我自己啊..\",\"date\":\"2023/07/31 15:54:26\",\"from\":\"iPhone XR\"},{\"content\":\"落班 烧个排骨778~\",\"date\":\"2023/07/26 17:55:36\",\"from\":\"iPhone XR\",\"image\":[\"https://s11.ax1x.com/2023/07/26/pCjWbY4.jpg || 图片描述\",\"https://s11.ax1x.com/2023/07/26/pCjWqfJ.jpg\"]},{\"content\":\"嘘..听歌..睡觉...\",\"date\":\"2023/07/20 00:38:41\",\"aplayer\":{\"server\":\"netease\",\"id\":\"1430702919\"},\"top\":true},{\"content\":\"人生应该是一个轴对称的形状,最后失去的,也就是最开始拥有的。现在没人记得你的生日,有好处也有坏处,至少我是这么理解的。但无论是好还是坏,忍一忍,都会很快过去的\",\"date\":\"2023/07/19 01:48:36\",\"from\":\"iPhone XR\",\"link\":\"/blog/64 || 链接描述\"},{\"content\":\"用堆AI重绘一下我最爱的头像(图一 👉 图二)\",\"date\":\"2023/07/06 16:30:32\",\"from\":\"iPhone XR\",\"link\":\"/blog/61\",\"image\":[\"https://img.meuicat.com/posts/2023/7/10.webp\",\"https://img.meuicat.com/posts/2023/7/11.webp\"]},{\"content\":\"\",\"date\":\"2023/06/30 08:26:22\",\"aplayer\":{\"server\":\"netease\",\"id\":\"2009974513\"}}]}]"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/custom2.css","permalink":"https://en.blog.sinzmise.top/css/custom2.css","excerpt":"","text":".DocSearch-Input{ margin-bottom: 0!important; }"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/plane.css","permalink":"https://en.blog.sinzmise.top/css/plane.css","excerpt":"","text":"/* --------------------首页飞机操作样式-------------------- */ .planeOpt kbd { margin: 0 3px; padding: 3px 5px; border: 1px solid #b4b4b4; border-radius: 3px; background-color: #f8f8f8; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .25), 0 2px 1px 0 rgba(255, 255, 255, .6) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, .25), 0 2px 1px 0 rgba(255, 255, 255, .6) inset; color: #34495e; white-space: nowrap; font-weight: 600; font-size: .9em; font-family: Monaco, 'Ubuntu Mono', monospace; line-height: 1em; } .planeOpt button { cursor: pointer; font-family: inherit; font-size: 12px; background: #49b1f5; color: white; padding: 0.5em 1em; display: flex; align-items: center; border: none; border-radius: 8px; overflow: hidden; transition: all 0.2s; } .planeOpt button span { display: block; margin-left: 0.3em; transition: all 0.3s ease-in-out; } .planeOpt button svg { display: block; transform-origin: center center; transition: transform 0.3s ease-in-out; } .planeOpt button:hover .svg-wrapper { animation: fly-1 0.6s ease-in-out infinite alternate; } .planeOpt button:hover svg { transform: translateX(1.2em) rotate(45deg) scale(1.1); } .planeOpt button:hover span { transform: translateX(5em); } .planeOpt button:active { transform: scale(0.95); }"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/tags.css","permalink":"https://en.blog.sinzmise.top/css/tags.css","excerpt":"","text":"[data-theme=\"dark\"] div.btns { filter: brightness(0.7); } [data-theme=\"dark\"] div.btns a { background: 0 0; } [data-theme=\"dark\"] .checkbox { filter: brightness(0.7); } div.btns { margin: 0 -8px; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-align: start; -moz-box-align: start; -o-box-align: start; -ms-flex-align: start; -webkit-align-items: flex-start; align-items: flex-start; overflow: visible; line-height: 1.8; } div.btns b { font-size: 0.875rem; } div.btns.wide > a { padding-left: 32px; padding-right: 32px; } div.btns.fill > a { -webkit-box-flex: 1; -moz-box-flex: 1; -o-box-flex: 1; -ms-box-flex: 1; box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; width: auto; } div.btns.around { -webkit-box-pack: distribute; -moz-box-pack: distribute; -o-box-pack: distribute; -ms-flex-pack: distribute; -webkit-justify-content: space-around; justify-content: space-around; } div.btns.center { -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } div.btns.grid2 > a { width: calc(100% / 2 - 16px); } div.btns.grid3 > a { width: calc(100% / 3 - 16px); } div.btns.grid4 > a { width: calc(100% / 4 - 16px); } div.btns.grid5 > a { width: calc(100% / 5 - 16px); } div.btns a { -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; margin: 8px; margin-top: calc(1.25 * 16px + 32px); min-width: 120px; font-weight: bold; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -ms-flex-line-pack: center; -webkit-align-content: center; align-content: center; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; -webkit-box-orient: vertical; -moz-box-orient: vertical; -o-box-orient: vertical; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; padding: 8px; text-align: center; background: #f6f6f6; border-radius: 4px; } div.btns a > i { background: #2196f3 !important; } div.btns a > i:first-child { color: #fff; background: #2196f3; } div.btns a b { font-weight: bold; line-height: 1.3; } div.btns a img { margin: 0.4em auto; } div.btns a:not([href]) { cursor: default; color: inherit; } div.btns a[href]:hover { background: rgba(255,87,34,0.15); } div.btns a[href]:hover > i:first-child { background: #ff5722; } div.btns, div.btns p, div.btns a { font-size: 0.8125rem; color: #555; } @media screen and (max-width: 1024px) { div.btns.grid2 > a { width: calc(100% / 2 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid2 > a { width: calc(100% / 2 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid2 > a { width: calc(100% / 1 - 16px); } } @media screen and (max-width: 1024px) { div.btns.grid3 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid3 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid3 > a { width: calc(100% / 1 - 16px); } } @media screen and (max-width: 1024px) { div.btns.grid4 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid4 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid4 > a { width: calc(100% / 2 - 16px); } } @media screen and (max-width: 1024px) { div.btns.grid5 > a { width: calc(100% / 4 - 16px); } } @media screen and (max-width: 768px) { div.btns.grid5 > a { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { div.btns.grid5 > a { width: calc(100% / 2 - 16px); } } div.btns a > img:first-child, div.btns a > i:first-child { -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; height: 64px; width: 64px; -webkit-box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); margin: 16px 8px 4px 8px; margin-top: calc(-1.25 * 16px - 32px); border: 2px solid #fff; background: #fff; line-height: 60px; font-size: 28px; } div.btns a > img:first-child.auto, div.btns a > i:first-child.auto { width: auto; } div.btns a p, div.btns a b { margin: 0.25em; font-weight: normal; line-height: 1.25; word-wrap: break-word; } div.btns a[href]:hover, div.btns a[href]:hover b { color: #ff5722; } div.btns a[href]:hover > img:first-child, div.btns a[href]:hover > i:first-child { -webkit-transform: scale(1.1) translateY(-8px); -moz-transform: scale(1.1) translateY(-8px); -o-transform: scale(1.1) translateY(-8px); -ms-transform: scale(1.1) translateY(-8px); transform: scale(1.1) translateY(-8px); -webkit-box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); } div.btns.circle a > img:first-child, div.btns.circle a > i:first-child { border-radius: 32px; } div.btns.rounded a > img:first-child, div.btns.rounded a > i:first-child { border-radius: 16px; } :root { --bubble-text-color: #e9a218; --bubble-text-hover-color: #2c7fe7; --bubble-text-shadow: rgba(35,35,35,0.5); } [data-theme=\"dark\"] { --bubble-text-color: #f2b94b; --bubble-text-hover-color: #2c7fe7; --bubble-text-shadow: rgba(35,35,35,0.5); } .bubble-content { display: inline-block; color: var(--bubble-text-color); font-weight: bold; -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; text-shadow: var(--bubble-text-shadow); } .bubble-content:hover { -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; color: var(--bubble-text-hover-color); } .bubble-content:hover + .bubble-notation .bubble-item { -webkit-transform: translate(-40px, 10px) rotateX(0deg); -moz-transform: translate(-40px, 10px) rotateX(0deg); -o-transform: translate(-40px, 10px) rotateX(0deg); -ms-transform: translate(-40px, 10px) rotateX(0deg); transform: translate(-40px, 10px) rotateX(0deg); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 1; -ms-filter: none; filter: none; } .bubble-notation { display: inline-block; } .bubble-item { -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); color: #fff; z-index: 99; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; position: absolute; -webkit-transform: translate(-40px, 10px) rotateX(90deg); -moz-transform: translate(-40px, 10px) rotateX(90deg); -o-transform: translate(-40px, 10px) rotateX(90deg); -ms-transform: translate(-40px, 10px) rotateX(90deg); transform: translate(-40px, 10px) rotateX(90deg); width: auto; height: auto; max-width: 400px; overflow: hidden; padding: 20px 10px 10px 10px; clip-path: polygon(5px 10px, 20px 10px, 30px 0, 40px 10px, calc(100% - 5px) 10px, 100% 15px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 15px, 5px 10px); } #article-container .btn-center { margin: 0 0 20px; text-align: center; } #article-container .btn-beautify { display: inline-block; margin: 0 4px 6px; padding: 0 15px; background-color: var(--btn-beautify-color, #777); color: #fff; line-height: 2; border-radius: 8px; } #article-container .btn-beautify.blue { --btn-beautify-color: #428bca; } #article-container .btn-beautify.pink { --btn-beautify-color: #ff69b4; } #article-container .btn-beautify.red { --btn-beautify-color: #f00; } #article-container .btn-beautify.purple { --btn-beautify-color: #6f42c1; } #article-container .btn-beautify.orange { --btn-beautify-color: #ff8c00; } #article-container .btn-beautify.green { --btn-beautify-color: #5cb85c; } #article-container .btn-beautify:hover { background-color: var(--btn-hover-color); } #article-container .btn-beautify i + span { margin-left: 6px; } #article-container .btn-beautify:not(.block) + .btn-beautify:not(.block) { margin: 0 4px 20px; } #article-container .btn-beautify.block { display: block; margin: 0 0 20px; width: fit-content; width: -moz-fit-content; } #article-container .btn-beautify.block.center { margin: 0 auto 20px; } #article-container .btn-beautify.block.right { margin: 0 0 20px auto; } #article-container .btn-beautify.larger { padding: 6px 15px; } #article-container .btn-beautify:hover { text-decoration: none; } #article-container .btn-beautify.outline { border: 1px solid transparent; border-color: var(--btn-beautify-color, #777); background-color: transparent; color: var(--btn-beautify-color, #777); } #article-container .btn-beautify.outline:hover { background-color: var(--btn-beautify-color, #777); } #article-container .btn-beautify.outline:hover { color: #fff !important; } .carousel { touch-action: none; overflow: hidden; display: -webkit-box; display: -ms-flexbox; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; background: transparent; height: fit-content; min-height: 600px; -webkit-perspective: 1000px; -webkit-perspective: 1000px; -moz-perspective: 1000px; -ms-perspective: 1000px; perspective: 1000px; -webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; } .drag-container, .spin-container { position: relative; display: -webkit-box; display: -ms-flexbox; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; margin: auto; -webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-transform: rotateX(-10deg); -webkit-transform: rotateX(-10deg); -moz-transform: rotateX(-10deg); -o-transform: rotateX(-10deg); -ms-transform: rotateX(-10deg); transform: rotateX(-10deg); } .drag-container img, .drag-container video { -webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; position: absolute; left: 0; top: 0; object-fit: cover; height: 100%; width: 100%; line-height: 200px; font-size: 50px; text-align: center; -webkit-box-shadow: 0 0 8px #fff; -webkit-box-shadow: 0 0 8px #fff; box-shadow: 0 0 8px #fff; -webkit-box-reflect: below 10px linear-gradient(transparent, transparent, rgba(0,0,0,0.333)); } .drag-container .img-alt.is-center { display: none; } .drag-container br { display: none; } .drag-container p { font-family: Serif; position: absolute; top: 100%; left: 50%; -webkit-transform: translate(-50%, -50%) rotateX(90deg); -webkit-transform: translate(-50%, -50%) rotateX(90deg); -moz-transform: translate(-50%, -50%) rotateX(90deg); -o-transform: translate(-50%, -50%) rotateX(90deg); -ms-transform: translate(-50%, -50%) rotateX(90deg); transform: translate(-50%, -50%) rotateX(90deg); color: #fff; } .drag-container img:hover, .drag-container video:hover { -webkit-box-shadow: 0 0 15px rgba(255,255,255,0.867); -webkit-box-shadow: 0 0 15px rgba(255,255,255,0.867); box-shadow: 0 0 15px rgba(255,255,255,0.867); -webkit-box-reflect: below 10px linear-gradient(transparent, transparent, rgba(0,0,0,0.467)); } .carousel-ground { width: 900px; height: 900px; position: absolute; top: 100%; left: 50%; -webkit-transform: translate(-50%, -50%) rotateX(90deg); -webkit-transform: translate(-50%, -50%) rotateX(90deg); -moz-transform: translate(-50%, -50%) rotateX(90deg); -o-transform: translate(-50%, -50%) rotateX(90deg); -ms-transform: translate(-50%, -50%) rotateX(90deg); transform: translate(-50%, -50%) rotateX(90deg); background: -webkit--webkit-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit--moz-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit--o-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit--ms-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); background: -webkit-radial-gradient(center center, farthest-side, rgba(153,153,153,0.2), transparent); } img.medium-zoom-image.entered.loaded.medium-zoom-image--opened { width: auto !important; } @-webkit-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-webkit-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @-moz-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-webkit-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-o-keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @keyframes spin { from { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } } @-moz-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @-webkit-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @-o-keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } @keyframes spinRevert { from { -webkit-transform: rotateY(360deg); -webkit-transform: rotateY(360deg); -moz-transform: rotateY(360deg); -o-transform: rotateY(360deg); -ms-transform: rotateY(360deg); transform: rotateY(360deg); } to { -webkit-transform: rotateY(0deg); -webkit-transform: rotateY(0deg); -moz-transform: rotateY(0deg); -o-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } } .checkbox { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } .checkbox input { -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; -o-appearance: none; -webkit-appearance: none; -moz-appearance: none; appearance: none; position: relative; height: 16px; width: 16px; -webkit-transition: all 0.15s ease-out 0s; -moz-transition: all 0.15s ease-out 0s; -o-transition: all 0.15s ease-out 0s; -ms-transition: all 0.15s ease-out 0s; transition: all 0.15s ease-out 0s; cursor: pointer; display: inline-block; outline: none; border-radius: 2px; -webkit-flex-shrink: 0; flex-shrink: 0; margin-right: 8px; border: 2px solid #2196f3; pointer-events: none; } .checkbox input[type=\"checkbox\"]:before { left: 1px; top: 5px; width: 0; height: 2px; -webkit-transition: all 0.2s ease-in; -moz-transition: all 0.2s ease-in; -o-transition: all 0.2s ease-in; -ms-transition: all 0.2s ease-in; transition: all 0.2s ease-in; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); } .checkbox input[type=\"checkbox\"]:after { right: 7px; bottom: 3px; width: 2px; height: 0; -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -ms-transition: all 0.2s ease-out; transition: all 0.2s ease-out; -webkit-transform: rotate(40deg); -moz-transform: rotate(40deg); -o-transform: rotate(40deg); -ms-transform: rotate(40deg); transform: rotate(40deg); -webkit-transform: rotate(40deg); -moz-transform: rotate(40deg); -ms-transform: rotate(40deg); -o-transform: rotate(40deg); -webkit-transition-delay: 0.25s; -moz-transition-delay: 0.25s; -o-transition-delay: 0.25s; -ms-transition-delay: 0.25s; transition-delay: 0.25s; } .checkbox input[type=\"checkbox\"]:checked { background: #2196f3; } .checkbox input[type=\"checkbox\"]:checked:before { left: 0; top: 7px; width: 6px; height: 2px; } .checkbox input[type=\"checkbox\"]:checked:after { right: 3px; bottom: 1px; width: 2px; height: 10px; } .checkbox.minus input[type=\"checkbox\"]:before { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 1px; top: 5px; width: 0; height: 2px; } .checkbox.minus input[type=\"checkbox\"]:after { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 1px; top: 5px; width: 0; height: 2px; } .checkbox.minus input[type=\"checkbox\"]:checked:before { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.minus input[type=\"checkbox\"]:checked:after { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.plus input[type=\"checkbox\"]:before { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 1px; top: 5px; width: 0; height: 2px; } .checkbox.plus input[type=\"checkbox\"]:after { -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); left: 5px; top: 1px; width: 2px; height: 0; } .checkbox.plus input[type=\"checkbox\"]:checked:before { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.plus input[type=\"checkbox\"]:checked:after { left: 5px; top: 1px; width: 2px; height: 10px; } .checkbox.times input[type=\"checkbox\"]:before { -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); left: 3px; top: 1px; width: 0; height: 2px; } .checkbox.times input[type=\"checkbox\"]:after { -webkit-transform: rotate(135deg); -moz-transform: rotate(135deg); -o-transform: rotate(135deg); -ms-transform: rotate(135deg); transform: rotate(135deg); right: 3px; top: 1px; width: 0; height: 2px; } .checkbox.times input[type=\"checkbox\"]:checked:before { left: 1px; top: 5px; width: 10px; height: 2px; } .checkbox.times input[type=\"checkbox\"]:checked:after { right: 1px; top: 5px; width: 10px; height: 2px; } .checkbox input[type=\"radio\"] { border-radius: 50%; } .checkbox input[type=\"radio\"]:before { content: \"\"; display: block; width: 8px; height: 8px; border-radius: 50%; margin: 2px; -webkit-transform: scale(0); -moz-transform: scale(0); -o-transform: scale(0); -ms-transform: scale(0); transform: scale(0); -webkit-transition: all 0.25s ease-out; -moz-transition: all 0.25s ease-out; -o-transition: all 0.25s ease-out; -ms-transition: all 0.25s ease-out; transition: all 0.25s ease-out; } .checkbox input[type=\"radio\"]:checked:before { -webkit-transform: scale(1); -moz-transform: scale(1); -o-transform: scale(1); -ms-transform: scale(1); transform: scale(1); background: var(--text-bg-hover); } .checkbox.red input { border-color: #fe5f58; } .checkbox.red input[type=\"checkbox\"]:checked { background: #fe5f58; } .checkbox.red input[type=\"radio\"]:checked:before { background: #fe5f58; } .checkbox.green input { border-color: #3dc550; } .checkbox.green input[type=\"checkbox\"]:checked { background: #3dc550; } .checkbox.green input[type=\"radio\"]:checked:before { background: #3dc550; } .checkbox.yellow input { border-color: #ffbd2b; } .checkbox.yellow input[type=\"checkbox\"]:checked { background: #ffbd2b; } .checkbox.yellow input[type=\"radio\"]:checked:before { background: #ffbd2b; } .checkbox.cyan input { border-color: #1bcdfc; } .checkbox.cyan input[type=\"checkbox\"]:checked { background: #1bcdfc; } .checkbox.cyan input[type=\"radio\"]:checked:before { background: #1bcdfc; } .checkbox.blue input { border-color: #2196f3; } .checkbox.blue input[type=\"checkbox\"]:checked { background: #2196f3; } .checkbox.blue input[type=\"radio\"]:checked:before { background: #2196f3; } .checkbox p { display: inline-block; margin-top: 2px !important; margin-bottom: 0 !important; } .checkbox input[type=\"checkbox\"]:before, .checkbox input[type=\"checkbox\"]:after { position: absolute; content: \"\"; background: #fff; } [data-theme=\"dark\"] .checkbox { filter: brightness(0.7); } details.folding-tag { display: block; padding: 16px; margin: 1em 0; border-radius: 4px; background: #fff; font-size: var(--global-font-size); -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; border: 1px solid #f6f6f6; } details.folding-tag summary { cursor: pointer; padding: 16px; margin: -16px; border-radius: 4px; color: rgba(68,68,68,0.7); font-size: 0.875rem !important; font-weight: bold; position: relative; line-height: normal; } details.folding-tag summary > p, details.folding-tag summary > h1, details.folding-tag summary > h2, details.folding-tag summary > h3, details.folding-tag summary > h4, details.folding-tag summary > h5, details.folding-tag summary > h6 { display: inline; border-bottom: none !important; } details.folding-tag summary:hover { color: #444; } details.folding-tag summary:hover:after { position: absolute; content: '+'; text-align: center; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -o-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); right: 16px; } details.folding-tag >summary { background: #f6f6f6; } details.folding-tag[purple] { border-color: #fae7fd; } details.folding-tag[purple] >summary { background: #fae7fd; } details.folding-tag[blue] { border-color: #e8f4fd; } details.folding-tag[blue] >summary { background: #e8f4fd; } details.folding-tag[cyan] { border-color: #e8fafe; } details.folding-tag[cyan] >summary { background: #e8fafe; } details.folding-tag[green] { border-color: #ebf9ed; } details.folding-tag[green] >summary { background: #ebf9ed; } details.folding-tag[yellow] { border-color: #fff8e9; } details.folding-tag[yellow] >summary { background: #fff8e9; } details.folding-tag[orange] { border-color: #fdf1e7; } details.folding-tag[orange] >summary { background: #fdf1e7; } details.folding-tag[red] { border-color: #feefee; } details.folding-tag[red] >summary { background: #feefee; } details.folding-tag[open] { border-color: rgba(68,68,68,0.2); } details.folding-tag[open] >summary { border-bottom: 1px solid rgba(68,68,68,0.2); border-bottom-left-radius: 0; border-bottom-right-radius: 0; } details.folding-tag[open][purple] { border-color: rgba(208,23,238,0.3); } details.folding-tag[open][purple] >summary { border-bottom-color: rgba(208,23,238,0.3); } details.folding-tag[open][blue] { border-color: rgba(33,150,243,0.3); } details.folding-tag[open][blue] >summary { border-bottom-color: rgba(33,150,243,0.3); } details.folding-tag[open][cyan] { border-color: rgba(27,205,252,0.3); } details.folding-tag[open][cyan] >summary { border-bottom-color: rgba(27,205,252,0.3); } details.folding-tag[open][green] { border-color: rgba(61,197,80,0.3); } details.folding-tag[open][green] >summary { border-bottom-color: rgba(61,197,80,0.3); } details.folding-tag[open][yellow] { border-color: rgba(255,189,43,0.3); } details.folding-tag[open][yellow] >summary { border-bottom-color: rgba(255,189,43,0.3); } details.folding-tag[open][orange] { border-color: rgba(236,118,22,0.3); } details.folding-tag[open][orange] >summary { border-bottom-color: rgba(236,118,22,0.3); } details.folding-tag[open][red] { border-color: rgba(254,95,88,0.3); } details.folding-tag[open][red] >summary { border-bottom-color: rgba(254,95,88,0.3); } details.folding-tag[open] >summary { color: #444; margin-bottom: 0; } details.folding-tag[open] >summary:hover:after { content: '-'; } details.folding-tag[open] >div.content { padding: 16px; margin: -16px; margin-top: 0; } details.folding-tag[open] >div.content p>a:hover { text-decoration: underline; } details.folding-tag[open] >div.content > p:first-child, details.folding-tag[open] >div.content > .tabs:first-child, details.folding-tag[open] >div.content > ul:first-child, details.folding-tag[open] >div.content > ol:first-child, details.folding-tag[open] >div.content > .highlight:first-child, details.folding-tag[open] >div.content > .note:first-child, details.folding-tag[open] >div.content > details:first-child { margin-top: 0; } details.folding-tag[open] >div.content > p:last-child, details.folding-tag[open] >div.content > .tabs:last-child, details.folding-tag[open] >div.content > ul:last-child, details.folding-tag[open] >div.content > ol:last-child, details.folding-tag[open] >div.content > .highlight:last-child, details.folding-tag[open] >div.content > .note:last-child, details.folding-tag[open] >div.content > details:last-child { margin-bottom: 0; } [data-theme=\"dark\"] details[open] > div.content { padding: 16px; margin: -16px; margin-top: 0; background: #2c2d2d; color: rgba(255,255,255,0.6); } [data-theme=\"dark\"] details > summary { filter: brightness(0.7); } #article-container figure.gallery-group { position: relative; float: left; overflow: hidden; margin: 6px 4px; width: calc(50% - 8px); height: 250px; border-radius: 8px; background: #000; -webkit-transform: translate3d(0, 0, 0); } @media screen and (max-width: 600px) { #article-container figure.gallery-group { width: calc(100% - 8px); } } #article-container figure.gallery-group:hover img { opacity: 0.4; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\"; filter: alpha(opacity=40); -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } #article-container figure.gallery-group:hover .gallery-group-name::after { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } #article-container figure.gallery-group:hover p { opacity: 1; -ms-filter: none; filter: none; -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } #article-container figure.gallery-group img { position: relative; margin: 0; max-width: none; width: calc(100% + 20px); height: 250px; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; opacity: 0.8; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\"; filter: alpha(opacity=80); -webkit-transition: all 0.3s, filter 375ms ease-in 0.2s; -moz-transition: all 0.3s, filter 375ms ease-in 0.2s; -o-transition: all 0.3s, filter 375ms ease-in 0.2s; -ms-transition: all 0.3s, filter 375ms ease-in 0.2s; transition: all 0.3s, filter 375ms ease-in 0.2s; -webkit-transform: translate3d(-10px, 0, 0); -moz-transform: translate3d(-10px, 0, 0); -o-transform: translate3d(-10px, 0, 0); -ms-transform: translate3d(-10px, 0, 0); transform: translate3d(-10px, 0, 0); object-fit: cover; } #article-container figure.gallery-group figcaption { position: absolute; top: 0; left: 0; padding: 30px; width: 100%; height: 100%; color: #fff; text-transform: uppercase; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; } #article-container figure.gallery-group figcaption > a { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1000; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); } #article-container figure.gallery-group p { margin: 0; padding: 8px 0 0; letter-spacing: 1px; font-size: 1.1em; line-height: 1.5; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; -moz-transition: opacity 0.35s, -moz-transform 0.35s; -o-transition: opacity 0.35s, -o-transform 0.35s; -ms-transition: opacity 0.35s, -ms-transform 0.35s; transition: opacity 0.35s, transform 0.35s; -webkit-transform: translate3d(100%, 0, 0); -moz-transform: translate3d(100%, 0, 0); -o-transform: translate3d(100%, 0, 0); -ms-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); -webkit-line-clamp: 4; } #article-container figure.gallery-group .gallery-group-name { position: relative; margin: 0; padding: 8px 0; font-weight: bold; font-size: 1.65em; line-height: 1.5; -webkit-line-clamp: 2; } #article-container figure.gallery-group .gallery-group-name:after { position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background: #fff; content: ''; -webkit-transition: -webkit-transform 0.35s; -moz-transition: -moz-transform 0.35s; -o-transition: -o-transform 0.35s; -ms-transition: -ms-transform 0.35s; transition: transform 0.35s; -webkit-transform: translate3d(-100%, 0, 0); -moz-transform: translate3d(-100%, 0, 0); -o-transform: translate3d(-100%, 0, 0); -ms-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } #article-container .gallery-group-main { overflow: auto; padding: 0 0 16px; } #article-container .gallery { margin: 0 0 16px; text-align: center; } #article-container .gallery .fj-gallery { opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); } #article-container .gallery .fj-gallery .img-alt { display: none; } #article-container .gallery .fj-gallery.lazyload + button { display: inline-block; } #article-container .gallery .fj-gallery .gallery-data { display: none; } #article-container .gallery button { display: none; margin-top: 25px; padding: 10px; width: 9em; border-radius: 5px; background: var(--btn-bg); color: var(--btn-color); font-weight: bold; font-size: 1.1em; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -o-transition: all 0.3s; -ms-transition: all 0.3s; transition: all 0.3s; } #article-container .gallery button > * { -webkit-transition: all 0.4s; -moz-transition: all 0.4s; -o-transition: all 0.4s; -ms-transition: all 0.4s; transition: all 0.4s; } #article-container .gallery button i { width: 0; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); } #article-container .gallery button:hover { background: var(--btn-hover-color); } #article-container .gallery button:hover i { margin-left: 2px; width: 20px; opacity: 1; -ms-filter: none; filter: none; } a.ghcard { display: inline-block; line-height: 0; } .md .ghcard-group { -webkit-column-count: 2; -moz-column-count: 2; column-count: 2; -webkit-column-gap: 0; -moz-column-gap: 0; column-gap: 0; margin: 0 -8px; } .md .ghcard-group .ghcard { margin: 8px; } blockquote.pullquote { position: relative; max-width: 45%; font-size: 110%; } blockquote.pullquote.left { float: left; margin: 1em 0.5em 0 0; } blockquote.pullquote.right { float: right; margin: 1em 0 0 0.5em; } .video-container { position: relative; overflow: hidden; margin-bottom: 16px; padding-top: 56.25%; height: 0; } .video-container iframe { position: absolute; top: 0; left: 0; margin-top: 0; width: 100%; height: 100%; } .hide-inline > .hide-button, .hide-block > .hide-button { display: inline-block; padding: 5px 18px; background: #49b1f5; color: var(--white); } .hide-inline > .hide-button:hover, .hide-block > .hide-button:hover { background-color: var(--btn-hover-color); } .hide-inline > .hide-button.open, .hide-block > .hide-button.open { display: none; } .hide-inline > .hide-button.open + div, .hide-block > .hide-button.open + div { display: block; } .hide-inline > .hide-button.open + span, .hide-block > .hide-button.open + span { display: inline; } .hide-inline > .hide-content, .hide-block > .hide-content { display: none; } .hide-inline > .hide-button { margin: 0 6px; } .hide-inline > .hide-content { margin: 0 6px; } .hide-block { margin: 0 0 16px; } .toggle { margin-bottom: 20px; border: 1px solid #f0f0f0; } .toggle > .toggle-button { padding: 6px 15px; background: #f0f0f0; color: #1f2d3d; cursor: pointer; } .toggle > .toggle-content { margin: 30px 24px; } .md .img { object-fit: contain; } img.inline { display: inline !important; vertical-align: middle; -webkit-transform: translateY(-4px); -moz-transform: translateY(-4px); -o-transform: translateY(-4px); -ms-transform: translateY(-4px); transform: translateY(-4px); } p .img-alt { display: inline-block; width: 100%; } s, del { color: #8e8e8e; text-decoration-color: #8e8e8e; } u { color: #444; text-decoration: none; border-bottom: 1px solid #fe5f58; } emp { color: #444; border-bottom: 4px dotted #fe5f58; } wavy { color: #444; text-decoration-style: wavy; text-decoration-line: underline; text-decoration-color: #fe5f58; } psw { color: transparent; background: #a1a1a1; border-radius: 2px; -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } psw:hover { color: #444; background: none; } kbd { display: inline-block; color: #666; font: bold 9pt arial; text-decoration: none; text-align: center; padding: 2px 5px; margin: 0 5px; background: #eff0f2; -moz-border-radius: 4px; border-radius: 4px; border-top: 1px solid #f5f5f5; -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; -moz-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; text-shadow: 0 1px 0 #f5f5f5; } #article-container .inline-img { display: inline; margin: 0 3px; height: 1.1em; vertical-align: text-bottom; } .hl-label { padding: 2px 4px; border-radius: 3px; color: #fff; } .hl-label.default { background-color: #777; } .hl-label.blue { background-color: #428bca; } .hl-label.pink { background-color: #ff69b4; } .hl-label.red { background-color: #f00; } .hl-label.purple { background-color: #6f42c1; } .hl-label.orange { background-color: #ff8c00; } .hl-label.green { background-color: #5cb85c; } #article-container a.link_card { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; margin: 10px 0; color: var(--font-color) !important; text-decoration: none !important; background: var(--heo-background); border-radius: 8px; border: var(--style-border); padding: 12px; } #article-container a.link_card:hover { background: var(--heo-theme); color: #fff !important; } #article-container a.link_card .link_icon, #article-container a.link_card .link_content { height: 4rem; } #article-container a.link_card .link_icon img, #article-container a.link_card .link_icon svg { height: 4rem; width: 4rem; border-radius: 6px !important; } #article-container a.link_card .link_content { margin-left: 1rem; width: calc(100% - 6rem); overflow: hidden; line-height: 1.5; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-orient: vertical; -moz-box-orient: vertical; -o-box-orient: vertical; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } #article-container a.link_card .link_content .link_title { font-weight: bold; font-size: 1.2rem; } #article-container a.link_card .link_content .link_title, #article-container a.link_card .link_content .link_desc { word-break: break-all; overflow: hidden; -o-text-overflow: ellipsis; text-overflow: ellipsis; } #article-container a.link_card .link_content:not(:has(.link_desc)) .link_title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } #article-container a.link_card .link_content .link_desc { opacity: 0.6; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\"; filter: alpha(opacity=60); } #article-container a.link_card .link_content .link_desc, #article-container a.link_card .link_content:has(.link_desc) .link_title { white-space: nowrap; } audio, video { border-radius: 4px; max-width: 100%; } video { z-index: 1; -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } video:hover { -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); } div.video { line-height: 0; text-align: center; } div.videos { max-width: calc(100% + 2 * 4px); display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-box-align: end; -moz-box-align: end; -o-box-align: end; -ms-flex-align: end; -webkit-align-items: flex-end; align-items: flex-end; margin: 1em -4px; } div.videos .video, div.videos iframe { width: 100%; margin: 4px; } div.videos iframe { border-radius: 4px; width: 100%; min-height: 300px; } div.videos.left { -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; } div.videos.center { -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } div.videos.right { -webkit-box-pack: end; -moz-box-pack: end; -o-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } div.videos.stretch { -webkit-box-align: stretch; -moz-box-align: stretch; -o-box-align: stretch; -ms-flex-align: stretch; -webkit-align-items: stretch; align-items: stretch; } div.videos[col='1'] .video, div.videos[col='1'] iframe { width: 100%; } div.videos[col='2'] .video, div.videos[col='2'] iframe { width: calc(50% - 2 * 4px); } div.videos[col='3'] .video, div.videos[col='3'] iframe { width: calc(33.33% - 2 * 4px); } div.videos[col='4'] .video, div.videos[col='4'] iframe { width: calc(25% - 2 * 4px); } [data-theme=\"dark\"] audio, [data-theme=\"dark\"] video { filter: brightness(0.7); } span.nota { color: #99a9bf; text-decoration: none; word-wrap: break-word; -webkit-transition: all 0.2s; -moz-transition: all 0.2s; -o-transition: all 0.2s; -ms-transition: all 0.2s; transition: all 0.2s; overflow-wrap: break-word; } span.nota:hover { color: var(--text-bg-hover); } span.nota:hover:before { position: fixed; width: fit-content; max-width: 80%; margin: auto; left: 0; right: 0; top: 10%; border-radius: 10px; text-align: center; z-index: 100; content: attr(data-nota); font-size: 16px; color: #fff; padding: 10px; background-color: var(--text-bg-hover); } [data-theme=dark] span.nota:hover:before { background-color: rgba(18,18,18,0.8); } .note { position: relative; margin: 0 0 20px; padding: 15px; border-radius: 3px; } .note.icon-padding { padding-left: 3em; } .note > .note-icon { position: absolute; top: calc(50% - 0.5em); left: 0.8em; font-size: larger; } .note.blue:not(.disabled) { border-left-color: #428bca !important; } .note.blue:not(.disabled).modern { border-left-color: transparent !important; color: #428bca; } .note.blue:not(.disabled):not(.simple) { background: #e3eef7 !important; } .note.blue > .note-icon { color: #428bca; } .note.pink:not(.disabled) { border-left-color: #ff69b4 !important; } .note.pink:not(.disabled).modern { border-left-color: transparent !important; color: #ff69b4; } .note.pink:not(.disabled):not(.simple) { background: #ffe9f4 !important; } .note.pink > .note-icon { color: #ff69b4; } .note.red:not(.disabled) { border-left-color: #f00 !important; } .note.red:not(.disabled).modern { border-left-color: transparent !important; color: #f00; } .note.red:not(.disabled):not(.simple) { background: #ffd9d9 !important; } .note.red > .note-icon { color: #f00; } .note.purple:not(.disabled) { border-left-color: #6f42c1 !important; } .note.purple:not(.disabled).modern { border-left-color: transparent !important; color: #6f42c1; } .note.purple:not(.disabled):not(.simple) { background: #e9e3f6 !important; } .note.purple > .note-icon { color: #6f42c1; } .note.orange:not(.disabled) { border-left-color: #ff8c00 !important; } .note.orange:not(.disabled).modern { border-left-color: transparent !important; color: #ff8c00; } .note.orange:not(.disabled):not(.simple) { background: #ffeed9 !important; } .note.orange > .note-icon { color: #ff8c00; } .note.green:not(.disabled) { border-left-color: #5cb85c !important; } .note.green:not(.disabled).modern { border-left-color: transparent !important; color: #5cb85c; } .note.green:not(.disabled):not(.simple) { background: #e7f4e7 !important; } .note.green > .note-icon { color: #5cb85c; } .note.simple { border: 1px solid #eee; border-left-width: 5px; } .note.modern { border: 1px solid transparent !important; background-color: #f5f5f5; color: #4c4948; } .note.flat { border: initial; border-left: 5px solid #eee; background-color: #f9f9f9; color: #4c4948; } .note h2, .note h3, .note h4, .note h5, .note h6 { margin-top: 3px; margin-bottom: 0; padding-top: 0 !important; border-bottom: initial; } .note p:first-child, .note ul:first-child, .note ol:first-child, .note table:first-child, .note pre:first-child, .note blockquote:first-child, .note img:first-child { margin-top: 0 !important; } .note p:last-child, .note ul:last-child, .note ol:last-child, .note table:last-child, .note pre:last-child, .note blockquote:last-child, .note img:last-child { margin-bottom: 0 !important; } .note:not(.no-icon) { padding-left: 3em; } .note:not(.no-icon)::before { position: absolute; top: calc(50% - 0.95em); left: 0.8em; font-size: larger; } .note.default.flat { background: #f7f7f7; } .note.default.modern { border-color: #e1e1e1; background: #f3f3f3; color: #666; } .note.default.modern a:not(.btn) { color: #666; } .note.default.modern a:not(.btn):hover { color: #454545; } .note.default:not(.modern) { border-left-color: #777; } .note.default:not(.modern) h2, .note.default:not(.modern) h3, .note.default:not(.modern) h4, .note.default:not(.modern) h5, .note.default:not(.modern) h6 { color: #777; } .note.default:not(.no-icon)::before { content: '\\f0a9'; } .note.default:not(.no-icon):not(.modern)::before { color: #777; } .note.primary.flat { background: #f5f0fa; } .note.primary.modern { border-color: #e1c2ff; background: #f3daff; color: #6f42c1; } .note.primary.modern a:not(.btn) { color: #6f42c1; } .note.primary.modern a:not(.btn):hover { color: #453298; } .note.primary:not(.modern) { border-left-color: #6f42c1; } .note.primary:not(.modern) h2, .note.primary:not(.modern) h3, .note.primary:not(.modern) h4, .note.primary:not(.modern) h5, .note.primary:not(.modern) h6 { color: #6f42c1; } .note.primary:not(.no-icon)::before { content: '\\f055'; } .note.primary:not(.no-icon):not(.modern)::before { color: #6f42c1; } .note.info.flat { background: #eef7fa; } .note.info.modern { border-color: #b3e5ef; background: #d9edf7; color: #31708f; } .note.info.modern a:not(.btn) { color: #31708f; } .note.info.modern a:not(.btn):hover { color: #215761; } .note.info:not(.modern) { border-left-color: #428bca; } .note.info:not(.modern) h2, .note.info:not(.modern) h3, .note.info:not(.modern) h4, .note.info:not(.modern) h5, .note.info:not(.modern) h6 { color: #428bca; } .note.info:not(.no-icon)::before { content: '\\f05a'; } .note.info:not(.no-icon):not(.modern)::before { color: #428bca; } .note.success.flat { background: #eff8f0; } .note.success.modern { border-color: #d0e6be; background: #dff0d8; color: #3c763d; } .note.success.modern a:not(.btn) { color: #3c763d; } .note.success.modern a:not(.btn):hover { color: #32562c; } .note.success:not(.modern) { border-left-color: #5cb85c; } .note.success:not(.modern) h2, .note.success:not(.modern) h3, .note.success:not(.modern) h4, .note.success:not(.modern) h5, .note.success:not(.modern) h6 { color: #5cb85c; } .note.success:not(.no-icon)::before { content: '\\f058'; } .note.success:not(.no-icon):not(.modern)::before { color: #5cb85c; } .note.warning.flat { background: #fdf8ea; } .note.warning.modern { border-color: #fae4cd; background: #fcf4e3; color: #8a6d3b; } .note.warning.modern a:not(.btn) { color: #8a6d3b; } .note.warning.modern a:not(.btn):hover { color: #714f30; } .note.warning:not(.modern) { border-left-color: #f0ad4e; } .note.warning:not(.modern) h2, .note.warning:not(.modern) h3, .note.warning:not(.modern) h4, .note.warning:not(.modern) h5, .note.warning:not(.modern) h6 { color: #f0ad4e; } .note.warning:not(.no-icon)::before { content: '\\f06a'; } .note.warning:not(.no-icon):not(.modern)::before { color: #f0ad4e; } .note.danger.flat { background: #fcf1f2; } .note.danger.modern { border-color: #ebcdd2; background: #f2dfdf; color: #a94442; } .note.danger.modern a:not(.btn) { color: #a94442; } .note.danger.modern a:not(.btn):hover { color: #84333f; } .note.danger:not(.modern) { border-left-color: #d9534f; } .note.danger:not(.modern) h2, .note.danger:not(.modern) h3, .note.danger:not(.modern) h4, .note.danger:not(.modern) h5, .note.danger:not(.modern) h6 { color: #d9534f; } .note.danger:not(.no-icon)::before { content: '\\f056'; } .note.danger:not(.no-icon):not(.modern)::before { color: #d9534f; } @media (min-width: 1200px) { .poem { margin: 0 auto; height: auto; writing-mode: vertical-rl; writing-mode: tb-rl; } .poem p { text-decoration: underline; text-decoration-color: rgba(193,11,11,0.72); text-decoration-style: dashed; } } @font-face { font-family: 'Poem'; src: url(\"https://unpkg.zhimg.com/akilar-candyassets/fonts/Poem.ttf\"); font-display: swap; } .poem p { font-family: 'Poem', 'KaiTi', sans-serif !important; font-size: 25px; text-align: center; } .poem-title { font-family: 'Poem', 'KaiTi', sans-serif !important; font-size: 2.5em; text-align: center; } .poem-author { text-align: center !important; font-family: 'Poem', 'KaiTi', sans-serif !important; font-size: 16px; color: #424242; } .progress { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; font-size: var(--global-font-size); background-color: rgba(88,88,88,0.6); border-radius: 0.25rem; margin: 1rem 0; height: 2rem; overflow: hidden; } .progress p { margin: 0 0 0 10px !important; } .progress .progress-bar-animated { background-color: #a7b5fd !important; -webkit-animation: progress-bar-stripes 1s linear infinite; -moz-animation: progress-bar-stripes 1s linear infinite; -o-animation: progress-bar-stripes 1s linear infinite; -ms-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite; } .progress .progress-bar-striped { background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: -ms-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress .progress-bar { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-orient: vertical; -moz-box-orient: vertical; -o-box-orient: vertical; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; overflow: visible; color: #fff; text-align: center; white-space: nowrap; background-color: #0d6efd; -webkit-transition: width 0.6s ease; -moz-transition: width 0.6s ease; -o-transition: width 0.6s ease; -ms-transition: width 0.6s ease; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress .progress-bar { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; transition: none; } } .progress .bg-green { background-color: #28a745 !important; } .progress .bg-yellow { background-color: #ffc107 !important; } .progress .bg-red { background-color: #dc3545 !important; } .progress .bg-cyan { background-color: #17a2b8 !important; } .progress .bg-blue { background-color: #0d6efd !important; } .progress .bg-gray { background-color: #7f838a !important; } @-moz-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @-webkit-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @-o-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } :root { --referto-text-color: #e9a218; --referto-text-hover-color: #2c7fe7; --referto-literature-background-color: #318efd; --referto-title-background-color: #183153; --referto-content-text-color: #f1f1ef; --referfrom-text-shadow: rgba(35,35,35,0.5); --referfrom-text-color: #f1f1ef; --referfrom-text-hover-color: #f2b94b; --referfrom-link-color: #403e3b; --referfrom-link-hover-color: #235dac; --referfrom-background-color: #f1f1ef; --reference-anchor-color: #183153; --reference-anchor-up-color: #318efd; } [data-theme=\"dark\"] { --referto-text-color: #f2b94b; --referto-text-hover-color: #2c7fe7; --referto-literature-background-color: #5c6167; --referto-title-background-color: #090a0b; --referto-content-text-color: #f1f1ef; --referfrom-text-shadow: rgba(35,35,35,0.5); --referfrom-text-color: #f1f1ef; --referfrom-text-hover-color: #f2b94b; --referfrom-link-color: #f1f1ef; --referfrom-link-hover-color: #f2b94b; --referfrom-background-color: rgba(92,97,103,0.68); --reference-anchor-color: #090a0b; --reference-anchor-up-color: #183153; } .hidden-anchor { position: relative; top: -150px; display: inline-block; height: 0; overflow: hidden; } .reference a { display: inline-block; color: var(--referto-text-color) !important; font-weight: bold; -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } .reference:hover a { -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; text-decoration: none !important; color: var(--referto-text-hover-color) !important; } .reference:hover + .reference-bubble .reference-item { -webkit-transform: translate(-40px, 10px) rotateX(0deg); -moz-transform: translate(-40px, 10px) rotateX(0deg); -o-transform: translate(-40px, 10px) rotateX(0deg); -ms-transform: translate(-40px, 10px) rotateX(0deg); transform: translate(-40px, 10px) rotateX(0deg); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 1; -ms-filter: none; filter: none; } .reference-bubble { display: inline-block; } .reference-item { -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; opacity: 0; -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\"; filter: alpha(opacity=0); z-index: 99; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; position: absolute; -webkit-transform: translate(-40px, 10px) rotateX(90deg); -moz-transform: translate(-40px, 10px) rotateX(90deg); -o-transform: translate(-40px, 10px) rotateX(90deg); -ms-transform: translate(-40px, 10px) rotateX(90deg); transform: translate(-40px, 10px) rotateX(90deg); width: auto; height: auto; clip-path: polygon(5px 10px, 20px 10px, 30px 0, 40px 10px, calc(100% - 5px) 10px, 100% 15px, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0 calc(100% - 5px), 0 15px, 5px 10px); } .reference-literature { max-width: 200px; padding: 20px 10px 10px 10px; background: var(--referto-literature-background-color); color: var(--referto-content-text-color) !important; word-wrap: break-word; word-break: break-all; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } .reference-title { padding: 20px 10px 10px 10px; background: var(--referto-title-background-color); color: var(--referto-content-text-color) !important; writing-mode: vertical-lr; display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } .reference-source { font-size: 16px; height: auto; line-height: 26px; width: fit-content; margin: 5px 0; max-width: 90%; background: var(--referfrom-background-color); -webkit-box-shadow: 1px 1px 1px var(--referfrom-text-shadow); box-shadow: 1px 1px 1px var(--referfrom-text-shadow); border-radius: 8px; padding-right: 10px; } .reference-source pangu { display: none; } a.reference-anchor { border-bottom-left-radius: 5px; border-top-left-radius: 5px; color: var(--referfrom-text-color) !important; background: var(--reference-anchor-color); height: 30px; display: inline-block; width: fit-content; padding: 0px 0px 0px 10px; } a.reference-anchor:hover { color: var(--referfrom-text-hover-color) !important; text-decoration: none !important; } a.reference-anchor:hover .reference-anchor-up { color: var(--referfrom-text-hover-color) !important; } a.reference-link { color: var(--referfrom-link-color) !important; padding: 0px 10px; } a.reference-link:hover { color: var(--referfrom-link-hover-color) !important; text-decoration: none !important; } .reference-anchor-up { color: var(--referfrom-text-color) !important; height: 30px; width: 40px; padding: 0px 0px 0px 10px; background: var(--reference-anchor-up-color); display: -webkit-inline-box !important; display: -moz-inline-box !important; display: -webkit-inline-flex !important; display: -ms-inline-flexbox !important; display: inline-box !important; display: inline-flex !important; -webkit-box-align: center; -moz-box-align: center; -o-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; -webkit-box-pack: center; -moz-box-pack: center; -o-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; clip-path: polygon(0 0, 10px 50%, 0 100%, 100% 100%, 100% 0); } .site-card-group { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-pack: start; -moz-box-pack: start; -o-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; margin: -8px; -webkit-box-align: stretch; -moz-box-align: stretch; -o-box-align: stretch; -ms-flex-align: stretch; -webkit-align-items: stretch; align-items: stretch; } .site-card { margin: 8px; width: calc(100% / 4 - 16px); display: block; line-height: 1.4; height: 100%; } @media screen and (min-width: 2048px) { .site-card { width: calc(100% / 5 - 16px); } } @media screen and (max-width: 768px) { .site-card { width: calc(100% / 3 - 16px); } } @media screen and (max-width: 500px) { .site-card { width: calc(100% / 2 - 16px); } } .site-card .img { width: 100%; height: 120px; overflow: hidden; border-radius: 6px; -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); background: #f6f6f6; } @media screen and (max-width: 500px) { .site-card .img { height: 100px; } } .site-card .img img { width: 100%; height: 100%; pointer-events: none; -webkit-transition: -webkit-transform 2s ease; -moz-transition: -moz-transform 2s ease; -o-transition: -o-transform 2s ease; -ms-transition: -ms-transform 2s ease; transition: transform 2s ease; object-fit: cover; } .site-card .info { margin-top: 8px; } .site-card .info img { width: 32px; height: 32px; pointer-events: none; border-radius: 16px; float: left; margin-right: 8px; margin-top: 2px; } .site-card .info span { display: block; } .site-card .info .title { font-weight: 600; font-size: var(--global-font-size); color: #444; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; -webkit-line-clamp: 1; -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } .site-card .info .desc { font-size: var(--global-font-size); word-wrap: break-word; line-height: 1.2; color: #888; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; -webkit-line-clamp: 2; } .site-card .img { -webkit-transition: all 0.28s ease; -moz-transition: all 0.28s ease; -o-transition: all 0.28s ease; -ms-transition: all 0.28s ease; transition: all 0.28s ease; -moz-transition: all 0.28s ease; -webkit-transition: all 0.28s ease; -o-transition: all 0.28s ease; } .site-card:hover .img { -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); } .site-card:hover .info .title { color: #ff5722; } p.p.subtitle { font-weight: bold; color: #44b299; font-size: 1.25rem !important; padding-top: 1.5rem; } p.p.subtitle:first-child { padding-top: 1rem; } span.p.left, p.p.left { display: block; text-align: left; } span.p.center, p.p.center { display: block; text-align: center; } span.p.right, p.p.right { display: block; text-align: right; } span.p.small, p.p.small { font-size: var(--global-font-size); } span.p.large, p.p.large { font-size: 2.5rem; line-height: 1.4; } span.p.huge, p.p.huge { font-size: 4rem; line-height: 1.4; } span.p.ultra, p.p.ultra { font-size: 6rem; line-height: 1.4; } span.p.small, p.p.small, span.p.large, p.p.large, span.p.huge, p.p.huge, span.p.ultra, p.p.ultra { margin: 0; padding: 0; } span.p.bold, p.p.bold { font-weight: bold; } span.p.h1, p.p.h1, span.p.h2, p.p.h2 { padding-bottom: 0.2rem; font-weight: 500; } span.p.h1, p.p.h1 { font-size: 1.625rem; color: var(--color-h1); padding-top: 2em; } span.p.h2, p.p.h2 { font-size: 1.625rem; color: var(--color-h2); padding-top: 2em; border-bottom: 1px solid rgba(68,68,68,0.1); } span.p.h3, p.p.h3 { font-size: 1.375rem; color: var(--color-h3); padding-top: 2em; } span.p.h4, p.p.h4 { font-size: 1.125rem; color: var(--color-h4); padding-top: 2em; } span.p.h5, p.p.h5 { font-size: 1rem; color: var(--color-h5); padding-top: 1.5em; } span.p.red, p.p.red { color: #e8453c; } span.p.yellow, p.p.yellow { color: #fcec60; } span.p.green, p.p.green { color: #3dc550; } span.p.cyan, p.p.cyan { color: #1bcdfc; } span.p.blue, p.p.blue { color: #2196f3; } span.p.purple, p.p.purple { color: #9c27b0; } span.p.gray, p.p.gray { color: #999; } #article-container .tabs { position: relative; margin: 0 0 20px; border-right: 1px solid var(--tab-border-color); border-bottom: 1px solid var(--tab-border-color); border-left: 1px solid var(--tab-border-color); } #article-container .tabs > .nav-tabs { display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: box; display: flex; -webkit-box-lines: multiple; -moz-box-lines: multiple; -o-box-lines: multiple; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; margin: 0; padding: 0; background: var(--tab-botton-bg); } #article-container .tabs > .nav-tabs > .tab { margin: 0; padding: 0; list-style: none; } @media screen and (max-width: 768px) { #article-container .tabs > .nav-tabs > .tab { -webkit-box-flex: 1; -moz-box-flex: 1; -o-box-flex: 1; -ms-box-flex: 1; box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; } } #article-container .tabs > .nav-tabs > .tab button { display: block; padding: 8px 18px; width: 100%; border-top: 2px solid var(--tab-border-color); background: var(--tab-botton-bg); color: var(--tab-botton-color); line-height: 2; -webkit-transition: all 0.4s; -moz-transition: all 0.4s; -o-transition: all 0.4s; -ms-transition: all 0.4s; transition: all 0.4s; } #article-container .tabs > .nav-tabs > .tab button i { width: 1.5em; } #article-container .tabs > .nav-tabs > .tab.active button { border-top: 2px solid #49b1f5; background: var(--tab-button-active-bg); cursor: default; } #article-container .tabs > .nav-tabs > .tab:not(.active) button:hover { border-top: 2px solid var(--tab-button-hover-bg); background: var(--tab-button-hover-bg); } #article-container .tabs > .tab-contents .tab-item-content { position: relative; display: none; padding: 36px 24px; } @media screen and (max-width: 768px) { #article-container .tabs > .tab-contents .tab-item-content { padding: 24px 14px; } } #article-container .tabs > .tab-contents .tab-item-content.active { display: block; -webkit-animation: tabshow 0.5s; -moz-animation: tabshow 0.5s; -o-animation: tabshow 0.5s; -ms-animation: tabshow 0.5s; animation: tabshow 0.5s; } #article-container .tabs .tab-to-top { position: relative; display: block; margin: 0 0 0 auto; color: #99a9bf; } @-moz-keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } @-webkit-keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } @-o-keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } @keyframes tabshow { 0% { -webkit-transform: translateY(15px); -moz-transform: translateY(15px); -o-transform: translateY(15px); -ms-transform: translateY(15px); transform: translateY(15px); } 100% { -webkit-transform: translateY(0); -moz-transform: translateY(0); -o-transform: translateY(0); -ms-transform: translateY(0); transform: translateY(0); } } #article-container .timeline { margin: 0 0 20px 10px; padding: 14px 20px 5px; border-left: 2px solid var(--timeline-color, #49b1f5); } #article-container .timeline.blue { --timeline-color: #428bca; --timeline-bg: rgba(66,139,202, 0.2); } #article-container .timeline.pink { --timeline-color: #ff69b4; --timeline-bg: rgba(255,105,180, 0.2); } #article-container .timeline.red { --timeline-color: #f00; --timeline-bg: rgba(255,0,0, 0.2); } #article-container .timeline.purple { --timeline-color: #6f42c1; --timeline-bg: rgba(111,66,193, 0.2); } #article-container .timeline.orange { --timeline-color: #ff8c00; --timeline-bg: rgba(255,140,0, 0.2); } #article-container .timeline.green { --timeline-color: #5cb85c; --timeline-bg: rgba(92,184,92, 0.2); } #article-container .timeline .timeline-item { margin: 0 0 15px; } #article-container .timeline .timeline-item:hover .item-circle:before { border-color: var(--timeline-color, #49b1f5); } #article-container .timeline .timeline-item.headline .timeline-item-title .item-circle > p { font-weight: 600; font-size: 1.2em; } #article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before { left: -28px; border: 4px solid var(--timeline-color, #49b1f5); } #article-container .timeline .timeline-item.headline:hover .item-circle:before { border-color: var(--pseudo-hover); } #article-container .timeline .timeline-item .timeline-item-title { position: relative; } #article-container .timeline .timeline-item .item-circle:before { position: absolute; top: 50%; left: -27px; width: 6px; height: 6px; border: 3px solid var(--pseudo-hover); border-radius: 50%; background: var(--card-bg); content: ''; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -o-transition: all 0.3s; -ms-transition: all 0.3s; transition: all 0.3s; -webkit-transform: translate(0, -50%); -moz-transform: translate(0, -50%); -o-transform: translate(0, -50%); -ms-transform: translate(0, -50%); transform: translate(0, -50%); } #article-container .timeline .timeline-item .item-circle > p { margin: 0 0 8px; font-weight: 500; } #article-container .timeline .timeline-item .timeline-item-content { position: relative; padding: 12px 15px; border-radius: 8px; background: var(--timeline-bg, #e4f3fd); font-size: 0.93em; } #article-container .timeline .timeline-item .timeline-item-content > :last-child { margin-bottom: 0; } #article-container .timeline + .timeline { margin-top: -20px; } .tip { padding: 6px 20px; position: relative; color: #fff; margin-bottom: 20px; background: #41363c; background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left top, right top, from(#41363c), to(#494648)); background: -webkit--webkit-linear-gradient(left, #41363c, #494648); background: -webkit--moz-linear-gradient(left, #41363c, #494648); background: -webkit--o-linear-gradient(left, #41363c, #494648); background: -webkit--ms-linear-gradient(left, #41363c, #494648); background: -webkit-linear-gradient(to right, #41363c, #494648); background: -webkit-linear-gradient(0deg, #41363c, #494648); background: -moz-linear-gradient(0deg, #41363c, #494648); background: -o-linear-gradient(0deg, #41363c, #494648); background: -ms-linear-gradient(0deg, #41363c, #494648); background: linear-gradient(90deg, #41363c, #494648); padding: 6px 20px; border-radius: 10px; -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); box-shadow: 0 3px 5px rgba(50,50,50,0.5); } .tip p { margin: 0 !important; padding: 0.5rem 0; } .tip:before { background: #41363c; background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit-gradient(linear, left bottom, left top, from(#41363c), to(#494648)); background: -webkit--webkit-linear-gradient(bottom, #41363c, #494648); background: -webkit--moz-linear-gradient(bottom, #41363c, #494648); background: -webkit--o-linear-gradient(bottom, #41363c, #494648); background: -webkit--ms-linear-gradient(bottom, #41363c, #494648); background: -webkit-linear-gradient(to top, #41363c, #494648); background: -webkit-linear-gradient(90deg, #41363c, #494648); background: -moz-linear-gradient(90deg, #41363c, #494648); background: -o-linear-gradient(90deg, #41363c, #494648); background: -ms-linear-gradient(90deg, #41363c, #494648); background: linear-gradient(0deg, #41363c, #494648); text-shadow: 0 -1px #41363c; border-radius: 50%; color: #fff; font-size: 12px; position: absolute; width: 24px; height: 24px; line-height: 24.5px; left: -12px; top: -12px; -webkit-box-shadow: 0 0 0 2.5px #f7f8f9; -webkit-box-shadow: 0 0 0 2.5px #f7f8f9; box-shadow: 0 0 0 2.5px #f7f8f9; font-weight: 600; font-family: \"Font Awesome 5 Free\"; text-align: center; } .tip ol { margin: 0; } .tip.info { background: #20a0ff; background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit-gradient(linear, left top, right top, from(#20a0ff), to(#20b8ff)); background: -webkit--webkit-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit--moz-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit--o-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit--ms-linear-gradient(left, #20a0ff, #20b8ff); background: -webkit-linear-gradient(to right, #20a0ff, #20b8ff); background: -webkit-linear-gradient(0deg, #20a0ff, #20b8ff); background: -moz-linear-gradient(0deg, #20a0ff, #20b8ff); background: -o-linear-gradient(0deg, #20a0ff, #20b8ff); background: -ms-linear-gradient(0deg, #20a0ff, #20b8ff); background: linear-gradient(90deg, #20a0ff, #20b8ff); padding: 6px 20px; border-radius: 10px; -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); box-shadow: 0 3px 5px rgba(32,160,255,0.5); } .tip.info:before { background: #20a0ff; background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); background: -webkit--webkit-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit--moz-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit--o-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit--ms-linear-gradient(bottom, #0092ff, #20b8ff); background: -webkit-linear-gradient(to top, #0092ff, #20b8ff); background: -webkit-linear-gradient(90deg, #0092ff, #20b8ff); background: -moz-linear-gradient(90deg, #0092ff, #20b8ff); background: -o-linear-gradient(90deg, #0092ff, #20b8ff); background: -ms-linear-gradient(90deg, #0092ff, #20b8ff); background: linear-gradient(0deg, #0092ff, #20b8ff); content: \"\\f129\"; text-shadow: 0 -1px #20a0ff; } .tip.success { background: #61be33; background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit-gradient(linear, left top, right top, from(#61be33), to(#8fce44)); background: -webkit--webkit-linear-gradient(left, #61be33, #8fce44); background: -webkit--moz-linear-gradient(left, #61be33, #8fce44); background: -webkit--o-linear-gradient(left, #61be33, #8fce44); background: -webkit--ms-linear-gradient(left, #61be33, #8fce44); background: -webkit-linear-gradient(to right, #61be33, #8fce44); background: -webkit-linear-gradient(0deg, #61be33, #8fce44); background: -moz-linear-gradient(0deg, #61be33, #8fce44); background: -o-linear-gradient(0deg, #61be33, #8fce44); background: -ms-linear-gradient(0deg, #61be33, #8fce44); background: linear-gradient(90deg, #61be33, #8fce44); text-shadow: 0 -1px #61be33; -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); box-shadow: 0 3px 5px rgba(104,195,59,0.5); } .tip.success:before { background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit-gradient(linear, left bottom, left top, from(#52bb1d), to(#95d34b)); background: -webkit--webkit-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit--moz-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit--o-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit--ms-linear-gradient(bottom, #52bb1d, #95d34b); background: -webkit-linear-gradient(to top, #52bb1d, #95d34b); background: -webkit-linear-gradient(90deg, #52bb1d, #95d34b); background: -moz-linear-gradient(90deg, #52bb1d, #95d34b); background: -o-linear-gradient(90deg, #52bb1d, #95d34b); background: -ms-linear-gradient(90deg, #52bb1d, #95d34b); background: linear-gradient(0deg, #52bb1d, #95d34b); content: \"\\f00c\"; text-shadow: 0 -1px #61be33; } .tip.warning { background: #ff953f; background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit-gradient(linear, left top, right top, from(#ff953f), to(#ffb449)); background: -webkit--webkit-linear-gradient(left, #ff953f, #ffb449); background: -webkit--moz-linear-gradient(left, #ff953f, #ffb449); background: -webkit--o-linear-gradient(left, #ff953f, #ffb449); background: -webkit--ms-linear-gradient(left, #ff953f, #ffb449); background: -webkit-linear-gradient(to right, #ff953f, #ffb449); background: -webkit-linear-gradient(0deg, #ff953f, #ffb449); background: -moz-linear-gradient(0deg, #ff953f, #ffb449); background: -o-linear-gradient(0deg, #ff953f, #ffb449); background: -ms-linear-gradient(0deg, #ff953f, #ffb449); background: linear-gradient(90deg, #ff953f, #ffb449); text-shadow: 0 -1px #ff953f; -webkit-box-shadow: 0 3px 5px rgba(255,154,73,0.5); -webkit-box-shadow: 0 3px 5px rgba(255,154,73,0.5); box-shadow: 0 3px 5px rgba(255,154,73,0.5); } .tip.warning:before { background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit-gradient(linear, left bottom, left top, from(#ff8f35), to(#ffc149)); background: -webkit--webkit-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit--moz-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit--o-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit--ms-linear-gradient(bottom, #ff8f35, #ffc149); background: -webkit-linear-gradient(to top, #ff8f35, #ffc149); background: -webkit-linear-gradient(90deg, #ff8f35, #ffc149); background: -moz-linear-gradient(90deg, #ff8f35, #ffc149); background: -o-linear-gradient(90deg, #ff8f35, #ffc149); background: -ms-linear-gradient(90deg, #ff8f35, #ffc149); background: linear-gradient(0deg, #ff8f35, #ffc149); content: \"\\f12a\"; text-shadow: 0 -1px #ff953f; } .tip.error { background: #ff4949; background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff7849)); background: -webkit--webkit-linear-gradient(left, #ff4949, #ff7849); background: -webkit--moz-linear-gradient(left, #ff4949, #ff7849); background: -webkit--o-linear-gradient(left, #ff4949, #ff7849); background: -webkit--ms-linear-gradient(left, #ff4949, #ff7849); background: -webkit-linear-gradient(to right, #ff4949, #ff7849); background: -webkit-linear-gradient(0deg, #ff4949, #ff7849); background: -moz-linear-gradient(0deg, #ff4949, #ff7849); background: -o-linear-gradient(0deg, #ff4949, #ff7849); background: -ms-linear-gradient(0deg, #ff4949, #ff7849); background: linear-gradient(90deg, #ff4949, #ff7849); text-shadow: 0 -1px #ff4949; -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); box-shadow: 0 3px 5px rgba(255,73,73,0.5); } .tip.error:before { background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ff7849)); background: -webkit--webkit-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit--moz-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit--o-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit--ms-linear-gradient(bottom, #ff3838, #ff7849); background: -webkit-linear-gradient(to top, #ff3838, #ff7849); background: -webkit-linear-gradient(90deg, #ff3838, #ff7849); background: -moz-linear-gradient(90deg, #ff3838, #ff7849); background: -o-linear-gradient(90deg, #ff3838, #ff7849); background: -ms-linear-gradient(90deg, #ff3838, #ff7849); background: linear-gradient(0deg, #ff3838, #ff7849); content: \"\\f00d\"; text-shadow: 0 -1px #ff4949; } .tip.bolt { background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit-gradient(linear, left bottom, left top, from(#3d8b48), to(#477837)); background: -webkit--webkit-linear-gradient(bottom, #3c3, #459431); background: -webkit--moz-linear-gradient(bottom, #3c3, #459431); background: -webkit--o-linear-gradient(bottom, #3c3, #459431); background: -webkit--ms-linear-gradient(bottom, #3c3, #459431); background: -webkit-linear-gradient(to top, #3c3, #459431); background: -webkit-linear-gradient(80deg, #78ca33, #25822c); background: -moz-linear-gradient(80deg, #78ca33, #25822c); background: -o-linear-gradient(80deg, #78ca33, #25822c); background: -ms-linear-gradient(80deg, #78ca33, #25822c); background: linear-gradient(530deg, #78ca33, #25822c); content: \"\\f00d\"; text-shadow: 0 -1px #4cf706; } .tip.bolt:before { background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit-gradient(linear, left bottom, left top, from(#3c0), to(#3c0)); background: -webkit--webkit-linear-gradient(bottom, #3c3, #459431); background: -webkit--moz-linear-gradient(bottom, #3c3, #459431); background: -webkit--o-linear-gradient(bottom, #3c3, #459431); background: -webkit--ms-linear-gradient(bottom, #3c3, #459431); background: -webkit-linear-gradient(to top, #3c3, #459431); background: -webkit-linear-gradient(326deg, #78ca33, #25822c); background: -moz-linear-gradient(326deg, #78ca33, #25822c); background: -o-linear-gradient(326deg, #78ca33, #25822c); background: -ms-linear-gradient(326deg, #78ca33, #25822c); background: linear-gradient(776deg, #78ca33, #25822c); content: \"\\f0e7\"; text-shadow: 0 -1px #4cf706; } .tip.ban { background: #ff4949; background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit-gradient(linear, left top, right top, from(#ff4949), to(#ff3443)); background: -webkit--webkit-linear-gradient(left, #ff4949, #ff1022); background: -webkit--moz-linear-gradient(left, #ff4949, #ff1022); background: -webkit--o-linear-gradient(left, #ff4949, #ff1022); background: -webkit--ms-linear-gradient(left, #ff4949, #ff1022); background: -webkit-linear-gradient(to right, #ff4949, #ff1022); background: -webkit-linear-gradient(0deg, #ff4949, #f03b49); background: -moz-linear-gradient(0deg, #ff4949, #f03b49); background: -o-linear-gradient(0deg, #ff4949, #f03b49); background: -ms-linear-gradient(0deg, #ff4949, #f03b49); background: linear-gradient(90deg, #ff4949, #f03b49); text-shadow: 0 -1px #ff4949; -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); box-shadow: 0 3px 5px rgba(255,73,73,0.5); } .tip.ban:before { background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit-gradient(linear, left bottom, left top, from(#ff3838), to(#ce4617)); background: -webkit--webkit-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit--moz-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit--o-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit--ms-linear-gradient(bottom, #ff3838, #d23e49); background: -webkit-linear-gradient(to top, #ff3838, #d23e49); background: -webkit-linear-gradient(90deg, #ff3838, #ff1022); background: -moz-linear-gradient(90deg, #ff3838, #ff1022); background: -o-linear-gradient(90deg, #ff3838, #ff1022); background: -ms-linear-gradient(90deg, #ff3838, #ff1022); background: linear-gradient(0deg, #ff3838, #ff1022); content: \"\\f05e\"; text-shadow: 0 -1px #ff4949; } .tip.home { background: #15e5ff; background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit-gradient(linear, left top, right top, from(#5bc6d4) to(#0ec0ef)); background: -webkit--webkit-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit--moz-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit--o-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit--ms-linear-gradient(left, #0ec0ef, #80e0f9); background: -webkit-linear-gradient(to right, #0ec0ef, #80e0f9); background: -webkit-linear-gradient(0deg, #0ec0ef, #80e0f7); background: -moz-linear-gradient(0deg, #0ec0ef, #80e0f7); background: -o-linear-gradient(0deg, #0ec0ef, #80e0f7); background: -ms-linear-gradient(0deg, #0ec0ef, #80e0f7); background: linear-gradient(90deg, #0ec0ef, #80e0f7); text-shadow: 0 -1px #0ec0ef; -webkit-box-shadow: 0 3px 5px #01caff; -webkit-box-shadow: 0 3px 5px #01caff; box-shadow: 0 3px 5px #01caff; } .tip.home:before { background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit-gradient(linear, left bottom, left top, form(#0ec0ee) to(#0ee0cc)); background: -webkit--webkit-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit--moz-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit--o-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit--ms-linear-gradient(bottom, #0ec0ee, #0ec2ee); background: -webkit-linear-gradient(to top, #0ec0ee, #0ec2ee); background: -webkit-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: -moz-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: -o-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: -ms-linear-gradient(90deg, #0ec0ee, #0ec0ea); background: linear-gradient(0deg, #0ec0ee, #0ec0ea); content: \"\\f015\"; text-shadow: 0 -1px #0ec0ea; } .tip.sync { background: #00a9ff; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#c7eef9)); background: -webkit--webkit-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit--moz-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit--o-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit--ms-linear-gradient(left, #53cff1, #2e9fbd); background: -webkit-linear-gradient(to right, #53cff1, #2e9fbd); background: -webkit-linear-gradient(220deg, #47c0e0, #2dc342); background: -moz-linear-gradient(220deg, #47c0e0, #2dc342); background: -o-linear-gradient(220deg, #47c0e0, #2dc342); background: -ms-linear-gradient(220deg, #47c0e0, #2dc342); background: linear-gradient(230deg, #47c0e0, #2dc342); text-shadow: 0 -1px #1bcdfc; -webkit-box-shadow: 0 3px 5px #1bcdfc; -webkit-box-shadow: 0 3px 5px #20b1ad; box-shadow: 0 3px 5px #20b1ad; } .tip.sync:before { background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit-gradient(linear, left bottom, left top, from(#00c3f7), to(#88d3e6)); background: -webkit--webkit-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit--moz-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit--o-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit--ms-linear-gradient(bottom, #83e5ff, #0aa8d2); background: -webkit-linear-gradient(to top, #83e5ff, #0aa8d2); background: -webkit-linear-gradient(180deg, #40c0e2, #3dc550); background: -moz-linear-gradient(180deg, #40c0e2, #3dc550); background: -o-linear-gradient(180deg, #40c0e2, #3dc550); background: -ms-linear-gradient(180deg, #40c0e2, #3dc550); background: linear-gradient(270deg, #40c0e2, #3dc550); content: \"\\f021\"; text-shadow: 0 -1px #17cfff; } .tip.cogs { background: #1502ff; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit--webkit-linear-gradient(left, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(left, #5246e2, #5246e2); background: -webkit--o-linear-gradient(left, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(left, #5246e2, #5246e2); background: -webkit-linear-gradient(to right, #5246e2, #5246e2); background: -webkit-linear-gradient(220deg, #40c0e2, #5247e2); background: -moz-linear-gradient(220deg, #40c0e2, #5247e2); background: -o-linear-gradient(220deg, #40c0e2, #5247e2); background: -ms-linear-gradient(220deg, #40c0e2, #5247e2); background: linear-gradient(230deg, #40c0e2, #5247e2); text-shadow: 0 -1px #8278fd; -webkit-box-shadow: 0 3px 5px #4037a7; -webkit-box-shadow: 1 3px 5px #5e52ec; box-shadow: 1 3px 5px #5e52ec; } .tip.cogs:before { background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#3020f3), to(#b1abf5)); background: -webkit--webkit-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--o-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit-linear-gradient(to top, #5246e2, #5246e2); background: -webkit-linear-gradient(110deg, #40c0e2, #5246e2); background: -moz-linear-gradient(110deg, #40c0e2, #5246e2); background: -o-linear-gradient(110deg, #40c0e2, #5246e2); background: -ms-linear-gradient(110deg, #40c0e2, #5246e2); background: linear-gradient(560deg, #40c0e2, #5246e2); content: \"\\f085\"; text-shadow: 0 -1px #098cf5; } .tip.key { background: #25c33b; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit--webkit-linear-gradient(left, #648798, #90a4ae); background: -webkit--moz-linear-gradient(left, #648798, #90a4ae); background: -webkit--o-linear-gradient(left, #648798, #90a4ae); background: -webkit--ms-linear-gradient(left, #648798, #90a4ae); background: -webkit-linear-gradient(to right, #648798, #90a4ae); background: -webkit-linear-gradient(220deg, #90a4ae, #b7a7a7); background: -moz-linear-gradient(220deg, #90a4ae, #b7a7a7); background: -o-linear-gradient(220deg, #90a4ae, #b7a7a7); background: -ms-linear-gradient(220deg, #90a4ae, #b7a7a7); background: linear-gradient(230deg, #90a4ae, #b7a7a7); text-shadow: 0 -1px #c1c0d4; -webkit-box-shadow: 0 3px 5px #d3d2de; -webkit-box-shadow: 1 3px 5px #d5d4de; box-shadow: 1 3px 5px #d5d4de; } .tip.key:before { background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit--webkit-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--o-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit-linear-gradient(to top, #5246e2, #5246e2); background: -webkit-linear-gradient(110deg, #bccdd2, #cfced4); background: -moz-linear-gradient(110deg, #bccdd2, #cfced4); background: -o-linear-gradient(110deg, #bccdd2, #cfced4); background: -ms-linear-gradient(110deg, #bccdd2, #cfced4); background: linear-gradient(560deg, #bccdd2, #cfced4); content: \"\\f084\"; text-shadow: 0 -1px #a9b2b9; } .tip.bell { background: #25c33b; background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit-gradient(linear, left top, right top, from(rgba(81,167,189,0.2)), to(#8379ff)); background: -webkit--webkit-linear-gradient(left, #648798, #90a4ae); background: -webkit--moz-linear-gradient(left, #648798, #90a4ae); background: -webkit--o-linear-gradient(left, #648798, #90a4ae); background: -webkit--ms-linear-gradient(left, #648798, #90a4ae); background: -webkit-linear-gradient(to right, #648798, #90a4ae); background: -webkit-linear-gradient(220deg, #ffaa0d, #deb455); background: -moz-linear-gradient(220deg, #ffaa0d, #deb455); background: -o-linear-gradient(220deg, #ffaa0d, #deb455); background: -ms-linear-gradient(220deg, #ffaa0d, #deb455); background: linear-gradient(230deg, #ffaa0d, #deb455); text-shadow: 0 -1px #c1c0d4; -webkit-box-shadow: 0 3px 5px #d3d2de; -webkit-box-shadow: 1 3px 5px #d5d4de; box-shadow: 1 3px 5px #d5d4de; } .tip.bell:before { background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit-gradient(linear, left bottom, left top, from(#dddce8), to(#b1abf5)); background: -webkit--webkit-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--moz-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--o-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit--ms-linear-gradient(bottom, #5246e2, #5246e2); background: -webkit-linear-gradient(to top, #5246e2, #5246e2); background: -webkit-linear-gradient(110deg, #f9ae07, #ffb615); background: -moz-linear-gradient(110deg, #f9ae07, #ffb615); background: -o-linear-gradient(110deg, #f9ae07, #ffb615); background: -ms-linear-gradient(110deg, #f9ae07, #ffb615); background: linear-gradient(560deg, #f9ae07, #ffb615); content: \"\\f0f3\"; text-shadow: 0 -1px #ffb81b; } [data-theme=\"dark\"] .tip { filter: brightness(0.7); } #article-container .tip a { color: #e6eaed; }"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/clock.js","permalink":"https://en.blog.sinzmise.top/js/clock.js","excerpt":"","text":"(function () { var t = 820; var a = 250; var r = 7; var n = 10; var e = .65; var f; var o = []; const v = [\"#33B5E5\", \"#0099CC\", \"#AA66CC\", \"#9933CC\", \"#99CC00\", \"#669900\", \"#FFBB33\", \"#FF8800\", \"#FF4444\", \"#CC0000\"]; var h = []; var u = [[[0, 0, 1, 1, 1, 0, 0], [0, 1, 1, 0, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 0, 1, 1, 0], [0, 0, 1, 1, 1, 0, 0]], [[0, 0, 0, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1]], [[0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 1, 1, 1, 1, 1]], [[1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 0], [0, 1, 1, 0, 1, 1, 0], [1, 1, 0, 0, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 1, 1]], [[1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[0, 0, 0, 0, 1, 1, 0], [0, 0, 1, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0], [1, 1, 0, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0]], [[0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 0]], [[0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 1, 1], [0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 0], [0, 1, 1, 0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]; function l(t) { var a = []; f.fillStyle = \"#005EAC\"; var r = new Date; var e = 70, o = 30; var v = r.getHours(); var u = Math.floor(v / 10); var l = v % 10; a.push({ num: u }); a.push({ num: l }); a.push({ num: 10 }); var c = r.getMinutes(); var u = Math.floor(c / 10); var l = c % 10; a.push({ num: u }); a.push({ num: l }); a.push({ num: 10 }); var M = r.getSeconds(); var u = Math.floor(M / 10); var l = M % 10; a.push({ num: u }); a.push({ num: l }); for (var p = 0; p < a.length; p++) { a[p].offsetX = e; e = m(e, o, a[p].num, t); if (p < a.length - 1) { if (a[p].num != 10 && a[p + 1].num != 10) { e += n } } } if (h.length == 0) { h = a } else { for (var C = 0; C < h.length; C++) { if (h[C].num != a[C].num) { s(a[C]); h[C].num = a[C].num } } } i(t); g(); return r } function s(t) { var a = t.num; var n = u[a]; for (var e = 0; e < n.length; e++) { for (var f = 0; f < n[e].length; f++) { if (n[e][f] == 1) { var h = { offsetX: t.offsetX + r + r * 2 * f, offsetY: 30 + r + r * 2 * e, color: v[Math.floor(Math.random() * v.length)], g: 1.5 + Math.random(), vx: Math.pow(-1, Math.ceil(Math.random() * 10)) * 4 + Math.random(), vy: -5 }; o.push(h) } } } } function i(t) { for (var a = 0; a < o.length; a++) { t.beginPath(); t.fillStyle = o[a].color; t.arc(o[a].offsetX, o[a].offsetY, r, 0, 2 * Math.PI); t.fill() } } function g() { var n = 0; for (var f = 0; f < o.length; f++) { var v = o[f]; v.offsetX += v.vx; v.offsetY += v.vy; v.vy += v.g; if (v.offsetY > a - r) { v.offsetY = a - r; v.vy = -v.vy * e } if (v.offsetX > r && v.offsetX < t - r) { o[n] = o[f]; n++ } } for (; n < o.length; n++) { o.pop() } } function m(t, a, n, e) { var f = u[n]; for (var o = 0; o < f.length; o++) { for (var v = 0; v < f[o].length; v++) { if (f[o][v] == 1) { e.beginPath(); e.arc(t + r + r * 2 * v, a + r + r * 2 * o, r, 0, 2 * Math.PI); e.fill() } } } e.beginPath(); t += f[0].length * r * 2; return t } var c = document.getElementById(\"canvas\"); c.width = t; c.height = a; f = c.getContext(\"2d\"); var M = new Date; setInterval(function () { f.clearRect(0, 0, f.canvas.width, f.canvas.height); l(f) }, 50) })();"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/autoload.js","permalink":"https://en.blog.sinzmise.top/js/autoload.js","excerpt":"","text":"// live2d_path 参数建议使用绝对路径 const live2d_path = \"https://jsd.onmicrosoft.cn/gh/stevenjoezhang/live2d-widget@latest/\"; //const live2d_path = \"/live2d-widget/\"; // 封装异步加载资源的方法 function loadExternalResource(url, type) { return new Promise((resolve, reject) => { let tag; if (type === \"css\") { tag = document.createElement(\"link\"); tag.rel = \"stylesheet\"; tag.href = url; } else if (type === \"js\") { tag = document.createElement(\"script\"); tag.src = url; } if (tag) { tag.onload = () => resolve(url); tag.onerror = () => reject(url); document.head.appendChild(tag); } }); } // 加载 waifu.css live2d.min.js waifu-tips.js if (screen.width >= 768) { Promise.all([ loadExternalResource(live2d_path + \"waifu.css\", \"css\"), loadExternalResource(live2d_path + \"live2d.min.js\", \"js\"), loadExternalResource(live2d_path + \"waifu-tips.js\", \"js\") ]).then(() => { // 配置选项的具体用法见 README.md initWidget({ waifuPath: \"/js/waifu-tips.json\", //apiPath: \"https://live2d.fghrsh.net/api/\", cdnPath: \"https://cdn.cbd.int/akilar-live2dapi@latest/\", tools: [\"hitokoto\", \"asteroids\", \"switch-model\", \"switch-texture\", \"photo\", \"info\", \"quit\"] }); }); } console.log(` く__,.ヘヽ. / ,ー、 〉 \ ', !-─‐-i / /´ /`ー' L//`ヽ、 / /, /| , , ', イ / /-‐/ i L_ ハ ヽ! i レ ヘ 7イ`ト レ'ァ-ト、!ハ| | !,/7 '0' ´0iソ| | |.从\" _ ,,,, / |./ | レ'| i>.、,,__ _,.イ / .i | レ'| | / k_7_/レ'ヽ, ハ. | | |/i 〈|/ i ,.ヘ | i | .|/ / i: ヘ! \ | kヽ>、ハ _,.ヘ、 /、! !'〈//`T´', \ `'7'ーr' レ'ヽL__|___i,___,ンレ|ノ ト-,/ |___./ 'ー' !_,.: `);"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/kslink.js","permalink":"https://en.blog.sinzmise.top/js/kslink.js","excerpt":"","text":"var leonus = { linkCom: e => { var t = document.querySelector(\".el-textarea__inner\"); \"bf\" == e ? (t.value = \"```yml\\n\", t.value += \"- name: \\n link: \\n avatar: \\n descr: \\n rss: \",t.style.height = \"165px\", t.value += \"\\n```\", t.setSelectionRange(15, 15)) : (t.value = \"站点名称:\\n站点地址:\\n头像链接:\\n站点描述:\\nRSS地址:\",t.style.height = \"205px\", t.setSelectionRange(5, 5)), t.focus() }, owoBig: () => { if (!document.getElementById(\"post-comment\") || document.body.clientWidth < 768) return; let e = 1, t = \"\", o = document.createElement(\"div\"), n = document.querySelector(\"body\"); o.id = \"owo-big\", n.appendChild(o), new MutationObserver((l => { for (let a = 0; a < l.length; a++) { let i = l[a].addedNodes, s = \"\"; if (2 == i.length && \"OwO-body\" == i[1].className) s = i[1]; else { if (1 != i.length || \"tk-comment\" != i[0].className) continue; s = i[0] } s.onmouseover = l => { e && (\"OwO-body\" == s.className && \"IMG\" == l.target.tagName || \"tk-owo-emotion\" == l.target.className) && (e = 0, t = setTimeout((() => { let e = 3 * l.path[0].clientHeight, t = 3 * l.path[0].clientWidth, a = l.x - l.offsetX - (t - l.path[0].clientWidth) / 2, i = l.y - l.offsetY; a + t > n.clientWidth && (a -= a + t - n.clientWidth + 10), a < 0 && (a = 10), o.style.cssText = `display:flex; height:${e}px; width:${t}px; left:${a}px; top:${i}px;`, o.innerHTML = `` }), 300)) }, s.onmouseout = () => { o.style.display = \"none\", e = 1, clearTimeout(t) } } })).observe(document.getElementById(\"post-comment\"), { subtree: !0, childList: !0 }) }, };"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/newyear.js","permalink":"https://en.blog.sinzmise.top/js/newyear.js","excerpt":"","text":"function newYear() { if (!document.querySelector('#newYear')) return; // 新年时间戳 and 星期对象 let SpringFestival = new Date('2024-02-10 00:00:00') let newYear = SpringFestival.getTime() / 1000, week = { 0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六' } function nol(h) { h = Number(h); return h > 9 ? h : '0' + h; } time(); function time() { // 现在 时间对象 let now = new Date(); // 右下角 今天 document.querySelector('#newYear .today').innerHTML = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' ' + week[now.getDay()] // 现在与新年相差秒数 let second = newYear - Math.round(now.getTime() / 1000); // 小于0则表示已经过年 if (second < 0) { window.newYearTimer = null document.querySelector('#newYear .title').innerHTML = 'Happy New Year!'; document.querySelector('#newYear .newYear-time').innerHTML = '新年快乐'; } else { // 大于0则还未过年 document.querySelector('#newYear .title').innerHTML = '距离' + SpringFestival.getFullYear() + '年春节:' // 大于一天则直接渲染天数 if (second > 86400) { document.querySelector('#newYear .newYear-time').innerHTML = `${Math.ceil(second / 86400)}天` } else { // 小于一天则使用时分秒计时。 let h = nol(parseInt(second / 3600)); second %= 3600; let m = nol(parseInt(second / 60)); second %= 60; let s = nol(second); document.querySelector('#newYear .newYear-time').innerHTML = `${h}:${m}:${s}`; // 计时 if (!window.newYearTimer) window.newYearTimer = setInterval(time, 1000); } } } } function newYearSwiper() { var swiper = new Swiper('.newYear-slider', { passiveListeners: true, loop: true, // autoplay: false, autoplay: { disableOnInteraction: true, delay: 5000 }, effect: 'fade', mousewheel: true, autoHeight: true }); var comtainer = document.querySelector('.newYear-slider'); if (comtainer !== null) { comtainer.onmouseenter = () => { swiper.autoplay.stop() }; comtainer.onmouseleave = () => { swiper.autoplay.start() }; } } // 适配了pjax function whenDOMReady() { // pjax加载完成(切换页面)后需要执行的函数和代码 newYear() newYearSwiper() } whenDOMReady() // 打开网站先执行一次 document.addEventListener(\"pjax:complete\", whenDOMReady) // pjax加载完成(切换页面)后再执行一次"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/plane.js","permalink":"https://en.blog.sinzmise.top/js/plane.js","excerpt":"","text":"/* Copyright (c) Rootof Creations HB, rootof.com, kickassapp.com */ (function (window) { var JSONP = (function () { var counter = 0, head, query, key, window = this; function load(url) { var script = document.createElement('script'), done = false; script.src = url; script.async = true; script.onload = script.onreadystatechange = function () { if (!done && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\")) { done = true; script.onload = script.onreadystatechange = null; if (script && script.parentNode) { script.parentNode.removeChild(script); } } }; if (!head) { head = document.getElementsByTagName('head')[0]; if (!head) head = document.body; } head.appendChild(script); } function jsonp(url, params, callback) { query = \"?\"; params = params || {}; for (key in params) { if (params.hasOwnProperty(key)) { query += encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]) + \"&\"; } } var jsonp = \"json\" + (++counter); window[jsonp] = function (data) { callback(data); try { delete window[jsonp]; } catch (e) { } window[jsonp] = null; }; load(url + query + \"callback=\" + jsonp); return jsonp; } return {get: jsonp}; }()); var CORS = { request: function (url, params, callback) { if (this.calledByExtension()) { this._callbacks[this._callbackId++] = callback; window.postMessage(JSON.stringify({ from: \"kickassapp-page\", url: url, type: \"callApi\", params: params }), \"*\"); return; } params = params || {}; var query = \"?\"; for (key in params) { if (params.hasOwnProperty(key)) { query += encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]) + \"&\"; } } var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { callback(JSON.parse(xhr.responseText)); } } xhr.open(\"GET\", url + query); xhr.withCredentials = true; xhr.setRequestHeader(\"Content-Type\", \"application/json\"); xhr.send(); }, calledByExtension: function () { return !!document.getElementById(\"kickass-has-been-initialized-yes-yes-yes\"); }, _callbacks: {}, _callbackId: 0 } if (CORS.calledByExtension()) { window.addEventListener(\"message\", function (e) { var messageData; try { messageData = JSON.parse(e.data); } catch (e) { return; } if (messageData.from === \"kickassapp-extension\" && messageData.sanityCheck === \"kickassapp-extension-version1\") { var message = messageData.payload; if (message.type === \"response\") { CORS._callbacks[message.requestId](message.body); delete CORS._callbacks[message.requestId]; } else if (message.type === \"destroy\") { window.KICKASSGAME.destroy(); } } }, false); } function getGlobalNamespace() { return window && window.INSTALL_SCOPE ? window.INSTALL_SCOPE : window; } var Class = function (methods) { var ret = function () { if (ret.$prototyping) return this; if (typeof this.initialize == 'function') return this.initialize.apply(this, arguments); }; if (methods.Extends) { ret.parent = methods.Extends; methods.Extends.$prototyping = true; ret.prototype = new methods.Extends; methods.Extends.$prototyping = false; } for (var key in methods) if (methods.hasOwnProperty(key)) ret.prototype[key] = methods[key]; return ret; }; if (typeof exports != 'undefined') exports.Class = Class; var Vector = new Class({ initialize: function (x, y) { if (typeof x == 'object') { this.x = x.x; this.y = x.y; } else { this.x = x; this.y = y; } }, cp: function () { return new Vector(this.x, this.y); }, mul: function (factor) { this.x *= factor; this.y *= factor; return this; }, mulNew: function (factor) { return new Vector(this.x * factor, this.y * factor); }, div: function (factor) { this.x /= factor; this.y /= factor; return this; }, divNew: function (factor) { return new Vector(this.x / factor, this.y / factor); }, add: function (vec) { this.x += vec.x; this.y += vec.y; return this; }, addNew: function (vec) { return new Vector(this.x + vec.x, this.y + vec.y); }, sub: function (vec) { this.x -= vec.x; this.y -= vec.y; return this; }, subNew: function (vec) { return new Vector(this.x - vec.x, this.y - vec.y); }, rotate: function (angle) { var x = this.x, y = this.y; this.x = x * Math.cos(angle) - Math.sin(angle) * y; this.y = x * Math.sin(angle) + Math.cos(angle) * y; return this; }, rotateNew: function (angle) { return this.cp().rotate(angle); }, setAngle: function (angle) { var l = this.len(); this.x = Math.cos(angle) * l; this.y = Math.sin(angle) * l; return this; }, setAngleNew: function (angle) { return this.cp().setAngle(angle); }, setLength: function (length) { var l = this.len(); if (l) this.mul(length / l); else this.x = this.y = length; return this; }, setLengthNew: function (length) { return this.cp().setLength(length); }, normalize: function () { var l = this.len(); if (l == 0) return this; this.x /= l; this.y /= l; return this; }, normalizeNew: function () { return this.cp().normalize(); }, angle: function () { return Math.atan2(this.y, this.x); }, collidesWith: function (rect) { return this.x > rect.x && this.y > rect.y && this.x < rect.x + rect.width && this.y < rect.y + rect.height; }, len: function () { var l = Math.sqrt(this.x * this.x + this.y * this.y); if (l < 0.005 && l > -0.005) return 0; return l; }, is: function (test) { return typeof test == 'object' && this.x == test.x && this.y == test.y; }, dot: function (v2) { return this.x * v2.x + this.y * v2.y; }, inTriangle: function (a, b, c) { var v0 = c.subNew(a); var v1 = b.subNew(a); var v2 = p.subNew(a); var dot00 = v0.dot(v0); var dot01 = v0.dot(v1); var dot02 = v0.dot(v2); var dot11 = v1.dot(v1); var dot12 = v1.dot(v2); var invDenom = 1 / (dot00 * dot11 - dot01 * dot01); var u = (dot11 * dot02 - dot01 * dot12) * invDenom; var v = (dot00 * dot12 - dot01 * dot02) * invDenom; return (u > 0) && (v > 0) && (u + v < 1); }, distanceFrom: function (vec) { return Math.sqrt(Math.pow((this.x - vec.x), 2), Math.pow(this.y - vec.y, 2)); }, toString: function () { return '[Vector(' + this.x + ', ' + this.y + ') angle: ' + this.angle() + ', length: ' + this.len() + ']'; } }); if (typeof exports != 'undefined') exports.Vector = Vector; var Rect = new Class({ initialize: function (x, y, w, h) { this.pos = new Vector(x, y); this.size = {width: w, height: h}; }, hasPoint: function (point) { return point.x > this.getLeft() && point.x < this.getRight() && point.y > this.getTop() && point.y < this.getBottom(); }, setLeft: function (left) { this.pos.x = left + this.size.width / 2; }, setTop: function (top) { this.pos.y = top + this.size.height / 2; }, getLeft: function () { return this.pos.x - this.size.width / 2; }, getTop: function () { return this.pos.y - this.size.height / 2; }, getRight: function () { return this.pos.x + this.size.width / 2; }, getBottom: function () { return this.pos.y + this.size.height / 2; }, cp: function () { return new Rect(this.pos.x, this.pos.y, this.size.width, this.size.height); } }); if (typeof exports != 'undefined') exports.Rect = Rect; var Fx = new Class({ initialize: function () { this.listeners = []; this.tweens = {}; this.running = {}; }, addListener: function (listener) { this.listeners.push(listener); }, add: function (key, props) { props = props || {}; props.duration = props.duration || 500; props.transition = props.transition || Tween.Linear; props.repeats = typeof props.repeats == 'undefined' ? false : props.repeats; if (!props.tweens) { var start = props.start || 0; var end = typeof props.end == 'undefined' ? 1 : props.end; props.tweens = [[start, end]]; } this.tweens[key] = props; }, update: function (time) { time = typeof time === 'number' ? time : now(); for (var key in this.tweens) if (this.tweens.hasOwnProperty(key)) { if (!this.running[key]) { this.tweenStart(key, time); continue; } var tween = this.tweens[key]; var tdelta = time - this.running[key].startTime; if (tdelta > tween.duration) { this.tweenFinished(tween, key); continue; } var delta = tween.transition(tdelta / tween.duration); var changes = []; for (var i = 0, t; t = tween.tweens[i]; i++) { var x = delta * (t[1] - t[0]) + t[0]; changes.push(x); } this.fire(key, changes, delta); } }, tweenStart: function (key, time) { this.running[key] = {startTime: time}; var values = []; for (var i = 0, tween; tween = this.tweens[key].tweens[i]; i++) values.push(tween[0]); this.fire(key, values, 0); }, tweenFinished: function (tween, key) { var values = []; for (var i = 0, t; t = tween.tweens[i]; i++) values.push(t[1]); this.fire(key, values, 1); if (!tween.repeats) { delete this.running[key]; delete this.tweens[key]; return; } this.tweenStart(key, now()); }, fire: function (key, values, delta) { for (var i = 0, listener; listener = this.listeners[i]; i++) listener.set.call(listener, key, values, delta); } }); var Tween = { Linear: function (x) { return x; }, Quadratic: function (x) { return x * x; }, Quintic: function (x) { return x * x * x; }, Shake: function (x) { return Math.sin(x); } }; var GameGlobals = { FPS: 60, useAnimationFrame: true, boids: {flockRadius: 400, size: 100}, path: function () { return \"https://kickassapp.com/\" + Array.prototype.slice.call(arguments).join(\"\"); }, hasCanvas: (typeof document.createElement('canvas').getContext !== 'undefined'), bulletColor: 'black' }; window.GameGlobals = GameGlobals; if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement) { if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (len === 0) return -1; var n = 0; if (arguments.length > 0) { n = Number(arguments[1]); if (n !== n) n = 0; else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n)); } if (n >= len) return -1; var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) return k; } return -1; }; } function now() { return (new Date()).getTime(); } function bind(bound, func) { return function () { return func.apply(bound, arguments); }; } function each(arr, func, bindObject) { if (typeof arr.forEach == 'function') { arr.forEach(func, bindObject); return arr; } for (var key in arr) if (arr.hasOwnProperty(key)) func.call(bindObject || window, arr[key], key); return arr; } function addEvent(obj, type, fn) { if (obj.addEventListener) obj.addEventListener(type, fn, false); else if (obj.attachEvent) { obj[\"e\" + type + fn] = fn; obj[type + fn] = function () { return obj[\"e\" + type + fn](window.event); }; obj.attachEvent(\"on\" + type, obj[type + fn]); } } function removeEvent(obj, type, fn) { if (obj.removeEventListener) obj.removeEventListener(type, fn, false); else if (obj.detachEvent) { obj.detachEvent(\"on\" + type, obj[type + fn]); obj[type + fn] = null; obj[\"e\" + type + fn] = null; } } function stopEvent(e) { if (e.stopPropogation) e.stopPropogation(); if (e.preventDefault) e.preventDefault(); e.returnValue = false; } function elementIsContainedIn(element1, element2) { if (element.contains) return element1.contains(element2); return !!(element1.compareDocumentPosition(element2) & 16); }; function code(name) { var table = {38: 'up', 40: 'down', 37: 'left', 39: 'right', 27: 'esc'}; if (table[name]) return table[name]; return String.fromCharCode(name); }; function random(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); }; function getRect(element) { if (typeof element.getBoundingClientRect === 'function') { var rect = element.getBoundingClientRect(); var sx = window.pageXOffset; var sy = window.pageYOffset; return {width: rect.width, height: rect.height, left: rect.left + sx, top: rect.top + sy}; } var rect = {width: element.offsetWidth, height: element.offsetHeight, left: 0, top: 0}; var el = element; while (el) { rect.left += el.offsetLeft; rect.top += el.offsetTop; el = el.offsetParent; } return rect; } function getCompatElement() { var doc = document; return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.documentElement : doc.body; } function getScrollSize() { var doc = getCompatElement(); var min = {x: doc.clientWidth, y: doc.clientHeight}; var body = document.body; return { x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y) }; } function getStyle(element, prop) { if (element.style[prop]) return element.style[prop]; if (element.currentStyle) return element.currentStyle[prop]; return document.defaultView.getComputedStyle(element, null).getPropertyValue(prop); } function setStyles(element, props) { for (var key in props) if (props.hasOwnProperty(key)) { var val = props[key]; if (typeof val === \"number\" && key !== \"opacity\" && key !== \"zIndex\") val = val + 'px'; element.style[key] = val; } }; function hasClass(ele, cls) { return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)')); } function addClass(ele, cls) { if (!hasClass(ele, cls)) ele.className += \" \" + cls; } function removeClass(ele, cls) { if (hasClass(ele, cls)) { var reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'); ele.className = ele.className.replace(reg, ' '); } } function cloneElement(element) { return element.cloneNode(true); } function newElement(tag, props) { var el = document.createElement(tag); for (var key in props) if (props.hasOwnProperty(key)) { if (key === 'styles') { setStyles(el, props[key]); } else { el[key] = props[key]; } } return el; } var requestAnimFrame = (function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) { window.setTimeout(callback, 1000 / 60); }; })(); function delay(d, func, bound) { return setTimeout(bind(bound, func), d); } var KickAss = new Class({ initialize: function (options) { if (options && options.mySite) { this.mySite = options.mySite; } this.players = []; this.elements = []; this.weaponClass = Weapons[1].cannonClass; this.scrollPos = new Vector(0, 0); this.scrollSize = new Vector(0, 0); this.windowSize = {width: 0, height: 0}; this.updateWindowInfo(); this.bulletManager = new BulletManager(this); this.bulletManager.updateEnemyIndex(); this.explosionManager = new ExplosionManager(this); this.ui = new UIManager(this); this.bombManager = new BombManager(this); this.menuManager = new MenuManager(this); this.menuManager.create(); if (typeof StatisticsManager !== \"undefined\") { this.statisticsManager = new StatisticsManager(this); } this.sessionManager = new SessionManager(this); this.lastUpdate = now(); this.keyMap = {}; this.keydownEvent = bind(this, this.keydown); this.keyupEvent = bind(this, this.keyup); this.multiplier = 10; if (this.isCampaign()) { this.audioManager = { explosion: new AudioManager(GameGlobals.path(\"static/sounds/game/explosion\"), [\"mp3\", \"ogg\"]), shot: new AudioManager(GameGlobals.path(\"static/sounds/game/shot\"), [\"mp3\", \"ogg\"]) } } else { this.audioManager = {}; } if (window.KickAssStyle && window.KickAssStyle === \"white\") { GameGlobals.bulletColor = \"white\"; } addEvent(document, 'keydown', this.keydownEvent); addEvent(document, 'keyup', this.keyupEvent); addEvent(document, 'keypress', this.keydownEvent); }, begin: function () { this.addPlayer(); this.sessionManager.isPlaying = true; if (!GameGlobals.useAnimationFrame) { this.loopTimer = window.setInterval(bind(this, this.loop), 1000 / GameGlobals.FPS); } if (GameGlobals.useAnimationFrame) { requestAnimFrame(bind(this, this.loop)); } }, keydown: function (e) { var c = code(e.keyCode); this.keyMap[c] = true; switch (c) { case'left': case'right': case'up': case'down': case'esc': case' ': stopEvent(e); break; } switch (c) { case'esc': this.destroy(); break; } }, keyup: function (e) { var c = code(e.keyCode); this.keyMap[c] = false; switch (c) { case'left': case'right': case'up': case'down': case'esc': case' ': if (e.stopPropogation) { e.stopPropogation(); } if (e.preventDefault) { e.preventDefault(); } e.returnValue = false; break; } }, loop: function () { var currentTime = now(); var tdelta = (currentTime - this.lastUpdate) / 1000; this.updateWindowInfo(); for (var i = 0, player; player = this.players[i]; i++) { player.update(tdelta); } this.bulletManager.update(tdelta); this.bombManager.update(tdelta); this.explosionManager.update(tdelta); this.ui.update(tdelta); if (this.statisticsManager) { this.statisticsManager.update(tdelta); } this.sessionManager.update(tdelta); this.lastUpdate = currentTime; if (GameGlobals.useAnimationFrame) { requestAnimFrame(bind(this, this.loop)); } }, addPlayer: function () { var data = false; var ship = Ships.Standard; if (window.KICKASSSHIP && window.KICKASSSHIP.points) { ship = KICKASSSHIP; } if (this.mySite && this.mySite.getShipConfig()) { ship = this.mySite.getShipConfig(); } var player = new Player(this); player.setShip(ship); this.players.push(player); this.explosionManager.addExplosion(player.pos); }, registerElement: function (el) { if (!el) { throw new Error(\"Can't register unexisting element.\"); } this.elements.push(el); }, unregisterElement: function (el) { this.elements.splice(this.elements.indexOf(el), 1); }, isKickAssElement: function (el) { for (var i = 0, element; element = this.elements[i]; i++) { if (el === element || elementIsContainedIn(element, el)) { return true; } } return false; }, isKeyPressed: function (key) { return !!this.keyMap[key]; }, updateWindowInfo: function () { var isIEQuirks = (!!window.ActiveXObject) && document.compatMode == \"BackCompat\"; this.windowSize = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }; if (isIEQuirks) { this.windowSize.width = document.body.clientWidth; this.windowSize.height = document.body.clientHeight; } if (this.menuManager && this.menuManager.isVisible()) { this.windowSize.height -= this.menuManager.getHeight(); } this.scrollPos.x = window.pageXOffset || document.documentElement.scrollLeft; this.scrollPos.y = window.pageYOffset || document.documentElement.scrollTop; this.scrollSize = getScrollSize(); }, hideAll: function () { for (var i = 0, el; el = this.elements[i]; i++) { el.style.visibility = 'hidden'; } }, showAll: function () { for (var i = 0, el; el = this.elements[i]; i++) { el.style.visibility = 'visible'; } }, updateShips: function (ship, isInitial) { if (!isInitial) { this.ui.showMessage(\"You're now flying\" + ship.name + \"!!\"); } for (var i = 0, player; player = this.players[i]; i++) { player.setShip(ship); } }, changeWeapon: function (weapon, isInitial) { this.weaponClass = weapon.cannonClass; if (!isInitial) { this.ui.showMessage(\"Changed to \" + weapon.name.toUpperCase() + \"!!!!\"); } for (var i = 0, player; player = this.players[i]; i++) { player.setCannons(weapon.cannonClass); } }, changeWeaponById: function (id, isInitial) { if (Weapons[id]) { this.changeWeapon(Weapons[id], isInitial); } }, flyOutPlayers: function (x, y) { for (var i = 0, player; player = this.players[i]; i++) { player.flyTo(x, -player.size.height); player.isBound = false; } }, flyInPlayers: function () { for (var i = 0, player; player = this.players[i]; i++) { player.flyTo(player.pos.x, 100, function () { this.isBound = true; }); } }, newRank: function (rank) { this.ui.showMessage(\"OMG. You leveled up to: \" + rank + '!Be sure to check what cool new stuff you get in the menu.'); }, fireBomb: function () { this.bombManager.blow(); }, destroy: function () { removeEvent(document, 'keydown', this.keydownEvent); removeEvent(document, 'keypress', this.keydownEvent); removeEvent(document, 'keyup', this.keyupEvent); for (var i = 0, player; player = this.players[i]; i++) { player.destroy(); } this.bulletManager.destroy(); this.explosionManager.destroy(); this.menuManager.destroy(); if (!GameGlobals.useAnimationFrame) { clearInterval(this.loopTimer); } getGlobalNamespace().KICKASSGAME = false; if (this.isCampaign()) { document.location.reload(); } }, isCampaign: function () { return getGlobalNamespace().IS_CLOUDFLARE_GAME; }, isMySite: function () { return !!getGlobalNamespace().KICKASS_SITE_KEY; }, shouldShowAd: function () { return !this.mySite && !this.isCampaign(); }, shouldShowMenu: function () { return !this.mySite && !this.isCampaign(); }, shouldShowHowToImage: function () { return this.mySite || this.isCampaign(); } }); window.KickAss = KickAss; var StatisticsManager = new Class({ initialize: function (game) { this.game = game; this.data = {}; this.data.startedPlaying = now(); this.data.elementsDestroyed = 0; this.data.shotsFired = 0; this.data.distanceFlownInPixels = 0; this.data.totalPointsThisSession = 0; this.data.usedThrusters = 0; this.lastUpdate = 0; }, usedThrusters: function () { this.data.usedThrusters = 1; }, increaseDistanceWithPixels: function (px) { this.data.distanceFlownInPixels += px; }, increasePointsGainedWithPoints: function (points) { this.data.totalPointsThisSession += points; }, addShotFired: function () { this.data.shotsFired++; if (this.game.audioManager.shot) { this.game.audioManager.shot.play(); } }, addElementsDestroyed: function () { this.data.elementsDestroyed++; }, update: function (tdelta) { this.lastUpdate += tdelta; if (this.lastUpdate > 0.25) { this.syncWithServer(); this.lastUpdate = 0; } }, syncWithServer: function () { var fragment = []; for (var key in this.data) if (this.data.hasOwnProperty(key)) { fragment.push(key + ':' + this.data[key]); } this.game.menuManager.sendMessageToMenu(\"stats:!\" + fragment.join('|')); } }); var MySite = new Class({ initialize: function (key) { this.key = key; }, load: function (callback) { CORS.request(GameGlobals.path('mysite/api.json'), { site_key: this.key, url: document.location.toString() }, bind(this, function (data) { if (data && data.embed) { this.mySiteData = data.embed; callback(true); } else { callback(false); } })); }, install: function () { }, getShipId: function () { return this.mySiteData && this.mySiteData.settings.ship; }, getShipConfig: function () { return this.mySiteData && this.mySiteData.settings.ship_config; }, getShareURL: function () { return this.mySiteData && this.mySiteData.settings.share_url; } }); var Menu = new Class({ initialize: function (game) { this.game = game; this.size = {height: 300}; }, generate: function (parent) { this.container = document.createElement('div'); this.container.className = 'KICKASSELEMENT'; this.container.id = 'kickass-profile-menu'; parent.appendChild(this.container); var shipId = getGlobalNamespace().KICKASSSHIPID || \"\"; this.url = GameGlobals.path('intermediate_postmessage.html?url=' + encodeURIComponent(getGlobalNamespace().KICKASSURL || document.location.href) + \"&origin=\" + encodeURIComponent(document.location.href) + \"&preship=\" + (shipId) + \"&is_campaign=\" + (this.game.isCampaign() ? \"true\" : \"\") + \"&is_mysite=\" + (this.game.isMySite() ? \"true\" : \"\")); this.isSocketReady = false; this.socketIframe = document.createElement(\"iframe\"); this.socketIframe.frameborder = '0'; this.socketIframe.className = 'KICKASSELEMENT'; this.socketIframe.width = '100%'; this.socketIframe.height = this.size.height + 'px'; this.container.appendChild(this.socketIframe); this.menuOrigin = \"https://kickassapp.com/\".replace(/\\/$/, \"\"); this.socketIframe.src = this.url; this.onMessage = bind(this, function (event) { if (event.origin !== this.menuOrigin && event.origin !== this.menuOrigin.replace(\"http://\", \"https://\")) { console.log(\"ignoring event from\", event.origin); return; } var message = event.data; if (message === \"ready\") { this.onGameReady(); return; } var t = message.split(':!'); if (t.length !== 2) { return; } var type = t.shift().replace(/^./g, function (match) { return match.charAt(0).toUpperCase(); }); if (typeof this['messageType' + type] === \"function\") { this['messageType' + type](t.join(\":!\")); } }); window.addEventListener(\"message\", this.onMessage, false); this.game.registerElement(this.container); }, socketPostMessage: function (message) { this.socketIframe.contentWindow.postMessage(message, this.menuOrigin); }, onGameReady: function () { this.isSocketReady = true; this.game.registerElement(this.container.getElementsByTagName('iframe')[0]); this.socketPostMessage(\"url:!\" + (getGlobalNamespace().KICKASSURL || document.location.href)); if (this.game.statisticsManager) { this.game.statisticsManager.syncWithServer(); } this.game.menuManager.onGameReady(); }, sendMessage: function (message) { if (!this.isSocketReady) { return; } if (message != this.lastMessage) { try { this.socketPostMessage(message); } catch (e) { } this.lastMessage = message; } }, messageTypeChangeShip: function (pieces) { pieces = pieces.split(\",\"); var shipId = pieces[0]; var weaponId = pieces[1]; var isInitial = pieces[2] === 'initial'; if (this.shipId === shipId) { return; } if (isInitial && getGlobalNamespace().KICKASSSHIP) { return; } this.shipId = shipId; CORS.request(GameGlobals.path('designer/ship/' + shipId + '/construction.json'), { ship_id: shipId, is_initial: isInitial ? '1' : '0' }, bind(this, function (data) { this.game.updateShips(data.data, isInitial); try { window.focus(); } catch (e) { } })); if (!isInitial) { this.parent.hideMenu(); } }, messageTypeChangeWeapon: function (weaponId, isInitial) { this.game.changeWeaponById(weaponId, isInitial); }, messageTypeSetMultiplier: function (mod) { mod = parseInt(mod, 10); if (isNaN(mod) || !mod) { return; } this.game.multiplier = mod; }, messageTypeNewRank: function (rank) { this.game.newRank(rank); }, messageTypePlayerMessage: function (message) { this.game.ui.showMessage(message); }, destroy: function () { this.game.unregisterElement(this.container); this.game.unregisterElement(this.iframe); window.removeEventListener(\"message\", this.onMessage, false); this.container.parentNode.removeChild(this.container); } }); var MenuManager = new Class({ initialize: function (game) { this.game = game; this.numPoints = 0; if (!getGlobalNamespace().KICKASS_INLINE_CSS) { this.includeCSS(GameGlobals.path('css/menustyles.css')); } }, generateDefaults: function () { for (var id in Weapons) if (Weapons.hasOwnProperty(id)) { this.addWeapon(Weapons[id], id); } this.hideBombMenu(); }, create: function () { this.container = document.createElement('div'); this.container.className = 'KICKASSELEMENT KICKASShidden ' + (this.game.shouldShowMenu() ? \"\" : \"KICKASSNOMENU\"); this.container.id = 'kickass-menu'; if (this.game.shouldShowMenu()) { this.container.style.bottom = '-250px'; this.container.style.display = 'none'; } else { removeClass(this.container, \"KICKASShidden\"); } getAppContainerElement().appendChild(this.container); var adHTML = \"\"; this.container.innerHTML = '' + '' + adHTML + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + this.numPoints + '' + 'Press esc to quit' + this.getShareHTML() + '' + ''; this.pointsTab = document.getElementById('kickass-pointstab'); this.pointsTabWrapper = document.getElementById('kickass-pointstab-wrapper'); this.points = document.getElementById('kickass-points'); this.escToQuit = document.getElementById('kickass-esctoquit'); this.howToImage = document.getElementById('kickass-howto-image'); this.weaponsMenu = document.getElementById('kickass-weapons-menu'); this.weaponsList = document.getElementById('kickass-weapons-list'); this.bombLink = document.getElementById('kickass-bomb-menu'); var all = this.container.getElementsByTagName('*'); for (var i = 0; i < all.length; i++) { this.game.registerElement(all[i]); } this.game.registerElement(this.container); if (this.game.shouldShowMenu()) { this.menu = new Menu(this.game); this.menu.parent = this; this.menu.generate(this.container); } else { setTimeout(function () { this.onGameReady(); }.bind(this), 100); } addEvent(this.bombLink, 'click', bind(this, function (e) { stopEvent(e); this.game.fireBomb(); })); addEvent(this.pointsTabWrapper, 'click', bind(this, this.toggleMenu)); addEvent(this.weaponsMenu, 'click', bind(this, this.toggleWeaponsMenu)); this.generateDefaults(); }, getShareHTML: function () { return \"\"; }, onGameReady: function () { this.container.style.display = 'block'; if (this.game.shouldShowHowToImage()) { setTimeout(bind(this, function () { removeClass(this.howToImage, \"kickass-howto-invisible\"); }), 10); setTimeout(bind(this, function () { addClass(this.howToImage, \"kickass-howto-invisible\"); }), 4000); } }, navigateTo: function (page, dontShowMenu) { if (!dontShowMenu) { this.showMenu(); } if (this.menu) { this.menu.socketPostMessage('navigate:!' + page); } }, toggleMenu: function () { if (this.game.shouldShowMenu()) { if (hasClass(this.container, 'KICKASShidden')) { this.showMenu(); } else { this.hideMenu(); } } else { this.showMenu(); } }, toggleWeaponsMenu: function () { if (hasClass(this.weaponsMenu, 'KICKASShidden')) { this.showWeaponsMenu(); } else { this.hideWeaponsMenu(); } }, hideWeaponsMenu: function () { this.weaponsMenu.style.width = ''; addClass(this.weaponsMenu, 'KICKASShidden'); }, showWeaponsMenu: function () { var last = this.weaponsMenu.getElementsByTagName('li'); last = last[last.length - 1]; this.weaponsMenu.style.width = (last.offsetLeft + last.offsetWidth - 47) + 'px'; removeClass(this.weaponsMenu, 'KICKASShidden'); }, showMenu: function () { if (this.game.shouldShowMenu()) { this.container.style.bottom = ''; removeClass(this.container, 'KICKASShidden'); } }, hideMenu: function () { this.container.style.bottom = ''; addClass(this.container, 'KICKASShidden'); }, showBombMenu: function () { this.bombLink.style.width = \"\"; }, hideBombMenu: function () { this.bombLink.style.width = \"0px\"; }, getHeight: function () { return this.container.clientHeight; }, isVisible: function () { return !hasClass(this.container, 'KICKASShidden'); }, addPoints: function (killed, pos) { var points = killed * this.game.multiplier; this.numPoints += points; this.points.innerHTML = this.numPoints; if (this.game.statisticsManager) { this.game.statisticsManager.increasePointsGainedWithPoints(points); } this.game.ui.addPointsBubbleAt(pos, points); }, includeCSS: function (file) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = file; (document.head || document.body).appendChild(link); }, sendMessageToMenu: function (fragment) { if (this.menu) { this.menu.sendMessage(fragment); } }, addWeapon: function (weapon, id) { var li = document.createElement('li'); li.className = 'KICKASSELEMENT kickass-weapon-item'; li.weapon = weapon; li.style.backgroundImage = 'url(' + GameGlobals.path('css/gfx/kickass/weap-' + weapon.id + '.png') + ')'; li.innerHTML = '' + weapon.name + ''; this.weaponsList.appendChild(li); addEvent(li, 'click', bind(this, function (e) { stopEvent(e); this.changeWeapon(weapon); this.sendMessageToMenu(\"changeWeapon:!\" + id); })); }, changeWeapon: function (weapon) { this.game.changeWeapon(weapon); }, destroy: function () { var all = this.container.getElementsByTagName('*'); for (var i = 0; i < all.length; i++) { this.game.unregisterElement(all[i]); } this.game.unregisterElement(this.container); if (this.menu) { this.menu.destroy(); } this.container.parentNode.removeChild(this.container); } }); var UIManager = new Class({ initialize: function (game) { this.UNIQID = 0; this.game = game; this.pointBubbles = {}; this.messages = {}; this.fx = new Fx(); this.fx.addListener(this); }, update: function (tdelta) { this.fx.update(); }, set: function (key, value, delta) { var type = key.split('-')[0]; var id = key.split('-')[1]; if (this.pointBubbles[id]) { var bubble = this.pointBubbles[id]; bubble.style.top = value[0] + 'px'; bubble.style.opacity = value[1]; if (delta == 1 && bubble.parentNode) { bubble.parentNode.removeChild(bubble); delete this.pointBubbles[id]; } } else if (this.messages[id] && type == 'messagedown') { var message = this.messages[id]; message.style.top = value[0] + 'px'; if (delta == 1) { setTimeout(bind(this, function () { this.fx.add('messageup-' + id, { tweens: [[value[0], -100]], transition: Tween.Quadratic, duration: 300 }); }), message.staytime || 4000); } } else if (this.messages[id] && type == 'messageup') { var message = this.messages[id]; message.style.top = value[0] + 'px'; if (delta == 1) { message.parentNode.removeChild(message); delete this.messages[id]; } } }, addPointsBubbleAt: function (pos, points) { var id = 'bubble' + (this.UNIQID++); var y = this.game.scrollPos.y + pos.y; var bubble = newElement('span', { innerHTML: points, className: 'KICKASSELEMENT', styles: { position: 'absolute', font: \"20px Arial\", fontWeight: \"bold\", opacity: \"1\", color: \"black\", textShadow: \"#fff 1px 1px 3px\", top: y, zIndex: \"10000000\" } }); bubble.style.left = pos.x - bubble.offsetWidth / 2 + 'px'; getAppContainerElement().appendChild(bubble); this.pointBubbles[id] = bubble; this.fx.add('bubble-' + id, {tweens: [[y, y - 15], [1, 0]]}); }, showMessage: function (html, staytime) { staytime = staytime || false; var width = 300; var id = this.UNIQID++; var message = newElement('div', { innerHTML: html, className: 'KICKASSELEMENT', id: 'kickass-message-' + id, styles: { position: 'fixed', top: -100, left: '50%', marginLeft: -width / 2, width: width, background: '#222', opacity: 0.8, padding: '10px', color: '#fff', textAlign: 'center', borderRadius: 15, font: '20px Arial', fontWeight: 'bold', zIndex: \"10000000\" } }); message.staytime = staytime; getAppContainerElement().appendChild(message); var to = this.getLowestBubbleY(); message.kickassto = to; this.fx.add('messagedown-' + id, {duration: 300, tweens: [[-100, to]], transition: Tween.Quadratic}); this.messages[id] = message; return message; }, getLowestBubbleY: function () { var top = 100; for (var id in this.messages) if (this.messages.hasOwnProperty(id)) top = Math.max(this.messages[id].kickassto + this.messages[id].offsetHeight + 10, top); return top; } }); var AudioManager = new Class({ initialize: function (src, formats) { this.src = src; this.formats = formats; channels = 8; this.supportsAudio = (typeof document.createElement('audio').play) != 'undefined'; if (this.supportsAudio) { this.numChannels = channels; this.channels = []; for (var i = 0; i < this.numChannels; i++) { this.channels.push({isPlaying: false, element: this.prepareElement(this.buildAudioElement())}); } } }, buildAudioElement: function () { var TYPES = {\"ogg\": \"audio/ogg\", \"mp3\": \"audio/mpeg\"} var audio = document.createElement(\"audio\"); for (var i = 0, format; format = this.formats[i]; i++) { var source = document.createElement(\"source\"); source.src = this.src + \".\" + format; source.type = TYPES[format]; audio.appendChild(source); } return audio; }, prepareElement: function (el) { if (typeof el.addEventListener == 'undefined') return el; var self = this; el.addEventListener('ended', function (e) { self.audioEnded(el); }, false); return el; }, audioEnded: function (target) { for (var i = 0, channel; channel = this.channels[i]; i++) { if (channel.element === target) { channel.isPlaying = false; } } }, play: function () { if (!this.supportsAudio) return; for (var i = 0, channel; channel = this.channels[i]; i++) { if (!channel.isPlaying) { channel.isPlaying = true; if (typeof channel.element.play == 'function') channel.element.play(); return; } } } }); var Ships = { Standard: { points: [[-10, 10], [0, -15], [10, 10]], thrusters: [{s: {w: 20, h: 7}, p: {x: 0, y: 14}, a: 0}], cannons: [{p: {x: 0, y: -15}, a: 0}] } }; var PLAYERIDS = 0; var Player = new Class({ initialize: function (game) { this.id = PLAYERIDS++; this.game = game; this.tween = false; this.isBound = true; this.pos = new Vector(1630, 217);//飞机初始化位置 this.vel = new Vector(0, 0); this.acc = new Vector(0, 0); this.dir = new Vector(0, 1); this.currentRotation = 0; this.isBroken = false; this.lineOffsets = []; this.deadTime = 0; this.friction = 0.95; this.terminalVelocity = 2000; this.lastPos = new Vector(0, 0); }, setShip: function (ship) { this.ship = ship; this.verts = []; for (var i = 0, vert; vert = this.ship.points[i]; i++) this.verts.push(new Vector(vert[0], vert[1])); this.verts.push(this.verts[0]); this.thrusters = []; this.cannons = []; this.addThrusters(this.ship.thrusters); this.addCannons(this.ship.cannons); this.size = this.getSizeFromVertsAndObjects(); this.bounds = this.calculateBounds(); if (this.sheet) { this.sheet.destroy(); } this.sheet = new Sheet(new Rect(100, 100, this.bounds.x, this.bounds.y)); this.forceRedraw = true; }, setCannons: function (cannonClass) { var newCannons = []; for (var i = 0, cannon; cannon = this.cannons[i]; i++) { var newCannon = new cannonClass(this, this.game, cannon.pos.x, cannon.pos.y, cannon.angle); newCannons.push(newCannon); cannon.destroy(); } this.cannons = newCannons; }, addThrusters: function (thrusters) { for (var i = 0, data; data = thrusters[i]; i++) { var thruster = new Thruster(data); this.thrusters.push(thruster); } }, addCannons: function (cannons) { for (var i = 0, data; data = cannons[i]; i++) { var weaponClass = WeaponMap[data.m] || WeaponMap.cannon; var cannon = new weaponClass.cannonClass(this, this.game, data.p.x, data.p.y, data.a); cannon.player = this; cannon.game = this.game; this.cannons.push(cannon); } }, update: function (tdelta) { if (this.isBroken) { if (!this.lineOffsets.length) { for (var i = 0; i < (this.verts.length - 1); i++) this.lineOffsets[i] = { pos: new Vector(0, 0), dir: (new Vector(1, 1)).setAngle(Math.PI * 2 * Math.random()) }; } for (var i = 0; i < this.lineOffsets.length; i++) { this.lineOffsets[i].pos.add(this.lineOffsets[i].dir.cp().setLength(50).mul(tdelta)); } this.sheet.clear(); this.sheet.setAngle(this.dir.angle()); this.sheet.setPosition(this.pos); this.sheet.drawBrokenPlayer(this.verts, this.lineOffsets); if (now() - this.deadTime > 1000.0) { this.isBroken = false; this.lineOffsets = []; this.randomPos(); } return; } if (!this.tween) { if (this.game.isKeyPressed('left') || this.game.isKeyPressed('right')) { if (this.game.isKeyPressed('left')) this.rotateLeft(tdelta); if (this.game.isKeyPressed('right')) this.rotateRight(tdelta); } else { this.stopRotate(); } if (this.game.isKeyPressed('up')) this.activateThrusters(); else this.stopThrusters(); } if (this.game.isKeyPressed(' ')) { this.isShooting = true; if (!this.isBroken) this.shootPressed(); } else if (this.isShooting) { this.isShooting = false; this.shootReleased(); } if (this.currentRotation) this.dir.setAngle(this.dir.angle() + this.currentRotation * tdelta); var frictionedAcc = this.acc.mulNew(tdelta).sub(this.vel.mulNew(tdelta * this.friction)); this.vel.add(frictionedAcc); if (this.vel.len() > this.terminalVelocity) this.vel.setLength(this.terminalVelocity); var posDelta = this.vel.mulNew(tdelta); this.pos.add(posDelta); if (this.game.statisticsManager) { this.game.statisticsManager.increaseDistanceWithPixels(posDelta.len()); } var showFlames = !this.acc.is({x: 0, y: 0}); for (var i = 0, thruster; thruster = this.thrusters[i]; i++) { thruster.setIsShown(showFlames); thruster.update(tdelta); } if (this.isBound) this.checkBounds(); if (!this.lastPos.is(this.pos) || this.currentRotation || this.forceRedraw) { this.forceRedraw = false; this.sheet.clear(); this.sheet.setAngle(this.dir.angle() + Math.PI / 2); this.sheet.setPosition(this.pos); if (showFlames) { for (var i = 0, thruster; thruster = this.thrusters[i]; i++) thruster.drawTo(this.sheet); } this.sheet.drawPlayer(this.verts); this.lastPos = this.pos.cp(); } for (var i = 0, cannon; cannon = this.cannons[i]; i++) { cannon.update(tdelta); } }, randomPos: function () { var w = this.game.windowSize.width; var h = this.game.windowSize.height; this.pos = new Vector(random(0, w), random(0, h)); }, checkBounds: function () { if (this.tween) return; var w = this.game.windowSize.width; var h = this.game.windowSize.height; var rightBound = this.pos.x + this.sheet.rect.size.width / 2; var bottomBound = this.pos.y + this.sheet.rect.size.height / 2; if (rightBound > w) { window.scrollTo(this.game.scrollPos.x + 50, this.game.scrollPos.y); this.pos.x = 0; } else if (this.pos.x < 0) { window.scrollTo(this.game.scrollPos.x - 50, this.game.scrollPos.y); this.pos.x = w - this.sheet.rect.size.width / 2; } if (bottomBound > h) { window.scrollTo(this.game.scrollPos.x, this.game.scrollPos.y + h * 0.75); this.pos.y = 0; } else if (this.pos.y < 0) { window.scrollTo(this.game.scrollPos.x, this.game.scrollPos.y - h * 0.75); this.pos.y = h - this.sheet.rect.size.height / 2; } }, inRect: function (rect) { var ret = false; for (var i = 0, vert; vert = this.verts[i]; i++) { if (rect.hasPoint(new Vector(vert.x + this.pos.x, vert.y + this.pos.y))) ret = true; } return ret; }, hit: function (by) { if (this.isBroken) return; this.isBroken = true; this.deadTime = now(); }, activateThrusters: function () { if (this.game.statisticsManager) { this.game.statisticsManager.usedThrusters(); } this.acc = (new Vector(500, 0)).setAngle(this.dir.angle()); }, stopThrusters: function () { this.acc = new Vector(0, 0); }, rotateLeft: function (tdelta) { this.currentRotation = Math.max(-Math.PI * 2, this.currentRotation - Math.PI * 10 * tdelta); }, rotateRight: function (tdelta) { this.currentRotation = Math.min(Math.PI * 2, this.currentRotation + Math.PI * 10 * tdelta); }, stopRotate: function () { this.currentRotation = 0; }, getSizeFromVertsAndObjects: function () { var largestDistance = 0; for (var i = 0, vert; vert = this.verts[i]; i++) largestDistance = Math.max(largestDistance, (new Vector(vert)).len()); for (var i = 0, obj; obj = this.thrusters[i]; i++) { var p1 = (new Vector(obj.pos.x - obj.size.width / 2, obj.pos.y - obj.size.height / 2)).rotate(obj.angle); var p2 = (new Vector(obj.pos.x + obj.size.width / 2, obj.pos.y - obj.size.height / 2)).rotate(obj.angle); var p3 = (new Vector(obj.pos.x - obj.size.width / 2, obj.pos.y + obj.size.height / 2)).rotate(obj.angle); var p4 = (new Vector(obj.pos.x + obj.size.width / 2, obj.pos.y + obj.size.height / 2)).rotate(obj.angle); largestDistance = Math.max(largestDistance, p1.len(), p2.len(), p3.len(), p4.len()); } return {width: largestDistance * 2, height: largestDistance * 2}; }, calculateBounds: function () { return { x: Math.max(this.size.width, this.size.height) * 1, y: Math.max(this.size.height, this.size.width) * 1 }; }, shootPressed: function () { for (var i = 0, cannon; cannon = this.cannons[i]; i++) cannon.shootPressed(); }, shootReleased: function () { for (var i = 0, cannon; cannon = this.cannons[i]; i++) cannon.shootReleased(); }, flyTo: function (x, y, callback) { this.tween = { start: {pos: this.pos.cp(), dir: this.dir.cp()}, to: new Vector(x, y), callback: callback || function () { } }; this.tween.time = this.getTimeforTween(); }, destroy: function () { this.sheet.destroy(); } }); var Thruster = new Class({ initialize: function (data, ship) { this.pos = new Vector(data.p); this.size = {width: data.s.w, height: data.s.h}; this.angle = data.a || 0; this.ship = ship; this.isShown = false; this.flameY = 1; this.fx = new Fx(); this.fx.addListener(this); this.flames = {r: [], y: []}; this.lastFrameUpdate = 0; this.generateFlames(); }, update: function (tdelta) { this.fx.update(); if (now() - this.lastFrameUpdate > 1000 / 60) this.generateFlames(); }, set: function (key, value) { switch (key) { case'flames': this.flameY = value; break; } }, setIsShown: function (isShown) { if (!this.isShown && isShown) { this.flameY = 0.0; this.generateFlames(); this.fx.add('flames', {start: this.flameY, end: 1, duration: 250, transition: Tween.Quintic}); } this.isShown = isShown; }, drawTo: function (sheet) { sheet.drawFlames(this.flames, this.angle); }, generateFlames: function () { var redWidth = this.size.width, redIncrease = this.size.width * 0.05, yellowWidth = this.size.width * 0.8, yellowIncrease = yellowWidth * 0.1, halfRed = redWidth / 2, halfYellow = yellowWidth / 2, offsetY = -this.size.height / 2, metaY = 0; var px = this.pos.x; var py = this.pos.y - this.size.height / 2; function vec(x, y) { return new Vector(x, y); } this.flames.r = [vec(-halfRed + px, py)]; this.flames.y = [vec(-halfYellow + px, py)]; this.flames.self = this; for (var x = 0; x < redWidth; x += redIncrease) this.flames.r.push(vec(x - halfRed + px, this.flameY * random(this.size.height * 0.7, this.size.height) + py)); this.flames.r.push(vec(halfRed + px, py)); for (var x = 0; x < yellowWidth; x += yellowIncrease) this.flames.y.push(vec(x - halfYellow + px, this.flameY * random(this.size.height * 0.4, this.size.height * 0.7) + py)); this.flames.y.push(vec(halfYellow + px, py)); this.lastFrameUpdate = now(); var pos = vec(px, py); for (var i = 0, p; p = this.flames.r[i]; i++) p.sub(pos).rotate(this.angle).add(pos); for (var i = 0, p; p = this.flames.y[i]; i++) p.sub(pos).rotate(this.angle).add(pos); } }); var BombManager = new Class({ initialize: function (game) { this.game = game; this.bombShowDelay = 30; this.nextBomb = this.bombShowDelay; }, update: function (tdelta) { if (this.game.isKeyPressed('F') && this.isReady()) { this.blow(); } if (this.nextBomb === -1 || !this.game.sessionManager.isPlaying) { return; } this.nextBomb -= tdelta; if (this.nextBomb < 0) { this.game.menuManager.showBombMenu(); this.nextBomb = -1; this.game.ui.showMessage(\"BOMB IS READY(lower right corner or F)\"); } }, blow: function () { var message = this.game.ui.showMessage(\"3...\", 5000); delay(1000, function () { message.innerHTML = \"2...\"; }, this); delay(2000, function () { message.innerHTML = \"1...\"; }, this); delay(3000, function () { message.innerHTML = \"boom\"; }, this); delay(3000, this.blowStuffUp, this); this.nextBomb = this.bombShowDelay; }, blowStuffUp: function () { this.game.bulletManager.updateEnemyIndex(); var index = this.game.bulletManager.enemyIndex; for (var i = 0, el; (el = index[i]) && i < 10; i++) { var rect = getRect(el); var center = new Vector(rect.left + rect.width / 2, rect.top + rect.height / 2); this.game.explosionManager.addExplosion(center, el, MegaParticleExplosion); el.parentNode.removeChild(el); } this.game.menuManager.hideBombMenu(); this.nextBomb = this.bombShowDelay; }, isReady: function () { return this.nextBomb === -1; } }); var ELEMENTSTHATARENOTTOBEINCLUDED = ['BR', 'SCRIPT', 'STYLE', 'TITLE', 'META', 'HEAD', 'OPTION', 'OPTGROUP', 'LINK']; var ELEMENTSIZETHRESHOLD = 5; var BulletManager = new Class({ initialize: function (game) { this.game = game; this.lastBlink = 0; this.blinkActive = false; this.enemyIndex = []; this.updateDelay = 2.5; this.nextUpdate = this.updateDelay; }, update: function (tdelta) { if (this.game.isKeyPressed('B')) { this.blink(); } else if (this.blinkActive) { this.endBlink(); } this.nextUpdate -= tdelta; if (this.nextUpdate < 0) { this.updateEnemyIndex(); } }, blink: function () { if (now() - this.lastBlink > 250) { for (var i = 0, el; el = this.enemyIndex[i]; i++) { if (!this.blinkActive) el.style.outline = '1px solid red'; else el.style.outline = el.KICKASSOLDBORDER; } this.blinkActive = !this.blinkActive; this.lastBlink = now(); if (!this.blinkActive) { this.updateEnemyIndex(); } } }, endBlink: function () { for (var i = 0, el; el = this.enemyIndex[i]; i++) el.style.outline = el.KICKASSOLDBORDER; this.lastBlink = 0; this.blinkActive = false; }, updateEnemyIndex: function () { var all = document.getElementsByTagName('*'); this.enemyIndex = []; for (var i = 0, el; el = all[i]; i++) { if (this.isDestroyable(el)) { this.enemyIndex.push(el); el.KICKASSOLDBORDER = el.style.outline || (document.defaultView.getComputedStyle(el, null).outline); } } this.nextUpdate = this.updateDelay; }, isDestroyable: function (element, ignoreSize) { if (this.shouldIgnoreElement(element, ignoreSize)) return false; for (var i = 0, child; child = element.childNodes[i]; i++) { if (child.nodeType === 1 && ELEMENTSTHATARENOTTOBEINCLUDED.indexOf(child.tagName) === -1 && (child.offsetWidth >= ELEMENTSIZETHRESHOLD && child.offsetHeight >= ELEMENTSIZETHRESHOLD) && document.defaultView.getComputedStyle(child, null).visibility !== 'hidden') { return false; } } return true; }, isDestroyableFromCollision: function (element) { return this.isDestroyable(element, true); }, shouldIgnoreElement: function (element, ignoreSize) { if (element.nodeType !== 1) return true; if (element == document.documentElement || element == document.body) return true; if (ELEMENTSTHATARENOTTOBEINCLUDED.indexOf(element.tagName) !== -1) return true; if (element.style.visibility == 'hidden' || element.style.display == 'none') return true; if (typeof element.className == \"string\" && element.className.indexOf('KICKASSELEMENT') != -1) return true; if (!ignoreSize) { if (element.offsetWidth < ELEMENTSIZETHRESHOLD || element.offsetHeight < ELEMENTSIZETHRESHOLD) return true; } var rect; if (element.offsetLeft < 0 || element.offsetTop < 0) { rect = getRect(element); if (rect.left + rect.width < 0 || rect.top + rect.height < 0) return true; } if (!rect) rect = getRect(element); if (rect.top >= this.game.scrollSize.y) return true; return false; }, destroy: function () { for (var key in this.bullets) if (this.bullets.hasOwnProperty(key)) for (var i = 0, bullet; bullet = this.bullets[key][i]; i++) bullet.destroy(); this.bullets = {}; } }); var SessionManager = new Class({ initialize: function (game) { this.game = game; this.isPlaying = false; }, update: function (tdelta) { if (this.isPlaying && this.game.bulletManager.enemyIndex.length == 0) { this.weHaveWon(); } }, weHaveWon: function () { this.isPlaying = false; this.game.ui.showMessage(\"You're done!\"); if (this.game.isCampaign()) { this.game.menuManager.showMenu(); this.game.menuManager.navigateTo('highscores'); } else { this.game.menuManager.showMenu(); } this.game.menuManager.sendMessageToMenu(\"gameFinished:!\"); } }); var ExplosionManager = new Class({ initialize: function (game) { this.game = game; this.explosions = []; }, update: function (tdelta) { var time = now(); for (var i = 0, explosion; explosion = this.explosions[i]; i++) { if (time - explosion.bornAt > (explosion.ttl || 500)) { explosion.destroy(); this.explosions.splice(i, 1); continue; } explosion.update(tdelta); } }, addExplosion: function (pos, forElement, explosionClass) { explosionClass = explosionClass || ParticleExplosion; var explosion = new explosionClass(pos, forElement); explosion.game = this.game; explosion.checkBounds(); this.explosions.push(explosion); if (this.game.audioManager.explosion) { this.game.audioManager.explosion.play(); } }, destroy: function () { for (var i = 0, explosion; explosion = this.explosions[i]; i++) explosion.destroy(); this.explosions = []; } }); var Cannon = new Class({ initialize: function (player, game, x, y, angle) { this.player = player; this.game = game; this.pos = new Vector(x, y); this.angle = angle || 0; }, shootPressed: function () { }, shootReleased: function () { }, checkCollisions: function () { }, getExplosionClass: function () { return ParticleExplosion; }, update: function (tdelta) { this.game.hideAll(); this.checkCollisions(tdelta); this.game.showAll(); }, checkCollision: function (bullet) { var hit = bullet.checkCollision(); if (!hit) return false; this.game.explosionManager.addExplosion(bullet.pos, hit, this.getExplosionClass()); this.game.menuManager.addPoints(Math.min(hit.getElementsByTagName('*').length + 1, 100), bullet.pos); if (!hit.isShot) { hit.parentNode.removeChild(hit); } if (this.game.statisticsManager) { this.game.statisticsManager.addElementsDestroyed(); } return true; }, createBullet: function (bulletClass) { var pos = this.getABulletPos(); var dir = this.getABulletDir(); var bullet = new bulletClass(pos, dir); bullet.game = this.game; bullet.manager = this; bullet.initCanvas(); bullet.vel.add(bullet.vel.cp().setLength(this.player.vel.len())); return bullet; }, getABulletPos: function () { return this.player.pos.cp().add(this.pos.cp().rotate(this.player.dir.angle() + Math.PI / 2)); }, getABulletDir: function () { return this.player.dir.cp().rotate(this.angle); }, destroy: function () { } }); var LaserCannon = new Class({ Extends: Cannon, initialize: function (player, game, x, y, angle) { Cannon.prototype.initialize.apply(this, arguments); this.lasers = []; }, getExplosionClass: function () { return SplitExplosion; }, update: function (tdelta) { if (!this.lasers.length) return; this.removeOld(); Cannon.prototype.update.call(this, tdelta); }, checkCollisions: function (tdelta) { for (var i = 0, laser; laser = this.lasers[i]; i++) { laser.update(tdelta); if (this.checkCollision(laser)) { } } }, removeOld: function () { for (var i = 0, laser; laser = this.lasers[i]; i++) { if (laser.outOfBounds) { laser.destroy(); this.lasers.splice(i, 1); } } }, shootPressed: function () { if (this.lasers.length > 5) { return; } if (now() - this.lastFired < 500) { return; } this.lastFired = now(); if (this.game.statisticsManager) { this.game.statisticsManager.addShotFired(); } this.lasers.push(this.createBullet(LaserBullet)); }, destroy: function () { if (this.lasers.length) { for (var i = 0, laser; laser = this.lasers[i]; i++) { laser.destroy(); } this.lasers = []; } } }); var BallCannon = new Class({ Extends: Cannon, initialize: function () { Cannon.prototype.initialize.apply(this, arguments); this.lastFired = 0; this.bullets = []; }, getExplosionClass: function () { return ParticleExplosion; }, update: function (tdelta) { if (!this.bullets.length) { return; } this.removeOld(); Cannon.prototype.update.call(this, tdelta); }, removeOld: function () { var time = now(); for (var i = 0, bullet; bullet = this.bullets[i]; i++) { if (time - bullet.bornAt > 2000) { bullet.destroy(); this.bullets.splice(i, 1); } } }, checkCollisions: function (tdelta) { for (var i = 0, bullet; bullet = this.bullets[i]; i++) { bullet.update(tdelta); if (this.checkCollision(bullet)) { bullet.destroy(); this.bullets.splice(i, 1); } } }, shootPressed: function () { if (now() - this.lastFired < 200) { return; } this.lastFired = now(); this.addBullet(); if (this.game.statisticsManager) { this.game.statisticsManager.addShotFired(); } }, addBullet: function () { if (this.bullets.length > 7) { this.bullets[0].destroy(); this.bullets.shift(); } var bullet = this.createBullet(Bullet); this.bullets.push(bullet); }, destroy: function () { for (var i = 0, bullet; bullet = this.bullets[i]; i++) { bullet.destroy(); } this.bullets = []; } }); var Bullet = new Class({ initialize: function (pos, dir) { this.pos = pos.cp(); this.dir = dir; this.vel = new Vector(500, 500); this.bornAt = now(); }, initCanvas: function () { this.sheet = new Sheet(new Rect(this.pos.x, this.pos.y, 5, 5)); this.sheet.drawBullet(); }, draw: function () { this.sheet.setPosition(this.pos); }, update: function (tdelta) { this.pos.add(this.vel.setAngle(this.dir.angle()).mulNew(tdelta)); this.checkBounds(); this.draw(); }, checkCollision: function () { var element = document.elementFromPoint(this.pos.x, this.pos.y); if (element && element.nodeType == 3) element = element.parentNode; var didFind = element && this.game.bulletManager.isDestroyableFromCollision(element) ? element : false; return didFind; }, checkBounds: function () { var w = this.game.windowSize.width; var h = this.game.windowSize.height; var rightBound = this.pos.x + this.sheet.rect.size.width / 2; var bottomBound = this.pos.y + this.sheet.rect.size.height / 2; if (rightBound > w) this.pos.x = 0; else if (this.pos.x < 0) this.pos.x = w - this.sheet.rect.size.width / 2; if (bottomBound > h) this.pos.y = 0; else if (this.pos.y < 0) this.pos.y = h - this.sheet.rect.size.height / 2; }, destroy: function () { this.sheet.destroy(); } }); var LaserBullet = new Class({ Extends: Bullet, initialize: function () { Bullet.prototype.initialize.apply(this, arguments); this.vel = new Vector(750, 750); this.lastDrawPos = this.pos.cp(); }, initCanvas: function () { var s = Math.max(GameGlobals.laserImage.width, GameGlobals.laserImage.height); this.sheet = new Sheet(new Rect(0, 0, s, s)); }, update: function (tdelta) { Bullet.prototype.update.apply(this, arguments); }, draw: function () { this.sheet.drawLaser(this.pos, this.dir); this.lastDrawPos = this.pos.cp(); }, checkBounds: function () { var w = this.game.windowSize.width; var h = this.game.windowSize.height; var rightBound = this.pos.x + this.sheet.rect.size.width / 2; var bottomBound = this.pos.y + this.sheet.rect.size.height / 2; if (rightBound > w || this.pos.x < 0) this.outOfBounds = true; if (bottomBound > h || this.pos.y < 0) this.outOfBounds = true; }, destroy: function () { this.sheet.destroy(); } }); GameGlobals.laserImage = document.createElement('img'); GameGlobals.laserImage.src = GameGlobals.path('css/gfx/kickass/laser.png'); var Explosion = new Class({ initialize: function (pos, element) { this.bornAt = now(); this.pos = pos.cp(); }, update: function (tdelta) { }, checkBounds: function () { }, destroy: function () { } }); var ParticleExplosion = new Class({ Extends: Explosion, initialize: function (pos, element) { Explosion.prototype.initialize.apply(this, arguments); this.particleVel = new Vector(150, 0); this.particles = []; this.generateParticles(); this.sheet = new Sheet(new Rect(pos.x, pos.y, 250, 250)); }, update: function (tdelta) { for (var i = 0, particle; particle = this.particles[i]; i++) particle.pos.add(particle.vel.mulNew(tdelta).mul(random(0.5, 1.0)).setAngle(particle.dir.angle())); this.sheet.clear(); this.sheet.drawExplosion(this.particles); }, generateParticles: function () { for (var i = 0, j = !GameGlobals.hasCanvas ? 10 : 40; i < j; i++) { this.particles.push({ dir: (new Vector(random(0, 20) - 10, random(0, 20) - 10)).normalize(), vel: this.particleVel.cp(), pos: new Vector(0, 0), color: ['yellow', 'red'][random(0, 1)] }); } }, checkBounds: function () { var right = this.sheet.rect.getRight(); var bottom = this.sheet.rect.getBottom(); var w = this.game.windowSize.width; var h = this.game.windowSize.height; if (right > w) this.pos.x -= right - w; if (bottom > h) this.pos.y -= bottom - h; this.sheet.setPosition(this.pos); }, destroy: function () { this.sheet.destroy(); } }); var MegaParticleExplosion = new Class({ Extends: ParticleExplosion, initialize: function (pos, element) { Explosion.prototype.initialize.apply(this, arguments); this.particleVel = new Vector(200, 0); this.particles = []; this.generateParticles(); this.sheet = new Sheet(new Rect(pos.x, pos.y, 500, 500)); this.ttl = 2000; this.generationDelay = 0.6; this.generationTimes = 2; this.nextGenerate = this.generationDelay; }, update: function (tdelta) { this.nextGenerate -= tdelta; if (this.nextGenerate 0) { this.nextGenerate = this.generationDelay; this.generateParticles(); this.generationTimes--; } ParticleExplosion.prototype.update.call(this, tdelta); } }); var SplitExplosion = new Class({ Extends: Explosion, initialize: function (pos, element) { if (!element) return; Explosion.prototype.initialize.apply(this, arguments); this.element = element; this.fx = new Fx(); this.fx.addListener(this); this.start(); }, update: function (tdelta) { if (!this.element) return; this.fx.update(); }, set: function (key, value) { if (key == 'opacity') { } }, start: function () { var pieces = this.createClones(); var left = pieces[0], right = pieces[1]; var lT = 'rotate(-' + random(30, 50) + 'deg) translate(-100px, 40px)'; var rT = 'rotate(' + random(30, 50) + 'deg) translate(100px, 40px)'; setStyles(left, {'transform': lT}); setStyles(right, {'transform': rT}); this.left = left; this.right = right; this.fx.add('opacity', {start: 1, end: 0.5, duration: 500}); }, createClones: function () { var coords = getRect(this.element); var leftContainer = this.createContainer(coords); var rightContainer = this.createContainer(coords); var left = cloneElement(this.element); var right = cloneElement(this.element); addClass(left, 'KICKASSELEMENT'); addClass(right, 'KICKASSELEMENT'); var styles = {margin: 0, overflow: 'hidden'}; setStyles(left, styles); setStyles(right, styles); leftContainer.appendChild(left); rightContainer.appendChild(right); rightContainer.style.left = coords.left + coords.width / 2 + 'px'; rightContainer.scrollLeft += coords.width / 2; this.element.style.opacity = 0; this.element.style.visibility = 'hidden'; this.element.style.display = 'none'; return each([leftContainer, rightContainer], function (el) { el.style.transition = 'transform 500ms ease-in'; }); }, createContainer: function (coords) { var ret = document.createElement('div'); setStyles(ret, { position: 'absolute', left: coords.left, top: coords.top, width: coords.width * 0.5, height: coords.height, overflow: 'hidden' }); getAppContainerElement().appendChild(ret); return ret; }, destroy: function () { try { this.left.parentNode.removeChild(this.left); this.right.parentNode.removeChild(this.right); this.element.parentNode.removeChild(this.element); } catch (e) { } } }); var Weapons = { 1: {name: 'Cannon', id: 'cannon', cannonClass: BallCannon}, 2: {name: 'Laser', id: 'laser', cannonClass: LaserCannon} }; var WeaponMap = {'cannon': Weapons[1], 'laser': Weapons[2]}; var SheetCanvas = new Class({ initialize: function (rect) { this.canvas = document.createElement('canvas'); this.canvas.className = 'KICKASSELEMENT'; with (this.canvas.style) { position = 'absolute'; zIndex = '1000000'; } GameGlobals.kickass.registerElement(this.canvas); if (this.canvas.getContext) this.ctx = this.canvas.getContext('2d'); this.rect = rect; this.angle = 0; this.updateCanvas(); getAppContainerElement().appendChild(this.canvas); }, tracePoly: function (verts) { if (!verts[0]) return; this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); this.ctx.rotate(this.angle); this.ctx.beginPath(); this.ctx.moveTo(verts[0].x, verts[0].y); for (var i = 0; i < verts.length; i++) { this.ctx.lineTo(verts[i].x, verts[i].y); } this.ctx.restore(); }, setAngle: function (angle) { this.angle = angle; }, updateCanvas: function () { if (this.canvas.width != this.rect.size.width) this.canvas.width = this.rect.size.width; if (this.canvas.height != this.rect.size.height) this.canvas.height = this.rect.size.height; this.canvas.style.left = GameGlobals.kickass.scrollPos.x + (this.rect.pos.x - this.rect.size.width / 2) + 'px'; this.canvas.style.top = GameGlobals.kickass.scrollPos.y + (this.rect.pos.y - this.rect.size.height / 2) + 'px'; }, drawLine: function (xFrom, yFrom, xTo, yTo) { this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); this.ctx.beginPath(); this.ctx.moveTo(xFrom, yFrom); this.ctx.lineTo(xTo, yTo); this.ctx.closePath(); this.ctx.stroke(); this.ctx.restore(); }, drawCircle: function (radius, pos) { pos = pos || {x: 0, y: 0}; this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); if (pos) this.ctx.translate(pos.x, pos.y); this.ctx.beginPath(); this.ctx.arc(0, 0, radius, 0, Math.PI * 2, true); this.ctx.fill(); this.ctx.closePath(); this.ctx.restore(); }, drawRect: function (x, y, w, h) { this.ctx.save(); this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2); this.ctx.translate(x, y); this.ctx.fillRect(x, y, w, h); this.ctx.restore(); this.ctx.fill(); }, drawImageFull: function (image) { this.ctx.drawImage(image, 0, 0, this.rect.size.width, this.rect.size.height); }, drawImage: function (image, x, y) { this.ctx.save(); this.ctx.translate(this.rect.size.width / 2 + x, this.rect.size.height / 2 + y); this.ctx.rotate(this.angle); this.ctx.drawImage(image, 0, -11); this.ctx.restore(); }, setFillColor: function (color) { this.ctx.fillStyle = color; }, setStrokeColor: function (color) { this.ctx.strokeStyle = color; }, setLineWidth: function (width) { this.ctx.lineWidth = width; }, fillPath: function () { this.ctx.fill(); }, strokePath: function () { this.ctx.stroke(); }, clear: function () { this.ctx.clearRect(0, 0, this.rect.size.width, this.rect.size.height); }, destroy: function () { GameGlobals.kickass.unregisterElement(this.canvas); this.canvas.parentNode.removeChild(this.canvas); } }); var Sheet = new Class({ initialize: function (rect) { this.rect = rect; this.drawer = new SheetCanvas(rect); }, clear: function () { this.drawer.clear(); }, setPosition: function (pos) { this.rect.pos = pos.cp(); this.drawer.rect = this.rect; this.drawer.updateCanvas(); }, setAngle: function (angle) { this.drawer.setAngle(angle); }, drawPlayer: function (verts) { this.drawer.setFillColor('white'); this.drawer.setStrokeColor('black'); this.drawer.setLineWidth(1.5); this.drawer.tracePoly(verts); this.drawer.fillPath(); this.drawer.tracePoly(verts); this.drawer.strokePath(); }, drawBrokenPlayer: function (verts, lineOffsets) { this.drawer.setStrokeColor('black'); this.drawer.setLineWidth(1.5); for (var i = 1, vert, lastVert = verts[0]; vert = verts[i]; i++, lastVert = vert) { var o = lineOffsets[i - 1]; this.drawer.drawLine(lastVert.x + o.pos.x, lastVert.x + o.pos.y, vert.x + o.pos.x, vert.y + o.pos.y); } }, drawFlames: function (flames, angle) { this.drawer.setLineWidth(1.5); this.drawer.setFillColor('red'); this.drawer.tracePoly(flames.r); this.drawer.fillPath(); this.drawer.setFillColor('yellow'); this.drawer.tracePoly(flames.y); this.drawer.fillPath(); }, drawBullet: function () { this.drawer.setFillColor(GameGlobals.bulletColor); this.drawer.drawCircle(2.5); }, drawExplosion: function (particles) { for (var i = 0, particle; particle = particles[i]; i++) { this.drawer.setFillColor(particle.color); this.drawer.drawRect(particle.pos.x, particle.pos.y, 3, 3); } }, drawFace: function (face) { this.drawer.drawImageFull(face); }, drawLaser: function (pos, dir) { this.clear(); this.setPosition(pos); this.drawer.setAngle(dir.angle()); this.drawer.drawImage(GameGlobals.laserImage, 0, 0); }, transformToSheetCoordinates: function (vec) { var ret = vec.cp().sub(new Vector(this.rect.size.width / 2, this.rect.size.height / 2)); return ret; }, destroy: function () { this.drawer.destroy(); } }); var namespace = getGlobalNamespace(); var initKickAss = function () { // If an instance of KickAss is already present, we add a player if (!namespace.KICKASSGAME) { if (namespace.KICKASS_SITE_KEY) { var mySite = new MySite(namespace.KICKASS_SITE_KEY); mySite.load(function (ok) { namespace.KICKASSGAME = GameGlobals.kickass = new KickAss({ mySite: ok ? mySite : false }); namespace.KICKASSGAME.begin(); }); } else { namespace.KICKASSGAME = GameGlobals.kickass = new KickAss(); namespace.KICKASSGAME.begin(); } } else { namespace.KICKASSGAME.addPlayer(); } }; if (namespace.LAZYLOAD_KICKASS) { window.startBrowserBlaster = initKickAss; } else { initKickAss(); } function getAppContainerElement() { if (namespace.KICKASS_CONTAINER_ELEMENT) { return document.getElementById(namespace.KICKASS_CONTAINER_ELEMENT); } else { return document.body; } } })(typeof exports != 'undefined' ? exports : window);"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/txmap.js","permalink":"https://en.blog.sinzmise.top/js/txmap.js","excerpt":"","text":"//get请求 $.ajax({ type: 'get', url: 'https://apis.map.qq.com/ws/location/v1/ip', data: { key: 'RIPBZ-MLQ64-A6WUR-KL2YV-O4KY5-DZFTC', output: 'jsonp', }, dataType: 'jsonp', success: function (res) { ipLocation = res; } }) function getDistance(e1, n1, e2, n2) { const R = 6371 const { sin, cos, asin, PI, hypot } = Math let getPoint = (e, n) => { e *= PI / 180 n *= PI / 180 return { x: cos(n) * cos(e), y: cos(n) * sin(e), z: sin(n) } } let a = getPoint(e1, n1) let b = getPoint(e2, n2) let c = hypot(a.x - b.x, a.y - b.y, a.z - b.z) let r = asin(c / 2) * 2 * R return Math.round(r); } function showWelcome() { let dist = getDistance(114.21416, 22.576264, ipLocation.result.location.lng, ipLocation.result.location.lat); //这里记得换成自己的经纬度 let pos = ipLocation.result.ad_info.nation; let ip; let posdesc; //根据国家、省份、城市信息自定义欢迎语 switch (ipLocation.result.ad_info.nation) { case \"日本\": posdesc = \"よろしく,一起去看樱花吗\"; break; case \"美国\": posdesc = \"Let us live in peace!\"; break; case \"英国\": posdesc = \"想同你一起夜乘伦敦眼\"; break; case \"俄罗斯\": posdesc = \"干了这瓶伏特加!\"; break; case \"法国\": posdesc = \"C'est La Vie\"; break; case \"德国\": posdesc = \"Die Zeit verging im Fluge.\"; break; case \"澳大利亚\": posdesc = \"一起去大堡礁吧!\"; break; case \"加拿大\": posdesc = \"拾起一片枫叶赠予你\"; break; case \"中国\": pos = ipLocation.result.ad_info.province + \" \" + ipLocation.result.ad_info.city + \" \" + ipLocation.result.ad_info.district; ip = ipLocation.result.ip; switch (ipLocation.result.ad_info.province) { case \"北京市\": posdesc = \"北——京——欢迎你~~~\"; break; case \"天津市\": posdesc = \"讲段相声吧\"; break; case \"河北省\": posdesc = \"山势巍巍成壁垒,天下雄关铁马金戈由此向,无限江山\"; break; case \"山西省\": posdesc = \"展开坐具长三尺,已占山河五百余\"; break; case \"内蒙古自治区\": posdesc = \"天苍苍,野茫茫,风吹草低见牛羊\"; break; case \"辽宁省\": posdesc = \"我想吃烤鸡架!\"; break; case \"吉林省\": posdesc = \"状元阁就是东北烧烤之王\"; break; case \"黑龙江省\": posdesc = \"很喜欢哈尔滨大剧院\"; break; case \"上海市\": posdesc = \"众所周知,中国只有两个城市\"; break; case \"江苏省\": switch (ipLocation.result.ad_info.city) { case \"南京市\": posdesc = \"这是我挺想去的城市啦\"; break; case \"苏州市\": posdesc = \"上有天堂,下有苏杭\"; break; default: posdesc = \"散装是必须要散装的\"; break; } break; case \"浙江省\": posdesc = \"东风渐绿西湖柳,雁已还人未南归\"; break; case \"河南省\": switch (ipLocation.result.ad_info.city) { case \"郑州市\": posdesc = \"豫州之域,天地之中\"; break; case \"南阳市\": posdesc = \"臣本布衣,躬耕于南阳此南阳非彼南阳!\"; break; case \"驻马店市\": posdesc = \"峰峰有奇石,石石挟仙气嵖岈山的花很美哦!\"; break; case \"开封市\": posdesc = \"刚正不阿包青天\"; break; case \"洛阳市\": posdesc = \"洛阳牡丹甲天下\"; break; default: posdesc = \"可否带我品尝河南烩面啦?\"; break; } break; case \"安徽省\": posdesc = \"蚌埠住了,芜湖起飞\"; break; case \"福建省\": posdesc = \"井邑白云间,岩城远带山\"; break; case \"江西省\": posdesc = \"落霞与孤鹜齐飞,秋水共长天一色\"; break; case \"山东省\": posdesc = \"遥望齐州九点烟,一泓海水杯中泻\"; break; case \"湖北省\": switch (ipLocation.result.ad_info.city) { case \"黄冈市\": posdesc = \"红安将军县!辈出将才!\"; break; default: posdesc = \"来碗热干面~\"; break; } break; case \"湖南省\": posdesc = \"74751,长沙斯塔克\"; break; case \"广东省\": switch (ipLocation.result.ad_info.city) { case \"广州市\": posdesc = \"看小蛮腰,喝早茶了嘛~\"; break; case \"深圳市\": posdesc = \"今天你逛商场了嘛~\"; break; case \"阳江市\": posdesc = \"阳春合水!博主家乡~ 欢迎来玩~\"; break; default: posdesc = \"来两斤福建人~\"; break; } break; case \"广西壮族自治区\": posdesc = \"桂林山水甲天下\"; break; case \"海南省\": posdesc = \"朝观日出逐白浪,夕看云起收霞光\"; break; case \"四川省\": posdesc = \"康康川妹子\"; break; case \"贵州省\": posdesc = \"茅台,学生,再塞200\"; break; case \"云南省\": posdesc = \"玉龙飞舞云缠绕,万仞冰川直耸天\"; break; case \"西藏自治区\": posdesc = \"躺在茫茫草原上,仰望蓝天\"; break; case \"陕西省\": posdesc = \"来份臊子面加馍\"; break; case \"甘肃省\": posdesc = \"羌笛何须怨杨柳,春风不度玉门关\"; break; case \"青海省\": posdesc = \"牛肉干和老酸奶都好好吃\"; break; case \"宁夏回族自治区\": posdesc = \"大漠孤烟直,长河落日圆\"; break; case \"新疆维吾尔自治区\": posdesc = \"驼铃古道丝绸路,胡马犹闻唐汉风\"; break; case \"台湾省\": posdesc = \"我在这头,大陆在那头\"; break; case \"香港特别行政区\": posdesc = \"永定贼有残留地鬼嚎,迎击光非岁玉\"; break; case \"澳门特别行政区\": posdesc = \"性感荷官,在线发牌\"; break; default: posdesc = \"带我去你的城市逛逛吧!\"; break; } break; default: posdesc = \"带我去你的国家逛逛吧\"; break; } //根据本地时间切换欢迎语 let timeChange; let date = new Date(); if (date.getHours() >= 5 && date.getHours() < 11) timeChange = \"🌤️ 早上好,一日之计在于晨\"; else if (date.getHours() >= 11 && date.getHours() < 13) timeChange = \"☀️ 中午好,记得午休喔~\"; else if (date.getHours() >= 13 && date.getHours() < 17) timeChange = \"🕞 下午好,饮茶先啦!\"; else if (date.getHours() >= 17 && date.getHours() < 19) timeChange = \"🚶‍♂️ 即将下班,记得按时吃饭~\"; else if (date.getHours() >= 19 && date.getHours() < 24) timeChange = \"🌙 晚上好,夜生活嗨起来!\"; else timeChange = \"夜深了,早点休息,少熬夜\"; // 新增ipv6显示为指定内容 if (ip.includes(\":\")) { ip = \"好复杂,咱看不懂~(ipv6)\"; } try { //自定义文本和需要放的位置 document.getElementById(\"welcome-info\").innerHTML = `欢迎来自 ${pos} 的小友💖${posdesc}🍂当前位置距博主约 ${dist} 公里!您的IP地址为:${ip}${timeChange} `; } catch (err) { console.log(\"Pjax无法获取元素\") } } window.onload = showWelcome; // 如果使用了pjax在加上下面这行代码 document.addEventListener('pjax:complete', showWelcome);"},{"title":"","date":"2024-11-10T11:43:39.755Z","updated":"2024-11-10T11:43:39.755Z","comments":true,"path":"js/waifu-tips.json","permalink":"https://en.blog.sinzmise.top/js/waifu-tips.json","excerpt":"","text":"{\"mouseover\":[{\"selector\":\"#live2d\",\"text\":[\"干嘛呢你,快把手拿开~~\",\"鼠…鼠标放错地方了!\",\"你要干嘛呀?\",\"喵喵喵?\",\"怕怕(ノ≧∇≦)ノ\",\"非礼呀!救命!\",\"这样的话,只能使用武力了!\",\"我要生气了哦\",\"不要动手动脚的!\",\"真…真的是不知羞耻!\",\"Hentai!\"]},{\"selector\":\"#waifu-tool-hitokoto\",\"text\":[\"猜猜我要说些什么?\",\"我从青蛙王子那里听到了不少人生经验。\"]},{\"selector\":\"#waifu-tool-asteroids\",\"text\":[\"要不要来玩飞机大战?\",\"这个按钮上写着「不要点击」。\",\"怎么,你想来和我玩个游戏?\",\"听说这样可以蹦迪!\"]},{\"selector\":\"#waifu-tool-switch-model\",\"text\":[\"你是不是不爱人家了呀,呜呜呜~\",\"要见见我的姐姐嘛?\",\"想要看我妹妹嘛?\",\"要切换看板娘吗?\"]},{\"selector\":\"#waifu-tool-switch-texture\",\"text\":[\"喜欢换装 PLAY 吗?\",\"这次要扮演什么呢?\",\"变装!\",\"让我们看看接下来会发生什么!\"]},{\"selector\":\"#waifu-tool-photo\",\"text\":[\"你要给我拍照呀?一二三~茄子~\",\"要不,我们来合影吧!\",\"保持微笑就好了~\"]},{\"selector\":\"#waifu-tool-info\",\"text\":[\"想要知道更多关于我的事么?\",\"这里记录着我搬家的历史呢。\",\"你想深入了解我什么呢?\"]},{\"selector\":\"#waifu-tool-quit\",\"text\":[\"到了要说再见的时候了吗?\",\"呜呜 QAQ 后会有期……\",\"不要抛弃我呀……\",\"我们,还能再见面吗……\",\"哼,你会后悔的!\"]},{\"selector\":\".menu-item-home a\",\"text\":[\"点击前往首页,想回到上一页可以使用浏览器的后退功能哦。\",\"点它就可以回到首页啦!\",\"回首页看看吧。\"]},{\"selector\":\".menu-item-about a\",\"text\":[\"你想知道我家主人是谁吗?\",\"这里有一些关于我家主人的秘密哦,要不要看看呢?\",\"发现主人出没地点!\"]},{\"selector\":\".menu-item-tags a\",\"text\":[\"点击就可以看文章的标签啦!\",\"点击来查看所有标签哦。\"]},{\"selector\":\".menu-item-categories a\",\"text\":[\"文章都分类好啦~\",\"点击来查看文章分类哦。\"]},{\"selector\":\".menu-item-archives a\",\"text\":[\"翻页比较麻烦吗,那就来看看文章归档吧。\",\"文章目录都整理在这里啦!\"]},{\"selector\":\".menu-item-friends a\",\"text\":[\"这是我的朋友们哦ヾ(◍°∇°◍)ノ゙\",\"要去大佬们的家看看吗?\",\"要去拜访一下我的朋友们吗?\"]},{\"selector\":\".menu-item-search a\",\"text\":[\"找不到想看的内容?搜索看看吧!\",\"在找什么东西呢,需要帮忙吗?\"]},{\"selector\":\".menu-item a\",\"text\":[\"快看看这里都有什么呢?\"]},{\"selector\":\".site-author\",\"text\":[\"我家主人好看吗?\",\"这是我家主人(*´∇`*)\"]},{\"selector\":\".site-state\",\"text\":[\"这是文章的统计信息~\",\"要不要点进去看看?\"]},{\"selector\":\".feed-link a\",\"text\":[\"这里可以使用 RSS 订阅呢!\",\"利用 feed 订阅器,就能快速知道博客有没有更新了呢。\"]},{\"selector\":\".cc-opacity, .post-copyright-author\",\"text\":[\"要记得规范转载哦。\",\"所有文章均采用 CC BY-NC-SA 4.0 许可协议~\",\"转载前要先注意下文章的版权协议呢。\"]},{\"selector\":\".links-of-author\",\"text\":[\"这里是主人的常驻地址哦。\",\"这里有主人的联系方式!\"]},{\"selector\":\".followme\",\"text\":[\"手机扫一下就能继续看,很方便呢~\",\"扫一扫,打开新世界的大门!\"]},{\"selector\":\".fancybox img, img.medium-zoom-image\",\"text\":[\"点击图片可以放大呢!\"]},{\"selector\":\".copy-btn\",\"text\":[\"代码可以直接点击复制哟。\"]},{\"selector\":\".highlight .table-container, .gist\",\"text\":[\"GitHub!我是新手!\",\"PHP 是最好的语言!\"]},{\"selector\":\"a[href^='mailto']\",\"text\":[\"邮件我会及时回复的!\",\"点击就可以发送邮件啦~\"]},{\"selector\":\"a[href^='/tags/']\",\"text\":[\"要去看看 {text} 标签么?\",\"点它可以查看此标签下的所有文章哟!\"]},{\"selector\":\"a[href^='/categories/']\",\"text\":[\"要去看看 {text} 分类么?\",\"点它可以查看此分类下的所有文章哟!\"]},{\"selector\":\".post-title-link\",\"text\":[\"要看看 {text} 这篇文章吗?\"]},{\"selector\":\"a[rel='contents']\",\"text\":[\"点击来阅读全文哦。\"]},{\"selector\":\"a[itemprop='discussionUrl']\",\"text\":[\"要去看看评论吗?\"]},{\"selector\":\".beian a\",\"text\":[\"我也是有户口的人哦。\",\"我的主人可是遵纪守法的好主人。\"]},{\"selector\":\".container a[href^='http'], .nav-link .nav-text\",\"text\":[\"要去看看 {text} 么?\",\"去 {text} 逛逛吧。\",\"到 {text} 看看吧。\"]},{\"selector\":\".back-to-top\",\"text\":[\"点它就可以回到顶部啦!\",\"又回到最初的起点~\",\"要回到开始的地方么?\"]},{\"selector\":\".reward-container\",\"text\":[\"我是不是棒棒哒~快给我点赞吧!\",\"要打赏我嘛?好期待啊~\",\"主人最近在吃土呢,很辛苦的样子,给他一些钱钱吧~\"]},{\"selector\":\"#wechat\",\"text\":[\"这是我的微信二维码~\"]},{\"selector\":\"#alipay\",\"text\":[\"这是我的支付宝哦!\"]},{\"selector\":\"#bitcoin\",\"text\":[\"这是我的比特币账号!\"]},{\"selector\":\"#needsharebutton-postbottom .btn\",\"text\":[\"好东西要让更多人知道才行哦。\",\"觉得文章有帮助的话,可以分享给更多需要的朋友呢。\"]},{\"selector\":\".need-share-button_weibo\",\"text\":[\"微博?来分享一波喵!\"]},{\"selector\":\".need-share-button_wechat\",\"text\":[\"分享到微信吧!\"]},{\"selector\":\".need-share-button_douban\",\"text\":[\"分享到豆瓣好像也不错!\"]},{\"selector\":\".need-share-button_qqzone\",\"text\":[\"QQ 空间,一键转发,耶~\"]},{\"selector\":\".need-share-button_twitter\",\"text\":[\"Twitter?好像是不存在的东西?\"]},{\"selector\":\".need-share-button_facebook\",\"text\":[\"emmm…FB 好像也是不存在的东西?\"]},{\"selector\":\".post-nav-item a[rel='next']\",\"text\":[\"来看看下一篇文章吧。\",\"点它可以看下一篇文章哦!\",\"要翻到下一篇文章吗?\"]},{\"selector\":\".post-nav-item a[rel='prev']\",\"text\":[\"来看看上一篇文章吧。\",\"点它可以看上一篇文章哦!\",\"要翻到上一篇文章吗?\"]},{\"selector\":\".extend.next\",\"text\":[\"去下一页看看吧。\",\"点它可以前进哦!\",\"要翻到下一页吗?\"]},{\"selector\":\".extend.prev\",\"text\":[\"去上一页看看吧。\",\"点它可以后退哦!\",\"要翻到上一页吗?\"]},{\"selector\":\"input.vnick\",\"text\":[\"该怎么称呼你呢?\",\"留下你的尊姓大名!\"]},{\"selector\":\".vmail\",\"text\":[\"留下你的邮箱,不然就是无头像人士了!\",\"记得设置好 Gravatar 头像哦!\",\"为了方便通知你最新消息,一定要留下邮箱!\"]},{\"selector\":\".vlink\",\"text\":[\"快快告诉我你的家在哪里,好让我去参观参观!\"]},{\"selector\":\".veditor\",\"text\":[\"想要去评论些什么吗?\",\"要说点什么吗?\",\"觉得博客不错?快来留言和主人交流吧!\"]},{\"selector\":\".vcontrol a\",\"text\":[\"你会不会熟练使用 Markdown 呀?\",\"使用 Markdown 让评论更美观吧~\"]},{\"selector\":\".vemoji-btn\",\"text\":[\"要插入一个萌萌哒的表情吗?\",\"要来一发表情吗?\"]},{\"selector\":\".vpreview-btn\",\"text\":[\"要预览一下你的发言吗?\",\"快看看你的评论有多少负熵!\"]},{\"selector\":\".vsubmit\",\"text\":[\"评论没有审核,要对自己的发言负责哦~\",\"要提交了吗,请耐心等待回复哦~\"]},{\"selector\":\".vcontent\",\"text\":[\"哇,快看看这个精彩评论!\",\"如果有疑问,请尽快留言哦~\"]}],\"click\":[{\"selector\":\"#live2d\",\"text\":[\"是…是不小心碰到了吧…\",\"萝莉控是什么呀?\",\"你看到我的小熊了吗?\",\"再摸的话我可要报警了!⌇●﹏●⌇\",\"110 吗,这里有个变态一直在摸我(ó﹏ò。)\",\"不要摸我了,我会告诉老婆来打你的!\",\"干嘛动我呀!小心我咬你!\",\"别摸我,有什么好摸的!\"]},{\"selector\":\".veditor\",\"text\":[\"要吐槽些什么呢?\",\"一定要认真填写喵~\",\"有什么想说的吗?\"]},{\"selector\":\".vsubmit\",\"text\":[\"输入验证码就可以提交评论啦~\"]}],\"seasons\":[{\"date\":\"01/01\",\"text\":\"元旦了呢,新的一年又开始了,今年是{year}年~\"},{\"date\":\"02/14\",\"text\":\"又是一年情人节,{year}年找到对象了嘛~\"},{\"date\":\"03/08\",\"text\":\"今天是国际妇女节!\"},{\"date\":\"03/12\",\"text\":\"今天是植树节,要保护环境呀!\"},{\"date\":\"04/01\",\"text\":\"悄悄告诉你一个秘密~今天是愚人节,不要被骗了哦~\"},{\"date\":\"05/01\",\"text\":\"今天是五一劳动节,计划好假期去哪里了吗~\"},{\"date\":\"06/01\",\"text\":\"儿童节了呢,快活的时光总是短暂,要是永远长不大该多好啊…\"},{\"date\":\"09/03\",\"text\":\"中国人民抗日战争胜利纪念日,铭记历史、缅怀先烈、珍爱和平、开创未来。\"},{\"date\":\"09/10\",\"text\":\"教师节,在学校要给老师问声好呀~\"},{\"date\":\"10/01\",\"text\":\"国庆节到了,为祖国母亲庆生!\"},{\"date\":\"11/05-11/12\",\"text\":\"今年的双十一是和谁一起过的呢~\"},{\"date\":\"12/20-12/31\",\"text\":\"这几天是圣诞节,主人肯定又去剁手买买买了~\"}],\"time\":[{\"hour\":\"6-7\",\"text\":\"早上好!一日之计在于晨,美好的一天就要开始了~\"},{\"hour\":\"8-11\",\"text\":\"上午好!工作顺利嘛,不要久坐,多起来走动走动哦!\"},{\"hour\":\"12-13\",\"text\":\"中午了,工作了一个上午,现在是午餐时间!\"},{\"hour\":\"14-17\",\"text\":\"午后很容易犯困呢,今天的运动目标完成了吗?\"},{\"hour\":\"18-19\",\"text\":\"傍晚了!窗外夕阳的景色很美丽呢,最美不过夕阳红~\"},{\"hour\":\"20-21\",\"text\":\"晚上好,今天过得怎么样?\"},{\"hour\":\"22-23\",\"text\":[\"已经这么晚了呀,早点休息吧,晚安~\",\"深夜时要爱护眼睛呀!\"]},{\"hour\":\"0-5\",\"text\":\"你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?\"}],\"message\":{\"default\":[\"好久不见,日子过得好快呢……\",\"大坏蛋!你都多久没理人家了呀,嘤嘤嘤~\",\"嗨~快来逗我玩吧!\",\"拿小拳拳锤你胸口!\",\"记得把小家加入收藏夹哦!\"],\"console\":\"哈哈,你打开了控制台,是想要看看我的小秘密吗?\",\"copy\":\"你都复制了些什么呀,转载要记得加上出处哦!\",\"visibilitychange\":\"哇,你终于回来了~\"}}"},{"title":"标签","date":"2021-04-06T12:01:51.000Z","updated":"2024-11-10T11:43:39.755Z","comments":false,"path":"tags/index.html","permalink":"https://en.blog.sinzmise.top/tags/","excerpt":"","text":""},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/pace/big-counter.css","permalink":"https://en.blog.sinzmise.top/css/pace/big-counter.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pace.pace-inactive .pace-progress { display: none; } .pace .pace-progress { position: fixed; z-index: 2000; top: 0; right: 0; height: 5rem; width: 5rem; -webkit-transform: translate3d(0, 0, 0) !important; -ms-transform: translate3d(0, 0, 0) !important; transform: translate3d(0, 0, 0) !important; } .pace .pace-progress:after { display: block; position: absolute; top: 0; right: .5rem; content: attr(data-progress-text); font-family: \"Helvetica Neue\", sans-serif; font-weight: 100; font-size: 5rem; line-height: 1; text-align: right; color: rgba(0, 0, 0, 0.19999999999999996); }"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/pace/corner-indicator.css","permalink":"https://en.blog.sinzmise.top/css/pace/corner-indicator.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pace .pace-activity { display: block; position: fixed; z-index: 2000; top: 0; right: 0; width: 300px; height: 300px; background: #29d; -webkit-transition: -webkit-transform 0.3s; transition: transform 0.3s; -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg); transform: translateX(100%) translateY(-100%) rotate(45deg); pointer-events: none; } .pace.pace-active .pace-activity { -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg); transform: translateX(50%) translateY(-50%) rotate(45deg); } .pace .pace-activity::before, .pace .pace-activity::after { -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; bottom: 30px; left: 50%; display: block; border: 5px solid #fff; border-radius: 50%; content: ''; } .pace .pace-activity::before { margin-left: -40px; width: 80px; height: 80px; border-right-color: rgba(0, 0, 0, .2); border-left-color: rgba(0, 0, 0, .2); -webkit-animation: pace-theme-corner-indicator-spin 3s linear infinite; animation: pace-theme-corner-indicator-spin 3s linear infinite; } .pace .pace-activity::after { bottom: 50px; margin-left: -20px; width: 40px; height: 40px; border-top-color: rgba(0, 0, 0, .2); border-bottom-color: rgba(0, 0, 0, .2); -webkit-animation: pace-theme-corner-indicator-spin 1s linear infinite; animation: pace-theme-corner-indicator-spin 1s linear infinite; } @-webkit-keyframes pace-theme-corner-indicator-spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); } } @keyframes pace-theme-corner-indicator-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } }"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/pace/flash.css","permalink":"https://en.blog.sinzmise.top/css/pace/flash.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pace-inactive { display: none; } .pace .pace-progress { background: #29d; position: fixed; z-index: 2000; top: 0; right: 100%; width: 100%; height: 2px; } .pace .pace-progress-inner { display: block; position: absolute; right: 0px; width: 100px; height: 100%; box-shadow: 0 0 10px #29d, 0 0 5px #29d; opacity: 1.0; -webkit-transform: rotate(3deg) translate(0px, -4px); -moz-transform: rotate(3deg) translate(0px, -4px); -ms-transform: rotate(3deg) translate(0px, -4px); -o-transform: rotate(3deg) translate(0px, -4px); transform: rotate(3deg) translate(0px, -4px); } .pace .pace-activity { display: block; position: fixed; z-index: 2000; top: 15px; right: 15px; width: 14px; height: 14px; border: solid 2px transparent; border-top-color: #29d; border-left-color: #29d; border-radius: 10px; -webkit-animation: pace-spinner 400ms linear infinite; -moz-animation: pace-spinner 400ms linear infinite; -ms-animation: pace-spinner 400ms linear infinite; -o-animation: pace-spinner 400ms linear infinite; animation: pace-spinner 400ms linear infinite; } @-webkit-keyframes pace-spinner { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @-moz-keyframes pace-spinner { 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } } @-o-keyframes pace-spinner { 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } } @-ms-keyframes pace-spinner { 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes pace-spinner { 0% { transform: rotate(0deg); transform: rotate(0deg); } 100% { transform: rotate(360deg); transform: rotate(360deg); } }"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/pace/mac-osx.css","permalink":"https://en.blog.sinzmise.top/css/pace/mac-osx.css","excerpt":"","text":".pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; overflow: hidden; position: fixed; top: 0; left: 0; z-index: 2000; width: 100%; height: 12px; background: #fff; } .pace-inactive { display: none; } .pace .pace-progress { background-color: #0087E1; position: fixed; top: 0; right: 100%; width: 100%; height: 12px; overflow: hidden; -webkit-border-radius: 0 0 4px 0; -moz-border-radius: 0 0 4px 0; -o-border-radius: 0 0 4px 0; border-radius: 0 0 4px 0; -webkit-box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); -moz-box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); -o-box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); box-shadow: inset -1px 0 #00558F, inset 0 -1px #00558F, inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, .3); } .pace .pace-activity { position: fixed; top: 0; left: 0; right: -28px; bottom: 0; -webkit-background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); -moz-background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); -o-background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); background-image: radial-gradient(rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .15) 100%); -webkit-background-size: 28px 100%; -moz-background-size: 28px 100%; -o-background-size: 28px 100%; background-size: 28px 100%; -webkit-animation: pace-theme-mac-osx-motion 500ms linear infinite; -moz-animation: pace-theme-mac-osx-motion 500ms linear infinite; -ms-animation: pace-theme-mac-osx-motion 500ms linear infinite; -o-animation: pace-theme-mac-osx-motion 500ms linear infinite; animation: pace-theme-mac-osx-motion 500ms linear infinite; } @-webkit-keyframes pace-theme-mac-osx-motion { 0% { -webkit-transform: none; transform: none; } 100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @-moz-keyframes pace-theme-mac-osx-motion { 0% { -moz-transform: none; transform: none; } 100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @-o-keyframes pace-theme-mac-osx-motion { 0% { -o-transform: none; transform: none; } 100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @-ms-keyframes pace-theme-mac-osx-motion { 0% { -ms-transform: none; transform: none; } 100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); } } @keyframes pace-theme-mac-osx-motion { 0% { transform: none; transform: none; } 100% { transform: translate(-28px, 0); transform: translate(-28px, 0); } }"},{"title":"","date":"2024-11-10T11:43:39.731Z","updated":"2024-11-10T11:43:39.731Z","comments":true,"path":"css/pace/pace.css","permalink":"https://en.blog.sinzmise.top/css/pace/pace.css","excerpt":"","text":".pace { pointer-events: none; -moz-user-select: none; -webkit-user-select: none; user-select: none; z-index: 2; position: fixed; margin: auto; top: 4px; left: 0; right: 0; height: 8px; border-radius: 8px; width: 6rem; background: #eaecf2; overflow: hidden; } .pace-inactive .pace-progress { opacity: 0; transition: 0.3s ease-in; } .pace.pace-inactive { opacity: 0; transition: 0.3s; top: -8px; } .pace .pace-progress { box-sizing: border-box; transform: translate3d(0, 0, 0); position: fixed; z-index: 2; display: block; position: absolute; top: 0; right: 100%; height: 100%; width: 100%; background: #49b1f5; background: linear-gradient( to right, rgb(18, 194, 233), rgb(196, 113, 237), rgb(246, 79, 89) ); animation: gradient 2s ease infinite; background-size: 200%; }"}],"posts":[{"title":"En Test","slug":"testen","date":"2023-12-30T17:36:56.000Z","updated":"2024-11-10T11:43:39.727Z","comments":true,"path":"posts/46521/","permalink":"https://en.blog.sinzmise.top/posts/46521/","excerpt":"","text":"Hello! This is my first English article.","categories":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/categories/Test/"}],"tags":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/tags/Test/"}]}],"categories":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/categories/Test/"}],"tags":[{"name":"Test","slug":"Test","permalink":"https://en.blog.sinzmise.top/tags/Test/"}]}