diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c53a523 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/assets/oneko/cats/ace.png b/assets/oneko/cats/ace.png new file mode 100644 index 0000000..7a5e46f Binary files /dev/null and b/assets/oneko/cats/ace.png differ diff --git a/assets/oneko/cats/blue-tapy.png b/assets/oneko/cats/blue-tapy.png new file mode 100644 index 0000000..382ce36 Binary files /dev/null and b/assets/oneko/cats/blue-tapy.png differ diff --git a/assets/oneko/cats/calico.png b/assets/oneko/cats/calico.png new file mode 100644 index 0000000..bb04e59 Binary files /dev/null and b/assets/oneko/cats/calico.png differ diff --git a/assets/oneko/cats/cattail.png b/assets/oneko/cats/cattail.png new file mode 100644 index 0000000..43f42c0 Binary files /dev/null and b/assets/oneko/cats/cattail.png differ diff --git a/assets/oneko/cats/esmeralda.png b/assets/oneko/cats/esmeralda.png new file mode 100644 index 0000000..f40b86a Binary files /dev/null and b/assets/oneko/cats/esmeralda.png differ diff --git a/assets/oneko/cats/jess.png b/assets/oneko/cats/jess.png new file mode 100644 index 0000000..4e11fef Binary files /dev/null and b/assets/oneko/cats/jess.png differ diff --git a/assets/oneko/cats/kina.png b/assets/oneko/cats/kina.png new file mode 100644 index 0000000..fbb59c6 Binary files /dev/null and b/assets/oneko/cats/kina.png differ diff --git a/assets/oneko/cats/lucy.png b/assets/oneko/cats/lucy.png new file mode 100644 index 0000000..2074af8 Binary files /dev/null and b/assets/oneko/cats/lucy.png differ diff --git a/assets/oneko/cats/maia.png b/assets/oneko/cats/maia.png new file mode 100644 index 0000000..4d85b2d Binary files /dev/null and b/assets/oneko/cats/maia.png differ diff --git a/assets/oneko/cats/maria.png b/assets/oneko/cats/maria.png new file mode 100644 index 0000000..6b86074 Binary files /dev/null and b/assets/oneko/cats/maria.png differ diff --git a/assets/oneko/cats/mike.png b/assets/oneko/cats/mike.png new file mode 100644 index 0000000..e9a50f8 Binary files /dev/null and b/assets/oneko/cats/mike.png differ diff --git a/assets/oneko/cats/rainbow-tapy.png b/assets/oneko/cats/rainbow-tapy.png new file mode 100644 index 0000000..e9c80ae Binary files /dev/null and b/assets/oneko/cats/rainbow-tapy.png differ diff --git a/assets/oneko/cats/silver.png b/assets/oneko/cats/silver.png new file mode 100644 index 0000000..8afab36 Binary files /dev/null and b/assets/oneko/cats/silver.png differ diff --git a/assets/oneko/cats/spirit.png b/assets/oneko/cats/spirit.png new file mode 100644 index 0000000..b1d7924 Binary files /dev/null and b/assets/oneko/cats/spirit.png differ diff --git a/assets/oneko/cats/tapy.png b/assets/oneko/cats/tapy.png new file mode 100644 index 0000000..ac11e6e Binary files /dev/null and b/assets/oneko/cats/tapy.png differ diff --git a/assets/oneko/cats/usa.png b/assets/oneko/cats/usa.png new file mode 100644 index 0000000..4104eb4 Binary files /dev/null and b/assets/oneko/cats/usa.png differ diff --git a/assets/oneko/cats/valentine.png b/assets/oneko/cats/valentine.png new file mode 100644 index 0000000..f38a1ef Binary files /dev/null and b/assets/oneko/cats/valentine.png differ diff --git a/assets/oneko/classics/aquaneon.png b/assets/oneko/classics/aquaneon.png new file mode 100644 index 0000000..8ccc65a Binary files /dev/null and b/assets/oneko/classics/aquaneon.png differ diff --git a/assets/oneko/classics/black-green.png b/assets/oneko/classics/black-green.png new file mode 100644 index 0000000..21ea9a6 Binary files /dev/null and b/assets/oneko/classics/black-green.png differ diff --git a/assets/oneko/classics/black.png b/assets/oneko/classics/black.png new file mode 100644 index 0000000..3d0e00d Binary files /dev/null and b/assets/oneko/classics/black.png differ diff --git a/assets/oneko/classics/byte-green.png b/assets/oneko/classics/byte-green.png new file mode 100644 index 0000000..a1b930e Binary files /dev/null and b/assets/oneko/classics/byte-green.png differ diff --git a/assets/oneko/classics/classic.png b/assets/oneko/classics/classic.png new file mode 100644 index 0000000..1481a4b Binary files /dev/null and b/assets/oneko/classics/classic.png differ diff --git a/assets/oneko/classics/deedee.png b/assets/oneko/classics/deedee.png new file mode 100644 index 0000000..143474b Binary files /dev/null and b/assets/oneko/classics/deedee.png differ diff --git a/assets/oneko/classics/dusty.png b/assets/oneko/classics/dusty.png new file mode 100644 index 0000000..2567beb Binary files /dev/null and b/assets/oneko/classics/dusty.png differ diff --git a/assets/oneko/classics/ghost.png b/assets/oneko/classics/ghost.png new file mode 100644 index 0000000..4324ebe Binary files /dev/null and b/assets/oneko/classics/ghost.png differ diff --git a/assets/oneko/classics/ghostspirit.png b/assets/oneko/classics/ghostspirit.png new file mode 100644 index 0000000..f6f8d19 Binary files /dev/null and b/assets/oneko/classics/ghostspirit.png differ diff --git a/assets/oneko/classics/gold.png b/assets/oneko/classics/gold.png new file mode 100644 index 0000000..d0272c4 Binary files /dev/null and b/assets/oneko/classics/gold.png differ diff --git a/assets/oneko/classics/gray.png b/assets/oneko/classics/gray.png new file mode 100644 index 0000000..8ab0f9c Binary files /dev/null and b/assets/oneko/classics/gray.png differ diff --git a/assets/oneko/classics/red.png b/assets/oneko/classics/red.png new file mode 100644 index 0000000..a114581 Binary files /dev/null and b/assets/oneko/classics/red.png differ diff --git a/assets/oneko/classics/sapphire.png b/assets/oneko/classics/sapphire.png new file mode 100644 index 0000000..27f3898 Binary files /dev/null and b/assets/oneko/classics/sapphire.png differ diff --git a/assets/oneko/classics/silversky.png b/assets/oneko/classics/silversky.png new file mode 100644 index 0000000..f557545 Binary files /dev/null and b/assets/oneko/classics/silversky.png differ diff --git a/assets/oneko/classics/vaporwave.png b/assets/oneko/classics/vaporwave.png new file mode 100644 index 0000000..d957f87 Binary files /dev/null and b/assets/oneko/classics/vaporwave.png differ diff --git a/assets/oneko/gaming/andriod.png b/assets/oneko/gaming/andriod.png new file mode 100644 index 0000000..0448df6 Binary files /dev/null and b/assets/oneko/gaming/andriod.png differ diff --git a/assets/oneko/gaming/lololowka.png b/assets/oneko/gaming/lololowka.png new file mode 100644 index 0000000..806d582 Binary files /dev/null and b/assets/oneko/gaming/lololowka.png differ diff --git a/assets/oneko/gaming/niko.png b/assets/oneko/gaming/niko.png new file mode 100644 index 0000000..d218edf Binary files /dev/null and b/assets/oneko/gaming/niko.png differ diff --git a/assets/oneko/gaming/sans.png b/assets/oneko/gaming/sans.png new file mode 100644 index 0000000..74783c7 Binary files /dev/null and b/assets/oneko/gaming/sans.png differ diff --git a/assets/oneko/gaming/sonic.png b/assets/oneko/gaming/sonic.png new file mode 100644 index 0000000..1e01531 Binary files /dev/null and b/assets/oneko/gaming/sonic.png differ diff --git a/assets/oneko/gaming/toothless.png b/assets/oneko/gaming/toothless.png new file mode 100644 index 0000000..7a9495e Binary files /dev/null and b/assets/oneko/gaming/toothless.png differ diff --git a/assets/oneko/gaming/yumi-nikki-1-skin.png b/assets/oneko/gaming/yumi-nikki-1-skin.png new file mode 100644 index 0000000..e10a626 Binary files /dev/null and b/assets/oneko/gaming/yumi-nikki-1-skin.png differ diff --git a/assets/oneko/gaming/yumi-nikki-2-skin.png b/assets/oneko/gaming/yumi-nikki-2-skin.png new file mode 100644 index 0000000..436e3c8 Binary files /dev/null and b/assets/oneko/gaming/yumi-nikki-2-skin.png differ diff --git a/assets/oneko/operating-systems/bsd.png b/assets/oneko/operating-systems/bsd.png new file mode 100644 index 0000000..b77d524 Binary files /dev/null and b/assets/oneko/operating-systems/bsd.png differ diff --git a/assets/oneko/other-animals/blue-butterfly.png b/assets/oneko/other-animals/blue-butterfly.png new file mode 100644 index 0000000..16beab5 Binary files /dev/null and b/assets/oneko/other-animals/blue-butterfly.png differ diff --git a/assets/oneko/other-animals/bunny.png b/assets/oneko/other-animals/bunny.png new file mode 100644 index 0000000..882fc1c Binary files /dev/null and b/assets/oneko/other-animals/bunny.png differ diff --git a/assets/oneko/other-animals/bxter.png b/assets/oneko/other-animals/bxter.png new file mode 100644 index 0000000..9ea59b0 Binary files /dev/null and b/assets/oneko/other-animals/bxter.png differ diff --git a/assets/oneko/other-animals/dog.png b/assets/oneko/other-animals/dog.png new file mode 100644 index 0000000..ecb82b3 Binary files /dev/null and b/assets/oneko/other-animals/dog.png differ diff --git a/assets/oneko/other-animals/fox.png b/assets/oneko/other-animals/fox.png new file mode 100644 index 0000000..b5911ac Binary files /dev/null and b/assets/oneko/other-animals/fox.png differ diff --git a/assets/oneko/other-animals/humming_bird.png b/assets/oneko/other-animals/humming_bird.png new file mode 100644 index 0000000..bb42a31 Binary files /dev/null and b/assets/oneko/other-animals/humming_bird.png differ diff --git a/assets/oneko/other-animals/jerry.png b/assets/oneko/other-animals/jerry.png new file mode 100644 index 0000000..b7348bd Binary files /dev/null and b/assets/oneko/other-animals/jerry.png differ diff --git a/assets/oneko/other-animals/poochy.png b/assets/oneko/other-animals/poochy.png new file mode 100644 index 0000000..dc8c10a Binary files /dev/null and b/assets/oneko/other-animals/poochy.png differ diff --git a/assets/oneko/other-animals/red-butterfly.png b/assets/oneko/other-animals/red-butterfly.png new file mode 100644 index 0000000..142988e Binary files /dev/null and b/assets/oneko/other-animals/red-butterfly.png differ diff --git a/assets/oneko/other-animals/santino.png b/assets/oneko/other-animals/santino.png new file mode 100644 index 0000000..4b4dff2 Binary files /dev/null and b/assets/oneko/other-animals/santino.png differ diff --git a/assets/oneko/other-animals/stingray.png b/assets/oneko/other-animals/stingray.png new file mode 100644 index 0000000..e70edfa Binary files /dev/null and b/assets/oneko/other-animals/stingray.png differ diff --git a/assets/oneko/other-animals/tato.png b/assets/oneko/other-animals/tato.png new file mode 100644 index 0000000..7360d0d Binary files /dev/null and b/assets/oneko/other-animals/tato.png differ diff --git a/assets/oneko/other-animals/tentacle.png b/assets/oneko/other-animals/tentacle.png new file mode 100644 index 0000000..70c992d Binary files /dev/null and b/assets/oneko/other-animals/tentacle.png differ diff --git a/assets/oneko/pokemon/eevee.png b/assets/oneko/pokemon/eevee.png new file mode 100644 index 0000000..25f2c0c Binary files /dev/null and b/assets/oneko/pokemon/eevee.png differ diff --git a/assets/oneko/pokemon/espeon.png b/assets/oneko/pokemon/espeon.png new file mode 100644 index 0000000..d5beea7 Binary files /dev/null and b/assets/oneko/pokemon/espeon.png differ diff --git a/assets/oneko/pokemon/gastly.png b/assets/oneko/pokemon/gastly.png new file mode 100644 index 0000000..797f42a Binary files /dev/null and b/assets/oneko/pokemon/gastly.png differ diff --git a/assets/oneko/pokemon/jigglypuff.png b/assets/oneko/pokemon/jigglypuff.png new file mode 100644 index 0000000..48f6360 Binary files /dev/null and b/assets/oneko/pokemon/jigglypuff.png differ diff --git a/assets/oneko/pokemon/pikachu.png b/assets/oneko/pokemon/pikachu.png new file mode 100644 index 0000000..d6e9c33 Binary files /dev/null and b/assets/oneko/pokemon/pikachu.png differ diff --git a/assets/oneko/pokemon/psyduck.png b/assets/oneko/pokemon/psyduck.png new file mode 100644 index 0000000..6687758 Binary files /dev/null and b/assets/oneko/pokemon/psyduck.png differ diff --git a/assets/oneko/pokemon/skitty.png b/assets/oneko/pokemon/skitty.png new file mode 100644 index 0000000..9734f92 Binary files /dev/null and b/assets/oneko/pokemon/skitty.png differ diff --git a/assets/oneko/pride/bisexual.png b/assets/oneko/pride/bisexual.png new file mode 100644 index 0000000..2e68683 Binary files /dev/null and b/assets/oneko/pride/bisexual.png differ diff --git a/assets/oneko/pride/genderfae.png b/assets/oneko/pride/genderfae.png new file mode 100644 index 0000000..e762240 Binary files /dev/null and b/assets/oneko/pride/genderfae.png differ diff --git a/assets/oneko/pride/genderfluid.png b/assets/oneko/pride/genderfluid.png new file mode 100644 index 0000000..761f27d Binary files /dev/null and b/assets/oneko/pride/genderfluid.png differ diff --git a/assets/oneko/pride/lesbian.png b/assets/oneko/pride/lesbian.png new file mode 100644 index 0000000..25c968f Binary files /dev/null and b/assets/oneko/pride/lesbian.png differ diff --git a/assets/oneko/pride/mlm.png b/assets/oneko/pride/mlm.png new file mode 100644 index 0000000..5cd46aa Binary files /dev/null and b/assets/oneko/pride/mlm.png differ diff --git a/assets/oneko/pride/nb.png b/assets/oneko/pride/nb.png new file mode 100644 index 0000000..2d72e4c Binary files /dev/null and b/assets/oneko/pride/nb.png differ diff --git a/assets/oneko/pride/trans.png b/assets/oneko/pride/trans.png new file mode 100644 index 0000000..6c7ce12 Binary files /dev/null and b/assets/oneko/pride/trans.png differ diff --git a/assets/oneko/things/chocola.png b/assets/oneko/things/chocola.png new file mode 100644 index 0000000..dda629c Binary files /dev/null and b/assets/oneko/things/chocola.png differ diff --git a/assets/oneko/things/coke-bottle.png b/assets/oneko/things/coke-bottle.png new file mode 100644 index 0000000..4634d91 Binary files /dev/null and b/assets/oneko/things/coke-bottle.png differ diff --git a/assets/oneko/things/fire.png b/assets/oneko/things/fire.png new file mode 100644 index 0000000..9656977 Binary files /dev/null and b/assets/oneko/things/fire.png differ diff --git a/assets/oneko/things/marisa.png b/assets/oneko/things/marisa.png new file mode 100644 index 0000000..aeef4a2 Binary files /dev/null and b/assets/oneko/things/marisa.png differ diff --git a/assets/oneko/things/microbot.png b/assets/oneko/things/microbot.png new file mode 100644 index 0000000..064d635 Binary files /dev/null and b/assets/oneko/things/microbot.png differ diff --git a/assets/oneko/things/mini.png b/assets/oneko/things/mini.png new file mode 100644 index 0000000..3a5ef47 Binary files /dev/null and b/assets/oneko/things/mini.png differ diff --git a/assets/oneko/things/robot.png b/assets/oneko/things/robot.png new file mode 100644 index 0000000..93f6ca7 Binary files /dev/null and b/assets/oneko/things/robot.png differ diff --git a/assets/oneko/things/sami.png b/assets/oneko/things/sami.png new file mode 100644 index 0000000..262ad0a Binary files /dev/null and b/assets/oneko/things/sami.png differ diff --git a/assets/oneko/things/star.png b/assets/oneko/things/star.png new file mode 100644 index 0000000..8cd7d7f Binary files /dev/null and b/assets/oneko/things/star.png differ diff --git a/assets/oneko/things/ufo.png b/assets/oneko/things/ufo.png new file mode 100644 index 0000000..5902433 Binary files /dev/null and b/assets/oneko/things/ufo.png differ diff --git a/assets/theme/estrogen.svg b/assets/theme/estrogen.svg new file mode 100644 index 0000000..9c7691b --- /dev/null +++ b/assets/theme/estrogen.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/theme/frappe.png b/assets/theme/frappe.png new file mode 100644 index 0000000..a73f301 Binary files /dev/null and b/assets/theme/frappe.png differ diff --git a/assets/theme/latte.png b/assets/theme/latte.png new file mode 100644 index 0000000..210b9c0 Binary files /dev/null and b/assets/theme/latte.png differ diff --git a/assets/theme/macchiato.png b/assets/theme/macchiato.png new file mode 100644 index 0000000..2a3a74e Binary files /dev/null and b/assets/theme/macchiato.png differ diff --git a/assets/theme/mocha.png b/assets/theme/mocha.png new file mode 100644 index 0000000..f3820c6 Binary files /dev/null and b/assets/theme/mocha.png differ diff --git a/css/fonts.css b/css/fonts.css new file mode 100644 index 0000000..649ee3a --- /dev/null +++ b/css/fonts.css @@ -0,0 +1,31 @@ +@font-face { + font-family: 'Comic Code'; + src: url('https://fonts.doughmination.co.uk/ComicCode-Regular_2022-05-24-151938_hsmz.woff2') format('woff2'), + url('https://fonts.doughmination.co.uk/ComicCode-Regular_2022-05-24-151938_hsmz.woff') format('woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Comic Code'; + src: url('https://fonts.doughmination.co.uk/ComicCode-Italic_2022-05-24-151939_rdtu.woff2') format('woff2'), + url('https://fonts.doughmination.co.uk/ComicCode-Italic_2022-05-24-151939_rdtu.woff') format('woff'); + font-weight: 400; + font-style: italic; +} + +@font-face { + font-family: 'Comic Code'; + src: url('https://fonts.doughmination.co.uk/ComicCode-Medium_2022-05-24-151941_ugqm.woff2') format('woff2'), + url('https://fonts.doughmination.co.uk/ComicCode-Medium_2022-05-24-151941_ugqm.woff') format('woff'); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: 'Comic Code'; + src: url('https://fonts.doughmination.co.uk/ComicCode-Bold_2022-05-24-152309_zqkm.woff2') format('woff2'), + url('https://fonts.doughmination.co.uk/ComicCode-Bold_2022-05-24-152309_zqkm.woff') format('woff'); + font-weight: 700; + font-style: normal; +} \ No newline at end of file diff --git a/css/index.css b/css/index.css index 61b32ea..d605c23 100644 --- a/css/index.css +++ b/css/index.css @@ -1,84 +1,49 @@ -@font-face { - font-family: 'Comic Code'; - src: url('https://fonts.doughmination.co.uk/ComicCode-Regular_2022-05-24-151938_hsmz.woff2') format('woff2'), - url('https://fonts.doughmination.co.uk/ComicCode-Regular_2022-05-24-151938_hsmz.woff') format('woff'); - font-weight: 400; - font-style: normal; -} +@import url("fonts.css"); +@import url(theme-switcher.css); +@import url("picker.css"); +@import url(themes/mocha.css); +@import url(themes/macciato.css); +@import url(themes/frappe.css); +@import url(themes/latte.css); -@font-face { - font-family: 'Comic Code'; - src: url('https://fonts.doughmination.co.uk/ComicCode-Italic_2022-05-24-151939_rdtu.woff2') format('woff2'), - url('https://fonts.doughmination.co.uk/ComicCode-Italic_2022-05-24-151939_rdtu.woff') format('woff'); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: 'Comic Code'; - src: url('https://fonts.doughmination.co.uk/ComicCode-Medium_2022-05-24-151941_ugqm.woff2') format('woff2'), - url('https://fonts.doughmination.co.uk/ComicCode-Medium_2022-05-24-151941_ugqm.woff') format('woff'); - font-weight: 500; - font-style: normal; -} -@font-face { - font-family: 'Comic Code'; - src: url('https://fonts.doughmination.co.uk/ComicCode-Bold_2022-05-24-152309_zqkm.woff2') format('woff2'), - url('https://fonts.doughmination.co.uk/ComicCode-Bold_2022-05-24-152309_zqkm.woff') format('woff'); - font-weight: 700; - font-style: normal; -} - -:root { - /* https://catppuccin.com/palette/ */ - /* Catppuccin Mocha */ - /* accents */ - --rosewater: #f5e0dc; - --flamingo: #f2cdcd; - --pink: #f5c2e7; - --mauve: #cba6f7; - --red: #f38ba8; - --maroon: #eba0ac; - --peach: #fab387; - --yellow: #f9e2af; - --green: #a6e3a1; - --teal: #94e2d5; - --sky: #89dceb; - --saphire: #74c7ec; - --blue: #89b4fa; /* a lovely new blue passport */ - --lavender: #b4befe; - /* Text */ - --text: #cdd6f4; - --subtext-0: #a6adc8; - --subtext-1: #bac2de; - --overlay-0: #6c7086; - --overlay-1: #7f849c; - --overlay-2: #9399b2; - --surface-0: #313244; - --surface-1: #45475a; - --surface-2: #585b70; - /* Backgrounds */ - --base: #1e1e2e; - --mantle: #181825; - --crust: #11111b; /* Is this the crusty crab? */ -} html, body { - background-color: var(--base); - color: var(--text); - font-family: 'Comic Code', sans-serif; - overflow-x: hidden; - max-width: 100vw; - margin: 0; - min-height: 100vh; + height: 100%; + overflow: hidden; +} + +html { + background: linear-gradient(135deg, var(--base) 0%, var(--mantle) 60%, var(--crust) 100%); } body { - display: flex; - justify-content: center; + font-family: 'Comic Code', sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + height: 100dvh; + margin: 0; + padding: 1.5rem 1rem; + background: linear-gradient(135deg, var(--base) 0%, var(--mantle) 60%, var(--crust) 100%); + color: var(--text); } +/* Estrogen watermark blended into the background */ +body::before { + content: ""; + position: fixed; + inset: 0; + background: url(/assets/theme/estrogen.svg) center / cover no-repeat; + filter: invert(86%) sepia(8%) saturate(900%) hue-rotate(190deg) brightness(105%); + opacity: 0.05; + pointer-events: none; + z-index: 0; +} + + .intro { margin-top: 20vh; color: var(--text); diff --git a/css/picker.css b/css/picker.css new file mode 100644 index 0000000..11e25cb --- /dev/null +++ b/css/picker.css @@ -0,0 +1,65 @@ +/* oneko skin switcher — standalone picker styles. + No framework, no CSS variables required. Restyle freely. */ + +/* https://github.com/doughmination/oneko.clove.is-a.dev/releases/tag/v1.0.0 */ + +#oneko { position: fixed; width: 32px; height: 32px; image-rendering: pixelated; + z-index: 2147483647; pointer-events: none; } + +.cat-picker { + position: fixed; inset: 0; z-index: 2147483646; + display: flex; align-items: center; justify-content: center; + background: rgba(17, 17, 27, 0.72); backdrop-filter: blur(4px); padding: 20px; +} +.cat-picker[hidden] { display: none; } +.cat-picker-panel { + background: #181825; color: #cdd6f4; border: 1px solid #313244; + border-radius: 14px; width: min(720px, 100%); max-height: 82vh; + display: flex; flex-direction: column; font-family: system-ui, sans-serif; + box-shadow: 0 24px 60px rgba(0,0,0,0.5); +} +.cat-picker-head { + display: flex; align-items: center; justify-content: space-between; + padding: 16px 20px; border-bottom: 1px solid #313244; font-weight: 700; +} +.cat-picker-close { + background: none; border: none; color: #a6adc8; font-size: 1.5rem; + line-height: 1; cursor: pointer; padding: 0 4px; +} +.cat-picker-close:hover { color: #f38ba8; } +.cat-grid { overflow-y: auto; padding: 18px 20px; } +.cat-section { margin-bottom: 18px; } +.cat-section-title { + margin: 0 0 10px; font-size: 0.8rem; text-transform: uppercase; + letter-spacing: 0.06em; color: #cba6f7; +} +.cat-section-items { + display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(74px, 1fr)); +} +.cat-option { + background: #1e1e2e; border: 1px solid #313244; border-radius: 10px; + padding: 10px 6px 8px; cursor: pointer; color: inherit; + display: flex; flex-direction: column; align-items: center; gap: 6px; + transition: border-color .12s, transform .1s, background .12s; +} +.cat-option:hover { border-color: #cba6f7; transform: translateY(-2px); background: #313244; } +.cat-option.current { border-color: #cba6f7; background: #313244; box-shadow: inset 0 0 0 1px #cba6f7; } +.cat-option .cat-preview { + width: 32px; height: 32px; image-rendering: pixelated; + background-repeat: no-repeat; border-radius: 4px; +} +.cat-option .cat-name { font-size: 0.68rem; color: #bac2de; text-align: center; line-height: 1.1; word-break: break-word; } +.cat-hint { margin: 0; padding: 12px 20px; border-top: 1px solid #313244; + font-size: 0.78rem; color: #a6adc8; text-align: center; } +.cat-hide-btn { background: none; border: none; color: #f38ba8; cursor: pointer; + font-size: 0.78rem; padding: 0; } +.cat-hide-btn:hover { text-decoration: underline; } +.oneko-show-btn { + position: fixed; left: 14px; bottom: 14px; z-index: 2147483646; + background: #1e1e2e; color: #bac2de; border: 1px solid #313244; border-radius: 999px; + padding: 7px 14px; font-size: 0.8rem; cursor: pointer; opacity: 0.85; + box-shadow: 0 6px 18px rgba(0,0,0,0.35); font-family: system-ui, sans-serif; +} +.oneko-show-btn:hover { opacity: 1; border-color: #cba6f7; color: #cdd6f4; } +kbd { background:#313244; border:1px solid #585b70; border-bottom-width:2px; + border-radius:6px; padding:.05em .45em; font-size:.85em; } diff --git a/css/theme-switcher.css b/css/theme-switcher.css new file mode 100644 index 0000000..a73103e --- /dev/null +++ b/css/theme-switcher.css @@ -0,0 +1,45 @@ +.beta-bar { + position: fixed; + top: 1rem; + right: 1rem; + z-index: 7; + display: flex; + align-items: center; + gap: 0.5rem; +} + +/* cat-collection button icon: the classic oneko idle frame, scaled down + from the 256x128 sprite sheet (idle frame lives at -96px,-96px) */ +.beta-cat-icon { + width: 22px; + height: 22px; + display: block; + background-image: url('/assets/oneko/classics/classic.png'); + background-repeat: no-repeat; + background-size: 176px 88px; + background-position: -66px -66px; + image-rendering: pixelated; +} + +.beta-btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.35rem; + border-radius: 999px; + background: var(--surface-0); + border: 1px solid var(--surface-1); + cursor: pointer; + transition: border-color 0.15s ease, transform 0.15s ease; +} + +.beta-btn:hover { + border-color: var(--pink); + transform: translateY(2px); +} + +.beta-icon { + width: 22px; + height: 22px; + display: block; +} \ No newline at end of file diff --git a/css/themes/frappe.css b/css/themes/frappe.css new file mode 100644 index 0000000..8b50d3e --- /dev/null +++ b/css/themes/frappe.css @@ -0,0 +1,38 @@ +/* Catppuccin Frappé — official palette + https://github.com/catppuccin/catppuccin (dark) */ +html[data-flavor="frappe"] { + color-scheme: dark; + + /* accents */ + --rosewater: #f2d5cf; + --flamingo: #eebebe; + --pink: #f4b8e4; + --accent-rgb: 244, 184, 228; /* live accent default = theme pink */ + --mauve: #ca9ee6; + --red: #e78284; + --maroon: #ea999c; + --peach: #ef9f76; + --yellow: #e5c890; + --green: #a6d189; + --teal: #81c8be; + --sky: #99d1db; + --saphire: #85c1dc; + --blue: #8caaee; + --lavender: #babbf1; + + /* text */ + --text: #c6d0f5; + --subtext-1: #b5bfe2; + --subtext-0: #a5adce; + --overlay-2: #949cbb; + --overlay-1: #838ba7; + --overlay-0: #737994; + + /* surfaces + backgrounds */ + --surface-2: #626880; + --surface-1: #51576d; + --surface-0: #414559; + --base: #303446; + --mantle: #292c3c; + --crust: #232634; +} \ No newline at end of file diff --git a/css/themes/latte.css b/css/themes/latte.css new file mode 100644 index 0000000..5935512 --- /dev/null +++ b/css/themes/latte.css @@ -0,0 +1,56 @@ +/* Catppuccin Latte — official palette + https://github.com/catppuccin/catppuccin (light) */ +html[data-flavor="latte"] { + color-scheme: light; + + /* accents */ + --rosewater: #dc8a78; + --flamingo: #dd7878; + --pink: #ea76cb; + --accent-rgb: 234, 118, 203; /* live accent default = theme pink */ + --mauve: #8839ef; + --red: #d20f39; + --maroon: #e64553; + --peach: #fe640b; + --yellow: #df8e1d; + --green: #40a02b; + --teal: #179299; + --sky: #04a5e5; + --saphire: #209fb5; + --blue: #1e66f5; + --lavender: #7287fd; + + /* text */ + --text: #4c4f69; + --subtext-1: #5c5f77; + --subtext-0: #6c6f85; + --overlay-2: #7c7f93; + --overlay-1: #8c8fa1; + --overlay-0: #9ca0b0; + + /* surfaces + backgrounds */ + --surface-2: #acb0be; + --surface-1: #bcc0cc; + --surface-0: #ccd0da; + --base: #eff1f5; + --mantle: #e6e9ef; + --crust: #dce0e8; +} + +/* Light-mode readability fixes (icons are white-filtered by default) */ +html[data-flavor="latte"] .icon { + filter: brightness(0); +} + +html[data-flavor="latte"] .link-card:hover .icon { + filter: none; +} + +html[data-flavor="latte"] .badge-icon { + filter: none; +} + +html[data-flavor="latte"] body::before { + filter: invert(14%) sepia(0.2) saturate(300%) hue-rotate(200deg) brightness(1.3); + opacity: 0.05; +} \ No newline at end of file diff --git a/css/themes/macchiato.css b/css/themes/macchiato.css new file mode 100644 index 0000000..b1e3a92 --- /dev/null +++ b/css/themes/macchiato.css @@ -0,0 +1,38 @@ +/* Catppuccin Macchiato — official palette + https://github.com/catppuccin/catppuccin (dark) */ +html[data-flavor="macchiato"] { + color-scheme: dark; + + /* accents */ + --rosewater: #f4dbd6; + --flamingo: #f0c6c6; + --pink: #f5bde6; + --accent-rgb: 245, 189, 230; /* live accent default = theme pink */ + --mauve: #c6a0f6; + --red: #ed8796; + --maroon: #ee99a0; + --peach: #f5a97f; + --yellow: #eed49f; + --green: #a6da95; + --teal: #8bd5ca; + --sky: #91d7e3; + --saphire: #7dc4e4; + --blue: #8aadf4; + --lavender: #b7bdf8; + + /* text */ + --text: #cad3f5; + --subtext-1: #b8c0e0; + --subtext-0: #a5adcb; + --overlay-2: #939ab7; + --overlay-1: #8087a2; + --overlay-0: #6e738d; + + /* surfaces + backgrounds */ + --surface-2: #5b6078; + --surface-1: #494d64; + --surface-0: #363a4f; + --base: #24273a; + --mantle: #1e2030; + --crust: #181926; +} \ No newline at end of file diff --git a/css/themes/mocha.css b/css/themes/mocha.css new file mode 100644 index 0000000..abe8b0a --- /dev/null +++ b/css/themes/mocha.css @@ -0,0 +1,38 @@ +/* Catppuccin Mocha — official palette + https://github.com/catppuccin/catppuccin (dark, default) */ +html[data-flavor="mocha"] { + color-scheme: dark; + + /* accents */ + --rosewater: #f5e0dc; + --flamingo: #f2cdcd; + --pink: #f5c2e7; + --accent-rgb: 245, 194, 231; /* live accent default = theme pink */ + --mauve: #cba6f7; + --red: #f38ba8; + --maroon: #eba0ac; + --peach: #fab387; + --yellow: #f9e2af; + --green: #a6e3a1; + --teal: #94e2d5; + --sky: #89dceb; + --saphire: #74c7ec; + --blue: #89b4fa; + --lavender: #b4befe; + + /* Text */ + --text: #cdd6f4; + --subtext-0: #a6adc8; + --subtext-1: #bac2de; + --overlay-0: #6c7086; + --overlay-1: #7f849c; + --overlay-2: #9399b2; + --surface-0: #313244; + --surface-1: #45475a; + --surface-2: #585b70; + + /* Backgrounds */ + --base: #1e1e2e; + --mantle: #181825; + --crust: #11111b; +} \ No newline at end of file diff --git a/index.html b/index.html index a71c08f..cf9e2ab 100644 --- a/index.html +++ b/index.html @@ -35,6 +35,7 @@ +
@@ -50,5 +51,6 @@ - + + \ No newline at end of file diff --git a/js/cat.js b/js/cat.js index 6401c45..1708ed0 100644 --- a/js/cat.js +++ b/js/cat.js @@ -204,7 +204,7 @@ } idleAnimation = avalibleIdleAnimations[ - Math.floor(Math.random() * avalibleIdleAnimations.length) + Math.floor(Math.random() * avalibleIdleAnimations.length) ]; } @@ -276,4 +276,304 @@ } init(); -})(); \ No newline at end of file +})(); + +const BASE_SPRITE = "/assets/oneko/classics/classic.png"; + +let CAT_MODES = []; + +// Order the category sections appear in the menu +const CATEGORY_ORDER = ["Classics", "Pride", "Cats", "Romance", "Gaming", "Pokémon", "Other Animals", "Things", "Rare"]; + +// click-count goals (total clicks on the cat) +const CLICK_GOALS = { filter: 13, romance: 69, weed: 420 }; +const SPRITE = BASE_SPRITE; // base sprite used for filter modes + previews +const IDLE_POS = "-97px -97px"; // idle frame, inset 1px to avoid neighbour-frame bleed +const spriteFor = (c) => c.sprite || BASE_SPRITE; + +(async function catModes() { + try { + // index.json lists which per-folder configs to load (one per oneko folder) + const index = await fetch("/js/on/index.json").then((r) => { + if (!r.ok) throw new Error(`index.json (${r.status})`); + return r.json(); + }); + // load every /js/on/.json and merge them into one list + const lists = await Promise.all( + index.map((name) => + fetch(`/js/on/${name}.json`) + .then((r) => (r.ok ? r.json() : [])) + .catch(() => []) + ) + ); + CAT_MODES = lists.flat(); + } catch (err) { + console.error("Could not load cat data:", err); + return; + } + const oneko = document.getElementById("oneko"); + if (!oneko) return; + + oneko.style.pointerEvents = "auto"; + oneko.style.cursor = "pointer"; + + const ls = window.localStorage; + let clicks = parseInt(ls.getItem("onekoClicks") || "0", 10); + let mode = parseInt(ls.getItem("onekoMode") || "0", 10); + + // permanently-earned methods (konami, gold, pokemon, + any click goal hit) + let unlocks; + try { unlocks = new Set(JSON.parse(ls.getItem("onekoUnlocks") || "[]")); } + catch (e) { unlocks = new Set(); } + const saveUnlocks = () => ls.setItem("onekoUnlocks", JSON.stringify([...unlocks])); + + // Returns true if a method was newly unlocked (false if already had it) + function unlockMethod(key) { + if (unlocks.has(key)) return false; + unlocks.add(key); + saveUnlocks(); + if (overlay && !overlay.hidden) renderGrid(); + return true; + } + + const methodOf = (c) => c.unlockMethod || "gay"; + const isUnlocked = (i) => { + const key = methodOf(CAT_MODES[i]); + if (key === "gay") return true; + if (key in CLICK_GOALS) return clicks >= CLICK_GOALS[key] || unlocks.has(key); + return unlocks.has(key); // konami / gold / pokemon + }; + const unlockedIndices = () => + CAT_MODES.map((_, i) => i).filter(isUnlocked); + + const apply = (i) => { + const c = CAT_MODES[i]; + oneko.style.backgroundImage = `url('${spriteFor(c)}')`; + oneko.style.filter = c.filter || "none"; + }; + + /* ---------- picker overlay (no visible trigger — press C to find it) ---------- */ + const overlay = document.createElement("div"); + overlay.className = "cat-picker"; + overlay.hidden = true; + overlay.innerHTML = ` + `; + document.body.appendChild(overlay); + const grid = overlay.querySelector(".cat-grid"); + + function makeOption(i) { + const c = CAT_MODES[i]; + const unlocked = isUnlocked(i); + const opt = document.createElement(unlocked ? "button" : "div"); + opt.className = + "cat-option" + (unlocked ? "" : " locked") + (i === mode ? " current" : ""); + if (unlocked) opt.type = "button"; + const previewFilter = unlocked ? (c.filter || "none") : "brightness(0) opacity(0.3)"; + opt.innerHTML = ` + + ${unlocked ? c.name : "???"}`; + if (unlocked) opt.addEventListener("click", () => selectMode(i)); + return opt; + } + + function renderGrid() { + grid.innerHTML = ""; + + // bucket cat indices by category + const byCat = {}; + CAT_MODES.forEach((c, i) => { + const cat = c.category || "Classics"; + (byCat[cat] = byCat[cat] || []).push(i); + }); + + // known categories first (in order), then any stragglers + const order = CATEGORY_ORDER.filter((c) => byCat[c]) + .concat(Object.keys(byCat).filter((c) => !CATEGORY_ORDER.includes(c))); + + order.forEach((cat) => { + const section = document.createElement("div"); + section.className = "cat-section"; + + const title = document.createElement("h4"); + title.className = "cat-section-title"; + title.textContent = cat; + section.appendChild(title); + + const items = document.createElement("div"); + items.className = "cat-section-items"; + byCat[cat].forEach((i) => items.appendChild(makeOption(i))); + section.appendChild(items); + + grid.appendChild(section); + }); + } + + function selectMode(i) { + mode = i; + ls.setItem("onekoMode", String(i)); + apply(i); + renderGrid(); + } + + const openPicker = () => { + renderGrid(); + overlay.hidden = false; + }; + const closePicker = () => (overlay.hidden = true); + const togglePicker = () => (overlay.hidden ? openPicker() : closePicker()); + + // let other scripts (e.g. the theme-bar button) open the cat menu + window.toggleCatPicker = togglePicker; + + overlay + .querySelector(".cat-picker-close") + .addEventListener("click", closePicker); + overlay.addEventListener("click", (e) => { + if (e.target === overlay) closePicker(); + }); + document.addEventListener("keydown", (e) => { + // ignore while typing in a field or with modifier keys held + const typing = /^(INPUT|TEXTAREA|SELECT)$/.test(document.activeElement?.tagName || ""); + if (e.key === "Escape" && !overlay.hidden) { + closePicker(); + } else if ( + (e.key === "c" || e.key === "C") && + !e.ctrlKey && !e.metaKey && !e.altKey && !typing + ) { + togglePicker(); + } else if ((e.key === "x" || e.key === "X") && + !e.ctrlKey && !e.metaKey && !e.altKey && !typing) { + if (unlockMethod("gaming")) { + toast("✨ Gaming sprites unlocked!"); + } + } + }); + + /* ---------- toast ---------- */ + let toastEl, toastTimer; + function toast(msg) { + if (!toastEl) { + toastEl = document.createElement("div"); + toastEl.className = "cat-toast"; + document.body.appendChild(toastEl); + } + toastEl.textContent = msg; + toastEl.classList.remove("show"); + void toastEl.offsetWidth; + toastEl.classList.add("show"); + clearTimeout(toastTimer); + toastTimer = setTimeout(() => toastEl.classList.remove("show"), 1700); + } + + /* ---------- squeak / boop sound on click ---------- */ + const boop = new Audio("/assets/oneko/boop.mp3"); + boop.preload = "auto"; + function playBoop() { + try { + boop.currentTime = 0; // rewind so rapid clicks each squeak + boop.play().catch(() => { }); // ignore autoplay/missing-file errors + } catch (e) { /* no-op */ } + } + + /* ---------- init + cat click ---------- */ + if (!isUnlocked(mode)) mode = 0; // fall back to Classic if current is locked + apply(mode); + + // Clicking the cat no longer changes its look — it only counts toward + // the click-based unlocks (13 / 69 / 420). Pick a cat from the menu. + oneko.addEventListener("click", (e) => { + e.preventDefault(); + e.stopPropagation(); + playBoop(); + clicks += 1; + ls.setItem("onekoClicks", String(clicks)); + + // Did this click hit a click-count goal exactly? (13 / 69 / 420) + for (const key in CLICK_GOALS) { + if (clicks === CLICK_GOALS[key]) { + unlocks.add(key); + saveUnlocks(); + const idx = CAT_MODES.findIndex((c) => methodOf(c) === key); + const name = idx >= 0 ? CAT_MODES[idx].name : key; + toast(`✨ Unlocked: ${name}! — open the cat menu 🐱`); + if (!overlay.hidden) renderGrid(); + } + } + }); + + /* ---------- Konami code → press Enter to confirm ---------- */ + const KONAMI = ["ArrowUp", "ArrowUp", "ArrowDown", "ArrowDown", + "ArrowLeft", "ArrowRight", "ArrowLeft", "ArrowRight", "b", "a"]; + let kProg = 0, kArmed = false; + document.addEventListener("keydown", (e) => { + const typing = /^(INPUT|TEXTAREA|SELECT)$/.test(document.activeElement?.tagName || ""); + if (typing || e.ctrlKey || e.metaKey || e.altKey) return; + + if (kArmed && e.key === "Enter") { + kArmed = false; + if (unlockMethod("konami")) toast("✨ Konami cats unlocked!"); + return; + } + + const key = e.key.length === 1 ? e.key.toLowerCase() : e.key; + if (key === KONAMI[kProg]) { + kProg += 1; + if (kProg === KONAMI.length) { + kProg = 0; + kArmed = true; + toast("Konami code… press Enter ↵"); + } + } else { + kProg = key === KONAMI[0] ? 1 : 0; // allow a fresh start on ↑ + } + }); + + /* ---------- Gold → opened the site while Discord status is Idle ---------- */ + const np = document.getElementById("now-playing"); + if (np) { + const checkIdle = () => { + if (np.dataset.status === "idle" && unlockMethod("gold")) { + toast("✨ Gold Cat unlocked!"); + } + }; + checkIdle(); + new MutationObserver(checkIdle) + .observe(np, { attributes: true, attributeFilter: ["data-status"] }); + } + + /* ---------- Pokémon → find & click the hidden pokéball ---------- */ + const poke = document.getElementById("pokeball-secret"); + if (poke) { + poke.addEventListener("click", (e) => { + e.preventDefault(); + poke.classList.add("found"); + if (unlockMethod("pokemon")) toast("✨ Pokémon cats unlocked!"); + }); + } + + /* ---------- Timer → keep the page open for a while ---------- */ + // Counts only while the tab is visible; resets each visit, but once the + // goal is reached the unlock is saved for good. + const TIMER_GOAL_MS = 5 * 60 * 1000; // 5 minutes + if (!unlocks.has("timer")) { + let elapsed = 0; + let last = Date.now(); + const timer = setInterval(() => { + if (document.hidden) { last = Date.now(); return; } + const now = Date.now(); + elapsed += now - last; + last = now; + if (elapsed >= TIMER_GOAL_MS) { + clearInterval(timer); + if (unlockMethod("timer")) toast("✨ Patience pays off — timer cats unlocked!"); + } + }, 1000); + } +})(); diff --git a/js/flavors.js b/js/flavors.js new file mode 100644 index 0000000..48a22b2 --- /dev/null +++ b/js/flavors.js @@ -0,0 +1,76 @@ +(function flavors() { + // Metadata only — colors are defined in the per-flavor CSS files. + const FLAVORS = { + mocha: { label: "Mocha", dot: "#f5c2e7" }, + macchiato: { label: "Macchiato", dot: "#f5bde6" }, + frappe: { label: "Frappé", dot: "#f4b8e4" }, + latte: { label: "Latte", dot: "#ea76cb" }, + }; + const ORDER = ["mocha", "macchiato", "frappe", "latte"]; + + const root = document.documentElement; + const ls = window.localStorage; + + function apply(name) { + const f = FLAVORS[name] || FLAVORS.mocha; + root.setAttribute("data-flavor", name); // CSS does the rest + const meta = document.querySelector('meta[name="theme-color"]'); + if (meta) meta.setAttribute("content", f.dot); + } + + let current = ls.getItem("ctpFlavor"); + if (!ORDER.includes(current)) current = "mocha"; + apply(current); // the snippet already set this to avoid a flash + + // ---- top-right corner icon button ---- + const bar = document.createElement("div"); + bar.className = "beta-bar"; + bar.innerHTML = ` + `; + // Group the single-item widgets (now-playing + theme toggle) into one + // top bar. On mobile they sit side by side; on desktop both stay + // position:fixed, so this wrapper is zero-size and invisible. + let topbar = document.querySelector(".topbar"); + if (!topbar) { + topbar = document.createElement("div"); + topbar.className = "topbar"; + document.body.insertBefore(topbar, document.body.firstChild); + const np = document.getElementById("now-playing"); + if (np) topbar.appendChild(np); + } + topbar.appendChild(bar); + + const btn = bar.querySelector("#flavor-btn"); + const icon = bar.querySelector(".beta-icon"); + + function paintBtn() { + const f = FLAVORS[current]; + icon.src = `/assets/theme/${current}.png`; // e.g. /assets/theme/mocha.png + icon.alt = f.label; + btn.title = `Theme: ${f.label} (click to cycle)`; + } + paintBtn(); + + btn.addEventListener("click", () => { + current = ORDER[(ORDER.indexOf(current) + 1) % ORDER.length]; + ls.setItem("ctpFlavor", current); + apply(current); + paintBtn(); + }); + + // ---- cat collection button (sits next to the theme button) ---- + const catBtn = document.createElement("button"); + catBtn.className = "beta-btn"; + catBtn.id = "cat-btn"; + catBtn.type = "button"; + catBtn.title = "Cat collection"; + catBtn.setAttribute("aria-label", "Open cat collection"); + catBtn.innerHTML = ``; + bar.appendChild(catBtn); + + catBtn.addEventListener("click", () => { + if (typeof window.toggleCatPicker === "function") window.toggleCatPicker(); + }); +})(); diff --git a/js/on/cats.json b/js/on/cats.json new file mode 100644 index 0000000..3f72a27 --- /dev/null +++ b/js/on/cats.json @@ -0,0 +1,87 @@ +[ + { + "name": "Ace", + "sprite": "/assets/oneko/cats/ace.png", + "category": "Cats" + }, + { + "name": "Blue Tapy", + "sprite": "/assets/oneko/cats/blue-tapy.png", + "category": "Cats" + }, + { + "name": "Calico", + "sprite": "/assets/oneko/cats/calico.png", + "category": "Cats" + }, + { + "name": "Cattail", + "sprite": "/assets/oneko/cats/cattail.png", + "category": "Cats" + }, + { + "name": "Esmeralda", + "sprite": "/assets/oneko/cats/esmeralda.png", + "category": "Romance" + }, + { + "name": "Jess", + "sprite": "/assets/oneko/cats/jess.png", + "category": "Cats" + }, + { + "name": "Kina", + "sprite": "/assets/oneko/cats/kina.png", + "category": "Cats" + }, + { + "name": "Lucy", + "sprite": "/assets/oneko/cats/lucy.png", + "category": "Cats" + }, + { + "name": "Maia", + "sprite": "/assets/oneko/cats/maia.png", + "category": "Cats" + }, + { + "name": "Maria", + "sprite": "/assets/oneko/cats/maria.png", + "category": "Cats" + }, + { + "name": "Mike", + "sprite": "/assets/oneko/cats/mike.png", + "category": "Cats" + }, + { + "name": "Rainbow Tapy", + "sprite": "/assets/oneko/cats/rainbow-tapy.png", + "category": "Cats" + }, + { + "name": "Silver", + "sprite": "/assets/oneko/cats/silver.png", + "category": "Cats" + }, + { + "name": "Spirit", + "sprite": "/assets/oneko/cats/spirit.png", + "category": "Cats" + }, + { + "name": "Tapy", + "sprite": "/assets/oneko/cats/tapy.png", + "category": "Cats" + }, + { + "name": "USA", + "sprite": "/assets/oneko/cats/usa.png", + "category": "Romance" + }, + { + "name": "Valentine", + "sprite": "/assets/oneko/cats/valentine.png", + "category": "Romance" + } +] \ No newline at end of file diff --git a/js/on/classics.json b/js/on/classics.json new file mode 100644 index 0000000..2bd2ad3 --- /dev/null +++ b/js/on/classics.json @@ -0,0 +1,79 @@ +[ + { + "name": "Classic", + "sprite": "/assets/oneko/classics/classic.png", + "filter": "none", + "category": "Classics" + }, + { + "name": "Aquaneon", + "sprite": "/assets/oneko/classics/aquaneon.png", + "category": "Classics" + }, + { + "name": "Black Green", + "sprite": "/assets/oneko/classics/black-green.png", + "category": "Classics" + }, + { + "name": "Black", + "sprite": "/assets/oneko/classics/black.png", + "category": "Classics" + }, + { + "name": "Byte Green", + "sprite": "/assets/oneko/classics/byte-green.png", + "category": "Classics" + }, + { + "name": "Deedee", + "sprite": "/assets/oneko/classics/deedee.png", + "category": "Classics" + }, + { + "name": "Dusty Cat", + "sprite": "/assets/oneko/classics/dusty.png", + "category": "Classics" + }, + { + "name": "Ghost", + "sprite": "/assets/oneko/classics/ghost.png", + "category": "Classics" + }, + { + "name": "Ghost Spirit", + "sprite": "/assets/oneko/classics/ghostspirit.png", + "filter": "drop-shadow(0 0 4px #89dceb)", + "category": "Classics" + }, + { + "name": "Gold Cat", + "sprite": "/assets/oneko/classics/gold.png", + "category": "Rare" + }, + { + "name": "Gray", + "sprite": "/assets/oneko/classics/gray.png", + "category": "Classics" + }, + { + "name": "Red", + "sprite": "/assets/oneko/classics/red.png", + "category": "Classics" + }, + { + "name": "Sapphire Cat", + "sprite": "/assets/oneko/classics/sapphire.png", + "category": "Classics" + }, + { + "name": "Silver Sky", + "sprite": "/assets/oneko/classics/silversky.png", + "category": "Classics" + }, + { + "name": "Vaporwave", + "sprite": "/assets/oneko/classics/vaporwave.png", + "category": "Classics" + } +] \ No newline at end of file diff --git a/js/on/gaming.json b/js/on/gaming.json new file mode 100644 index 0000000..08e90c5 --- /dev/null +++ b/js/on/gaming.json @@ -0,0 +1,42 @@ +[ + { + "name": "Andriod", + "sprite": "/assets/oneko/gaming/andriod.png", + "category": "Gaming" + }, + { + "name": "Lololowka", + "sprite": "/assets/oneko/gaming/lololowka.png", + "category": "Gaming" + }, + { + "name": "Niko", + "sprite": "/assets/oneko/gaming/niko.png", + "category": "Gaming" + }, + { + "name": "Sans", + "sprite": "/assets/oneko/gaming/sans.png", + "category": "Gaming" + }, + { + "name": "Sonic", + "sprite": "/assets/oneko/gaming/sonic.png", + "category": "Gaming" + }, + { + "name": "Toothless", + "sprite": "/assets/oneko/gaming/toothless.png", + "category": "Gaming" + }, + { + "name": "Yumi Nikki 1 Skin", + "sprite": "/assets/oneko/gaming/yumi-nikki-1-skin.png", + "category": "Gaming" + }, + { + "name": "Yumi Nikki 2 Skin", + "sprite": "/assets/oneko/gaming/yumi-nikki-2-skin.png", + "category": "Gaming" + } +] \ No newline at end of file diff --git a/js/on/index.json b/js/on/index.json new file mode 100644 index 0000000..c44fa6a --- /dev/null +++ b/js/on/index.json @@ -0,0 +1,10 @@ +[ + "cats", + "classics", + "gaming", + "operating-systems", + "other-animals", + "pokemon", + "pride", + "things" +] \ No newline at end of file diff --git a/js/on/operating-systems.json b/js/on/operating-systems.json new file mode 100644 index 0000000..edcaea6 --- /dev/null +++ b/js/on/operating-systems.json @@ -0,0 +1,7 @@ +[ + { + "name": "Bsd", + "sprite": "/assets/oneko/operating-systems/bsd.png", + "category": "Operating Systems" + } +] \ No newline at end of file diff --git a/js/on/other-animals.json b/js/on/other-animals.json new file mode 100644 index 0000000..0b2b392 --- /dev/null +++ b/js/on/other-animals.json @@ -0,0 +1,67 @@ +[ + { + "name": "Blue Butterfly", + "sprite": "/assets/oneko/other-animals/blue-butterfly.png", + "category": "Other Animals" + }, + { + "name": "Bunny", + "sprite": "/assets/oneko/other-animals/bunny.png", + "category": "Other Animals" + }, + { + "name": "Bxter", + "sprite": "/assets/oneko/other-animals/bxter.png", + "category": "Other Animals" + }, + { + "name": "Dog", + "sprite": "/assets/oneko/other-animals/dog.png", + "category": "Other Animals" + }, + { + "name": "Fox", + "sprite": "/assets/oneko/other-animals/fox.png", + "category": "Other Animals" + }, + { + "name": "Humming Bird", + "sprite": "/assets/oneko/other-animals/humming_bird.png", + "category": "Other Animals" + }, + { + "name": "Jerry", + "sprite": "/assets/oneko/other-animals/jerry.png", + "category": "Other Animals" + }, + { + "name": "Poochy", + "sprite": "/assets/oneko/other-animals/poochy.png", + "category": "Other Animals" + }, + { + "name": "Red Butterfly", + "sprite": "/assets/oneko/other-animals/red-butterfly.png", + "category": "Other Animals" + }, + { + "name": "Santino", + "sprite": "/assets/oneko/other-animals/santino.png", + "category": "Other Animals" + }, + { + "name": "Stingray", + "sprite": "/assets/oneko/other-animals/stingray.png", + "category": "Other Animals" + }, + { + "name": "Tato", + "sprite": "/assets/oneko/other-animals/tato.png", + "category": "Other Animals" + }, + { + "name": "Tentacle", + "sprite": "/assets/oneko/other-animals/tentacle.png", + "category": "Other Animals" + } +] \ No newline at end of file diff --git a/js/on/pokemon.json b/js/on/pokemon.json new file mode 100644 index 0000000..9ed689d --- /dev/null +++ b/js/on/pokemon.json @@ -0,0 +1,37 @@ +[ + { + "name": "Eevee", + "sprite": "/assets/oneko/pokemon/eevee.png", + "category": "Pok\u00e9mon" + }, + { + "name": "Espeon", + "sprite": "/assets/oneko/pokemon/espeon.png", + "category": "Pok\u00e9mon" + }, + { + "name": "Gastly", + "sprite": "/assets/oneko/pokemon/gastly.png", + "category": "Pok\u00e9mon" + }, + { + "name": "Jigglypuff", + "sprite": "/assets/oneko/pokemon/jigglypuff.png", + "category": "Pok\u00e9mon" + }, + { + "name": "Pikachu", + "sprite": "/assets/oneko/pokemon/pikachu.png", + "category": "Pok\u00e9mon" + }, + { + "name": "Psyduck", + "sprite": "/assets/oneko/pokemon/psyduck.png", + "category": "Pok\u00e9mon" + }, + { + "name": "Skitty", + "sprite": "/assets/oneko/pokemon/skitty.png", + "category": "Pok\u00e9mon" + } +] \ No newline at end of file diff --git a/js/on/pride.json b/js/on/pride.json new file mode 100644 index 0000000..fac7a00 --- /dev/null +++ b/js/on/pride.json @@ -0,0 +1,37 @@ +[ + { + "name": "Bisexual", + "sprite": "/assets/oneko/pride/bisexual.png", + "category": "Pride" + }, + { + "name": "Genderfae", + "sprite": "/assets/oneko/pride/genderfae.png", + "category": "Pride" + }, + { + "name": "Genderfluid", + "sprite": "/assets/oneko/pride/genderfluid.png", + "category": "Pride" + }, + { + "name": "Lesbian", + "sprite": "/assets/oneko/pride/lesbian.png", + "category": "Pride" + }, + { + "name": "MLM", + "sprite": "/assets/oneko/pride/mlm.png", + "category": "Pride" + }, + { + "name": "Non Binary", + "sprite": "/assets/oneko/pride/nb.png", + "category": "Pride" + }, + { + "name": "Transgender", + "sprite": "/assets/oneko/pride/trans.png", + "category": "Pride" + } +] \ No newline at end of file diff --git a/js/on/things.json b/js/on/things.json new file mode 100644 index 0000000..1a0dbab --- /dev/null +++ b/js/on/things.json @@ -0,0 +1,52 @@ +[ + { + "name": "Chocola", + "sprite": "/assets/oneko/things/chocola.png", + "category": "Things" + }, + { + "name": "Coke Bottle", + "sprite": "/assets/oneko/things/coke-bottle.png", + "category": "Things" + }, + { + "name": "Fire", + "sprite": "/assets/oneko/things/fire.png", + "category": "Things" + }, + { + "name": "Marisa", + "sprite": "/assets/oneko/things/marisa.png", + "category": "Things" + }, + { + "name": "Microbot", + "sprite": "/assets/oneko/things/microbot.png", + "category": "Things" + }, + { + "name": "Mini", + "sprite": "/assets/oneko/things/mini.png", + "category": "Things" + }, + { + "name": "Robot", + "sprite": "/assets/oneko/things/robot.png", + "category": "Things" + }, + { + "name": "Sami", + "sprite": "/assets/oneko/things/sami.png", + "category": "Things" + }, + { + "name": "Star", + "sprite": "/assets/oneko/things/star.png", + "category": "Things" + }, + { + "name": "Ufo", + "sprite": "/assets/oneko/things/ufo.png", + "category": "Things" + } +] \ No newline at end of file