From 5ddc0e237cd8e737571a4d2103cee795862930e3 Mon Sep 17 00:00:00 2001 From: early Date: Sat, 4 Jan 2025 20:46:34 -0700 Subject: [PATCH] start work on landing page --- landing-page/ca/bloc/correu.html | 15 --- landing-page/ca/bloc/index.html | 15 --- landing-page/ca/index.html | 134 ++++++++++++++++++- landing-page/en/blog/index.html | 15 --- landing-page/en/blog/post.go | 5 - landing-page/en/blog/post.html | 15 --- landing-page/en/index.html | 134 ++++++++++++++++++- landing-page/images/favicon.png | Bin 0 -> 17788 bytes landing-page/images/flags/catalunya.png | Bin 0 -> 6431 bytes landing-page/images/flags/usa.png | Bin 0 -> 15259 bytes landing-page/main.go | 4 +- landing-page/style.css | 166 ++++++++++++++++++++++++ landing-page/style/code.css | 27 ++++ landing-page/style/hljs.css | 102 +++++++++++++++ landing-page/style/nav.css | 57 ++++++++ 15 files changed, 616 insertions(+), 73 deletions(-) delete mode 100644 landing-page/ca/bloc/correu.html delete mode 100644 landing-page/ca/bloc/index.html delete mode 100644 landing-page/en/blog/index.html delete mode 100644 landing-page/en/blog/post.go delete mode 100644 landing-page/en/blog/post.html create mode 100644 landing-page/images/favicon.png create mode 100644 landing-page/images/flags/catalunya.png create mode 100644 landing-page/images/flags/usa.png create mode 100644 landing-page/style.css create mode 100644 landing-page/style/code.css create mode 100644 landing-page/style/hljs.css create mode 100644 landing-page/style/nav.css diff --git a/landing-page/ca/bloc/correu.html b/landing-page/ca/bloc/correu.html deleted file mode 100644 index 9b73126..0000000 --- a/landing-page/ca/bloc/correu.html +++ /dev/null @@ -1,15 +0,0 @@ - - - Today Web Framework - - -
-

Today

-
-
-

Un correu del bloc

-
- - \ No newline at end of file diff --git a/landing-page/ca/bloc/index.html b/landing-page/ca/bloc/index.html deleted file mode 100644 index 8752380..0000000 --- a/landing-page/ca/bloc/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - Today Web Framework - - -
-

Today

-
-
-

Bloc de desenvolupador

-
- - \ No newline at end of file diff --git a/landing-page/ca/index.html b/landing-page/ca/index.html index 166cae4..43fabcc 100644 --- a/landing-page/ca/index.html +++ b/landing-page/ca/index.html @@ -1,15 +1,143 @@ + Today Web Framework + +
-

Today

+

Today

+
-

Aquest és la pagina principal per Today, un marc del lloc web.

+
+

Fas un lloc web avui

+

«Today» posa fàcil a crear, millorar, i servir el vostre + lloc web. Crea les pàgines web amb HTML i CSS, i afeigeix + contingut dinàmic amb Go. +

+
+
+
+

Capacitats

+

El estàndard web és capaç, documentat, i recolzat. L'objectiu + primer de «Today» és construir sobre aquell estàndard amb capacitats + que estan fàcil per utilitzar, i no reinventen el web o el teu + lloc web. +

+

Construeix iterativament

+

You can start a Today project with your pre-existing static + website and build on it as you go. Today "pages" replace the + static files they use, and you can load data with Go and display + that data with a template HTML file. +

+

Server-side components

+

If you're reusing behavior often, you can make a Today + "template part". These parts have their own behavior and + templates, and are used like custom HTML elements. They can + be safely reused and even shared across projects! +

+

Localization

+

Today is built to support multi-language webpages. Both pages and + parts can be made with templates in many languages, and when + being served, the page will be composed with the closest-matched + languages for each. +

+
+
+
+

Why?

+

There's only one real reason for Today to exist; so that you can + make a website today. That's the namesake, that's what it's + always going to be about. Today is designed to be a web + framework for beginner-to-intermediate devs building + fundamentals, and to give easy-ish answers to a lot of the + hard-ish questions about creating websites. A monumental amount + of work has been put into making the independent web + more capable through great frameworks like React; I + want to focus on making it more accessible. The hope + is that helping devs build fundamentals can onboard to more + complex tech with fewer headaches. +

+
+
+
+

Project Status

+

Today is a work in progress and is fairly early in development. + It will be ready when it is ready; I am navigating an + international move and have a day job, so working on this is a + "when it happens" event. Having said that, there is a clear + road to a finished project. Here's what's upcoming/planned for + me to be comfortable with a v0 release: +

+

Done

+
    +
  • Dynamic pages with templates and Go data loading.
  • +
  • Custom elements, rendered server-side.
  • +
  • Good localization support.
  • +
+

Work in Progress

+
    +
  • Custom template parser. Right now, Today is bending Go's + standard HTML parser into a shape that sort of works. I'm + working on a custom parser that should make maintenance and + feature development much smoother! +
  • +
  • SQLite support. Most non-trivial websites need a database. + Most websites don't need more than SQLite. I want a quick + and easy option for people to use, particularly one that is + easy to transition away from when they need to. +
  • +
  • New user documentation.
  • +
+

Planned

+
    +
  • Concurrent processing of component OnLoad functions. A + common criticism of Go templates is that they are slow for + nontrivial uses, because they are processed sequentially. I + think I can fix that, at least with the OnLoad of + template parts. +
  • +
  • Maintainer documentation. I need to document a process on + submitting external contributions, and write a lot on how + internals work. +
  • +
  • Transation of documentation to Catalan.
  • +
  • Live projects. A web framework is nothing if you don't make + websites with it! +
  • +
+

Once the "planned" list is empty, I'll release a v0 that should + be safe for testing use. Until then, it's a pet project in R&D. +

+
+ + \ No newline at end of file diff --git a/landing-page/en/blog/index.html b/landing-page/en/blog/index.html deleted file mode 100644 index 566b558..0000000 --- a/landing-page/en/blog/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - Today Web Framework - - -
-

Today

-
-
-

Today Devblog

-
- - \ No newline at end of file diff --git a/landing-page/en/blog/post.go b/landing-page/en/blog/post.go deleted file mode 100644 index 999e2de..0000000 --- a/landing-page/en/blog/post.go +++ /dev/null @@ -1,5 +0,0 @@ -package blog - -import "git.earlybird.gay/today/web/page" - -var Post = page.New("Post", "post.html") diff --git a/landing-page/en/blog/post.html b/landing-page/en/blog/post.html deleted file mode 100644 index e04f15d..0000000 --- a/landing-page/en/blog/post.html +++ /dev/null @@ -1,15 +0,0 @@ - - - Today Web Framework - - -
-

Today

-
-
-

A blog post

-
- - \ No newline at end of file diff --git a/landing-page/en/index.html b/landing-page/en/index.html index 49094eb..532ad7e 100644 --- a/landing-page/en/index.html +++ b/landing-page/en/index.html @@ -1,15 +1,143 @@ + Today Web Framework + +
-

Today

+

Today

+
-

This is a landing page for the Today web framework.

+
+

Make a website today

+

Today makes creating, improving, and hosting your website + simple. Build webpages with HTML and CSS, and add dynamic + content where you want it with Go. +

+
+
+
+

Features

+

The web standard is capable, well-documented, and widely + supported. The core design goal of Today is to build on this + standard with helpful, easy-to-use features that don't reinvent + the web or your website. +

+

Build iteratively

+

You can start a Today project with your pre-existing static + website and build on it as you go. Today "pages" replace the + static files they use, and you can load data with Go and display + that data with a template HTML file. +

+

Server-side components

+

If you're reusing behavior often, you can make a Today + "template part". These parts have their own behavior and + templates, and are used like custom HTML elements. They can + be safely reused and even shared across projects! +

+

Localization

+

Today is built to support multi-language webpages. Both pages and + parts can be made with templates in many languages, and when + being served, the page will be composed with the closest-matched + languages for each. +

+
+
+
+

Why?

+

There's only one real reason for Today to exist; so that you can + make a website today. That's the namesake, that's what it's + always going to be about. Today is designed to be a web + framework for beginner-to-intermediate devs building + fundamentals, and to give easy-ish answers to a lot of the + hard-ish questions about creating websites. A monumental amount + of work has been put into making the independent web + more capable through great frameworks like React; I + want to focus on making it more accessible. The hope + is that helping devs build fundamentals can onboard to more + complex tech with fewer headaches. +

+
+
+
+

Project Status

+

Today is a work in progress and is fairly early in development. + It will be ready when it is ready; I am navigating an + international move and have a day job, so working on this is a + "when it happens" event. Having said that, there is a clear + road to a finished project. Here's what's upcoming/planned for + me to be comfortable with a v0 release: +

+

Done

+
    +
  • Dynamic pages with templates and Go data loading.
  • +
  • Custom elements, rendered server-side.
  • +
  • Good localization support.
  • +
+

Work in Progress

+
    +
  • Custom template parser. Right now, Today is bending Go's + standard HTML parser into a shape that sort of works. I'm + working on a custom parser that should make maintenance and + feature development much smoother! +
  • +
  • SQLite support. Most non-trivial websites need a database. + Most websites don't need more than SQLite. I want a quick + and easy option for people to use, particularly one that is + easy to transition away from when they need to. +
  • +
  • New user documentation.
  • +
+

Planned

+
    +
  • Concurrent processing of component OnLoad functions. A + common criticism of Go templates is that they are slow for + nontrivial uses, because they are processed sequentially. I + think I can fix that, at least with the OnLoad of + template parts. +
  • +
  • Maintainer documentation. I need to document a process on + submitting external contributions, and write a lot on how + internals work. +
  • +
  • Transation of documentation to Catalan.
  • +
  • Live projects. A web framework is nothing if you don't make + websites with it! +
  • +
+

Once the "planned" list is empty, I'll release a v0 that should + be safe for testing use. Until then, it's a pet project in R&D. +

+
+ + \ No newline at end of file diff --git a/landing-page/images/favicon.png b/landing-page/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..228da2d8bd33b6d0459f2c847467c33461391b89 GIT binary patch literal 17788 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 A(f|Me literal 0 HcmV?d00001 diff --git a/landing-page/images/flags/catalunya.png b/landing-page/images/flags/catalunya.png new file mode 100644 index 0000000000000000000000000000000000000000..c8429dcba5dc52b040379aa1f685e06c85ce1292 GIT binary patch literal 6431 zcmeHM`(Kk)96s;dbk0yn1Y3YeC^I6-K=1-gI?ynGNaHWX!u$)HF~E{Z}* ziW3wx{QxH9D{3q&mJT6@3MA0j#F%oQ0fWgpp5x^YD63Cxzr64Fy?oC(&+~jQ=iMG| zfR7P_$p8QtaeO^j0ziSM6hI#j508YmM&NC2!K(@y)qpcTJk2?x?cH+`2O+-MUkr8Lz%BniRf7aQo=C zpi^^>JDbSYF>RBN)MiwVE2MX`cN8QA7PQo-Et{E8H?;USjiqZ~??>015>2exB0x~6 zbYsJb0R)2*{_9cD6|9ITS-og93%mh>%fcWNE7{rE{fm$+E_g+Wr_b5kD(9dAc;_*x|a@(L)ODG;%>~camyY z#=Jm=5W=XIuDdF-s>c7)Y?NVy-qfB93x0-buvBy8?(a1H)+^!J$vcM2KJESbiHE*g zdTsqx?O{^W$UFuvFYFn(5_fi$`}VA^R6M{dDF^!79;$@;jAMJMD{Gbw--t7h33JJc zv_}5v@bw?G&16F(bBa=%JfyL~xoym@Tob8c(iDZ6Q!&5#r&lC(6H(qv$)%Z!a?KS3 zc(q0ZEy8G9qb+*fei94V&y{qbCnZb@L&AJe%0Z}wm~lbKT9FKSO>w5qj|qFE3Db=J zdeQ01?;3OW`qOnYk&i_t!#69lOCGvd_1xq6%~ehnolLE>L$}f>40gNRb2c*k;4}<( z{xk+(=GFQn)cNa&Rpvb9b;MN?%hBTuZ><|mq1xK;*u(N0^4WEPQ^6{SvVs#1gI zqK*^_K@&%CY_L%wqUFt;#49MjF`Dowdgo8FJ{DcWW^!++1rhFnx>TiHvwST2jOk-P!0wEknHVy{91|hCuz`^f|(&0s`gmWzGR)P$5v( z#X%S-FE+8M`QQ-@6iW=K?_}Z(>;Qq172m@^ErCF#N0}m^Hkoh%Z~iPhWY8h!OI8$N z&i6vjzn-%IbIxTG^mR-x#5oUgp67oJbDjzv8#k~p=Qd(cv3Yp_=G>GEQV)4!&dng_ z|Kw66#j`pu%1Rp2zQ_)Jo{j`PJ!+@chh%>~MbKZVQrmkZ-a7s!Qh(P;$&WFr@L+yI zOO+ueUP^f5nCQH(Rrgk3B!9G@?vKQkH?g+6;e^uin%RAQt$}$)P3_IjG{vJ$`2{T=O*1q7aBeM`dg$0H zhq>XzzccmzJzD-N3u03R)oo|{hN^+?qCE0hi)1mTfi2Ru7GWSk?wI$n`jY+uHy5=k zgDVw%^+iBeX$Xs#)bQc3fLphKM*hwhrDD)WVh2Xg$0RIAm1E3a42C!2-DMK&eY)D^ zt@BX)aDi?z-ekJLresi{jy;T8Cl=T>0rfht1wI=Dth$e%55=8XYc zYvqL#JDCIaswv^R3K!jLXrjUZsylP&oJOzIFF3aqe=|VXp(Uc(8a_fI%+b~nwb2HA j43hXyNFpURC3##}QTmM)MJ4OtKOTVN72sLAG$Qp6JdY{A literal 0 HcmV?d00001 diff --git a/landing-page/images/flags/usa.png b/landing-page/images/flags/usa.png new file mode 100644 index 0000000000000000000000000000000000000000..cba8fcb38b30917a6b6fad80676fbef6530de976 GIT binary patch literal 15259 zcmeIZWmuG7)HgbWfG8y*A}OhWAkvLNcQ>e%v~)8dq5{$-jdV$O%zz>(Al)I|Il}9nuWcdjMVgf0?c&g)Vwl`0hPBlJ%cm#F7V=$wYB|n8+DL%jFsAss$EP}(;9^wxgIcCt5YsHv+)F7af7ZGt=qo7^QxFK3NaT)z z<1x6ypW#W?UQ|CPKk_kN5Kn;~;}`X`C-&V0Sbz0I|7Ef54Eae4tsLbKVo+*ISD>R* z(<_10C;vA2)NZ65&9ENN=pMj%&2))uP0|jX91m7FyBz`S!9-4jBT2n2%6E9Xi#}+g zATeTqqil)gttIh`zuq95E*Q_+Sp39LZ%}GNIMn49!%HIyxu%Ju9&)Uv+`#o!8*{VB ze)yTP3bHT%4C_OJuZZvioo=##ik?QZVD7>c)EK%`u~3)YOsBNhDu0D^lDv&we}5tr3(S!O5uO_=4;{_{@l3emwcos ze(>S759K|{vBo!kRDAk)?=4|F-mR9ujAn|l#l;7uOyt%QVlPDokPImCkI&?MUOCGl|X`s9ONzYn);tgsAek_2=>_fmFSeSaxl#642t|w*qV@%PZjEk zBbXMnRQ|&--DuVD%dlBdPSudje6TM$rw!R=OaBi!K9e?xWF;C)?~7e5G=Uod*Jo zwJsy+9$||mXlsj^P6Z!r8hp<1c8dD~u>0EU@ZzL2tav%ce~`{XM=0cb3_0o(j04@$ z>8A5eU(G59e#Pk+Js61HkWT0IL;PeR|Gl*S4!yVf!Q3-B-B(aqXsZ&uqqtfn42_+X zHf2SUb*``$bF?pJ&MTHnRg{kPmUtSZDFs$p4hZ>dj;B0%y?i{C&bpH#vmTyB{|G8x zSff*6)MOb?ibRzCyyiO8KWe$W>+#X?NLg?~GURqYPsI~S*Ba2WbXDlcvx&C0D?o((~7#wdTJvnsz8 zpCuqLn>t?F^Kd@3H-)1%=7|5qYBs8kLHUMFgI<%z>Ojk&5O@l2c-*2T|#s9Qauv0s%*?U-wtEmWEamNW~uX2d5yd-@Vq|IAQp zbw`44*piP^LBSbp_^vEAw_2>Wh=Wn$u|m||RFD33-%BKdERG@L9#Tx|Q;4spQ+km_ z%eqGZRbe;yO_Vd(QqsJe(B-!b<)=2E$&_{0_F($Wt-()Om!bqX_)nf^Kf?!I%puQ>k%~3xMz(Mx<}7JAWm{jA z(MUJV(A?Y*LUHA#U#egU+YhH5UXpF&Ngo5Z3Z!D=&)ui{GCKblAqGrgA{^ zK)g85fmQj%sGnG2#~kHzWL}2)n12yqu2YmfXP|b84)}oo?DkO4qq~PiD3)=j# zYFm1rF?&1(1ruGj^ao|*p?y<^(L(WNPq!Usit-lI z$9pdvk?{lGptgC2#JmvHy|m#2p;4cJ**-q{OUYZ+hS4EDByF1p#k!-jjU*Lo<}Ulg z6YtC`tg0Dti8`M%<>G(y~$hH^!+%)4hAB8KiQK&$zQ;ADM587-wxLBx- z$Q$ZW-%8qH-bpwfn{6c-Ao8MCB*bGFZw`(q)9%wgSoZcI;mKD4Pc?ZVOol-$y8?M$ z_QOG)vSP@*q?};Tb-=lb=rHA8ac+KcPTu;w@&hWn4~cXlX@f=g3vIWO7p5qBepllG zD_^7*s`<)dA`2;1&n8Ib0Mw`=7Q?-}`giqNlhexZeMIiU{2_9?fLeOKyYB0xZzaHi z7xEYm%!YI+c^XslA1O`s2GIU!lPqs2hr^YVixorO&fe`jD01m>be{&VMuKqB_&EsX zTBv7&Z^Gm>T1j&1M>1SukbUz$*J8_ND}pC}C*HZb*=Dk2eRuk-qk3oDh5rMy;Vh}s zq)@Y3;6>HZn!aLu>d}{bGj)vTEK9oCT`TJ0Dw*3J2n|I4Cg|m8y`-9X@W?fr?`ml( z^d^IL`jvunLQaDAe47{e^$U@_-=M_x`#gI)?T}fM%?0n==s<_J3)kW(|Ikq4?JyBP zW4ac+{X;rT6%;cZ4H9ygPJGso57{B8xo14p>p^cq%YHH%4bE0(0q)#vl7 zP?L1F$V(%KyzGOc$~h6!p#|nicapP|h&hvvawF*TfB(iXmoet|*mmES20iXtDp~3ic$PmeFsfYu z?2OFv+Uc$yG>{ckMS4EZVZ59h9u{ZgP32m?f&{p;5}*^U%A6(Bz50m^A@!AIrhS)Y z-R~vNwr@7g;8WD^vnCkcr6rePn!rtbUWAg-UJolyG8Pn9uRiuI@STc2okV<-S24IB zKd_0a_kpuc{@}K`q31-?2Ja$shS3DIX}yTy$S`_R z;xbeM(IKIkTf{+Mcg4&9(kZctCHuy?cZ!nN<*&=mM0i@(BcW*LoP}o;8No-1u{SIu zQm$74fi+Gy_fk<@u#tw(CDg=aQKSlfv6KJ2Ss|mWWVk!$1JMhGrEd)jaZPR;7sas) z)wF9HGSKdXDXC8ePQwxZO#*vLQ5{A|%Yq>B2(P;#;~ zS}#hvq&R({rm5C8$*~}?oNc^RR|wT;JaK0?;kw&I*n;3&NsHH;Ogez$EhE{Sq%l@@&MbL6eY#kM5{%v9lN#k6wjwA4s7Sw>{tq~*sS(z z9}I-8@$W&p*Lx2L7}+>H965DM69U~7WwnJ{pz_NI~#O9q<4AW6Qga^FN-Ix z6g?Q3@5*)}`%rP?;ayQ%tJlP4#_{}#S~tz_1G&EK^@KonB`#%BDV^*vn#91313xyo zWe(+gcW>^FKN}SJ8cNdvedgrnTMaLM6+hlF@Sdp8?E@@&uEshuya*Yy= zg*eI`Euz2Qp02VtA6fan@YT45t_j&^7S`}EF8{-{;HtijdyF~Ep5up{KNliRkjk4w zI_2Ih;CtQ#kMNGZE0_I{R9Lap=5;WgsfPY|Ycp{@rOl}CkdQDU(>o{K*ULWXO>T1h z)z`h>r5iUc8sfXZJ$NN~-=SCX{ZrDz?>SGR0QZ=i$cyK#ziT0KsVuA2(K* z?MZqmL-T4He0s~1QgHUqjnz*Ca>xP2Q{PS6v%#Z!$2UCS%`GP=7{yPNeirL^$xPZKW5OUak?gjU zW^GJewj>(_YLCz&M!Gxcnty;fWqhYt@I?763gvM0KFAB~78GVdxqZ`LtIqN~s+9_X zzf;_L`<2D7V%kmO!?&UfM49G{2O$a zN667V);;RIIV`%1>iB1fSks%=%bGxfZzR^6rUDfG|9GZUU6GlGgultO1venDH5oO@p55C-6jtIPO9MRx6oe1dL5@GOns`ILOcH zC8%-zx^vr;)?@A2r0u*l!m7~;@0=w_rWGTn)5Y+*&^vBilBHBTbIF>%y^G)$|BP9# z@5?AcOUI7EKB^{Y~DWRk~DMfXzA>HedEnI3?%X*Bkyi>Nb32)~0Hb zl^&-XxZO%p?by9w*>b)h_3Bh?+E8Z~=}k)*CD;!nTub{dgErubVp|EeLl;?$=O@36k46Vo81t5z_uNz)-?ljEry$h64YJjG? zCQBhZOgI|6;3a22|C~IUoG|x{Zaa^>eb4|7EgM2F-fQVJ&*x@@pBXP23?3nOfxLp- z0^&(6BU&tw!W<+cM@$Yf*w+hyATK|jaBpxP!&=-dSM(5ghpjp$jIyo#gXpk}uank2 z`;vba(9%Afd56?vuW>cZ^l-*@f4a`KI=~n4ZOw)ycZU(BHDTnxvz&rh7rV~sP@5?6 zH=82|iEO$Bs0EJWWkrw@s|Y_DSma4w6z@{$x%Cav<#8Knh4>tcd&7&(ntSfSq~t~D zi@om#=02^6B8AR(5_G{3c|dx7w~973HW4vu|wZH8u!EdVL!?qmIa zY1>H+JDn4uqvfRUlE+J>{HsGlD#WP7M$4d?dPEnms!5xdAo>#w;fFG~+85|9$ZOX>ptf)66K9-zI_Q zQznhz;aOrU#n=k{e2&!cDB|ks1$5l>x8djPEj!u+Pq+@ed$)XaOFqh4UjZ0TFF0et zj3D#(Gobk2th5S%x1DU=5DJHEBQ6RfERkyF(%Blbr91d0BH1CEaggScES_DrHzV>a zlmkCY1)%&Z`uXjV?ngNpvPjEZ8vaT<6zOyg zZ)!BZmLm&}Ov&rr=pco3T#z#&Z%eln*Eh$!QcL<&ZrJ!+cIYoyeN!N;4WXhc2GWwQ zNj_u5i!Bzay@7+D!`sf(zKNg^!~&@8%^;k1vOHZ*#``4IrOJtYDatvHNJ!)>iSsJ- z>?6S+cDh^~GX}-0p!ZscsEuU7l7Pi7?}->)u)Uqw9HPIs}k%9{BGeXLn!odOKy z7a$#wU|ZOKEl}&57bjBK*~EBItSbNJrca*x8%=fh-C*{N5(68xbTM$-<^^t6%9huP z7&_bZq}f%kB54G8ndyncFdu8GyTeak{`%M7ck2qs^m`k(?3u6RWH|%+AwcxgWBRPz zp|OZtWY`vNB2g4?5@0q7zPkS?+Tf~Z`=$pOHcwzlp~p6ZcgpuD+rBB$&SFLF{_Xsza{xg+dlt~GUvE1_wc`5?rH=YqZ~*a8Gd#rV zduqkf9{7Y23#J z1*l!Z1`5xmZ0R~jXScx6uhH)I$=XRaZx(mL_G0b*{2(=&db04Nj+2H{%8WyHyREVP zfz^s+_^||~xgmVg3t@h7vK7|xPE&a!YeKKQDcg8ve8dHh_p&%^GlT3FkO^s|%5)Ke zd~aMCx*a=zG0m+#ExgPiz)@cq`&HM- z3y}+#X)6*H`Ac=oP_f+S%X>tBkFJG5jRL4Ijczn(E9Y!ME6%2ewMwnWM})3jnC_L8 zxHeq}nXm@jp$|oD!6^oLFY3I8Uo`E1-&Z?U71TCm%sJrmDP~A=2e;u_uf#qZc{hcF zga4WXKwsKjGVUqX$e{^3*>)5qkDAXyGRo%SW|8!>bB0VgUSiE&MBvsCNXF8dE;LTa z3>{$7-31|31u}{qsf{n1SLJaFTa|F{9$orgY8?D`)EF@A>aa;g)0<@pmN{T5#CHoQ zrx$*hN^f&{mXox($EaDZa&9#y#)EHV$kUh4C<100lPV)e2m*>>byb$1ZQ^oE({}P3 zj_&rGp>rP6o^L3eXg%^Eq)P57Vxe<#$&M_}_~eI}!v~eCA3Tx$Be~NB-y=nHZH?yz z8~=z~OT27Qn_5L=T*dh$!VfBuRkomm9bwWY#{TLJKYVf`_4YwOi$CMgxj0j@ky48; zoc9@alkT&jgc})Tr5SYtGRhVFf6l*Ic=n(+FT6^40x$Ru>Y)npMl=By_zo5z5Um_$ z79es7!STa|DB)p@$D|~4Ry41hUxHAhq~H5FEz_~?wf91_^}D1^p>YOd-QzOyjwVx% zb6SlYRh7}DPlIN<;P(+09YP3bE{U;L*7s($1Blk-@lO8NE5;AROiKpY+itvKJRN4I zH1rD}rRAM>JdF-k$ox1xPTiIj*sd&*+kK%x0PDZ)8Iv1a68Y1wkDs_Da&0`) z5$K^sVOZLHyR2WpCv*0)Z7d*sMNB0#?c6c_iB|@-oegr6J_?A8V*Td)QO~5s9GOx8 z@7{+2Q$MG-D*d{aS0m83%IN88N@%Lfvn$}+r(~o1V5Y?!@|cV1Lx!BF!%DMii{;>m z>MP;cW1z5mjd`?ey74*tFVBM~E+~vk|M)Wa~*SWV94A*{_K)2%Gb?_4x+Jjc=#>K-B7)vi-AoPkO2dh+<)Z z4h296pe>&5s)#aT<-ar2wsPDsX{{94p_b-gy9V!^b+bI5`Cfbcz~^vpNHvzeTkk zo6mKWr}C6Z{XkF&)1u6OJ89OmT0Ufn9Bk9uhOdgdt)h6740|I~fE@hH7?u%gG;y+Z8scqG!dW5~r0%Xm|66P*)rKeAN|aGOK}m7h+2lk>FC-muW8Mr;pi>M#n~?5$!Z{B^ao}{ZuT=EY#L)a8YMN3-DW2rJ!&P8 z=(*0$C&jGv&knn6B39o?2QX`TBcNr?J8urmzlcFZtzG&!gh}EueZ8Vg9Mq)h%VqjY zY{V9M`8ayA7GSadVuEmahKpZU`^g2pf@I+Pey2?|ZBqN*+QL92_y8G@O%~!J)$vsqv z$V3X41vYc~R zVqVhayP+7uk9w1xt4z?)Tguh!t(j!_R0FATpuk4=>u&M`sd~k_fn5Nc=(vtS+?XmB zc*dVvd$7&xU=^T0-Sgfo zj|AJG&U>Kol@TZJjg^&GfZ6=U7YTluiX;Klt72XHHt39s@nw?_19aljYfgJ-&S7g_ zQkZW&TM<>(Sz~Kj_ZGm+X@nhB9lCYtW_UA<$CJ%WQ`x&11xn1d-Rqy3ifVQz`%AG% zk2q^}q7bqu3YqpOp#M$Z?dmrC^ejZ(i7ojG_GW9Q{#6RggvakmVP)dgEw7EfPhm%Q zW5JbwFj+A*%$XNTJ2!o^t5m<>BgBx;15My_`OW!O$jNd7rX5X9w#^M?nBqI~lr>ab z?EEdt;hy@3=Ei*avA!Pt83Rx}DqtGvDh~$se4qHArE1^eKwB!}g*xrIu7-ULuw2jK zaYf~tvzI@}&5YU^Ghn#8hW$*@GLDGny+oV=OAK(gxO1u^+K zkjq(`Ig3}X7AT;Qg>AFxuWnEEflCE@WBL)}cYg}G?4 zefc7HIzu5xgM5X!E^MN4acoLL8ob79qfnRxM_K=YHFALiYcHW!qL8`Xgg9N9#Xnb* z^mvpj*AxJ~07?rY5FPAAe}TtpN}76niSEe8_-yZmLUyaoAZcohfO3G&(P3R-f@tP_ zTY`_f*};P~4e9J~JAL)F#~a9P$E&o!fU-nacXnx%s!qkWv_Z8N#S;wH8%VBjb@STV zD_q~7Z%!=rplTlHCv01)A^rwzqi4^Y9Tz=hc}qEJ?x=3}cu;#P=jwTqjZ?xipa+Q) ziQwLQTOu)w8KX_BlYcu7L>NHr3Gzr@kfP1CHUm>?`hMx~)Kqw`X1ix^^1Qm)+){3G zXFmQxp7Jj@Fm=Oj#f6W4X~(PEWkmqe+^LO0IiRSEUr|YJm+GE8Cu;d4<=bDQRnR-I z(_)>U(~ygjtcW~|X8>5Y#%zC#DcQ6zcuH95Wd>yhI7J_7!q!%kZS_6{=F(Y3KR+KP zvT}B~=({;r5MYOxvEGR?=;B+l^h|Jd!O^KP~ z<)FR?ZL0^+N5t8em9ve0L+E3oGKX2mJ7nR$MlO5f)ivIJW2K5H@=povQB+5UEAQn& zcfew_^^MS+8-5FyaGY9~fF66i&62?K`0^+Pj8po48vsp;pq7!y(tNA){r(5ho$%!s zvVI8Vz<-F?j?i}8P_zGIOlyw_Bd8p7YNWU&`gq`u+og-1TaptoYE{IdLvDKWaJr6% zqU@>67uz|Q|Fph;yCIdFy5SbL^AkB>t5yJo@=iQ%T>KQak8T7nKXwM%`gn^09Jz&M z$IX6y$bcudvVGlCQrSSLKi^KPtFJ+M1v1KKGiC@zeFm~AApo{aYO$M=Kd}NPWBQxI z9RLsiA@Xd(7ZUiy|8j4-+A9lH3d>(V>O!t0pBKl$Ef~;~DtuK@Z~?0Y-;~F*rf*-h zeFp|tacQ_@Krfr@8xH2Uz~CKP;9U|IUEIT5qYv`NX+3*@kX31x=x3hE{u4Pr@2j5w zou8Vj=Tlg}wkYcs1WD%4;RS_xjG!B%Smqa;>d>GC?sq zBxIIx44FEAi{!nT#mmCc;^)6ym?JDH_4LlSYJ}QB+tn9#{yTThiix{1Q%4g3N?8`K zv^;U73cl*=V?@&25bmps4vh6aWysId-`1BrYua=~y2nR7Y_y*mbFZliyo@qMt{x-1 z!XhWd&FSkjGJTxO;bL+3F)F7I9IL`4ZpAZovX!TCkJ86)H;&aWsqH+3H@Pd6x4Fig2Zg@_hxK<82|(UqN!2+mp_M*gsxcn#LyztV?4Hjvz3T;|Gp&dEI1U$cGd zO8rWPj_X2QceLYg4WV*{1*FzMaJKuezeEFESxVyx;U$uVh%0i^|-fW8WM zpK0>TYUOt--sPU*khV=`887ugLL*7fkUySh^|xg4M!F;WO0WYkI7mFBe$MCviXQy` zfyR!Ed=npYD&Q61dX|0D5AtQZs`6>uD>Hkv_Lg~ty2KpQ{rZ~nYC4CiEf}jr7Fkyx%)OJ4d1J4xu||TE5H-H=K+T2 zG^jT_pWGwbl#gE^c{8_!3=M#7`^=J>Q&`BrN%p!fPY7Y z7M|ieH#$M@w`z4l@IEl=aVhi0*tZk|hymXFI%|R-OcNoWTJFQ;LBVeT=k$Jz%$Ips zot>j?8PoY|Yssx)ZceA+)82bS4IBakeH|i$?qReJ2$GG!Xx!53ZNM%tA?FM*vp)zN zLF{}b(_3J^t-bdlc8n01%_9PRKfts5`(TjF60kNnUYiN?APDyl5D4Ed5{?1Jj_HoH z18Z?P3T3d$>i)`hZ!hE|m7ET3wTXtMe zd^<8!ZcmY>=M%SdWe41#^f@|F+uw>&qCJ?b1lZ#WH*shD1pKyL{+NjA<=gP*e{aA< z4BSq0^V;^m%eDg~PKY)g_5zwf`u6D=uLj}2Bi{jzd^dd=^E!O;PwxPh-u4X^`^Vu* zfNWp7{SnLI+dxpy`F&#y<2?XA1!4F^P$+_ZQ4TO(NFHjI{cpGwpBo?_i~Pj2DgjYl z1Elc)hU@W9I4=P*sN*3i_C*f>$-nqYjR~okeQ_`>zNzMdW!sCV02hhdWPm}6zf3g% z$p39u)nHpX_NQ)eMu|-eT~ID|yZuwF@@p^?s^r^gpqG19>uFh?&u>Alro^tnM;u*mFDS&64 z1*Js~usk~j*6td{QDUho3P8rH`kI{sik-YmF8^?`0nAWI&`x2TT{R^B>%T8{Xx;wprfYI58nis3Jw}O@Rs?Y2JAA#wSZOt4q?KP- z#DSI19l&z9U&m2lDHn{il+`uWvGU=@biF!RxvKa{#uLF#%NVf7wN45*u~ghr+G24x_18v`n$**1-86 z>&t%A(NKN*6}h~ugyj@xw#@K<*7v{3&0wwXUQ?ZhoRjHNJ-I8Uc?mRI-x0kf%zo!C zFo4z5B@I9o1Ie)3uOkEKF!9uu01ejUfKTxLzds3nj2o0gyr~k8wV4O%Oowh3cX8Uo zkMXBIU^V>OZKBIL?-xWp-&9k8?<;&>VtK!=#fml7HDbEQ# input[type="submit"] { + grid-column: span 2; +} + +/* Typography */ + + +li { + margin-left: 20px; +} + +hr { + color: var(--secondary); + height: var(--border-width); +} + +blockquote { + padding-left: 1rem; + border-left: var(--border); +} + +.hidden { + display: none; +} + +@media screen and (max-width: 1000px) { + html { + font-size: 1rem; + } + header { + display: flex; + flex-direction: column; + gap: var(--gap-sm); + align-items: start; + padding: var(--padding-sm); + } + main { + margin: 0; + padding: var(--padding-sm); + } + html { + padding: 1rem; + } +} diff --git a/landing-page/style/code.css b/landing-page/style/code.css new file mode 100644 index 0000000..b59b2b3 --- /dev/null +++ b/landing-page/style/code.css @@ -0,0 +1,27 @@ +/* code divs are used to style adjacent
 blocks */
+div.code {
+    background-color: var(--primary);
+    border: var(--border);
+    border-radius: var(--border-radius);
+    overflow: hidden;
+
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+}
+
+div.code pre:nth-child(n+3) {
+    border-top: var(--border);
+}
+
+div.code pre:nth-child(odd) {
+    border-right: var(--border);
+}
+
+pre:has(code) {
+    padding: var(--padding-sm);
+    /* overflow-x: auto; */
+    min-width: 40%;
+    max-width: 60%;
+    text-wrap: wrap;
+}
diff --git a/landing-page/style/hljs.css b/landing-page/style/hljs.css
new file mode 100644
index 0000000..a3e3507
--- /dev/null
+++ b/landing-page/style/hljs.css
@@ -0,0 +1,102 @@
+/*
+This is a copy of .highlightjs's rainbow theme, so I can modify it a bit with
+colors I like. It's under the BSD 3-clause License.
+
+Copyright (c) 2006, Ivan Sagalaev
+*/
+
+pre:has(code) {
+    padding: 0;
+}
+
+pre code.hljs {
+    display: block;
+    padding: 1em;
+    font-size: var(--font-sm);
+}
+
+code.hljs {
+    padding: var(--padding-sm);
+}
+
+/*
+  
+  Style with support for rainbow parens
+  
+  */
+.hljs {
+    background: var(--primary);
+    color: var(--text);
+}
+
+.hljs-comment,
+.hljs-quote {
+    color: #969896;
+    font-style: italic
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-addition {
+    color: var(--magenta-bright);
+}
+
+.hljs-number,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+    color: #f99157
+}
+
+.hljs-string,
+.hljs-doctag,
+.hljs-regexp {
+    color: var(--cyan);
+}
+
+.hljs-title,
+.hljs-name,
+.hljs-type,
+.hljs-section,
+.hljs-built_in {
+    color: var(--green);
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-selector-id,
+.hljs-title.class_,
+.hljs-class .hljs-title {
+    color: var(--yellow);
+}
+
+.hljs-section,
+.hljs-name,
+.hljs-strong {
+    font-weight: bold
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-subst,
+.hljs-meta,
+.hljs-link {
+    color: #f99157
+}
+
+.hljs-deletion {
+    color: #dc322f
+}
+
+.hljs-formula {
+    background: #eee8d5
+}
+
+.hljs-attr,
+.hljs-attribute {
+    color: var(--blue);
+}
+
+.hljs-emphasis {
+    font-style: italic
+}
\ No newline at end of file
diff --git a/landing-page/style/nav.css b/landing-page/style/nav.css
new file mode 100644
index 0000000..4145637
--- /dev/null
+++ b/landing-page/style/nav.css
@@ -0,0 +1,57 @@
+/* Nav styling
+These styles assume navs are lists; nested lists will
+produce dropdown menus.
+*/
+nav {
+    display: flex;
+    flex-direction: row;
+}
+nav.vertical {
+    flex-direction: column;
+}
+nav a {
+    color: var(--text);
+    text-decoration: none;
+    padding: var(--padding-sm);
+    display: block;
+    text-align: center;
+
+    transition: all .1s;
+}
+nav img {
+    height: 1.5rem;
+}
+nav a:hover {
+    background-color: var(--secondary);
+}
+nav a.active {
+    background-color: var(--secondary);
+}
+nav div.dropdown {
+    position: relative;
+}
+nav div.dropdown > nav {
+    visibility: hidden;
+    position: absolute;
+    top: 100%;
+
+    flex-direction: column;
+
+    min-width: 100%;
+}
+nav.vertical div.dropdown > nav {
+    top: 0%;
+    left: 100%;
+}
+nav div.dropdown:hover > nav, nav div.dropdown:focus-within > nav {
+    visibility: visible;
+    background-color: var(--primary);
+}
+
+@media screen and (max-width: 1000px) {
+    nav {
+        flex-direction: column;
+        width: 100%;
+    }
+}
+
-- 
2.39.5