diff --git a/docs/font-files/Inter-Black.otf b/docs/font-files/Inter-Black.otf new file mode 100644 index 000000000..b0f97e99e --- /dev/null +++ b/docs/font-files/Inter-Black.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1bc9f665ece761ae58f62226c1cddda1aacb10d40371d2506f5ce508253cce5 +size 250332 diff --git a/docs/font-files/Inter-Black.woff b/docs/font-files/Inter-Black.woff new file mode 100644 index 000000000..b1207d334 --- /dev/null +++ b/docs/font-files/Inter-Black.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:067c82f76a027003897e055f24fbedf1596efe5c315426742417a1cdd546175b +size 139648 diff --git a/docs/font-files/Inter-Black.woff2 b/docs/font-files/Inter-Black.woff2 new file mode 100644 index 000000000..0118a0705 --- /dev/null +++ b/docs/font-files/Inter-Black.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f1f5616692835100ba2e6ac379edf149927516695b54dba2cb2a3ff63aaa80e +size 104656 diff --git a/docs/font-files/Inter-BlackItalic.otf b/docs/font-files/Inter-BlackItalic.otf new file mode 100644 index 000000000..9af089028 --- /dev/null +++ b/docs/font-files/Inter-BlackItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ceb4e22099af5cf58a7f51cd1537675611cf2dd2fba267b71a6a4be699d1e84 +size 257460 diff --git a/docs/font-files/Inter-BlackItalic.woff b/docs/font-files/Inter-BlackItalic.woff new file mode 100644 index 000000000..5a5854c3b --- /dev/null +++ b/docs/font-files/Inter-BlackItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c628a2cfd665f3431a95f4d5a18538c60625aa11344bfd082ef114c8a8d89fbd +size 145816 diff --git a/docs/font-files/Inter-BlackItalic.woff2 b/docs/font-files/Inter-BlackItalic.woff2 new file mode 100644 index 000000000..6fe02f008 --- /dev/null +++ b/docs/font-files/Inter-BlackItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72d5983b0a4097695a57b8f74420838f4b96aa5acf85855fd22d1504bd56344d +size 109900 diff --git a/docs/font-files/Inter-Bold.otf b/docs/font-files/Inter-Bold.otf new file mode 100644 index 000000000..4ee155029 --- /dev/null +++ b/docs/font-files/Inter-Bold.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc2f768cc7a1ac74ac7c562b9c41f2e768b37872cf19c197a893a50f17661474 +size 255076 diff --git a/docs/font-files/Inter-Bold.woff b/docs/font-files/Inter-Bold.woff new file mode 100644 index 000000000..76d1b65f8 --- /dev/null +++ b/docs/font-files/Inter-Bold.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20d46cff880b05ea0107ec0c1380fddca86190ef3c11bb4980098c90a249f57a +size 143464 diff --git a/docs/font-files/Inter-Bold.woff2 b/docs/font-files/Inter-Bold.woff2 new file mode 100644 index 000000000..401b6ee1f --- /dev/null +++ b/docs/font-files/Inter-Bold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f5e9a23c31da569497ae9c233b3a3176b33da9ecd52caa3b45dea57805a0cf8 +size 107144 diff --git a/docs/font-files/Inter-BoldItalic.otf b/docs/font-files/Inter-BoldItalic.otf new file mode 100644 index 000000000..606191fb8 --- /dev/null +++ b/docs/font-files/Inter-BoldItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f9fadd0b2aea598cb80a7a5eec7309c6dbc1d475159348d7f0b6e150638275e +size 262004 diff --git a/docs/font-files/Inter-BoldItalic.woff b/docs/font-files/Inter-BoldItalic.woff new file mode 100644 index 000000000..cc7d70b3b --- /dev/null +++ b/docs/font-files/Inter-BoldItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31a185fa598b3839cd20564dd2555d904ee09329f90e7c4455f77e5efa656b58 +size 149360 diff --git a/docs/font-files/Inter-BoldItalic.woff2 b/docs/font-files/Inter-BoldItalic.woff2 new file mode 100644 index 000000000..d123d78e1 --- /dev/null +++ b/docs/font-files/Inter-BoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e09dcbe18b9423630caedc9e2363157ef12f34982f3be4ad67007cf4d13b66cc +size 112276 diff --git a/docs/font-files/Inter-ExtraBold.otf b/docs/font-files/Inter-ExtraBold.otf new file mode 100644 index 000000000..f37f878c0 --- /dev/null +++ b/docs/font-files/Inter-ExtraBold.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:486f6bfaa7bf5b2303e3f1c1114f7a6b4d55579c7c9da6204e3d0ff2f882ce96 +size 255968 diff --git a/docs/font-files/Inter-ExtraBold.woff b/docs/font-files/Inter-ExtraBold.woff new file mode 100644 index 000000000..d3d641f10 --- /dev/null +++ b/docs/font-files/Inter-ExtraBold.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45bae435f9c3e8c6be01544cc265790e692e9bf27ad602cebe7be1b42290deb5 +size 143256 diff --git a/docs/font-files/Inter-ExtraBold.woff2 b/docs/font-files/Inter-ExtraBold.woff2 new file mode 100644 index 000000000..664e3fe6e --- /dev/null +++ b/docs/font-files/Inter-ExtraBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ef4267ef8c1d414d85062c3eca4a02270822af0e4dda820937a4577200d4d76 +size 107304 diff --git a/docs/font-files/Inter-ExtraBoldItalic.otf b/docs/font-files/Inter-ExtraBoldItalic.otf new file mode 100644 index 000000000..230ae58e9 --- /dev/null +++ b/docs/font-files/Inter-ExtraBoldItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba8ff17d6878f363e9839aff81df11ed74a2a1379f80d2ee340eac0f694980e0 +size 262184 diff --git a/docs/font-files/Inter-ExtraBoldItalic.woff b/docs/font-files/Inter-ExtraBoldItalic.woff new file mode 100644 index 000000000..fbea3dc3d --- /dev/null +++ b/docs/font-files/Inter-ExtraBoldItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30a1af87c44710a451fc74605db8edd20d5165cf6ad18279adf63d4bdc778bd8 +size 149116 diff --git a/docs/font-files/Inter-ExtraBoldItalic.woff2 b/docs/font-files/Inter-ExtraBoldItalic.woff2 new file mode 100644 index 000000000..091aa6564 --- /dev/null +++ b/docs/font-files/Inter-ExtraBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1e1f6a03745f05feef43c356ecea9c9b0e3dfd58316f9f595779cc6dd4493d6 +size 112656 diff --git a/docs/font-files/Inter-ExtraLight.otf b/docs/font-files/Inter-ExtraLight.otf new file mode 100644 index 000000000..1ced994ac --- /dev/null +++ b/docs/font-files/Inter-ExtraLight.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27510302a3ee6cfbf9c6418377ac17ebe6a0832827b752230db4607ced596cc5 +size 249852 diff --git a/docs/font-files/Inter-ExtraLight.woff b/docs/font-files/Inter-ExtraLight.woff new file mode 100644 index 000000000..e1602e99a --- /dev/null +++ b/docs/font-files/Inter-ExtraLight.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7be68a43fe5798b7d1ddcbef4b3d937855f8d3009f4c20efa583b8c72e3f90e +size 141344 diff --git a/docs/font-files/Inter-ExtraLight.woff2 b/docs/font-files/Inter-ExtraLight.woff2 new file mode 100644 index 000000000..e7fdd0cac --- /dev/null +++ b/docs/font-files/Inter-ExtraLight.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da47c3355fbe60ecd3421b09e64701d74c7edccf9102ce9a52edf627d664c30d +size 105444 diff --git a/docs/font-files/Inter-ExtraLightItalic.otf b/docs/font-files/Inter-ExtraLightItalic.otf new file mode 100644 index 000000000..e250a0aff --- /dev/null +++ b/docs/font-files/Inter-ExtraLightItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a9de0e765fcd4966b4890672069686ad49878f6ff62023addd52be38dc7e139 +size 260428 diff --git a/docs/font-files/Inter-ExtraLightItalic.woff b/docs/font-files/Inter-ExtraLightItalic.woff new file mode 100644 index 000000000..87139cde0 --- /dev/null +++ b/docs/font-files/Inter-ExtraLightItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:762fa4d2c7d615ba5fab034a906b11141b594955a99337873f63274b3ff08b1f +size 148416 diff --git a/docs/font-files/Inter-ExtraLightItalic.woff2 b/docs/font-files/Inter-ExtraLightItalic.woff2 new file mode 100644 index 000000000..25a294f42 --- /dev/null +++ b/docs/font-files/Inter-ExtraLightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3f94cfe4f6fdfc286bf7b018a43e686394be7ebc2a2fd59bf8e63662557ff87 +size 111804 diff --git a/docs/font-files/Inter-Italic.otf b/docs/font-files/Inter-Italic.otf new file mode 100644 index 000000000..3164d0158 --- /dev/null +++ b/docs/font-files/Inter-Italic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d76c717ae19300cfe6ac3c35fd174660515569be4ae1120a2649f7779eba4553 +size 256264 diff --git a/docs/font-files/Inter-Italic.woff b/docs/font-files/Inter-Italic.woff new file mode 100644 index 000000000..d086ca9f1 --- /dev/null +++ b/docs/font-files/Inter-Italic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b187d5753fdaf16b581765b242d5ae6765c3d20e8fd8aa3197626f043a776b9 +size 143476 diff --git a/docs/font-files/Inter-Italic.woff2 b/docs/font-files/Inter-Italic.woff2 new file mode 100644 index 000000000..bd08ee6b3 --- /dev/null +++ b/docs/font-files/Inter-Italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab4e8083d05d9694dc183fd63806f140c733e7f07f483bd8d01e7b0429d7dc0 +size 108172 diff --git a/docs/font-files/Inter-Light.otf b/docs/font-files/Inter-Light.otf new file mode 100644 index 000000000..672f31690 --- /dev/null +++ b/docs/font-files/Inter-Light.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:103947922d86bfd4e17a9ad2748a3b2b8d9dcfc03d3a3bd0b5a177f1e8403dba +size 249612 diff --git a/docs/font-files/Inter-Light.woff b/docs/font-files/Inter-Light.woff new file mode 100644 index 000000000..c3e349d1f --- /dev/null +++ b/docs/font-files/Inter-Light.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:383260989caddfaaf31edea1a44dd06ef2bceb0c51d25171624f450649aa29fd +size 141264 diff --git a/docs/font-files/Inter-Light.woff2 b/docs/font-files/Inter-Light.woff2 new file mode 100644 index 000000000..57c58e3aa --- /dev/null +++ b/docs/font-files/Inter-Light.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f7dfe72f016f723dffc551a4e3c0e17492acd9494d8d8392a53f6223c1eef83 +size 105556 diff --git a/docs/font-files/Inter-LightItalic.otf b/docs/font-files/Inter-LightItalic.otf new file mode 100644 index 000000000..b92c8ae61 --- /dev/null +++ b/docs/font-files/Inter-LightItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:707ea90685e82691f14be12a148a3793c90f260a41e685f02888921cace4ba70 +size 259876 diff --git a/docs/font-files/Inter-LightItalic.woff b/docs/font-files/Inter-LightItalic.woff new file mode 100644 index 000000000..4e65d1bc2 --- /dev/null +++ b/docs/font-files/Inter-LightItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec6c76a8a72f3d90efdd52f5d2ad6ff120af991caecb2f1f08ac0542a4f40449 +size 148408 diff --git a/docs/font-files/Inter-LightItalic.woff2 b/docs/font-files/Inter-LightItalic.woff2 new file mode 100644 index 000000000..965920d5d --- /dev/null +++ b/docs/font-files/Inter-LightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:125c7e6ad52809e1d063b72294ff8b7cb8c42793fa68d41a1c7236b715842769 +size 112040 diff --git a/docs/font-files/Inter-Medium.otf b/docs/font-files/Inter-Medium.otf new file mode 100644 index 000000000..01fd25cbf --- /dev/null +++ b/docs/font-files/Inter-Medium.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3be644f6898e942c9bbd2d55bb616ed363fdd1db68f11b4cd3e8c297b379604d +size 254040 diff --git a/docs/font-files/Inter-Medium.woff b/docs/font-files/Inter-Medium.woff new file mode 100644 index 000000000..bffee8ebe --- /dev/null +++ b/docs/font-files/Inter-Medium.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fc5d904d9ceb41e456849709d4cddc05d979b5835d8e42a1b64eaf4e57eec81 +size 142780 diff --git a/docs/font-files/Inter-Medium.woff2 b/docs/font-files/Inter-Medium.woff2 new file mode 100644 index 000000000..4e498fdbe --- /dev/null +++ b/docs/font-files/Inter-Medium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d308f3dc654f14af6a600482f41458efe0667eb639ec7bf7ddd784502b8fd55 +size 106484 diff --git a/docs/font-files/Inter-MediumItalic.otf b/docs/font-files/Inter-MediumItalic.otf new file mode 100644 index 000000000..04a6f8929 --- /dev/null +++ b/docs/font-files/Inter-MediumItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc9230219bb0661e89140600f354dfeedd53dd7ff85c2cb4b954fd0b57600b42 +size 261488 diff --git a/docs/font-files/Inter-MediumItalic.woff b/docs/font-files/Inter-MediumItalic.woff new file mode 100644 index 000000000..781db94ff --- /dev/null +++ b/docs/font-files/Inter-MediumItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1458af9d27797d9345360e7846c4f753d96b34da75f704bf2807140a94bc6f4d +size 149344 diff --git a/docs/font-files/Inter-MediumItalic.woff2 b/docs/font-files/Inter-MediumItalic.woff2 new file mode 100644 index 000000000..03abce89c --- /dev/null +++ b/docs/font-files/Inter-MediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76551c2080cad2625b75417de0b43ebf00435389ae3b8fb25e989730907a6dba +size 112640 diff --git a/docs/font-files/Inter-Regular.otf b/docs/font-files/Inter-Regular.otf new file mode 100644 index 000000000..5f5a68ee5 --- /dev/null +++ b/docs/font-files/Inter-Regular.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9a18de6b1a417510a7a4c50196c836391606c4b03ca8f81c071d66fdd8a8c7c +size 245388 diff --git a/docs/font-files/Inter-Regular.woff b/docs/font-files/Inter-Regular.woff new file mode 100644 index 000000000..cee9f26e5 --- /dev/null +++ b/docs/font-files/Inter-Regular.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b3a854b562c2fa71b12024bfdaa81722a4fbcd6c01214e8930d028d6f7ed1ae +size 134996 diff --git a/docs/font-files/Inter-Regular.woff2 b/docs/font-files/Inter-Regular.woff2 new file mode 100644 index 000000000..e2a00cc97 --- /dev/null +++ b/docs/font-files/Inter-Regular.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89d406b02758799cff68155930829b69a9fb49c39de3e264de966466d8cc7814 +size 100368 diff --git a/docs/font-files/Inter-SemiBold.otf b/docs/font-files/Inter-SemiBold.otf new file mode 100644 index 000000000..a6286363a --- /dev/null +++ b/docs/font-files/Inter-SemiBold.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ca261b20ce66803a60d98922457b84106888a57543685c896080dfa41be91e7 +size 254516 diff --git a/docs/font-files/Inter-SemiBold.woff b/docs/font-files/Inter-SemiBold.woff new file mode 100644 index 000000000..2419db82d --- /dev/null +++ b/docs/font-files/Inter-SemiBold.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04cd699f58167430d9957c305f172f64fb009754ce2ee97a9d0ba8f4f32b96ef +size 143148 diff --git a/docs/font-files/Inter-SemiBold.woff2 b/docs/font-files/Inter-SemiBold.woff2 new file mode 100644 index 000000000..16c621e23 --- /dev/null +++ b/docs/font-files/Inter-SemiBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c3befe28a2fe45fb772f93cc52c828a71ccebc4b9fa5c971db452f712f3e78 +size 106916 diff --git a/docs/font-files/Inter-SemiBoldItalic.otf b/docs/font-files/Inter-SemiBoldItalic.otf new file mode 100644 index 000000000..a39206f48 --- /dev/null +++ b/docs/font-files/Inter-SemiBoldItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94b32607d11f08412a5e28d27ea273226a5f53497ca71da75a7540673ea13802 +size 261796 diff --git a/docs/font-files/Inter-SemiBoldItalic.woff b/docs/font-files/Inter-SemiBoldItalic.woff new file mode 100644 index 000000000..599530493 --- /dev/null +++ b/docs/font-files/Inter-SemiBoldItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:420db54a39aa460c56bfad7455e695a37d3a5e35d9622566dbf1bb7a38f6c902 +size 149356 diff --git a/docs/font-files/Inter-SemiBoldItalic.woff2 b/docs/font-files/Inter-SemiBoldItalic.woff2 new file mode 100644 index 000000000..923709682 --- /dev/null +++ b/docs/font-files/Inter-SemiBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d376ade4b20ee813c80c2b58b70ce038df37e54f215366aee46b69bafb249b20 +size 112768 diff --git a/docs/font-files/Inter-Thin.otf b/docs/font-files/Inter-Thin.otf new file mode 100644 index 000000000..1a7356ae1 --- /dev/null +++ b/docs/font-files/Inter-Thin.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a26749b0f7cd4711b56d7baa78fb3d2d481a3a1fee5fca95c0c1ddf183712f9c +size 243960 diff --git a/docs/font-files/Inter-Thin.woff b/docs/font-files/Inter-Thin.woff new file mode 100644 index 000000000..ba03533f9 --- /dev/null +++ b/docs/font-files/Inter-Thin.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5565b01e8f5c7a662ced462dc15fde9fd49cdef0c6ea26ee8165c69b09dc58ea +size 137068 diff --git a/docs/font-files/Inter-Thin.woff2 b/docs/font-files/Inter-Thin.woff2 new file mode 100644 index 000000000..620b44f8e --- /dev/null +++ b/docs/font-files/Inter-Thin.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d8e2ac4f49c04b74258c4af90ccc23bbee984194793e91a74d3651ad1b6d7fb +size 101004 diff --git a/docs/font-files/Inter-ThinItalic.otf b/docs/font-files/Inter-ThinItalic.otf new file mode 100644 index 000000000..cdec97a75 --- /dev/null +++ b/docs/font-files/Inter-ThinItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e4a43e8016646f737986e0e579d3aa1888bf072e85501418fa545f57bb62720 +size 255092 diff --git a/docs/font-files/Inter-ThinItalic.woff b/docs/font-files/Inter-ThinItalic.woff new file mode 100644 index 000000000..bbc55e6c1 --- /dev/null +++ b/docs/font-files/Inter-ThinItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c413497bee266e9dcf4a1018870d18f4aced88ca681c586efc68786cac881895 +size 144528 diff --git a/docs/font-files/Inter-ThinItalic.woff2 b/docs/font-files/Inter-ThinItalic.woff2 new file mode 100644 index 000000000..8c2fa4cd9 --- /dev/null +++ b/docs/font-files/Inter-ThinItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b3ded182eb20506fed2a408bf7d70d83f6ea4b2534e341305ce5f9d4c592b07 +size 107584 diff --git a/docs/font-files/Inter-italic.var.otf b/docs/font-files/Inter-italic.var.otf new file mode 100644 index 000000000..ccdbbd5d3 --- /dev/null +++ b/docs/font-files/Inter-italic.var.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a59c7b2505f770eda066697aaf3ad3e67f2f1d60aaaa540882510d5496e45d0 +size 617220 diff --git a/docs/font-files/Inter-italic.var.woff2 b/docs/font-files/Inter-italic.var.woff2 new file mode 100644 index 000000000..ed0e8e737 --- /dev/null +++ b/docs/font-files/Inter-italic.var.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4da13aebd8407fcc64e0cb186c942d2d92af7a3ba29acbbc75d70e60a33fa17b +size 241052 diff --git a/docs/font-files/Inter-roman.var.otf b/docs/font-files/Inter-roman.var.otf new file mode 100644 index 000000000..70dc23bae --- /dev/null +++ b/docs/font-files/Inter-roman.var.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a309552efa060b34d6a3e2974b55839a11886910180973c7f5ac11e4b610a08 +size 608124 diff --git a/docs/font-files/Inter-roman.var.woff2 b/docs/font-files/Inter-roman.var.woff2 new file mode 100644 index 000000000..d70ce66fd --- /dev/null +++ b/docs/font-files/Inter-roman.var.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8e5fc78cc13c39d7b6040a18239c1e50352520f8a205b179afaa48ff31e8549 +size 226100 diff --git a/docs/font-files/Inter.var.otf b/docs/font-files/Inter.var.otf new file mode 100644 index 000000000..2fca88971 --- /dev/null +++ b/docs/font-files/Inter.var.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:718458150191d5613ffe566fe0caa5245fc537ded5ecbe886d496ff2e467b26e +size 794376 diff --git a/docs/font-files/Inter.var.woff2 b/docs/font-files/Inter.var.woff2 new file mode 100644 index 000000000..6f8a99864 --- /dev/null +++ b/docs/font-files/Inter.var.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3ea285a91cea9dcdd66ecc9099674fe18867fd0ce41dd84f217a50d22a73763 +size 317520 diff --git a/docs/font-files/InterDisplay-Black.otf b/docs/font-files/InterDisplay-Black.otf new file mode 100644 index 000000000..3682442da --- /dev/null +++ b/docs/font-files/InterDisplay-Black.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa6e20f721859bbda7f943851fca3d018b6fd4b723c7f9c1d8de0308291b2ebc +size 257332 diff --git a/docs/font-files/InterDisplay-Black.woff b/docs/font-files/InterDisplay-Black.woff new file mode 100644 index 000000000..f120742fb --- /dev/null +++ b/docs/font-files/InterDisplay-Black.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47907fdd4e712f4c55ed09ed2896297533cbaeab8a93d4b331aaf173cbc5f05a +size 142236 diff --git a/docs/font-files/InterDisplay-Black.woff2 b/docs/font-files/InterDisplay-Black.woff2 new file mode 100644 index 000000000..5fb327127 --- /dev/null +++ b/docs/font-files/InterDisplay-Black.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b96bf267e98471db434b317fdc1bd9dc13fc0710193ab4f3af0115cb338cd1a9 +size 107668 diff --git a/docs/font-files/InterDisplay-BlackItalic.otf b/docs/font-files/InterDisplay-BlackItalic.otf new file mode 100644 index 000000000..a3f63b73c --- /dev/null +++ b/docs/font-files/InterDisplay-BlackItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8bd106bad7435556478627ae8fcd4c28cf62e7f76d1654a9e551d9dfa7bd3ae +size 262108 diff --git a/docs/font-files/InterDisplay-BlackItalic.woff b/docs/font-files/InterDisplay-BlackItalic.woff new file mode 100644 index 000000000..5420a4da7 --- /dev/null +++ b/docs/font-files/InterDisplay-BlackItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7623f6a1290f5a425074cde8d10b418ab6b0c628b371feb03de43b32ff99065c +size 148048 diff --git a/docs/font-files/InterDisplay-BlackItalic.woff2 b/docs/font-files/InterDisplay-BlackItalic.woff2 new file mode 100644 index 000000000..2a4de768f --- /dev/null +++ b/docs/font-files/InterDisplay-BlackItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2fd5230a3c355abd385ed4aaece7538a5bcd964fb8a33aa0848f23cc8277cd3 +size 111888 diff --git a/docs/font-files/InterDisplay-Bold.otf b/docs/font-files/InterDisplay-Bold.otf new file mode 100644 index 000000000..015b8b535 --- /dev/null +++ b/docs/font-files/InterDisplay-Bold.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aef356cb9d2b38517d9b53e42667d4297b828b96716fec9124c6852680fbff4 +size 259916 diff --git a/docs/font-files/InterDisplay-Bold.woff b/docs/font-files/InterDisplay-Bold.woff new file mode 100644 index 000000000..0ad3795ad --- /dev/null +++ b/docs/font-files/InterDisplay-Bold.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4c2a1a1e83e0e4b3603d71d53d339e223949873c842a42b9aca5fd443fad416 +size 144164 diff --git a/docs/font-files/InterDisplay-Bold.woff2 b/docs/font-files/InterDisplay-Bold.woff2 new file mode 100644 index 000000000..a73021ec2 --- /dev/null +++ b/docs/font-files/InterDisplay-Bold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c94f4502f95ca1029e9500080fb4cffc4be4bd4c0a0aa3829351cffc19863875 +size 108908 diff --git a/docs/font-files/InterDisplay-BoldItalic.otf b/docs/font-files/InterDisplay-BoldItalic.otf new file mode 100644 index 000000000..3c59a9f74 --- /dev/null +++ b/docs/font-files/InterDisplay-BoldItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f684957d7b658e15a42b9c76a8e92f2e9ee419b3a03e2c99f7e0880fc89829e +size 265036 diff --git a/docs/font-files/InterDisplay-BoldItalic.woff b/docs/font-files/InterDisplay-BoldItalic.woff new file mode 100644 index 000000000..3af5037fe --- /dev/null +++ b/docs/font-files/InterDisplay-BoldItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68ac9743ac84293d01ea0d0c67b7da4859fed88441a7d3f7e1115f5a60fd19d8 +size 149728 diff --git a/docs/font-files/InterDisplay-BoldItalic.woff2 b/docs/font-files/InterDisplay-BoldItalic.woff2 new file mode 100644 index 000000000..eec042107 --- /dev/null +++ b/docs/font-files/InterDisplay-BoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e816b01514707e0ebad327416a22c238f7d97862098088802ae6946cfb84e99 +size 113528 diff --git a/docs/font-files/InterDisplay-ExtraBold.otf b/docs/font-files/InterDisplay-ExtraBold.otf new file mode 100644 index 000000000..9b68599d6 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraBold.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16abd12270072e2ff0bc0841856b3328325e5447e4d2a6061ef720aa052c86ae +size 261080 diff --git a/docs/font-files/InterDisplay-ExtraBold.woff b/docs/font-files/InterDisplay-ExtraBold.woff new file mode 100644 index 000000000..fb11d6108 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraBold.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eb863c359900ac354a3ff1d162ed96ea1c7274dd17f7204ffc77c3c32b6a0d7 +size 144432 diff --git a/docs/font-files/InterDisplay-ExtraBold.woff2 b/docs/font-files/InterDisplay-ExtraBold.woff2 new file mode 100644 index 000000000..96f13edf0 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74c812c64d1c2df90e82759956bae4e9613baea338da40ee5d485cd72989dae9 +size 109252 diff --git a/docs/font-files/InterDisplay-ExtraBoldItalic.otf b/docs/font-files/InterDisplay-ExtraBoldItalic.otf new file mode 100644 index 000000000..6b348047e --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraBoldItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19b4c4f6d332fa2a227c8347c2e8359993f7ed1ce69d6032ce5e9173a630f36a +size 266696 diff --git a/docs/font-files/InterDisplay-ExtraBoldItalic.woff b/docs/font-files/InterDisplay-ExtraBoldItalic.woff new file mode 100644 index 000000000..afdd9ec31 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraBoldItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3edc97ec2500e43f26608cb04b1190ec438458dba6444f560f371876d61b2cdc +size 149892 diff --git a/docs/font-files/InterDisplay-ExtraBoldItalic.woff2 b/docs/font-files/InterDisplay-ExtraBoldItalic.woff2 new file mode 100644 index 000000000..ef3464e18 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49d58d06313ee0d8794ea2dcab9fee10e7fc31f4a294a02eb4c973e4f97b4d1e +size 113440 diff --git a/docs/font-files/InterDisplay-ExtraLight.otf b/docs/font-files/InterDisplay-ExtraLight.otf new file mode 100644 index 000000000..72c23e906 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraLight.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:024ed68fed02128c3e3c50d46ec4f958de768d27f625aaa9ac7f31e719b3d860 +size 250600 diff --git a/docs/font-files/InterDisplay-ExtraLight.woff b/docs/font-files/InterDisplay-ExtraLight.woff new file mode 100644 index 000000000..708cafc29 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraLight.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:862041f3e3cd06c942f1352d37b6f8a31c7c7741cd968c2f034541a3e5833cc6 +size 143716 diff --git a/docs/font-files/InterDisplay-ExtraLight.woff2 b/docs/font-files/InterDisplay-ExtraLight.woff2 new file mode 100644 index 000000000..645046028 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraLight.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:228aeba8f3db152f2754db4d8135bbe528814b6fa19d8a4c9ee3e9ae80b34d0d +size 108292 diff --git a/docs/font-files/InterDisplay-ExtraLightItalic.otf b/docs/font-files/InterDisplay-ExtraLightItalic.otf new file mode 100644 index 000000000..80a920a0c --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraLightItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9193dde1afbc77d65945e51e6213d97c5027021a5fb867a343cfb5e43c8069b +size 256524 diff --git a/docs/font-files/InterDisplay-ExtraLightItalic.woff b/docs/font-files/InterDisplay-ExtraLightItalic.woff new file mode 100644 index 000000000..5b5c70f65 --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraLightItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec07cab16238fa1d413a5118c5ae7f871c07431a1fe1d8545a5a66e0298b9376 +size 149456 diff --git a/docs/font-files/InterDisplay-ExtraLightItalic.woff2 b/docs/font-files/InterDisplay-ExtraLightItalic.woff2 new file mode 100644 index 000000000..75066056b --- /dev/null +++ b/docs/font-files/InterDisplay-ExtraLightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05733f4cccd92e587da984b7044f745eebd4cd0a334ae532f57c0a0ce9834bc4 +size 112828 diff --git a/docs/font-files/InterDisplay-Italic.otf b/docs/font-files/InterDisplay-Italic.otf new file mode 100644 index 000000000..9a078ce6f --- /dev/null +++ b/docs/font-files/InterDisplay-Italic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0d9ec2a542e386482599d9bdb553464cf85fd1f1a07a75318658bf7a0699e62 +size 260572 diff --git a/docs/font-files/InterDisplay-Italic.woff b/docs/font-files/InterDisplay-Italic.woff new file mode 100644 index 000000000..b0f852f4d --- /dev/null +++ b/docs/font-files/InterDisplay-Italic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e93585f454493812552965ae2f9571eb41ad2554ab8fd90861002aab20bc599 +size 146056 diff --git a/docs/font-files/InterDisplay-Italic.woff2 b/docs/font-files/InterDisplay-Italic.woff2 new file mode 100644 index 000000000..39c59b5e7 --- /dev/null +++ b/docs/font-files/InterDisplay-Italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17f0ca7e7de00df986d6db03327f40faba8d0fd11fcc185b39a4d90c23ec4265 +size 110600 diff --git a/docs/font-files/InterDisplay-Light.otf b/docs/font-files/InterDisplay-Light.otf new file mode 100644 index 000000000..7ce5d8438 --- /dev/null +++ b/docs/font-files/InterDisplay-Light.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eecebed4d22e0b080a0f22badda07f54336ba4ff856fb266ce33bcdb8e331ff0 +size 252556 diff --git a/docs/font-files/InterDisplay-Light.woff b/docs/font-files/InterDisplay-Light.woff new file mode 100644 index 000000000..dee2805e7 --- /dev/null +++ b/docs/font-files/InterDisplay-Light.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d093ec7928b67fd084f945004598f200563fdf20633127ad8183cacb7f7267b3 +size 143196 diff --git a/docs/font-files/InterDisplay-Light.woff2 b/docs/font-files/InterDisplay-Light.woff2 new file mode 100644 index 000000000..7b2fd0e75 --- /dev/null +++ b/docs/font-files/InterDisplay-Light.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fef97b795a022cbff9e74327c860989be8aa98bd73d9c4f9ef4d677d985ed909 +size 107888 diff --git a/docs/font-files/InterDisplay-LightItalic.otf b/docs/font-files/InterDisplay-LightItalic.otf new file mode 100644 index 000000000..66ae60807 --- /dev/null +++ b/docs/font-files/InterDisplay-LightItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57c1db5665f850c9b66fcadde3a9ce129d0cf878a560290342176d5d75b24c01 +size 259296 diff --git a/docs/font-files/InterDisplay-LightItalic.woff b/docs/font-files/InterDisplay-LightItalic.woff new file mode 100644 index 000000000..e3ebe7b18 --- /dev/null +++ b/docs/font-files/InterDisplay-LightItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ca2ae1e269671205cab11664149dce7cebe2133681b122337f984ebb59256a +size 149000 diff --git a/docs/font-files/InterDisplay-LightItalic.woff2 b/docs/font-files/InterDisplay-LightItalic.woff2 new file mode 100644 index 000000000..e25f6653c --- /dev/null +++ b/docs/font-files/InterDisplay-LightItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6729963eec3a73a8d7c1c7f6d9ecaaf8218c28c15be6e41a206fec931577973 +size 112528 diff --git a/docs/font-files/InterDisplay-Medium.otf b/docs/font-files/InterDisplay-Medium.otf new file mode 100644 index 000000000..8911232b5 --- /dev/null +++ b/docs/font-files/InterDisplay-Medium.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eaeefca1163e3dcd51b53e7bd6e7f5095c983582c76819cdce0988e8a0a9867 +size 260032 diff --git a/docs/font-files/InterDisplay-Medium.woff b/docs/font-files/InterDisplay-Medium.woff new file mode 100644 index 000000000..9ee16918e --- /dev/null +++ b/docs/font-files/InterDisplay-Medium.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0832ab9426fb9844d5b6a5b289fe293f816418f39474c2a62e1b818d57482a4e +size 143744 diff --git a/docs/font-files/InterDisplay-Medium.woff2 b/docs/font-files/InterDisplay-Medium.woff2 new file mode 100644 index 000000000..1f1b327cd --- /dev/null +++ b/docs/font-files/InterDisplay-Medium.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:771820789fce60e99dc0dfea921fe027df13bb1e442fe15bfced8444397c34e9 +size 108896 diff --git a/docs/font-files/InterDisplay-MediumItalic.otf b/docs/font-files/InterDisplay-MediumItalic.otf new file mode 100644 index 000000000..99dfe29df --- /dev/null +++ b/docs/font-files/InterDisplay-MediumItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d5a3a4c54271686cd7f114a1fc49168ebf8f1a241f9ea242b332ee96b33a313 +size 265324 diff --git a/docs/font-files/InterDisplay-MediumItalic.woff b/docs/font-files/InterDisplay-MediumItalic.woff new file mode 100644 index 000000000..494cf5bae --- /dev/null +++ b/docs/font-files/InterDisplay-MediumItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfacf5b7bf8205f56b311d2bd09d5006eee808ff1c1da10f555893eb92323cc2 +size 149328 diff --git a/docs/font-files/InterDisplay-MediumItalic.woff2 b/docs/font-files/InterDisplay-MediumItalic.woff2 new file mode 100644 index 000000000..81bb870fa --- /dev/null +++ b/docs/font-files/InterDisplay-MediumItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83ee52de43695b2943a1fd1c8376c576c2872c974128ba2bbd19bfad02a5186e +size 112932 diff --git a/docs/font-files/InterDisplay-Regular.otf b/docs/font-files/InterDisplay-Regular.otf new file mode 100644 index 000000000..1cf971eba --- /dev/null +++ b/docs/font-files/InterDisplay-Regular.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb10e3e05db02caf49e03fd6fe74bc923a9fec6a9467ab5e553fd03d8fe7771 +size 252908 diff --git a/docs/font-files/InterDisplay-Regular.woff b/docs/font-files/InterDisplay-Regular.woff new file mode 100644 index 000000000..0b065e0f7 --- /dev/null +++ b/docs/font-files/InterDisplay-Regular.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7b4cd6d9200e2ceba4ede7267444ad189643c3b8dcad7044da99a4297352e42 +size 139728 diff --git a/docs/font-files/InterDisplay-Regular.woff2 b/docs/font-files/InterDisplay-Regular.woff2 new file mode 100644 index 000000000..c82b049c6 --- /dev/null +++ b/docs/font-files/InterDisplay-Regular.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98438738926ab0cd10dc553cc95a7267f7bd768a1b2977f16cde3953d7b72068 +size 106208 diff --git a/docs/font-files/InterDisplay-SemiBold.otf b/docs/font-files/InterDisplay-SemiBold.otf new file mode 100644 index 000000000..989a1f858 --- /dev/null +++ b/docs/font-files/InterDisplay-SemiBold.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a96808094d7024096f5bccd3e4d85a497ed77898f606525b2dd7f43bcdf00701 +size 260132 diff --git a/docs/font-files/InterDisplay-SemiBold.woff b/docs/font-files/InterDisplay-SemiBold.woff new file mode 100644 index 000000000..663f80052 --- /dev/null +++ b/docs/font-files/InterDisplay-SemiBold.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04fe2ee21abf5d644441ff2649248c65f02b983b01927e7054e653adf963dd67 +size 144204 diff --git a/docs/font-files/InterDisplay-SemiBold.woff2 b/docs/font-files/InterDisplay-SemiBold.woff2 new file mode 100644 index 000000000..fcf5d9f85 --- /dev/null +++ b/docs/font-files/InterDisplay-SemiBold.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c88886bf5a5d6d84577c1be7aa357ed951d4fc36a8c4fb626df648b4a7458aed +size 108360 diff --git a/docs/font-files/InterDisplay-SemiBoldItalic.otf b/docs/font-files/InterDisplay-SemiBoldItalic.otf new file mode 100644 index 000000000..579d0906f --- /dev/null +++ b/docs/font-files/InterDisplay-SemiBoldItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7c0344d97142b9b483c32f6c26cd22b786faf6ad33c3d3e9e28c9f37b99363b +size 265132 diff --git a/docs/font-files/InterDisplay-SemiBoldItalic.woff b/docs/font-files/InterDisplay-SemiBoldItalic.woff new file mode 100644 index 000000000..bbbe6fe1e --- /dev/null +++ b/docs/font-files/InterDisplay-SemiBoldItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db72b52345ef82803dd5ed342c3b07d964d41df5140aa51a4efc4edd1e533767 +size 149576 diff --git a/docs/font-files/InterDisplay-SemiBoldItalic.woff2 b/docs/font-files/InterDisplay-SemiBoldItalic.woff2 new file mode 100644 index 000000000..e61af9d33 --- /dev/null +++ b/docs/font-files/InterDisplay-SemiBoldItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a57931c779b94b77807706469de3cc62f3c977ce72735aa42ee61f9c7923a3cb +size 112924 diff --git a/docs/font-files/InterDisplay-Thin.otf b/docs/font-files/InterDisplay-Thin.otf new file mode 100644 index 000000000..04a4f93fc --- /dev/null +++ b/docs/font-files/InterDisplay-Thin.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c07bb66bab13579292f5dc540450b7c349fcb256f0f34617afe4ef99be4e7c9 +size 249396 diff --git a/docs/font-files/InterDisplay-Thin.woff b/docs/font-files/InterDisplay-Thin.woff new file mode 100644 index 000000000..1a11bcb5c --- /dev/null +++ b/docs/font-files/InterDisplay-Thin.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41bdadd5c94d3e5aba2f5d07b79a7a72ad94bc49c6804e652f9f43a879634e0c +size 140176 diff --git a/docs/font-files/InterDisplay-Thin.woff2 b/docs/font-files/InterDisplay-Thin.woff2 new file mode 100644 index 000000000..15072ce18 --- /dev/null +++ b/docs/font-files/InterDisplay-Thin.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4db63b355f54514d2cff84966737a9f1ddf09ca90fd56c43ae666ab9394501b +size 105668 diff --git a/docs/font-files/InterDisplay-ThinItalic.otf b/docs/font-files/InterDisplay-ThinItalic.otf new file mode 100644 index 000000000..15088ec63 --- /dev/null +++ b/docs/font-files/InterDisplay-ThinItalic.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45848d919d095598f664f5c54814afc7ab53602d671296cf1f51c35ab901a135 +size 255448 diff --git a/docs/font-files/InterDisplay-ThinItalic.woff b/docs/font-files/InterDisplay-ThinItalic.woff new file mode 100644 index 000000000..642950aec --- /dev/null +++ b/docs/font-files/InterDisplay-ThinItalic.woff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ef52bc542763744ee66b863c6bfb604ddf1cfd843496ed6162bea359bf089de +size 146256 diff --git a/docs/font-files/InterDisplay-ThinItalic.woff2 b/docs/font-files/InterDisplay-ThinItalic.woff2 new file mode 100644 index 000000000..45852e7d5 --- /dev/null +++ b/docs/font-files/InterDisplay-ThinItalic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04fdfdfeb7e55ffc99bdf4cff2bd3c185e67896dabff63a09e827f5f059753ba +size 109976 diff --git a/docs/font-files/InterDisplay-italic.var.otf b/docs/font-files/InterDisplay-italic.var.otf new file mode 100644 index 000000000..028244b83 --- /dev/null +++ b/docs/font-files/InterDisplay-italic.var.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d851f8066cc8ba905549026813834d58f2231e9e75161751aa128c4ade25e443 +size 596212 diff --git a/docs/font-files/InterDisplay-italic.var.woff2 b/docs/font-files/InterDisplay-italic.var.woff2 new file mode 100644 index 000000000..fb2b66b35 --- /dev/null +++ b/docs/font-files/InterDisplay-italic.var.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc4b67b1fbed25c07b23019648d1688c2b3ca739af4d8d8b7aa48a0b83dd86e9 +size 243396 diff --git a/docs/font-files/InterDisplay-roman.var.otf b/docs/font-files/InterDisplay-roman.var.otf new file mode 100644 index 000000000..97c8903a0 --- /dev/null +++ b/docs/font-files/InterDisplay-roman.var.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97df728572ebff0992310d94dccde31ee6ec3f308acd3ad08dca1eea4e37e1ed +size 586648 diff --git a/docs/font-files/InterDisplay-roman.var.woff2 b/docs/font-files/InterDisplay-roman.var.woff2 new file mode 100644 index 000000000..4af568a1a --- /dev/null +++ b/docs/font-files/InterDisplay-roman.var.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d40775d1f055baaef21fd1410adf180e1b730522312d88e28cce2a151e58544a +size 234452 diff --git a/docs/font-files/InterDisplay.var.otf b/docs/font-files/InterDisplay.var.otf new file mode 100644 index 000000000..ebe7ca6bb --- /dev/null +++ b/docs/font-files/InterDisplay.var.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bf3d46e06a030df30065a90c18f72317f054bbf44ce254055e342eac68fe3ec +size 780156 diff --git a/docs/font-files/InterDisplay.var.woff2 b/docs/font-files/InterDisplay.var.woff2 new file mode 100644 index 000000000..d698f11ff --- /dev/null +++ b/docs/font-files/InterDisplay.var.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c79116255c8880736557d32b21ab4e8f61fde334a8d60b4634c9b076ba9bd76f +size 336752 diff --git a/docs/res/base.css b/docs/res/base.css new file mode 100644 index 000000000..1cedcdffb --- /dev/null +++ b/docs/res/base.css @@ -0,0 +1,854 @@ +:root { + --fontSize: 15px; + /*--emsAcrossViewport: 80; + --fontSize: calc(100vw / var(--emsAcrossViewport));*/ + + --lineHeight: calc(var(--fontSize) * 1.5); + + --spacing: 2rem; + --spacingv: calc(var(--lineHeight) / 2); + + --columnGap: 2rem; + + /* colors */ + --red: color(display-p3 0.94 0.19 0.04); + --yellow: color(display-p3 1 0.96 0.05); + --warm-yellow: color(display-p3 1 0.87 0.05); + --light-yellow: color(display-p3 1 1 0.7); + --blue: rgb(3, 102, 230); + --green: rgb(38, 220, 78); + --mediumGreen: rgb(119, 221, 134); +} + +@supports not (color: color(display-p3 1 1 1)) { + /* sRGB colors */ + :root { + --red: #F03009; + --yellow: #FFF310; + --warm-yellow: #FFE310; + --light-yellow: rgb(255, 255, 179); + } +} + +* { margin:0; padding:0; font-synthesis: none; } + +html.debug *:nth-child(4n) { outline:1px solid rgba(0,0,255,0.5); } +html.debug *:nth-child(4n+1) { outline:1px solid rgba(0,255,255,0.5); } +html.debug *:nth-child(4n+2) { outline:1px solid rgba(255,0,255,0.5); } +html.debug *:nth-child(4n+3) { outline:1px solid rgba(255,0,0,0.5); } + +html { } +body { + background-color: #f4f4f4; + color: #111; + font: 15px/22px 'Inter', system-ui, sans-serif; + + /*font-size: 15px; + line-height: 1.5;*/ + + font-size: var(--fontSize); + line-height: var(--lineHeight); + + letter-spacing: -0.004em; + + font-weight: 400; + + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + + -webkit-overflow-scrolling: touch; + scroll-behavior: smooth; + + font-kerning: normal; + -webkit-font-kerning: normal; + -ms-font-kerning: normal; + -moz-font-kerning: normal; + -o-font-kerning: normal; + + font-variant-ligatures: contextual common-ligatures; + -webkit-font-variant-ligatures: contextual common-ligatures; + -ms-font-variant-ligatures: contextual common-ligatures; + -moz-font-variant-ligatures: contextual common-ligatures; + -o-font-variant-ligatures: contextual common-ligatures; + + /* required to work around letter-spacing bug in Chrome: */ + font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1; +} + +/* Font style classifiers used by samples and dynmetrics */ +/* Note: font-variation-settings is needed for Safari. */ +.font-style-thin { font-variation-settings: "wght" 100, "slnt" 0 !important; font-weight:100 !important; font-style:normal !important; } +.font-style-thin-italic { font-variation-settings: "wght" 100, "slnt" 100 !important; font-weight:100 !important; font-style:oblique !important; } +.font-style-extra-light { font-variation-settings: "wght" 200, "slnt" 0 !important; font-weight:100 !important; font-style:normal !important; } +.font-style-extra-light-italic { font-variation-settings: "wght" 200, "slnt" 100 !important; font-weight:100 !important; font-style:oblique !important; } +.font-style-light { font-variation-settings: "wght" 300, "slnt" 0 !important; font-weight:300 !important; font-style:normal !important; } +.font-style-light-italic { font-variation-settings: "wght" 300, "slnt" 100 !important; font-weight:300 !important; font-style:oblique !important; } +.font-style-regular { font-variation-settings: "wght" 400, "slnt" 0 !important; font-weight:400 !important; font-style:normal !important; } +.font-style-italic { font-variation-settings: "wght" 400, "slnt" 100 !important; font-weight:400 !importants; font-style:oblique !important; } +.font-style-medium { font-variation-settings: "wght" 500, "slnt" 0 !important; font-weight:500 !important; font-style:normal !important; } +.font-style-medium-italic { font-variation-settings: "wght" 500, "slnt" 100 !important; font-weight:500 !important; font-style:oblique !important; } +.font-style-semi-bold { font-variation-settings: "wght" 600, "slnt" 0 !important; font-weight:600 !important; font-style:normal !important; } +.font-style-semi-bold-italic { font-variation-settings: "wght" 600, "slnt" 100 !important; font-weight:600 !important; font-style:oblique !important; } +.font-style-bold { font-variation-settings: "wght" 700, "slnt" 0 !important; font-weight:700 !important; font-style:normal !important; } +.font-style-bold-italic { font-variation-settings: "wght" 700, "slnt" 100 !important; font-weight:700 !important; font-style:oblique !important; } +.font-style-extra-bold { font-variation-settings: "wght" 800, "slnt" 0 !important; font-weight:800 !important; font-style:normal !important; } +.font-style-extra-bold-italic { font-variation-settings: "wght" 800, "slnt" 100 !important; font-weight:800 !important; font-style:oblique !important; } +.font-style-black { font-variation-settings: "wght" 900, "slnt" 0 !important; font-weight:900 !important; font-style:normal !important; } +.font-style-black-italic { font-variation-settings: "wght" 900, "slnt" 100 !important; font-weight:900 !important; font-style:oblique !important; } + +@supports (font-variation-settings: normal) { + body { + font-family: 'Inter var', system-ui, sans-serif; + } + body.chrome-win { + /* Chrome has some VF issues; worst are on Windows with incorrect kerning. + We disable VF on Chrome on Windows for that reason. + */ + font-family: Inter, system-ui, sans-serif; + } +} + +DISABLED:target:before { + content:""; + display: block; + height: 20px; /* fixed header height*/ + margin: -20px 0 0; /* negative fixed header height */ + visibility: hidden; +} + +a { + text-decoration: underline rgba(0, 0, 0, 0.3); + color: black; + word-break: break-word; + word-wrap: break-word; +} +a.fat { + font-weight:500; + color: #333; +} +a:hover { + color: var(--red); + text-decoration: underline; +} +a.plain, a.fat { + background: none; + text-shadow: none; + text-decoration: none; + cursor: pointer; +} +a[href^="#"]:hover { + text-decoration-style: dashed; +} + +/*p, pre { + margin: 1rem 0; +}*/ +code, pre, q, tt { + font-family: 'IBM Plex Mono', monospace; + font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1, 'ss02' 1, 'zero' 1; + line-height: inherit; +} +code { + display: block; + border-radius:1px; + padding: 0.5em 0; + overflow: auto; +} +pre { + white-space: pre-wrap; + line-break: loose; + overflow-x: auto; +} +q { + display: inline; + white-space: pre-wrap; +} +q { + display: inline; +} +q:before { + content: ""; +} +q:after { + content: ""; +} +kbd { + -moz-font-feature-settings: 'liga' 1, 'calt' 1, 'kern' 1, 'case' 1; + -ms-font-feature-settings: 'liga' 1, 'calt' 1, 'kern' 1, 'case' 1; + -o-font-feature-settings: 'liga' 1, 'calt' 1, 'kern' 1, 'case' 1; + -webkit-font-feature-settings: 'liga' 1, 'calt' 1, 'kern' 1, 'case' 1; + font-feature-settings: 'liga' 1, 'calt' 1, 'kern' 1, 'case' 1; + border: 1px solid rgba(0,0,0,0.18); + border-radius: 3px; + padding:0.1em 0.2em; + margin:0 0.1em; +} +dem { /* de-emphasize */ + font-weight: 400; + opacity: 0.7; +} +num { /* number */ + /*-moz-font-feature-settings: 'calt' 1, 'ss01' 1; + -ms-font-feature-settings: 'calt' 1, 'ss01' 1; + -o-font-feature-settings: 'calt' 1, 'ss01' 1; + -webkit-font-feature-settings: 'kern' 1, 'calt' 1, 'ss01' 1; + font-feature-settings: 'calt' 1, 'ss01' 1;*/ + letter-spacing:0.01em; + white-space: pre; +} + +em, i, .italic { + font-style: oblique; +} + +small { + font-size: 11px; + letter-spacing: 0.012em; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/*h1, .h1 { + color: #222; + font-size: 55px; + letter-spacing: -0.038em; + line-height: 1.1em; + text-indent: -2px; + font-weight: 700; +} +h1 { + margin-bottom: 30px; + margin-top: 10px; +}*/ +h1, .h1 { + margin-left: calc(3rem / -20); + font-weight: 700; + font-size: 4rem; + letter-spacing: -0.07em; + line-height: calc(var(--spacingv) * 6); +} +h1 { + margin-bottom: calc(var(--spacingv) * 2); +} + +h2, .h2 { + font-weight: 700; + font-size: 1.8rem; + letter-spacing: -0.03em; + line-height: calc(var(--spacingv) * 3); +} +h2 { + margin-bottom: calc(var(--spacingv) * 2); +} +h3, .h3 { + font-weight: 700; + font-weight: 650; + font-size: 1.2rem; + letter-spacing: -0.018em; + line-height: calc(var(--spacingv) * 2); +} +h3 { + margin-bottom: calc(var(--spacingv) * 2); +} + +h3 q, h3. q { + font-weight: 400; + padding-left: 0.5em; +} + +h1 > a, h2 > a, h3 > a, h4 > a, +.h1 > a, .h2 > a, .h3 > a, .h4 > a { + display:block; + color: inherit; + text-decoration: none !important; + text-shadow: none; + background: none; + outline:none; +} + +h4, h5, h6, .h4, .h5, .h6 { + font-weight: 640; + letter-spacing: -0.015em; +} +h4, h5, h6 { + margin-bottom: calc(var(--spacingv) * 1); +} +/* add top margin to Hn when it follows another element */ +* + h1 { margin-top: calc(var(--spacingv) * 6); } +* + h2 { margin-top: calc(var(--spacingv) * 4); } +* + h3 { margin-top: calc(var(--spacingv) * 3); } +* + h4 { margin-top: calc(var(--spacingv) * 2); } + +p, pre, p + grid, pre + grid { + margin-bottom: var(--lineHeight); +} + + +.row.dark h2, +.row.black h2 { + letter-spacing: -0.014em; +} +h2.back { + color:rgba(0,0,0,0.2); + font-size: inherit; + letter-spacing: inherit; + font-weight:400; + margin:0; + margin-top:-1.9em; +} +h2.back a:hover { + color: black; + margin-left:-1.3em; +} +h2.back a:hover::before { + content: "<- "; +} +h2.banner { + text-align: center; + display: flex; + justify-content: center; +} + h2.banner > * { + flex: 0 1 auto; + padding: 0.8em 1.2em; + border-radius: 4em; + display: block; + background: white; + } + h2.banner > a:hover { + color: black; + background: rgba(0,0,0,0.1); + } + +.row.dark h3, +.row.black h3 { + letter-spacing: -0.012em; +} + +.row.yellow { + background: var(--yellow); + color: rgba(0, 0, 0, 0.98); +} + +.row { + padding: 50px; + display: flex; + justify-content: center; +} + .row > * { + width:100%; + max-width: 888px; + flex: 1 0 100%; + } + .row .learn-more { + margin-top: 2em; + text-align: center; + font-size: 11px; + letter-spacing: 0.007em; + } + .row .learn-more a { + color: rgba(0,0,0,0.4); + text-decoration-color: rgba(0, 0, 0, 0); + } + .row .learn-more a:hover { + color: inherit; + } + +.row.full-width { + padding: 50px 0; + justify-content: flex-start; +} + .row.full-width > * { + max-width: initial; + } + +.row-divider { + height: 1rem; + /*margin: 0 auto; + max-width: 888px; + height: 0.11rem; + background: black;*/ +} + +.row.menu { + padding: 0; + border-bottom:1px solid rgba(0,0,0,0.1); + background: #111; + color: white; + border-top: 40px solid red; + margin-top: -40px; +} + .row.menu ul { + width: auto; + max-width: 888px; + flex: 1 1 auto; + list-style: none; + padding: 0; + margin: 0 50px; + display: flex; + flex-wrap: wrap; + white-space: nowrap; + } + .row.menu ul li { + margin-bottom: -1px; + text-indent: -0.5px; + text-align: center; + } + .row.menu ul li > a { + color: inherit; + opacity: 0.8; + text-decoration:none; + display: inline-block; + padding: 15px 20px 13px 20px; + margin-right: 1px; + font-weight: 450; + /*transition: 80ms all cubic-bezier(0.25, 0.47, 0.44, 0.93);*/ + } + .row.menu ul li > a:hover, + .row.menu ul li > a.active { + color: white; + background: var(--red); + opacity: 1; + } + .row.menu ul li:first-child > a { + padding-left:0; + padding-right:0; + margin-right: 25px; + background:transparent; + } + .row.menu ul li:first-child > a:hover { + text-decoration:underline; + } + .row.menu ul li.nav-home > a { + font-weight: 600; + color: white; + opacity: 1; + } + +/* narrow windows */ +@media only screen and (max-width: 565px) { + .row { + padding-left: 24px; + padding-right: 24px; + } + .row.menu ul { + display: grid; + grid-template-columns: repeat(4,1fr); + margin: 0 20px; + } + .row.menu ul { + } + .row.menu ul li { + display: flex; + } + .row.menu ul li > a { + flex: 0 1 100%; + margin: 0; + padding-right:0; + padding-left:0; + box-shadow: inset 1px 0 0 0 rgba(255,255,255,0.1); + } + .row.menu ul li:first-child > a { + margin-right: 0; + box-shadow: none; + } + .row.menu ul li.nav-home a { + text-align: left; + } +} + +/* progressively hide menu items */ +@media only screen and (max-width: 680px) { + .row.menu .nav-lab { display: none; } +} +@media only screen and (max-width: 565px) { + .row.menu .nav-download { display: none; } +} +@media only screen and (max-width: 280px) { + .row.menu ul { grid-template-columns: repeat(3,1fr); } + .row.menu .nav-dynmetrics { display: none; } +} + + +.row.white { + background: white; +} + +.row.dark, +.row.black { + background: #2b2b2b; + color: #99999b; +} +.row.green { + background: var(--mediumGreen); + color: black; +} +.row.blue { + background: var(--blue); + color: white; +} +.row.black { + background: #010101; +} +.row.dark a, +.row.black a { + text-decoration-color: rgba(255, 255, 255, 0.2); + color: #aaa; +} +.row.dark a:hover, +.row.black a:hover { + color: rgb(95, 170, 255); + text-decoration: underline rgb(95, 170, 255); +} +.row.dark h2, .row.dark h2 > a, +.row.black h2, .row.black h2 > a { + color: #ccc; + background: none; +} +.row.green h2 > a:hover { + color: inherit; + text-decoration-style: solid !important; + text-decoration: underline !important; + text-decoration: underline rgba(0, 0, 0, 0.3) !important; +} +.row.green > * > p > a:hover { + color: inherit; +} + +.row.color1 { + background: #C0CDE2; + color: #3B414A; +} + +.noise-layer { + background-image: url(noise512.png); + background-size: 256px; + opacity: 0.03; + pointer-events: none; + position: absolute; + top:0; + left:0; + right:0; + /*bottom:0;*/ +} + + +/* --------------------------------------------------------------------- */ + +ul { margin-left:1.1em; } +a > img { display: block; } + +/* --------------------------------------------------------------------- */ +/* generic helpers */ + +.low-contrast { opacity: 0.4; } +.center-text { text-align: center; } + +/* --------------------------------------------------------------------- */ + +#repertoire-image { + display:block; + width:100%; + height:40vw; + background-image: url(res/repertoire.png); + background-repeat: no-repeat; + background-size: cover; + background-blend-mode: multiply; + background-color: #f4f4f4; +} + +.sample-images {} + .sample-images img, .sample-images svg { + display: block; + width: 100%; + } + +/* --------------------------------------------------------------------- */ +/* grid */ + +grid { + grid-column-gap: var(--columnGap); + grid-row-gap: 0; +} +grid > c.spacer { + grid-column: 1 / -1; + height: calc(var(--spacingv) * 6); +} + +@media only screen and (max-width: 565px) { + grid { grid-column-gap: 1rem; } + grid > c.spacer { height: calc(var(--spacingv) * 3); } +} + +.row.features { display:none; } +@supports (display: grid) { + .row.features { display:flex; } +} +.row.features p.example { margin-top:2rem; opacity:0.4; } + +.row.features grid { + grid-column-gap: 1rem; + grid-row-gap: 0.5rem; + margin-bottom: 0; +} + +/* --------------------------------------------------------------------- */ +/* flow */ + +flow { display:block; appearance: none; -webkit-appearance: none } +flow[columns] { + column-gap: var(--columnGap); + column-fill: balance; +} +flow[columns="2"] { + column-count: 2; +} +@media only screen and (max-width: 565px) { + flow[columns-s="1"] { + column-count: 1; + } +} + +/* column flow */ +[flow-cols], [flow-cols-s], [flow-cols-l] { + column-gap: var(--columnGap); + column-fill: balance; +} +[flow-cols="1"] { column-count: 1 } +[flow-cols="2"] { column-count: 2 } +[flow-cols="3"] { column-count: 3 } +[flow-cols="4"] { column-count: 4 } +[flow-cols="5"] { column-count: 5 } +[flow-cols="6"] { column-count: 6 } +[flow-cols="7"] { column-count: 7 } +[flow-cols="8"] { column-count: 8 } + +@media only screen and (max-width: 565px) { + [flow-cols-s="1"] { column-count: 1 } + [flow-cols-s="2"] { column-count: 2 } + [flow-cols-s="3"] { column-count: 3 } + [flow-cols-s="4"] { column-count: 4 } + [flow-cols-s="5"] { column-count: 5 } + [flow-cols-s="6"] { column-count: 6 } + [flow-cols-s="7"] { column-count: 7 } + [flow-cols-s="8"] { column-count: 8 } +} + + +/* --------------------------------------------------------------------- */ + +boxes { + display: flex; + flex-wrap: wrap; + justify-content: stretch; + margin-right:-1em; +} +box { + overflow: auto; + flex: 1 1 0; + box-sizing: border-box; + min-width: 270px; + max-width: 100%; + display: flex; + flex-direction: column; + background: white; + padding: 2em; + border-radius: 3px; + margin-right:1em; + margin-bottom:1em; +} +body.safari box { + /* Fix for broken flex wrap in safari */ + flex-basis: 40%; +} +box:first-child { + margin-left:0; +} +box h3 { + margin-bottom:0.8em; +} + +box.large tablex r { + line-height: 1.5; +} +box.large tablex r in, +box.large tablex r to, +box.large tablex r out { + font-size: 2rem; + padding-bottom: 0; +} + +#hud-notification { + position: fixed; + bottom: 20px; + left: 0; + right: 0; + display: flex; + justify-content: center; + z-index: 9; + pointer-events: none; +} + #hud-notification .msg { + background: #000; + color: white; + height: 32px; + line-height: 32px; + font-size: 14px; + letter-spacing: 0em; + padding: 0 0.7em; + border-radius: 4px; + opacity: 0.1; + transition: 250ms all ease-in; + transform: translate3d(0, 71px, 0); /* height + bottom offset + 1 */ + } + #hud-notification.visible .msg { + transform: translate3d(0, 0, 0); + transition: 120ms all cubic-bezier(0.25, 0.47, 0.44, 0.93); + opacity: 1; + } + + +/* ------------------------------------------------------ */ + + +/* wide windows */ +@media only screen and (min-width: 566px) { + .narrow-window, .only-small-screen { display: none; } +} + +/* narrow windows */ +@media only screen and (max-width: 565px) { + .wide-window, .only-large-screen { display: none; } +} + +/* small devices (<= iPhone 6+) */ +@media only screen and (max-device-width: 414px) { + box { padding: 1em; } + box tablex r { font-size: 0.9em; } + body { + font-size: 14px; + line-height: 20px; + } + .row { + padding-left: 20px; + padding-right: 20px; + } +} + +/* small devices (<= iPhone 5) */ +@media only screen and (max-device-width: 320px) { + box { + font-size: 0.8em; + min-width: 240px; + } +} + +/* +Feature helpers. + +Note: font-variant-alternates:character-variant is not yet supported by +most browsers, which is why we use the "low leve" font-feature-settings +instead. + +*/ + +.ff-none { font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; -webkit-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; -ms-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; -moz-font-feature-settings: 'kern' 1, 'calt' 0, 'liga' 0; } + +.ff-liga, +.ff-calt { font-feature-settings: 'liga' 1, 'calt' 1; -webkit-font-feature-settings: 'liga' 1, 'calt' 1; -ms-font-feature-settings: 'liga' 1, 'calt' 1; -moz-font-feature-settings: 'liga' 1, 'calt' 1; } +.ff-dlig { font-feature-settings: 'kern' 1, 'dlig' 1; -webkit-font-feature-settings: 'kern' 1, 'dlig' 1; -ms-font-feature-settings: 'kern' 1, 'dlig' 1; -moz-font-feature-settings: 'kern' 1, 'dlig' 1; } +.ff-numr { font-feature-settings: 'kern' 1, 'numr' 1; -webkit-font-feature-settings: 'kern' 1, 'numr' 1; -ms-font-feature-settings: 'kern' 1, 'numr' 1; -moz-font-feature-settings: 'kern' 1, 'numr' 1; } +.ff-dnom { font-feature-settings: 'kern' 1, 'dnom' 1; -webkit-font-feature-settings: 'kern' 1, 'dnom' 1; -ms-font-feature-settings: 'kern' 1, 'dnom' 1; -moz-font-feature-settings: 'kern' 1, 'dnom' 1; } +.ff-tnum { font-feature-settings: 'kern' 1, 'tnum' 1; -webkit-font-feature-settings: 'kern' 1, 'tnum' 1; -ms-font-feature-settings: 'kern' 1, 'tnum' 1; -moz-font-feature-settings: 'kern' 1, 'tnum' 1; } +.ff-case { font-feature-settings: 'kern' 1, 'case' 1; -webkit-font-feature-settings: 'kern' 1, 'case' 1; -ms-font-feature-settings: 'kern' 1, 'case' 1; -moz-font-feature-settings: 'kern' 1, 'case' 1; } +.ff-zero { font-feature-settings: 'kern' 1, 'zero' 1; -webkit-font-feature-settings: 'kern' 1, 'zero' 1; -ms-font-feature-settings: 'kern' 1, 'zero' 1; -moz-font-feature-settings: 'kern' 1, 'zero' 1; } +.ff-frac { font-feature-settings: 'kern' 1, 'frac' 1; -webkit-font-feature-settings: 'kern' 1, 'frac' 1; -ms-font-feature-settings: 'kern' 1, 'frac' 1; -moz-font-feature-settings: 'kern' 1, 'frac' 1; } +.ff-sups { font-feature-settings: 'kern' 1, 'sups' 1; -webkit-font-feature-settings: 'kern' 1, 'sups' 1; -ms-font-feature-settings: 'kern' 1, 'sups' 1; -moz-font-feature-settings: 'kern' 1, 'sups' 1; } +.ff-subs { font-feature-settings: 'kern' 1, 'subs' 1; -webkit-font-feature-settings: 'kern' 1, 'subs' 1; -ms-font-feature-settings: 'kern' 1, 'subs' 1; -moz-font-feature-settings: 'kern' 1, 'subs' 1; } +.ff-cpsp { font-feature-settings: 'kern' 1, 'cpsp' 1; -webkit-font-feature-settings: 'kern' 1, 'cpsp' 1; -ms-font-feature-settings: 'kern' 1, 'cpsp' 1; -moz-font-feature-settings: 'kern' 1, 'cpsp' 1; } +.ff-salt { font-feature-settings: 'kern' 1, 'salt' 1; -webkit-font-feature-settings: 'kern' 1, 'salt' 1; -ms-font-feature-settings: 'kern' 1, 'salt' 1; -moz-font-feature-settings: 'kern' 1, 'salt' 1; } +.ff-salt-zero { font-feature-settings: 'kern' 1, 'salt' 1, 'zero' 1; } +.ff-cv07-salt-zero { font-feature-settings: 'kern' 1, 'cv07' 1, 'salt' 1, 'zero' 1; } + +.ff-ss01 { font-feature-settings: 'kern' 1, 'ss01' 1; -webkit-font-feature-settings: 'kern' 1, 'ss01' 1; -ms-font-feature-settings: 'kern' 1, 'ss01' 1; -moz-font-feature-settings: 'kern' 1, 'ss01' 1; } +.ff-ss02 { font-feature-settings: 'kern' 1, 'ss02' 1; -webkit-font-feature-settings: 'kern' 1, 'ss02' 1; -ms-font-feature-settings: 'kern' 1, 'ss02' 1; -moz-font-feature-settings: 'kern' 1, 'ss02' 1; } +.ff-ss03 { font-feature-settings: 'kern' 1, 'ss03' 1; -webkit-font-feature-settings: 'kern' 1, 'ss03' 1; -ms-font-feature-settings: 'kern' 1, 'ss03' 1; -moz-font-feature-settings: 'kern' 1, 'ss03' 1; } +.ff-cv01 { font-feature-settings: 'kern' 1, 'cv01' 1; -webkit-font-feature-settings: 'kern' 1, 'cv01' 1; -ms-font-feature-settings: 'kern' 1, 'cv01' 1; -moz-font-feature-settings: 'kern' 1, 'cv01' 1; } +.ff-cv02 { font-feature-settings: 'kern' 1, 'cv02' 1; -webkit-font-feature-settings: 'kern' 1, 'cv02' 1; -ms-font-feature-settings: 'kern' 1, 'cv02' 1; -moz-font-feature-settings: 'kern' 1, 'cv02' 1; } +.ff-cv03 { font-feature-settings: 'kern' 1, 'cv03' 1; -webkit-font-feature-settings: 'kern' 1, 'cv03' 1; -ms-font-feature-settings: 'kern' 1, 'cv03' 1; -moz-font-feature-settings: 'kern' 1, 'cv03' 1; } +.ff-cv04 { font-feature-settings: 'kern' 1, 'cv04' 1; -webkit-font-feature-settings: 'kern' 1, 'cv04' 1; -ms-font-feature-settings: 'kern' 1, 'cv04' 1; -moz-font-feature-settings: 'kern' 1, 'cv04' 1; } +.ff-cv05 { font-feature-settings: 'kern' 1, 'cv05' 1; -webkit-font-feature-settings: 'kern' 1, 'cv05' 1; -ms-font-feature-settings: 'kern' 1, 'cv05' 1; -moz-font-feature-settings: 'kern' 1, 'cv05' 1; } +.ff-cv06 { font-feature-settings: 'kern' 1, 'cv06' 1; -webkit-font-feature-settings: 'kern' 1, 'cv06' 1; -ms-font-feature-settings: 'kern' 1, 'cv06' 1; -moz-font-feature-settings: 'kern' 1, 'cv06' 1; } +.ff-cv07 { font-feature-settings: 'kern' 1, 'cv07' 1; -webkit-font-feature-settings: 'kern' 1, 'cv07' 1; -ms-font-feature-settings: 'kern' 1, 'cv07' 1; -moz-font-feature-settings: 'kern' 1, 'cv07' 1; } +.ff-cv08 { font-feature-settings: 'kern' 1, 'cv08' 1; -webkit-font-feature-settings: 'kern' 1, 'cv08' 1; -ms-font-feature-settings: 'kern' 1, 'cv08' 1; -moz-font-feature-settings: 'kern' 1, 'cv08' 1; } +.ff-cv09 { font-feature-settings: 'kern' 1, 'cv09' 1; -webkit-font-feature-settings: 'kern' 1, 'cv09' 1; -ms-font-feature-settings: 'kern' 1, 'cv09' 1; -moz-font-feature-settings: 'kern' 1, 'cv09' 1; } +.ff-cv10 { font-feature-settings: 'kern' 1, 'cv10' 1; -webkit-font-feature-settings: 'kern' 1, 'cv10' 1; -ms-font-feature-settings: 'kern' 1, 'cv10' 1; -moz-font-feature-settings: 'kern' 1, 'cv10' 1; } +.ff-cv11 { font-feature-settings: 'kern' 1, 'cv11' 1; -webkit-font-feature-settings: 'kern' 1, 'cv11' 1; -ms-font-feature-settings: 'kern' 1, 'cv11' 1; -moz-font-feature-settings: 'kern' 1, 'cv11' 1; } + + + +.row.charset { + padding-top: 1rem; + padding-left: 0; + padding-right: 0; + /* maintain cascading margin-bottom */ +} + +.charset-table { + --gridColor: #bbb; + --columns: 24; + --columnsL: 32; + --columnsS: 16; + --columnsXS: 8; + --tableWidth: 95vw; + + flex: 1 1 auto; + padding: 0; + margin: 1rem auto; + + max-width: var(--tableWidth); + width: var(--tableWidth); + overflow: hidden; + + display: flex; + flex-wrap: wrap; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + box-shadow: -1px -1px 0 var(--gridColor), + -1px 0 0 var(--gridColor), + 0 -1px 0 var(--gridColor); +} + .charset-table > a { + flex: 0 0 auto; + + margin: 0; + padding: 0; + + display: flex; + align-items: center; + justify-content: center; + + width: calc(var(--tableWidth) / var(--columns)); + height: calc(var(--tableWidth) / var(--columns)); + + font-size: calc(100vw / calc(var(--columns) * 2)); + line-height: 100%; + text-align: center; + font-feature-settings: "calt" 0; /* disable all */ + + box-shadow: inset -1px -1px 0 var(--gridColor); + text-decoration: none; + } +/* for window width >= 1600 */ +@media only screen and (min-width: 1599px) { + .charset-table { --columns: var(--columnsL); } +} +@media only screen and (max-width: 800px) { + .charset-table { --columns: var(--columnsS); } +} +@media only screen and (max-width: 565px) { + .charset-table { --columns: var(--columnsXS); } +} diff --git a/docs/res/base.js b/docs/res/base.js new file mode 100644 index 000000000..7d38721b0 --- /dev/null +++ b/docs/res/base.js @@ -0,0 +1,115 @@ + +function $$(query, el) { + return [].slice.call((el || document).querySelectorAll(query)) +} + +function $(query, el) { + return (el || document).querySelector(query) +} + +// fetchjson(url string) :Promise +// +var fetchjson = ( + typeof window.fetch == 'function' ? ( + function _fetchjson(url, cb) { + return window.fetch(url).then(function(r) { return r.json() }) + } + ) : + function _fetchjson(url, cb) { + return new Promise(function(resolve, reject) { + var r = new XMLHttpRequest() + r.addEventListener("load", function(){ + try { + resolve(JSON.parse(r.responseText)) + } catch (err) { + reject(err) + } + }) + r.addEventListener("error", function(ev) { + reject(ev.error || ev || new Error('network error')) + }) + r.open("GET", url) + r.send() + }) + } +) + + +// timeNow() :float +// +var timeNow = ( + window.performance !== undefined && window.performance.now ? function() { + return window.performance.now() + } : Date.now ? function() { + return Date.now() + } : function() { + return (new Date()).getTime() + } +) + + +var HUDNotification = { + el: $('#hud-notification'), + timer: null, + visible: false, + + show: function(message, duration) { + var n = this + n.el.firstChild.innerText = message + n.el.classList.add('visible') + if (n.visible) { + n.hide() + setTimeout(function(){ n.show(message, duration) }, 120) + return + } + n.visible = true + n.el.style.visibility = null + clearTimeout(n.timer) + n.timer = setTimeout(function(){ n.hide() }, duration || 1200) + }, + + hide: function() { + var n = this + if (n.visible) { + n.el.classList.remove('visible') + n.visible = false + n.el.style.visibility = 'hidden' + } + } +} + + +// InterDynamicTracking takes the font size in points or pixels and returns +// the compensating tracking in EM. +// +function InterDynamicTracking(fontSize) { + var a = -0.0223, b = 0.185, c = -0.1745; + // tracking = a + b * e ^ (c * fontSize) + return a + b * Math.pow(Math.E, c * fontSize) +} + +// InterDynamicLineHeight produces the line height for the given font size +// +function InterDynamicLineHeight(fontSize) { + var l = 1.4 + return Math.round(fontSize * l) +} + + +// Mac or not? Maybe a buggy Safari or a busted Chrome on Windows... +var isMac = false +if (!window.MSStream && + /mac|ipad|iphone|ipod/i.test(navigator.userAgent)) +{ + isMac = true + if (navigator.userAgent.indexOf('Safari') != -1 && + navigator.userAgent.indexOf('Chrome') == -1) + { + document.body.classList.add('safari') + } +} else if ( + navigator.userAgent.indexOf('Windows') != -1 && + navigator.userAgent.indexOf('Chrome') != -1 +) { + document.body.classList.add('chrome-win') +} diff --git a/docs/res/bindings.js b/docs/res/bindings.js new file mode 100644 index 000000000..3de3ec0b4 --- /dev/null +++ b/docs/res/bindings.js @@ -0,0 +1,242 @@ +// requires index.js + +function passThrough(v) { return v } + +function valueGetter(el) { + return ( + 'valueAsNumber' in el ? () => el.valueAsNumber : + (el.type == 'number' || el.type == 'range') ? () => parseFloat(el.value) : + () => el.value + ) +} + +function Binding(name){ + this.name = name + this.value = undefined + this.inputs = [] + this.outputs = [] + this.listeners = [] + this.parser = undefined + this.formatter = passThrough +} + + +Binding.prototype.addInput = function(el) { + var binding = this + var getValue = valueGetter(el) + var _onInput = ev => { + binding.setValue(getValue(), el) + } + var input = { + el: el, + _onInput: _onInput, + } + this.inputs.push(input) + if (this.value === undefined) { + this.value = getValue() + } else { + input.el.value = this.formatter(this.value) + } + if (el.tagName == 'SELECT' || el.type == 'checkbox') { + el.addEventListener('change', _onInput, {passive:true}) + } else { + el.addEventListener('input', _onInput, {passive:true}) + } +} + + +Binding.prototype.addOutput = function(el) { + this.outputs.push(el) + if (this.value !== undefined) { + el.innerText = this.formatter(this.value) + } +} + + +// listener signature: +// function(nextval string, prevval string, b Binding)void +// +Binding.prototype.addListener = function(listener) { + this.listeners.push(listener) +} + + +Binding.prototype.setValue = function(nextval, origin) { + var prevval = this.value + if (this.parser) { + nextval = this.parser(nextval, prevval) + } + if (this.value === nextval) { + return + } + var binding = this + this.value = nextval + var value = binding.formatter(nextval) + this.inputs.forEach(function(input) { + if (input.el !== origin) { + input.el.value = value + } + }) + this.outputs.forEach(function(el) { + el.innerText = value + }) + this.listeners.forEach(function(listener) { + listener(nextval, prevval, this) + }) +} + +// ------------------------------------------------------------------------ + +function Bindings() { + this.bindings = {} +} + +Bindings.prototype.getBinding = function(name) { + var binding = this.bindings[name] + if (!binding) { + binding = new Binding(name) + this.bindings[name] = binding + } + return binding +} + +Bindings.prototype.bindInput = function(name, input) { + var binding = this.getBinding(name) + binding.addInput(input) +} + +Bindings.prototype.bindOutput = function(name, el) { + var binding = this.getBinding(name) + binding.addOutput(el) +} + +Bindings.prototype.bindAllInputs = function(queryOrInputElementList) { + var bindings = this + + var elements = ( + typeof queryOrInputElementList == 'string' ? $$(queryOrInputElementList) : + queryOrInputElementList + ) + + elements.forEach(function(el) { + var bindingName = el.dataset.binding + if (bindingName) { + if ( + el.tagName == 'INPUT' || + el.tagName == 'TEXTAREA' || + el.tagName == 'SELECT' + ) { + bindings.bindInput(bindingName, el) + } else { + bindings.bindOutput(bindingName, el) + } + } + }) +} + +// listener signature: +// function(nextval string, prevval string, b Binding)void +// +Bindings.prototype.addListener = function(name, listener) { + var binding = this.getBinding(name) + binding.addListener(listener) +} + +Bindings.prototype.setValue = function(name, value) { + var binding = this.getBinding(name) + binding.setValue(value) +} + +Bindings.prototype.setFormatter = function(name, formatter) { + var binding = this.getBinding(name) + binding.formatter = formatter || passThrough +} + + +Bindings.prototype.value = function(name, defaultValue) { + var binding = this.bindings[name] + return binding && binding.value !== undefined ? binding.value : defaultValue +} + + +function fmt_float(nextval, prevval) { + var n = parseFloat(nextval) + return isNaN(n) ? 0 : n +} + +function fmt_int(nextval, prevval) { + var n = parseInt(nextval) + return isNaN(n) ? 0 : n +} + + +// configure is convenience function for setting value, adding a +// listener and associating a parser with a binding. +// If a listener and a value is provided, the value is set and the listener +// is immediately invoked. +// +Bindings.prototype.configure = function(name, value, parser, listener) { + var binding = this.getBinding(name) + if (listener) { + binding.addListener(listener) + } + if (value !== undefined && value !== null) { + binding.setValue(value) + } + if (parser) { + if (typeof parser == 'string') { + switch (parser) { + case 'number': + case 'float': + parser = fmt_float; break; + + case 'int': + case 'integer': + parser = fmt_int; break; + + default: + throw new Error('unknown parser "' + parser + '"') + } + } else if (typeof parser != 'function') { + throw new Error('parser should be a string or function') + } + binding.parser = parser + } +} + + +Bindings.prototype.allBindings = ( + typeof Object.values == 'function' ? function() { + return Object.values(this.bindings) + } : function() { + let v = [] + for (let name in this.bindings) { + v.push(this.bindings[name]) + } + return v + } +) + + +Bindings.prototype.getValues = function() { + let values = {} + for (let name in this.bindings) { + values[name] = this.bindings[name].value + } + return values +} + + +Bindings.prototype.setValues = function(values) { + Object.keys(values).forEach(name => { + let b = this.bindings[name] + if (!b) { + if (console.warn) { + console.warn('Bindings.setValues: ignoring unknown "' + name + '"') + } + return + } + // console.log(`bindings setValue ${name} => ${values[name]}`) + b.setValue(values[name]) + }) +} diff --git a/docs/res/close.svg b/docs/res/close.svg new file mode 100644 index 000000000..f6b7b196e --- /dev/null +++ b/docs/res/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/ctxedit.css b/docs/res/ctxedit.css new file mode 100644 index 000000000..fb17514ae --- /dev/null +++ b/docs/res/ctxedit.css @@ -0,0 +1,337 @@ +:root { + --strip-height: 40px; +} + +#ctxedit-ui { + box-sizing: border-box; + overflow: hidden; + display: flex; + position: fixed; + left: 0; + right: 0; + bottom: 0; + padding: 0 0; + height: var(--strip-height); + + background: #111; + color: #ccc; + font-size: 12px; + /*border-top-left-radius: 4px; + border-bottom-left-radius: 4px;*/ + + padding: 0 50px; + display: flex; + justify-content: center; + + opacity:0; + transition: 90ms all cubic-bezier(0.25, 0.47, 0.44, 0.93); + transform: translate(0, var(--strip-height)); + + outline: none; + pointer-events: none; +} +#ctxedit-ui.visible { + opacity:1; + transform: translate(0, 0); + pointer-events: initial; +} +#ctxedit-ui .wrapper { + display: flex; + flex-direction: row; + align-items: stretch; + justify-content: center; + width: 100%; + max-width: 888px; /* same as base.css .row > * */ + flex: 1 0 100%; +} + #ctxedit-ui .control { + display: flex; + justify-content: space-between; + align-items: center; + overflow: hidden; + min-height: 30px; + margin: 0 16px; + } + #ctxedit-ui .control:first-child { + margin-left:0; + } + #ctxedit-ui .control.range { + flex: 1 1 auto; + max-width: 200px; + } + #ctxedit-ui .control > * { + flex: 1 1 auto; + margin:0; + box-sizing: border-box; + } + #ctxedit-ui .control > :last-child { + margin-right: 0; + } + #ctxedit-ui .control > select { + min-width: 8em; + flex: 0 1 auto; + align-items: center; + justify-content: center; + } + #ctxedit-ui .control > input, + #ctxedit-ui .control > select { + width: 0; + outline: none; + color: inherit; + } + #ctxedit-ui .control.popup { + margin-right: 0px; + } + #ctxedit-ui .control > select { + font: inherit; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + border: none; + background-color: #111; + margin: 0; + padding: 0; + height: var(--strip-height); + background-image: url(popup.svg); + background-repeat: no-repeat; + background-position: left center; + width: 120px; + color: white; + opacity: 0.6; + padding-left: 20px; + line-height: var(--strip-height); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + #ctxedit-ui .control > select::-ms-expand { + display: none; + } + #ctxedit-ui .control > select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #fff; + background-color: #111; + font: inherit; + font-size: inherit; + } + #ctxedit-ui .control > select:hover { + opacity: 1; + } + #ctxedit-ui .control > input[type="number"], + #ctxedit-ui .control > input[type="text"] { + background: none; + border: none; + padding: 4px 0; + font-size: inherit; + /*border-radius: 2px;*/ + } + #ctxedit-ui .control > input[type="number"] { + max-width: 48px; + text-align: left; + -moz-appearance: textfield; + -moz-font-feature-settings: 'tnum' 1; + -ms-font-feature-settings: 'tnum' 1; + -o-font-feature-settings: 'tnum' 1; + -webkit-font-feature-settings: 'tnum' 1; + font-feature-settings: 'tnum' 1; + } + #ctxedit-ui .control > input[type=number]::-webkit-inner-spin-button, + #ctxedit-ui .control > input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + #ctxedit-ui .control > input[type="range"] { + /*max-width: 80%;*/ + flex: 1 1 auto; + display: block; + } + #ctxedit-ui .control > input[type="color"] { + width:20px; + height:20px; + border: none; + background: transparent; + } + #ctxedit-ui .control > img.icon, + #ctxedit-ui .control > label { + user-select: none; + font-family: georgia, serif; + font-style: italic; + color: white; + width: 16px; + height: 16px; + flex: 0 0 auto; + margin-right: 16px; + opacity: 0.6; + } + + #ctxedit-ui .button { + width: var(--strip-height); + height: var(--strip-height); + background-repeat: no-repeat; + background-position: center; + opacity: 0.6; + margin:0; + } + #ctxedit-ui .button:hover { + opacity: 1; + background-color: #292929; + } + #ctxedit-ui .button:active { + background-color: #444; + } + #ctxedit-ui .button.features-button { background-image: url(settings.svg); } + #ctxedit-ui .button.reset-button { background-image: url(reset.svg); } + #ctxedit-ui .button.dismiss-button { background-image: url(dismiss.svg); } + + + +/* narrow viewports */ +@media only screen and (max-width: 639px) { + #ctxedit-ui { + background: black; + height: calc(var(--strip-height) * 4); + } + #ctxedit-ui .wrapper { + flex-direction: column; + flex-wrap: wrap; + } +} + + +.font-preload { + position: fixed; + display: block; + opacity: 0; + pointer-events: none; +} + + +.slider-value-tip { + pointer-events: none; + opacity: 0; + position: fixed; + text-align: center; + width: 100px; + /*background: hotpink;*/ + left: 500px; + display: flex; + flex-direction: column; + align-items: center; + z-index: 9; + transition: opacity 120ms ease-out; + filter: drop-shadow(0px 2px 6px rgba(0,0,0,0.2)); + --fgcolor: #fff; + --bgcolor: #444; +} +.slider-value-tip .value { + padding: 4px 10px; + border-radius: 2px; + font-size: 11px; + letter-spacing: 0.013em; + color: var(--fgcolor); + background: var(--bgcolor); + -moz-font-feature-settings: 'tnum' 1; + -ms-font-feature-settings: 'tnum' 1; + -o-font-feature-settings: 'tnum' 1; + -webkit-font-feature-settings: 'tnum' 1; + font-feature-settings: 'tnum' 1; + z-index: 1; +} +.slider-value-tip .callout { + background: var(--bgcolor); + width:10px; + height:10px; + transform: translate(0, -6px) rotate(45deg); + z-index: 0; +} +.slider-value-tip.visible { + opacity: 1; +} + +.styled-inputs-neg { + --track-thickness: 2px; + --track-color: rgba(255, 255, 255, 0.3); + + --thumb-outline-thickness: 2px; + --thumb-outline-color: #111; /* match control strip */ + --thumb-diameter: 10px; + --thumb-color: white; + + --active-color: rgb(95, 170, 255); +} + +.styled-inputs-neg input[type=range] { + -webkit-appearance: none; + margin: 0; + width: 100%; + height: var(--strip-height); + background: transparent; +} +.styled-inputs-neg input[type=range]:focus { + outline: none; +} + +.styled-inputs-neg input[type=range]::-webkit-slider-runnable-track { + width: 100%; + margin: 0; + animate: 0.2s; + background: var(--track-color); + height: var(--track-thickness); +} +.styled-inputs-neg input[type=range]:focus::-webkit-slider-runnable-track { + background: var(--active-color); +} +.styled-inputs-neg input[type=range]::-moz-range-track { + width: 100%; + margin: 0; + animate: 0.2s; + background: var(--track-color); + height: var(--track-thickness); +} +.styled-inputs-neg input[type=range]:focus::-moz-range-track { + background: var(--active-color); +} + +.styled-inputs-neg input[type=range]::-webkit-slider-thumb { + --thumb-diameter2: calc(var(--thumb-diameter) + var(--thumb-outline-thickness) * 2); + width: var(--thumb-diameter2); + height: var(--thumb-diameter2); + border: var(--thumb-outline-thickness) solid var(--thumb-outline-color); + border-radius: 100%; + background: var(--thumb-color); + -webkit-appearance: none; + margin-top: calc(((var(--thumb-diameter2) / 2) - (var(--track-thickness) / 2)) * -1); +} +.styled-inputs-neg input[type=range]::-moz-range-thumb { + width: var(--thumb-diameter); + height: var(--thumb-diameter); + border: var(--thumb-outline-thickness) solid var(--thumb-outline-color); + border-radius: 100%; + background: var(--thumb-color); + margin-top: calc(((var(--thumb-diameter) / 2) - (var(--track-thickness) / 2)) * -1); +} + +/* MS Edge -- note that we can't use CSS variables here */ +.styled-inputs-neg input[type=range]::-ms-track { + background: transparent; + border-color: transparent; + border-width: 0 0; + color: transparent; /* markings */ + height: 2px; + animate: 0.2s; + margin: 0; +} +.styled-inputs-neg input[type=range]::-ms-fill-lower, +.styled-inputs-neg input[type=range]::-ms-fill-upper { + background: white; + opacity: 0.3; +} +.styled-inputs-neg input[type=range]::-ms-thumb { + width: 9px; + height: 9px; + /*border: 2px solid rgba(0,0,0,0.8);*/ + box-shadow: 0px 0px 0px 2px #111; + border-radius: 100%; + background: white; +} +/* Note: :focus selectors are buggy in Edge, so we skip that */ diff --git a/docs/res/ctxedit.js b/docs/res/ctxedit.js new file mode 100644 index 000000000..1ab896b08 --- /dev/null +++ b/docs/res/ctxedit.js @@ -0,0 +1,560 @@ +var CtxEdit = (function(){ + + +function getLocalObject(key) { + let s = sessionStorage.getItem(key) + if (s) { + try { + return JSON.parse(s) + } catch (e) { + console.error( + `failed to parse sessionStorage value "${s}" for key ${key}`, + err.stack || String(err) + ) + } + } + return null +} + + +function setLocalObject(key, value) { + let json = JSON.stringify(value) + sessionStorage.setItem(key, json) +} + + +function rmLocalObject(key) { + sessionStorage.removeItem(key) +} + + +class FloatProp { + constructor(cssProp, unitSuffix) { + this.cssProp = cssProp + this.unitSuffix = unitSuffix + } + + valueInStyle(s) { + let v = s[this.cssProp] + return v !== undefined ? parseFloat(v) : v + } + + applyStyle(el, value) { + el.style[this.cssProp] = value + this.unitSuffix + } +} + +class FontStyleProp { + + valueInStyle(s) { + let italic = s['font-style'] == 'italic' || s['font-style'].indexOf('oblique') != -1 + let weight = parseFloat(s['font-weight']) + if (isNaN(weight)) { + weight = s['font-weight'] + if (weight == 'thin') { return italic ? 'thin-italic' : 'thin' } + if (weight == 'extra-light') {return italic ? 'extra-light-italic' :'extra-light' } + if (weight == 'light') { return italic ? 'light-italic' : 'light' } + if (weight == 'normal') { return italic ? 'italic' : 'regular' } + if (weight == 'medium') { return italic ? 'medium-italic' : 'medium' } + if (weight == 'semi-bold') { return italic ? 'semi-bold-italic' : 'semi-bold' } + if (weight == 'bold') { return italic ? 'bold-italic' : 'bold' } + if (weight == 'extra-bold') { return italic ? 'extra-bold-italic' : 'extra-bold' } + } else { + if (weight <= 150) { return italic ? 'thin-italic' : 'thin' } + if (weight <= 250) { return italic ? 'extra-light-italic' :'extra-light' } + if (weight <= 350) { return italic ? 'light-italic' : 'light' } + if (weight <= 450) { return italic ? 'italic' : 'regular' } + if (weight <= 550) { return italic ? 'medium-italic' : 'medium' } + if (weight <= 650) { return italic ? 'semi-bold-italic' : 'semi-bold' } + if (weight <= 750) { return italic ? 'bold-italic' : 'bold' } + if (weight <= 850) { return italic ? 'extra-bold-italic' : 'extra-bold' } + } + return italic ? 'black-italic' : 'black' + } + + applyStyle(el, value) { + let cl = el.classList + for (let k of Array.from(cl.values())) { + if (k.indexOf('font-style-') == 0) { + cl.remove(k) + } + } + cl.add('font-style-' + value) + } +} + +class LineHeightProp { + valueInStyle(s) { + let v = s['line-height'] + if (v === undefined) { + return 1.0 + } + if (v.lastIndexOf('px') == v.length - 2) { + // compute + return parseFloat( + (parseFloat(v) / parseFloat(s['font-size'])).toFixed(3) + ) + } + v = parseFloat(v) + return isNaN(v) ? 1.0 : v + } + + applyStyle(el, value) { + el.style['line-height'] = String(value) + } +} + +class TrackingProp { + valueInStyle(s) { + let v = s['letter-spacing'] + if (v === undefined) { + return 0 + } + if (v.lastIndexOf('px') == v.length - 2) { + // compute + return parseFloat( + (parseFloat(v) / parseFloat(s['font-size'])).toFixed(3) + ) + } + v = parseFloat(v) + return isNaN(v) ? 0 : v + } + + applyStyle(el, value) { + el.style['letter-spacing'] = value.toFixed(3) + 'em' + } +} + +const Props = { + size: new FloatProp('font-size', 'px'), + tracking: new TrackingProp(), + lineHeight: new LineHeightProp(), + style: new FontStyleProp(), +} + +function valuesFromStyle(s) { + let values = {} + for (let name in Props) { + let p = Props[name] + values[name] = p.valueInStyle(s) + } + return values +} + + +class Editable { + constructor(el, key) { + this.el = el + this.key = key + this.defaultValues = valuesFromStyle(getComputedStyle(this.el)) + this.values = Object.assign({}, this.defaultValues) + this.defaultExplicitTracking = this.defaultValues['tracking'] != 0 + this.explicitTracking = this.defaultExplicitTracking + this.explicitTrackingKey = this.key + ":etracking" + this.loadValues() + this.updateSizeDependantProps() + } + + resetValues() { + this.values = Object.assign({}, this.defaultValues) + let style = this.el.style + for (let name in this.values) { + Props[name].applyStyle(this.el, this.values[name]) + } + rmLocalObject(this.key) + rmLocalObject(this.explicitTrackingKey) + this.explicitTracking = this.defaultExplicitTracking + this.updateSizeDependantProps() + } + + setExplicitTracking(explicitTracking) { + if (this.explicitTracking !== explicitTracking) { + this.explicitTracking = explicitTracking + if (!this.explicitTracking) { + this.updateSizeDependantProps() + } + } + } + + setValue(name, value) { + this.values[name] = value + Props[name].applyStyle(this.el, value) + if (name == 'size') { + this.updateSizeDependantProps() + } + } + + updateSizeDependantProps() { + let size = this.values.size + + // dynamic tracking + if (!this.explicitTracking) { + this.setValue('tracking', InterDynamicTracking(size)) + } + + // left indent + // TODO: Consider making this part of dynamic metrics. + let leftMargin = size / -16 + if (leftMargin == 0) { + this.el.style.marginLeft = null + } else { + this.el.style.marginLeft = leftMargin.toFixed(1) + 'px' + } + } + + loadValues() { + let values = getLocalObject(this.key) + if (values && typeof values == 'object') { + for (let name in values) { + if (name in this.values) { + let value = values[name] + this.values[name] = value + Props[name].applyStyle(this.el, value) + } else if (console.warn) { + console.warn(`Editable.loadValues ignoring unknown "${name}"`) + } + } + // console.log(`loaded values for ${this}:`, values) + } + let etr = getLocalObject(this.explicitTrackingKey) + this.explicitTracking = this.defaultExplicitTracking || etr + } + + isDefaultValues() { + for (let k in this.values) { + if (this.values[k] !== this.defaultValues[k]) { + return false + } + } + return true + } + + saveValues() { + if (this.isDefaultValues()) { + rmLocalObject(this.key) + rmLocalObject(this.explicitTrackingKey) + } else { + setLocalObject(this.key, this.values) + setLocalObject(this.explicitTrackingKey, this.explicitTracking ? "1" : "0") + } + // console.log(`saved values for ${this}`) + } + + toString() { + return `Editable(${this.key})` + } +} + + +var supportsFocusTrick = (u => + u.indexOf('Firefox/') == -1 +)(navigator.userAgent) + + +class CtxEdit { + constructor() { + this.bindings = new Bindings() + this.keyPrefix = 'ctxedit:' + document.location.pathname + ':' + this.editables = new Map() + this.ui = $('#ctxedit-ui') + this.currEditable = null + this._saveValuesTimer = null + this.isChangingBindings = true + this.bindings = new Bindings() + this.initBindings() + this.initUI() + this.addAllEditables() + this.isChangingBindings = false + this.preloadFonts() + + if (supportsFocusTrick) { + this.ui.addEventListener('focus', ev => { + if (this.currEditable) { + ev.preventDefault() + ev.stopImmediatePropagation() + this.currEditable.el.focus() // breaks Firefox + } + }, {capture:true, passive:false}) + } + } + + initUI() { + $('.reset-button', this.ui).addEventListener('click', ev => this.reset()) + $('.dismiss-button', this.ui).addEventListener('click', ev => this.stopEditing()) + this.initRangeSliders() + } + + initRangeSliders() { + this._sliderTimers = new Map() + $$('input[type="range"]', this.ui).forEach(input => { + var binding = this.bindings.getBinding(input.dataset.binding) + + // create and hook up value tip + let valtip = document.createElement('div') + let valtipval = document.createElement('div') + let valtipcallout = document.createElement('div') + valtip.className = 'slider-value-tip' + valtipval.className = 'value' + valtipcallout.className = 'callout' + valtipval.innerText = '0' + valtip.appendChild(valtipval) + valtip.appendChild(valtipcallout) + binding.addOutput(valtipval) + document.body.appendChild(valtip) + + let inputBounds = {} + let min = parseFloat(input.getAttribute('min')) + let max = parseFloat(input.getAttribute('max')) + if (isNaN(min)) { + min = 0 + } + if (isNaN(max)) { + max = 1 + } + const sliderThumbWidth = 12 + const valtipYOffset = 14 + + let updateValTipXPos = () => { + let r = (binding.value - min) / (max - min) + let sliderWidth = inputBounds.width - sliderThumbWidth + let x = ((inputBounds.x + (sliderThumbWidth / 2)) + (sliderWidth * r)) - (valtip.clientWidth / 2) + valtip.style.left = x + 'px' + } + + binding.addListener(updateValTipXPos) + + let shownCounter = 0 + let showValTip = () => { + if (++shownCounter == 1) { + valtip.classList.add('visible') + inputBounds = input.getBoundingClientRect() + valtip.style.top = (inputBounds.y - valtip.clientHeight + valtipYOffset) + 'px' + updateValTipXPos() + } + } + let hideValTip = () => { + if (--shownCounter == 0) { + valtip.classList.remove('visible') + } + } + + input.addEventListener('pointerdown', showValTip) + input.addEventListener('pointerup', hideValTip) + input.addEventListener('pointercancel', hideValTip) + + let timer = null + input.addEventListener('input', ev => { + if (timer === null) { + showValTip() + } else { + clearTimeout(timer) + } + timer = setTimeout(() => { + timer = null + hideValTip() + }, 400) + }) + }) + } + + initBindings() { + let b = this.bindings + + // let updateTracking = fontSize => { + // if (!this.currEditable.explicitTracking) { + // var tracking = InterDynamicTracking(fontSize) + // this.isChangingBindings = true + // b.setValue('tracking', tracking) + // this.isChangingBindings = false + // } + // } + + b.configure('tracking', 0, 'float', tracking => { + if (!this.isChangingBindings && !this.currEditable.explicitTracking) { + // console.log('enabled explicit tracking') + this.currEditable.setExplicitTracking(true) + this.setNeedsSaveValues() + } + }) + b.setFormatter('tracking', v => v.toFixed(3)) + + b.configure('size', 0, 'float', size => { + let ed = this.currEditable + if (ed) { + setTimeout(() => { + // HERE BE DRAGONS! Feedback loop from Editable + if (!ed.explicitTracking) { + this.isChangingBindings = true + b.setValue('tracking', ed.values.tracking) + this.isChangingBindings = false + } + }, 10) + } + }) + + b.configure('lineHeight', 1, 'float') + + b.bindAllInputs($$('.control input', this.ui)) + b.bindAllInputs($$('.control select', this.ui)) + + $('.control input[data-binding="tracking"]').addEventListener("dblclick", ev => { + let ed = this.currEditable + setTimeout(() => { + ed.setExplicitTracking(false) + this.setNeedsSaveValues() + this.isChangingBindings = true + b.setValue('tracking', ed.values.tracking) + this.isChangingBindings = false + }, 50) + }) + + for (let binding of b.allBindings()) { + binding.addListener(() => this.bindingChanged(binding)) + } + } + + preloadFonts() { + // Note: This has no effect on systems supporting variable fonts. + [ + "regular", + "italic", + "medium", + "medium-italic", + "semi-bold", + "semi-bold-italic", + "bold", + "bold-italic", + "extra-bold", + "extra-bold-italic", + "black", + "black-italic", + ].forEach(style => { + let e = document.createElement('div') + e.className = 'font-preload font-style-' + style + e.innerText = 'a' + document.body.appendChild(e) + }) + } + + bindingChanged(binding) { + if (this.isChangingBindings) { + // Note: this.isChangingBindings is true when binding values are + // changed internally, in which case we do nothing here. + return + } + if (this.currEditable) { + this.currEditable.setValue(binding.name, binding.value) + } + this.setNeedsSaveValues() + } + + reset() { + for (let ed of this.editables.values()) { + ed.resetValues() + } + this.updateBindingValues() + } + + updateBindingValues() { + if (this.currEditable) { + this.isChangingBindings = true + this.bindings.setValues(this.currEditable.values) + this.isChangingBindings = false + } + } + + saveValues() { + if (this._saveValuesTimer !== null) { + clearTimeout(this._saveValuesTimer) + this._saveValuesTimer = null + } + if (this.currEditable) { + this.currEditable.saveValues() + } + } + + setNeedsSaveValues() { + if (this._saveValuesTimer !== null) { + clearTimeout(this._saveValuesTimer) + } + this._saveValuesTimer = setTimeout(() => this.saveValues(), 300) + } + + setCurrEditable(ed) { + if (this._saveValuesTimer !== null && + this.currEditable && + !this.isChangingBindings) + { + this.saveValues() + } + this.currEditable = ed + this.updateBindingValues() + if (this.currEditable) { + this.showUI() + } else { + this.hideUI() + } + } + + onEditableReceivedFocus(ed) { + // console.log(`onEditableReceivedFocus ${ed}`) + clearTimeout(this._deselectTimer) + this.setCurrEditable(ed) + } + + onEditableLostFocus(ed) { + // console.log(`onEditableLostFocus ${ed}`) + // this.setCurrEditable(null) + if (supportsFocusTrick) { + this._deselectTimer = setTimeout(() => this.setCurrEditable(null), 10) + } + } + + showUI() { + this.ui.classList.add('visible') + } + + hideUI() { + this.ui.classList.remove('visible') + } + + stopEditing() { + if (this.currEditable) { + this.currEditable.el.blur() + this.setCurrEditable(null) + } + } + + addAllEditables() { + for (let el of $$('[data-ctxedit]')) { + this.addEditable(el) + } + } + + addEditable(el) { + let key = this.keyPrefix + el.dataset.ctxedit + let existing = this.editables.get(key) + if (existing) { + throw new Error(`duplicate editable ${key}`) + } + let ed = new Editable(el, key) + this.editables.set(key, ed) + this.initEditable(ed) + // this.showUI() // XXX + } + + initEditable(ed) { + // filter paste + ed.el.addEventListener('paste', ev => { + ev.preventDefault() + let text = ev.clipboardData.getData("text/plain") + document.execCommand("insertHTML", false, text) + }, {capture:true,passive:false}) + + ed.el.addEventListener('focus', ev => this.onEditableReceivedFocus(ed)) + ed.el.addEventListener('blur', ev => this.onEditableLostFocus(ed)) + } +} + +return CtxEdit +})(); diff --git a/docs/res/dismiss.svg b/docs/res/dismiss.svg new file mode 100644 index 000000000..0749e2196 --- /dev/null +++ b/docs/res/dismiss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/favicon.png b/docs/res/favicon.png new file mode 100644 index 000000000..414217338 --- /dev/null +++ b/docs/res/favicon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8941a9dfdb8de43d438d164d1cec675b399846c44426e6570df99d86ba5d74a7 +size 914 diff --git a/docs/res/graphplot.js b/docs/res/graphplot.js new file mode 100644 index 000000000..b06f67f16 --- /dev/null +++ b/docs/res/graphplot.js @@ -0,0 +1,239 @@ + +function GraphPlot(canvas) { + this.canvas = canvas + const g = canvas.getContext('2d') + if (g == null) { + throw new Error('failed to acquire 2d context') + } + + this.width = 0 // dp + this.height = 0 // dp + this.widthPx = 0 // px + this.heightPx = 0 // px + this.pixelRatio = 1 + this.g = g + this.dataSegments = [] + this.axes = { + x0: .5, // % from left to x=0 + y0: .5, // % from top to y=0 + scalex: 40, // pixels from x=0 to x=1 + scaley: 40, // pixels from y=0 to y=1 + negativeX: true, + } + + if (!this.autosize()) { + this.setSize(256, 256) + } +} + +GraphPlot.prototype.autosize = function() { + try { + this.canvas.width = null + this.canvas.height = null + this.canvas.style.width = null + this.canvas.style.height = null + var cs = window.getComputedStyle(this.canvas) + var width = parseFloat(cs.width) + var height = parseFloat(cs.height) + this.setSize(width, height) + return true + } catch (err) { + if (typeof console != 'undefined' && console.warn) { + console.warn('GraphPlot.autosize failed: ' + err) + } + } + return false +} + +// setOrigin sets the origin of axis x and y +// The values should be in the range [0-1] and maps to the extremes +// of the canvas. +// +GraphPlot.prototype.setOrigin = function(x, y) { + var p = this + p.axes.x0 = x + p.axes.y0 = y +} + +// setScale sets the value scale for x and y axis. +// The values should be provided as display points. +// +GraphPlot.prototype.setScale = function(x, y) { + var p = this + if (y === undefined) { + y = x + } + p.axes.scalex = x + p.axes.scaley = y +} + +// setSize sets the size of canvas in display points +// +GraphPlot.prototype.setSize = function(width, height) { + var p = this + p.width = width + p.height = height + const el = p.canvas, g = p.g + p.pixelRatio = window.devicePixelRatio || 1 + if (p.pixelRatio != 1) { + el.width = p.widthPx = width * p.pixelRatio + el.height = p.heightPx = height * p.pixelRatio + g.scale(p.pixelRatio, p.pixelRatio) + } else { + el.width = p.widthPx = width + el.height = p.heightPx = height + g.scale(1, 1) + } + el.style.width = `${width}px` + el.style.height = `${height}px` +} + + +GraphPlot.prototype.renderAxes = function() { + var p = this + , g = p.g + , x0 = Math.round(p.axes.x0 * p.widthPx) / p.pixelRatio + , y0 = Math.round(p.axes.y0 * p.heightPx) / p.pixelRatio + + g.beginPath() + g.strokeStyle = "rgb(0, 0, 0, 0.2)" + if (y0 > 0 && y0 < p.width) { + g.moveTo(0, y0); g.lineTo(p.width, y0) // X axis + } + if (x0 > 0 && x0 < p.height) { + g.moveTo(x0, 0); g.lineTo(x0, p.height) // Y axis + } + g.stroke() +} + + +// plotf plots an arbitrary function on the graph +// +GraphPlot.prototype.plotf = function(f, color) { + var p = this + , g = p.g + , w = p.width + , h = p.height + , x0 = p.axes.x0 * p.width + , y0 = p.axes.y0 * p.height + , x = 0 + , y = 0 + , dx = 4 / p.pixelRatio // smaller means finer curves and more CPU + , scalex = p.axes.scalex * w + , scaley = p.axes.scaley * h + , iMax = Math.round((w - x0) / dx) + , iMin = p.axes.negativeX ? Math.round(-x0 / dx) : 0 + + g.beginPath() + g.lineWidth = 1 + g.strokeStyle = color || "rgb(0, 0, 0, 0.8)" + + for (var i = iMin; i <= iMax; i++) { + x = dx * i + y = f(x / scalex) * scaley + if (i == iMin) { + g.moveTo(x0 + x, y0 - y) + } else { + g.lineTo(x0 + x, y0 - y) + } + } + + g.stroke() +} + + +// plotLines draws straight lines between a collection of points +// +GraphPlot.prototype.plotLine = function(points, color) { + var p = this + , g = p.g + , x0 = p.axes.x0 * p.width + , y0 = p.axes.y0 * p.height + , x = 0 + , y = 0 + , scalex = p.axes.scalex * p.width + , scaley = p.axes.scaley * p.height + , pt + + g.beginPath() + g.lineWidth = 1 + g.strokeStyle = color || "rgb(0, 0, 0, 0.8)" + + var i = 0 + for (; i < points.length; i++) { + pt = points[i] + x = pt[0] * scalex + y = pt[1] * scaley + if (i == 0) { + g.moveTo(x0 + x, y0 - y) + } else { + g.lineTo(x0 + x, y0 - y) + } + } + + g.stroke() +} + + +// plotPoints draws points +// +GraphPlot.prototype.plotPoints = function(points, color) { + var p = this + , g = p.g + , x0 = p.axes.x0 * p.width + , y0 = p.axes.y0 * p.height + , x = 0 + , y = 0 + , scalex = p.axes.scalex * p.width + , scaley = p.axes.scaley * p.height + , pt + , i = 0 + + g.fillStyle = color || "rgb(0, 0, 0, 0.8)" + + for (; i < points.length; i++) { + pt = points[i] + x = x0 + pt[0] * scalex + y = y0 - pt[1] * scaley + g.beginPath() + g.arc(x, y, 3, 0, Math.PI + (Math.PI * 2) / 2, false) + g.fill() + } +} + + +GraphPlot.prototype.clear = function() { + var p = this + p.g.clearRect(0, 0, p.width, p.height) + p.renderAxes() +} + + +GraphPlot.prototype.renderDemo = function() { + var p = this + , g = p.g + , dpscale = p.pixelRatio + , w = p.widthPx + , h = p.heightPx + + p.clear() + + p.plotf( + function(x) { return Math.sin(x) }, + 'blue' + ) + + p.plotf( + function(x) { return Math.cos(3*x) }, + 'hotpink' + ) + + // var scale = p.height / 4 + // g.moveTo(0, scale) + // var i, sine, lines = 200, frag = p.width / lines + // for (i = 0; i < lines; i++) { + // sine = Math.sin(i / scale * 2) * scale + // g.lineTo(i * frag, -sine + scale) + // } + // g.stroke() +} diff --git a/docs/res/grid.css b/docs/res/grid.css new file mode 100644 index 000000000..3d5a70bdc --- /dev/null +++ b/docs/res/grid.css @@ -0,0 +1,341 @@ +/* Raster Simple CSS Grid System, version 3 */ +grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + --grid-cs: 1; /* start */ + --grid-ce: -1 /* end */ +} + +/* c -- cell or column */ +grid > c { display: block; appearance: none; -webkit-appearance: none } + +grid[columns="1"] { grid-template-columns: repeat(1, 1fr) } +grid[columns="2"] { grid-template-columns: repeat(2, 1fr) } +grid[columns="3"] { grid-template-columns: repeat(3, 1fr) } +grid[columns="4"] { grid-template-columns: repeat(4, 1fr) } +grid[columns="5"] { grid-template-columns: repeat(5, 1fr) } +grid[columns="6"] { grid-template-columns: repeat(6, 1fr) } +grid[columns="7"] { grid-template-columns: repeat(7, 1fr) } +grid[columns="8"] { grid-template-columns: repeat(8, 1fr) } +grid[columns="9"] { grid-template-columns: repeat(9, 1fr) } +grid[columns="10"] { grid-template-columns: repeat(10, 1fr) } +grid[columns="11"] { grid-template-columns: repeat(11, 1fr) } +grid[columns="12"] { grid-template-columns: repeat(12, 1fr) } +grid[columns="13"] { grid-template-columns: repeat(13, 1fr) } +grid[columns="14"] { grid-template-columns: repeat(14, 1fr) } +grid[columns="15"] { grid-template-columns: repeat(15, 1fr) } +grid[columns="16"] { grid-template-columns: repeat(16, 1fr) } +grid[columns="17"] { grid-template-columns: repeat(17, 1fr) } +grid[columns="18"] { grid-template-columns: repeat(18, 1fr) } +grid[columns="19"] { grid-template-columns: repeat(19, 1fr) } +grid[columns="20"] { grid-template-columns: repeat(20, 1fr) } +grid[columns="21"] { grid-template-columns: repeat(21, 1fr) } +grid[columns="22"] { grid-template-columns: repeat(22, 1fr) } +grid[columns="23"] { grid-template-columns: repeat(23, 1fr) } +grid[columns="24"] { grid-template-columns: repeat(24, 1fr) } +grid[columns="25"] { grid-template-columns: repeat(25, 1fr) } +grid[columns="26"] { grid-template-columns: repeat(26, 1fr) } +grid[columns="27"] { grid-template-columns: repeat(27, 1fr) } +grid[columns="28"] { grid-template-columns: repeat(28, 1fr) } +grid[columns="29"] { grid-template-columns: repeat(29, 1fr) } +grid[columns="30"] { grid-template-columns: repeat(30, 1fr) } + +/* span=start... */ +grid > c[span^="1"] { --grid-cs: 1 } +grid > c[span^="2"] { --grid-cs: 2 } +grid > c[span^="3"] { --grid-cs: 3 } +grid > c[span^="4"] { --grid-cs: 4 } +grid > c[span^="5"] { --grid-cs: 5 } +grid > c[span^="6"] { --grid-cs: 6 } +grid > c[span^="7"] { --grid-cs: 7 } +grid > c[span^="8"] { --grid-cs: 8 } +grid > c[span^="9"] { --grid-cs: 9 } +grid > c[span^="10"] { --grid-cs: 10 } +grid > c[span^="11"] { --grid-cs: 11 } +grid > c[span^="12"] { --grid-cs: 12 } +grid > c[span^="13"] { --grid-cs: 13 } +grid > c[span^="14"] { --grid-cs: 14 } +grid > c[span^="15"] { --grid-cs: 15 } +grid > c[span^="16"] { --grid-cs: 16 } +grid > c[span^="17"] { --grid-cs: 17 } +grid > c[span^="18"] { --grid-cs: 18 } +grid > c[span^="19"] { --grid-cs: 19 } +grid > c[span^="20"] { --grid-cs: 20 } +grid > c[span^="21"] { --grid-cs: 21 } +grid > c[span^="22"] { --grid-cs: 22 } +grid > c[span^="23"] { --grid-cs: 23 } +grid > c[span^="24"] { --grid-cs: 24 } +grid > c[span^="25"] { --grid-cs: 25 } +grid > c[span^="26"] { --grid-cs: 26 } +grid > c[span^="27"] { --grid-cs: 27 } +grid > c[span^="28"] { --grid-cs: 28 } +grid > c[span^="29"] { --grid-cs: 29 } +grid > c[span^="30"] { --grid-cs: 30 } + +/* span=...+width, span=...-end */ +grid > c[span$="+1"], grid > c[span="1"] { --grid-ce: 1 } +grid > c[span$="+2"], grid > c[span$="-1"], grid > c[span="2"] { --grid-ce: 2 } +grid > c[span$="+3"], grid > c[span$="-2"], grid > c[span="3"] { --grid-ce: 3 } +grid > c[span$="+4"], grid > c[span$="-3"], grid > c[span="4"] { --grid-ce: 4 } +grid > c[span$="+5"], grid > c[span$="-4"], grid > c[span="5"] { --grid-ce: 5 } +grid > c[span$="+6"], grid > c[span$="-5"], grid > c[span="6"] { --grid-ce: 6 } +grid > c[span$="+7"], grid > c[span$="-6"], grid > c[span="7"] { --grid-ce: 7 } +grid > c[span$="+8"], grid > c[span$="-7"], grid > c[span="8"] { --grid-ce: 8 } +grid > c[span$="+9"], grid > c[span$="-8"], grid > c[span="9"] { --grid-ce: 9 } +grid > c[span$="+10"], grid > c[span$="-9"], grid > c[span="10"] { --grid-ce: 10 } +grid > c[span$="+11"], grid > c[span$="-10"], grid > c[span="11"] { --grid-ce: 11 } +grid > c[span$="+12"], grid > c[span$="-11"], grid > c[span="12"] { --grid-ce: 12 } +grid > c[span$="+13"], grid > c[span$="-12"], grid > c[span="13"] { --grid-ce: 13 } +grid > c[span$="+14"], grid > c[span$="-13"], grid > c[span="14"] { --grid-ce: 14 } +grid > c[span$="+15"], grid > c[span$="-14"], grid > c[span="15"] { --grid-ce: 15 } +grid > c[span$="+16"], grid > c[span$="-15"], grid > c[span="16"] { --grid-ce: 16 } +grid > c[span$="+17"], grid > c[span$="-16"], grid > c[span="17"] { --grid-ce: 17 } +grid > c[span$="+18"], grid > c[span$="-17"], grid > c[span="18"] { --grid-ce: 18 } +grid > c[span$="+19"], grid > c[span$="-18"], grid > c[span="19"] { --grid-ce: 19 } +grid > c[span$="+20"], grid > c[span$="-19"], grid > c[span="20"] { --grid-ce: 20 } +grid > c[span$="+21"], grid > c[span$="-20"], grid > c[span="21"] { --grid-ce: 21 } +grid > c[span$="+22"], grid > c[span$="-21"], grid > c[span="22"] { --grid-ce: 22 } +grid > c[span$="+23"], grid > c[span$="-22"], grid > c[span="23"] { --grid-ce: 23 } +grid > c[span$="+24"], grid > c[span$="-23"], grid > c[span="24"] { --grid-ce: 24 } +grid > c[span$="+25"], grid > c[span$="-24"], grid > c[span="25"] { --grid-ce: 25 } +grid > c[span$="+26"], grid > c[span$="-25"], grid > c[span="26"] { --grid-ce: 26 } +grid > c[span$="+27"], grid > c[span$="-26"], grid > c[span="27"] { --grid-ce: 27 } +grid > c[span$="+28"], grid > c[span$="-27"], grid > c[span="28"] { --grid-ce: 28 } +grid > c[span$="+29"], grid > c[span$="-28"], grid > c[span="29"] { --grid-ce: 29 } +grid > c[span$="+30"], grid > c[span$="-29"], grid > c[span="30"] { --grid-ce: 30 } +grid > c[span$="-30"] { --grid-ce: 31 } + +/* connect vars */ +grid > c[span] { grid-column-end: span var(--grid-ce) } +grid > c[span*="+"], grid > c[span*="-"], grid > c[span*=".."] { + grid-column-start: var(--grid-cs) } +grid > c[span*="-"], grid > c[span*=".."] { + grid-column-end: var(--grid-ce) } +grid > c[span="row"] { grid-column: 1 / -1 } + +/* for window width <= 600 */ +@media only screen and (max-width: 600px) { + grid[columns-s="1"] { grid-template-columns: repeat(1, 1fr) } + grid[columns-s="2"] { grid-template-columns: repeat(2, 1fr) } + grid[columns-s="3"] { grid-template-columns: repeat(3, 1fr) } + grid[columns-s="4"] { grid-template-columns: repeat(4, 1fr) } + grid[columns-s="5"] { grid-template-columns: repeat(5, 1fr) } + grid[columns-s="6"] { grid-template-columns: repeat(6, 1fr) } + grid[columns-s="7"] { grid-template-columns: repeat(7, 1fr) } + grid[columns-s="8"] { grid-template-columns: repeat(8, 1fr) } + grid[columns-s="9"] { grid-template-columns: repeat(9, 1fr) } + grid[columns-s="10"] { grid-template-columns: repeat(10, 1fr) } + grid[columns-s="11"] { grid-template-columns: repeat(11, 1fr) } + grid[columns-s="12"] { grid-template-columns: repeat(12, 1fr) } + grid[columns-s="13"] { grid-template-columns: repeat(13, 1fr) } + grid[columns-s="14"] { grid-template-columns: repeat(14, 1fr) } + grid[columns-s="15"] { grid-template-columns: repeat(15, 1fr) } + grid[columns-s="16"] { grid-template-columns: repeat(16, 1fr) } + grid[columns-s="17"] { grid-template-columns: repeat(17, 1fr) } + grid[columns-s="18"] { grid-template-columns: repeat(18, 1fr) } + grid[columns-s="19"] { grid-template-columns: repeat(19, 1fr) } + grid[columns-s="20"] { grid-template-columns: repeat(20, 1fr) } + grid[columns-s="21"] { grid-template-columns: repeat(21, 1fr) } + grid[columns-s="22"] { grid-template-columns: repeat(22, 1fr) } + grid[columns-s="23"] { grid-template-columns: repeat(23, 1fr) } + grid[columns-s="24"] { grid-template-columns: repeat(24, 1fr) } + grid[columns-s="25"] { grid-template-columns: repeat(25, 1fr) } + grid[columns-s="26"] { grid-template-columns: repeat(26, 1fr) } + grid[columns-s="27"] { grid-template-columns: repeat(27, 1fr) } + grid[columns-s="28"] { grid-template-columns: repeat(28, 1fr) } + grid[columns-s="29"] { grid-template-columns: repeat(29, 1fr) } + grid[columns-s="30"] { grid-template-columns: repeat(30, 1fr) } + + /* span-s=start... */ + grid > c[span-s^="1"] { --grid-cs: 1 } + grid > c[span-s^="2"] { --grid-cs: 2 } + grid > c[span-s^="3"] { --grid-cs: 3 } + grid > c[span-s^="4"] { --grid-cs: 4 } + grid > c[span-s^="5"] { --grid-cs: 5 } + grid > c[span-s^="6"] { --grid-cs: 6 } + grid > c[span-s^="7"] { --grid-cs: 7 } + grid > c[span-s^="8"] { --grid-cs: 8 } + grid > c[span-s^="9"] { --grid-cs: 9 } + grid > c[span-s^="10"] { --grid-cs: 10 } + grid > c[span-s^="11"] { --grid-cs: 11 } + grid > c[span-s^="12"] { --grid-cs: 12 } + grid > c[span-s^="13"] { --grid-cs: 13 } + grid > c[span-s^="14"] { --grid-cs: 14 } + grid > c[span-s^="15"] { --grid-cs: 15 } + grid > c[span-s^="16"] { --grid-cs: 16 } + grid > c[span-s^="17"] { --grid-cs: 17 } + grid > c[span-s^="18"] { --grid-cs: 18 } + grid > c[span-s^="19"] { --grid-cs: 19 } + grid > c[span-s^="20"] { --grid-cs: 20 } + grid > c[span-s^="21"] { --grid-cs: 21 } + grid > c[span-s^="22"] { --grid-cs: 22 } + grid > c[span-s^="23"] { --grid-cs: 23 } + grid > c[span-s^="24"] { --grid-cs: 24 } + grid > c[span-s^="25"] { --grid-cs: 25 } + grid > c[span-s^="26"] { --grid-cs: 26 } + grid > c[span-s^="27"] { --grid-cs: 27 } + grid > c[span-s^="28"] { --grid-cs: 28 } + grid > c[span-s^="29"] { --grid-cs: 29 } + grid > c[span-s^="30"] { --grid-cs: 30 } + + /* span-s=...+width, span-s=...-end */ + grid > c[span-s$="+1"], grid > c[span-s="1"] { --grid-ce: 1 } + grid > c[span-s$="+2"], grid > c[span-s$="-1"], grid > c[span-s="2"] { --grid-ce: 2 } + grid > c[span-s$="+3"], grid > c[span-s$="-2"], grid > c[span-s="3"] { --grid-ce: 3 } + grid > c[span-s$="+4"], grid > c[span-s$="-3"], grid > c[span-s="4"] { --grid-ce: 4 } + grid > c[span-s$="+5"], grid > c[span-s$="-4"], grid > c[span-s="5"] { --grid-ce: 5 } + grid > c[span-s$="+6"], grid > c[span-s$="-5"], grid > c[span-s="6"] { --grid-ce: 6 } + grid > c[span-s$="+7"], grid > c[span-s$="-6"], grid > c[span-s="7"] { --grid-ce: 7 } + grid > c[span-s$="+8"], grid > c[span-s$="-7"], grid > c[span-s="8"] { --grid-ce: 8 } + grid > c[span-s$="+9"], grid > c[span-s$="-8"], grid > c[span-s="9"] { --grid-ce: 9 } + grid > c[span-s$="+10"], grid > c[span-s$="-9"], grid > c[span-s="10"] { --grid-ce: 10 } + grid > c[span-s$="+11"], grid > c[span-s$="-10"], grid > c[span-s="11"] { --grid-ce: 11 } + grid > c[span-s$="+12"], grid > c[span-s$="-11"], grid > c[span-s="12"] { --grid-ce: 12 } + grid > c[span-s$="+13"], grid > c[span-s$="-12"], grid > c[span-s="13"] { --grid-ce: 13 } + grid > c[span-s$="+14"], grid > c[span-s$="-13"], grid > c[span-s="14"] { --grid-ce: 14 } + grid > c[span-s$="+15"], grid > c[span-s$="-14"], grid > c[span-s="15"] { --grid-ce: 15 } + grid > c[span-s$="+16"], grid > c[span-s$="-15"], grid > c[span-s="16"] { --grid-ce: 16 } + grid > c[span-s$="+17"], grid > c[span-s$="-16"], grid > c[span-s="17"] { --grid-ce: 17 } + grid > c[span-s$="+18"], grid > c[span-s$="-17"], grid > c[span-s="18"] { --grid-ce: 18 } + grid > c[span-s$="+19"], grid > c[span-s$="-18"], grid > c[span-s="19"] { --grid-ce: 19 } + grid > c[span-s$="+20"], grid > c[span-s$="-19"], grid > c[span-s="20"] { --grid-ce: 20 } + grid > c[span-s$="+21"], grid > c[span-s$="-20"], grid > c[span-s="21"] { --grid-ce: 21 } + grid > c[span-s$="+22"], grid > c[span-s$="-21"], grid > c[span-s="22"] { --grid-ce: 22 } + grid > c[span-s$="+23"], grid > c[span-s$="-22"], grid > c[span-s="23"] { --grid-ce: 23 } + grid > c[span-s$="+24"], grid > c[span-s$="-23"], grid > c[span-s="24"] { --grid-ce: 24 } + grid > c[span-s$="+25"], grid > c[span-s$="-24"], grid > c[span-s="25"] { --grid-ce: 25 } + grid > c[span-s$="+26"], grid > c[span-s$="-25"], grid > c[span-s="26"] { --grid-ce: 26 } + grid > c[span-s$="+27"], grid > c[span-s$="-26"], grid > c[span-s="27"] { --grid-ce: 27 } + grid > c[span-s$="+28"], grid > c[span-s$="-27"], grid > c[span-s="28"] { --grid-ce: 28 } + grid > c[span-s$="+29"], grid > c[span-s$="-28"], grid > c[span-s="29"] { --grid-ce: 29 } + grid > c[span-s$="+30"], grid > c[span-s$="-29"], grid > c[span-s="30"] { --grid-ce: 30 } + grid > c[span-s$="-30"] { --grid-ce: 31 } + + /* connect vars */ + grid > c[span-s] { grid-column-end: span var(--grid-ce) } + grid > c[span-s*="+"], grid > c[span-s*="-"], grid > c[span-s*=".."] { + grid-column-start: var(--grid-cs) } + grid > c[span-s*="-"], grid > c[span-s*=".."] { + grid-column-end: var(--grid-ce) } + grid > c[span-s="row"] { grid-column: 1 / -1 } +} + +/* for window width >= 1600 */ +@media only screen and (min-width: 1599px) { + grid[columns-l="1"] { grid-template-columns: repeat(1, 1fr) } + grid[columns-l="2"] { grid-template-columns: repeat(2, 1fr) } + grid[columns-l="3"] { grid-template-columns: repeat(3, 1fr) } + grid[columns-l="4"] { grid-template-columns: repeat(4, 1fr) } + grid[columns-l="5"] { grid-template-columns: repeat(5, 1fr) } + grid[columns-l="6"] { grid-template-columns: repeat(6, 1fr) } + grid[columns-l="7"] { grid-template-columns: repeat(7, 1fr) } + grid[columns-l="8"] { grid-template-columns: repeat(8, 1fr) } + grid[columns-l="9"] { grid-template-columns: repeat(9, 1fr) } + grid[columns-l="10"] { grid-template-columns: repeat(10, 1fr) } + grid[columns-l="11"] { grid-template-columns: repeat(11, 1fr) } + grid[columns-l="12"] { grid-template-columns: repeat(12, 1fr) } + grid[columns-l="13"] { grid-template-columns: repeat(13, 1fr) } + grid[columns-l="14"] { grid-template-columns: repeat(14, 1fr) } + grid[columns-l="15"] { grid-template-columns: repeat(15, 1fr) } + grid[columns-l="16"] { grid-template-columns: repeat(16, 1fr) } + grid[columns-l="17"] { grid-template-columns: repeat(17, 1fr) } + grid[columns-l="18"] { grid-template-columns: repeat(18, 1fr) } + grid[columns-l="19"] { grid-template-columns: repeat(19, 1fr) } + grid[columns-l="20"] { grid-template-columns: repeat(20, 1fr) } + grid[columns-l="21"] { grid-template-columns: repeat(21, 1fr) } + grid[columns-l="22"] { grid-template-columns: repeat(22, 1fr) } + grid[columns-l="23"] { grid-template-columns: repeat(23, 1fr) } + grid[columns-l="24"] { grid-template-columns: repeat(24, 1fr) } + grid[columns-l="25"] { grid-template-columns: repeat(25, 1fr) } + grid[columns-l="26"] { grid-template-columns: repeat(26, 1fr) } + grid[columns-l="27"] { grid-template-columns: repeat(27, 1fr) } + grid[columns-l="28"] { grid-template-columns: repeat(28, 1fr) } + grid[columns-l="29"] { grid-template-columns: repeat(29, 1fr) } + grid[columns-l="30"] { grid-template-columns: repeat(30, 1fr) } + + /* span-l=start... */ + grid > c[span-l^="1"] { --grid-cs: 1 } + grid > c[span-l^="2"] { --grid-cs: 2 } + grid > c[span-l^="3"] { --grid-cs: 3 } + grid > c[span-l^="4"] { --grid-cs: 4 } + grid > c[span-l^="5"] { --grid-cs: 5 } + grid > c[span-l^="6"] { --grid-cs: 6 } + grid > c[span-l^="7"] { --grid-cs: 7 } + grid > c[span-l^="8"] { --grid-cs: 8 } + grid > c[span-l^="9"] { --grid-cs: 9 } + grid > c[span-l^="10"] { --grid-cs: 10 } + grid > c[span-l^="11"] { --grid-cs: 11 } + grid > c[span-l^="12"] { --grid-cs: 12 } + grid > c[span-l^="13"] { --grid-cs: 13 } + grid > c[span-l^="14"] { --grid-cs: 14 } + grid > c[span-l^="15"] { --grid-cs: 15 } + grid > c[span-l^="16"] { --grid-cs: 16 } + grid > c[span-l^="17"] { --grid-cs: 17 } + grid > c[span-l^="18"] { --grid-cs: 18 } + grid > c[span-l^="19"] { --grid-cs: 19 } + grid > c[span-l^="20"] { --grid-cs: 20 } + grid > c[span-l^="21"] { --grid-cs: 21 } + grid > c[span-l^="22"] { --grid-cs: 22 } + grid > c[span-l^="23"] { --grid-cs: 23 } + grid > c[span-l^="24"] { --grid-cs: 24 } + grid > c[span-l^="25"] { --grid-cs: 25 } + grid > c[span-l^="26"] { --grid-cs: 26 } + grid > c[span-l^="27"] { --grid-cs: 27 } + grid > c[span-l^="28"] { --grid-cs: 28 } + grid > c[span-l^="29"] { --grid-cs: 29 } + grid > c[span-l^="30"] { --grid-cs: 30 } + + /* span-l=...+width, span-l=...-end */ + grid > c[span-l$="+1"], grid > c[span-l="1"] { --grid-ce: 1 } + grid > c[span-l$="+2"], grid > c[span-l$="-1"], grid > c[span-l="2"] { --grid-ce: 2 } + grid > c[span-l$="+3"], grid > c[span-l$="-2"], grid > c[span-l="3"] { --grid-ce: 3 } + grid > c[span-l$="+4"], grid > c[span-l$="-3"], grid > c[span-l="4"] { --grid-ce: 4 } + grid > c[span-l$="+5"], grid > c[span-l$="-4"], grid > c[span-l="5"] { --grid-ce: 5 } + grid > c[span-l$="+6"], grid > c[span-l$="-5"], grid > c[span-l="6"] { --grid-ce: 6 } + grid > c[span-l$="+7"], grid > c[span-l$="-6"], grid > c[span-l="7"] { --grid-ce: 7 } + grid > c[span-l$="+8"], grid > c[span-l$="-7"], grid > c[span-l="8"] { --grid-ce: 8 } + grid > c[span-l$="+9"], grid > c[span-l$="-8"], grid > c[span-l="9"] { --grid-ce: 9 } + grid > c[span-l$="+10"], grid > c[span-l$="-9"], grid > c[span-l="10"] { --grid-ce: 10 } + grid > c[span-l$="+11"], grid > c[span-l$="-10"], grid > c[span-l="11"] { --grid-ce: 11 } + grid > c[span-l$="+12"], grid > c[span-l$="-11"], grid > c[span-l="12"] { --grid-ce: 12 } + grid > c[span-l$="+13"], grid > c[span-l$="-12"], grid > c[span-l="13"] { --grid-ce: 13 } + grid > c[span-l$="+14"], grid > c[span-l$="-13"], grid > c[span-l="14"] { --grid-ce: 14 } + grid > c[span-l$="+15"], grid > c[span-l$="-14"], grid > c[span-l="15"] { --grid-ce: 15 } + grid > c[span-l$="+16"], grid > c[span-l$="-15"], grid > c[span-l="16"] { --grid-ce: 16 } + grid > c[span-l$="+17"], grid > c[span-l$="-16"], grid > c[span-l="17"] { --grid-ce: 17 } + grid > c[span-l$="+18"], grid > c[span-l$="-17"], grid > c[span-l="18"] { --grid-ce: 18 } + grid > c[span-l$="+19"], grid > c[span-l$="-18"], grid > c[span-l="19"] { --grid-ce: 19 } + grid > c[span-l$="+20"], grid > c[span-l$="-19"], grid > c[span-l="20"] { --grid-ce: 20 } + grid > c[span-l$="+21"], grid > c[span-l$="-20"], grid > c[span-l="21"] { --grid-ce: 21 } + grid > c[span-l$="+22"], grid > c[span-l$="-21"], grid > c[span-l="22"] { --grid-ce: 22 } + grid > c[span-l$="+23"], grid > c[span-l$="-22"], grid > c[span-l="23"] { --grid-ce: 23 } + grid > c[span-l$="+24"], grid > c[span-l$="-23"], grid > c[span-l="24"] { --grid-ce: 24 } + grid > c[span-l$="+25"], grid > c[span-l$="-24"], grid > c[span-l="25"] { --grid-ce: 25 } + grid > c[span-l$="+26"], grid > c[span-l$="-25"], grid > c[span-l="26"] { --grid-ce: 26 } + grid > c[span-l$="+27"], grid > c[span-l$="-26"], grid > c[span-l="27"] { --grid-ce: 27 } + grid > c[span-l$="+28"], grid > c[span-l$="-27"], grid > c[span-l="28"] { --grid-ce: 28 } + grid > c[span-l$="+29"], grid > c[span-l$="-28"], grid > c[span-l="29"] { --grid-ce: 29 } + grid > c[span-l$="+30"], grid > c[span-l$="-29"], grid > c[span-l="30"] { --grid-ce: 30 } + grid > c[span-l$="-30"] { --grid-ce: 31 } + + /* connect vars */ + grid > c[span-l] { grid-column-end: span var(--grid-ce) } + grid > c[span-l*="+"], grid > c[span-l*="-"], grid > c[span-l*=".."] { + grid-column-start: var(--grid-cs) } + grid > c[span-l*="-"], grid > c[span-l*=".."] { + grid-column-end: var(--grid-ce) } + grid > c[span-l="row"] { grid-column: 1 / -1 } +} + +/* .debug can be added to a grid to visualize its effective cells */ +grid.debug > * { +--color: rgba(248,110,91 ,0.3); +background-image: + linear-gradient(to bottom, var(--color) 0%, var(--color) 100%); +} +grid.debug > :nth-child(6n+2) { --color: rgba(103,126,208,0.3) } +grid.debug > :nth-child(6n+3) { --color: rgba(224,174,72 ,0.3) } +grid.debug > :nth-child(6n+4) { --color: rgba(77, 214,115,0.3) } +grid.debug > :nth-child(6n+5) { --color: rgba(217,103,219,0.3) } +grid.debug > :nth-child(6n+6) { --color: rgba(94, 204,211,0.3) } +grid.debug > :nth-child(6n+7) { --color: rgba(248,110,91 ,0.3) } diff --git a/docs/res/icons/close-black.svg b/docs/res/icons/close-black.svg new file mode 100755 index 000000000..a67a2e22b --- /dev/null +++ b/docs/res/icons/close-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/close.svg b/docs/res/icons/close.svg new file mode 100755 index 000000000..f6b7b196e --- /dev/null +++ b/docs/res/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/dismiss-black.svg b/docs/res/icons/dismiss-black.svg new file mode 100755 index 000000000..d359e4123 --- /dev/null +++ b/docs/res/icons/dismiss-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/dismiss.svg b/docs/res/icons/dismiss.svg new file mode 100755 index 000000000..427522b60 --- /dev/null +++ b/docs/res/icons/dismiss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/font-size-black.svg b/docs/res/icons/font-size-black.svg new file mode 100755 index 000000000..fb0b9df50 --- /dev/null +++ b/docs/res/icons/font-size-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/font-size.svg b/docs/res/icons/font-size.svg new file mode 100755 index 000000000..0dd5cfd61 --- /dev/null +++ b/docs/res/icons/font-size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/letter-spacing-black.svg b/docs/res/icons/letter-spacing-black.svg new file mode 100755 index 000000000..267c0ac62 --- /dev/null +++ b/docs/res/icons/letter-spacing-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/letter-spacing.svg b/docs/res/icons/letter-spacing.svg new file mode 100755 index 000000000..993435895 --- /dev/null +++ b/docs/res/icons/letter-spacing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/line-height-black.svg b/docs/res/icons/line-height-black.svg new file mode 100755 index 000000000..04c1e66a9 --- /dev/null +++ b/docs/res/icons/line-height-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/line-height.svg b/docs/res/icons/line-height.svg new file mode 100755 index 000000000..627f62faa --- /dev/null +++ b/docs/res/icons/line-height.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/minimize-black.svg b/docs/res/icons/minimize-black.svg new file mode 100644 index 000000000..4fef3328f --- /dev/null +++ b/docs/res/icons/minimize-black.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/res/icons/minimize.svg b/docs/res/icons/minimize.svg new file mode 100644 index 000000000..861eec592 --- /dev/null +++ b/docs/res/icons/minimize.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/res/icons/popup-black.svg b/docs/res/icons/popup-black.svg new file mode 100755 index 000000000..4046411f2 --- /dev/null +++ b/docs/res/icons/popup-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/popup.svg b/docs/res/icons/popup.svg new file mode 100755 index 000000000..eba6b62fe --- /dev/null +++ b/docs/res/icons/popup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/reset-black.svg b/docs/res/icons/reset-black.svg new file mode 100755 index 000000000..6f20feaef --- /dev/null +++ b/docs/res/icons/reset-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/reset.svg b/docs/res/icons/reset.svg new file mode 100755 index 000000000..33b7ca175 --- /dev/null +++ b/docs/res/icons/reset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/settings-black.svg b/docs/res/icons/settings-black.svg new file mode 100755 index 000000000..81365ff40 --- /dev/null +++ b/docs/res/icons/settings-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/settings.svg b/docs/res/icons/settings.svg new file mode 100755 index 000000000..31ed727a1 --- /dev/null +++ b/docs/res/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/style-black.svg b/docs/res/icons/style-black.svg new file mode 100755 index 000000000..0dd668a3d --- /dev/null +++ b/docs/res/icons/style-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/icons/style.svg b/docs/res/icons/style.svg new file mode 100755 index 000000000..ab0589a56 --- /dev/null +++ b/docs/res/icons/style.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/metrics.png b/docs/res/metrics.png new file mode 100644 index 000000000..1a3d2c638 --- /dev/null +++ b/docs/res/metrics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf98ba617d84d5ac73f8711974e75667e0d973f39cf3cc9f762fe23c3b2c4d10 +size 272310 diff --git a/docs/res/noise512.png b/docs/res/noise512.png new file mode 100644 index 000000000..cba935879 --- /dev/null +++ b/docs/res/noise512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f808e4bfe2281c9e1c6455e71410f4c2c0de7d47fdaac81d2d0d90cdcd8b2bb +size 36283 diff --git a/docs/res/popup.svg b/docs/res/popup.svg new file mode 100644 index 000000000..a20c03fa8 --- /dev/null +++ b/docs/res/popup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/preview-app.png b/docs/res/preview-app.png new file mode 100644 index 000000000..d70b71a7a --- /dev/null +++ b/docs/res/preview-app.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:146a2d6eb5e14abd38e67637956fd04e45064739b23d824828a9e61ae4d593eb +size 236331 diff --git a/docs/res/reset.svg b/docs/res/reset.svg new file mode 100644 index 000000000..33b7ca175 --- /dev/null +++ b/docs/res/reset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/sample.png b/docs/res/sample.png new file mode 100644 index 000000000..390deba1f --- /dev/null +++ b/docs/res/sample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0771694b2073ba15269971ba90a1a293129d4ca816790c04fddc6d59fac92551 +size 425764 diff --git a/docs/res/settings.svg b/docs/res/settings.svg new file mode 100644 index 000000000..31ed727a1 --- /dev/null +++ b/docs/res/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/res/share.png b/docs/res/share.png new file mode 100644 index 000000000..f0dafe1f8 --- /dev/null +++ b/docs/res/share.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5775db8b3b74f7d602423246c9b3fe8a104fa1cd3e9f3909b33bff9fe6e50a0 +size 45806 diff --git a/docs/res/weights-and-styles.svg b/docs/res/weights-and-styles.svg new file mode 100644 index 000000000..240d4f9a4 --- /dev/null +++ b/docs/res/weights-and-styles.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/samples/icons/font-size.svg b/docs/samples/icons/font-size.svg new file mode 100755 index 000000000..0dd5cfd61 --- /dev/null +++ b/docs/samples/icons/font-size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/samples/icons/letter-spacing.svg b/docs/samples/icons/letter-spacing.svg new file mode 100755 index 000000000..993435895 --- /dev/null +++ b/docs/samples/icons/letter-spacing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/samples/icons/line-height.svg b/docs/samples/icons/line-height.svg new file mode 100755 index 000000000..627f62faa --- /dev/null +++ b/docs/samples/icons/line-height.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/samples/icons/style.svg b/docs/samples/icons/style.svg new file mode 100755 index 000000000..ab0589a56 --- /dev/null +++ b/docs/samples/icons/style.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/samples/img/01.png b/docs/samples/img/01.png new file mode 100644 index 000000000..33e5c82d3 --- /dev/null +++ b/docs/samples/img/01.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a5bfb3d380eefb84427253213967e4b3d99345680560da12ddaf27a4f262a43 +size 62840 diff --git a/docs/samples/img/01@2x.png b/docs/samples/img/01@2x.png new file mode 100644 index 000000000..b5576d65b --- /dev/null +++ b/docs/samples/img/01@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4450eb0eb1f84826481e49d903997d097cfd5ff23a98b3ebc0737e8f990efc1c +size 146483 diff --git a/docs/samples/img/02.png b/docs/samples/img/02.png new file mode 100644 index 000000000..5259c8400 --- /dev/null +++ b/docs/samples/img/02.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dea5c4a8275a44aedd6dff9dc717f6740e4b3afa28f3fe52c695e61837beae6 +size 76267 diff --git a/docs/samples/img/02@2x.png b/docs/samples/img/02@2x.png new file mode 100644 index 000000000..ccbb59d48 --- /dev/null +++ b/docs/samples/img/02@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76c36a372f2b64c372802fe4b653d0d6d1f8741a2631ce8304caea071d2dd82e +size 180072 diff --git a/docs/samples/img/03.png b/docs/samples/img/03.png new file mode 100644 index 000000000..dbb61f7b0 --- /dev/null +++ b/docs/samples/img/03.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:299408ccb4597b9e123c155e60b358f92dad2b9b1e420badb2ece6572015c022 +size 541287 diff --git a/docs/samples/img/03@2x.png b/docs/samples/img/03@2x.png new file mode 100644 index 000000000..db5ec2c2c --- /dev/null +++ b/docs/samples/img/03@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e0ae569ecceac0c5b2f0d79a3d4dba0227c7ad77e6c7d9cc646eb9ca12dd3e +size 2192311 diff --git a/docs/samples/img/04.png b/docs/samples/img/04.png new file mode 100644 index 000000000..a50c3b3ec --- /dev/null +++ b/docs/samples/img/04.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c78177140edd427f1a0d65c74b6123d7734294b62590c2b53143d39a0868144 +size 95690 diff --git a/docs/samples/img/04@2x.png b/docs/samples/img/04@2x.png new file mode 100644 index 000000000..2eee0782b --- /dev/null +++ b/docs/samples/img/04@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf49bd995ab8de5a9f56f5540d504ef683ceeaf6bfb8db4ee332e46cd661afb3 +size 238091 diff --git a/docs/samples/img/05.png b/docs/samples/img/05.png new file mode 100644 index 000000000..f5c60470b --- /dev/null +++ b/docs/samples/img/05.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57807302d276ddafe1600d849bcffabcaa32314340f3e6814aca17a30e8eabf9 +size 99488 diff --git a/docs/samples/img/05@2x.png b/docs/samples/img/05@2x.png new file mode 100644 index 000000000..91f984f86 --- /dev/null +++ b/docs/samples/img/05@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc6cf92cdb95da13e0d22d388c1bc349da299f42327dc0a0b9e18e155492bc4b +size 246807 diff --git a/docs/samples/img/06.png b/docs/samples/img/06.png new file mode 100644 index 000000000..f4e91d209 --- /dev/null +++ b/docs/samples/img/06.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4458dd4324216657085823539b8cb14e02788247e95277f3d74d4efb04df852b +size 105619 diff --git a/docs/samples/img/06@2x.png b/docs/samples/img/06@2x.png new file mode 100644 index 000000000..9c464e110 --- /dev/null +++ b/docs/samples/img/06@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c27321558d84283fa732e57e19600487b514a2b7f9ba38c9a21a0a83f51ecb4 +size 235272 diff --git a/docs/samples/img/07.png b/docs/samples/img/07.png new file mode 100644 index 000000000..b8a5227ae --- /dev/null +++ b/docs/samples/img/07.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58c83fac0d94902645893f35bc73ef661e0251639c23f7a0e2b7e8d1f622394c +size 50512 diff --git a/docs/samples/img/07@2x.png b/docs/samples/img/07@2x.png new file mode 100644 index 000000000..e736e1319 --- /dev/null +++ b/docs/samples/img/07@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d6c70e5e1cf37a3df644fd9aaf46130710ea054c28a15fec41ec3361108ff75 +size 139790 diff --git a/docs/samples/img/08.png b/docs/samples/img/08.png new file mode 100644 index 000000000..438c89f23 --- /dev/null +++ b/docs/samples/img/08.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a2a8d4b5f0c5fe88333fa5317073490fd96a03ecb67d0c3131ff0bef665a35 +size 40231 diff --git a/docs/samples/img/08@2x.png b/docs/samples/img/08@2x.png new file mode 100644 index 000000000..951123fcd --- /dev/null +++ b/docs/samples/img/08@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5c96816615fc19ecbe2babe7590f0efd1b167641d11bd3e805ab0fcf1bbacde +size 91580 diff --git a/docs/samples/img/09.png b/docs/samples/img/09.png new file mode 100644 index 000000000..476713188 --- /dev/null +++ b/docs/samples/img/09.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df0f9db99e806f14f4c49e9c6b29b0a9aeabb038cf7bf545c705bdfae9578f89 +size 28212 diff --git a/docs/samples/img/09@2x.png b/docs/samples/img/09@2x.png new file mode 100644 index 000000000..ac781e599 --- /dev/null +++ b/docs/samples/img/09@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10bd0035f50eeddc8cad1c315aa889b8ae15ae2c6f6fc2b361061147a9b3f121 +size 70931 diff --git a/docs/samples/img/10.png b/docs/samples/img/10.png new file mode 100644 index 000000000..2c9bada2e --- /dev/null +++ b/docs/samples/img/10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37b6a3a793e1f1d4d8ed4fcf54406381181e7a97053fb34a1003f16d14990295 +size 24577 diff --git a/docs/samples/img/10@2x.png b/docs/samples/img/10@2x.png new file mode 100644 index 000000000..9e5a02b96 --- /dev/null +++ b/docs/samples/img/10@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b18f6fe2371a0ae6c8d068a7840f72f9ef954c31538ecd3a9c996f1da7a200bb +size 53092 diff --git a/docs/samples/img/11.png b/docs/samples/img/11.png new file mode 100644 index 000000000..fcf2a9712 --- /dev/null +++ b/docs/samples/img/11.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9738772234ed933a462c275bbea3d9355d203c70e4bdf1539834c9e058d7afb +size 15149 diff --git a/docs/samples/img/11@2x.png b/docs/samples/img/11@2x.png new file mode 100644 index 000000000..9532fe148 --- /dev/null +++ b/docs/samples/img/11@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af99fe23a8570ad25f886efd0e684b2e29dbe7e1e0b81013f359964547fcdda5 +size 36001 diff --git a/docs/samples/img/12.png b/docs/samples/img/12.png new file mode 100644 index 000000000..2185f1e17 --- /dev/null +++ b/docs/samples/img/12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fddf2e51422d8a58e6fbbf1d514a20e043b15dd38199e98587f7bed43001b8a +size 31889 diff --git a/docs/samples/img/12@2x.png b/docs/samples/img/12@2x.png new file mode 100644 index 000000000..a4aa3b762 --- /dev/null +++ b/docs/samples/img/12@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b907aa73972d76c132925790a7bd1b5ebe0e00e4663e56109755428196adc471 +size 72253 diff --git a/docs/samples/img/13.png b/docs/samples/img/13.png new file mode 100644 index 000000000..e0d4befc3 --- /dev/null +++ b/docs/samples/img/13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb24c92b12ea9ff1ec8028f7e9a02634f7a65860548e04879e9386f79850cf5 +size 21776 diff --git a/docs/samples/img/13@2x.png b/docs/samples/img/13@2x.png new file mode 100644 index 000000000..b92dd0637 --- /dev/null +++ b/docs/samples/img/13@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47539aceb05eced71480b2bc9e567a7bd04c00ec38294c00fbdede008967af4a +size 53729 diff --git a/docs/samples/img/14.png b/docs/samples/img/14.png new file mode 100644 index 000000000..5cc7ef8bf --- /dev/null +++ b/docs/samples/img/14.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1e53d9507d1e7ec6678153013cd1ebfa06afc11f2c1e57600090b176ecf1dcc +size 7943 diff --git a/docs/samples/img/14@2x.png b/docs/samples/img/14@2x.png new file mode 100644 index 000000000..3bd84b258 --- /dev/null +++ b/docs/samples/img/14@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06ffaf95306d0c0a49fd5ce185b6694d9d5fa6bfa9ac7945c93be0de4021b886 +size 22064 diff --git a/docs/samples/img/15.png b/docs/samples/img/15.png new file mode 100644 index 000000000..973bd429c --- /dev/null +++ b/docs/samples/img/15.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8f3075b8dc9acc3c4a488453ac1a7be08d5d58f82efc9a807f70cee36697246 +size 30864 diff --git a/docs/samples/img/15@2x.png b/docs/samples/img/15@2x.png new file mode 100644 index 000000000..d7d20c5be --- /dev/null +++ b/docs/samples/img/15@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3307edf8f2865ba13e03012318feaea314192d1ef30b0ee3d8519785e2548e0e +size 78117 diff --git a/docs/samples/img/a-z-regular.svg b/docs/samples/img/a-z-regular.svg new file mode 100755 index 000000000..6acce2ba3 --- /dev/null +++ b/docs/samples/img/a-z-regular.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/samples/img/dark-phone.jpg b/docs/samples/img/dark-phone.jpg new file mode 100755 index 000000000..4581e4fd1 Binary files /dev/null and b/docs/samples/img/dark-phone.jpg differ diff --git a/docs/samples/img/dark-phone@2x.jpg b/docs/samples/img/dark-phone@2x.jpg new file mode 100755 index 000000000..f46fdc743 Binary files /dev/null and b/docs/samples/img/dark-phone@2x.jpg differ diff --git a/docs/samples/img/framed-poster-black.png b/docs/samples/img/framed-poster-black.png new file mode 100644 index 000000000..e11298619 --- /dev/null +++ b/docs/samples/img/framed-poster-black.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e2b3ac5a7841751d917a5f86a9d48914dd65ae7ab8da96a984065b01330634c +size 428087 diff --git a/docs/samples/img/framed-poster-black@2x.png b/docs/samples/img/framed-poster-black@2x.png new file mode 100644 index 000000000..b6317b323 --- /dev/null +++ b/docs/samples/img/framed-poster-black@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a0e29ffd6a49269afbef96f53b9af5b3a95377541f1bd305bad4445d58e8b9b +size 1707119 diff --git a/docs/samples/img/framed-poster-bold.png b/docs/samples/img/framed-poster-bold.png new file mode 100644 index 000000000..af7bf7f09 --- /dev/null +++ b/docs/samples/img/framed-poster-bold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7faaa4f8e3944eeeefa5b9320a38ba2f95a729fabced28fe07d55ba9f3f53 +size 450273 diff --git a/docs/samples/img/framed-poster-bold@2x.png b/docs/samples/img/framed-poster-bold@2x.png new file mode 100644 index 000000000..d43209a26 --- /dev/null +++ b/docs/samples/img/framed-poster-bold@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fcaa90d235fc9db3622c283200a924a564790046c3c5644982599584c8966a1 +size 1769756 diff --git a/docs/samples/img/framed-poster-extra-bold-2.png b/docs/samples/img/framed-poster-extra-bold-2.png new file mode 100644 index 000000000..fb223c5ed --- /dev/null +++ b/docs/samples/img/framed-poster-extra-bold-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:055f2752f7f430e85bf0ec680bbe75eeccd53eed242c13ee38bb3725e53d0145 +size 483429 diff --git a/docs/samples/img/framed-poster-extra-bold-2@2x.png b/docs/samples/img/framed-poster-extra-bold-2@2x.png new file mode 100644 index 000000000..c02b5c7ab --- /dev/null +++ b/docs/samples/img/framed-poster-extra-bold-2@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3e04c5677824e1324b4b6d1c60395b201a2f01495da40eb56deffad07ccdd20 +size 1982056 diff --git a/docs/samples/img/framed-poster-extra-bold.png b/docs/samples/img/framed-poster-extra-bold.png new file mode 100644 index 000000000..3b32089ee --- /dev/null +++ b/docs/samples/img/framed-poster-extra-bold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e277d38d5287e83dd8cbc507d7fff71f210561dba37dfa354f7e145aa1bcf0b2 +size 521499 diff --git a/docs/samples/img/framed-poster-extra-bold@2x.png b/docs/samples/img/framed-poster-extra-bold@2x.png new file mode 100644 index 000000000..ed4e648ee --- /dev/null +++ b/docs/samples/img/framed-poster-extra-bold@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80b2081057c24f08ba366c54e8ddcf908d3163a62ccf20a2800c79c71535efeb +size 2101146 diff --git a/docs/samples/img/framed-poster-medium.png b/docs/samples/img/framed-poster-medium.png new file mode 100644 index 000000000..5ec8c454f --- /dev/null +++ b/docs/samples/img/framed-poster-medium.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25bad53e53d0855e15021fcb2299eaf0d96ea2e5f22600f9a6af4a7fe8d74933 +size 437733 diff --git a/docs/samples/img/framed-poster-medium@2x.png b/docs/samples/img/framed-poster-medium@2x.png new file mode 100644 index 000000000..7c7b7ea30 --- /dev/null +++ b/docs/samples/img/framed-poster-medium@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7863852e75702bd7ffae67cf2eff553f9c037d4b416360daa3bde80623ad982 +size 1711489 diff --git a/docs/samples/img/framed-poster-melvetica.png b/docs/samples/img/framed-poster-melvetica.png new file mode 100644 index 000000000..7f8a20e26 --- /dev/null +++ b/docs/samples/img/framed-poster-melvetica.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a96195477be00ed2d234f20a931d5cfb14a37d9195401ce1be327f908b7a4dc +size 433217 diff --git a/docs/samples/img/framed-poster-melvetica@2x.png b/docs/samples/img/framed-poster-melvetica@2x.png new file mode 100644 index 000000000..3f53d64b9 --- /dev/null +++ b/docs/samples/img/framed-poster-melvetica@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5374f0cebb523dcce7396a5d55e83fb1e3b9405b4a52c67e28be246aa9ead8d6 +size 1759619 diff --git a/docs/samples/img/framed-poster-regular.png b/docs/samples/img/framed-poster-regular.png new file mode 100644 index 000000000..81266819c --- /dev/null +++ b/docs/samples/img/framed-poster-regular.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:069b858a623060531c14670b9df89d0e69e992405155e8b24133e68286d6cf1e +size 520002 diff --git a/docs/samples/img/framed-poster-regular@2x.png b/docs/samples/img/framed-poster-regular@2x.png new file mode 100644 index 000000000..ab10b5fcd --- /dev/null +++ b/docs/samples/img/framed-poster-regular@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd1d140ec4504b475fa154131b6d1d12c3e9845ef660845d5f7f7dac68d9350f +size 2050859 diff --git a/docs/samples/img/framed-poster-semi-bold-2.png b/docs/samples/img/framed-poster-semi-bold-2.png new file mode 100644 index 000000000..67900e27a --- /dev/null +++ b/docs/samples/img/framed-poster-semi-bold-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f23ab63eb41418d954805178e375dd1dc332d6ba5a1952cf358c86435ac563b +size 433501 diff --git a/docs/samples/img/framed-poster-semi-bold-2@2x.png b/docs/samples/img/framed-poster-semi-bold-2@2x.png new file mode 100644 index 000000000..731cc6af2 --- /dev/null +++ b/docs/samples/img/framed-poster-semi-bold-2@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c092bd31a9566e8f2692354a2980af4b0a27fdcb2d627df3a679b53e6b2fea61 +size 1714463 diff --git a/docs/samples/img/framed-poster-semi-bold.png b/docs/samples/img/framed-poster-semi-bold.png new file mode 100644 index 000000000..8e2020fa0 --- /dev/null +++ b/docs/samples/img/framed-poster-semi-bold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f151bb0f47c970d41767e4e0b32e5806f9d33622bfab2256559956a9321dc24 +size 511201 diff --git a/docs/samples/img/framed-poster-semi-bold@2x.png b/docs/samples/img/framed-poster-semi-bold@2x.png new file mode 100644 index 000000000..b4f1ef019 --- /dev/null +++ b/docs/samples/img/framed-poster-semi-bold@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5c5cc55510c869905ed09959fdc3333d896562a9462818875fd1bd33a78ccf8 +size 2016373 diff --git a/docs/samples/img/lineup-bold-black.svg b/docs/samples/img/lineup-bold-black.svg new file mode 100755 index 000000000..622c56a66 --- /dev/null +++ b/docs/samples/img/lineup-bold-black.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/samples/img/lineup-bold-red.svg b/docs/samples/img/lineup-bold-red.svg new file mode 100755 index 000000000..ac1a1b645 --- /dev/null +++ b/docs/samples/img/lineup-bold-red.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/samples/img/raster-posters.jpg b/docs/samples/img/raster-posters.jpg new file mode 100644 index 000000000..89f363e63 Binary files /dev/null and b/docs/samples/img/raster-posters.jpg differ diff --git a/docs/samples/img/raster-posters@2x.jpg b/docs/samples/img/raster-posters@2x.jpg new file mode 100644 index 000000000..e33326bc9 Binary files /dev/null and b/docs/samples/img/raster-posters@2x.jpg differ diff --git a/docs/samples/img/regular-text.png b/docs/samples/img/regular-text.png new file mode 100644 index 000000000..6b8865b36 --- /dev/null +++ b/docs/samples/img/regular-text.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b451302eabbc3b6f86f9f5dbd508b9e5c24249f564b698dfba9e1c56103cf1e9 +size 65933 diff --git a/docs/samples/img/regular-text@2x.png b/docs/samples/img/regular-text@2x.png new file mode 100644 index 000000000..9c1765bfe --- /dev/null +++ b/docs/samples/img/regular-text@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:726786ee67871ea012d92b51c5d3560a7fb83ee6cb157cae6698cb4c3ea210bf +size 165236 diff --git a/docs/samples/img/sfs-pid-30.png b/docs/samples/img/sfs-pid-30.png new file mode 100644 index 000000000..989afe93d --- /dev/null +++ b/docs/samples/img/sfs-pid-30.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48d4a20a329f2c99ab4a58aede7b2f2b5fae27707837d75c5f40a39c881a0994 +size 693044 diff --git a/docs/samples/img/sfs-pid-30@2x.png b/docs/samples/img/sfs-pid-30@2x.png new file mode 100644 index 000000000..2e95ce155 --- /dev/null +++ b/docs/samples/img/sfs-pid-30@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f15c03c3f6eac633ebe4c5e1a65f6df131f35dc3a719e10e254c43270beb874c +size 2701115 diff --git a/docs/samples/img/subway.svg b/docs/samples/img/subway.svg new file mode 100755 index 000000000..ff14fea39 --- /dev/null +++ b/docs/samples/img/subway.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/samples/img/symbols.svg b/docs/samples/img/symbols.svg new file mode 100755 index 000000000..dfeacb633 --- /dev/null +++ b/docs/samples/img/symbols.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/samples/img/thin-beta.png b/docs/samples/img/thin-beta.png new file mode 100644 index 000000000..52396a507 --- /dev/null +++ b/docs/samples/img/thin-beta.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdde110561e8dc57ed5b133d7b4977cc0df1c10861cf705ca3dab95fc6c6a19c +size 39715 diff --git a/docs/samples/img/thin-beta@2x.png b/docs/samples/img/thin-beta@2x.png new file mode 100644 index 000000000..40cc2736e --- /dev/null +++ b/docs/samples/img/thin-beta@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2905178b820e5e395d00eaad2617f72b8eddbbaa67887da8f3eb77ca072c2605 +size 91589 diff --git a/docs/samples/img/weights-1.svg b/docs/samples/img/weights-1.svg new file mode 100644 index 000000000..defaeac72 --- /dev/null +++ b/docs/samples/img/weights-1.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/samples/index.css b/docs/samples/index.css new file mode 100644 index 000000000..3f4de344c --- /dev/null +++ b/docs/samples/index.css @@ -0,0 +1,254 @@ +body { + padding-bottom: 0; + background: white; +} + +.row.footer h2 { + margin:0; + text-align:center; +} + +.live > hr { + margin: 3rem 0 4rem 0; + background: black; + height: 2px; + border: none; +} + +livesample { + display: block; + color: #111; + outline: none; + margin-top: 1rem; + margin-bottom: 3rem; +} + +/*livesample { + padding-left: 20px; + border-left: 2px solid transparent; + margin-left:-22px; +} +livesample:hover { + border-left-color: rgb(3, 102, 214); +} +livesample:focus { + border-left-color: #eee; +}*/ + +livesample > p { + margin-top: 0; +} +livesample.s1 { + /*padding-left: 16px;*/ + letter-spacing: -0.03em; + font-size: 5em; + font-weight: 700; + line-height: 1.1; + margin-top: 0; + margin-bottom: 0.3em; +} +livesample.s2 { + /*max-width: 400px;*/ + font-size: 1em; + margin-bottom: 1.5rem; +} +livesample.s3 { + font-size: 13px; + letter-spacing: 0.002em; + line-height: 1.38; +} + livesample.s3 b, livesample.s3 strong { + font-weight:500; + color: black; + } + +livesample.col3 { + -moz-column-width: 20em; + -moz-columns: 20em; + -webkit-columns: 20em; + columns: 20em; + + -moz-column-gap: 2em; + -webkit-column-gap: 2em; + column-gap: 2em; +} +livesample.col2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; +} + +div.live { + margin-top:1em; + margin-bottom:100px; + padding-bottom:20px; + border-bottom: 1px solid #ddd; +} + div.live .learn-more { + margin-top:40px; + user-select: none; + } + div.controls { + position: absolute; + right: 0; + top: 150px; + width: 250px; + padding: 10px 0; + /*background:#eee;*/ + opacity:0.3; + transition: 90ms opacity cubic-bezier(0.25, 0.47, 0.44, 0.93); + /*border:1px solid #bbb;*/ + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + border-right:none; + display: flex; + flex-direction: column; + overflow: hidden; + font-size: 13px; + } + div.controls:hover { + opacity:1; + background:#f5f5f5; + border-color: transparent; + } + div.controls .control { + display: flex; + justify-content: space-between; + align-items: center; + overflow: hidden; + min-height: 30px; + margin: 0 16px; + } + div.controls .control > * { + flex: 1 1 auto; + margin:0; + margin-right: 16px; + box-sizing: border-box; + } + div.controls .control > :last-child { + margin-right: 0; + } + div.controls .control > select { + min-width: 6em; + align-items: center; + justify-content: center; + } + div.controls .control > input, + div.controls .control > select { + width: 0; + outline: none; + } + div.controls .control > input[type="number"], + div.controls .control > input[type="text"] { + background: none; + border: none; + padding: 4px 0; + font-size: inherit; + /*border-radius: 2px;*/ + } + div.controls .control > input[type="number"] { + max-width: 48px; + text-align: right; + -moz-font-feature-settings: 'calt' 1, 'zero' 1, 'tnum' 1; + -ms-font-feature-settings: 'calt' 1, 'zero' 1, 'tnum' 1; + -o-font-feature-settings: 'calt' 1, 'zero' 1, 'tnum' 1; + -webkit-font-feature-settings: 'calt' 1, 'zero' 1, 'tnum' 1; + font-feature-settings: 'calt' 1, 'zero' 1, 'tnum' 1; + } + div.controls .control > input[type=number]::-webkit-inner-spin-button, + div.controls .control > input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + div.controls .control > input[type="range"] { + /*max-width: 80%;*/ + flex: 1 1 auto; + display: block; + } + div.controls .control > img.icon, + div.controls .control > label { + font-family: georgia, serif; + font-style: italic; + color: black; + width: 16px; + height: 16px; + flex: 0 0 auto; + margin-right: 16px; + opacity: 0.6; + } + div.controls canvas { + height: 200px; + } + div.controls .control.info, + div.controls canvas { + transition: 390ms opacity cubic-bezier(0.25, 0.47, 0.44, 0.93); + opacity: 0; + } + div.controls:hover .control.info, + div.controls:hover canvas { + opacity: 1; + } + + +/* narrow windows */ +@media only screen and (max-width: 1200px) { + div.controls { + width: 210px; + font-size: 12px; + } +} +@media only screen and (max-width: 1024px) { + div.controls { + width: 140px; + font-size: 11px; + } + div.controls canvas { + display: none; + } + div.controls .control.info { + margin-top: 0.5em; + margin-bottom: 0.5em; + } + div.controls .control > input[type="range"] { + width: 0; + flex: 0 1 0%; + display: none; + } + div.controls .control > input[type="number"] { + max-width: 100%; + flex: 1 1 auto; + } +} +@media only screen and (max-width: 740px) { + livesample.s1 { + font-size:4.5em; + } + div.controls { + display: none; + } +} +@media only screen and (max-width: 565px) { + livesample.s1 { + font-size:4em; + } +} +@media only screen and (max-width: 414px) { + livesample.s1 { + font-size:3.4em; + } +} + +.sample-images img, .sample-images svg { + margin: 100px auto; +} +.sample-images .poster { + border-radius: 1px; + box-shadow: 0px 1px 25px rgba(0,0,0,0.05); + filter: drop-shadow(0px 1px 1px rgba(0,0,0,0.1)); +} +.sample-images img.im640, .sample-images svg.im640 { + width:640px; +} +.sample-images > img:first-child, .sample-images > svg:first-child { + margin-top:50px; +} diff --git a/docs/samples/index.html b/docs/samples/index.html new file mode 100644 index 000000000..7a4ced920 --- /dev/null +++ b/docs/samples/index.html @@ -0,0 +1,195 @@ +--- +layout: default +title: Samples +--- +{% + +if site.safe == false %}{% +assign url_root = "/" %}{% else %}{% +assign url_root = "/inter/" %}{% endif %}{% + +for file in site.static_files %}{% + assign _path = file.path | remove_first: "/inter" %}{% + if _path == "/samples/index.css" %}{% + assign index_css_v = file.modified_time | date: "%Y%m%d%H%M%S" %}{% + elsif _path == "/res/bindings.js" %}{% + assign bindings_js_v = file.modified_time | date: "%Y%m%d%H%M%S" %}{% + elsif _path == "/res/graphplot.js" %}{% + assign graphplot_js_v = file.modified_time | date: "%Y%m%d%H%M%S" %}{% + endif %}{% +endfor + +%} + + + +{% include ctxedit.html %} + +
+
+ + + Martian™
Language Systems Inc. +
+ + + Interfacing mechanisms are periodically sequencing state + + + + XP–45 SERVICE + + + + Default forms G a r l ß 1234567890 + + + + Alternate forms G a r l ß 1234567890 + + + + Melvetica + + + + Production filaments are awaiting 340-type transportation
in docking bay 6–B +
+ +
+ + + Fabulous typography encountering spring + + + + The user interface (UI), in the industrial design field of
+ human-computer interaction, is the space where
+ interactions between humans and machines occur. +
+ + +

Fire Island Beach is a barrier of sand, stretching for twenty miles +along the south coast of Long Island, and separating the Great South Bay +from the Atlantic ocean. +

+To reach it, you must make a sail of from three to seven miles, and once +upon it, you find it a wild, desolate, solitary spot, wind-searched and +surf-pounded. +

+Its inner shore is covered with a growth of tide-wet sedge, with here +and there a spot where dry meadow comes down to make a landing-place. +

+The outline of this inner shore is most irregular, curving and bending +in and out and back upon itself, making coves and points and creeks and +channels, and often pushing out in flats with not water enough on them +at low tide to wet your ankles. +

+A third of the distance across the Beach, the meadow ends and sand +begins. This slopes gradually up for another third of the distance, to +the foot of the sand hills, which seem tumbled into their places by some +mighty power, sometimes three tiers of them deep, sometimes two, and +sometimes only one. +

+These sand hills are the most striking features of the Beach. The +biggest of them are not more than sixty feet high, yet so hard a feat is +it to climb to the top, and so extended is the view below you—on one +side the wide Bay, on the other, the ocean stretching its restless +surface to the horizon—that you feel yourself upon an elevation tenfold +as high. +

+Through these hills the wind makes a great galloping, whirling out deep +bowl-shape hollows among them, and piling the shifting sand upon their +summits. Now and then you will notice a hill with its shoulder knocked +off by the wind, and a ton of sand gone no one can tell where. In every +storm their contour changes, and yet their general formation is so +similar at all times that the change is seldom thought of. A coarse +spear-like grass finds a sparse growth upon them, and does what it can +to hold the sand in place; but it has a hard time of it, as its blades +buried to their tips or its naked roots often testify. +

+But there is one part of this Beach that is ever much the same. It is a +broad, shelving strip of sand between the hills and the sea, where the +tide rises and falls, pounding and grinding, year in and year out—the +play-ground and the battle-ground of the surf. +

+On a summer’s day, I have seen this surf so low and quiet that one could +launch a sharpie upon it, single-handed, and come ashore again without +shipping a quart of water. At other times it is a terror to look at—a +steady break of waves upon the outer bar, with row after row coming in, +rearing and plunging as they strike the shore. In such a sea there is no +launching yawl or surf-boat, and no coming ashore. +

+When the tide is on the right moon and the wind has blown a gale from +the southeast, the strand is entirely submerged, and people upon the +main shore three miles away can see the surf breaking over the Beach +hills. +

+
+

+ Learn about Dynamic Metrics +

+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

+ Open these samples in Figma +

+
+ +