diff --git a/demo/demo.css b/demo/demo.css new file mode 100644 index 0000000..9020551 --- /dev/null +++ b/demo/demo.css @@ -0,0 +1,324 @@ +:root { + --bg-body: #fff; + --bg-hover: #f2f1f1; + --bg-content: #e0dfde; + --bg-accent: #d2d1cf; + --bg-border: #000; + --bg-button: #fff; + --bg-active: #d2d1cf; + --icon-default: #131417; + --link-default: #0060e4; + --text-default: #000; + --text-accent: #8e8d88; + --text-contrast: #fff; + --svg-border: #fff; + --rgba-fg: rgba(255,255,255,0.916667); + --rgba-modal: rgba(0, 0, 0, 0.75); +} +:root[data-mode=dark] { + --bg-body: #202124; + --bg-hover: #131417; + --bg-content: #3a3a3a; + --bg-accent: #8e8d88; + --bg-border: #575754; + --bg-button: #18191b; + --bg-active: #29c9ff; + --icon-default: #000; + --link-default: #29c9ff; + --text-default: #fff; + --text-accent: #d2d1cf; + --text-contrast: #ddd; + --svg-border: #575754; + --rgba-fg: rgba(0,0,0,0.9); + --rgba-modal: rgba(0, 0, 0, 0.5); +} + +html { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; +} + +body { + align-items: center; + background: var(--bg-body); + color: var(--text-default); + display: flex; + flex-direction: column; + margin: 0; + transition: background 100ms ease-in-out, color 100ms ease-in-out; +} + +h1 { + font-size: 2rem; + margin: 0; +} +h1 > span { + color: var(--text-accent); + padding-left: 0.25rem; +} + +h2 { + font-size: 1.5rem; +} + +p { + font-size: 1.125rem; + line-height: 1.625rem; +} + +a { + color: var(--link-default); +} + +header, +footer { + padding: 2.5vw 0 2vw; + width: 92vw; + max-width: 1600px; +} + +nav { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 1.5rem; +} + +main { + background: var(--bg-content); + padding: 1.5vw 0; + transition: background 100ms ease-in-out; + display: flex; + flex-direction: column; + width: 100%; + align-items: center; + align-content: stretch; +} + +footer { + padding-bottom: 2.5vw; +} +footer p { + font-size: 1rem; + margin: 0; +} +footer p:first-child { + margin-bottom: 0.5rem; +} + +section { + display: flex; + width: 92vw; + max-width: 1600px; +} + +aside { + flex-shrink: 0; + width: 33vw; +} + +content { + width: 100%; + padding: max(1vw, 0.5rem) max(4vw, 2rem); +} + +article { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + column-gap: max(2vw, 1rem); + row-gap: max(2vw, 1rem); + margin: 0 0 max(2vw, 2rem); + width: 100%; +} + +figure { + display: inline-flex; + align-items: center; + margin: 0; + flex-direction: column; +} +figure .ss { + font-size: max(7.5vw, 2rem); +} +figure.glyph .ss-border::after, +figure.glyph .ss-inner::marker { + color: var(--border-default); +} +figure.glyph .ss-border::before, +figure.glyph .ss-inner::before { + visibility: hidden; +} + +figcaption { + padding-top: 1rem; + text-align: center; +} + +menu { + display: flex; + align-items: stretch; + margin: 0; + padding: 0; +} + +#mode { + display: flex; + align-items: stretch; + margin-right: 1rem; + border: 0.2rem solid var(--bg-accent); + border-radius: 2rem; + transition: border-color 100ms ease-in-out; +} +#mode:hover { + border-color: var(--text-accent); +} +#mode sub, +#mode sup { + width: 2.25rem; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + font-size: 0; +} +#mode sub { + border-radius: 2rem 0 0 2rem; + padding-left: 0.5rem; +} +#mode sub::before { + font-family: keyrune; + font-size: 1.25rem; + content: "\e024"; +} +#mode sup { + border-radius: 0 2rem 2rem 0; + padding-right: 0.5rem; +} +#mode sup::before { + font-family: keyrune; + font-size: 1.25rem; + content: "\e012"; +} +#mode .on { + background: var(--bg-content); + border-radius: 2rem; + padding: 0 0.5rem; + box-shadow: inset 0 0 0 2px var(--bg-body); +} + +#preview { + position: relative; + cursor: pointer; +} +#preview .ss { + color: var(--text-default); + position: absolute; + top: -1px; + left: 1.25rem; + font-size: 1.5rem; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + width: 2.625rem; + background: transparent; + z-index: -1; +} +#preview select { + background: transparent; + color: var(--text-default); + height: 2.75rem; + border: 0.2rem solid var(--bg-accent); + border-radius: 2rem; + padding: 0 3rem 0 4.125rem; + font-size: 1rem; + -webkit-appearance: none; + appearance: none; + outline: none; + grid-area: select; + cursor: pointer; + width: 100%; + transition: border-color 100ms ease-in-out; +} +#preview::after { + content: ""; + width: 1rem; + height: 0.625rem; + background-color: var(--bg-accent); + clip-path: polygon(100% 0%, 0 0%, 50% 100%); + position: absolute; + top: 1.15rem; + right: 1.15rem; +} +#preview:hover select { + border-color: var(--text-accent); +} + +.span-3 { + grid-column: 1/4; +} + +.ss { + color: var(--icon-default); +} + +.text-white { + color: var(--text-contrast); +} +.text-black { + color: var(--text-default); +} + +@media (max-width: 768px) { + header, +section, +footer { + width: 88vw; + } + + nav { + flex-direction: column; + align-items: flex-start; + } + + h1 { + margin: 0.5rem 0 1rem; + } + + section { + flex-direction: column; + } + + content { + padding: max(1vw, 0.5rem) 0; + } + + aside { + width: 92vw; + } +} +@media (min-width: 769px) { + figure { + padding: 0 max(1vw, 1rem); + } +} +@media (min-width: 1280px) { + html { + font-size: 17px; + } + + aside { + width: 28vw; + } +} +@media (min-width: 1440px) { + html { + font-size: 18px; + } + + aside { + width: 25vw; + } +} + +/*# sourceMappingURL=demo.css.map */ \ No newline at end of file diff --git a/demo/demo.css.map b/demo/demo.css.map new file mode 100644 index 0000000..edfeb4b --- /dev/null +++ b/demo/demo.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/demo.scss"],"names":[],"mappings":"AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EAEA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAIR;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;AAEA;EACI;EACA;;AAEA;EACI;;;AAKZ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAIA;AAAA;EAEI;;AAGJ;AAAA;EAEI;;;AAKZ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;;;AAIR;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAIA;EACI;;AAEJ;EACI;;;AAIR;EACI;AAAA;AAAA;IAGI;;;EAEJ;IACI;IACA;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;AAIR;EACI;IACI;;;AAIR;EACI;IACI;;;EAEJ;IACI;;;AAGR;EACI;IACI;;;EAEJ;IACI","file":"demo.css"} \ No newline at end of file diff --git a/demo/index.html b/demo/index.html new file mode 100644 index 0000000..0bd8bca --- /dev/null +++ b/demo/index.html @@ -0,0 +1,237 @@ + + + + Keyrune v4 + + + + + + + +
+ +

+ Complete Magic: the Gathering set symbol pictographic font. Each symbol in v4 has been redrawn and normalized with 3 glyphs for the base rarity symbol, the border, and an optional fixed white layer that some symbols have. Use the demo tool here to see a detailed view by set, or view the full set at once. +

+
+
+
+ + +
+
+ +
Symbol
+
+
+ +
Border
+
+
+ +
Inner
+
+
+
+
+
+ + +
+
+ +
No border
+
+
+ +
White border
+
+
+ +
Black border
+
+
+
+
+
+ + +
+
+ +
Common
+
+
+ +
Complete common
+
+
+ +
Common with inner but no border
+
+
+
+
+ +
Uncommon
+
+
+ +
Gradient uncommon
+
+
+ +
Complete uncommon
+
+
+
+
+ +
Rare
+
+
+ +
Gradient rare
+
+
+ +
Complete rare
+
+
+
+
+ +
Mythic
+
+
+ +
Gradient mythic
+
+
+ +
Complete mythic
+
+
+
+
+ +
Mythic with white border
+
+
+ +
Gradient rare with inner only
+
+
+ +
White set symbol
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/demo/sets.js b/demo/sets.js new file mode 100644 index 0000000..a9bdd1d --- /dev/null +++ b/demo/sets.js @@ -0,0 +1,69 @@ +sets = { + "Core": { + "lea": "Alpha", + "leb": "Beta", + "2ed": "Unlimited", + "3ed": "Revised", + "4ed": "Fourth Edition", + "5ed": "Fifth Edition", + "6ed": "Sixth Edition", + }, + "Expansion": { + "arn": "Arabian Nights", + "atq": "Antiquities", + "leg": "Legends", + "drk": "The Dark", + "fem": "Fallen Empires", + "ice": "Ice Age", + "hml": "Homelands", + "all": "Alliances", + "mir": "Mirage", + "vis": "Visions", + "wth": "Weatherlight", + "tmp": "Tempest", + "sth": "Stronghold", + "exo": "Exodus", + }, + "Command": { + "pvan": "Vanguard", + }, + "Reprint": { + "sum": "Summer Magic", + "fbb": "Foreign Black Border", + "4bb": "4th Edition Black Border", + "chr": "Chronicles", + "ren": "Renaissance", + "rin": "Rinascimento", + }, + "Supplemental": {}, + "Digital": { + "past": "Astral Cards", + }, + "Beginner": { + "itp": "Introductory 2-Player Set", + "por": "Portal", + "p02": "Portal Second Age" + }, + "Premium": { + "ced": "Collectors' Edition", + "cei": "Intl. Collectors' Edition", + }, + "Promo": { + "pdrc": "Dragon Con", + "phpr": "HarperPrism Book Promos", + "pmei": "Media Inserts", + "pmtg": "MTG Logo Promos", + }, + "Standalone": { + "ugl": "Unglued", + }, + "Unofficial": { + "palp": "Asia Pacific Land Program", + }, + "Alternative": { + "legchr": "Legends (Chronicles)", + "pgc98": "Gen Con 1998 Oversized Promo", + "po": "Portal (Gatherer)", + "wl": "Weatherlight (Gatherer)", + } +} \ No newline at end of file diff --git a/dist/css/keyrune.css b/dist/css/keyrune.css new file mode 100644 index 0000000..2e3dd16 --- /dev/null +++ b/dist/css/keyrune.css @@ -0,0 +1,598 @@ +:root { + --border-default: #fff; + --border-contrast: #131417; + --rarity-default: #131417; + --inner-default: #fff; +} +:root[data-mode=dark] { + --border-default: #ddd; + --border-contrast: #000; + --rarity-default: #000; + --inner-default: #fff; +} + +@font-face { + font-family: "keyrune"; + src: url("../font/keyrune.eot?4.0.38"); + src: url("../font/keyrune.eot?4.0.38#iefix") format("embedded-opentype"), url("../font/keyrune.woff2?4.0.38") format("woff2"), url("../font/keyrune.ttf?4.0.38") format("truetype"), url("../font/keyrune.woff?4.0.38") format("woff"), url("../font/keyrune.svg?4.0.38#keyrune") format("svg"); + font-weight: normal; + font-style: normal; + font-display: block; +} +.ss { + font-family: "keyrune" !important; + color: var(--icon-default); + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + position: relative; + text-transform: none; + line-height: 1; + display: inline-flex; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.ss-lea::before { + content: "\e000"; +} +.ss-lea.ss-border::after { + content: "\e001"; +} +.ss-lea.ss-inner::marker { + content: "\e002"; +} +.ss-leb::before { + content: "\e003"; +} +.ss-leb.ss-border::after { + content: "\e004"; +} +.ss-leb.ss-inner::marker { + content: "\e005"; +} +.ss-2ed::before { + content: "\e006"; +} +.ss-2ed.ss-border::after { + content: "\e007"; +} +.ss-2ed.ss-inner::marker { + content: "\e008"; +} +.ss-ced::before { + content: "\e009"; +} +.ss-ced.ss-border::after { + content: "\e00a"; +} +.ss-ced.ss-inner::marker { + content: "\e00b"; +} +.ss-cei::before { + content: "\e00c"; +} +.ss-cei.ss-border::after { + content: "\e00d"; +} +.ss-cei.ss-inner::marker { + content: "\e00e"; +} +.ss-arn::before { + content: "\e00f"; +} +.ss-arn.ss-border::after { + content: "\e010"; +} +.ss-arn.ss-inner::marker { + content: "\e011"; +} +.ss-atq::before { + content: "\e012"; +} +.ss-atq.ss-border::after { + content: "\e013"; +} +.ss-atq.ss-inner::marker { + content: "\f8ff"; +} +.ss-3ed::before { + content: "\e015"; +} +.ss-3ed.ss-border::after { + content: "\e016"; +} +.ss-3ed.ss-inner::marker { + content: "\e017"; +} +.ss-fbb::before { + content: "\e018"; +} +.ss-fbb.ss-border::after { + content: "\e019"; +} +.ss-fbb.ss-inner::marker { + content: "\e01a"; +} +.ss-leg::before { + content: "\e01b"; +} +.ss-leg.ss-border::after { + content: "\e01c"; +} +.ss-leg.ss-inner::marker { + content: "\e01d"; +} +.ss-sum::before { + content: "\e01e"; +} +.ss-sum.ss-border::after { + content: "\e01f"; +} +.ss-sum.ss-inner::marker { + content: "\f8ff"; +} +.ss-pdrc::before { + content: "\e021"; +} +.ss-pdrc.ss-border::after { + content: "\e022"; +} +.ss-pdrc.ss-inner::marker { + content: "\f8ff"; +} +.ss-drk::before { + content: "\e024"; +} +.ss-drk.ss-border::after { + content: "\e025"; +} +.ss-drk.ss-inner::marker { + content: "\f8ff"; +} +.ss-phpr::before { + content: "\e027"; +} +.ss-phpr.ss-border::after { + content: "\e028"; +} +.ss-phpr.ss-inner::marker { + content: "\f8ff"; +} +.ss-fem::before { + content: "\e02a"; +} +.ss-fem.ss-border::after { + content: "\e02b"; +} +.ss-fem.ss-inner::marker { + content: "\f8ff"; +} +.ss-pmei::before { + content: "\e02d"; +} +.ss-pmei.ss-border::after { + content: "\e02e"; +} +.ss-pmei.ss-inner::marker { + content: "\f8ff"; +} +.ss-pleaf::before { + content: "\e02d"; +} +.ss-pleaf.ss-border::after { + content: "\e02e"; +} +.ss-pleaf.ss-inner::marker { + content: "\f8ff"; +} +.ss-pmtg::before { + content: "\e030"; +} +.ss-pmtg.ss-border::after { + content: "\e031"; +} +.ss-pmtg.ss-inner::marker { + content: "\f8ff"; +} +.ss-plgm::before { + content: "\e030"; +} +.ss-plgm.ss-border::after { + content: "\e031"; +} +.ss-plgm.ss-inner::marker { + content: "\f8ff"; +} +.ss-parl::before { + content: "\e030"; +} +.ss-parl.ss-border::after { + content: "\e031"; +} +.ss-parl.ss-inner::marker { + content: "\f8ff"; +} +.ss-4ed::before { + content: "\e033"; +} +.ss-4ed.ss-border::after { + content: "\e034"; +} +.ss-4ed.ss-inner::marker { + content: "\f8ff"; +} +.ss-4bb::before { + content: "\e036"; +} +.ss-4bb.ss-border::after { + content: "\e037"; +} +.ss-4bb.ss-inner::marker { + content: "\f8ff"; +} +.ss-ice::before { + content: "\e039"; +} +.ss-ice.ss-border::after { + content: "\e03a"; +} +.ss-ice.ss-inner::marker { + content: "\e03b"; +} +.ss-chr::before { + content: "\e03c"; +} +.ss-chr.ss-border::after { + content: "\e03d"; +} +.ss-chr.ss-inner::marker { + content: "\f8ff"; +} +.ss-ren::before { + content: "\e03f"; +} +.ss-ren.ss-border::after { + content: "\e040"; +} +.ss-ren.ss-inner::marker { + content: "\f8ff"; +} +.ss-rin::before { + content: "\e042"; +} +.ss-rin.ss-border::after { + content: "\e043"; +} +.ss-rin.ss-inner::marker { + content: "\f8ff"; +} +.ss-hml::before { + content: "\e045"; +} +.ss-hml.ss-border::after { + content: "\e046"; +} +.ss-hml.ss-inner::marker { + content: "\e047"; +} +.ss-all::before { + content: "\e048"; +} +.ss-all.ss-border::after { + content: "\e049"; +} +.ss-all.ss-inner::marker { + content: "\e04a"; +} +.ss-mir::before { + content: "\e04b"; +} +.ss-mir.ss-border::after { + content: "\e04c"; +} +.ss-mir.ss-inner::marker { + content: "\f8ff"; +} +.ss-itp::before { + content: "\e04e"; +} +.ss-itp.ss-border::after { + content: "\e04f"; +} +.ss-itp.ss-inner::marker { + content: "\f8ff"; +} +.ss-vis::before { + content: "\e051"; +} +.ss-vis.ss-border::after { + content: "\e052"; +} +.ss-vis.ss-inner::marker { + content: "\e053"; +} +.ss-5ed::before { + content: "\e054"; +} +.ss-5ed.ss-border::after { + content: "\e055"; +} +.ss-5ed.ss-inner::marker { + content: "\f8ff"; +} +.ss-past::before { + content: "\e057"; +} +.ss-past.ss-border::after { + content: "\e058"; +} +.ss-past.ss-inner::marker { + content: "\f8ff"; +} +.ss-por::before { + content: "\e05a"; +} +.ss-por.ss-border::after { + content: "\e05b"; +} +.ss-por.ss-inner::marker { + content: "\e05c"; +} +.ss-pvan::before { + content: "\e05d"; +} +.ss-pvan.ss-border::after { + content: "\e05e"; +} +.ss-pvan.ss-inner::marker { + content: "\f8ff"; +} +.ss-van::before { + content: "\e05d"; +} +.ss-van.ss-border::after { + content: "\e05e"; +} +.ss-van.ss-inner::marker { + content: "\f8ff"; +} +.ss-wth::before { + content: "\e060"; +} +.ss-wth.ss-border::after { + content: "\e061"; +} +.ss-wth.ss-inner::marker { + content: "\e062"; +} +.ss-tmp::before { + content: "\e063"; +} +.ss-tmp.ss-border::after { + content: "\e064"; +} +.ss-tmp.ss-inner::marker { + content: "\f8ff"; +} +.ss-sth::before { + content: "\e066"; +} +.ss-sth.ss-border::after { + content: "\e067"; +} +.ss-sth.ss-inner::marker { + content: "\f8ff"; +} +.ss-exo::before { + content: "\e069"; +} +.ss-exo.ss-border::after { + content: "\e06a"; +} +.ss-exo.ss-inner::marker { + content: "\f8ff"; +} +.ss-p02::before { + content: "\e06c"; +} +.ss-p02.ss-border::after { + content: "\e06d"; +} +.ss-p02.ss-inner::marker { + content: "\f8ff"; +} +.ss-ugl::before { + content: "\e06f"; +} +.ss-ugl.ss-border::after { + content: "\e070"; +} +.ss-ugl.ss-inner::marker { + content: "\f8ff"; +} +.ss-palp::before { + content: "\e072"; +} +.ss-palp.ss-border::after { + content: "\e073"; +} +.ss-palp.ss-inner::marker { + content: "\f8ff"; +} +.ss-6ed::before { + content: "\e07e"; +} +.ss-6ed.ss-border::after { + content: "\e07f"; +} +.ss-6ed.ss-inner::marker { + content: "\f8ff"; +} +.ss-legchr::before { + content: "\f8f6"; +} +.ss-legchr.ss-border::after { + content: "\f8f5"; +} +.ss-legchr.ss-inner::marker { + content: "\f8ff"; +} +.ss-leg2::before { + content: "\f8f6"; +} +.ss-leg2.ss-border::after { + content: "\f8f5"; +} +.ss-leg2.ss-inner::marker { + content: "\f8ff"; +} +.ss-pgc98::before { + content: "\f8f4"; +} +.ss-pgc98.ss-border::after { + content: "\f8f3"; +} +.ss-pgc98.ss-inner::marker { + content: "\f8ff"; +} +.ss-po::before { + content: "\f8f2"; +} +.ss-po.ss-border::after { + content: "\f8f1"; +} +.ss-po.ss-inner::marker { + content: "\f8f0"; +} +.ss-por2::before { + content: "\f8f2"; +} +.ss-por2.ss-border::after { + content: "\f8f1"; +} +.ss-por2.ss-inner::marker { + content: "\f8f0"; +} +.ss-wl::before { + content: "\f8ef"; +} +.ss-wl.ss-border::after { + content: "\f8ee"; +} +.ss-wl.ss-inner::marker { + content: "\f8ff"; +} +.ss-wth2::before { + content: "\f8ef"; +} +.ss-wth2.ss-border::after { + content: "\f8ee"; +} +.ss-wth2.ss-inner::marker { + content: "\f8ff"; +} +.ss.ss-border::after { + color: var(--border-default); + position: absolute; + left: 0; +} +.ss.ss-border.ss-rarity-common-alt::after, .ss.ss-border.ss-rarity-uncommon::after, .ss.ss-border.ss-rarity-rare::after, .ss.ss-border.ss-rarity-mythic::after, .ss.ss-border.ss-rarity-foil::after, .ss.ss-border.ss-border-black::after { + color: var(--border-contrast); +} +.ss.ss-border-white::after { + color: var(--border-default) !important; +} +.ss.ss-inner { + display: list-item; + list-style-position: inside; +} +.ss.ss-inner::before { + position: absolute; + left: 0; +} +.ss.ss-inner::marker { + color: var(--inner-default); +} +.ss.ss-inner::before, .ss.ss-inner::after, .ss.ss-inner::marker { + left: 50%; + transform: translateX(-50%); +} +.ss.ss-rarity-common::before { + color: #131417; +} +.ss.ss-rarity-common.ss-rarity-gradient::before { + background: linear-gradient(90deg, #131417 0%, #131417 50%, #131417 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-common-alt::before { + color: #fff; +} +.ss.ss-rarity-common-alt.ss-rarity-gradient::before { + background: linear-gradient(90deg, 0%, 50%, 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-uncommon::before { + color: #707883; +} +.ss.ss-rarity-uncommon.ss-rarity-gradient::before { + background: linear-gradient(90deg, #4d6572 0%, #c3dfeb 50%, #4d6572 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-rare::before { + color: #b7a066; +} +.ss.ss-rarity-rare.ss-rarity-gradient::before { + background: linear-gradient(90deg, #7f6f43 0%, #d9c287 50%, #7f6f43 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-mythic::before { + color: #bf4427; +} +.ss.ss-rarity-mythic.ss-rarity-gradient::before { + background: linear-gradient(90deg, #ac392e 0%, #eb9d3d 50%, #ac392e 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-foil::before { + color: #00afc9; +} +.ss.ss-rarity-foil.ss-rarity-gradient::before { + background: linear-gradient(135deg, #ea8d66 0%, #ea8d66 15%, #fdef8a 28%, #8bcc93 42%, #a6dced 55%, #6f75aa 68%, #e599c2 84%, #e599c2 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-fw { + width: 1.75em; + display: list-item; + list-style-position: inside; + text-align: center; +} +.ss.ss-fw:not(.ss-inner) { + list-style: none; +} +.ss.ss-fw.ss-border:not(.ss-inner)::after { + left: 50%; + transform: translateX(-50%); +} +.ss.ss-white::before, .ss.ss-white::after, .ss.ss-white::marker { + color: #fff; +} + +/*# sourceMappingURL=keyrune.css.map */ diff --git a/dist/css/keyrune.css.map b/dist/css/keyrune.css.map new file mode 100644 index 0000000..c68585f --- /dev/null +++ b/dist/css/keyrune.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../src/scss/_media.scss","../../src/scss/keyrune.scss","../../src/scss/_helpers.scss"],"names":[],"mappings":"AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;;ACLR;EACI;EACA;EACA;EAKA;EACA;EACA;;AAIJ;EAGI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;ACjCA;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;ADmDA;EACI;EACA;EACA;;AAIJ;EAMI;;AAIJ;EACI;;AAMR;EAGI;EACA;;AAGA;EACI;EACA;;AAIJ;EACI;;AAIJ;EAGI;EACA;;AAWI;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAOR;EACI;;AAEJ;EACI;EAUA;EACA;EACA;EACA;;AAMZ;EAGI;EACA;EACA;EACA;;AAGA;EACI;;AAIJ;EACI;EACA;;AAMJ;EAGI","file":"keyrune.css"} \ No newline at end of file diff --git a/dist/font/keyrune.eot b/dist/font/keyrune.eot new file mode 100644 index 0000000..1593b2d Binary files /dev/null and b/dist/font/keyrune.eot differ diff --git a/dist/font/keyrune.svg b/dist/font/keyrune.svg new file mode 100644 index 0000000..af55683 --- /dev/null +++ b/dist/font/keyrune.svg @@ -0,0 +1,136 @@ + + + + + + +{ + "fontFamily": "keyrune", + "majorVersion": 4, + "minorVersion": 0.45, + "fontURL": "https://keyrune.andrewgioia.com", + "description": "Magic: the Gathering set symbol pictographic font\nFont generated by IcoMoon.", + "copyright": "2022", + "designer": "Andrew Gioia", + "designerURL": "https://andrewgioia.com", + "license": "OFL", + "licenseURL": "https://scripts.sil.org/OFL", + "version": "Version 4.0", + "fontId": "keyrune", + "psName": "keyrune", + "subFamily": "Regular", + "fullName": "keyrune" +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/font/keyrune.ttf b/dist/font/keyrune.ttf new file mode 100644 index 0000000..c3ed197 Binary files /dev/null and b/dist/font/keyrune.ttf differ diff --git a/dist/font/keyrune.woff b/dist/font/keyrune.woff new file mode 100644 index 0000000..21e931d Binary files /dev/null and b/dist/font/keyrune.woff differ diff --git a/dist/font/keyrune.woff2 b/dist/font/keyrune.woff2 new file mode 100644 index 0000000..3f03330 Binary files /dev/null and b/dist/font/keyrune.woff2 differ diff --git a/docs/assets/css/docs.css b/docs/assets/css/docs.css new file mode 100644 index 0000000..205ea4e --- /dev/null +++ b/docs/assets/css/docs.css @@ -0,0 +1,1550 @@ +@charset "UTF-8"; +.flex { + display: flex; +} +.flex-align-center { + align-items: center; +} +.flex-align-start { + align-items: flex-start; +} +.flex-col { + flex-direction: column; +} +.flex-inline { + display: inline-flex; +} +.flex-justify-between { + justify-content: space-between; +} +.flex-justify-center { + justify-content: center; +} +.flex-justify-end { + justify-content: flex-end; +} +.flex-justify-start { + justify-content: flex-start; +} +.flex-row { + flex-direction: row; +} +.flex-shrink-0 { + flex-shrink: 0; +} +.flex-wrap { + flex-wrap: wrap; +} + +@media only screen and (min-width: 768px) { + .sm-flex-row { + flex-direction: row; + } +} +.grid { + display: grid; +} +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} +.grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} +.grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); +} +.grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); +} +.grid-gap-4 { + gap: 1rem; +} +.grid-gap-8 { + gap: 2rem; +} +.grid-gap-x-4 { + column-gap: 1rem; +} +.grid-gap-x-8 { + column-gap: 2rem; +} +.grid-gap-x-12 { + column-gap: 3rem; +} +.grid-gap-y-4 { + row-gap: 1rem; +} +.grid-gap-y-8 { + row-gap: 2rem; +} +.grid-gap-y-12 { + row-gap: 3rem; +} +.grid-span-1 { + grid-column: span 1/span 1; +} +.grid-span-2 { + grid-column: span 2/span 2; +} +.grid-span-3 { + grid-column: span 3/span 3; +} +.grid-span-4 { + grid-column: span 4/span 4; +} +.grid-span-5 { + grid-column: span 5/span 5; +} +.grid-span-6 { + grid-column: span 6/span 6; +} + +.hidden { + display: none; +} + +.m-0 { + margin: 0; +} +.mb-0 { + margin-bottom: 0; +} +.mb-1 { + margin-bottom: 0.25rem; +} +.mb-2 { + margin-bottom: 0.5rem; +} +.mb-3 { + margin-bottom: 0.75rem; +} +.mb-4 { + margin-bottom: 1rem; +} +.mb-6 { + margin-bottom: 1.5rem; +} +.mb-7 { + margin-bottom: 1.75rem; +} +.mb-8 { + margin-bottom: 2rem; +} +.mb-12 { + margin-bottom: 3rem; +} +.mb-16 { + margin-bottom: 4rem; +} +.ml-1 { + margin-left: 0.25rem; +} +.ml-2 { + margin-left: 0.5rem; +} +.ml-4 { + margin-left: 1rem; +} +.mr-1 { + margin-right: 0.25rem; +} +.mr-2 { + margin-right: 0.5rem; +} +.mr-3 { + margin-right: 0.75rem; +} +.mr-4 { + margin-right: 1rem; +} +.mr-6 { + margin-right: 1.5rem; +} +.mt-0 { + margin-top: 0; +} +.mt-1 { + margin-top: 0.25rem; +} +.mt-2 { + margin-top: 0.5rem; +} +.mt-3 { + margin-top: 0.75rem; +} +.mt-4 { + margin-top: 1rem; +} +.mt-8 { + margin-top: 2rem; +} +.mt-10 { + margin-top: 2.5rem; +} +.mt-12 { + margin-top: 3rem; +} +.mt-16 { + margin-top: 4rem; +} +.mt-20 { + margin-top: 5rem; +} +.mt-24 { + margin-top: 6rem; +} +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} +.mx-8 { + margin-left: 2rem; + margin-right: 2rem; +} +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +.my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.overflow-hidden { + overflow: hidden; +} + +.p-2 { + padding: 0.5rem; +} +.p-4 { + padding: 1rem; +} +.p-8 { + padding: 2rem; +} +.pb-2 { + padding-bottom: 0.5rem; +} +.pb-4 { + padding-bottom: 1rem; +} +.pb-6 { + padding-bottom: 1.5rem; +} +.pb-12 { + padding-bottom: 3rem; +} +.pb-16 { + padding-bottom: 4rem; +} +.pl-4 { + padding-left: 1rem; +} +.pl-8 { + padding-left: 2rem; +} +.pl-12 { + padding-left: 3rem; +} +.pr-8 { + padding-right: 2rem; +} +.pr-12 { + padding-right: 3rem; +} +.pt-1 { + padding-top: 0.25rem; +} +.pt-2 { + padding-top: 0.5rem; +} +.pt-8 { + padding-top: 2rem; +} +.pt-24 { + padding-top: 6rem; +} +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} +.px-8 { + padding-left: 2rem; + padding-right: 2rem; +} +.px-12 { + padding-left: 3rem; + padding-right: 3rem; +} +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} +.py-12 { + padding-top: 3rem; + padding-bottom: 3rem; +} + +.relative { + position: relative; +} + +.sticky { + height: 0%; + position: sticky; + top: 0; +} + +.text-center { + text-align: center; +} +.text-sm { + font-size: 0.9rem; +} +.text-white { + color: #fff; +} + +.top-px { + top: 1px; +} + +.w-4 { + width: 1rem; +} +.w-6 { + width: 1.5rem; +} +.w-1\/5 { + width: 20%; +} +.w-1\/4 { + width: 25%; +} +.w-2\/5 { + width: 40%; +} +.w-1\/2 { + width: 50%; +} +.w-3\/5 { + width: 60%; +} +.w-3\/4 { + width: 75%; +} +.w-4\/5 { + width: 80%; +} +.w-11\/12 { + width: min(91.6667%, 1440px); +} +.w-full { + width: 100%; +} +.w-wide { + width: calc(100% - 3rem); +} + +@media only screen and (min-width: 768px) { + .w-wide { + width: min(91.66667%, 1440px); + } +} +@media only screen and (min-width: 512px) { + .xs\:inline { + display: inline; + } + + .xs\:hidden { + display: none; + } +} +@media only screen and (min-width: 768px) { + .sm\:inline { + display: inline; + } + + .sm\:hidden { + display: none; + } + + .sm\:flex-row { + flex-direction: row; + } + + .sm\:w-1\/5 { + width: 20%; + } + + .sm\:w-3\/5 { + width: 60%; + } + + .sm\:w-3\/5 { + width: 60%; + } + + .sm\:list { + display: list-item; + list-style: none; + } +} +@media only screen and (min-width: 1025px) { + .md\:block { + display: block; + } + + .md\:flex { + display: flex; + } + + .md\:inline { + display: inline; + } +} +:root { + --bg-body: #fff; + --bg-hover: #f2f1f1; + --bg-content: #e0dfde; + --bg-accent: #d2d1cf; + --bg-border: #000; + --bg-button: #fff; + --bg-active: #d2d1cf; + --icon-default: #131417; + --link-default: #0060e4; + --text-default: #000; + --text-accent: #8e8d88; + --text-contrast: #fff; + --svg-border: #fff; + --rgba-fg: rgba(255,255,255,0.916667); + --rgba-modal: rgba(0, 0, 0, 0.75); +} +:root[data-mode=dark] { + --bg-body: #202124; + --bg-hover: #131417; + --bg-content: #3a3a3a; + --bg-accent: #8e8d88; + --bg-border: #575754; + --bg-button: #18191b; + --bg-active: #29c9ff; + --icon-default: #000; + --link-default: #29c9ff; + --text-default: #fff; + --text-accent: #d2d1cf; + --text-contrast: #ddd; + --svg-border: #575754; + --rgba-fg: rgba(0,0,0,0.9); + --rgba-modal: rgba(0, 0, 0, 0.5); +} + +@font-face { + font-family: "Beleren"; + src: url("../font/beleren.eot"); + src: url("../font/beleren.woff") format("woff"), url("../font/beleren.ttf") format("truetype"), url("../font/beleren.svg") format("svg"); + font-weight: normal; + font-style: normal; +} +html { + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; + font-size: 16px; +} + +body { + align-items: center; + background: var(--bg-body); + border-top: 5px solid var(--bg-border); + color: var(--text-default); + display: flex; + flex-direction: column; + margin: 0; +} + +header { + align-items: center; + display: flex; + flex-direction: row; + height: 5rem; + justify-content: space-between; + width: 100%; +} +header mark { + background: transparent; + color: var(--text-default); + flex-shrink: 0; + font-family: Beleren; + font-size: 1.5rem; + margin-left: 1.5rem; +} +header mark i { + color: var(--text-default) !important; +} +header mark b { + border: 0.1rem solid var(--text-default); + border-radius: 0.35rem; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; + font-size: 0.75rem; + font-weight: normal; + margin: 0 0 0 0.5rem; + padding: 0.2rem 0.4rem; + position: relative; + top: -0.2rem; +} +header menu { + flex-grow: 1; +} +header #toggle-nav { + position: absolute; + right: 1.5rem; + z-index: 20; +} +header #toggle-nav svg .line { + opacity: 1; + transform: rotate(0) translateY(0) translateX(0); + transform-origin: 1em 1em; + transition: transform 0.3s ease-in-out, opacity 0.2s ease-in-out; +} +header #toggle-nav svg .line.top { + transform-origin: 6px 6px; +} +header #toggle-nav svg .line.bot { + transform-origin: 3px 17px; +} +header #toggle-nav svg.closed .line.top { + transform: rotate(45deg) scale(1.1); +} +header #toggle-nav svg.closed .line.mid { + opacity: 0; +} +header #toggle-nav svg.closed .line.bot { + transform: rotate(-45deg) scale(1.1); +} +header nav { + transform: translateY(-100%); + flex-direction: column; + margin-right: 2.5rem; +} +header nav > a { + align-items: center; + color: var(--text-default); + display: flex; + margin: 0 1rem; +} +header nav > a > svg { + margin-right: 0.5rem; +} +header nav > a > span { + text-decoration: underline transparent; + transition: text-decoration 150ms ease-in-out; + -webkit-text-underline-position: from-font; + text-underline-position: under-font; +} +header nav > a:hover span { + text-decoration-color: var(--text-default); +} +header nav.mobile { + background: var(--rgba-fg); + position: fixed; + top: 0; + left: 0; + padding-top: 1rem; + padding-bottom: 2.5rem; + width: 100%; + z-index: 10; + border-radius: 0 0 2rem 2rem; + transform: translateY(0); + transition: transform 200ms ease-in-out; +} +header nav.mobile > a { + font-size: 1.75rem; + padding: 0.5rem 1rem; +} +header nav.mobile > a > span { + padding-left: 0.5rem; +} +header nav.mobile #hide-nav { + right: 0; + position: absolute; + top: 1rem; +} +header nav.mobile #mode { + margin-top: 1rem; + text-align: center; +} +header nav.mobile #mode label.toggle { + height: 2.5rem; + width: 8rem; + border-radius: 1.5rem; +} +header nav.mobile #mode label.toggle::after { + font-size: 1.33rem; + width: 3rem; + height: 2.1rem; +} +header nav.mobile #mode input.toggle:checked + label::after { + left: calc(100% - 0.25rem); +} + +@media only screen and (min-width: 768px) { + #toggle-nav { + display: none; + } + + header mark { + margin-left: 2.5rem; + } + header nav { + display: flex; + flex-direction: row; + transform: none; + } +} +main { + align-items: center; + display: flex; + flex-direction: column; + width: 100%; +} + +section { + width: 100%; +} + +article { + display: flex; + flex-direction: column; + width: min(83.3333%, 1200px); +} + +footer { + background-color: #131417; + color: #fff; + display: flex; + justify-content: center; + padding: 3rem 0; + width: 100%; +} +footer.border { + border-top: 1px solid #3a3a3a; +} +footer menu li { + margin-bottom: 0.5rem; +} +footer iframe html body { + background: var(--bg-body); +} + +#mode { + height: 2rem; +} +#mode input.toggle { + height: 0; + width: 0; + visibility: hidden; +} +#mode input.toggle:checked + label { + background: var(--bg-body); +} +#mode input.toggle:checked + label::after { + content: "\e024"; + left: calc(100% - 0.2rem); + transform: translateX(-100%); +} +#mode label.toggle { + cursor: pointer; + width: 4rem; + height: 1.75rem; + border: 2px solid var(--bg-accent); + display: inline-flex; + border-radius: 1rem; + position: relative; + transition: border-color 150ms ease-in-out; +} +#mode label.toggle:hover { + border-color: var(--text-accent); +} +#mode label.toggle::after { + content: "\e012"; + color: var(--text-default); + font-family: keyrune; + position: absolute; + display: flex; + align-items: center; + justify-content: center; + top: 0.2rem; + left: 0.2rem; + width: 1.75rem; + height: 1.35rem; + background: var(--bg-content); + border-radius: 1rem; + transition: all 300ms ease-in-out; +} +#mode label.toggle:active::after { + width: 2rem; +} + +:root[data-mode=dark] #mode label::after { + content: "\e024"; + left: calc(100% - 0.2rem); + transform: translateX(-100%); +} + +.angle-top::before { + content: ""; + display: block; + height: 4rem; + background: var(--bg-body); + position: absolute; + top: 0; + width: 100%; + clip-path: polygon(0% 0%, 100% 0, 100% 0, 0% 100%); +} + +.checkerboard { + background-image: linear-gradient(45deg, var(--bg-hover) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--bg-hover) 75%), linear-gradient(45deg, transparent 75%, var(--bg-hover) 75%), linear-gradient(45deg, var(--bg-hover) 25%, transparent 25%); + background-size: 1.5rem 1.5rem; + background-position: 0 0, 0 0, -0.75rem -0.75rem, 0.75rem 0.75rem; +} + +.bg-accent { + background-color: var(--bg-accent); +} +.bg-black { + background-color: #131417; +} +.bg-content { + background-color: var(--bg-content); +} + +h1 { + font-family: Beleren; + font-size: 3rem; + font-weight: 600; +} + +h2 { + font-size: 1.5rem; +} + +@media only screen and (min-width: 1025px) { + h2 { + font-size: 1.75rem; + } +} +h3 { + font-size: 1.25rem; + font-weight: 600; +} + +h4 { + font-family: Beleren; + font-size: 1.4rem; + font-weight: 600; +} + +h5 { + font-size: 1.1rem; + font-weight: 600; + text-transform: uppercase; +} + +p, +li, +span { + font-weight: 500; + line-height: 1.6rem; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +p > a, +li > a, +span > a { + text-decoration: underline; + -webkit-text-underline-position: from-font; + text-underline-position: from-font; +} +p > a[target=blank]::after, +li > a[target=blank]::after, +span > a[target=blank]::after { + content: "↗"; + display: inline-block; + margin-left: 0.1rem; + position: relative; + text-decoration: none; + top: 0; + transition: top 100ms ease-in-out; +} +p > a[target=blank]:hover::after, +li > a[target=blank]:hover::after, +span > a[target=blank]:hover::after { + top: -3px; +} +p.big, +li.big, +span.big { + font-size: 1.15rem; + font-weight: 400; + line-height: 1.875rem; +} + +@media only screen and (min-width: 1025px) { + p.big { + font-size: 1.3rem; + line-height: 2rem; + } +} +a, +button { + color: inherit; + text-decoration: none; +} +a.button, +button.button { + background: var(--bg-button); + border: 2px solid #000; + border-radius: 0.625rem; + box-shadow: 3px 3px 0 0 #000; + color: var(--text-default); + font-size: 1.25rem; + padding: 0.75rem 1.5rem 0.8rem; + position: relative; +} +a.button:focus, a.button:active, +button.button:focus, +button.button:active { + box-shadow: none; + top: 3px; + left: 3px; +} +a.button:hover, +button.button:hover { + background: var(--bg-hover); +} +a.bubble, +button.bubble { + position: relative; +} +a.bubble > img, +a.bubble > svg, +button.bubble > img, +button.bubble > svg { + position: relative; + z-index: 1; +} +a.bubble::before, +button.bubble::before { + content: ""; + display: block; + position: absolute; + width: calc(100% + 2rem); + height: calc(100% + 2rem); + border-radius: 1rem; + background: #202124; + top: -1rem; + left: -1rem; + z-index: 0; + transform: scale(0.5); + transition: opacity 100ms ease-in-out; + opacity: 0; +} +a.bubble:hover::before, +button.bubble:hover::before { + opacity: 1; + animation: bubble 200ms ease-in-out; + transform: scale(1); +} +a.bubble.light::before, +button.bubble.light::before { + background: var(--bg-hover); +} +@keyframes bubble { + 0% { + transform: scale(0.5); + } + 80% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} +aside { + margin-top: 1rem; + text-align: center; + width: min(91.66667%, 900px); +} +aside > p.big { + font-size: 1.2rem; + line-height: 2rem; + padding: 0 0.5rem; +} + +@media only screen and (min-width: 768px) { + aside > p.big { + font-size: 1.3rem; + padding: 0; + } +} +dialog { + background: var(--bg-content); + border: none; + border-radius: 1.5rem; + color: var(--text-default); + padding: 0; + width: calc(100% - 3rem); +} + +@media only screen and (min-width: 768px) { + dialog { + border-radius: 2rem; + width: min(91.6667%, 1440px); + } +} +#explode { + display: flex; + flex-direction: column; + margin-top: 3rem; +} +#explode > div.explode-inner { + width: 100%; +} +#explode > div.explode-text { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +@media only screen and (min-width: 1025px) { + #explode { + flex-direction: row; + margin-top: 6rem; + } + #explode > div.explode-inner { + width: 50%; + } + #explode > div.explode-text { + padding-left: 0; + padding-right: 3rem; + } +} +div.isometric { + align-self: stretch; + display: flex; + font-family: keyrune; + height: 12rem; + justify-content: center; + margin: 0; + perspective: 50rem; + position: relative; + width: 100%; +} +div.isometric svg { + position: absolute; +} +div.isometric svg.border { + z-index: 1; +} +div.isometric svg.rarity { + z-index: 2; +} +div.isometric svg.inner { + z-index: 3; +} +div.isometric.explode svg.border { + animation: explode-border 16s ease-in-out infinite; +} +div.isometric.explode svg.rarity { + animation: explode-rarity 16s ease-in-out infinite; +} +div.isometric.explode svg.inner { + animation: explode-inner 16s ease-in-out infinite; +} + +@keyframes explode-border { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(-20%) translateY(-4%) rotateY(37.5deg) scale(1); + } +} +@keyframes explode-rarity { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(2.5%) translateY(2.5%) rotateY(37.5deg) scale(1); + } +} +@keyframes explode-inner { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(25%) translateY(10%) rotateY(37.5deg) scale(1); + } +} +@media only screen and (min-width: 1025px) { + div.isometric { + height: 100%; + } +} +.feature { + grid-column: span 6/span 6; +} + +@media only screen and (min-width: 768px) { + .feature { + grid-column: span 3/span 3; + } +} +@media only screen and (min-width: 1025px) { + .feature { + grid-column: span 2/span 2; + } +} +menu { + list-style: none; + margin: 0; + padding: 0; +} +menu li { + display: flex; + margin: 0; +} +menu input[type=radio], +menu input[type=checkbox] { + height: 0; + width: 0; + visibility: hidden; + position: absolute; +} +menu label { + align-items: center; + cursor: pointer; + display: flex; + height: 3rem; + justify-content: center; + margin: 0 0.25rem; + width: 3.25rem; + background: var(--bg-button); + border: 1px solid #000; + border-radius: 0.625rem; + box-shadow: 2px 2px 0 0 #000; + position: relative; +} +menu label.small { + height: 2.5rem; + width: 2.75rem; +} +menu label:hover:not(.disabled) { + background: var(--bg-hover); +} +menu label.disabled, menu label[disabled=disabled] { + cursor: not-allowed; + opacity: 0.33; +} +menu input[type=radio]:checked + label, +menu input[type=checkbox]:checked + label, +menu label.checked { + background: var(--bg-active); + box-shadow: none; + color: #000; + top: 2px; + left: 2px; +} +menu.group#icon-rarity { + margin: 0 auto; +} +menu.group label { + margin: 0; +} +menu.group label.left { + border-radius: 0.625rem 0 0 0.625rem; +} +menu.group label.center { + border-radius: 0; +} +menu.group label.right { + border-radius: 0 0.625rem 0.625rem 0; +} + +:root[data-mode=dark] menu input#rarity_foil:checked + label svg, +:root[data-mode=dark] menu label.checked svg.foil { + fill: #000; +} +:root[data-mode=dark] menu input#rarity_common:not(:checked) + label svg { + fill: #fff; +} + +@media only screen and (min-width: 1025px) { + menu.group#icon-rarity { + margin: 0 1rem 0 0; + } +} +#icons .set-group { + display: flex; + flex-direction: column; +} +#icons .set-group-info { + background: var(--bg-content); + z-index: 20; +} +#icons .set-group-grid { + gap: 1rem; + grid-template-columns: repeat(2, minmax(0, 1fr)); + margin-bottom: 1.5rem; +} +#icons .set-group.hidden { + display: none; +} +#icons figure { + align-items: center; + background-color: var(--bg-body); + border-radius: 1rem; + cursor: pointer; + display: flex; + flex-direction: column; + justify-content: flex-start; + margin: 0; + padding: 0; + width: 100%; +} +#icons figure:hover { + background-color: var(--bg-hover); + animation: hover 200ms; +} +#icons figure > .ss { + font-size: 3rem; + margin: 1rem 0; +} +#icons figure > .ss.ss-rarity-common:not(.ss-inner)::before { + color: var(--text-default) !important; +} +#icons figure > span { + margin: 0 0.5rem 1.25rem; +} +#icons figure > span.icon-code { + display: none; +} +#icons figure > span.icon-name { + line-height: 1.33rem; +} +#icons figure.hidden { + display: none; +} +#icons[data-density=roomy] figure > span.icon-name { + text-align: center; +} +#icons[data-density=normal] div.grid { + gap: 1.5rem; + margin-bottom: 3rem; +} +#icons[data-density=normal] div.sticky { + padding-bottom: 2rem; +} +#icons[data-density=normal] figure > .ss { + font-size: 2.25rem; + margin: 1rem 0 0.75rem; +} +#icons[data-density=normal] figure > span.icon-name { + display: none; +} +#icons[data-density=normal] figure > span.icon-code { + display: inline; + margin: 0 0.5rem 1rem; +} +#icons[data-density=dense] div.grid { + gap: 1rem; + margin-bottom: 2rem; +} +#icons[data-density=dense] div.sticky { + padding-bottom: 1rem; +} +#icons[data-density=dense] figure { + flex-direction: row; +} +#icons[data-density=dense] figure > .ss { + font-size: 1.5rem; + margin: 1rem; +} +#icons[data-density=dense] figure > span.icon-name { + display: none; +} +#icons[data-density=dense] figure > span.icon-code { + display: inline; + margin: 1rem 1rem 1rem 0; +} + +@keyframes hover { + 0% { + background-color: var(--bg-body); + } + 100% { + background-color: var(--bg-hover); + } +} +@media only screen and (min-width: 1025px) { + #icons .set-group { + flex-direction: row; + } + #icons .set-group-info { + width: 20%; + padding-bottom: 3rem; + } + #icons .set-group-icons { + width: 80%; + } + #icons .set-group-grid { + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 2rem; + margin-bottom: 4rem; + } +} +:root[data-mode=dark] #icons figure .ss.ss-rarity-common.ss-inner::before { + color: #000 !important; +} +:root[data-mode=dark] #icons figure .ss.ss-rarity-common.ss-border:not(.ss-inner)::after { + color: #000 !important; +} + +form .input-wrapper svg { + position: absolute; + top: 1.25rem; +} +form .input-wrapper svg.search { + left: 1.5rem; +} +form .input-wrapper svg.clear { + cursor: pointer; + right: 8.5rem; +} +form input[type=text] { + align-self: stretch; + background: var(--bg-body); + border: 0.15rem solid var(--text-default); + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover); + height: 3.6rem; + border-radius: 2rem; + color: var(--text-default); + font-size: 1.25rem; + padding: 0 2rem 0 3.5rem; + width: calc(100% - 5.5rem); +} +form input[type=text]::placeholder { + color: var(--bg-accent); + font-size: 1.25rem; +} +form input[type=text]:focus { + outline: none; + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover), 0 0 0 1px var(--bg-body), 0 0 0 0.25rem #29c9ff; +} +form button.button { + border-color: var(--text-default); + border-radius: 0 2rem 2rem 0; + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover); + cursor: pointer; + height: 100%; + padding-right: 1.75rem; + position: absolute; + top: 0; + right: 0; +} +form button.button:active, form button.button:focus { + left: auto; + top: 0; + right: 0; + box-shadow: inset 0 0.25rem 0 0 var(--bg-content); +} +form .search-left { + width: 100%; + text-align: center; +} + +@media only screen and (min-width: 769px) { + form .search-left { + width: auto; + text-align: left; + padding-left: 2rem; + } +} +object { + width: 100vw; + height: 100vh; + padding: 0; + margin: 0; + position: fixed; + top: 0; + left: 0; + background: var(--rgba-modal); + display: flex; + align-items: center; + justify-content: center; + visibility: hidden; + transition: visibility 200ms ease-in-out; + z-index: 100; +} +object details { + background: var(--rgba-fg); + box-shadow: 0 0 12rem 0 var(--icon-default); + display: flex; + flex-direction: column; + border-radius: 1.5rem; + position: relative; + opacity: 0; + transform: scale(1.1) translateY(0); + transition: opacity 200ms ease-in-out, transform 200ms ease-in-out; + overflow: hidden; + width: 91.66667vw; +} +object details summary { + display: none; + pointer-events: none; +} +object details .details { + display: flex; + flex-direction: column; +} +object details .close { + position: absolute; + top: 1.5rem; + right: 1.2rem; + z-index: 10; +} +object details .icon { + background-color: var(--bg-body); + align-items: center; + display: flex; + justify-content: space-between; + padding: 2rem 0.5rem 1rem; +} +object details .icon i.ss { + color: var(--text-default); + font-size: 8em; + line-height: 1.75ex; + padding-bottom: 1.5rem; +} +object details .icon i.ss.ss-rarity-common:not(.ss-inner)::before { + color: var(--text-default) !important; +} +object details .icon-controls { + display: none; +} +object details h3 { + background: #f4d4e9; + color: #df3ea2; + border: 1px solid #ed73be; + display: inline-flex; + align-self: flex-start; + padding: 2px 5px; + border-radius: 0.33rem; +} +object details .table { + justify-content: space-between; + font-size: 1.1rem; +} +object details .table label { + font-size: 1rem; + font-weight: bold; + margin-bottom: 0.25rem; + text-transform: uppercase; +} +object details .table label.aliases { + margin-bottom: 0.1rem; +} +object details .table .class, +object details .table .rarity, +object details .table .border, +object details .table .inner, +object details .table .aliases > span { + font-family: monospace; +} +object details .table ul.glyphs { + list-style: none; + margin: 0; + padding: 0; +} +object details .table ul.glyphs li { + align-items: center; + display: flex; + flex-direction: row; + justify-content: flex-start; +} +object details .table ul.glyphs li i { + font-family: keyrune; + font-style: normal; + text-align: center; + width: 1.75em; +} +object details .table ul.glyphs li.false { + display: none; +} +object details .table ul.glyphs i { + font-size: 1.2rem; + width: 1.75em; +} +object details .table ul.glyphs i::before, object details .table ul.glyphs i::after, object details .table ul.glyphs i::marker { + color: var(--text-default); +} +object details .table table.aliases { + border-spacing: 0; + width: 100%; +} +object details .table table.aliases td.code { + font-family: monospace; + font-size: 1rem; + padding-right: 0.5rem; +} +object details .table table.aliases td.set { + font-size: 1rem; + position: relative; + width: 100%; +} +object details .table table.aliases td.set::before { + content: " "; + visibility: hidden; +} +object details .table table.aliases td.set span { + position: absolute; + left: 0; + right: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +object details .table .actions { + display: none; +} +object details .table .actions a.action-button { + position: relative; +} +object details .table .actions a.action-button span { + text-decoration: underline transparent; + transition: text-decoration 150ms ease-in-out; + -webkit-text-underline-position: from-font; + text-underline-position: under-font; +} +object details .table .actions a.action-button:hover span { + text-decoration-color: var(--text-default); +} +object details .table .actions a.action-button em { + font-style: normal; + display: flex; + width: auto; + margin: 0 auto; + background: var(--text-default); + position: absolute; + top: 0; + left: 50%; + white-space: nowrap; + min-height: 1.5rem; + color: var(--bg-body); + transform: translateX(-50%) translateY(-50%); + margin-top: -1rem; + opacity: 0; + font-size: 1rem; + padding: 0.25rem 0.75rem; + align-items: center; + justify-content: center; + border-radius: 0.5rem; +} +object details .tags { + display: flex; + font-size: 0.9rem; + margin-left: -2px; + padding: 0.5rem 0 0; +} +object details .tags a { + background: var(--text-default); + border-radius: 2rem; + color: var(--bg-body); + margin: 0 0.5rem 0 0; + padding: 0.25rem 1rem 0.3rem; +} +object details .tags a.card { + position: relative; + padding-left: 40px; +} +object details .tags a.card::before { + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0' y='0' width='25.2' height='36' viewBox='0 0 70 100'%3E%3Cg id='Layer_1'%3E%3Cpath d='M10 0 L60 0 C65.523 0 70 4.477 70 10 L70 90 C70 95.523 65.523 100 60 100 L10 100 C4.477 100 0 95.523 0 90 L0 10 C0 4.477 4.477 0 10 0 z' fill='%23191511'/%3E%3Cpath d='M9.638 5.533 L60.362 5.533 C62.572 5.533 64.362 7.375 64.362 9.648 L64.362 90.353 C64.362 92.625 62.572 94.467 60.362 94.467 L9.638 94.467 C7.428 94.467 5.638 92.625 5.638 90.353 L5.638 9.648 C5.638 7.375 7.428 5.533 9.638 5.533 z' fill='%2351765C'/%3E%3Cpath d='M11.5 57.388 L58.5 57.388 L58.5 88.388 L11.5 88.388 L11.5 57.388 z' fill='%23B89A82'/%3E%3Cpath d='M11.5 23.798 L58.5 23.798 L58.5 50.464 L11.5 50.464 L11.5 23.798 z' fill='%2362A5C0'/%3E%3Cpath d='M23.002 37.274 C22.158 35.902 19.11 32.575 19.693 29.21 C25.668 37.92 34.696 38.018 44.438 37.62 C41.357 38.74 37.543 40.962 33.44 40.532 C31.004 44.713 28.025 42.796 23.736 42.796 C21.054 43.974 17.834 43.413 14.841 43.605 C16.593 43.381 17.422 41.732 18.853 41.107 C20.734 40.285 23.163 40.39 25.191 39.399' fill='%23B54048'/%3E%3Cpath d='M31.826 38.669 C30.084 38.669 28.672 37.656 28.672 36.407 C28.672 35.159 30.084 34.146 31.826 34.146 C33.568 34.146 34.98 35.159 34.98 36.407 C34.98 37.656 33.568 38.669 31.826 38.669 z' fill='%23B54048'/%3E%3Cpath d='M11.5 10.798 L58.5 10.798 L58.5 23.798 L11.5 23.798 L11.5 10.798 z' fill='%2380C2DD'/%3E%3Cpath d='M44.78 18.389 C-26.121 27.703 92.917 29.765 45.03 18.389' fill='%2335666C'/%3E%3C/g%3E%3C/svg%3E"); + content: ""; + display: block; + width: 25.2px; + height: 36px; + position: absolute; + top: 0; + left: 0; + transition: transform 150ms ease-in-out; + transform: rotate(-20deg) translateY(-3px) translateX(6px); +} +object details .tags a.card:hover::before { + transform: rotate(-30deg) translateY(-3px) translateX(6px) scale(1.04); +} +object.active { + visibility: visible; +} +object.active details { + opacity: 1; + transform: scale(1) translateY(-3rem); +} + +@keyframes fadeup { + 0% { + opacity: 0; + transform: translateX(-50%) translateY(-50%); + } + 30%, 70% { + opacity: 1; + transform: translateX(-50%) translateY(-75%); + } + 100% { + opacity: 0; + transform: translateX(-50%) translateY(-120%); + } +} +@media only screen and (min-width: 1025px) { + object details { + width: calc(896px + 2rem); + } + object details .details { + flex-direction: row; + min-width: 50%; + } + object details .icon { + width: 448px; + } + object details .icon i.ss { + font-size: 16em; + } + object details .icon-controls { + display: flex; + padding: 0 0 2rem; + } + object details .table .actions { + display: flex; + } +} + +/*# sourceMappingURL=docs.css.map */ diff --git a/docs/assets/css/docs.css.map b/docs/assets/css/docs.css.map new file mode 100644 index 0000000..43a7c07 --- /dev/null +++ b/docs/assets/css/docs.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../resources/scss/_utils.scss","../../../resources/scss/_layout.scss","../../../resources/scss/_type.scss","../../../resources/scss/_home.scss","../../../resources/scss/_sets.scss"],"names":[],"mappings":";AAAA;EACI;;AAGI;EAAW;;AACX;EAAU;;AAGd;EACI;;AAGJ;EACI;;AAIA;EAAY;;AACZ;EAAW;;AACX;EAAQ;;AACR;EAAU;;AAGd;EACI;;AAIA;EAAM;;AAGV;EACI;;;AAGR;EACI;IAAe;;;AAGnB;EACI;;AAGI;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAKJ;EAAM;;AACN;EAAM;;AAEF;EAAM;;AACN;EAAM;;AACN;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAO;;AAKX;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;;AAId;EACI;;;AAIA;EAAM;;AAEF;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AACP;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAM;;AAGN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AAGN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AACP;EAAO;;AACP;EAAO;;AACP;EAAO;;AACP;EAAO;;AAGP;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAIJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAMR;EACI;;;AAKJ;EAAM;;AACN;EAAM;;AACN;EAAM;;AAEF;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AACP;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAO;;AAGP;EAAM;;AACN;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AAGP;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAIJ;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAKZ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAIA;EAAW;;AACX;EAAO;;AACP;EAAU;;;AAIV;EAAO;;;AAIP;EAAM;;AACN;EAAM;;AACN;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAW;;AACX;EAAS;;AACT;EACI;;;AAGR;EACI;IACI;;;AAOR;EACI;IACI;;;EAEJ;IACI;;;AAIR;EACI;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;IACA;;;AAIR;EACI;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;AC/RR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EAGA;EAEA;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;;AAGI;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAMhB;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAGR;EACI;;;AAMpB;EACI;IACI;;;EAGA;IACI;;EAEJ;IACI;IACA;IACA;;;AAKZ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAIA;EACI;;AAIR;EACI;;;AAOR;EACI;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;AAEA;EACI;EACA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAKR;EACI;EACA;EACA;;;AASA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKZ;EACI,kBACI;EAIJ;EACA;;;AAIA;EAAW;;AACX;EAAU;;AACV;EAAY;;;ACxYhB;EACI;EACA;EACA;;;AAGJ;EACI;;;AAEJ;EACI;IACI;;;AAIR;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACI;EACA;EACA;;AAGI;AAAA;AAAA;EACI;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEJ;AAAA;AAAA;EACI;;AAKZ;AAAA;AAAA;EACI;EACA;EACA;;;AAGR;EACI;IACI;IACA;;;AAIR;AAAA;EAEI;EACA;;AAEA;AAAA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;EAEI;EACA;EACA;;AAGJ;AAAA;EACI;;AAIR;AAAA;EACI;;AAEA;AAAA;AAAA;AAAA;EAEI;EACA;;AAGJ;AAAA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;AAAA;EACI;EACA;EACA;;AAIA;AAAA;EACI;;AAQhB;EACI;IACI;;EAEJ;IACI;;EAEJ;IACI;;;ACxJR;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;;AAGR;EACI;IACI;IACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;IACI;IACA;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;;AAGR;EACI;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;;;AAQZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAKJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;;AAIZ;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;;AAOR;EACI;;;AAEJ;EACI;IAAW;;;AAEf;EACI;IAAW;;;AC5If;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGJ;EAEI;EACA;;AAIR;AAAA;AAAA;EAGI;EACA;EACA;EACA;EACA;;AAKA;EACI;;AAGJ;EACI;;AAEA;EACI;;AAEJ;EACI;;AAEJ;EACI;;;AAMZ;AAAA;EAEI;;AAEJ;EACI;;;AAGR;EACI;IACI;;;AAUA;EACI;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAKJ;EACI;;AAKJ;EACI;EACA;;AAEJ;EACI;;AAGA;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;AAMR;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;;AACA;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;;AAKhB;EACI;IACI;;EAEJ;IACI;;;AAGR;EAEQ;IACI;;EAEA;IACI;IACA;;EAEJ;IACI;;EAEJ;IACI;IACA;IACA;;;AAOZ;EACI;;AAEJ;EACI;;;AAUA;EACI;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;;AAMR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEI;EACA;EACA;EACA;;AAIR;EACI;EACA;;;AAGR;EACI;IACI;IACA;IACA;;;AAOR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EAEA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAIR;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAIR;AAAA;AAAA;AAAA;AAAA;EAKI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;;AAEA;EAGI;;AAKZ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAMZ;EACI;;AAEA;EACI;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMhB;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAQpB;EACI;;AAEA;EACI;EACA;;;AAIZ;EACI;IACI;IACA;;EAEJ;IACI;IACA;;EAEJ;IACI;IACA;;;AAGR;EACI;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;;EAEA;IACI;;EAGJ;IACI;IACA;;EAKJ;IACI","file":"docs.css"} \ No newline at end of file diff --git a/docs/assets/css/keyrune.css b/docs/assets/css/keyrune.css new file mode 100644 index 0000000..2e3dd16 --- /dev/null +++ b/docs/assets/css/keyrune.css @@ -0,0 +1,598 @@ +:root { + --border-default: #fff; + --border-contrast: #131417; + --rarity-default: #131417; + --inner-default: #fff; +} +:root[data-mode=dark] { + --border-default: #ddd; + --border-contrast: #000; + --rarity-default: #000; + --inner-default: #fff; +} + +@font-face { + font-family: "keyrune"; + src: url("../font/keyrune.eot?4.0.38"); + src: url("../font/keyrune.eot?4.0.38#iefix") format("embedded-opentype"), url("../font/keyrune.woff2?4.0.38") format("woff2"), url("../font/keyrune.ttf?4.0.38") format("truetype"), url("../font/keyrune.woff?4.0.38") format("woff"), url("../font/keyrune.svg?4.0.38#keyrune") format("svg"); + font-weight: normal; + font-style: normal; + font-display: block; +} +.ss { + font-family: "keyrune" !important; + color: var(--icon-default); + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + position: relative; + text-transform: none; + line-height: 1; + display: inline-flex; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.ss-lea::before { + content: "\e000"; +} +.ss-lea.ss-border::after { + content: "\e001"; +} +.ss-lea.ss-inner::marker { + content: "\e002"; +} +.ss-leb::before { + content: "\e003"; +} +.ss-leb.ss-border::after { + content: "\e004"; +} +.ss-leb.ss-inner::marker { + content: "\e005"; +} +.ss-2ed::before { + content: "\e006"; +} +.ss-2ed.ss-border::after { + content: "\e007"; +} +.ss-2ed.ss-inner::marker { + content: "\e008"; +} +.ss-ced::before { + content: "\e009"; +} +.ss-ced.ss-border::after { + content: "\e00a"; +} +.ss-ced.ss-inner::marker { + content: "\e00b"; +} +.ss-cei::before { + content: "\e00c"; +} +.ss-cei.ss-border::after { + content: "\e00d"; +} +.ss-cei.ss-inner::marker { + content: "\e00e"; +} +.ss-arn::before { + content: "\e00f"; +} +.ss-arn.ss-border::after { + content: "\e010"; +} +.ss-arn.ss-inner::marker { + content: "\e011"; +} +.ss-atq::before { + content: "\e012"; +} +.ss-atq.ss-border::after { + content: "\e013"; +} +.ss-atq.ss-inner::marker { + content: "\f8ff"; +} +.ss-3ed::before { + content: "\e015"; +} +.ss-3ed.ss-border::after { + content: "\e016"; +} +.ss-3ed.ss-inner::marker { + content: "\e017"; +} +.ss-fbb::before { + content: "\e018"; +} +.ss-fbb.ss-border::after { + content: "\e019"; +} +.ss-fbb.ss-inner::marker { + content: "\e01a"; +} +.ss-leg::before { + content: "\e01b"; +} +.ss-leg.ss-border::after { + content: "\e01c"; +} +.ss-leg.ss-inner::marker { + content: "\e01d"; +} +.ss-sum::before { + content: "\e01e"; +} +.ss-sum.ss-border::after { + content: "\e01f"; +} +.ss-sum.ss-inner::marker { + content: "\f8ff"; +} +.ss-pdrc::before { + content: "\e021"; +} +.ss-pdrc.ss-border::after { + content: "\e022"; +} +.ss-pdrc.ss-inner::marker { + content: "\f8ff"; +} +.ss-drk::before { + content: "\e024"; +} +.ss-drk.ss-border::after { + content: "\e025"; +} +.ss-drk.ss-inner::marker { + content: "\f8ff"; +} +.ss-phpr::before { + content: "\e027"; +} +.ss-phpr.ss-border::after { + content: "\e028"; +} +.ss-phpr.ss-inner::marker { + content: "\f8ff"; +} +.ss-fem::before { + content: "\e02a"; +} +.ss-fem.ss-border::after { + content: "\e02b"; +} +.ss-fem.ss-inner::marker { + content: "\f8ff"; +} +.ss-pmei::before { + content: "\e02d"; +} +.ss-pmei.ss-border::after { + content: "\e02e"; +} +.ss-pmei.ss-inner::marker { + content: "\f8ff"; +} +.ss-pleaf::before { + content: "\e02d"; +} +.ss-pleaf.ss-border::after { + content: "\e02e"; +} +.ss-pleaf.ss-inner::marker { + content: "\f8ff"; +} +.ss-pmtg::before { + content: "\e030"; +} +.ss-pmtg.ss-border::after { + content: "\e031"; +} +.ss-pmtg.ss-inner::marker { + content: "\f8ff"; +} +.ss-plgm::before { + content: "\e030"; +} +.ss-plgm.ss-border::after { + content: "\e031"; +} +.ss-plgm.ss-inner::marker { + content: "\f8ff"; +} +.ss-parl::before { + content: "\e030"; +} +.ss-parl.ss-border::after { + content: "\e031"; +} +.ss-parl.ss-inner::marker { + content: "\f8ff"; +} +.ss-4ed::before { + content: "\e033"; +} +.ss-4ed.ss-border::after { + content: "\e034"; +} +.ss-4ed.ss-inner::marker { + content: "\f8ff"; +} +.ss-4bb::before { + content: "\e036"; +} +.ss-4bb.ss-border::after { + content: "\e037"; +} +.ss-4bb.ss-inner::marker { + content: "\f8ff"; +} +.ss-ice::before { + content: "\e039"; +} +.ss-ice.ss-border::after { + content: "\e03a"; +} +.ss-ice.ss-inner::marker { + content: "\e03b"; +} +.ss-chr::before { + content: "\e03c"; +} +.ss-chr.ss-border::after { + content: "\e03d"; +} +.ss-chr.ss-inner::marker { + content: "\f8ff"; +} +.ss-ren::before { + content: "\e03f"; +} +.ss-ren.ss-border::after { + content: "\e040"; +} +.ss-ren.ss-inner::marker { + content: "\f8ff"; +} +.ss-rin::before { + content: "\e042"; +} +.ss-rin.ss-border::after { + content: "\e043"; +} +.ss-rin.ss-inner::marker { + content: "\f8ff"; +} +.ss-hml::before { + content: "\e045"; +} +.ss-hml.ss-border::after { + content: "\e046"; +} +.ss-hml.ss-inner::marker { + content: "\e047"; +} +.ss-all::before { + content: "\e048"; +} +.ss-all.ss-border::after { + content: "\e049"; +} +.ss-all.ss-inner::marker { + content: "\e04a"; +} +.ss-mir::before { + content: "\e04b"; +} +.ss-mir.ss-border::after { + content: "\e04c"; +} +.ss-mir.ss-inner::marker { + content: "\f8ff"; +} +.ss-itp::before { + content: "\e04e"; +} +.ss-itp.ss-border::after { + content: "\e04f"; +} +.ss-itp.ss-inner::marker { + content: "\f8ff"; +} +.ss-vis::before { + content: "\e051"; +} +.ss-vis.ss-border::after { + content: "\e052"; +} +.ss-vis.ss-inner::marker { + content: "\e053"; +} +.ss-5ed::before { + content: "\e054"; +} +.ss-5ed.ss-border::after { + content: "\e055"; +} +.ss-5ed.ss-inner::marker { + content: "\f8ff"; +} +.ss-past::before { + content: "\e057"; +} +.ss-past.ss-border::after { + content: "\e058"; +} +.ss-past.ss-inner::marker { + content: "\f8ff"; +} +.ss-por::before { + content: "\e05a"; +} +.ss-por.ss-border::after { + content: "\e05b"; +} +.ss-por.ss-inner::marker { + content: "\e05c"; +} +.ss-pvan::before { + content: "\e05d"; +} +.ss-pvan.ss-border::after { + content: "\e05e"; +} +.ss-pvan.ss-inner::marker { + content: "\f8ff"; +} +.ss-van::before { + content: "\e05d"; +} +.ss-van.ss-border::after { + content: "\e05e"; +} +.ss-van.ss-inner::marker { + content: "\f8ff"; +} +.ss-wth::before { + content: "\e060"; +} +.ss-wth.ss-border::after { + content: "\e061"; +} +.ss-wth.ss-inner::marker { + content: "\e062"; +} +.ss-tmp::before { + content: "\e063"; +} +.ss-tmp.ss-border::after { + content: "\e064"; +} +.ss-tmp.ss-inner::marker { + content: "\f8ff"; +} +.ss-sth::before { + content: "\e066"; +} +.ss-sth.ss-border::after { + content: "\e067"; +} +.ss-sth.ss-inner::marker { + content: "\f8ff"; +} +.ss-exo::before { + content: "\e069"; +} +.ss-exo.ss-border::after { + content: "\e06a"; +} +.ss-exo.ss-inner::marker { + content: "\f8ff"; +} +.ss-p02::before { + content: "\e06c"; +} +.ss-p02.ss-border::after { + content: "\e06d"; +} +.ss-p02.ss-inner::marker { + content: "\f8ff"; +} +.ss-ugl::before { + content: "\e06f"; +} +.ss-ugl.ss-border::after { + content: "\e070"; +} +.ss-ugl.ss-inner::marker { + content: "\f8ff"; +} +.ss-palp::before { + content: "\e072"; +} +.ss-palp.ss-border::after { + content: "\e073"; +} +.ss-palp.ss-inner::marker { + content: "\f8ff"; +} +.ss-6ed::before { + content: "\e07e"; +} +.ss-6ed.ss-border::after { + content: "\e07f"; +} +.ss-6ed.ss-inner::marker { + content: "\f8ff"; +} +.ss-legchr::before { + content: "\f8f6"; +} +.ss-legchr.ss-border::after { + content: "\f8f5"; +} +.ss-legchr.ss-inner::marker { + content: "\f8ff"; +} +.ss-leg2::before { + content: "\f8f6"; +} +.ss-leg2.ss-border::after { + content: "\f8f5"; +} +.ss-leg2.ss-inner::marker { + content: "\f8ff"; +} +.ss-pgc98::before { + content: "\f8f4"; +} +.ss-pgc98.ss-border::after { + content: "\f8f3"; +} +.ss-pgc98.ss-inner::marker { + content: "\f8ff"; +} +.ss-po::before { + content: "\f8f2"; +} +.ss-po.ss-border::after { + content: "\f8f1"; +} +.ss-po.ss-inner::marker { + content: "\f8f0"; +} +.ss-por2::before { + content: "\f8f2"; +} +.ss-por2.ss-border::after { + content: "\f8f1"; +} +.ss-por2.ss-inner::marker { + content: "\f8f0"; +} +.ss-wl::before { + content: "\f8ef"; +} +.ss-wl.ss-border::after { + content: "\f8ee"; +} +.ss-wl.ss-inner::marker { + content: "\f8ff"; +} +.ss-wth2::before { + content: "\f8ef"; +} +.ss-wth2.ss-border::after { + content: "\f8ee"; +} +.ss-wth2.ss-inner::marker { + content: "\f8ff"; +} +.ss.ss-border::after { + color: var(--border-default); + position: absolute; + left: 0; +} +.ss.ss-border.ss-rarity-common-alt::after, .ss.ss-border.ss-rarity-uncommon::after, .ss.ss-border.ss-rarity-rare::after, .ss.ss-border.ss-rarity-mythic::after, .ss.ss-border.ss-rarity-foil::after, .ss.ss-border.ss-border-black::after { + color: var(--border-contrast); +} +.ss.ss-border-white::after { + color: var(--border-default) !important; +} +.ss.ss-inner { + display: list-item; + list-style-position: inside; +} +.ss.ss-inner::before { + position: absolute; + left: 0; +} +.ss.ss-inner::marker { + color: var(--inner-default); +} +.ss.ss-inner::before, .ss.ss-inner::after, .ss.ss-inner::marker { + left: 50%; + transform: translateX(-50%); +} +.ss.ss-rarity-common::before { + color: #131417; +} +.ss.ss-rarity-common.ss-rarity-gradient::before { + background: linear-gradient(90deg, #131417 0%, #131417 50%, #131417 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-common-alt::before { + color: #fff; +} +.ss.ss-rarity-common-alt.ss-rarity-gradient::before { + background: linear-gradient(90deg, 0%, 50%, 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-uncommon::before { + color: #707883; +} +.ss.ss-rarity-uncommon.ss-rarity-gradient::before { + background: linear-gradient(90deg, #4d6572 0%, #c3dfeb 50%, #4d6572 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-rare::before { + color: #b7a066; +} +.ss.ss-rarity-rare.ss-rarity-gradient::before { + background: linear-gradient(90deg, #7f6f43 0%, #d9c287 50%, #7f6f43 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-mythic::before { + color: #bf4427; +} +.ss.ss-rarity-mythic.ss-rarity-gradient::before { + background: linear-gradient(90deg, #ac392e 0%, #eb9d3d 50%, #ac392e 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-rarity-foil::before { + color: #00afc9; +} +.ss.ss-rarity-foil.ss-rarity-gradient::before { + background: linear-gradient(135deg, #ea8d66 0%, #ea8d66 15%, #fdef8a 28%, #8bcc93 42%, #a6dced 55%, #6f75aa 68%, #e599c2 84%, #e599c2 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.ss.ss-fw { + width: 1.75em; + display: list-item; + list-style-position: inside; + text-align: center; +} +.ss.ss-fw:not(.ss-inner) { + list-style: none; +} +.ss.ss-fw.ss-border:not(.ss-inner)::after { + left: 50%; + transform: translateX(-50%); +} +.ss.ss-white::before, .ss.ss-white::after, .ss.ss-white::marker { + color: #fff; +} + +/*# sourceMappingURL=keyrune.css.map */ diff --git a/docs/assets/css/keyrune.css.map b/docs/assets/css/keyrune.css.map new file mode 100644 index 0000000..c68585f --- /dev/null +++ b/docs/assets/css/keyrune.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../src/scss/_media.scss","../../src/scss/keyrune.scss","../../src/scss/_helpers.scss"],"names":[],"mappings":"AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;;ACLR;EACI;EACA;EACA;EAKA;EACA;EACA;;AAIJ;EAGI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;ACjCA;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;AAVR;EACI;;AAGA;EACI;;AAIJ;EACI;;ADmDA;EACI;EACA;EACA;;AAIJ;EAMI;;AAIJ;EACI;;AAMR;EAGI;EACA;;AAGA;EACI;EACA;;AAIJ;EACI;;AAIJ;EAGI;EACA;;AAWI;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAbJ;EACI;;AAGJ;EACI;EAKA;EACA;EACA;EACA;;AAOR;EACI;;AAEJ;EACI;EAUA;EACA;EACA;EACA;;AAMZ;EAGI;EACA;EACA;EACA;;AAGA;EACI;;AAIJ;EACI;EACA;;AAMJ;EAGI","file":"keyrune.css"} \ No newline at end of file diff --git a/docs/assets/font/beleren.eot b/docs/assets/font/beleren.eot new file mode 100755 index 0000000..11f41cc Binary files /dev/null and b/docs/assets/font/beleren.eot differ diff --git a/docs/assets/font/beleren.otf b/docs/assets/font/beleren.otf new file mode 100755 index 0000000..d4105a2 Binary files /dev/null and b/docs/assets/font/beleren.otf differ diff --git a/docs/assets/font/beleren.svg b/docs/assets/font/beleren.svg new file mode 100755 index 0000000..84c1bb5 --- /dev/null +++ b/docs/assets/font/beleren.svg @@ -0,0 +1,3634 @@ + + + + +Created by FontForge 20090914 at Wed Mar 11 16:33:40 2015 + By www-data +Copyright (c) 2013 Wizards of the Coast, a Hasbro Subsidiary. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/font/beleren.ttf b/docs/assets/font/beleren.ttf new file mode 100755 index 0000000..7dd1bff Binary files /dev/null and b/docs/assets/font/beleren.ttf differ diff --git a/docs/assets/font/beleren.woff b/docs/assets/font/beleren.woff new file mode 100755 index 0000000..e2f1f32 Binary files /dev/null and b/docs/assets/font/beleren.woff differ diff --git a/docs/assets/font/keyrune.woff b/docs/assets/font/keyrune.woff new file mode 100644 index 0000000..21e931d Binary files /dev/null and b/docs/assets/font/keyrune.woff differ diff --git a/docs/assets/font/keyrune.woff2 b/docs/assets/font/keyrune.woff2 new file mode 100644 index 0000000..3f03330 Binary files /dev/null and b/docs/assets/font/keyrune.woff2 differ diff --git a/docs/assets/js/first.js b/docs/assets/js/first.js new file mode 100644 index 0000000..caf459b --- /dev/null +++ b/docs/assets/js/first.js @@ -0,0 +1,5 @@ +(function () { + var mode = localStorage.getItem("mode"); + if (mode === "dark") document.documentElement.dataset.mode = 'dark'; + else if (mode === "light") document.documentElement.dataset.mode = 'light'; +})(); \ No newline at end of file diff --git a/docs/assets/js/glitz.js b/docs/assets/js/glitz.js new file mode 100644 index 0000000..2b3fc06 --- /dev/null +++ b/docs/assets/js/glitz.js @@ -0,0 +1,316 @@ +// +// toggle non-rarity classes for icon instances on icons page + +function iconsToggleClass(classnames, label, off) { + if (off) { + $('#icons i.ss').each(function(index, icon) { + $(icon).removeClass(classnames); + }); + $('details div.icon i').removeClass(classnames); + $('#preview-extras-modal label[for="extras_'+label+'"]').removeClass('checked'); + } else { + $('#icons i.ss').each(function(index, icon) { + $(icon).toggleClass(classnames); + }); + $('details div.icon i').toggleClass(classnames); + $('#preview-extras-modal label[for="extras_'+label+'"]').toggleClass('checked'); + } +} + +// +// rarity toggle handling on icons page + +function iconsChangeRarity(rarity) { + // change each icon in the results + $('#icons i.ss').each(function(index, icon) { + $(icon).removeClass('ss-rarity-common ss-rarity-uncommon ss-rarity-rare ss-rarity-mythic ss-rarity-foil'); + $(icon).addClass('ss-rarity-'+rarity); + }); + // change the modal + $('#icon-rarity-modal label').removeClass('checked'); + $('#icon-rarity-modal label[for="rarity_'+rarity+'"]').addClass('checked'); + $('details div.icon i').removeClass('ss-rarity-common ss-rarity-uncommon ss-rarity-rare ss-rarity-mythic ss-rarity-foil'); + $('details div.icon i').addClass('ss-rarity-'+rarity); + // for commons, disable the gradient + if (rarity == "common") { + $('#extras_gradient').attr('disabled', 'disabled').prop('checked', false); + $('label[for="extras_gradient"]').attr('disabled', 'disabled').addClass('disabled'); + iconsToggleClass('ss-rarity-gradient', 'gradient', true); + } else { + $('#extras_gradient').attr('disabled', null); + $('label[for="extras_gradient"]').attr('disabled', null).removeClass('disabled'); + } +} + +// +// get the current values of all icon page menu items + +function getIconDisplaySettings() { + let classes = ''; + classes += $('#icon-rarity input:checked').data('class'); + $('#icon-extras input:checked').each(function(index, extra) { + classes += ' '+$(extra).data('class'); + }); + return classes; +} + +// +// icon search filtering + +function filterIcons(q) { + + // define some empty variables + let code = ''; + let tags = Object; + let group = ''; + let parent = ''; + + // set the URL to show the param + if (q.length > 0) { + window.history.replaceState({'q':q,}, "Set icon search results", '?q='+q); + $('#search svg.clear').removeClass('hidden'); + } else { + window.history.replaceState({'q':'',}, "Set icons", '/sets'); + $('#search svg.clear').addClass('hidden'); + } + + // iterate over each icon and show/hide along with its parent group + $('#icons figure').each(function() { + code = $(this).data('code'); + tags = $(this).data('tags'); + group = $(this).data('order'); + parent = $('.set-group[data-id="'+group+'"]'); + + // show/hide icons based on query index + if (code.indexOf(q) >= 0 || Object.values(tags).indexOf(q) >= 0) { + $(this).removeClass('hidden'); + } else { + $(this).addClass('hidden'); + } + + // poll for group's non-hidden count and hide it if there are none + if (parent.children().children().children('figure:not(.hidden)').length == 0) { + parent.addClass('hidden'); + } else { + parent.removeClass('hidden'); + } + }); + + // if there are 0 results, show something + if ($('#icons .set-group:not(.hidden)').length == 0) { + $('#search-empty').removeClass('hidden'); + } else { + $('#search-empty').addClass('hidden'); + } +} + +function outputAliases(aliases) { + let html = ''; + aliases.forEach(function(alias, index) { + html += ''; + }); + return html+'
'+alias.code+''+alias.name+'
'; +} + +// +// icons page modal handling + +function openModal(icon) { + + // get the data vars from the figure that was clicked + let code = icon.data('code'); + let name = icon.data('name'); + let tags = icon.data('tags'); + let tagp = ''; + let tagc = ''; + let group = icon.data('group'); + let rarity = (icon.data('rarity')) ? icon.data('rarity') : 'n/a'; + let border = (icon.data('border')) ? icon.data('border') : 'n/a'; + let inner = (icon.data('inner')) ? icon.data('inner') : 'n/a'; + let version = icon.data('version'); + let classes = getIconDisplaySettings(); + + // format any aliases into spans + let aliases = (icon.data('aliases') == false) + ? 'none' + : outputAliases(Object.values(icon.data('aliases'))); + + // format the tags into spans + tags.forEach(function(item, index) { + // check if we're linking to a card with [[card]] + const re = /\[\[(.*?)\]\]/g; + if (item.match(re)) { + tagc = item.substring(2, item.length -2).split("|"); + tagp = tagp+''+tagc[0]+''; + // otherwise link to search + } else { + tagp = tagp+''+item+''; + } + }); + + // update the fields + $('details div.icon i').attr('class', 'ss ss-'+code+' '+classes); + $('details div.table h2.name').html(name); + $('details div.table h3.class').html(code); + $('details div.table span.group').html(group); + $('details div.table li.rarity span').html(rarity); + $('details div.table li.rarity i').html('&#x'+rarity); + $('details div.table li.border').attr('class', 'border '+icon.data('border')+''); + $('details div.table li.border span').html(border); + $('details div.table li.border i').html('&#x'+border); + $('details div.table li.inner').attr('class', 'inner '+icon.data('inner')+''); + $('details div.table li.inner span').html(inner); + $('details div.table li.inner i').html('&#x'+inner); + $('details div.table span.version').html(version); + $('details div.table span.aliases').html(aliases); + $('details div.tags').html(tagp); + + // specific function bindings + $('#copy-unicode').on('click', function() { + navigator.clipboard.writeText(rarity).then(function() { + $('#copy-unicode em').html('Unicode copied!').animate('fadeup', 1200, 'ease-in-out'); + }, function(err) { + $('#copy-unicode em').html('Error copying').animate('fadeup', 1200, 'ease-in-out'); + }); + }); + $('#copy-glyph').on('click', function() { + navigator.clipboard.writeText($('details div.table li.rarity i').html()).then(function() { + $('#copy-glyph em').html('SVG copied!').animate('fadeup', 1200, 'ease-in-out'); + }, function(err) { + $('#copy-glyph em').html('Error copying').animate('fadeup', 1200, 'ease-in-out'); + }); + }); + $('#download-svg').on('click', function() { + $('#download-svg em').html('Coming soon!').animate('fadeup', 1200, 'ease-in-out'); + }); + + // show the modal + window.history.replaceState({'i':code,}, "Set icon details", '?i='+code); + $('object').addClass('active'); +} + +function closeModal() { + $('object').removeClass('active'); + window.history.replaceState({'q':'',}, "Set icons", '/sets'); +} + +// +// onload interactions + +Zepto(function($){ + + // + // mobile nav + + $('header').on('click', '#toggle-nav', function(e) { + $('nav').toggleClass('mobile'); + $('#toggle-nav-svg').toggleClass('closed'); + }); + + // + // dark/light mode + + let toggle = $('#switch'); + let cookie = localStorage.getItem('mode'); + + if (cookie) { + if (cookie == 'dark') { + document.documentElement.dataset.mode = 'dark'; + toggle.prop('checked', 'checked'); + } else if (cookie == 'light') { + document.documentElement.dataset.mode = 'light'; + toggle.prop('checked', false); + } + } + else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.dataset.mode = 'dark'; + toggle.prop('checked', 'checked'); + localStorage.setItem('mode', 'dark'); + } else { + localStorage.setItem('mode', 'light'); + } + + toggle.on('change', function() { + if (toggle.prop('checked')) { + document.documentElement.dataset.mode = 'dark'; + localStorage.setItem('mode', 'dark'); + } else { + document.documentElement.dataset.mode = 'light'; + localStorage.setItem('mode', 'light'); + } + }); + + // + // filter icons if we have a ?q=, modal if we have an ?i= + + let url = new URLSearchParams(window.location.search); + + if (url.get('q')) { + filterIcons(url.get('q')); + $('#icon-filter').val(url.get('q')); + } + + if (url.get('i')) { + let icon = $('figure[data-code="'+url.get('i')+'"]'); + if (icon) { + openModal(icon); + } + } + + // + // live icon filter via search box + + $('#icon-filter').on('input', function() { + filterIcons($(this).val()); + }); + + // + // icon filter clear button + + $('.search-link').on('click', function(e) { + e.preventDefault(); + filterIcons($(this).data('q')); + $('#icon-filter').val($(this).data('q')); + }); + + // + // icon display menus + + $('#icon-menu').on('change', 'input[type=radio][name="density"]', function() { + $('#icons').data('density', $(this).val()); + }); + + $('#icon-menu').on('change', 'input[type=radio][name="rarity"]', function() { + iconsChangeRarity($(this).val()); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="border"]', function() { + iconsToggleClass('ss-border', 'border'); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="inner"]', function() { + iconsToggleClass('ss-inner', 'inner'); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="gradient"]', function() { + iconsToggleClass('ss-rarity-gradient', 'gradient'); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="transparent"]', function() { + $('#icons figure').each(function(index, figure) { + $(figure).toggleClass('checkerboard'); + }); + }); + + // + // icon modal + + $('#icons').on('click', 'figure', function() { + openModal($(this)); + }); + + $('object').on('click', '.close', function(e) { + e.preventDefault(); + closeModal(); + }) +}); \ No newline at end of file diff --git a/docs/assets/js/zepto.fx.js b/docs/assets/js/zepto.fx.js new file mode 100644 index 0000000..80de1b8 --- /dev/null +++ b/docs/assets/js/zepto.fx.js @@ -0,0 +1,123 @@ +// Zepto.js +// (c) 2010-2016 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($, undefined){ + var prefix = '', eventPrefix, + vendors = { Webkit: 'webkit', Moz: '', O: 'o' }, + testEl = document.createElement('div'), + supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, + transform, + transitionProperty, transitionDuration, transitionTiming, transitionDelay, + animationName, animationDuration, animationTiming, animationDelay, + cssReset = {} + + function dasherize(str) { return str.replace(/([A-Z])/g, '-$1').toLowerCase() } + function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() } + + if (testEl.style.transform === undefined) $.each(vendors, function(vendor, event){ + if (testEl.style[vendor + 'TransitionProperty'] !== undefined) { + prefix = '-' + vendor.toLowerCase() + '-' + eventPrefix = event + return false + } + }) + + transform = prefix + 'transform' + cssReset[transitionProperty = prefix + 'transition-property'] = + cssReset[transitionDuration = prefix + 'transition-duration'] = + cssReset[transitionDelay = prefix + 'transition-delay'] = + cssReset[transitionTiming = prefix + 'transition-timing-function'] = + cssReset[animationName = prefix + 'animation-name'] = + cssReset[animationDuration = prefix + 'animation-duration'] = + cssReset[animationDelay = prefix + 'animation-delay'] = + cssReset[animationTiming = prefix + 'animation-timing-function'] = '' + + $.fx = { + off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined), + speeds: { _default: 400, fast: 200, slow: 600 }, + cssPrefix: prefix, + transitionEnd: normalizeEvent('TransitionEnd'), + animationEnd: normalizeEvent('AnimationEnd') + } + + $.fn.animate = function(properties, duration, ease, callback, delay){ + if ($.isFunction(duration)) + callback = duration, ease = undefined, duration = undefined + if ($.isFunction(ease)) + callback = ease, ease = undefined + if ($.isPlainObject(duration)) + ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration + if (duration) duration = (typeof duration == 'number' ? duration : + ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000 + if (delay) delay = parseFloat(delay) / 1000 + return this.anim(properties, duration, ease, callback, delay) + } + + $.fn.anim = function(properties, duration, ease, callback, delay){ + var key, cssValues = {}, cssProperties, transforms = '', + that = this, wrappedCallback, endEvent = $.fx.transitionEnd, + fired = false + + if (duration === undefined) duration = $.fx.speeds._default / 1000 + if (delay === undefined) delay = 0 + if ($.fx.off) duration = 0 + + if (typeof properties == 'string') { + // keyframe animation + cssValues[animationName] = properties + cssValues[animationDuration] = duration + 's' + cssValues[animationDelay] = delay + 's' + cssValues[animationTiming] = (ease || 'linear') + endEvent = $.fx.animationEnd + } else { + cssProperties = [] + // CSS transitions + for (key in properties) + if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') ' + else cssValues[key] = properties[key], cssProperties.push(dasherize(key)) + + if (transforms) cssValues[transform] = transforms, cssProperties.push(transform) + if (duration > 0 && typeof properties === 'object') { + cssValues[transitionProperty] = cssProperties.join(', ') + cssValues[transitionDuration] = duration + 's' + cssValues[transitionDelay] = delay + 's' + cssValues[transitionTiming] = (ease || 'linear') + } + } + + wrappedCallback = function(event){ + if (typeof event !== 'undefined') { + if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below" + $(event.target).unbind(endEvent, wrappedCallback) + } else + $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout + + fired = true + $(this).css(cssReset) + callback && callback.call(this) + } + if (duration > 0){ + this.bind(endEvent, wrappedCallback) + // transitionEnd is not always firing on older Android phones + // so make sure it gets fired + setTimeout(function(){ + if (fired) return + wrappedCallback.call(that) + }, ((duration + delay) * 1000) + 25) + } + + // trigger page reflow so new elements can animate + this.size() && this.get(0).clientLeft + + this.css(cssValues) + + if (duration <= 0) setTimeout(function() { + that.each(function(){ wrappedCallback.call(this) }) + }, 0) + + return this + } + + testEl = null +})(Zepto) \ No newline at end of file diff --git a/docs/assets/js/zepto.js b/docs/assets/js/zepto.js new file mode 100644 index 0000000..4821a1c --- /dev/null +++ b/docs/assets/js/zepto.js @@ -0,0 +1,2 @@ +/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */ +!function(t,e){"function"==typeof define&&define.amd?define(function(){return e(t)}):e(t)}(this,function(t){var e=function(){function $(t){return null==t?String(t):S[C.call(t)]||"object"}function F(t){return"function"==$(t)}function k(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function R(t){return"object"==$(t)}function Z(t){return R(t)&&!k(t)&&Object.getPrototypeOf(t)==Object.prototype}function z(t){var e=!!t&&"length"in t&&t.length,n=r.type(t);return"function"!=n&&!k(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function q(t){return a.call(t,function(t){return null!=t})}function H(t){return t.length>0?r.fn.concat.apply([],t):t}function I(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function V(t){return t in l?l[t]:l[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function _(t,e){return"number"!=typeof e||h[I(t)]?e:e+"px"}function B(t){var e,n;return c[t]||(e=f.createElement(t),f.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),c[t]=n),c[t]}function U(t){return"children"in t?u.call(t.children):r.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function X(t,e){var n,r=t?t.length:0;for(n=0;r>n;n++)this[n]=t[n];this.length=r,this.selector=e||""}function J(t,r,i){for(n in r)i&&(Z(r[n])||L(r[n]))?(Z(r[n])&&!Z(t[n])&&(t[n]={}),L(r[n])&&!L(t[n])&&(t[n]=[]),J(t[n],r[n],i)):r[n]!==e&&(t[n]=r[n])}function W(t,e){return null==e?r(t):r(t).filter(e)}function Y(t,e,n,r){return F(e)?e.call(t,n,r):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function K(t,n){var r=t.className||"",i=r&&r.baseVal!==e;return n===e?i?r.baseVal:r:void(i?r.baseVal=n:t.className=n)}function Q(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?r.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,r=t.childNodes.length;r>n;n++)tt(t.childNodes[n],e)}var e,n,r,i,O,P,o=[],s=o.concat,a=o.filter,u=o.slice,f=t.document,c={},l={},h={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,d=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,g=/^(?:body|html)$/i,v=/([A-Z])/g,y=["val","css","html","text","data","width","height","offset"],x=["after","prepend","before","append"],b=f.createElement("table"),E=f.createElement("tr"),j={tr:f.createElement("tbody"),tbody:b,thead:b,tfoot:b,td:E,th:E,"*":f.createElement("div")},w=/complete|loaded|interactive/,T=/^[\w-]*$/,S={},C=S.toString,N={},A=f.createElement("div"),D={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},L=Array.isArray||function(t){return t instanceof Array};return N.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=A).appendChild(t),r=~N.qsa(i,e).indexOf(t),o&&A.removeChild(t),r},O=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},P=function(t){return a.call(t,function(e,n){return t.indexOf(e)==n})},N.fragment=function(t,n,i){var o,s,a;return d.test(t)&&(o=r(f.createElement(RegExp.$1))),o||(t.replace&&(t=t.replace(m,"<$1>")),n===e&&(n=p.test(t)&&RegExp.$1),n in j||(n="*"),a=j[n],a.innerHTML=""+t,o=r.each(u.call(a.childNodes),function(){a.removeChild(this)})),Z(i)&&(s=r(o),r.each(i,function(t,e){y.indexOf(t)>-1?s[t](e):s.attr(t,e)})),o},N.Z=function(t,e){return new X(t,e)},N.isZ=function(t){return t instanceof N.Z},N.init=function(t,n){var i;if(!t)return N.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&p.test(t))i=N.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}else{if(F(t))return r(f).ready(t);if(N.isZ(t))return t;if(L(t))i=q(t);else if(R(t))i=[t],t=null;else if(p.test(t))i=N.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}}return N.Z(i,t)},r=function(t,e){return N.init(t,e)},r.extend=function(t){var e,n=u.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){J(t,n,e)}),t},N.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=T.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:u.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},r.contains=f.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},r.type=$,r.isFunction=F,r.isWindow=k,r.isArray=L,r.isPlainObject=Z,r.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},r.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},r.inArray=function(t,e,n){return o.indexOf.call(e,t,n)},r.camelCase=O,r.trim=function(t){return null==t?"":String.prototype.trim.call(t)},r.uuid=0,r.support={},r.expr={},r.noop=function(){},r.map=function(t,e){var n,i,o,r=[];if(z(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return o.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return F(t)?this.not(this.not(t)):r(a.call(this,function(e){return N.matches(e,t)}))},add:function(t,e){return r(P(this.concat(r(t,e))))},is:function(t){return this.length>0&&N.matches(this[0],t)},not:function(t){var n=[];if(F(t)&&t.call!==e)this.each(function(e){t.call(this,e)||n.push(this)});else{var i="string"==typeof t?this.filter(t):z(t)&&F(t.item)?u.call(t):r(t);this.forEach(function(t){i.indexOf(t)<0&&n.push(t)})}return r(n)},has:function(t){return this.filter(function(){return R(t)?r.contains(this,t):r(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!R(t)?t:r(t)},last:function(){var t=this[this.length-1];return t&&!R(t)?t:r(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?r(t).filter(function(){var t=this;return o.some.call(n,function(e){return r.contains(e,t)})}):1==this.length?r(N.qsa(this[0],t)):this.map(function(){return N.qsa(this,t)}):r()},closest:function(t,e){var n=[],i="object"==typeof t&&r(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:N.matches(o,t));)o=o!==e&&!M(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),r(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=r.map(n,function(t){return(t=t.parentNode)&&!M(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return W(e,t)},parent:function(t){return W(P(this.pluck("parentNode")),t)},children:function(t){return W(this.map(function(){return U(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||u.call(this.childNodes)})},siblings:function(t){return W(this.map(function(t,e){return a.call(U(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return r.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=B(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=F(t);if(this[0]&&!e)var n=r(t).get(0),i=n.parentNode||this.length>1;return this.each(function(o){r(this).wrapAll(e?t.call(this,o):i?n.cloneNode(!0):n)})},wrapAll:function(t){if(this[0]){r(this[0]).before(t=r(t));for(var e;(e=t.children()).length;)t=e.first();r(t).append(this)}return this},wrapInner:function(t){var e=F(t);return this.each(function(n){var i=r(this),o=i.contents(),s=e?t.call(this,n):t;o.length?o.wrapAll(s):i.append(s)})},unwrap:function(){return this.parent().each(function(){r(this).replaceWith(r(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var n=r(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()})},prev:function(t){return r(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return r(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;r(this).empty().append(Y(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=Y(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,r){var i;return"string"!=typeof t||1 in arguments?this.each(function(e){if(1===this.nodeType)if(R(t))for(n in t)G(this,n,t[n]);else G(this,t,Y(this,r,e,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(t))?i:e},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){G(this,t)},this)})},prop:function(t,e){return t=D[t]||t,1 in arguments?this.each(function(n){this[t]=Y(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=D[t]||t,this.each(function(){delete this[t]})},data:function(t,n){var r="data-"+t.replace(v,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?Q(i):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=Y(this,t,e,this.value)})):this[0]&&(this[0].multiple?r(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=r(this),i=Y(this,e,t,n.offset()),o=n.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==n.css("position")&&(s.position="relative"),n.css(s)});if(!this.length)return null;if(f.documentElement!==this[0]&&!r.contains(f.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[O(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(L(t)){if(!i)return;var o={},s=getComputedStyle(i,"");return r.each(t,function(t,e){o[e]=i.style[O(e)]||s.getPropertyValue(e)}),o}}var a="";if("string"==$(t))e||0===e?a=I(t)+":"+_(t,e):this.each(function(){this.style.removeProperty(I(t))});else for(n in t)t[n]||0===t[n]?a+=I(n)+":"+_(n,t[n])+";":this.each(function(){this.style.removeProperty(I(n))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(r(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?o.some.call(this,function(t){return this.test(K(t))},V(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var n=K(this),o=Y(this,t,e,n);o.split(/\s+/g).forEach(function(t){r(this).hasClass(t)||i.push(t)},this),i.length&&K(this,n+(n?" ":"")+i.join(" "))}}):this},removeClass:function(t){return this.each(function(n){if("className"in this){if(t===e)return K(this,"");i=K(this),Y(this,t,n,i).split(/\s+/g).forEach(function(t){i=i.replace(V(t)," ")}),K(this,i.trim())}})},toggleClass:function(t,n){return t?this.each(function(i){var o=r(this),s=Y(this,t,i,K(this));s.split(/\s+/g).forEach(function(t){(n===e?!o.hasClass(t):n)?o.addClass(t):o.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=g.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(r(t).css("margin-top"))||0,n.left-=parseFloat(r(t).css("margin-left"))||0,i.top+=parseFloat(r(e[0]).css("border-top-width"))||0,i.left+=parseFloat(r(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||f.body;t&&!g.test(t.nodeName)&&"static"==r(t).css("position");)t=t.offsetParent;return t})}},r.fn.detach=r.fn.remove,["width","height"].forEach(function(t){var n=t.replace(/./,function(t){return t[0].toUpperCase()});r.fn[t]=function(i){var o,s=this[0];return i===e?k(s)?s["inner"+n]:M(s)?s.documentElement["scroll"+n]:(o=this.offset())&&o[t]:this.each(function(e){s=r(this),s.css(t,Y(this,i,e,s[t]()))})}}),x.forEach(function(n,i){var o=i%2;r.fn[n]=function(){var n,a,s=r.map(arguments,function(t){var i=[];return n=$(t),"array"==n?(t.forEach(function(t){return t.nodeType!==e?i.push(t):r.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(N.fragment(t)))}),i):"object"==n||null==t?t:N.fragment(t)}),u=this.length>1;return s.length<1?this:this.each(function(e,n){a=o?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var c=r.contains(f.documentElement,a);s.forEach(function(e){if(u)e=e.cloneNode(!0);else if(!a)return r(e).remove();a.insertBefore(e,n),c&&tt(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},r.fn[o?n+"To":"insert"+(i?"Before":"After")]=function(t){return r(t)[n](this),this}}),N.Z.prototype=X.prototype=r.fn,N.uniq=P,N.deserializeValue=Q,r.zepto=N,r}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function h(t){return t._zid||(t._zid=n++)}function p(t,e,n,r){if(e=d(e),e.ns)var i=m(e.ns);return(a[h(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)})}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function m(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function g(t,e){return t.del&&!f&&t.e in c||!!e}function v(t){return l[t]||f&&c[t]||t}function y(t,n,i,o,s,u,f){var c=h(t),p=a[c]||(a[c]=[]);n.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(i);var a=d(n);a.fn=i,a.sel=s,a.e in l&&(i=function(t){var n=t.relatedTarget;return!n||n!==this&&!e.contains(this,n)?a.fn.apply(this,arguments):void 0}),a.del=u;var c=u||i;a.proxy=function(e){if(e=T(e),!e.isImmediatePropagationStopped()){e.data=o;var n=c.apply(t,e._args==r?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},a.i=p.length,p.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,g(a,f))})}function x(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach(function(e){p(t,e,n,r).forEach(function(e){delete a[o][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,g(e,i))})})}function T(t,n){return(n||!t.isDefaultPrevented)&&(n||(n=t),e.each(w,function(e,r){var i=n[e];t[e]=function(){return this[r]=b,i&&i.apply(n,arguments)},t[r]=E}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==r?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=b)),t}function S(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===r||(n[e]=t[e]);return T(n,t)}var r,n=1,i=Array.prototype.slice,o=e.isFunction,s=function(t){return"string"==typeof t},a={},u={},f="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:x},e.proxy=function(t,n){var r=2 in arguments&&i.call(arguments,2);if(o(t)){var a=function(){return t.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=h(t),a}if(s(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var b=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,w={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,a,u,f){var c,l,h=this;return t&&!s(t)?(e.each(t,function(t,e){h.on(t,n,a,e,f)}),h):(s(n)||o(u)||u===!1||(u=a,a=n,n=r),(u===r||a===!1)&&(u=a,a=r),u===!1&&(u=E),h.each(function(r,o){f&&(c=function(t){return x(o,t.type,u),u.apply(this,arguments)}),n&&(l=function(t){var r,s=e(t.target).closest(n,o).get(0);return s&&s!==o?(r=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||u).apply(s,[r].concat(i.call(arguments,1)))):void 0}),y(o,t,u,a,n,l||c)}))},e.fn.off=function(t,n,i){var a=this;return t&&!s(t)?(e.each(t,function(t,e){a.off(t,n,e)}),a):(s(n)||o(i)||i===!1||(i=n,n=r),i===!1&&(i=E),a.each(function(){x(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=s(t)||e.isPlainObject(t)?e.Event(t):T(t),t._args=n,this.each(function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,i;return this.each(function(o,a){r=S(s(t)?e.Event(t):t),r._args=n,r.target=a,e.each(p(a,t.type||t),function(t,e){return i=e.proxy(r),r.isImmediatePropagationStopped()?!1:void 0})}),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){s(t)||(e=t,t=e.type);var n=document.createEvent(u[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),T(n)}}(e),function(e){function p(t,n,r){var i=e.Event(n);return e(t).trigger(i,r),!i.isDefaultPrevented()}function d(t,e,n,i){return t.global?p(e||r,n,i):void 0}function m(t){t.global&&0===e.active++&&d(t,null,"ajaxStart")}function g(t){t.global&&!--e.active&&d(t,null,"ajaxStop")}function v(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||d(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void d(e,n,"ajaxSend",[t,e])}function y(t,e,n,r){var i=n.context,o="success";n.success.call(i,t,o,e),r&&r.resolveWith(i,[t,o,e]),d(n,i,"ajaxSuccess",[e,n,t]),b(o,e,n)}function x(t,e,n,r,i){var o=r.context;r.error.call(o,n,e,t),i&&i.rejectWith(o,[n,e,t]),d(r,o,"ajaxError",[n,r,t||e]),b(e,n,r)}function b(t,e,n){var r=n.context;n.complete.call(r,e,t),d(n,r,"ajaxComplete",[e,n]),g(n)}function E(t,e,n){if(n.dataFilter==j)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function j(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==c?"html":t==f?"json":a.test(t)?"script":u.test(t)&&"xml")||"text"}function T(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function S(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=T(t.url,t.data),t.data=void 0)}function C(t,n,r,i){return e.isFunction(n)&&(i=r,r=n,n=void 0),e.isFunction(r)||(i=r,r=void 0),{url:t,data:n,success:r,dataType:i}}function O(t,n,r,i){var o,s=e.isArray(n),a=e.isPlainObject(n);e.each(n,function(n,u){o=e.type(u),i&&(n=r?i:i+"["+(a||"object"==o||"array"==o?n:"")+"]"),!i&&s?t.add(u.name,u.value):"array"==o||!r&&"object"==o?O(t,u,r,n):t.add(n,u)})}var i,o,n=+new Date,r=t.document,s=/)<[^<]*)*<\/script>/gi,a=/^(?:text|application)\/javascript/i,u=/^(?:text|application)\/xml/i,f="application/json",c="text/html",l=/^\s*$/,h=r.createElement("a");h.href=t.location.href,e.active=0,e.ajaxJSONP=function(i,o){if(!("type"in i))return e.ajax(i);var c,p,s=i.jsonpCallback,a=(e.isFunction(s)?s():s)||"Zepto"+n++,u=r.createElement("script"),f=t[a],l=function(t){e(u).triggerHandler("error",t||"abort")},h={abort:l};return o&&o.promise(h),e(u).on("load error",function(n,r){clearTimeout(p),e(u).off().remove(),"error"!=n.type&&c?y(c[0],h,i,o):x(null,r||"error",h,i,o),t[a]=f,c&&e.isFunction(f)&&f(c[0]),f=c=void 0}),v(h,i)===!1?(l("abort"),h):(t[a]=function(){c=arguments},u.src=i.url.replace(/\?(.+)=\?/,"?$1="+a),r.head.appendChild(u),i.timeout>0&&(p=setTimeout(function(){l("timeout")},i.timeout)),h)},e.ajaxSettings={type:"GET",beforeSend:j,success:j,error:j,complete:j,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:f,xml:"application/xml, text/xml",html:c,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:j},e.ajax=function(n){var u,f,s=e.extend({},n||{}),a=e.Deferred&&e.Deferred();for(i in e.ajaxSettings)void 0===s[i]&&(s[i]=e.ajaxSettings[i]);m(s),s.crossDomain||(u=r.createElement("a"),u.href=s.url,u.href=u.href,s.crossDomain=h.protocol+"//"+h.host!=u.protocol+"//"+u.host),s.url||(s.url=t.location.toString()),(f=s.url.indexOf("#"))>-1&&(s.url=s.url.slice(0,f)),S(s);var c=s.dataType,p=/\?.+=\?/.test(s.url);if(p&&(c="jsonp"),s.cache!==!1&&(n&&n.cache===!0||"script"!=c&&"jsonp"!=c)||(s.url=T(s.url,"_="+Date.now())),"jsonp"==c)return p||(s.url=T(s.url,s.jsonp?s.jsonp+"=?":s.jsonp===!1?"":"callback=?")),e.ajaxJSONP(s,a);var P,d=s.accepts[c],g={},b=function(t,e){g[t.toLowerCase()]=[t,e]},C=/^([\w-]+:)\/\//.test(s.url)?RegExp.$1:t.location.protocol,N=s.xhr(),O=N.setRequestHeader;if(a&&a.promise(N),s.crossDomain||b("X-Requested-With","XMLHttpRequest"),b("Accept",d||"*/*"),(d=s.mimeType||d)&&(d.indexOf(",")>-1&&(d=d.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(d)),(s.contentType||s.contentType!==!1&&s.data&&"GET"!=s.type.toUpperCase())&&b("Content-Type",s.contentType||"application/x-www-form-urlencoded"),s.headers)for(o in s.headers)b(o,s.headers[o]);if(N.setRequestHeader=b,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=j,clearTimeout(P);var t,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==C){if(c=c||w(s.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)t=N.response;else{t=N.responseText;try{t=E(t,c,s),"script"==c?(1,eval)(t):"xml"==c?t=N.responseXML:"json"==c&&(t=l.test(t)?null:e.parseJSON(t))}catch(r){n=r}if(n)return x(n,"parsererror",N,s,a)}y(t,N,s,a)}else x(N.statusText||null,N.status?"error":"abort",N,s,a)}},v(N,s)===!1)return N.abort(),x(null,"abort",N,s,a),N;var A="async"in s?s.async:!0;if(N.open(s.type,s.url,A,s.username,s.password),s.xhrFields)for(o in s.xhrFields)N[o]=s.xhrFields[o];for(o in g)O.apply(N,g[o]);return s.timeout>0&&(P=setTimeout(function(){N.onreadystatechange=j,N.abort(),x(null,"timeout",N,s,a)},s.timeout)),N.send(s.data?s.data:null),N},e.get=function(){return e.ajax(C.apply(null,arguments))},e.post=function(){var t=C.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=C.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,r){if(!this.length)return this;var a,i=this,o=t.split(/\s/),u=C(t,n,r),f=u.success;return o.length>1&&(u.url=o[0],a=o[1]),u.success=function(t){i.html(a?e("
").html(t.replace(s,"")).find(a):t),f&&f.apply(i,arguments)},e.ajax(u),this};var N=encodeURIComponent;e.param=function(t,n){var r=[];return r.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(t)+"="+N(n))},O(r,t,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(r){return null}}}}(),e}); \ No newline at end of file diff --git a/docs/assets/svg/cardsphere.svg b/docs/assets/svg/cardsphere.svg new file mode 100644 index 0000000..b463f60 --- /dev/null +++ b/docs/assets/svg/cardsphere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/svg/echomtg.svg b/docs/assets/svg/echomtg.svg new file mode 100644 index 0000000..f0945dd --- /dev/null +++ b/docs/assets/svg/echomtg.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/svg/manatraders.svg b/docs/assets/svg/manatraders.svg new file mode 100644 index 0000000..8af0b23 --- /dev/null +++ b/docs/assets/svg/manatraders.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/svg/mtgaassistant.svg b/docs/assets/svg/mtgaassistant.svg new file mode 100644 index 0000000..ae0e42e --- /dev/null +++ b/docs/assets/svg/mtgaassistant.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/assets/svg/mtgjson.svg b/docs/assets/svg/mtgjson.svg new file mode 100644 index 0000000..f7dc7b4 --- /dev/null +++ b/docs/assets/svg/mtgjson.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/svg/rarity.svg b/docs/assets/svg/rarity.svg new file mode 100644 index 0000000..08c5fe9 --- /dev/null +++ b/docs/assets/svg/rarity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/svg/scg.svg b/docs/assets/svg/scg.svg new file mode 100644 index 0000000..a0403cb --- /dev/null +++ b/docs/assets/svg/scg.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/svg/standard.svg b/docs/assets/svg/standard.svg new file mode 100644 index 0000000..e5dffac --- /dev/null +++ b/docs/assets/svg/standard.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/svg/tappedout.svg b/docs/assets/svg/tappedout.svg new file mode 100644 index 0000000..3548d26 --- /dev/null +++ b/docs/assets/svg/tappedout.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/svg/tcgplayer.svg b/docs/assets/svg/tcgplayer.svg new file mode 100644 index 0000000..10d1fd1 --- /dev/null +++ b/docs/assets/svg/tcgplayer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/svg/untapped.svg b/docs/assets/svg/untapped.svg new file mode 100644 index 0000000..ba2fcbc --- /dev/null +++ b/docs/assets/svg/untapped.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/svg/yours.svg b/docs/assets/svg/yours.svg new file mode 100644 index 0000000..e8a324d --- /dev/null +++ b/docs/assets/svg/yours.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..d151a58 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,355 @@ + + + + + Keyrune + + + + + + + + + + + + + + + +
+ + + + Keyrune + + + 4.0.0 + + + + + + +
+ + +
+ + +
+
+ + + + + + + + + + + + +
+
+
+

+ Redrawn and refactored with full set coverage +

+

+ Version 4 represents hundreds of hours of labor-of-love, with re-drawn, normalized glyphs for accurate sizing and multi-layer support for every set symbol! +

+

+ Style the rarity, border, and inner layers separately and perfectly, all with cross-browser plug'n'play CSS classes. +

+
+
+
+

+ + + 3 + + + , + + + tap + + + : Draw 6 new features. +

+

You have no maximum hand size for the rest of the game.

+
+
+ + + + + + +

Full Scryfall set code coverage

+

Every set officially recognized by Scryfall is aliased to the appropriate symbol, including all of their custom codes for promos, cubes, etc.

+
+
+ +

More unofficial set symbols

+

All of the missing convenience symbols for popular but unofficial "sets" are now available, with some new fun ones 😜.

+
+
+ +

Set symbol size normalization!

+

When every glyph was squared off, Arabian Nights was too thin and Tempest too big. Now every symbol is relatively sized!

+
+
+ +

Three targetable layers

+

In an icon font first, border, rarity, and inner layers are targetable via ::before, ::after, and ::marker pseudo-elements.

+
+
+ +

Overlays for print variations

+

Booster fun, box topper, pre-release, and some other print variations now have easy overlays if your project needs to differentiate.

+
+
+ + + + + + +

Smaller SVG code

+

In addition to the redraw, each SVG has been optimized for file size to help reduce the overall weight of the font and library.

+
+
+
+
+

+ See Keyrune in the wild at these fine locations! +

+ +
+
+ + +
+
+
+

+ Keyrune.css +

+

+ An MTG icon font built with ♥ by Andrew Gioia. +

+ + + + + Star + +
+
+
+ Project +
+ +
  • + + Overview +
  • +
  • + + + + + + Set symbols +
  • +
  • + + + + + Documentation +
  • +
  • + + + + + + + + + + + + Examples +
  • +
  • + + + + + + + + + Cheatsheet +
  • +
  • + + + + + GitHub project +
  • +
  • + + + + Gitea mirror +
  • +
    +
    +
    +
    + Licensing and terms of use +
    +

    + Keyrune is free, unofficial "Fan Content" permitted under the Wizards of the Coast Fan Content Policy. The Magic: the Gathering™ set symbols themselves are copyright Wizards of the Coast, LLC, a subsidiary of Hasbro, Inc. Keyrune is not produced by, endorsed by, supported by, or affiliated with Wizards of the Coast, and I develop and distribute this project solely as a resource to enable other Fan Content. +

    +

    + The Keyrune font is licensed under the SIL OFL 1.1. Please review the terms of that license for attribution, distribution, incorporation, and bundling requirements. +

    +

    + The source code and other project files, including CSS, SCSS, and his website, are licensed separately under the GPL 3.0 License. You're free to share or modify any of the source code or this website's design so long as you also distribute your project under the same license. +

    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/sets/index.html b/docs/sets/index.html new file mode 100644 index 0000000..b85cdc6 --- /dev/null +++ b/docs/sets/index.html @@ -0,0 +1,1371 @@ + + + + + Keyrune + + + + + + + + + + + + + + + +
    + + + + Keyrune + + + 4.0.0 + + + + + + +
    + + +
    + +
    +
    + +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
    + +
    + +
    +
    +
    +
    +
    +

    + Core Sets +

    +

    + Base sets of tournament cards with larger pools of mostly reprints. +

    +
    +
    +
    + + lea + Alpha +
    + + leb + Beta +
    + + 2ed + Unlimited +
    + + 3ed + Revised +
    + + 4ed + Fourth Edition +
    + + 5ed + Fifth Edition +
    + + 6ed + Sixth Edition +
    +
    +
    +
    +

    + Expansions +

    +

    + Expert-level tournament sets. +

    +
    +
    +
    + + arn + Arabian Nights +
    + + atq + Antiquities +
    + + leg + Legends +
    + + drk + The Dark +
    + + fem + Fallen Empires +
    + + ice + Ice Age +
    + + hml + Homelands +
    + + all + Alliances +
    + + mir + Mirage +
    + + vis + Mirage +
    + + wth + Weatherlight +
    + + tmp + Tempest +
    + + sth + Stronghold +
    + + exo + Exodus +
    +
    +
    +
    +

    + Command Zone +

    +

    + Commander/EDH, Planechase, and other sets that use the command zone. +

    +
    +
    +
    + + pvan + Vanguard +
    +
    +
    +
    +

    + Reprints +

    +

    + Sets that contain only reprinted cards. +

    +
    +
    +
    + + sum + Summer Magic (Edgar) +
    + + fbb + Foreign Black Border +
    + + 4bb + Fourth Edition FBB +
    + + chr + Chronicles +
    + + rin + Rinascimento +
    + + ren + Renaissance +
    +
    +
    +
    +

    + Supplemental Sets +

    +

    + All other non-Standard printed sets designed to supplement the game. +

    +
    +
    +
    +
    +
    +
    +

    + Digital Sets +

    +

    + Digital-only sets and releases with no print companion. +

    +
    +
    +
    + + past + Astral Cards +
    +
    +
    +
    +

    + Beginner Sets +

    +

    + Preconfigured sets and decks geared towards new players. +

    +
    +
    +
    + + itp + Introductory 2-Player Set +
    + + por + Portal +
    + + por + Portal Second Age +
    +
    +
    +
    +

    + Premium Sets +

    +

    + Collectable, foil, or other special printed sets. +

    +
    +
    +
    + + ced + Collectors' Edition +
    + + cei + Intl. Collectors' Edition +
    +
    +
    +
    +

    + Promos +

    +

    + Promotional sets or cards included in other media or advertisements. +

    +
    +
    +
    + + pdrc + Dragon Con +
    + + phpr + HarperPrism Book Promos +
    + + pmei + Media Inserts +
    + + pmtg + Default Promo +
    +
    +
    +
    +

    + Standalone Sets +

    +

    + Experimental, out-of-world, draft inovative, or other releases that can be played on their own. +

    +
    +
    +
    + + ugl + Unglued +
    +
    +
    +
    +

    + Alternatives +

    +

    + Other official versions of set symbols used by WOTC. +

    +
    +
    +
    + + legchr + Legends (Chronicles) +
    + + pgc98 + Gen Con 98 Promo +
    + + po + Portal (Gatherer) +
    + + wl + Weatherlight (Gatherer) +
    +
    +
    +
    +

    + Unofficial +

    +

    + Home grown symbols to fill in gaps and other game needs. +

    +
    +
    +
    + + palp + APAC Lands +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +

    + Keyrune.css +

    +

    + An MTG icon font built with ♥ by Andrew Gioia. +

    + + + + + Star + +
    +
    +
    + Project +
    + +
  • + + Overview +
  • +
  • + + + + + + Set symbols +
  • +
  • + + + + + Documentation +
  • +
  • + + + + + + + + + + + + Examples +
  • +
  • + + + + + + + + + Cheatsheet +
  • +
  • + + + + + GitHub project +
  • +
  • + + + + Gitea mirror +
  • +
    +
    +
    +
    + Licensing and terms of use +
    +

    + Keyrune is free, unofficial "Fan Content" permitted under the Wizards of the Coast Fan Content Policy. The Magic: the Gathering™ set symbols themselves are copyright Wizards of the Coast, LLC, a subsidiary of Hasbro, Inc. Keyrune is not produced by, endorsed by, supported by, or affiliated with Wizards of the Coast, and I develop and distribute this project solely as a resource to enable other Fan Content. +

    +

    + The Keyrune font is licensed under the SIL OFL 1.1. Please review the terms of that license for attribution, distribution, incorporation, and bundling requirements. +

    +

    + The source code and other project files, including CSS, SCSS, and his website, are licensed separately under the GPL 3.0 License. You're free to share or modify any of the source code or this website's design so long as you also distribute your project under the same license. +

    +
    +
    +
    + + + + +
    + + Set name + +
    + + + + + + + +
    +
    +

    + Set name +

    +

    + Set code +

    +
    +
    + + +
    +
    + + +
    +
    + +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    +
    +
    + + +
    +
    + +
    +
    + Tags +
    +
    +
    + +
    + +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + + +
  • +
    + +
  • + +
  • +
  • + +
  • +
  • + +
  • +
    +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/src/.hugo_build.lock b/docs/src/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/docs/src/config.yaml b/docs/src/config.yaml new file mode 100644 index 0000000..5dda46e --- /dev/null +++ b/docs/src/config.yaml @@ -0,0 +1,14 @@ +baseURL: https://keyrune4.lan +disableKinds: + - taxonomy + - term + - RSS + - sitemap +enableInlineShortcodes: true +languageCode: en-us +markup: + goldmark: + renderer: + unsafe: true +publishDir: ../ +title: Keyrune \ No newline at end of file diff --git a/docs/src/content/_index.md b/docs/src/content/_index.md new file mode 100644 index 0000000..619ed9a --- /dev/null +++ b/docs/src/content/_index.md @@ -0,0 +1,167 @@ +--- +title: Keyrune +description: "Complete Magic: the Gathering set symbol icon font" +footer: border +--- + + + + +
    +
    + + + + + + + + + + + + +
    +
    +
    +

    + Redrawn and refactored with full set coverage +

    +

    + Version 4 represents hundreds of hours of labor-of-love, with re-drawn, normalized glyphs for accurate sizing and multi-layer support for every set symbol! +

    +

    + Style the rarity, border, and inner layers separately and perfectly, all with cross-browser plug'n'play CSS classes. +

    +
    +
    + +
    +

    + + + 3 + + + , + + + tap + + + : Draw 6 new features. +

    +

    You have no maximum hand size for the rest of the game.

    +
    +
    + + + + + + +

    Full Scryfall set code coverage

    +

    Every set officially recognized by Scryfall is aliased to the appropriate symbol, including all of their custom codes for promos, cubes, etc.

    +
    +
    + +

    More unofficial set symbols

    +

    All of the missing convenience symbols for popular but unofficial "sets" are now available, with some new fun ones 😜.

    +
    +
    + +

    Set symbol size normalization!

    +

    When every glyph was squared off, Arabian Nights was too thin and Tempest too big. Now every symbol is relatively sized!

    +
    +
    + +

    Three targetable layers

    +

    In an icon font first, border, rarity, and inner layers are targetable via ::before, ::after, and ::marker pseudo-elements.

    +
    +
    + +

    Overlays for print variations

    +

    Booster fun, box topper, pre-release, and some other print variations now have easy overlays if your project needs to differentiate.

    +
    +
    + + + + + + +

    Smaller SVG code

    +

    In addition to the redraw, each SVG has been optimized for file size to help reduce the overall weight of the font and library.

    +
    +
    +
    + +
    +

    + See Keyrune in the wild at these fine locations! +

    + +
    \ No newline at end of file diff --git a/docs/src/content/sets/index.md b/docs/src/content/sets/index.md new file mode 100644 index 0000000..e0d845a --- /dev/null +++ b/docs/src/content/sets/index.md @@ -0,0 +1,166 @@ +--- +title: Set Icons +description: "Complete Magic: the Gathering set symbol icon font" +modal: true +--- + + + +
    +
    + +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
    + +
    + +
    + +
    +
    + {{% icons %}} +
    +
    \ No newline at end of file diff --git a/docs/src/data/project.json b/docs/src/data/project.json new file mode 100644 index 0000000..b47e156 --- /dev/null +++ b/docs/src/data/project.json @@ -0,0 +1,6 @@ +{ + "author": "Andrew Gioia", + "git": "https://git.gioia.cloud/andrew/keyrune", + "name": "Keyrune", + "version": "4.0.0" +} \ No newline at end of file diff --git a/docs/src/data/sets.json b/docs/src/data/sets.json new file mode 100644 index 0000000..17d0758 --- /dev/null +++ b/docs/src/data/sets.json @@ -0,0 +1,1100 @@ +{ + "core": { + "order": 0, + "name": "Core Sets", + "description": "Base sets of tournament cards with larger pools of mostly reprints.", + "sets": { + "lea": { + "code": "lea", + "name": "Limited Edition Alpha", + "display": "Alpha", + "nicknames": [ + "Alpha" + ], + "rarity": "e000", + "border": "e001", + "inner": "e002", + "release": "1993-08-05", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "core", + "alpha", + "limited" + ] + }, + "leb": { + "code": "leb", + "name": "Limited Edition Beta", + "display": "Beta", + "nicknames": [ + "Beta" + ], + "rarity": "e003", + "border": "e004", + "inner": "e005", + "release": "1993-10-04", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "core", + "beta", + "limited" + ] + }, + "2ed": { + "code": "2ed", + "name": "Unlimited", + "display": "Unlimited", + "nicknames": [ + "2nd Edition" + ], + "rarity": "e006", + "border": "e007", + "inner": "e008", + "release": "1993-12-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "core", + "unlimited", + "second" + ] + }, + "3ed": { + "code": "3ed", + "name": "Revised", + "display": "Revised", + "nicknames": [ + "3rd Edition" + ], + "rarity": "e015", + "border": "e016", + "inner": "e017", + "release": "1994-04-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "core", + "revised", + "third", + "3e" + ] + }, + "4ed": { + "code": "4ed", + "name": "Fourth Edition", + "display": "Fourth Edition", + "nicknames": [ + "4th Edition" + ], + "rarity": "e033", + "border": "e034", + "inner": false, + "release": "1995-04-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "4e": { + "code": "4e", + "name": "Gatherer code", + "release": "1995-04-01" + } + }, + "tags": [ + "core", + "fourth", + "4th", + "4e" + ] + }, + "5ed": { + "code": "5ed", + "name": "Fifth Edition", + "display": "Fifth Edition", + "nicknames": [ + "5th Edition" + ], + "rarity": "e054", + "border": "e055", + "inner": false, + "release": "1997-03-24", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "5e": { + "code": "5e", + "name": "Gatherer code", + "release": "1997-03-24" + } + }, + "tags": [ + "core", + "fifth", + "5th", + "5e" + ] + }, + "6ed": { + "code": "6ed", + "name": "Classic Sixth Edition", + "display": "Sixth Edition", + "nicknames": [ + "Sixth Edition", + "6th Edition" + ], + "rarity": "e07e", + "border": "e07f", + "inner": false, + "release": "1999-04-21", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "6e": { + "code": "6e", + "name": "Gatherer code", + "release": "1999-04-21" + } + }, + "tags": [ + "core", + "sixth", + "6th", + "6e" + ] + } + } + }, + "expansion": { + "order": 1, + "name": "Expansions", + "description": "Expert-level tournament sets.", + "sets": { + "arn": { + "code": "arn", + "name": "Arabian Nights", + "display": "Arabian Nights", + "nicknames": false, + "rarity": "e00f", + "border": "e010", + "inner": "e011", + "release": "1993-12-17", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "an": { + "code": "an", + "name": "Gatherer code", + "release": "1993-12-17" + } + }, + "tags": [ + "arabian", + "nights", + "scimitar", + "an" + ] + }, + "atq": { + "code": "atq", + "name": "Antiquities", + "display": "Antiquities", + "nicknames": false, + "rarity": "e012", + "border": "e013", + "inner": false, + "release": "1994-03-04", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "aq": { + "code": "aq", + "name": "Gatherer code", + "release": "1994-03-04" + } + }, + "tags": [ + "antiquities", + "anvil", + "aq" + ] + }, + "leg": { + "code": "leg", + "name": "Legends", + "display": "Legends", + "nicknames": false, + "rarity": "e01b", + "border": "e01c", + "inner": "e01d", + "release": "1994-06-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "le": { + "code": "le", + "name": "Gatherer code", + "release": "1994-06-01" + } + }, + "tags": [ + "legends", + "column" + ] + }, + "drk": { + "code": "drk", + "name": "The Dark", + "display": "The Dark", + "nicknames": false, + "rarity": "e024", + "border": "e025", + "inner": false, + "release": "1994-08-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "dk": { + "code": "dk", + "name": "Gatherer code", + "release": "1994-08-01" + } + }, + "tags": [ + "dark", + "moon" + ] + }, + "fem": { + "code": "fem", + "name": "Fallen Empires", + "display": "Fallen Empires", + "nicknames": false, + "rarity": "e02a", + "border": "e02b", + "inner": false, + "release": "1994-11-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "fe": { + "code": "fe", + "name": "Gatherer code", + "release": "1994-11-01" + } + }, + "tags": [ + "fallen", + "empires", + "crown" + ] + }, + "ice": { + "code": "ice", + "name": "Ice Age", + "display": "Ice Age", + "nicknames": false, + "rarity": "e039", + "border": "e03a", + "inner": "e03b", + "release": "1995-06-03", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "ia": { + "code": "ia", + "name": "Gatherer code", + "release": "1995-06-03" + } + }, + "tags": [ + "ice", + "age", + "snow", + "snowflake" + ] + }, + "hml": { + "code": "hml", + "name": "Homelands", + "display": "Homelands", + "nicknames": false, + "rarity": "e045", + "border": "e046", + "inner": "e047", + "release": "1995-10-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "hm": { + "code": "hm", + "name": "Gatherer code", + "release": "1995-10-01" + } + }, + "tags": [ + "homelands", + "globe" + ] + }, + "all": { + "code": "all", + "name": "Alliances", + "display": "Alliances", + "nicknames": false, + "rarity": "e048", + "border": "e049", + "inner": "e04a", + "release": "1996-06-10", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "al": { + "code": "al", + "name": "Gatherer code", + "release": "1996-06-10" + } + }, + "tags": [ + "alliances", + "flag" + ] + }, + "mir": { + "code": "mir", + "name": "Mirage", + "display": "Mirage", + "nicknames": false, + "rarity": "e04b", + "border": "e04c", + "inner": false, + "release": "1996-10-08", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "mi": { + "code": "mi", + "name": "Gatherer code", + "release": "1996-10-08" + } + }, + "tags": [ + "mirage", + "jamuraa", + "palm", + "tree" + ] + }, + "vis": { + "code": "vis", + "name": "Mirage", + "display": "Mirage", + "nicknames": false, + "rarity": "e051", + "border": "e052", + "inner": "e053", + "release": "1997-02-03", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "vi": { + "code": "vi", + "name": "Gatherer code", + "release": "1997-02-03" + } + }, + "tags": [ + "visions", + "jamuraa", + "banner" + ] + }, + "wth": { + "code": "wth", + "name": "Weatherlight", + "display": "Weatherlight", + "nicknames": false, + "rarity": "e060", + "border": "e061", + "inner": "e062", + "release": "1997-06-09", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "weatherlight", + "book", + "jamuraa" + ] + }, + "tmp": { + "code": "tmp", + "name": "Tempest", + "display": "Tempest", + "nicknames": false, + "rarity": "e063", + "border": "e064", + "inner": false, + "release": "1997-10-14", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "te": { + "code": "te", + "name": "Gatherer code", + "release": "1997-10-14" + } + }, + "tags": [ + "tempest", + "rath", + "lightning", + "bolt" + ] + }, + "sth": { + "code": "sth", + "name": "Stronghold", + "display": "Stronghold", + "nicknames": false, + "rarity": "e066", + "border": "e067", + "inner": false, + "release": "1998-03-02", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "st": { + "code": "st", + "name": "Gatherer code", + "release": "1998-03-02" + } + }, + "tags": [ + "stronghold", + "rath", + "door", + "gate" + ] + }, + "exo": { + "code": "exo", + "name": "Exodus", + "display": "Exodus", + "nicknames": false, + "rarity": "e069", + "border": "e06a", + "inner": false, + "release": "1998-06-15", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "st": { + "code": "ex", + "name": "Gatherer code", + "release": "1998-06-15" + } + }, + "tags": [ + "exodus", + "rath", + "bridge" + ] + } + } + }, + "command": { + "order": 2, + "name": "Command Zone", + "description": "Commander/EDH, Planechase, and other sets that use the command zone.", + "sets": { + "past": { + "code": "pvan", + "name": "Vanguard", + "display": "Vanguard", + "nicknames": false, + "rarity": "e05d", + "border": "e05e", + "inner": false, + "release": "1997-05-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "vanguard", + "feather" + ] + } + } + }, + "reprint": { + "order": 3, + "name": "Reprints", + "description": "Sets that contain only reprinted cards.", + "sets": { + "sum": { + "code": "sum", + "name": "Summer Magic", + "display": "Summer Magic (Edgar)", + "nicknames": false, + "rarity": "e01e", + "border": "e01f", + "inner": false, + "release": "1994-06-21", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "summer" + ] + }, + "fbb": { + "code": "fbb", + "name": "Foreign Black Border", + "display": "Foreign Black Border", + "nicknames": [ + "3rd Edition FBB", + "Revised FBB", + "FBB" + ], + "rarity": "e018", + "border": "e019", + "inner": "e01a", + "release": "1995-04-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "3edfbb": { + "code": "3edfbb", + "name": "Alternate", + "release": "1995-04-01" + } + }, + "tags": [ + "foreign", + "black", + "border" + ] + }, + "4bb": { + "code": "4bb", + "name": "Fourth Edition Foreign Black Border", + "display": "Fourth Edition FBB", + "nicknames": [ + "4th Edition FBB", + "FBB" + ], + "rarity": "e036", + "border": "e037", + "inner": "", + "release": "1995-04-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "4edfbb": { + "code": "4edfbb", + "name": "Alternate", + "release": "1995-04-01" + } + }, + "tags": [ + "foreign", + "black", + "border" + ] + }, + "chr": { + "code": "chr", + "name": "Chronicles", + "display": "Chronicles", + "nicknames": false, + "rarity": "e03c", + "border": "e03d", + "inner": false, + "release": "1995-07-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "ch": { + "code": "ch", + "name": "Gatherer code", + "release": "1995-07-01" + } + }, + "tags": [ + "chronicles" + ] + }, + "ren": { + "code": "ren", + "name": "Renaissance", + "display": "Renaissance", + "nicknames": false, + "rarity": "e03f", + "border": "e040", + "inner": false, + "release": "1995-08-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "renaissance", + "custom" + ] + }, + "rin": { + "code": "rin", + "name": "Rinascimento", + "display": "Rinascimento", + "nicknames": false, + "rarity": "e042", + "border": "e043", + "inner": false, + "release": "1995-08-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "renaissance", + "rinascimento", + "italian", + "custom" + ] + } + } + }, + "supplemental": { + "order": 4, + "name": "Supplemental Sets", + "description": "All other non-Standard printed sets designed to supplement the game.", + "sets": {} + }, + "digital": { + "order": 5, + "name": "Digital Sets", + "description": "Digital-only sets and releases with no print companion.", + "sets": { + "past": { + "code": "past", + "name": "Astral Cards", + "display": "Astral Cards", + "nicknames": [ + "Astral" + ], + "rarity": "e057", + "border": "e058", + "inner": false, + "release": "1997-04-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "astral" + ] + } + } + }, + "beginner": { + "order": 6, + "name": "Beginner Sets", + "description": "Preconfigured sets and decks geared towards new players.", + "sets": { + "itp": { + "code": "itp", + "name": "Introductory Two-Player Set", + "display": "Introductory 2-Player Set", + "nicknames": false, + "rarity": "e04e", + "border": "e04f", + "inner": false, + "release": "1996-12-31", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "x2ps": { + "code": "x2ps", + "name": "Backwards compatibility", + "release": "1996-12-31" + } + }, + "tags": [ + "introductory", + "beginner", + "starter", + "2ps" + ] + }, + "por": { + "code": "por", + "name": "Portal", + "display": "Portal", + "nicknames": false, + "rarity": "e05a", + "border": "e05b", + "inner": "e05c", + "release": "1997-05-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "portal", + "beginner" + ] + }, + "p02": { + "code": "por", + "name": "Portal Second Age", + "display": "Portal Second Age", + "nicknames": [ + "Portal 2" + ], + "rarity": "e06c", + "border": "e06d", + "inner": false, + "release": "1998-06-24", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "portal", + "second", + "beginner" + ] + } + } + }, + "premium": { + "order": 7, + "name": "Premium Sets", + "description": "Collectable, foil, or other special printed sets.", + "sets": { + "ced": { + "code": "ced", + "name": "Collectors' Edition", + "display": "Collectors' Edition", + "nicknames": [ + "CE" + ], + "rarity": "e009", + "border": "e00a", + "inner": "e00b", + "release": "1993-12-10", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "ce": { + "code": "ce", + "name": "Gatherer code", + "release": "1993-12-10" + } + }, + "tags": [ + "collector", + "collectors" + ] + }, + "cei": { + "code": "cei", + "name": "International Collectors' Edition", + "display": "Intl. Collectors' Edition", + "nicknames": [ + "IE", + "ICE", + "Intl. Collectors' Edition" + ], + "rarity": "e00c", + "border": "e00d", + "inner": "e00e", + "release": "1993-12-10", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "ie": { + "code": "ie", + "name": "Gatherer code", + "release": "1993-12-10" + } + }, + "tags": [ + "international", + "collector", + "collectors" + ] + } + } + }, + "promo": { + "order": 8, + "name": "Promos", + "description": "Promotional sets or cards included in other media or advertisements.", + "sets": { + "pdrc": { + "code": "pdrc", + "name": "Dragon Con", + "display": "Dragon Con", + "nicknames": false, + "rarity": "e021", + "border": "e022", + "inner": false, + "release": "1994-07-15", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "dragon", + "con", + "dragoncon" + ] + }, + "phpr": { + "code": "phpr", + "name": "HarperPrism Book Promos", + "display": "HarperPrism Book Promos", + "nicknames": [ + "Book Inserts", + "Book Promos" + ], + "rarity": "e027", + "border": "e028", + "inner": false, + "release": "1994-09-01", + "subgroup": false, + "version":"4.0.0", + "aliases": { + "pleaf": { + "code": "pbook", + "name": "Book Promo", + "release": "1994-09-01" + } + }, + "tags": [ + "harper", + "prism", + "book" + ] + }, + "pmei": { + "code": "pmei", + "name": "Media Inserts", + "display": "Media Inserts", + "nicknames": [ + "Leaf Promos", + "Media Promos" + ], + "rarity": "e02d", + "border": "e02e", + "inner": false, + "release": "1995-01-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "pleaf": { + "code": "pleaf", + "name": "Leaf Promo", + "release": "1995-01-01" + } + }, + "tags": [ + "media", + "insert", + "leaf" + ] + }, + "pmtg": { + "code": "pmtg", + "name": "Default Promo", + "display": "Default Promo", + "nicknames": [ + "MTG Logo Promo" + ], + "rarity": "e030", + "border": "e031", + "inner": false, + "release": "1995-01-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "plgm": { + "code": "plgm", + "name": "DCI Legends Membership", + "release": "1995-01-01" + }, + "parl": { + "code": "parl", + "name": "Arena League 1996", + "release": "1996-08-02" + } + }, + "tags": [ + "dci", + "dci legends", + "membership" + ] + } + } + }, + "standalone": { + "order": 9, + "name": "Standalone Sets", + "description": "Experimental, out-of-world, draft inovative, or other releases that can be played on their own.", + "sets": { + "ugl": { + "code": "ugl", + "name": "Unglued", + "display": "Unglued", + "nicknames": false, + "rarity": "e06f", + "border": "e070", + "inner": false, + "release": "1998-08-11", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "unglued", + "acorn" + ] + } + } + }, + "alternative": { + "order": 10, + "name": "Alternatives", + "description": "Other official versions of set symbols used by WOTC.", + "sets": { + "legchr": { + "code": "legchr", + "name": "Legends (Chronicles)", + "display": "Legends (Chronicles)", + "nicknames": [ + "Legends (CHR Alternative)" + ], + "rarity": "f8f6", + "border": "f8f5", + "inner": false, + "release": "1995-07-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "leg2": { + "code": "leg2", + "name": "Short alternate code", + "release": "1995-07-01" + } + }, + "tags": [ + "legends", + "chronicles", + "alternative" + ] + }, + "pgc98": { + "code": "pgc98", + "name": "Gen Con 1998 Oversized Promo", + "display": "Gen Con 98 Promo", + "nicknames": [ + "Oversized 90s Promo", + "Gen Con 98 Oversized Promo" + ], + "rarity": "f8f4", + "border": "f8f3", + "inner": false, + "release": "1996-04-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "oversized", + "gen con", + "[[Incoming!|o90p]]" + ] + }, + "po": { + "code": "po", + "name": "Portal (Gatherer)", + "display": "Portal (Gatherer)", + "nicknames": [ + "Portal (Gatherer Alternative)" + ], + "rarity": "f8f2", + "border": "f8f1", + "inner": "f8f0", + "release": "1997-05-01", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "por2": { + "code": "por2", + "name": "Standardized code", + "release": "1997-05-01" + } + }, + "tags": [ + "portal", + "gatherer", + "alternative" + ] + }, + "wl": { + "code": "wl", + "name": "Weatherlight (Gatherer)", + "display": "Weatherlight (Gatherer)", + "nicknames": [ + "Weatherlight (Gatherer Alternative)" + ], + "rarity": "f8ef", + "border": "f8ee", + "inner": false, + "release": "1997-06-09", + "subgroup": false, + "version": "4.0.0", + "aliases": { + "por2": { + "code": "wth2", + "name": "Standardized code", + "release": "1997-06-09" + } + }, + "tags": [ + "weatherlight", + "gatherer", + "alternative" + ] + } + } + }, + "unofficial": { + "order": 11, + "name": "Unofficial", + "description": "Home grown symbols to fill in gaps and other game needs.", + "sets": { + "palp": { + "code": "palp", + "name": "Asia Pacific Land Program", + "display": "APAC Lands", + "nicknames": [ + "APAC Lands", + "APAC", + "APAC Promos" + ], + "rarity": "e072", + "border": "e073", + "inner": false, + "release": "1998-09-01", + "subgroup": false, + "version": "4.0.0", + "aliases": false, + "tags": [ + "apac", + "asia", + "pacific", + "lands" + ] + } + } + } +} \ No newline at end of file diff --git a/docs/src/layouts/_default/baseof.html b/docs/src/layouts/_default/baseof.html new file mode 100644 index 0000000..bfb0b29 --- /dev/null +++ b/docs/src/layouts/_default/baseof.html @@ -0,0 +1,29 @@ + + + + + {{ block "title" . }}{{ .Site.Title }}{{ end }} + + + + + + + + + + + + + + + {{ block "header" . }} + {{ end }} + {{ block "main" . }} + {{ end }} + {{ block "footer" . }} + {{ end }} + {{ block "modal" . }} + {{ end }} + + \ No newline at end of file diff --git a/docs/src/layouts/_default/single.html b/docs/src/layouts/_default/single.html new file mode 100644 index 0000000..2948bf9 --- /dev/null +++ b/docs/src/layouts/_default/single.html @@ -0,0 +1,19 @@ +{{ define "header" }} +{{ partial "header.html" . }} +{{ end }} + +{{ define "main" }} +
    + {{ .Content }} +
    +{{ end }} + +{{ define "footer" }} +{{ partial "footer.html" . }} +{{ end }} + +{{ define "modal" }} + {{ if isset .Params "modal" }} + {{ partial "modal.html" . }} + {{ end }} +{{ end }} \ No newline at end of file diff --git a/docs/src/layouts/index.html b/docs/src/layouts/index.html new file mode 100644 index 0000000..263d5e3 --- /dev/null +++ b/docs/src/layouts/index.html @@ -0,0 +1,13 @@ +{{ define "header" }} +{{ partial "header.html" . }} +{{ end }} + +{{ define "main" }} +
    + {{ .Content }} +
    +{{ end }} + +{{ define "footer" }} +{{ partial "footer.html" . }} +{{ end }} \ No newline at end of file diff --git a/docs/src/layouts/partials/footer.html b/docs/src/layouts/partials/footer.html new file mode 100644 index 0000000..f95d738 --- /dev/null +++ b/docs/src/layouts/partials/footer.html @@ -0,0 +1,96 @@ + +
    +
    +

    + Keyrune.css +

    +

    + An MTG icon font built with ♥ by Andrew Gioia. +

    + + + + + Star + +
    +
    +
    + Project +
    + +
  • + + Overview +
  • +
  • + + + + + + Set symbols +
  • +
  • + + + + + Documentation +
  • +
  • + + + + + + + + + + + + Examples +
  • +
  • + + + + + + + + + Cheatsheet +
  • +
  • + + + + + GitHub project +
  • +
  • + + + + Gitea mirror +
  • +
    +
    +
    +
    + Licensing and terms of use +
    +

    + Keyrune is free, unofficial "Fan Content" permitted under the Wizards of the Coast Fan Content Policy. The Magic: the Gathering™ set symbols themselves are copyright Wizards of the Coast, LLC, a subsidiary of Hasbro, Inc. Keyrune is not produced by, endorsed by, supported by, or affiliated with Wizards of the Coast, and I develop and distribute this project solely as a resource to enable other Fan Content. +

    +

    + The Keyrune font is licensed under the SIL OFL 1.1. Please review the terms of that license for attribution, distribution, incorporation, and bundling requirements. +

    +

    + The source code and other project files, including CSS, SCSS, and his website, are licensed separately under the GPL 3.0 License. You're free to share or modify any of the source code or this website's design so long as you also distribute your project under the same license. +

    +
    +
    + \ No newline at end of file diff --git a/docs/src/layouts/partials/header.html b/docs/src/layouts/partials/header.html new file mode 100644 index 0000000..bf9b4a8 --- /dev/null +++ b/docs/src/layouts/partials/header.html @@ -0,0 +1,70 @@ +
    + + + + {{ .Site.Title }} + + + {{ .Site.Data.project.version }} + + + + + + +
    \ No newline at end of file diff --git a/docs/src/layouts/partials/modal.html b/docs/src/layouts/partials/modal.html new file mode 100644 index 0000000..5319415 --- /dev/null +++ b/docs/src/layouts/partials/modal.html @@ -0,0 +1,159 @@ + +
    + + Set name + +
    + + + + + + + +
    +
    +

    + Set name +

    +

    + Set code +

    +
    +
    + + +
    +
    + + +
    +
    + +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    +
    +
    + + +
    +
    + +
    +
    + Tags +
    +
    +
    + +
    + +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + + +
  • +
    + +
  • + +
  • +
  • + +
  • +
  • + +
  • +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/docs/src/layouts/shortcodes/data/count.html b/docs/src/layouts/shortcodes/data/count.html new file mode 100644 index 0000000..b00804b --- /dev/null +++ b/docs/src/layouts/shortcodes/data/count.html @@ -0,0 +1,8 @@ +{{- $scratch := newScratch -}} +{{- $scratch.Set "count" 0 -}} +{{- range $groups := .Site.Data.sets -}} + {{- range $sets := $groups.sets -}} + {{- $scratch.Add "count" 1 -}} + {{- end -}} +{{- end -}} +{{ $scratch.Get "count" }} \ No newline at end of file diff --git a/docs/src/layouts/shortcodes/data/version.html b/docs/src/layouts/shortcodes/data/version.html new file mode 100644 index 0000000..5d14fdf --- /dev/null +++ b/docs/src/layouts/shortcodes/data/version.html @@ -0,0 +1 @@ +{{ .Site.Data.project.version }} \ No newline at end of file diff --git a/docs/src/layouts/shortcodes/icons.html b/docs/src/layouts/shortcodes/icons.html new file mode 100644 index 0000000..71ead05 --- /dev/null +++ b/docs/src/layouts/shortcodes/icons.html @@ -0,0 +1,46 @@ +{{- range sort .Site.Data.sets "order" "asc" -}} + {{- if isset . "sets" -}} + {{- $group := . -}} +
    +
    +

    + {{ .name }} +

    +

    + {{ .description }} +

    +
    +
    +
    + {{- range $index, $set := sort $group.sets "release" "asc" -}} +
    + + {{ $set.code }} + {{ $set.display }} +
    + {{- end -}} +
    +
    +
    + {{- end -}} +{{- end -}} + \ No newline at end of file diff --git a/docs/src/resources/scss/_home.scss b/docs/src/resources/scss/_home.scss new file mode 100644 index 0000000..864f7d4 --- /dev/null +++ b/docs/src/resources/scss/_home.scss @@ -0,0 +1,145 @@ +aside { + margin-top: 1rem; + text-align: center; + width: min(91.66667%, 900px); + + > p.big { + font-size: 1.2rem; + line-height: 2rem; + padding: 0 0.5rem; + } +} +@media only screen and (min-width: 768px) { + aside > p.big { + font-size: 1.3rem; + padding: 0; + } +} + +dialog { + background: var(--bg-content); + border: none; + border-radius: 1.5rem; + color: var(--text-default); + padding: 0; + width: calc(100% - 3rem); +} +@media only screen and (min-width: 768px) { + dialog { + border-radius: 2rem; + width: min(91.6667%, 1440px); + } +} + +#explode { + display: flex; + flex-direction: column; + margin-top: 3rem; + + > div.explode-inner { + width: 100%; + } + + > div.explode-text { + padding-left: 1.5rem; + padding-right: 1.5rem; + } +} +@media only screen and (min-width: 1025px) { + #explode { + flex-direction: row; + margin-top: 6rem; + + > div.explode-inner { + width: 50%; + } + + > div.explode-text { + padding-left: 0; + padding-right: 3rem; + } + } +} + +// +// isometric icon + +div.isometric { + align-self: stretch; + display: flex; + font-family: keyrune; + height: 12rem; + justify-content: center; + margin: 0; + perspective: 50rem; + position: relative; + width: 100%; + + svg { + position: absolute; + + &.border { + z-index: 1; + } + &.rarity { + z-index: 2; + } + &.inner { + z-index: 3; + } + } + + &.explode { + svg.border { + animation: explode-border 16s ease-in-out infinite; + } + svg.rarity { + animation: explode-rarity 16s ease-in-out infinite; + } + svg.inner { + animation: explode-inner 16s ease-in-out infinite; + } + } +} +@keyframes explode-border { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(-20%) translateY(-4%) rotateY(37.5deg) scale(1); + } +} +@keyframes explode-rarity { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(2.5%) translateY(2.5%) rotateY(37.5deg) scale(1); + } +} +@keyframes explode-inner { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(25%) translateY(10%) rotateY(37.5deg) scale(1); + } +} +@media only screen and (min-width: 1025px) { + div.isometric { + height: 100%; + } +} + +// +// features + +.feature { + grid-column: span 6 / span 6; +} +@media only screen and (min-width: 768px) { + .feature { grid-column: span 3 / span 3; } +} +@media only screen and (min-width: 1025px) { + .feature { grid-column: span 2 / span 2; } +} \ No newline at end of file diff --git a/docs/src/resources/scss/_layout.scss b/docs/src/resources/scss/_layout.scss new file mode 100644 index 0000000..658b34b --- /dev/null +++ b/docs/src/resources/scss/_layout.scss @@ -0,0 +1,394 @@ +$keyrune-ui: ( + "black": ( + "100": "#ddd", + "300": "#3a3a3a", + "500": "#202124", + "600": "#18191b", + "700": "#131417", + "900": "#000", + ), + "blue": ( + "300": "#29c9ff", //#74c0fc + "500": "#0060e4", + ), + "tan": ( + "100": "#f2f1f1", + "300": "#e0dfde", + "500": "#d2d1cf", + "700": "#8e8d88", + "900": "#575754", + ), + "white": "#fff", +); + +$keyrune-ui-font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, + Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, + Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; + +:root { + --bg-body: #{map.get($keyrune-ui, "white")}; // default page background + --bg-hover: #{map.get($keyrune-ui, "tan", "100")}; // slightly darker page accent + --bg-content: #{map.get($keyrune-ui, "tan", "300")}; // contrast background for white boxes + --bg-accent: #{map.get($keyrune-ui, "tan", "500")}; // slightly darker content accent + --bg-border: #{map.get($keyrune-ui, "black", "900")}; // top border + --bg-button: #{map.get($keyrune-ui, "white")}; // button background + --bg-active: #{map.get($keyrune-ui, "tan", "500")}; // button active state background + --icon-default: #{map.get($keyrune-ui, "black", "700")}; // default .ss rarity color + --link-default: #{map.get($keyrune-ui, "blue", "500")}; // primary brand color + --text-default: #{map.get($keyrune-ui, "black", "900")}; // default body text color + --text-accent: #{map.get($keyrune-ui, "tan", "700")}; // alternate body text color + --text-contrast: #{map.get($keyrune-ui, "white")}; // opposite of body text color + --svg-border: #{map.get($keyrune-ui, "white")}; // exploding svg border color + --rgba-fg: rgba(255,255,255,0.916667); + --rgba-modal: rgba(0, 0, 0, 0.75); + + &[data-mode="dark"] { + --bg-body: #{map.get($keyrune-ui, "black", "500")}; + --bg-hover: #{map.get($keyrune-ui, "black", "700")}; + --bg-content: #{map.get($keyrune-ui, "black", "300")}; + --bg-accent: #{map.get($keyrune-ui, "tan", "700")}; + --bg-border: #{map.get($keyrune-ui, "tan", "900")}; + --bg-button: #{map.get($keyrune-ui, "black", "600")}; + --bg-active: #{map.get($keyrune-ui, "blue", "300")}; + --icon-default: #{map.get($keyrune-ui, "black", "900")}; + --link-default: #{map.get($keyrune-ui, "blue", "300")}; + --text-default: #{map.get($keyrune-ui, "white")}; + --text-accent: #{map.get($keyrune-ui, "tan", "500")}; + --text-contrast: #{map.get($keyrune-ui, "black", "100")}; + --svg-border: #{map.get($keyrune-ui, "tan", "900")}; + --rgba-fg: rgba(0,0,0,0.9); + --rgba-modal: rgba(0, 0, 0, 0.5); + } +} + +@font-face { + font-family: 'Beleren'; + src: url( '../font/beleren.eot' ); + src: url( '../font/beleren.woff' ) format( 'woff' ), + url( '../font/beleren.ttf' ) format( 'truetype' ), + url( '../font/beleren.svg' ) format( 'svg' ); + font-weight: normal; + + font-style: normal; +} + +html { + font-family: #{$keyrune-ui-font-family}; + font-size: 16px; +} + +body { + align-items: center; + background: var(--bg-body); + border-top: 5px solid var(--bg-border); + color: var(--text-default); + display: flex; + flex-direction: column; + margin: 0; + //transition: background 100ms ease-in-out, color 100ms ease-in-out; +} + +header { + align-items: center; + display: flex; + flex-direction: row; + height: 5rem; + justify-content: space-between; + width: 100%; + + mark { + background: transparent; + color: var(--text-default); + flex-shrink: 0; + font-family: Beleren; + font-size: 1.5rem; + margin-left: 1.5rem; + + i { + color: var(--text-default) !important; + } + + b { + border: 0.1rem solid var(--text-default); + border-radius: 0.35rem; + font-family: #{$keyrune-ui-font-family}; + font-size: 0.75rem; + font-weight: normal; + margin: 0 0 0 0.5rem; + padding: 0.2rem 0.4rem; + position: relative; + top: -0.2rem; + } + } + + menu { + flex-grow: 1; + } + + #toggle-nav { + position: absolute; + right: 1.5rem; + z-index: 20; + + svg { + .line { + opacity: 1; + transform: rotate(0) translateY(0) translateX(0); + transform-origin: 1em 1em; + transition: transform 0.3s ease-in-out, opacity 0.2s ease-in-out; + + &.top { + transform-origin: 6px 6px; + } + + &.bot { + transform-origin: 3px 17px; + } + } + + &.closed { + .line.top { + transform: rotate(45deg) scale(1.1); + } + .line.mid { + opacity: 0; + } + .line.bot { + transform: rotate(-45deg) scale(1.1); + } + } + } + } + + nav { + transform: translateY(-100%); + flex-direction: column; + margin-right: 2.5rem; + + > a { + align-items: center; + color: var(--text-default); + display: flex; + margin: 0 1rem; + + > svg { + margin-right: 0.5rem; + } + + > span { + text-decoration: underline transparent; + transition: text-decoration 150ms ease-in-out; + -webkit-text-underline-position: from-font; + text-underline-position: under-font; + } + + &:hover span { + text-decoration-color: var(--text-default); + } + } + + &.mobile { + background: var(--rgba-fg); + position: fixed; + top: 0; + left: 0; + padding-top: 1rem; + padding-bottom: 2.5rem; + width: 100%; + z-index: 10; + border-radius: 0 0 2rem 2rem; + transform: translateY(0); + transition: transform 200ms ease-in-out; + + > a { + font-size: 1.75rem; + padding: 0.5rem 1rem; + + > span { + padding-left: 0.5rem; + } + } + + #hide-nav { + right: 0; + position: absolute; + top: 1rem; + } + + #mode { + margin-top: 1rem; + text-align: center; + + label.toggle { + height: 2.5rem; + width: 8rem; + border-radius: 1.5rem; + + &::after { + font-size: 1.33rem; + width: 3rem; + height: 2.1rem; + } + } + input.toggle:checked + label::after { + left: calc(100% - 0.25rem); + } + } + } + } +} +@media only screen and (min-width: 768px) { + #toggle-nav { + display: none; + } + header { + mark { + margin-left: 2.5rem; + } + nav { + display: flex; + flex-direction: row; + transform: none; + } + } +} + +main { + align-items: center; + display: flex; + flex-direction: column; + width: 100%; +} + +section { + width: 100%; +} + +article { + display: flex; + flex-direction: column; + width: min(83.3333%, 1200px); +} + +footer { + background-color: #{map.get($keyrune-ui, "black", "700")}; + color: #{map.get($keyrune-ui, "white")}; + display: flex; + justify-content: center; + padding: 3rem 0; + width: 100%; + + &.border { + border-top: 1px solid #{map.get($keyrune-ui, "black", "300")}; + } + + menu { + li { + margin-bottom: 0.5rem; + } + } + + iframe html body { + background: var(--bg-body); + } +} + +// +// dark/light toggle + +#mode { + height: 2rem; + + input.toggle { + height: 0; + width: 0; + visibility: hidden; + + &:checked + label { + background: var(--bg-body); + + &::after { + content: "\e024"; + left: calc(100% - 0.2rem); + transform: translateX(-100%); + } + } + } + + label.toggle { + cursor: pointer; + width: 4rem; + height: 1.75rem; + border: 2px solid var(--bg-accent); + display: inline-flex; + border-radius: 1rem; + position: relative; + transition: border-color 150ms ease-in-out; + + &:hover { + border-color: var(--text-accent); + } + + &::after { + content: "\e012"; + color: var(--text-default); + font-family: keyrune; + position: absolute; + display: flex; + align-items: center; + justify-content: center; + top: 0.2rem; + left: 0.2rem; + width: 1.75rem; + height: 1.35rem; + background: var(--bg-content); + border-radius: 1rem; + transition: all 300ms ease-in-out; + } + + &:active::after { + width: 2rem; + } + } +} +:root[data-mode="dark"] { + #mode label::after { + content: "\e024"; + left: calc(100% - 0.2rem); + transform: translateX(-100%); + } +} + +// +// design stuff + +.angle { + &-top { + &::before { + content: ''; + display: block; + height: 4rem; + background: var(--bg-body); + position: absolute; + top: 0; + width: 100%; + clip-path: polygon(0% 0%, 100% 0, 100% 0, 0% 100%); + } + } +} + +.checkerboard { + background-image: + linear-gradient(45deg, var(--bg-hover) 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, var(--bg-hover) 75%), + linear-gradient(45deg, transparent 75%, var(--bg-hover) 75%), + linear-gradient(45deg, var(--bg-hover) 25%, transparent 25%); + background-size: 1.5rem 1.5rem; + background-position: 0 0, 0 0, -0.75rem -0.75rem, 0.75rem 0.75rem; +} + +.bg { + &-accent { background-color: var(--bg-accent); } + &-black { background-color: #{map.get($keyrune-ui, "black", "700")}; } + &-content { background-color: var(--bg-content); } +} \ No newline at end of file diff --git a/docs/src/resources/scss/_sets.scss b/docs/src/resources/scss/_sets.scss new file mode 100644 index 0000000..f8d463d --- /dev/null +++ b/docs/src/resources/scss/_sets.scss @@ -0,0 +1,646 @@ +// +// icon menu buttons + +menu { + list-style: none; + margin: 0; + padding: 0; + + li { + display: flex; + margin: 0; + } + + input[type="radio"], + input[type="checkbox"] { + height: 0; + width: 0; + visibility: hidden; + position: absolute; + } + + label { + align-items: center; + cursor: pointer; + display: flex; + height: 3rem; + justify-content: center; + margin: 0 0.25rem; + width: 3.25rem; + background: var(--bg-button); + border: 1px solid #{map.get($keyrune-ui, "black", "900")}; + border-radius: 0.625rem; + box-shadow: 2px 2px 0 0 #{map.get($keyrune-ui, "black", "900")}; + position: relative; + + &.small { + height: 2.5rem; + width: 2.75rem; + } + + &:hover:not(.disabled) { + background: var(--bg-hover); + } + + &.disabled, + &[disabled="disabled"] { + cursor: not-allowed; + opacity: 0.33; + } + } + + input[type="radio"]:checked + label, + input[type="checkbox"]:checked + label, + label.checked { + background: var(--bg-active); + box-shadow: none; + color: #{map.get($keyrune-ui, "black", "900")}; + top: 2px; + left: 2px; + } + + &.group { + + &#icon-rarity { + margin: 0 auto; + } + + label { + margin: 0; + + &.left { + border-radius: 0.625rem 0 0 0.625rem; + } + &.center { + border-radius: 0; + } + &.right { + border-radius: 0 0.625rem 0.625rem 0; + } + } + } +} +:root[data-mode="dark"] { + menu input#rarity_foil:checked + label svg, + menu label.checked svg.foil { + fill: #{map.get($keyrune-ui, "black", "900")}; + } + menu input#rarity_common:not(:checked) + label svg { + fill: #{map.get($keyrune-ui, "white")}; + } +} +@media only screen and (min-width: 1025px) { + menu.group#icon-rarity { + margin: 0 1rem 0 0; + } +} + +// +// icon grid + +#icons { + + .set { + &-group { + display: flex; + flex-direction: column; + + &-info { + background: var(--bg-content); + z-index: 20; + } + + &-grid { + gap: 1rem; + grid-template-columns: repeat(2, minmax(0, 1fr)); + margin-bottom: 1.5rem; + } + + &.hidden { + display: none; + } + } + } + + figure { + align-items: center; + background-color: var(--bg-body); + border-radius: 1rem; + cursor: pointer; + display: flex; + flex-direction: column; + justify-content: flex-start; + margin: 0; + padding: 0; + width: 100%; + + &:hover { + background-color: var(--bg-hover); + animation: hover 200ms; + } + + > .ss { + font-size: 3rem; + margin: 1rem 0; + + &.ss-rarity-common:not(.ss-inner)::before { + color: var(--text-default) !important; + } + } + + > span { + margin: 0 0.5rem 1.25rem; + + &.icon-code { + display: none; + } + + &.icon-name { + line-height: 1.33rem; + } + } + + &.hidden { + display: none; + } + } + + &[data-density="roomy"] { + figure > span.icon-name { + text-align: center; + } + } + + &[data-density="normal"] { + div.grid { + gap: 1.5rem; + margin-bottom: 3rem; + } + div.sticky { + padding-bottom: 2rem; + } + figure { + > .ss { + font-size: 2.25rem; + margin: 1rem 0 0.75rem; + } + > span.icon-name { + display: none; + } + > span.icon-code { + display: inline; + margin: 0 0.5rem 1rem; + } + } + } + + &[data-density="dense"] { + div.grid { + gap: 1rem; + margin-bottom: 2rem; + } + div.sticky { + padding-bottom: 1rem; + } + figure { + flex-direction: row; + > .ss { + font-size: 1.5rem; + margin: 1rem; + } + > span.icon-name { + display: none; + } + > span.icon-code { + display: inline; + margin: 1rem 1rem 1rem 0; + } + } + } +} +@keyframes hover { + 0% { + background-color: var(--bg-body); + } + 100% { + background-color: var(--bg-hover); + } +} +@media only screen and (min-width: 1025px) { + #icons .set { + &-group { + flex-direction: row; + + &-info { + width: 20%; + padding-bottom: 3rem; + } + &-icons { + width: 80%; + } + &-grid { + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 2rem; + margin-bottom: 4rem; + } + } + } +} +// common dark mode needs to be true black +:root[data-mode="dark"] { + #icons figure .ss.ss-rarity-common.ss-inner::before { + color: #000 !important; + } + #icons figure .ss.ss-rarity-common.ss-border:not(.ss-inner)::after { + color: #000 !important; + } +} + +// +// search box + +form { + + .input-wrapper { + svg { + position: absolute; + top: 1.25rem; + + &.search { + left: 1.5rem; + } + + &.clear { + cursor: pointer; + right: 8.5rem; + } + } + } + + input[type="text"] { + align-self: stretch; + background: var(--bg-body); + border: 0.15rem solid var(--text-default); + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover); + height: 3.6rem; + border-radius: 2rem; + color: var(--text-default); + font-size: 1.25rem; + padding: 0 2rem 0 3.5rem; + width: calc(100% - 5.5rem); + + &::placeholder { + color: var(--bg-accent); + font-size: 1.25rem; + } + + &:focus { + outline: none; + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover), + 0 0 0 1px var(--bg-body), + 0 0 0 0.25rem #{map.get($keyrune-ui, "blue", "300")}; + } + } + + button.button { + border-color: var(--text-default); + border-radius: 0 2rem 2rem 0; + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover); + cursor: pointer; + height:100%; + padding-right: 1.75rem; + position: absolute; + top: 0; + right: 0; + + &:active, + &:focus { + left: auto; + top: 0; + right: 0; + box-shadow: inset 0 0.25rem 0 0 var(--bg-content); + } + } + + .search-left { + width: 100%; + text-align: center; + } +} +@media only screen and (min-width: 769px) { + form .search-left { + width: auto; + text-align: left; + padding-left: 2rem; + } +} + +// +// icon details modal + +object { + width: 100vw; + height: 100vh; + padding: 0; + margin: 0; + position: fixed; + top: 0; + left: 0; + background: var(--rgba-modal); + //backdrop-filter: blur(0.5rem); + display: flex; + align-items: center; + justify-content: center; + visibility: hidden; + transition: visibility 200ms ease-in-out; + z-index: 100; + + details { + background: var(--rgba-fg); //rgba(242,241,241,0.85); + box-shadow: 0 0 12rem 0 var(--icon-default); + display: flex; + flex-direction: column; + border-radius: 1.5rem; + position: relative; + opacity: 0; + transform: scale(1.1) translateY(0); + transition: opacity 200ms ease-in-out, transform 200ms ease-in-out; + overflow: hidden; + width: 91.66667vw; + + summary { + //background: var(--bg-body); + //border-bottom: 1px solid var(--bg-accent); + display: none; + pointer-events: none; + } + + .details { + display: flex; + flex-direction: column; + } + + .close { + position: absolute; + top: 1.5rem; + right: 1.2rem; + z-index: 10; + } + + .icon { + background-color: var(--bg-body); + //border-left: 1px solid var(--text-accent); + align-items: center; + display: flex; + justify-content: space-between; + padding: 2rem 0.5rem 1rem; + + i.ss { + color: var(--text-default); + font-size: 8em; + line-height: 1.75ex; + padding-bottom: 1.5rem; + + &.ss-rarity-common:not(.ss-inner)::before { + color: var(--text-default) !important; + } + } + + &-controls { + display: none; + } + } + + h3 { + background: #f4d4e9; + color: #df3ea2; + border: 1px solid #ed73be; + display: inline-flex; + align-self: flex-start; + padding: 2px 5px; + border-radius: 0.33rem; + } + + .table { + justify-content: space-between; + font-size: 1.1rem; + + label { + font-size: 1rem; + font-weight: bold; + margin-bottom: 0.25rem; + text-transform: uppercase; + + &.aliases { + margin-bottom: 0.1rem; + } + } + + .class, + .rarity, + .border, + .inner, + .aliases > span { + font-family: monospace; + } + + ul.glyphs { + list-style: none; + margin: 0; + padding: 0; + + li { + align-items: center; + display: flex; + flex-direction: row; + justify-content: flex-start; + + i { + font-family: keyrune; + font-style: normal; + text-align: center; + width: 1.75em; + } + + &.false { + display: none; + } + } + + i { + font-size: 1.2rem; + width: 1.75em; + + &::before, + &::after, + &::marker { + color: var(--text-default); + } + } + } + + table.aliases { + border-spacing: 0; + width: 100%; + + td.code { + font-family: monospace; + font-size: 1rem; + padding-right: 0.5rem; + } + + td.set { + font-size: 1rem; + position: relative; + width: 100%; + + &::before { + content: ' '; + visibility: hidden; + } + + span { + position: absolute; + left: 0; + right: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + } + + .actions { + display: none; + + a.action-button { + position: relative; + + span { + text-decoration: underline transparent; + transition: text-decoration 150ms ease-in-out; + -webkit-text-underline-position: from-font; + text-underline-position: under-font; + } + + &:hover span { + text-decoration-color: var(--text-default); + } + + em { + font-style: normal; + display: flex; + width: auto; + margin: 0 auto; + background: var(--text-default); + position: absolute; + top: 0; + left: 50%; + white-space: nowrap; + min-height: 1.5rem; + color: var(--bg-body); + transform: translateX(-50%) translateY(-50%); + margin-top: -1rem; + opacity: 0; + font-size: 1rem; + padding: 0.25rem 0.75rem; + align-items: center; + justify-content: center; + border-radius: 0.5rem; + } + } + } + } + + .tags { + display: flex; + font-size: 0.9rem; + margin-left: -2px; + padding: 0.5rem 0 0; + + a { + background: var(--text-default); + border-radius: 2rem; + color: var(--bg-body); + margin: 0 0.5rem 0 0; + padding: 0.25rem 1rem 0.3rem; + + &.card { + position: relative; + padding-left: 40px; + + &::before { + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0' y='0' width='25.2' height='36' viewBox='0 0 70 100'%3E%3Cg id='Layer_1'%3E%3Cpath d='M10 0 L60 0 C65.523 0 70 4.477 70 10 L70 90 C70 95.523 65.523 100 60 100 L10 100 C4.477 100 0 95.523 0 90 L0 10 C0 4.477 4.477 0 10 0 z' fill='%23191511'/%3E%3Cpath d='M9.638 5.533 L60.362 5.533 C62.572 5.533 64.362 7.375 64.362 9.648 L64.362 90.353 C64.362 92.625 62.572 94.467 60.362 94.467 L9.638 94.467 C7.428 94.467 5.638 92.625 5.638 90.353 L5.638 9.648 C5.638 7.375 7.428 5.533 9.638 5.533 z' fill='%2351765C'/%3E%3Cpath d='M11.5 57.388 L58.5 57.388 L58.5 88.388 L11.5 88.388 L11.5 57.388 z' fill='%23B89A82'/%3E%3Cpath d='M11.5 23.798 L58.5 23.798 L58.5 50.464 L11.5 50.464 L11.5 23.798 z' fill='%2362A5C0'/%3E%3Cpath d='M23.002 37.274 C22.158 35.902 19.11 32.575 19.693 29.21 C25.668 37.92 34.696 38.018 44.438 37.62 C41.357 38.74 37.543 40.962 33.44 40.532 C31.004 44.713 28.025 42.796 23.736 42.796 C21.054 43.974 17.834 43.413 14.841 43.605 C16.593 43.381 17.422 41.732 18.853 41.107 C20.734 40.285 23.163 40.39 25.191 39.399' fill='%23B54048'/%3E%3Cpath d='M31.826 38.669 C30.084 38.669 28.672 37.656 28.672 36.407 C28.672 35.159 30.084 34.146 31.826 34.146 C33.568 34.146 34.98 35.159 34.98 36.407 C34.98 37.656 33.568 38.669 31.826 38.669 z' fill='%23B54048'/%3E%3Cpath d='M11.5 10.798 L58.5 10.798 L58.5 23.798 L11.5 23.798 L11.5 10.798 z' fill='%2380C2DD'/%3E%3Cpath d='M44.78 18.389 C-26.121 27.703 92.917 29.765 45.03 18.389' fill='%2335666C'/%3E%3C/g%3E%3C/svg%3E"); + content: ''; + display: block; + width: 25.2px; + height: 36px; + position: absolute; + top: 0; + left: 0; + transition: transform 150ms ease-in-out; + transform: rotate(-20deg) translateY(-3px) translateX(6px); + } + + &:hover::before { + transform: rotate(-30deg) translateY(-3px) translateX(6px) scale(1.04); + } + } + } + } + + } + + &.active { + visibility: visible; + + details { + opacity: 1; + transform: scale(1) translateY(-3rem); + } + } +} +@keyframes fadeup { + 0% { + opacity: 0; + transform: translateX(-50%) translateY(-50%); + } + 30%, 70% { + opacity: 1; + transform: translateX(-50%) translateY(-75%); + } + 100% { + opacity: 0; + transform: translateX(-50%) translateY(-120%); + } +} +@media only screen and (min-width: 1025px) { + object details { + width: calc(16 * 2 * 16px * 1.75 + 2rem); + + .details { + flex-direction: row; + min-width: 50%; + } + + .icon { + width: calc(16 * 16px * 1.75); + + i.ss { + font-size: 16em; + } + + &-controls { + display: flex; + padding: 0 0 2rem; + } + } + + .table { + .actions { + display: flex; + } + } + } +} \ No newline at end of file diff --git a/docs/src/resources/scss/_type.scss b/docs/src/resources/scss/_type.scss new file mode 100644 index 0000000..c0763b8 --- /dev/null +++ b/docs/src/resources/scss/_type.scss @@ -0,0 +1,155 @@ +h1 { + font-family: Beleren; + font-size: 3rem; + font-weight: 600; +} + +h2 { + font-size: 1.5rem; +} +@media only screen and (min-width: 1025px) { + h2 { + font-size: 1.75rem; + } +} + +h3 { + font-size: 1.25rem; + font-weight: 600; +} + +h4 { + font-family: Beleren; + font-size: 1.4rem; + font-weight: 600; +} + +h5 { + font-size: 1.1rem; + font-weight: 600; + text-transform: uppercase; +} + +p, +li, +span { + font-weight: 500; + line-height: 1.6rem; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + > a { + text-decoration: underline; + -webkit-text-underline-position: from-font; + text-underline-position: from-font; + + &[target="blank"] { + &::after { + content: "\2197"; + display: inline-block; + //font-family: keyrune; + margin-left: 0.1rem; + position: relative; + text-decoration: none; + top: 0; + transition: top 100ms ease-in-out; + } + &:hover::after { + top: -3px; + } + } + } + + &.big { + font-size: 1.15rem; + font-weight: 400; + line-height: 1.875rem; + } +} +@media only screen and (min-width: 1025px) { + p.big { + font-size: 1.3rem; + line-height: 2rem; + } +} + +a, +button { + color: inherit; + text-decoration: none; + + &.button { + background: var(--bg-button); + border: 2px solid #{map.get($keyrune-ui, "black", "900")}; + border-radius: 0.625rem; + box-shadow: 3px 3px 0 0 #{map.get($keyrune-ui, "black", "900")}; + color: var(--text-default); + font-size: 1.25rem; + padding: 0.75rem 1.5rem 0.8rem; + position: relative; + //transition: background 125ms ease-in-out; + + &:focus, + &:active { + box-shadow: none; + top: 3px; + left: 3px; + } + + &:hover { + background: var(--bg-hover); + } + } + + &.bubble { + position: relative; + + > img, + > svg { + position: relative; + z-index: 1; + } + + &::before { + content: ''; + display: block; + position: absolute; + width: calc(100% + 2rem); + height: calc(100% + 2rem); + border-radius: 1rem; + background: #{map.get($keyrune-ui, "black", "500")}; + top: -1rem; + left: -1rem; + z-index: 0; + transform: scale(0.5); + transition: opacity 100ms ease-in-out; + opacity: 0; + } + + &:hover::before { + opacity: 1; + animation: bubble 200ms ease-in-out; + transform: scale(1); + } + + &.light { + &::before { + background: var(--bg-hover); + } + &::before { + + } + } + } +} +@keyframes bubble { + 0% { + transform: scale(0.5); + } + 80% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} \ No newline at end of file diff --git a/docs/src/resources/scss/_utils.scss b/docs/src/resources/scss/_utils.scss new file mode 100644 index 0000000..d536549 --- /dev/null +++ b/docs/src/resources/scss/_utils.scss @@ -0,0 +1,317 @@ +.flex { + display: flex; + + &-align { + &-center { align-items: center; } + &-start { align-items: flex-start; } + } + + &-col { + flex-direction: column; + } + + &-inline { + display: inline-flex; + } + + &-justify { + &-between { justify-content: space-between; } + &-center { justify-content: center; } + &-end { justify-content: flex-end; } + &-start { justify-content: flex-start; } + } + + &-row { + flex-direction: row; + } + + &-shrink { + &-0 { flex-shrink: 0; } + } + + &-wrap { + flex-wrap: wrap; + } +} +@media only screen and (min-width: 768px) { + .sm-flex-row { flex-direction: row; } +} + +.grid { + display: grid; + + &-cols { + &-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + &-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + &-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + &-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + &-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + &-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + } + + &-gap { + &-4 { gap: 1rem; } + &-8 { gap: 2rem; } + &-x { + &-4 { column-gap: 1rem; } + &-8 { column-gap: 2rem; } + &-12 { column-gap: 3rem; } + } + &-y { + &-4 { row-gap: 1rem; } + &-8 { row-gap: 2rem; } + &-12 { row-gap: 3rem; } + } + } + + &-span { + &-1 { grid-column: span 1 / span 1; } + &-2 { grid-column: span 2 / span 2; } + &-3 { grid-column: span 3 / span 3; } + &-4 { grid-column: span 4 / span 4; } + &-5 { grid-column: span 5 / span 5; } + &-6 { grid-column: span 6 / span 6; } + } +} + +.hidden { + display: none; +} + +.m { + &-0 { margin: 0; } + &b { + &-0 { margin-bottom: 0; } + &-1 { margin-bottom: 0.25rem; } + &-2 { margin-bottom: 0.5rem; } + &-3 { margin-bottom: 0.75rem; } + &-4 { margin-bottom: 1rem; } + &-6 { margin-bottom: 1.5rem; } + &-7 { margin-bottom: 1.75rem; } + &-8 { margin-bottom: 2rem; } + &-12 { margin-bottom: 3rem; } + &-16 { margin-bottom: 4rem; } + } + &l { + &-1 { margin-left: 0.25rem; } + &-2 { margin-left: 0.5rem; } + &-4 { margin-left: 1rem; } + } + &r { + &-1 { margin-right: 0.25rem; } + &-2 { margin-right: 0.5rem; } + &-3 { margin-right: 0.75rem; } + &-4 { margin-right: 1rem; } + &-6 { margin-right: 1.5rem; } + } + &t { + &-0 { margin-top: 0; } + &-1 { margin-top: 0.25rem; } + &-2 { margin-top: 0.5rem; } + &-3 { margin-top: 0.75rem; } + &-4 { margin-top: 1rem; } + &-8 { margin-top: 2rem; } + &-10 { margin-top: 2.5rem; } + &-12 { margin-top: 3rem; } + &-16 { margin-top: 4rem; } + &-20 { margin-top: 5rem; } + &-24 { margin-top: 6rem; } + } + &x { + &-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; + } + &-4 { + margin-left: 1rem; + margin-right: 1rem; + } + &-8 { + margin-left: 2rem; + margin-right: 2rem; + } + } + &y { + &-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + } + &-4 { + margin-top: 1rem; + margin-bottom: 1rem; + } + } +} + +.overflow { + &-hidden { + overflow: hidden; + } +} + +.p { + &-2 { padding: 0.5rem; } + &-4 { padding: 1rem; } + &-8 { padding: 2rem; } + &b { + &-2 { padding-bottom: 0.5rem; } + &-4 { padding-bottom: 1rem; } + &-6 { padding-bottom: 1.5rem; } + &-12 { padding-bottom: 3rem; } + &-16 { padding-bottom: 4rem; } + } + &l { + &-4 { padding-left: 1rem; } + &-8 { padding-left: 2rem; } + &-12 { padding-left: 3rem; } + } + &r { + &-8 { padding-right: 2rem; } + &-12 { padding-right: 3rem; } + } + &t { + &-1 { padding-top: 0.25rem; } + &-2 { padding-top: 0.5rem; } + &-8 { padding-top: 2rem; } + &-24 { padding-top: 6rem; } + } + &x { + &-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; + } + &-4 { + padding-left: 1rem; + padding-right: 1rem; + } + &-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; + } + &-8 { + padding-left: 2rem; + padding-right: 2rem; + } + &-12 { + padding-left: 3rem; + padding-right: 3rem; + } + } + &y { + &-4 { + padding-top: 1rem; + padding-bottom: 1rem; + } + &-8 { + padding-top: 2rem; + padding-bottom: 2rem; + } + &-12 { + padding-top: 3rem; + padding-bottom: 3rem; + } + } +} + +.relative { + position: relative; +} + +.sticky { + height: 0%; + position: sticky; + top: 0; +} + +.text { + &-center { text-align: center; } + &-sm { font-size: 0.9rem; } + &-white { color: #fff; } +} + +.top { + &-px { top: 1px; } +} + +.w { + &-4 { width: 1rem; } + &-6 { width: 1.5rem; } + &-1\/5 { width: 20%; } + &-1\/4 { width: 25%; } + &-2\/5 { width: 40%; } + &-1\/2 { width: 50%; } + &-3\/5 { width: 60%; } + &-3\/4 { width: 75%; } + &-4\/5 { width: 80%; } + &-11\/12 { width: min(91.6667%, 1440px); } + &-full { width: 100%; } + &-wide { + width: calc(100% - 3rem); + } +} +@media only screen and (min-width: 768px) { + .w-wide { + width: min(91.66667%, 1440px); + } +} + +// +// all other media queries + +@media only screen and (min-width: 512px) { + .xs\:inline { + display: inline; + } + .xs\:hidden { + display: none; + } +} + +@media only screen and (min-width: 768px) { + .sm\:inline { + display: inline; + } + .sm\:hidden { + display: none; + } + .sm\:flex-row { + flex-direction: row; + } + .sm\:w-1\/5 { + width: 20%; + } + .sm\:w-3\/5 { + width: 60%; + } + .sm\:w-3\/5 { + width: 60%; + } + .sm\:list { + display: list-item; + list-style: none; + } +} + +@media only screen and (min-width: 1025px) { + .md\:block { + display: block; + } + .md\:flex { + display: flex; + } + .md\:inline { + display: inline; + } +} \ No newline at end of file diff --git a/docs/src/resources/scss/docs.scss b/docs/src/resources/scss/docs.scss new file mode 100644 index 0000000..a4528f6 --- /dev/null +++ b/docs/src/resources/scss/docs.scss @@ -0,0 +1,6 @@ +@use "sass:map"; +@import "utils"; +@import "layout"; +@import "type"; +@import "home"; +@import "sets"; \ No newline at end of file diff --git a/docs/src/static/assets/css/docs.css b/docs/src/static/assets/css/docs.css new file mode 100644 index 0000000..205ea4e --- /dev/null +++ b/docs/src/static/assets/css/docs.css @@ -0,0 +1,1550 @@ +@charset "UTF-8"; +.flex { + display: flex; +} +.flex-align-center { + align-items: center; +} +.flex-align-start { + align-items: flex-start; +} +.flex-col { + flex-direction: column; +} +.flex-inline { + display: inline-flex; +} +.flex-justify-between { + justify-content: space-between; +} +.flex-justify-center { + justify-content: center; +} +.flex-justify-end { + justify-content: flex-end; +} +.flex-justify-start { + justify-content: flex-start; +} +.flex-row { + flex-direction: row; +} +.flex-shrink-0 { + flex-shrink: 0; +} +.flex-wrap { + flex-wrap: wrap; +} + +@media only screen and (min-width: 768px) { + .sm-flex-row { + flex-direction: row; + } +} +.grid { + display: grid; +} +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} +.grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} +.grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); +} +.grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); +} +.grid-gap-4 { + gap: 1rem; +} +.grid-gap-8 { + gap: 2rem; +} +.grid-gap-x-4 { + column-gap: 1rem; +} +.grid-gap-x-8 { + column-gap: 2rem; +} +.grid-gap-x-12 { + column-gap: 3rem; +} +.grid-gap-y-4 { + row-gap: 1rem; +} +.grid-gap-y-8 { + row-gap: 2rem; +} +.grid-gap-y-12 { + row-gap: 3rem; +} +.grid-span-1 { + grid-column: span 1/span 1; +} +.grid-span-2 { + grid-column: span 2/span 2; +} +.grid-span-3 { + grid-column: span 3/span 3; +} +.grid-span-4 { + grid-column: span 4/span 4; +} +.grid-span-5 { + grid-column: span 5/span 5; +} +.grid-span-6 { + grid-column: span 6/span 6; +} + +.hidden { + display: none; +} + +.m-0 { + margin: 0; +} +.mb-0 { + margin-bottom: 0; +} +.mb-1 { + margin-bottom: 0.25rem; +} +.mb-2 { + margin-bottom: 0.5rem; +} +.mb-3 { + margin-bottom: 0.75rem; +} +.mb-4 { + margin-bottom: 1rem; +} +.mb-6 { + margin-bottom: 1.5rem; +} +.mb-7 { + margin-bottom: 1.75rem; +} +.mb-8 { + margin-bottom: 2rem; +} +.mb-12 { + margin-bottom: 3rem; +} +.mb-16 { + margin-bottom: 4rem; +} +.ml-1 { + margin-left: 0.25rem; +} +.ml-2 { + margin-left: 0.5rem; +} +.ml-4 { + margin-left: 1rem; +} +.mr-1 { + margin-right: 0.25rem; +} +.mr-2 { + margin-right: 0.5rem; +} +.mr-3 { + margin-right: 0.75rem; +} +.mr-4 { + margin-right: 1rem; +} +.mr-6 { + margin-right: 1.5rem; +} +.mt-0 { + margin-top: 0; +} +.mt-1 { + margin-top: 0.25rem; +} +.mt-2 { + margin-top: 0.5rem; +} +.mt-3 { + margin-top: 0.75rem; +} +.mt-4 { + margin-top: 1rem; +} +.mt-8 { + margin-top: 2rem; +} +.mt-10 { + margin-top: 2.5rem; +} +.mt-12 { + margin-top: 3rem; +} +.mt-16 { + margin-top: 4rem; +} +.mt-20 { + margin-top: 5rem; +} +.mt-24 { + margin-top: 6rem; +} +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} +.mx-8 { + margin-left: 2rem; + margin-right: 2rem; +} +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +.my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.overflow-hidden { + overflow: hidden; +} + +.p-2 { + padding: 0.5rem; +} +.p-4 { + padding: 1rem; +} +.p-8 { + padding: 2rem; +} +.pb-2 { + padding-bottom: 0.5rem; +} +.pb-4 { + padding-bottom: 1rem; +} +.pb-6 { + padding-bottom: 1.5rem; +} +.pb-12 { + padding-bottom: 3rem; +} +.pb-16 { + padding-bottom: 4rem; +} +.pl-4 { + padding-left: 1rem; +} +.pl-8 { + padding-left: 2rem; +} +.pl-12 { + padding-left: 3rem; +} +.pr-8 { + padding-right: 2rem; +} +.pr-12 { + padding-right: 3rem; +} +.pt-1 { + padding-top: 0.25rem; +} +.pt-2 { + padding-top: 0.5rem; +} +.pt-8 { + padding-top: 2rem; +} +.pt-24 { + padding-top: 6rem; +} +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} +.px-8 { + padding-left: 2rem; + padding-right: 2rem; +} +.px-12 { + padding-left: 3rem; + padding-right: 3rem; +} +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} +.py-12 { + padding-top: 3rem; + padding-bottom: 3rem; +} + +.relative { + position: relative; +} + +.sticky { + height: 0%; + position: sticky; + top: 0; +} + +.text-center { + text-align: center; +} +.text-sm { + font-size: 0.9rem; +} +.text-white { + color: #fff; +} + +.top-px { + top: 1px; +} + +.w-4 { + width: 1rem; +} +.w-6 { + width: 1.5rem; +} +.w-1\/5 { + width: 20%; +} +.w-1\/4 { + width: 25%; +} +.w-2\/5 { + width: 40%; +} +.w-1\/2 { + width: 50%; +} +.w-3\/5 { + width: 60%; +} +.w-3\/4 { + width: 75%; +} +.w-4\/5 { + width: 80%; +} +.w-11\/12 { + width: min(91.6667%, 1440px); +} +.w-full { + width: 100%; +} +.w-wide { + width: calc(100% - 3rem); +} + +@media only screen and (min-width: 768px) { + .w-wide { + width: min(91.66667%, 1440px); + } +} +@media only screen and (min-width: 512px) { + .xs\:inline { + display: inline; + } + + .xs\:hidden { + display: none; + } +} +@media only screen and (min-width: 768px) { + .sm\:inline { + display: inline; + } + + .sm\:hidden { + display: none; + } + + .sm\:flex-row { + flex-direction: row; + } + + .sm\:w-1\/5 { + width: 20%; + } + + .sm\:w-3\/5 { + width: 60%; + } + + .sm\:w-3\/5 { + width: 60%; + } + + .sm\:list { + display: list-item; + list-style: none; + } +} +@media only screen and (min-width: 1025px) { + .md\:block { + display: block; + } + + .md\:flex { + display: flex; + } + + .md\:inline { + display: inline; + } +} +:root { + --bg-body: #fff; + --bg-hover: #f2f1f1; + --bg-content: #e0dfde; + --bg-accent: #d2d1cf; + --bg-border: #000; + --bg-button: #fff; + --bg-active: #d2d1cf; + --icon-default: #131417; + --link-default: #0060e4; + --text-default: #000; + --text-accent: #8e8d88; + --text-contrast: #fff; + --svg-border: #fff; + --rgba-fg: rgba(255,255,255,0.916667); + --rgba-modal: rgba(0, 0, 0, 0.75); +} +:root[data-mode=dark] { + --bg-body: #202124; + --bg-hover: #131417; + --bg-content: #3a3a3a; + --bg-accent: #8e8d88; + --bg-border: #575754; + --bg-button: #18191b; + --bg-active: #29c9ff; + --icon-default: #000; + --link-default: #29c9ff; + --text-default: #fff; + --text-accent: #d2d1cf; + --text-contrast: #ddd; + --svg-border: #575754; + --rgba-fg: rgba(0,0,0,0.9); + --rgba-modal: rgba(0, 0, 0, 0.5); +} + +@font-face { + font-family: "Beleren"; + src: url("../font/beleren.eot"); + src: url("../font/beleren.woff") format("woff"), url("../font/beleren.ttf") format("truetype"), url("../font/beleren.svg") format("svg"); + font-weight: normal; + font-style: normal; +} +html { + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; + font-size: 16px; +} + +body { + align-items: center; + background: var(--bg-body); + border-top: 5px solid var(--bg-border); + color: var(--text-default); + display: flex; + flex-direction: column; + margin: 0; +} + +header { + align-items: center; + display: flex; + flex-direction: row; + height: 5rem; + justify-content: space-between; + width: 100%; +} +header mark { + background: transparent; + color: var(--text-default); + flex-shrink: 0; + font-family: Beleren; + font-size: 1.5rem; + margin-left: 1.5rem; +} +header mark i { + color: var(--text-default) !important; +} +header mark b { + border: 0.1rem solid var(--text-default); + border-radius: 0.35rem; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; + font-size: 0.75rem; + font-weight: normal; + margin: 0 0 0 0.5rem; + padding: 0.2rem 0.4rem; + position: relative; + top: -0.2rem; +} +header menu { + flex-grow: 1; +} +header #toggle-nav { + position: absolute; + right: 1.5rem; + z-index: 20; +} +header #toggle-nav svg .line { + opacity: 1; + transform: rotate(0) translateY(0) translateX(0); + transform-origin: 1em 1em; + transition: transform 0.3s ease-in-out, opacity 0.2s ease-in-out; +} +header #toggle-nav svg .line.top { + transform-origin: 6px 6px; +} +header #toggle-nav svg .line.bot { + transform-origin: 3px 17px; +} +header #toggle-nav svg.closed .line.top { + transform: rotate(45deg) scale(1.1); +} +header #toggle-nav svg.closed .line.mid { + opacity: 0; +} +header #toggle-nav svg.closed .line.bot { + transform: rotate(-45deg) scale(1.1); +} +header nav { + transform: translateY(-100%); + flex-direction: column; + margin-right: 2.5rem; +} +header nav > a { + align-items: center; + color: var(--text-default); + display: flex; + margin: 0 1rem; +} +header nav > a > svg { + margin-right: 0.5rem; +} +header nav > a > span { + text-decoration: underline transparent; + transition: text-decoration 150ms ease-in-out; + -webkit-text-underline-position: from-font; + text-underline-position: under-font; +} +header nav > a:hover span { + text-decoration-color: var(--text-default); +} +header nav.mobile { + background: var(--rgba-fg); + position: fixed; + top: 0; + left: 0; + padding-top: 1rem; + padding-bottom: 2.5rem; + width: 100%; + z-index: 10; + border-radius: 0 0 2rem 2rem; + transform: translateY(0); + transition: transform 200ms ease-in-out; +} +header nav.mobile > a { + font-size: 1.75rem; + padding: 0.5rem 1rem; +} +header nav.mobile > a > span { + padding-left: 0.5rem; +} +header nav.mobile #hide-nav { + right: 0; + position: absolute; + top: 1rem; +} +header nav.mobile #mode { + margin-top: 1rem; + text-align: center; +} +header nav.mobile #mode label.toggle { + height: 2.5rem; + width: 8rem; + border-radius: 1.5rem; +} +header nav.mobile #mode label.toggle::after { + font-size: 1.33rem; + width: 3rem; + height: 2.1rem; +} +header nav.mobile #mode input.toggle:checked + label::after { + left: calc(100% - 0.25rem); +} + +@media only screen and (min-width: 768px) { + #toggle-nav { + display: none; + } + + header mark { + margin-left: 2.5rem; + } + header nav { + display: flex; + flex-direction: row; + transform: none; + } +} +main { + align-items: center; + display: flex; + flex-direction: column; + width: 100%; +} + +section { + width: 100%; +} + +article { + display: flex; + flex-direction: column; + width: min(83.3333%, 1200px); +} + +footer { + background-color: #131417; + color: #fff; + display: flex; + justify-content: center; + padding: 3rem 0; + width: 100%; +} +footer.border { + border-top: 1px solid #3a3a3a; +} +footer menu li { + margin-bottom: 0.5rem; +} +footer iframe html body { + background: var(--bg-body); +} + +#mode { + height: 2rem; +} +#mode input.toggle { + height: 0; + width: 0; + visibility: hidden; +} +#mode input.toggle:checked + label { + background: var(--bg-body); +} +#mode input.toggle:checked + label::after { + content: "\e024"; + left: calc(100% - 0.2rem); + transform: translateX(-100%); +} +#mode label.toggle { + cursor: pointer; + width: 4rem; + height: 1.75rem; + border: 2px solid var(--bg-accent); + display: inline-flex; + border-radius: 1rem; + position: relative; + transition: border-color 150ms ease-in-out; +} +#mode label.toggle:hover { + border-color: var(--text-accent); +} +#mode label.toggle::after { + content: "\e012"; + color: var(--text-default); + font-family: keyrune; + position: absolute; + display: flex; + align-items: center; + justify-content: center; + top: 0.2rem; + left: 0.2rem; + width: 1.75rem; + height: 1.35rem; + background: var(--bg-content); + border-radius: 1rem; + transition: all 300ms ease-in-out; +} +#mode label.toggle:active::after { + width: 2rem; +} + +:root[data-mode=dark] #mode label::after { + content: "\e024"; + left: calc(100% - 0.2rem); + transform: translateX(-100%); +} + +.angle-top::before { + content: ""; + display: block; + height: 4rem; + background: var(--bg-body); + position: absolute; + top: 0; + width: 100%; + clip-path: polygon(0% 0%, 100% 0, 100% 0, 0% 100%); +} + +.checkerboard { + background-image: linear-gradient(45deg, var(--bg-hover) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--bg-hover) 75%), linear-gradient(45deg, transparent 75%, var(--bg-hover) 75%), linear-gradient(45deg, var(--bg-hover) 25%, transparent 25%); + background-size: 1.5rem 1.5rem; + background-position: 0 0, 0 0, -0.75rem -0.75rem, 0.75rem 0.75rem; +} + +.bg-accent { + background-color: var(--bg-accent); +} +.bg-black { + background-color: #131417; +} +.bg-content { + background-color: var(--bg-content); +} + +h1 { + font-family: Beleren; + font-size: 3rem; + font-weight: 600; +} + +h2 { + font-size: 1.5rem; +} + +@media only screen and (min-width: 1025px) { + h2 { + font-size: 1.75rem; + } +} +h3 { + font-size: 1.25rem; + font-weight: 600; +} + +h4 { + font-family: Beleren; + font-size: 1.4rem; + font-weight: 600; +} + +h5 { + font-size: 1.1rem; + font-weight: 600; + text-transform: uppercase; +} + +p, +li, +span { + font-weight: 500; + line-height: 1.6rem; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +p > a, +li > a, +span > a { + text-decoration: underline; + -webkit-text-underline-position: from-font; + text-underline-position: from-font; +} +p > a[target=blank]::after, +li > a[target=blank]::after, +span > a[target=blank]::after { + content: "↗"; + display: inline-block; + margin-left: 0.1rem; + position: relative; + text-decoration: none; + top: 0; + transition: top 100ms ease-in-out; +} +p > a[target=blank]:hover::after, +li > a[target=blank]:hover::after, +span > a[target=blank]:hover::after { + top: -3px; +} +p.big, +li.big, +span.big { + font-size: 1.15rem; + font-weight: 400; + line-height: 1.875rem; +} + +@media only screen and (min-width: 1025px) { + p.big { + font-size: 1.3rem; + line-height: 2rem; + } +} +a, +button { + color: inherit; + text-decoration: none; +} +a.button, +button.button { + background: var(--bg-button); + border: 2px solid #000; + border-radius: 0.625rem; + box-shadow: 3px 3px 0 0 #000; + color: var(--text-default); + font-size: 1.25rem; + padding: 0.75rem 1.5rem 0.8rem; + position: relative; +} +a.button:focus, a.button:active, +button.button:focus, +button.button:active { + box-shadow: none; + top: 3px; + left: 3px; +} +a.button:hover, +button.button:hover { + background: var(--bg-hover); +} +a.bubble, +button.bubble { + position: relative; +} +a.bubble > img, +a.bubble > svg, +button.bubble > img, +button.bubble > svg { + position: relative; + z-index: 1; +} +a.bubble::before, +button.bubble::before { + content: ""; + display: block; + position: absolute; + width: calc(100% + 2rem); + height: calc(100% + 2rem); + border-radius: 1rem; + background: #202124; + top: -1rem; + left: -1rem; + z-index: 0; + transform: scale(0.5); + transition: opacity 100ms ease-in-out; + opacity: 0; +} +a.bubble:hover::before, +button.bubble:hover::before { + opacity: 1; + animation: bubble 200ms ease-in-out; + transform: scale(1); +} +a.bubble.light::before, +button.bubble.light::before { + background: var(--bg-hover); +} +@keyframes bubble { + 0% { + transform: scale(0.5); + } + 80% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} +aside { + margin-top: 1rem; + text-align: center; + width: min(91.66667%, 900px); +} +aside > p.big { + font-size: 1.2rem; + line-height: 2rem; + padding: 0 0.5rem; +} + +@media only screen and (min-width: 768px) { + aside > p.big { + font-size: 1.3rem; + padding: 0; + } +} +dialog { + background: var(--bg-content); + border: none; + border-radius: 1.5rem; + color: var(--text-default); + padding: 0; + width: calc(100% - 3rem); +} + +@media only screen and (min-width: 768px) { + dialog { + border-radius: 2rem; + width: min(91.6667%, 1440px); + } +} +#explode { + display: flex; + flex-direction: column; + margin-top: 3rem; +} +#explode > div.explode-inner { + width: 100%; +} +#explode > div.explode-text { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +@media only screen and (min-width: 1025px) { + #explode { + flex-direction: row; + margin-top: 6rem; + } + #explode > div.explode-inner { + width: 50%; + } + #explode > div.explode-text { + padding-left: 0; + padding-right: 3rem; + } +} +div.isometric { + align-self: stretch; + display: flex; + font-family: keyrune; + height: 12rem; + justify-content: center; + margin: 0; + perspective: 50rem; + position: relative; + width: 100%; +} +div.isometric svg { + position: absolute; +} +div.isometric svg.border { + z-index: 1; +} +div.isometric svg.rarity { + z-index: 2; +} +div.isometric svg.inner { + z-index: 3; +} +div.isometric.explode svg.border { + animation: explode-border 16s ease-in-out infinite; +} +div.isometric.explode svg.rarity { + animation: explode-rarity 16s ease-in-out infinite; +} +div.isometric.explode svg.inner { + animation: explode-inner 16s ease-in-out infinite; +} + +@keyframes explode-border { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(-20%) translateY(-4%) rotateY(37.5deg) scale(1); + } +} +@keyframes explode-rarity { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(2.5%) translateY(2.5%) rotateY(37.5deg) scale(1); + } +} +@keyframes explode-inner { + 0%, 40%, 100% { + transform: scale(1.4); + } + 50%, 90% { + transform: translateX(25%) translateY(10%) rotateY(37.5deg) scale(1); + } +} +@media only screen and (min-width: 1025px) { + div.isometric { + height: 100%; + } +} +.feature { + grid-column: span 6/span 6; +} + +@media only screen and (min-width: 768px) { + .feature { + grid-column: span 3/span 3; + } +} +@media only screen and (min-width: 1025px) { + .feature { + grid-column: span 2/span 2; + } +} +menu { + list-style: none; + margin: 0; + padding: 0; +} +menu li { + display: flex; + margin: 0; +} +menu input[type=radio], +menu input[type=checkbox] { + height: 0; + width: 0; + visibility: hidden; + position: absolute; +} +menu label { + align-items: center; + cursor: pointer; + display: flex; + height: 3rem; + justify-content: center; + margin: 0 0.25rem; + width: 3.25rem; + background: var(--bg-button); + border: 1px solid #000; + border-radius: 0.625rem; + box-shadow: 2px 2px 0 0 #000; + position: relative; +} +menu label.small { + height: 2.5rem; + width: 2.75rem; +} +menu label:hover:not(.disabled) { + background: var(--bg-hover); +} +menu label.disabled, menu label[disabled=disabled] { + cursor: not-allowed; + opacity: 0.33; +} +menu input[type=radio]:checked + label, +menu input[type=checkbox]:checked + label, +menu label.checked { + background: var(--bg-active); + box-shadow: none; + color: #000; + top: 2px; + left: 2px; +} +menu.group#icon-rarity { + margin: 0 auto; +} +menu.group label { + margin: 0; +} +menu.group label.left { + border-radius: 0.625rem 0 0 0.625rem; +} +menu.group label.center { + border-radius: 0; +} +menu.group label.right { + border-radius: 0 0.625rem 0.625rem 0; +} + +:root[data-mode=dark] menu input#rarity_foil:checked + label svg, +:root[data-mode=dark] menu label.checked svg.foil { + fill: #000; +} +:root[data-mode=dark] menu input#rarity_common:not(:checked) + label svg { + fill: #fff; +} + +@media only screen and (min-width: 1025px) { + menu.group#icon-rarity { + margin: 0 1rem 0 0; + } +} +#icons .set-group { + display: flex; + flex-direction: column; +} +#icons .set-group-info { + background: var(--bg-content); + z-index: 20; +} +#icons .set-group-grid { + gap: 1rem; + grid-template-columns: repeat(2, minmax(0, 1fr)); + margin-bottom: 1.5rem; +} +#icons .set-group.hidden { + display: none; +} +#icons figure { + align-items: center; + background-color: var(--bg-body); + border-radius: 1rem; + cursor: pointer; + display: flex; + flex-direction: column; + justify-content: flex-start; + margin: 0; + padding: 0; + width: 100%; +} +#icons figure:hover { + background-color: var(--bg-hover); + animation: hover 200ms; +} +#icons figure > .ss { + font-size: 3rem; + margin: 1rem 0; +} +#icons figure > .ss.ss-rarity-common:not(.ss-inner)::before { + color: var(--text-default) !important; +} +#icons figure > span { + margin: 0 0.5rem 1.25rem; +} +#icons figure > span.icon-code { + display: none; +} +#icons figure > span.icon-name { + line-height: 1.33rem; +} +#icons figure.hidden { + display: none; +} +#icons[data-density=roomy] figure > span.icon-name { + text-align: center; +} +#icons[data-density=normal] div.grid { + gap: 1.5rem; + margin-bottom: 3rem; +} +#icons[data-density=normal] div.sticky { + padding-bottom: 2rem; +} +#icons[data-density=normal] figure > .ss { + font-size: 2.25rem; + margin: 1rem 0 0.75rem; +} +#icons[data-density=normal] figure > span.icon-name { + display: none; +} +#icons[data-density=normal] figure > span.icon-code { + display: inline; + margin: 0 0.5rem 1rem; +} +#icons[data-density=dense] div.grid { + gap: 1rem; + margin-bottom: 2rem; +} +#icons[data-density=dense] div.sticky { + padding-bottom: 1rem; +} +#icons[data-density=dense] figure { + flex-direction: row; +} +#icons[data-density=dense] figure > .ss { + font-size: 1.5rem; + margin: 1rem; +} +#icons[data-density=dense] figure > span.icon-name { + display: none; +} +#icons[data-density=dense] figure > span.icon-code { + display: inline; + margin: 1rem 1rem 1rem 0; +} + +@keyframes hover { + 0% { + background-color: var(--bg-body); + } + 100% { + background-color: var(--bg-hover); + } +} +@media only screen and (min-width: 1025px) { + #icons .set-group { + flex-direction: row; + } + #icons .set-group-info { + width: 20%; + padding-bottom: 3rem; + } + #icons .set-group-icons { + width: 80%; + } + #icons .set-group-grid { + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 2rem; + margin-bottom: 4rem; + } +} +:root[data-mode=dark] #icons figure .ss.ss-rarity-common.ss-inner::before { + color: #000 !important; +} +:root[data-mode=dark] #icons figure .ss.ss-rarity-common.ss-border:not(.ss-inner)::after { + color: #000 !important; +} + +form .input-wrapper svg { + position: absolute; + top: 1.25rem; +} +form .input-wrapper svg.search { + left: 1.5rem; +} +form .input-wrapper svg.clear { + cursor: pointer; + right: 8.5rem; +} +form input[type=text] { + align-self: stretch; + background: var(--bg-body); + border: 0.15rem solid var(--text-default); + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover); + height: 3.6rem; + border-radius: 2rem; + color: var(--text-default); + font-size: 1.25rem; + padding: 0 2rem 0 3.5rem; + width: calc(100% - 5.5rem); +} +form input[type=text]::placeholder { + color: var(--bg-accent); + font-size: 1.25rem; +} +form input[type=text]:focus { + outline: none; + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover), 0 0 0 1px var(--bg-body), 0 0 0 0.25rem #29c9ff; +} +form button.button { + border-color: var(--text-default); + border-radius: 0 2rem 2rem 0; + box-shadow: inset 0 0.25rem 0 0 var(--bg-hover); + cursor: pointer; + height: 100%; + padding-right: 1.75rem; + position: absolute; + top: 0; + right: 0; +} +form button.button:active, form button.button:focus { + left: auto; + top: 0; + right: 0; + box-shadow: inset 0 0.25rem 0 0 var(--bg-content); +} +form .search-left { + width: 100%; + text-align: center; +} + +@media only screen and (min-width: 769px) { + form .search-left { + width: auto; + text-align: left; + padding-left: 2rem; + } +} +object { + width: 100vw; + height: 100vh; + padding: 0; + margin: 0; + position: fixed; + top: 0; + left: 0; + background: var(--rgba-modal); + display: flex; + align-items: center; + justify-content: center; + visibility: hidden; + transition: visibility 200ms ease-in-out; + z-index: 100; +} +object details { + background: var(--rgba-fg); + box-shadow: 0 0 12rem 0 var(--icon-default); + display: flex; + flex-direction: column; + border-radius: 1.5rem; + position: relative; + opacity: 0; + transform: scale(1.1) translateY(0); + transition: opacity 200ms ease-in-out, transform 200ms ease-in-out; + overflow: hidden; + width: 91.66667vw; +} +object details summary { + display: none; + pointer-events: none; +} +object details .details { + display: flex; + flex-direction: column; +} +object details .close { + position: absolute; + top: 1.5rem; + right: 1.2rem; + z-index: 10; +} +object details .icon { + background-color: var(--bg-body); + align-items: center; + display: flex; + justify-content: space-between; + padding: 2rem 0.5rem 1rem; +} +object details .icon i.ss { + color: var(--text-default); + font-size: 8em; + line-height: 1.75ex; + padding-bottom: 1.5rem; +} +object details .icon i.ss.ss-rarity-common:not(.ss-inner)::before { + color: var(--text-default) !important; +} +object details .icon-controls { + display: none; +} +object details h3 { + background: #f4d4e9; + color: #df3ea2; + border: 1px solid #ed73be; + display: inline-flex; + align-self: flex-start; + padding: 2px 5px; + border-radius: 0.33rem; +} +object details .table { + justify-content: space-between; + font-size: 1.1rem; +} +object details .table label { + font-size: 1rem; + font-weight: bold; + margin-bottom: 0.25rem; + text-transform: uppercase; +} +object details .table label.aliases { + margin-bottom: 0.1rem; +} +object details .table .class, +object details .table .rarity, +object details .table .border, +object details .table .inner, +object details .table .aliases > span { + font-family: monospace; +} +object details .table ul.glyphs { + list-style: none; + margin: 0; + padding: 0; +} +object details .table ul.glyphs li { + align-items: center; + display: flex; + flex-direction: row; + justify-content: flex-start; +} +object details .table ul.glyphs li i { + font-family: keyrune; + font-style: normal; + text-align: center; + width: 1.75em; +} +object details .table ul.glyphs li.false { + display: none; +} +object details .table ul.glyphs i { + font-size: 1.2rem; + width: 1.75em; +} +object details .table ul.glyphs i::before, object details .table ul.glyphs i::after, object details .table ul.glyphs i::marker { + color: var(--text-default); +} +object details .table table.aliases { + border-spacing: 0; + width: 100%; +} +object details .table table.aliases td.code { + font-family: monospace; + font-size: 1rem; + padding-right: 0.5rem; +} +object details .table table.aliases td.set { + font-size: 1rem; + position: relative; + width: 100%; +} +object details .table table.aliases td.set::before { + content: " "; + visibility: hidden; +} +object details .table table.aliases td.set span { + position: absolute; + left: 0; + right: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +object details .table .actions { + display: none; +} +object details .table .actions a.action-button { + position: relative; +} +object details .table .actions a.action-button span { + text-decoration: underline transparent; + transition: text-decoration 150ms ease-in-out; + -webkit-text-underline-position: from-font; + text-underline-position: under-font; +} +object details .table .actions a.action-button:hover span { + text-decoration-color: var(--text-default); +} +object details .table .actions a.action-button em { + font-style: normal; + display: flex; + width: auto; + margin: 0 auto; + background: var(--text-default); + position: absolute; + top: 0; + left: 50%; + white-space: nowrap; + min-height: 1.5rem; + color: var(--bg-body); + transform: translateX(-50%) translateY(-50%); + margin-top: -1rem; + opacity: 0; + font-size: 1rem; + padding: 0.25rem 0.75rem; + align-items: center; + justify-content: center; + border-radius: 0.5rem; +} +object details .tags { + display: flex; + font-size: 0.9rem; + margin-left: -2px; + padding: 0.5rem 0 0; +} +object details .tags a { + background: var(--text-default); + border-radius: 2rem; + color: var(--bg-body); + margin: 0 0.5rem 0 0; + padding: 0.25rem 1rem 0.3rem; +} +object details .tags a.card { + position: relative; + padding-left: 40px; +} +object details .tags a.card::before { + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0' y='0' width='25.2' height='36' viewBox='0 0 70 100'%3E%3Cg id='Layer_1'%3E%3Cpath d='M10 0 L60 0 C65.523 0 70 4.477 70 10 L70 90 C70 95.523 65.523 100 60 100 L10 100 C4.477 100 0 95.523 0 90 L0 10 C0 4.477 4.477 0 10 0 z' fill='%23191511'/%3E%3Cpath d='M9.638 5.533 L60.362 5.533 C62.572 5.533 64.362 7.375 64.362 9.648 L64.362 90.353 C64.362 92.625 62.572 94.467 60.362 94.467 L9.638 94.467 C7.428 94.467 5.638 92.625 5.638 90.353 L5.638 9.648 C5.638 7.375 7.428 5.533 9.638 5.533 z' fill='%2351765C'/%3E%3Cpath d='M11.5 57.388 L58.5 57.388 L58.5 88.388 L11.5 88.388 L11.5 57.388 z' fill='%23B89A82'/%3E%3Cpath d='M11.5 23.798 L58.5 23.798 L58.5 50.464 L11.5 50.464 L11.5 23.798 z' fill='%2362A5C0'/%3E%3Cpath d='M23.002 37.274 C22.158 35.902 19.11 32.575 19.693 29.21 C25.668 37.92 34.696 38.018 44.438 37.62 C41.357 38.74 37.543 40.962 33.44 40.532 C31.004 44.713 28.025 42.796 23.736 42.796 C21.054 43.974 17.834 43.413 14.841 43.605 C16.593 43.381 17.422 41.732 18.853 41.107 C20.734 40.285 23.163 40.39 25.191 39.399' fill='%23B54048'/%3E%3Cpath d='M31.826 38.669 C30.084 38.669 28.672 37.656 28.672 36.407 C28.672 35.159 30.084 34.146 31.826 34.146 C33.568 34.146 34.98 35.159 34.98 36.407 C34.98 37.656 33.568 38.669 31.826 38.669 z' fill='%23B54048'/%3E%3Cpath d='M11.5 10.798 L58.5 10.798 L58.5 23.798 L11.5 23.798 L11.5 10.798 z' fill='%2380C2DD'/%3E%3Cpath d='M44.78 18.389 C-26.121 27.703 92.917 29.765 45.03 18.389' fill='%2335666C'/%3E%3C/g%3E%3C/svg%3E"); + content: ""; + display: block; + width: 25.2px; + height: 36px; + position: absolute; + top: 0; + left: 0; + transition: transform 150ms ease-in-out; + transform: rotate(-20deg) translateY(-3px) translateX(6px); +} +object details .tags a.card:hover::before { + transform: rotate(-30deg) translateY(-3px) translateX(6px) scale(1.04); +} +object.active { + visibility: visible; +} +object.active details { + opacity: 1; + transform: scale(1) translateY(-3rem); +} + +@keyframes fadeup { + 0% { + opacity: 0; + transform: translateX(-50%) translateY(-50%); + } + 30%, 70% { + opacity: 1; + transform: translateX(-50%) translateY(-75%); + } + 100% { + opacity: 0; + transform: translateX(-50%) translateY(-120%); + } +} +@media only screen and (min-width: 1025px) { + object details { + width: calc(896px + 2rem); + } + object details .details { + flex-direction: row; + min-width: 50%; + } + object details .icon { + width: 448px; + } + object details .icon i.ss { + font-size: 16em; + } + object details .icon-controls { + display: flex; + padding: 0 0 2rem; + } + object details .table .actions { + display: flex; + } +} + +/*# sourceMappingURL=docs.css.map */ diff --git a/docs/src/static/assets/css/docs.css.map b/docs/src/static/assets/css/docs.css.map new file mode 100644 index 0000000..43a7c07 --- /dev/null +++ b/docs/src/static/assets/css/docs.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../resources/scss/_utils.scss","../../../resources/scss/_layout.scss","../../../resources/scss/_type.scss","../../../resources/scss/_home.scss","../../../resources/scss/_sets.scss"],"names":[],"mappings":";AAAA;EACI;;AAGI;EAAW;;AACX;EAAU;;AAGd;EACI;;AAGJ;EACI;;AAIA;EAAY;;AACZ;EAAW;;AACX;EAAQ;;AACR;EAAU;;AAGd;EACI;;AAIA;EAAM;;AAGV;EACI;;;AAGR;EACI;IAAe;;;AAGnB;EACI;;AAGI;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAKJ;EAAM;;AACN;EAAM;;AAEF;EAAM;;AACN;EAAM;;AACN;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAO;;AAKX;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;;AAId;EACI;;;AAIA;EAAM;;AAEF;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AACP;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAM;;AAGN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AAGN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AACP;EAAO;;AACP;EAAO;;AACP;EAAO;;AACP;EAAO;;AAGP;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAIJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAMR;EACI;;;AAKJ;EAAM;;AACN;EAAM;;AACN;EAAM;;AAEF;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AACP;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAO;;AAGP;EAAM;;AACN;EAAO;;AAGP;EAAM;;AACN;EAAM;;AACN;EAAM;;AACN;EAAO;;AAGP;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;AAIJ;EACI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAKZ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAIA;EAAW;;AACX;EAAO;;AACP;EAAU;;;AAIV;EAAO;;;AAIP;EAAM;;AACN;EAAM;;AACN;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAS;;AACT;EAAW;;AACX;EAAS;;AACT;EACI;;;AAGR;EACI;IACI;;;AAOR;EACI;IACI;;;EAEJ;IACI;;;AAIR;EACI;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;EAEJ;IACI;IACA;;;AAIR;EACI;IACI;;;EAEJ;IACI;;;EAEJ;IACI;;;AC/RR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EAGA;EAEA;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;;AAGI;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAMhB;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAGR;EACI;;;AAMpB;EACI;IACI;;;EAGA;IACI;;EAEJ;IACI;IACA;IACA;;;AAKZ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAIA;EACI;;AAIR;EACI;;;AAOR;EACI;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;AAEA;EACI;EACA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAKR;EACI;EACA;EACA;;;AASA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKZ;EACI,kBACI;EAIJ;EACA;;;AAIA;EAAW;;AACX;EAAU;;AACV;EAAY;;;ACxYhB;EACI;EACA;EACA;;;AAGJ;EACI;;;AAEJ;EACI;IACI;;;AAIR;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACI;EACA;EACA;;AAGI;AAAA;AAAA;EACI;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEJ;AAAA;AAAA;EACI;;AAKZ;AAAA;AAAA;EACI;EACA;EACA;;;AAGR;EACI;IACI;IACA;;;AAIR;AAAA;EAEI;EACA;;AAEA;AAAA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;EAEI;EACA;EACA;;AAGJ;AAAA;EACI;;AAIR;AAAA;EACI;;AAEA;AAAA;AAAA;AAAA;EAEI;EACA;;AAGJ;AAAA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;AAAA;EACI;EACA;EACA;;AAIA;AAAA;EACI;;AAQhB;EACI;IACI;;EAEJ;IACI;;EAEJ;IACI;;;ACxJR;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;;AAGR;EACI;IACI;IACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;IACI;IACA;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;;AAGR;EACI;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;;;AAQZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAKJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;;AAIZ;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;;AAOR;EACI;;;AAEJ;EACI;IAAW;;;AAEf;EACI;IAAW;;;AC5If;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGJ;EAEI;EACA;;AAIR;AAAA;AAAA;EAGI;EACA;EACA;EACA;EACA;;AAKA;EACI;;AAGJ;EACI;;AAEA;EACI;;AAEJ;EACI;;AAEJ;EACI;;;AAMZ;AAAA;EAEI;;AAEJ;EACI;;;AAGR;EACI;IACI;;;AAUA;EACI;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAKJ;EACI;;AAKJ;EACI;EACA;;AAEJ;EACI;;AAGA;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;AAMR;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;;AACA;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;;AAKhB;EACI;IACI;;EAEJ;IACI;;;AAGR;EAEQ;IACI;;EAEA;IACI;IACA;;EAEJ;IACI;;EAEJ;IACI;IACA;IACA;;;AAOZ;EACI;;AAEJ;EACI;;;AAUA;EACI;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;;AAMR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEI;EACA;EACA;EACA;;AAIR;EACI;EACA;;;AAGR;EACI;IACI;IACA;IACA;;;AAOR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EAEA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAIR;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAIR;AAAA;AAAA;AAAA;AAAA;EAKI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;;AAEA;EAGI;;AAKZ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAMZ;EACI;;AAEA;EACI;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMhB;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAQpB;EACI;;AAEA;EACI;EACA;;;AAIZ;EACI;IACI;IACA;;EAEJ;IACI;IACA;;EAEJ;IACI;IACA;;;AAGR;EACI;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;;EAEA;IACI;;EAGJ;IACI;IACA;;EAKJ;IACI","file":"docs.css"} \ No newline at end of file diff --git a/docs/src/static/assets/font/beleren.eot b/docs/src/static/assets/font/beleren.eot new file mode 100755 index 0000000..11f41cc Binary files /dev/null and b/docs/src/static/assets/font/beleren.eot differ diff --git a/docs/src/static/assets/font/beleren.otf b/docs/src/static/assets/font/beleren.otf new file mode 100755 index 0000000..d4105a2 Binary files /dev/null and b/docs/src/static/assets/font/beleren.otf differ diff --git a/docs/src/static/assets/font/beleren.svg b/docs/src/static/assets/font/beleren.svg new file mode 100755 index 0000000..84c1bb5 --- /dev/null +++ b/docs/src/static/assets/font/beleren.svg @@ -0,0 +1,3634 @@ + + + + +Created by FontForge 20090914 at Wed Mar 11 16:33:40 2015 + By www-data +Copyright (c) 2013 Wizards of the Coast, a Hasbro Subsidiary. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/static/assets/font/beleren.ttf b/docs/src/static/assets/font/beleren.ttf new file mode 100755 index 0000000..7dd1bff Binary files /dev/null and b/docs/src/static/assets/font/beleren.ttf differ diff --git a/docs/src/static/assets/font/beleren.woff b/docs/src/static/assets/font/beleren.woff new file mode 100755 index 0000000..e2f1f32 Binary files /dev/null and b/docs/src/static/assets/font/beleren.woff differ diff --git a/docs/src/static/assets/js/first.js b/docs/src/static/assets/js/first.js new file mode 100644 index 0000000..caf459b --- /dev/null +++ b/docs/src/static/assets/js/first.js @@ -0,0 +1,5 @@ +(function () { + var mode = localStorage.getItem("mode"); + if (mode === "dark") document.documentElement.dataset.mode = 'dark'; + else if (mode === "light") document.documentElement.dataset.mode = 'light'; +})(); \ No newline at end of file diff --git a/docs/src/static/assets/js/glitz.js b/docs/src/static/assets/js/glitz.js new file mode 100644 index 0000000..2b3fc06 --- /dev/null +++ b/docs/src/static/assets/js/glitz.js @@ -0,0 +1,316 @@ +// +// toggle non-rarity classes for icon instances on icons page + +function iconsToggleClass(classnames, label, off) { + if (off) { + $('#icons i.ss').each(function(index, icon) { + $(icon).removeClass(classnames); + }); + $('details div.icon i').removeClass(classnames); + $('#preview-extras-modal label[for="extras_'+label+'"]').removeClass('checked'); + } else { + $('#icons i.ss').each(function(index, icon) { + $(icon).toggleClass(classnames); + }); + $('details div.icon i').toggleClass(classnames); + $('#preview-extras-modal label[for="extras_'+label+'"]').toggleClass('checked'); + } +} + +// +// rarity toggle handling on icons page + +function iconsChangeRarity(rarity) { + // change each icon in the results + $('#icons i.ss').each(function(index, icon) { + $(icon).removeClass('ss-rarity-common ss-rarity-uncommon ss-rarity-rare ss-rarity-mythic ss-rarity-foil'); + $(icon).addClass('ss-rarity-'+rarity); + }); + // change the modal + $('#icon-rarity-modal label').removeClass('checked'); + $('#icon-rarity-modal label[for="rarity_'+rarity+'"]').addClass('checked'); + $('details div.icon i').removeClass('ss-rarity-common ss-rarity-uncommon ss-rarity-rare ss-rarity-mythic ss-rarity-foil'); + $('details div.icon i').addClass('ss-rarity-'+rarity); + // for commons, disable the gradient + if (rarity == "common") { + $('#extras_gradient').attr('disabled', 'disabled').prop('checked', false); + $('label[for="extras_gradient"]').attr('disabled', 'disabled').addClass('disabled'); + iconsToggleClass('ss-rarity-gradient', 'gradient', true); + } else { + $('#extras_gradient').attr('disabled', null); + $('label[for="extras_gradient"]').attr('disabled', null).removeClass('disabled'); + } +} + +// +// get the current values of all icon page menu items + +function getIconDisplaySettings() { + let classes = ''; + classes += $('#icon-rarity input:checked').data('class'); + $('#icon-extras input:checked').each(function(index, extra) { + classes += ' '+$(extra).data('class'); + }); + return classes; +} + +// +// icon search filtering + +function filterIcons(q) { + + // define some empty variables + let code = ''; + let tags = Object; + let group = ''; + let parent = ''; + + // set the URL to show the param + if (q.length > 0) { + window.history.replaceState({'q':q,}, "Set icon search results", '?q='+q); + $('#search svg.clear').removeClass('hidden'); + } else { + window.history.replaceState({'q':'',}, "Set icons", '/sets'); + $('#search svg.clear').addClass('hidden'); + } + + // iterate over each icon and show/hide along with its parent group + $('#icons figure').each(function() { + code = $(this).data('code'); + tags = $(this).data('tags'); + group = $(this).data('order'); + parent = $('.set-group[data-id="'+group+'"]'); + + // show/hide icons based on query index + if (code.indexOf(q) >= 0 || Object.values(tags).indexOf(q) >= 0) { + $(this).removeClass('hidden'); + } else { + $(this).addClass('hidden'); + } + + // poll for group's non-hidden count and hide it if there are none + if (parent.children().children().children('figure:not(.hidden)').length == 0) { + parent.addClass('hidden'); + } else { + parent.removeClass('hidden'); + } + }); + + // if there are 0 results, show something + if ($('#icons .set-group:not(.hidden)').length == 0) { + $('#search-empty').removeClass('hidden'); + } else { + $('#search-empty').addClass('hidden'); + } +} + +function outputAliases(aliases) { + let html = ''; + aliases.forEach(function(alias, index) { + html += ''; + }); + return html+'
    '+alias.code+''+alias.name+'
    '; +} + +// +// icons page modal handling + +function openModal(icon) { + + // get the data vars from the figure that was clicked + let code = icon.data('code'); + let name = icon.data('name'); + let tags = icon.data('tags'); + let tagp = ''; + let tagc = ''; + let group = icon.data('group'); + let rarity = (icon.data('rarity')) ? icon.data('rarity') : 'n/a'; + let border = (icon.data('border')) ? icon.data('border') : 'n/a'; + let inner = (icon.data('inner')) ? icon.data('inner') : 'n/a'; + let version = icon.data('version'); + let classes = getIconDisplaySettings(); + + // format any aliases into spans + let aliases = (icon.data('aliases') == false) + ? 'none' + : outputAliases(Object.values(icon.data('aliases'))); + + // format the tags into spans + tags.forEach(function(item, index) { + // check if we're linking to a card with [[card]] + const re = /\[\[(.*?)\]\]/g; + if (item.match(re)) { + tagc = item.substring(2, item.length -2).split("|"); + tagp = tagp+''+tagc[0]+''; + // otherwise link to search + } else { + tagp = tagp+''+item+''; + } + }); + + // update the fields + $('details div.icon i').attr('class', 'ss ss-'+code+' '+classes); + $('details div.table h2.name').html(name); + $('details div.table h3.class').html(code); + $('details div.table span.group').html(group); + $('details div.table li.rarity span').html(rarity); + $('details div.table li.rarity i').html('&#x'+rarity); + $('details div.table li.border').attr('class', 'border '+icon.data('border')+''); + $('details div.table li.border span').html(border); + $('details div.table li.border i').html('&#x'+border); + $('details div.table li.inner').attr('class', 'inner '+icon.data('inner')+''); + $('details div.table li.inner span').html(inner); + $('details div.table li.inner i').html('&#x'+inner); + $('details div.table span.version').html(version); + $('details div.table span.aliases').html(aliases); + $('details div.tags').html(tagp); + + // specific function bindings + $('#copy-unicode').on('click', function() { + navigator.clipboard.writeText(rarity).then(function() { + $('#copy-unicode em').html('Unicode copied!').animate('fadeup', 1200, 'ease-in-out'); + }, function(err) { + $('#copy-unicode em').html('Error copying').animate('fadeup', 1200, 'ease-in-out'); + }); + }); + $('#copy-glyph').on('click', function() { + navigator.clipboard.writeText($('details div.table li.rarity i').html()).then(function() { + $('#copy-glyph em').html('SVG copied!').animate('fadeup', 1200, 'ease-in-out'); + }, function(err) { + $('#copy-glyph em').html('Error copying').animate('fadeup', 1200, 'ease-in-out'); + }); + }); + $('#download-svg').on('click', function() { + $('#download-svg em').html('Coming soon!').animate('fadeup', 1200, 'ease-in-out'); + }); + + // show the modal + window.history.replaceState({'i':code,}, "Set icon details", '?i='+code); + $('object').addClass('active'); +} + +function closeModal() { + $('object').removeClass('active'); + window.history.replaceState({'q':'',}, "Set icons", '/sets'); +} + +// +// onload interactions + +Zepto(function($){ + + // + // mobile nav + + $('header').on('click', '#toggle-nav', function(e) { + $('nav').toggleClass('mobile'); + $('#toggle-nav-svg').toggleClass('closed'); + }); + + // + // dark/light mode + + let toggle = $('#switch'); + let cookie = localStorage.getItem('mode'); + + if (cookie) { + if (cookie == 'dark') { + document.documentElement.dataset.mode = 'dark'; + toggle.prop('checked', 'checked'); + } else if (cookie == 'light') { + document.documentElement.dataset.mode = 'light'; + toggle.prop('checked', false); + } + } + else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.dataset.mode = 'dark'; + toggle.prop('checked', 'checked'); + localStorage.setItem('mode', 'dark'); + } else { + localStorage.setItem('mode', 'light'); + } + + toggle.on('change', function() { + if (toggle.prop('checked')) { + document.documentElement.dataset.mode = 'dark'; + localStorage.setItem('mode', 'dark'); + } else { + document.documentElement.dataset.mode = 'light'; + localStorage.setItem('mode', 'light'); + } + }); + + // + // filter icons if we have a ?q=, modal if we have an ?i= + + let url = new URLSearchParams(window.location.search); + + if (url.get('q')) { + filterIcons(url.get('q')); + $('#icon-filter').val(url.get('q')); + } + + if (url.get('i')) { + let icon = $('figure[data-code="'+url.get('i')+'"]'); + if (icon) { + openModal(icon); + } + } + + // + // live icon filter via search box + + $('#icon-filter').on('input', function() { + filterIcons($(this).val()); + }); + + // + // icon filter clear button + + $('.search-link').on('click', function(e) { + e.preventDefault(); + filterIcons($(this).data('q')); + $('#icon-filter').val($(this).data('q')); + }); + + // + // icon display menus + + $('#icon-menu').on('change', 'input[type=radio][name="density"]', function() { + $('#icons').data('density', $(this).val()); + }); + + $('#icon-menu').on('change', 'input[type=radio][name="rarity"]', function() { + iconsChangeRarity($(this).val()); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="border"]', function() { + iconsToggleClass('ss-border', 'border'); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="inner"]', function() { + iconsToggleClass('ss-inner', 'inner'); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="gradient"]', function() { + iconsToggleClass('ss-rarity-gradient', 'gradient'); + }); + + $('#icon-menu').on('change', 'input[type=checkbox][name="transparent"]', function() { + $('#icons figure').each(function(index, figure) { + $(figure).toggleClass('checkerboard'); + }); + }); + + // + // icon modal + + $('#icons').on('click', 'figure', function() { + openModal($(this)); + }); + + $('object').on('click', '.close', function(e) { + e.preventDefault(); + closeModal(); + }) +}); \ No newline at end of file diff --git a/docs/src/static/assets/js/zepto.fx.js b/docs/src/static/assets/js/zepto.fx.js new file mode 100644 index 0000000..80de1b8 --- /dev/null +++ b/docs/src/static/assets/js/zepto.fx.js @@ -0,0 +1,123 @@ +// Zepto.js +// (c) 2010-2016 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($, undefined){ + var prefix = '', eventPrefix, + vendors = { Webkit: 'webkit', Moz: '', O: 'o' }, + testEl = document.createElement('div'), + supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, + transform, + transitionProperty, transitionDuration, transitionTiming, transitionDelay, + animationName, animationDuration, animationTiming, animationDelay, + cssReset = {} + + function dasherize(str) { return str.replace(/([A-Z])/g, '-$1').toLowerCase() } + function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() } + + if (testEl.style.transform === undefined) $.each(vendors, function(vendor, event){ + if (testEl.style[vendor + 'TransitionProperty'] !== undefined) { + prefix = '-' + vendor.toLowerCase() + '-' + eventPrefix = event + return false + } + }) + + transform = prefix + 'transform' + cssReset[transitionProperty = prefix + 'transition-property'] = + cssReset[transitionDuration = prefix + 'transition-duration'] = + cssReset[transitionDelay = prefix + 'transition-delay'] = + cssReset[transitionTiming = prefix + 'transition-timing-function'] = + cssReset[animationName = prefix + 'animation-name'] = + cssReset[animationDuration = prefix + 'animation-duration'] = + cssReset[animationDelay = prefix + 'animation-delay'] = + cssReset[animationTiming = prefix + 'animation-timing-function'] = '' + + $.fx = { + off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined), + speeds: { _default: 400, fast: 200, slow: 600 }, + cssPrefix: prefix, + transitionEnd: normalizeEvent('TransitionEnd'), + animationEnd: normalizeEvent('AnimationEnd') + } + + $.fn.animate = function(properties, duration, ease, callback, delay){ + if ($.isFunction(duration)) + callback = duration, ease = undefined, duration = undefined + if ($.isFunction(ease)) + callback = ease, ease = undefined + if ($.isPlainObject(duration)) + ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration + if (duration) duration = (typeof duration == 'number' ? duration : + ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000 + if (delay) delay = parseFloat(delay) / 1000 + return this.anim(properties, duration, ease, callback, delay) + } + + $.fn.anim = function(properties, duration, ease, callback, delay){ + var key, cssValues = {}, cssProperties, transforms = '', + that = this, wrappedCallback, endEvent = $.fx.transitionEnd, + fired = false + + if (duration === undefined) duration = $.fx.speeds._default / 1000 + if (delay === undefined) delay = 0 + if ($.fx.off) duration = 0 + + if (typeof properties == 'string') { + // keyframe animation + cssValues[animationName] = properties + cssValues[animationDuration] = duration + 's' + cssValues[animationDelay] = delay + 's' + cssValues[animationTiming] = (ease || 'linear') + endEvent = $.fx.animationEnd + } else { + cssProperties = [] + // CSS transitions + for (key in properties) + if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') ' + else cssValues[key] = properties[key], cssProperties.push(dasherize(key)) + + if (transforms) cssValues[transform] = transforms, cssProperties.push(transform) + if (duration > 0 && typeof properties === 'object') { + cssValues[transitionProperty] = cssProperties.join(', ') + cssValues[transitionDuration] = duration + 's' + cssValues[transitionDelay] = delay + 's' + cssValues[transitionTiming] = (ease || 'linear') + } + } + + wrappedCallback = function(event){ + if (typeof event !== 'undefined') { + if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below" + $(event.target).unbind(endEvent, wrappedCallback) + } else + $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout + + fired = true + $(this).css(cssReset) + callback && callback.call(this) + } + if (duration > 0){ + this.bind(endEvent, wrappedCallback) + // transitionEnd is not always firing on older Android phones + // so make sure it gets fired + setTimeout(function(){ + if (fired) return + wrappedCallback.call(that) + }, ((duration + delay) * 1000) + 25) + } + + // trigger page reflow so new elements can animate + this.size() && this.get(0).clientLeft + + this.css(cssValues) + + if (duration <= 0) setTimeout(function() { + that.each(function(){ wrappedCallback.call(this) }) + }, 0) + + return this + } + + testEl = null +})(Zepto) \ No newline at end of file diff --git a/docs/src/static/assets/js/zepto.js b/docs/src/static/assets/js/zepto.js new file mode 100644 index 0000000..4821a1c --- /dev/null +++ b/docs/src/static/assets/js/zepto.js @@ -0,0 +1,2 @@ +/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */ +!function(t,e){"function"==typeof define&&define.amd?define(function(){return e(t)}):e(t)}(this,function(t){var e=function(){function $(t){return null==t?String(t):S[C.call(t)]||"object"}function F(t){return"function"==$(t)}function k(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function R(t){return"object"==$(t)}function Z(t){return R(t)&&!k(t)&&Object.getPrototypeOf(t)==Object.prototype}function z(t){var e=!!t&&"length"in t&&t.length,n=r.type(t);return"function"!=n&&!k(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function q(t){return a.call(t,function(t){return null!=t})}function H(t){return t.length>0?r.fn.concat.apply([],t):t}function I(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function V(t){return t in l?l[t]:l[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function _(t,e){return"number"!=typeof e||h[I(t)]?e:e+"px"}function B(t){var e,n;return c[t]||(e=f.createElement(t),f.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),c[t]=n),c[t]}function U(t){return"children"in t?u.call(t.children):r.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function X(t,e){var n,r=t?t.length:0;for(n=0;r>n;n++)this[n]=t[n];this.length=r,this.selector=e||""}function J(t,r,i){for(n in r)i&&(Z(r[n])||L(r[n]))?(Z(r[n])&&!Z(t[n])&&(t[n]={}),L(r[n])&&!L(t[n])&&(t[n]=[]),J(t[n],r[n],i)):r[n]!==e&&(t[n]=r[n])}function W(t,e){return null==e?r(t):r(t).filter(e)}function Y(t,e,n,r){return F(e)?e.call(t,n,r):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function K(t,n){var r=t.className||"",i=r&&r.baseVal!==e;return n===e?i?r.baseVal:r:void(i?r.baseVal=n:t.className=n)}function Q(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?r.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,r=t.childNodes.length;r>n;n++)tt(t.childNodes[n],e)}var e,n,r,i,O,P,o=[],s=o.concat,a=o.filter,u=o.slice,f=t.document,c={},l={},h={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,d=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,g=/^(?:body|html)$/i,v=/([A-Z])/g,y=["val","css","html","text","data","width","height","offset"],x=["after","prepend","before","append"],b=f.createElement("table"),E=f.createElement("tr"),j={tr:f.createElement("tbody"),tbody:b,thead:b,tfoot:b,td:E,th:E,"*":f.createElement("div")},w=/complete|loaded|interactive/,T=/^[\w-]*$/,S={},C=S.toString,N={},A=f.createElement("div"),D={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},L=Array.isArray||function(t){return t instanceof Array};return N.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=A).appendChild(t),r=~N.qsa(i,e).indexOf(t),o&&A.removeChild(t),r},O=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},P=function(t){return a.call(t,function(e,n){return t.indexOf(e)==n})},N.fragment=function(t,n,i){var o,s,a;return d.test(t)&&(o=r(f.createElement(RegExp.$1))),o||(t.replace&&(t=t.replace(m,"<$1>")),n===e&&(n=p.test(t)&&RegExp.$1),n in j||(n="*"),a=j[n],a.innerHTML=""+t,o=r.each(u.call(a.childNodes),function(){a.removeChild(this)})),Z(i)&&(s=r(o),r.each(i,function(t,e){y.indexOf(t)>-1?s[t](e):s.attr(t,e)})),o},N.Z=function(t,e){return new X(t,e)},N.isZ=function(t){return t instanceof N.Z},N.init=function(t,n){var i;if(!t)return N.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&p.test(t))i=N.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}else{if(F(t))return r(f).ready(t);if(N.isZ(t))return t;if(L(t))i=q(t);else if(R(t))i=[t],t=null;else if(p.test(t))i=N.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}}return N.Z(i,t)},r=function(t,e){return N.init(t,e)},r.extend=function(t){var e,n=u.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){J(t,n,e)}),t},N.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=T.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:u.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},r.contains=f.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},r.type=$,r.isFunction=F,r.isWindow=k,r.isArray=L,r.isPlainObject=Z,r.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},r.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},r.inArray=function(t,e,n){return o.indexOf.call(e,t,n)},r.camelCase=O,r.trim=function(t){return null==t?"":String.prototype.trim.call(t)},r.uuid=0,r.support={},r.expr={},r.noop=function(){},r.map=function(t,e){var n,i,o,r=[];if(z(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return o.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return F(t)?this.not(this.not(t)):r(a.call(this,function(e){return N.matches(e,t)}))},add:function(t,e){return r(P(this.concat(r(t,e))))},is:function(t){return this.length>0&&N.matches(this[0],t)},not:function(t){var n=[];if(F(t)&&t.call!==e)this.each(function(e){t.call(this,e)||n.push(this)});else{var i="string"==typeof t?this.filter(t):z(t)&&F(t.item)?u.call(t):r(t);this.forEach(function(t){i.indexOf(t)<0&&n.push(t)})}return r(n)},has:function(t){return this.filter(function(){return R(t)?r.contains(this,t):r(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!R(t)?t:r(t)},last:function(){var t=this[this.length-1];return t&&!R(t)?t:r(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?r(t).filter(function(){var t=this;return o.some.call(n,function(e){return r.contains(e,t)})}):1==this.length?r(N.qsa(this[0],t)):this.map(function(){return N.qsa(this,t)}):r()},closest:function(t,e){var n=[],i="object"==typeof t&&r(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:N.matches(o,t));)o=o!==e&&!M(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),r(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=r.map(n,function(t){return(t=t.parentNode)&&!M(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return W(e,t)},parent:function(t){return W(P(this.pluck("parentNode")),t)},children:function(t){return W(this.map(function(){return U(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||u.call(this.childNodes)})},siblings:function(t){return W(this.map(function(t,e){return a.call(U(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return r.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=B(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=F(t);if(this[0]&&!e)var n=r(t).get(0),i=n.parentNode||this.length>1;return this.each(function(o){r(this).wrapAll(e?t.call(this,o):i?n.cloneNode(!0):n)})},wrapAll:function(t){if(this[0]){r(this[0]).before(t=r(t));for(var e;(e=t.children()).length;)t=e.first();r(t).append(this)}return this},wrapInner:function(t){var e=F(t);return this.each(function(n){var i=r(this),o=i.contents(),s=e?t.call(this,n):t;o.length?o.wrapAll(s):i.append(s)})},unwrap:function(){return this.parent().each(function(){r(this).replaceWith(r(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var n=r(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()})},prev:function(t){return r(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return r(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;r(this).empty().append(Y(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=Y(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,r){var i;return"string"!=typeof t||1 in arguments?this.each(function(e){if(1===this.nodeType)if(R(t))for(n in t)G(this,n,t[n]);else G(this,t,Y(this,r,e,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(t))?i:e},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){G(this,t)},this)})},prop:function(t,e){return t=D[t]||t,1 in arguments?this.each(function(n){this[t]=Y(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=D[t]||t,this.each(function(){delete this[t]})},data:function(t,n){var r="data-"+t.replace(v,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?Q(i):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=Y(this,t,e,this.value)})):this[0]&&(this[0].multiple?r(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=r(this),i=Y(this,e,t,n.offset()),o=n.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==n.css("position")&&(s.position="relative"),n.css(s)});if(!this.length)return null;if(f.documentElement!==this[0]&&!r.contains(f.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[O(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(L(t)){if(!i)return;var o={},s=getComputedStyle(i,"");return r.each(t,function(t,e){o[e]=i.style[O(e)]||s.getPropertyValue(e)}),o}}var a="";if("string"==$(t))e||0===e?a=I(t)+":"+_(t,e):this.each(function(){this.style.removeProperty(I(t))});else for(n in t)t[n]||0===t[n]?a+=I(n)+":"+_(n,t[n])+";":this.each(function(){this.style.removeProperty(I(n))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(r(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?o.some.call(this,function(t){return this.test(K(t))},V(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var n=K(this),o=Y(this,t,e,n);o.split(/\s+/g).forEach(function(t){r(this).hasClass(t)||i.push(t)},this),i.length&&K(this,n+(n?" ":"")+i.join(" "))}}):this},removeClass:function(t){return this.each(function(n){if("className"in this){if(t===e)return K(this,"");i=K(this),Y(this,t,n,i).split(/\s+/g).forEach(function(t){i=i.replace(V(t)," ")}),K(this,i.trim())}})},toggleClass:function(t,n){return t?this.each(function(i){var o=r(this),s=Y(this,t,i,K(this));s.split(/\s+/g).forEach(function(t){(n===e?!o.hasClass(t):n)?o.addClass(t):o.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=g.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(r(t).css("margin-top"))||0,n.left-=parseFloat(r(t).css("margin-left"))||0,i.top+=parseFloat(r(e[0]).css("border-top-width"))||0,i.left+=parseFloat(r(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||f.body;t&&!g.test(t.nodeName)&&"static"==r(t).css("position");)t=t.offsetParent;return t})}},r.fn.detach=r.fn.remove,["width","height"].forEach(function(t){var n=t.replace(/./,function(t){return t[0].toUpperCase()});r.fn[t]=function(i){var o,s=this[0];return i===e?k(s)?s["inner"+n]:M(s)?s.documentElement["scroll"+n]:(o=this.offset())&&o[t]:this.each(function(e){s=r(this),s.css(t,Y(this,i,e,s[t]()))})}}),x.forEach(function(n,i){var o=i%2;r.fn[n]=function(){var n,a,s=r.map(arguments,function(t){var i=[];return n=$(t),"array"==n?(t.forEach(function(t){return t.nodeType!==e?i.push(t):r.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(N.fragment(t)))}),i):"object"==n||null==t?t:N.fragment(t)}),u=this.length>1;return s.length<1?this:this.each(function(e,n){a=o?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var c=r.contains(f.documentElement,a);s.forEach(function(e){if(u)e=e.cloneNode(!0);else if(!a)return r(e).remove();a.insertBefore(e,n),c&&tt(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},r.fn[o?n+"To":"insert"+(i?"Before":"After")]=function(t){return r(t)[n](this),this}}),N.Z.prototype=X.prototype=r.fn,N.uniq=P,N.deserializeValue=Q,r.zepto=N,r}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function h(t){return t._zid||(t._zid=n++)}function p(t,e,n,r){if(e=d(e),e.ns)var i=m(e.ns);return(a[h(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)})}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function m(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function g(t,e){return t.del&&!f&&t.e in c||!!e}function v(t){return l[t]||f&&c[t]||t}function y(t,n,i,o,s,u,f){var c=h(t),p=a[c]||(a[c]=[]);n.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(i);var a=d(n);a.fn=i,a.sel=s,a.e in l&&(i=function(t){var n=t.relatedTarget;return!n||n!==this&&!e.contains(this,n)?a.fn.apply(this,arguments):void 0}),a.del=u;var c=u||i;a.proxy=function(e){if(e=T(e),!e.isImmediatePropagationStopped()){e.data=o;var n=c.apply(t,e._args==r?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},a.i=p.length,p.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,g(a,f))})}function x(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach(function(e){p(t,e,n,r).forEach(function(e){delete a[o][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,g(e,i))})})}function T(t,n){return(n||!t.isDefaultPrevented)&&(n||(n=t),e.each(w,function(e,r){var i=n[e];t[e]=function(){return this[r]=b,i&&i.apply(n,arguments)},t[r]=E}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==r?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=b)),t}function S(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===r||(n[e]=t[e]);return T(n,t)}var r,n=1,i=Array.prototype.slice,o=e.isFunction,s=function(t){return"string"==typeof t},a={},u={},f="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:x},e.proxy=function(t,n){var r=2 in arguments&&i.call(arguments,2);if(o(t)){var a=function(){return t.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=h(t),a}if(s(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var b=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,w={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,a,u,f){var c,l,h=this;return t&&!s(t)?(e.each(t,function(t,e){h.on(t,n,a,e,f)}),h):(s(n)||o(u)||u===!1||(u=a,a=n,n=r),(u===r||a===!1)&&(u=a,a=r),u===!1&&(u=E),h.each(function(r,o){f&&(c=function(t){return x(o,t.type,u),u.apply(this,arguments)}),n&&(l=function(t){var r,s=e(t.target).closest(n,o).get(0);return s&&s!==o?(r=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||u).apply(s,[r].concat(i.call(arguments,1)))):void 0}),y(o,t,u,a,n,l||c)}))},e.fn.off=function(t,n,i){var a=this;return t&&!s(t)?(e.each(t,function(t,e){a.off(t,n,e)}),a):(s(n)||o(i)||i===!1||(i=n,n=r),i===!1&&(i=E),a.each(function(){x(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=s(t)||e.isPlainObject(t)?e.Event(t):T(t),t._args=n,this.each(function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,i;return this.each(function(o,a){r=S(s(t)?e.Event(t):t),r._args=n,r.target=a,e.each(p(a,t.type||t),function(t,e){return i=e.proxy(r),r.isImmediatePropagationStopped()?!1:void 0})}),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){s(t)||(e=t,t=e.type);var n=document.createEvent(u[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),T(n)}}(e),function(e){function p(t,n,r){var i=e.Event(n);return e(t).trigger(i,r),!i.isDefaultPrevented()}function d(t,e,n,i){return t.global?p(e||r,n,i):void 0}function m(t){t.global&&0===e.active++&&d(t,null,"ajaxStart")}function g(t){t.global&&!--e.active&&d(t,null,"ajaxStop")}function v(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||d(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void d(e,n,"ajaxSend",[t,e])}function y(t,e,n,r){var i=n.context,o="success";n.success.call(i,t,o,e),r&&r.resolveWith(i,[t,o,e]),d(n,i,"ajaxSuccess",[e,n,t]),b(o,e,n)}function x(t,e,n,r,i){var o=r.context;r.error.call(o,n,e,t),i&&i.rejectWith(o,[n,e,t]),d(r,o,"ajaxError",[n,r,t||e]),b(e,n,r)}function b(t,e,n){var r=n.context;n.complete.call(r,e,t),d(n,r,"ajaxComplete",[e,n]),g(n)}function E(t,e,n){if(n.dataFilter==j)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function j(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==c?"html":t==f?"json":a.test(t)?"script":u.test(t)&&"xml")||"text"}function T(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function S(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=T(t.url,t.data),t.data=void 0)}function C(t,n,r,i){return e.isFunction(n)&&(i=r,r=n,n=void 0),e.isFunction(r)||(i=r,r=void 0),{url:t,data:n,success:r,dataType:i}}function O(t,n,r,i){var o,s=e.isArray(n),a=e.isPlainObject(n);e.each(n,function(n,u){o=e.type(u),i&&(n=r?i:i+"["+(a||"object"==o||"array"==o?n:"")+"]"),!i&&s?t.add(u.name,u.value):"array"==o||!r&&"object"==o?O(t,u,r,n):t.add(n,u)})}var i,o,n=+new Date,r=t.document,s=/)<[^<]*)*<\/script>/gi,a=/^(?:text|application)\/javascript/i,u=/^(?:text|application)\/xml/i,f="application/json",c="text/html",l=/^\s*$/,h=r.createElement("a");h.href=t.location.href,e.active=0,e.ajaxJSONP=function(i,o){if(!("type"in i))return e.ajax(i);var c,p,s=i.jsonpCallback,a=(e.isFunction(s)?s():s)||"Zepto"+n++,u=r.createElement("script"),f=t[a],l=function(t){e(u).triggerHandler("error",t||"abort")},h={abort:l};return o&&o.promise(h),e(u).on("load error",function(n,r){clearTimeout(p),e(u).off().remove(),"error"!=n.type&&c?y(c[0],h,i,o):x(null,r||"error",h,i,o),t[a]=f,c&&e.isFunction(f)&&f(c[0]),f=c=void 0}),v(h,i)===!1?(l("abort"),h):(t[a]=function(){c=arguments},u.src=i.url.replace(/\?(.+)=\?/,"?$1="+a),r.head.appendChild(u),i.timeout>0&&(p=setTimeout(function(){l("timeout")},i.timeout)),h)},e.ajaxSettings={type:"GET",beforeSend:j,success:j,error:j,complete:j,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:f,xml:"application/xml, text/xml",html:c,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:j},e.ajax=function(n){var u,f,s=e.extend({},n||{}),a=e.Deferred&&e.Deferred();for(i in e.ajaxSettings)void 0===s[i]&&(s[i]=e.ajaxSettings[i]);m(s),s.crossDomain||(u=r.createElement("a"),u.href=s.url,u.href=u.href,s.crossDomain=h.protocol+"//"+h.host!=u.protocol+"//"+u.host),s.url||(s.url=t.location.toString()),(f=s.url.indexOf("#"))>-1&&(s.url=s.url.slice(0,f)),S(s);var c=s.dataType,p=/\?.+=\?/.test(s.url);if(p&&(c="jsonp"),s.cache!==!1&&(n&&n.cache===!0||"script"!=c&&"jsonp"!=c)||(s.url=T(s.url,"_="+Date.now())),"jsonp"==c)return p||(s.url=T(s.url,s.jsonp?s.jsonp+"=?":s.jsonp===!1?"":"callback=?")),e.ajaxJSONP(s,a);var P,d=s.accepts[c],g={},b=function(t,e){g[t.toLowerCase()]=[t,e]},C=/^([\w-]+:)\/\//.test(s.url)?RegExp.$1:t.location.protocol,N=s.xhr(),O=N.setRequestHeader;if(a&&a.promise(N),s.crossDomain||b("X-Requested-With","XMLHttpRequest"),b("Accept",d||"*/*"),(d=s.mimeType||d)&&(d.indexOf(",")>-1&&(d=d.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(d)),(s.contentType||s.contentType!==!1&&s.data&&"GET"!=s.type.toUpperCase())&&b("Content-Type",s.contentType||"application/x-www-form-urlencoded"),s.headers)for(o in s.headers)b(o,s.headers[o]);if(N.setRequestHeader=b,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=j,clearTimeout(P);var t,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==C){if(c=c||w(s.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)t=N.response;else{t=N.responseText;try{t=E(t,c,s),"script"==c?(1,eval)(t):"xml"==c?t=N.responseXML:"json"==c&&(t=l.test(t)?null:e.parseJSON(t))}catch(r){n=r}if(n)return x(n,"parsererror",N,s,a)}y(t,N,s,a)}else x(N.statusText||null,N.status?"error":"abort",N,s,a)}},v(N,s)===!1)return N.abort(),x(null,"abort",N,s,a),N;var A="async"in s?s.async:!0;if(N.open(s.type,s.url,A,s.username,s.password),s.xhrFields)for(o in s.xhrFields)N[o]=s.xhrFields[o];for(o in g)O.apply(N,g[o]);return s.timeout>0&&(P=setTimeout(function(){N.onreadystatechange=j,N.abort(),x(null,"timeout",N,s,a)},s.timeout)),N.send(s.data?s.data:null),N},e.get=function(){return e.ajax(C.apply(null,arguments))},e.post=function(){var t=C.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=C.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,r){if(!this.length)return this;var a,i=this,o=t.split(/\s/),u=C(t,n,r),f=u.success;return o.length>1&&(u.url=o[0],a=o[1]),u.success=function(t){i.html(a?e("
    ").html(t.replace(s,"")).find(a):t),f&&f.apply(i,arguments)},e.ajax(u),this};var N=encodeURIComponent;e.param=function(t,n){var r=[];return r.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(t)+"="+N(n))},O(r,t,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(r){return null}}}}(),e}); \ No newline at end of file diff --git a/docs/src/static/assets/svg/cardsphere.svg b/docs/src/static/assets/svg/cardsphere.svg new file mode 100644 index 0000000..b463f60 --- /dev/null +++ b/docs/src/static/assets/svg/cardsphere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/static/assets/svg/echomtg.svg b/docs/src/static/assets/svg/echomtg.svg new file mode 100644 index 0000000..f0945dd --- /dev/null +++ b/docs/src/static/assets/svg/echomtg.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/static/assets/svg/manatraders.svg b/docs/src/static/assets/svg/manatraders.svg new file mode 100644 index 0000000..8af0b23 --- /dev/null +++ b/docs/src/static/assets/svg/manatraders.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/static/assets/svg/mtgaassistant.svg b/docs/src/static/assets/svg/mtgaassistant.svg new file mode 100644 index 0000000..ae0e42e --- /dev/null +++ b/docs/src/static/assets/svg/mtgaassistant.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/src/static/assets/svg/mtgjson.svg b/docs/src/static/assets/svg/mtgjson.svg new file mode 100644 index 0000000..f7dc7b4 --- /dev/null +++ b/docs/src/static/assets/svg/mtgjson.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/static/assets/svg/rarity.svg b/docs/src/static/assets/svg/rarity.svg new file mode 100644 index 0000000..08c5fe9 --- /dev/null +++ b/docs/src/static/assets/svg/rarity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/static/assets/svg/scg.svg b/docs/src/static/assets/svg/scg.svg new file mode 100644 index 0000000..a0403cb --- /dev/null +++ b/docs/src/static/assets/svg/scg.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/static/assets/svg/standard.svg b/docs/src/static/assets/svg/standard.svg new file mode 100644 index 0000000..e5dffac --- /dev/null +++ b/docs/src/static/assets/svg/standard.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/static/assets/svg/tappedout.svg b/docs/src/static/assets/svg/tappedout.svg new file mode 100644 index 0000000..3548d26 --- /dev/null +++ b/docs/src/static/assets/svg/tappedout.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/static/assets/svg/tcgplayer.svg b/docs/src/static/assets/svg/tcgplayer.svg new file mode 100644 index 0000000..10d1fd1 --- /dev/null +++ b/docs/src/static/assets/svg/tcgplayer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/static/assets/svg/untapped.svg b/docs/src/static/assets/svg/untapped.svg new file mode 100644 index 0000000..ba2fcbc --- /dev/null +++ b/docs/src/static/assets/svg/untapped.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/static/assets/svg/yours.svg b/docs/src/static/assets/svg/yours.svg new file mode 100644 index 0000000..e8a324d --- /dev/null +++ b/docs/src/static/assets/svg/yours.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/font/keyrune.eot b/src/font/keyrune.eot new file mode 100644 index 0000000..1593b2d Binary files /dev/null and b/src/font/keyrune.eot differ diff --git a/src/font/keyrune.svg b/src/font/keyrune.svg new file mode 100644 index 0000000..af55683 --- /dev/null +++ b/src/font/keyrune.svg @@ -0,0 +1,136 @@ + + + + + + +{ + "fontFamily": "keyrune", + "majorVersion": 4, + "minorVersion": 0.45, + "fontURL": "https://keyrune.andrewgioia.com", + "description": "Magic: the Gathering set symbol pictographic font\nFont generated by IcoMoon.", + "copyright": "2022", + "designer": "Andrew Gioia", + "designerURL": "https://andrewgioia.com", + "license": "OFL", + "licenseURL": "https://scripts.sil.org/OFL", + "version": "Version 4.0", + "fontId": "keyrune", + "psName": "keyrune", + "subFamily": "Regular", + "fullName": "keyrune" +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/font/keyrune.ttf b/src/font/keyrune.ttf new file mode 100644 index 0000000..c3ed197 Binary files /dev/null and b/src/font/keyrune.ttf differ diff --git a/src/font/keyrune.woff b/src/font/keyrune.woff new file mode 100644 index 0000000..21e931d Binary files /dev/null and b/src/font/keyrune.woff differ diff --git a/src/font/keyrune.woff2 b/src/font/keyrune.woff2 new file mode 100644 index 0000000..3f03330 Binary files /dev/null and b/src/font/keyrune.woff2 differ diff --git a/src/scss/_aliases.scss b/src/scss/_aliases.scss new file mode 100644 index 0000000..9ad5d7c --- /dev/null +++ b/src/scss/_aliases.scss @@ -0,0 +1,25 @@ +$keyrune-aliases: ( + legchr: ("leg2"), + wl: ("wth2"), + pmei: ("pleaf"), // legacy support + pmtg: ("plgm", "parl"), // originally was plgm, but upgrading this to pmtg b/c of its ubiquity + po: ("por2"), + pvan: ("van"), // legacy support +); + +$keyrune-complete-aliases: ( + past: ("pmic"), + // + // shooting star + pmei: ("o90p", "pcel", "olep"), + // + // m in circle + pmtg: ("ptc", "rqs", "pred", "wc97", "jgp", "wc98"), + // + // expansion tokens + exo: ("pexo"), + sth: ("psth"), + tmp: ("ptmp"), + ugl: ("tugl"), + vis: ("mgb") +); \ No newline at end of file diff --git a/src/scss/_helpers.scss b/src/scss/_helpers.scss new file mode 100644 index 0000000..e425d43 --- /dev/null +++ b/src/scss/_helpers.scss @@ -0,0 +1,25 @@ +// +// output the correct glyphs for the 3 layers' pseudoelements +// +@mixin layers($layers) { + &::before { + content: glyph-content(map-get($layers, rarity)); + } + &.#{$keyrune-prefix}-border { + &::after { + content: glyph-content(map-get($layers, border)); + } + } + &.#{$keyrune-prefix}-inner { + &::marker { + content: glyph-content(map-get($layers, inner)); + } + } +} + +// +// correctly parse the glyph's unicode for css +// +@function glyph_content($glyph) { + @return unquote("\"#{$glyph}\""); +} \ No newline at end of file diff --git a/src/scss/_media.scss b/src/scss/_media.scss new file mode 100644 index 0000000..bcb94a1 --- /dev/null +++ b/src/scss/_media.scss @@ -0,0 +1,15 @@ +@use "sass:map"; + +:root { + --border-default: #{map.get($keyrune-colors, "white")}; + --border-contrast: #{map.get($keyrune-colors, "black", "700")}; + --rarity-default: #{map.get($keyrune-colors, "black", "700")}; + --inner-default: #{map.get($keyrune-colors, "white")}; + + &[data-mode='dark'] { + --border-default: #{map.get($keyrune-colors, "black", "100")}; + --border-contrast: #{map.get($keyrune-colors, "black", "900")}; + --rarity-default: #{map.get($keyrune-colors, "black", "900")}; + --inner-default: #{map.get($keyrune-colors, "white")}; + } +} \ No newline at end of file diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss new file mode 100644 index 0000000..a75f6a6 --- /dev/null +++ b/src/scss/_variables.scss @@ -0,0 +1,281 @@ +// core +$keyrune-font-family: "keyrune" !default; +$keyrune-font-path: "../font" !default; +$keyrune-prefix: "ss" !default; +$keyrune-version: "4.0.38" !default; + +// build options +$keyrune-include-aliases: true; + +// +$keyrune-colors: ( + "black": ( + "100": "#ddd", + "300": "#3a3a3a", // old "#4e4d4b", + "500": "#202124", // old "#393735", + "700": "#131417", // old "#282828", + "900": "#000", + ), + "white": "#fff", +); + +// rarity colors +$keyrune-rarities: ( + "common": ( + "solid": "#131417", + "left": "#131417", + "center": "#131417", + "right": "#131417", + ), + "common-alt": ( + "solid": "#fff", + ), + "uncommon": ( + "solid": "#707883", + "left": "#4d6572", + "center": "#c3dfeb", + "right": "#4d6572", + ), + "rare": ( + "solid": "#b7a066", + "left": "#7f6f43", + "center": "#d9c287", + "right": "#7f6f43", + ), + "mythic": ( + "solid": "#bf4427", + "left": "#ac392e", + "center": "#eb9d3d", + "right": "#ac392e", + ) +); + +// set symbols +$keyrune-sets: ( + lea: ( + rarity: "\e000", + border: "\e001", + inner: "\e002", + print: 3 + ), + leb: ( + rarity: "\e003", + border: "\e004", + inner: "\e005", + ), + 2ed: ( + rarity: "\e006", + border: "\e007", + inner: "\e008", + ), + ced: ( + rarity: "\e009", + border: "\e00a", + inner: "\e00b", + ), + cei: ( + rarity: "\e00c", + border: "\e00d", + inner: "\e00e", + ), + arn: ( + rarity: "\e00f", + border: "\e010", + inner: "\e011", + ), + atq: ( + rarity: "\e012", + border: "\e013", + inner: "\f8ff", // empty + ), + 3ed: ( + rarity: "\e015", + border: "\e016", + inner: "\e017", + ), + fbb: ( + rarity: "\e018", + border: "\e019", + inner: "\e01a", + ), + leg: ( + rarity: "\e01b", + border: "\e01c", + inner: "\e01d", + ), + sum: ( + rarity: "\e01e", + border: "\e01f", + inner: "\f8ff", // empty + ), + pdrc: ( + rarity: "\e021", + border: "\e022", + inner: "\f8ff", // empty + ), + drk: ( + rarity: "\e024", + border: "\e025", + inner: "\f8ff", // empty + ), + phpr: ( + rarity: "\e027", + border: "\e028", + inner: "\f8ff", // empty + ), + fem: ( + rarity: "\e02a", + border: "\e02b", + inner: "\f8ff", // empty + ), + pmei: ( + rarity: "\e02d", + border: "\e02e", + inner: "\f8ff", // empty + ), + pmtg: ( + rarity: "\e030", + border: "\e031", + inner: "\f8ff", // empty + ), + 4ed: ( + rarity: "\e033", + border: "\e034", + inner: "\f8ff", // empty + ), + 4bb: ( + rarity: "\e036", + border: "\e037", + inner: "\f8ff", // empty + ), + ice: ( + rarity: "\e039", + border: "\e03a", + inner: "\e03b", + ), + chr: ( + rarity: "\e03c", + border: "\e03d", + inner: "\f8ff", // empty + ), + ren: ( + rarity: "\e03f", + border: "\e040", + inner: "\f8ff", // empty + ), + rin: ( + rarity: "\e042", + border: "\e043", + inner: "\f8ff", // empty + ), + hml: ( + rarity: "\e045", + border: "\e046", + inner: "\e047", + ), + all: ( + rarity: "\e048", + border: "\e049", + inner: "\e04a", + ), + mir: ( + rarity: "\e04b", + border: "\e04c", + inner: "\f8ff", // empty + ), + itp: ( + rarity: "\e04e", + border: "\e04f", + inner: "\f8ff", // empty + ), + vis: ( + rarity: "\e051", + border: "\e052", + inner: "\e053", // empty + ), + 5ed: ( + rarity: "\e054", + border: "\e055", + inner: "\f8ff", // empty + ), + past: ( + rarity: "\e057", + border: "\e058", + inner: "\f8ff", // empty + ), + por: ( + rarity: "\e05a", + border: "\e05b", + inner: "\e05c", + ), + pvan: ( + rarity: "\e05d", + border: "\e05e", + inner: "\f8ff", // empty + ), + wth: ( + rarity: "\e060", + border: "\e061", + inner: "\e062", + ), + tmp: ( + rarity: "\e063", + border: "\e064", + inner: "\f8ff", // empty + ), + sth: ( + rarity: "\e066", + border: "\e067", + inner: "\f8ff", // empty + ), + exo: ( + rarity: "\e069", + border: "\e06a", + inner: "\f8ff", // empty + ), + p02: ( + rarity: "\e06c", + border: "\e06d", + inner: "\f8ff", // empty + ), + ugl: ( + rarity: "\e06f", + border: "\e070", + inner: "\f8ff", // empty + ), + palp: ( + rarity: "\e072", + border: "\e073", + inner: "\f8ff", // empty + ), + // + // ... + // + 6ed: ( + rarity: "\e07e", + border: "\e07f", + inner: "\f8ff", // empty + ), + // + // backwards from the end for alternatives/oddities + legchr: ( + rarity: "\f8f6", + border: "\f8f5", + inner: "\f8ff", // em + ), + pgc98: ( + rarity: "\f8f4", + border: "\f8f3", + inner: "\f8ff", // em + ), + po: ( + rarity: "\f8f2", + border: "\f8f1", + inner: "\f8f0", + ), + wl: ( + rarity: "\f8ef", + border: "\f8ee", + inner: "\f8ff", // empty + ), +); \ No newline at end of file diff --git a/src/scss/keyrune.scss b/src/scss/keyrune.scss new file mode 100644 index 0000000..1de77d9 --- /dev/null +++ b/src/scss/keyrune.scss @@ -0,0 +1,195 @@ +@use "sass:map"; + +@import "variables"; +@import "aliases"; +@import "helpers"; +@import "media"; + +@font-face { + font-family: '#{$keyrune-font-family}'; + src: url('#{$keyrune-font-path}/#{$keyrune-font-family}.eot?#{$keyrune-version}'); + src: url('#{$keyrune-font-path}/#{$keyrune-font-family}.eot?#{$keyrune-version}#iefix') format('embedded-opentype'), + url('#{$keyrune-font-path}/#{$keyrune-font-family}.woff2?#{$keyrune-version}') format('woff2'), + url('#{$keyrune-font-path}/#{$keyrune-font-family}.ttf?#{$keyrune-version}') format('truetype'), + url('#{$keyrune-font-path}/#{$keyrune-font-family}.woff?#{$keyrune-version}') format('woff'), + url('#{$keyrune-font-path}/#{$keyrune-font-family}.svg?#{$keyrune-version}##{$keyrune-font-family}') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +// default styles and set symbol definitions +.#{$keyrune-prefix} { + + // base styles + font-family: '#{$keyrune-font-family}' !important; + color: var(--icon-default); + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + position: relative; + text-transform: none; + line-height: 1; + display: inline-flex; + + // better font rendering + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + // ::before is the symbol layer + // ::after is the border layer + // ::marker is the (experimental) inner layer + @each $set, $layers in $keyrune-sets { + &-#{$set} { + @include layers($layers); + } + // check for aliases and assign the same glyphs + @if ($keyrune-include-aliases) { + @if map-get($keyrune-aliases, $set) { + @each $alias in map-get($keyrune-aliases, $set) { + &-#{$alias} { + @include layers($layers); + } + } + } + } + } + + // accessory features + &.#{$keyrune-prefix} { + + // border + &-border { + + // default and common border styles + &::after { + color: var(--border-default); + position: absolute; + left: 0; + } + + // rarities > common have a black border + &.#{$keyrune-prefix}-rarity-common-alt::after, + &.#{$keyrune-prefix}-rarity-uncommon::after, + &.#{$keyrune-prefix}-rarity-rare::after, + &.#{$keyrune-prefix}-rarity-mythic::after, + &.#{$keyrune-prefix}-rarity-foil::after, + &.#{$keyrune-prefix}-border-black::after { + color: var(--border-contrast); + } + + // convenience class to force a white border + &-white::after { + color: var(--border-default) !important; + } + } + + // inner + // requires advanced positional styles for glyphs taller than they are wide + &-inner { + + // must be list-item for this to appear + display: list-item; + list-style-position: inside; + + // set symbol must be absolutely positioned + &::before { + position: absolute; + left: 0; + } + + // inner color + &::marker { + color: var(--inner-default); + } + + // position via transforms for everything until there's a better way + &::before, + &::after, + &::marker { + left: 50%; + transform: translateX(-50%); + } + } + + // rarity colors + &-rarity { + + // rarity loop + @each $rarity, $colors in $keyrune-rarities { + &-#{$rarity} { + // set the symbol's color + &::before { + color: #{map.get($colors, solid)}; + } + // gradient alternative + &.#{$keyrune-prefix}-rarity-gradient::before { + background: linear-gradient( + 90deg, + #{map.get($colors, left)} 0%, + #{map.get($colors, center)} 50%, + #{map.get($colors, right)} 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + } + + // special foil case + &-foil { + &::before { + color: #00afc9; + } + &.#{$keyrune-prefix}-rarity-gradient::before { + background: linear-gradient( + 135deg, + #ea8d66 0%, + #ea8d66 15%, + #fdef8a 28%, + #8bcc93 42%, + #a6dced 55%, + #6f75aa 68%, + #e599c2 84%, + #e599c2 100%); + color: transparent; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + } + + // fixed width + &-fw { + + // set the width to the largest symbole, ARN, at 1.75em + width: 1.75em; + display: list-item; + list-style-position: inside; + text-align: center; + + // if there is no inner, we need to hide the marker + &:not(.#{$keyrune-prefix}-inner) { + list-style: none; + } + + // correction when there's a border and no inner + &.#{$keyrune-prefix}-border:not(.#{$keyrune-prefix}-inner)::after { + left: 50%; + transform: translateX(-50%); + } + } + + // colors + &-white { + &::before, + &::after, + &::marker { + color: #{map.get($keyrune-colors, "white")}; + } + } + } +} \ No newline at end of file