From 26d92ccf2b0bb5dbf3a649699df49fb97cf792d9 Mon Sep 17 00:00:00 2001 From: Marco De Bortoli <493257+debo@users.noreply.github.com> Date: Sun, 26 Jul 2026 23:33:54 +0100 Subject: [PATCH 1/2] feat: modernise website, keep terminal theme --- images/bkg.png | Bin 4261 -> 0 bytes images/blacktocat.png | Bin 1266 -> 0 bytes index.html | 252 ++++++++++++++++++++--------------- javascripts/main.js | 12 +- params.json | 1 - stylesheets/pygment_trac.css | 68 ---------- stylesheets/style.css | 160 ++++++++++++++++++++++ stylesheets/stylesheet.css | 247 ---------------------------------- 8 files changed, 313 insertions(+), 427 deletions(-) delete mode 100644 images/bkg.png delete mode 100644 images/blacktocat.png delete mode 100644 params.json delete mode 100644 stylesheets/pygment_trac.css create mode 100644 stylesheets/style.css delete mode 100644 stylesheets/stylesheet.css diff --git a/images/bkg.png b/images/bkg.png deleted file mode 100644 index fcebb5b22999adb792afee1f74bcf4af91db8441..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4261 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 E2cLQQbpQYW diff --git a/images/blacktocat.png b/images/blacktocat.png deleted file mode 100644 index 273d5710a2e0968d77584ad073e4a089fbfd7e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsdd7+V+^ z8k(CJm>U_GSr{5xm>asenYlPSS~yx7IT;(l%)qAC#mvab6&Utr2Bs#4hOUN|=4MVV zCI+U?PDZXKZWgXEy`Fi+C5d^-sW5vpf%Zc6n&H)JD;QCfH z^og8&1M`mKzE)l;d=qjrb~vvJSy|Mouyo1dg^ni6?thVCs0yAf`Q@5aq}s+K9`V=C z{rP`=v-NB<-^nFOYBRV_`Rx;uVYQy^)9a}ALqMd-xJi4fVcRLrrgF#H^(z_`gmYNg z8`ZC~^QU(&GySnBKw|Qotw~8oCN7?p;&T4i?d&@L$Gl%$8&-dv`S`$=`T36X{>ZDw zT=kLd?0S^caPZI_ua^-qKl~;=EWB<}?CV->TJO$Qp2Pd-+ - + - - - - - - - - php-build, by php-build Team + + + php-build — build any version of PHP from source + + + + + - -
-
-

php-build

-

Builds PHP so that multiple versions can be used in parallel.

- -
- Download as .zip - Download as .tar.gz - View on GitHub -
-
-
-
-
-

-php-build

- -

php-build builds multiple PHP versions from source, and this fully automatic.

- -

-Who uses this?

- -

-Install

- -
% git clone git://github.com/php-build/php-build
-% cd php-build
-% sudo ./install.sh
-
- -

-Usage

+ + +
+
+

PHP from source

+

Every version of PHP, built and run side by side.

+

php-build compiles PHP from source and installs versions in parallel, standalone or as a phpenv plugin. Fully automatic.

+ +
+ + +
+ +
+
+

Parallel versions

Install 5.6 through 8.x at once and pin a version per project. No system-wide clobbering.

+

From source

Compiles each release from source with your own configure options and build environment.

+

phpenv native

Drops in as a phpenv plugin so phpenv install just works, or run it fully standalone.

+

Definition driven

Version recipes live as definitions. List, extend, or add your own build targets.

+
+
-

-Synopsis

+
+

Install

+

Two ways in

+

1. As a phpenv plugin — the installer wires up phpenv and php-build together:

+
+ +
$ curl -L https://raw.githubusercontent.com/phpenv/phpenv-installer/master/bin/phpenv-installer | bash
+
+

2. Standalone — clone and install to a prefix you control:

+
+ +
$ git clone https://github.com/php-build/php-build.git
+$ cd php-build
+$ PREFIX=$HOME/local ./install.sh
+
+
-
php-build --help
+      
+

Usage

+

Build a version

+
+ +
php-build --help
 php-build --definitions
-php-build [-i <environment_or_inifile>] <definition> <prefix>
-
- -

Before you can build PHP you will need all necessary build dependencies.

- -

If you use Ubuntu:

-
% sudo apt-get install libmcrypt-dev libreadline-dev
-
-
% sudo apt-get build-dep php5-cli
-
- -

If you use macOS:

-
    -
  1. Install Homebrew

  2. -
  3. -

    Install Hombrew packages:

    -
    % brew install pkg-config autoconf openssl icu4c re2c bison libzip mcrypt
    -
  4. -
  5. -

    Specify the Homebrew library places in configure options:

    -
    env "PATH=/usr/local/opt/bison/bin:$PATH" "PHP_BUILD_CONFIGURE_OPTS=--with-openssl=$(brew --prefix openssl) --with-libzip" phpenv install 7.0.30
    -
  6. -
- - -

Then run this to install PHP 5.5.9 in development configuration:

- -
% php-build -i development 5.5.9 ~/local/php/5.5.9
-
- -

To get a list of all supported PHP versions pass the --definitions flag:

- -
% php-build --definitions
-
+php-build [-i <environment_or_inifile>] <definition> <prefix>
+
+

Build 8.3.0 in development configuration into a chosen prefix:

+
+ +
$ php-build -i development 8.3.0 ~/local/php/8.3.0
+
+ -

-Meet the core team

+
+

Before your first build

+

Build dependencies

+
+
+

Debian / Ubuntu

+
+ +
$ sudo apt-get install -y \
+    autoconf bison re2c pkg-config \
+    libxml2-dev libssl-dev libcurl4-openssl-dev \
+    libreadline-dev libzip-dev libsqlite3-dev
+
+
+
+

macOS (Homebrew)

+
+ +
$ brew install pkg-config autoconf \
+    openssl icu4c re2c bison libzip
+
+
+
+
-

-License

+
+

Maintainers

+

Core team

+ +
-

The MIT License

+
+

Legal

+

License

+

php-build is released under the MIT License. Copyright © 2011–2015 Christoph Hochstrasser.

+
+ Read the full license +
The MIT License (MIT)
 
-

Copyright (c) 2011-2015 Christoph Hochstrasser

+Copyright (c) 2011-2015 Christoph Hochstrasser -

Permission is hereby granted, free of charge, to any person obtaining a copy +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions:

+furnished to do so, subject to the following conditions: -

The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software.

+The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.

+THE SOFTWARE.
+
- - - + + + diff --git a/javascripts/main.js b/javascripts/main.js index d8135d3..68eb922 100644 --- a/javascripts/main.js +++ b/javascripts/main.js @@ -1 +1,11 @@ -console.log('This would be the main JS file.'); +document.querySelectorAll(".copy").forEach(function (btn) { + btn.addEventListener("click", function () { + var code = btn.parentElement.querySelector("code"); + var text = code.innerText.replace(/^\$ /gm, ""); + navigator.clipboard.writeText(text).then(function () { + btn.textContent = "copied"; + btn.classList.add("ok"); + setTimeout(function () { btn.textContent = "copy"; btn.classList.remove("ok"); }, 1400); + }); + }); +}); diff --git a/params.json b/params.json deleted file mode 100644 index 24124c2..0000000 --- a/params.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"php-build","tagline":"Builds PHP so that multiple versions can be used in parallel.","body":"# php-build\r\n\r\nphp-build builds multiple PHP versions from source, and this _fully automatic_.\r\n\r\n## Who uses this?\r\n\r\n * [Travis CI](http://travis-ci.org)\r\n * _Maybe you?_\r\n\r\n## Install\r\n\r\n```\r\n% git clone git://github.com/CHH/php-build\r\n% cd php-build\r\n% sudo ./install.sh\r\n```\r\n\r\n## Usage\r\n\r\n### Synopsis\r\n\r\n```\r\nphp-build --help\r\nphp-build --definitions\r\nphp-build [-i ] \r\n```\r\n\r\nBefore you can build PHP you will need all necessary build dependencies. \r\n\r\nIf you happen to use Ubuntu then this is done with one command:\r\n\r\n```\r\n% sudo apt-get build-dep php5-cli\r\n```\r\n\r\nThen run this to install PHP 5.5.9 in development configuration:\r\n\r\n```\r\n% php-build -i development 5.5.9 ~/local/php/5.5.9\r\n```\r\n\r\nTo get a list of all supported PHP versions pass the `--definitions` flag:\r\n\r\n```\r\n% php-build --definitions\r\n```\r\n\r\nBy default PHP versions come only with Pyrus (the new Pear installer) preinstalled.\r\nPass the `--pear` flag to enable the legacy Pear installer alongside of Pyrus for enhanced\r\ncompatibility with legacy Pear packages:\r\n\r\n```\r\n% php-build -i development --pear 5.5.9 ~/local/php/5.5.9\r\n```\r\n\r\n## Meet the core team\r\n\r\n* [Loïc Frering](https://github.com/loicfrering)\r\n* [Rogerio Prado de Jesus](https://github.com/rogeriopradoj)\r\n* [Christoph Hochstrasser](https://github.com/CHH)\r\n\r\n## License\r\n\r\nThe MIT License\r\n\r\nCopyright (c) 2014 Christoph Hochstrasser\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.","google":"UA-6881967-3","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css deleted file mode 100644 index d1df6a2..0000000 --- a/stylesheets/pygment_trac.css +++ /dev/null @@ -1,68 +0,0 @@ -.highlight .c { color: #999988; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .k { font-weight: bold } /* Keyword */ -.highlight .o { font-weight: bold } /* Operator */ -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #aa0000 } /* Generic.Error */ -.highlight .gh { color: #999999 } /* Generic.Heading */ -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #555555 } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */ -.highlight .gt { color: #aa0000 } /* Generic.Traceback */ -.highlight .kc { font-weight: bold } /* Keyword.Constant */ -.highlight .kd { font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #009999 } /* Literal.Number */ -.highlight .s { color: #d14 } /* Literal.String */ -.highlight .na { color: #008080 } /* Name.Attribute */ -.highlight .nb { color: #0086B3 } /* Name.Builtin */ -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ -.highlight .no { color: #008080 } /* Name.Constant */ -.highlight .ni { color: #800080 } /* Name.Entity */ -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ -.highlight .nn { color: #555555 } /* Name.Namespace */ -.highlight .nt { color: #CBDFFF } /* Name.Tag */ -.highlight .nv { color: #008080 } /* Name.Variable */ -.highlight .ow { font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #009999 } /* Literal.Number.Float */ -.highlight .mh { color: #009999 } /* Literal.Number.Hex */ -.highlight .mi { color: #009999 } /* Literal.Number.Integer */ -.highlight .mo { color: #009999 } /* Literal.Number.Oct */ -.highlight .sb { color: #d14 } /* Literal.String.Backtick */ -.highlight .sc { color: #d14 } /* Literal.String.Char */ -.highlight .sd { color: #d14 } /* Literal.String.Doc */ -.highlight .s2 { color: #d14 } /* Literal.String.Double */ -.highlight .se { color: #d14 } /* Literal.String.Escape */ -.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ -.highlight .si { color: #d14 } /* Literal.String.Interpol */ -.highlight .sx { color: #d14 } /* Literal.String.Other */ -.highlight .sr { color: #009926 } /* Literal.String.Regex */ -.highlight .s1 { color: #d14 } /* Literal.String.Single */ -.highlight .ss { color: #990073 } /* Literal.String.Symbol */ -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #008080 } /* Name.Variable.Class */ -.highlight .vg { color: #008080 } /* Name.Variable.Global */ -.highlight .vi { color: #008080 } /* Name.Variable.Instance */ -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ - -.type-csharp .highlight .k { color: #0000FF } -.type-csharp .highlight .kt { color: #0000FF } -.type-csharp .highlight .nf { color: #000000; font-weight: normal } -.type-csharp .highlight .nc { color: #2B91AF } -.type-csharp .highlight .nn { color: #000000 } -.type-csharp .highlight .s { color: #A31515 } -.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/style.css b/stylesheets/style.css new file mode 100644 index 0000000..15c904f --- /dev/null +++ b/stylesheets/style.css @@ -0,0 +1,160 @@ +:root { + --bg: #121212; + --bg-2: #171717; + --panel: #0d0d0d; + --line: rgba(255,255,255,0.09); + --green: #b5e853; + --green-dim: #7d9e42; + --green-glow: rgba(181,232,83,0.16); + --ink: #eaeaea; + --muted: #8c8c8c; + --link: #63c0f5; + --mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Monaco, "Cascadia Mono", Consolas, monospace; + --max: 940px; +} +* { box-sizing: border-box; } +html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-behavior: smooth; } +body { + margin: 0; + background: + radial-gradient(900px 460px at 50% -8%, var(--green-glow), transparent 62%), + var(--bg); + color: var(--ink); + font: 16px/1.6 var(--mono); + -webkit-font-smoothing: antialiased; + letter-spacing: -0.01em; +} +body::before { + content: ""; + position: fixed; inset: 0; pointer-events: none; z-index: 0; + background: repeating-linear-gradient(rgba(255,255,255,0.014) 0 1px, transparent 1px 3px); +} +a { color: var(--link); text-decoration: none; } +a:hover { text-decoration: underline; } +a:focus-visible, button:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; border-radius: 3px; } + +.container { width: 90%; max-width: var(--max); margin: 0 auto; position: relative; z-index: 1; } + +/* ---- top nav ---- */ +nav { + display: flex; align-items: center; justify-content: space-between; + padding: 1.2rem 0; font-size: 0.85rem; +} +.brand { color: var(--green); font-weight: 700; letter-spacing: -0.03em; } +.brand::before { content: "./"; color: var(--green-dim); margin-right: 0.3ch; } +.nav-links { display: flex; gap: 1.4rem; } +.nav-links a { color: var(--muted); } +.nav-links a:hover { color: var(--green); text-decoration: none; } + +/* ---- hero ---- */ +.hero { padding: 3.5rem 0 3rem; display: grid; gap: 2.4rem; grid-template-columns: 1.05fr 1fr; align-items: center; } +.hero > *, .card { min-width: 0; } +.hero-copy h1 { + margin: 0 0 1rem; + font-size: clamp(2.1rem, 5.5vw, 3.2rem); + line-height: 1.08; + font-weight: 700; + color: var(--ink); + letter-spacing: -0.04em; + text-wrap: balance; +} +.hero-copy h1 b { color: var(--green); font-weight: 700; text-shadow: 0 0 16px var(--green-glow); } +.hero-copy p { color: var(--muted); font-size: 1.05rem; max-width: 42ch; margin: 0 0 1.8rem; text-wrap: balance; } +.cta { display: flex; flex-wrap: wrap; gap: 0.7rem; } +.btn { + display: inline-flex; align-items: center; gap: 0.5ch; + padding: 0.65rem 1.25rem; border-radius: 7px; font-size: 0.88rem; font-weight: 600; + border: 1px solid var(--line); background: var(--bg-2); color: var(--ink); + transition: border-color .15s, background .15s, transform .05s; +} +.btn:hover { border-color: var(--green); background: #202020; text-decoration: none; } +.btn:active { transform: translateY(1px); } +.btn-primary { background: var(--green); color: #0e1200; border-color: var(--green); } +.btn-primary:hover { background: #c5f56a; } + +/* ---- terminal window ---- */ +.term { + border: 1px solid var(--line); + border-radius: 10px; + background: var(--panel); + overflow: hidden; + box-shadow: 0 24px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(181,232,83,0.05); +} +.term-bar { + display: flex; align-items: center; gap: 0.5ch; + padding: 0.7rem 0.9rem; background: #161616; border-bottom: 1px solid var(--line); +} +.dot { width: 11px; height: 11px; border-radius: 50%; background: #333; } +.dot.g { background: var(--green-dim); } +.term-title { margin-left: 0.8ch; color: var(--muted); font-size: 0.75rem; } +.term-body { padding: 1.1rem 1.2rem; font-size: 0.86rem; line-height: 1.8; overflow-x: auto; } +.term-body .p { color: var(--green-dim); user-select: none; } +.term-body .c { color: var(--green); } +.term-body .o { color: var(--muted); } +.cursor { display: inline-block; width: 0.6ch; height: 1em; background: var(--green); vertical-align: -0.15em; animation: blink 1.1s steps(1) infinite; } +@keyframes blink { 50% { opacity: 0; } } + +/* ---- feature cards ---- */ +section { padding: 2.6rem 0; } +.eyebrow { color: var(--green-dim); font-size: 0.78rem; letter-spacing: 0.12em; text-transform: uppercase; margin: 0 0 0.5rem; } +h2 { margin: 0 0 1.6rem; font-size: 1.55rem; font-weight: 600; color: var(--green); letter-spacing: -0.03em; } +.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; } +.card { + border: 1px solid var(--line); border-radius: 9px; background: var(--bg-2); + padding: 1.2rem 1.3rem; transition: border-color .15s, transform .15s; +} +.card:hover { border-color: var(--green-dim); transform: translateY(-2px); } +.card h3 { margin: 0 0 0.5rem; color: var(--green); font-size: 1rem; } +.card h3::before { content: ">> "; color: var(--green-dim); } +.card p { margin: 0; color: var(--muted); font-size: 0.88rem; line-height: 1.55; } + +/* ---- code ---- */ +.code { position: relative; margin: 0 0 1rem; } +.code + .code { margin-top: -0.2rem; } +pre { + margin: 0; background: var(--panel); border: 1px solid var(--line); border-radius: 8px; + padding: 1rem 1.1rem; overflow-x: auto; font-size: 0.85rem; color: var(--green); line-height: 1.65; +} +pre .prompt { color: var(--green-dim); user-select: none; } +.copy { + position: absolute; top: 0.5rem; right: 0.5rem; + padding: 0.3rem 0.6rem; font: 600 0.72rem var(--mono); + color: var(--muted); background: #1b1b1b; border: 1px solid var(--line); + border-radius: 5px; cursor: pointer; opacity: 0; transition: opacity .15s, color .15s, border-color .15s; +} +.code:hover .copy, .copy:focus-visible { opacity: 1; } +.copy:hover { color: var(--green); border-color: var(--green); } +.copy.ok { color: var(--green); border-color: var(--green); } +.step-label { color: var(--muted); font-size: 0.85rem; margin: 0 0 0.5rem; } +.step-label b { color: var(--green); } + +/* ---- team ---- */ +.team { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0.6rem; } +.team a { padding: 0.7rem 0.85rem; border: 1px solid var(--line); border-radius: 7px; color: var(--ink); display: flex; align-items: center; text-align: left; gap: 1.5ch; font-size: 0.9rem; } +.team a::before { content: ">>"; color: var(--green-dim); flex: none; } +.team a:hover { border-color: var(--green); text-decoration: none; } + +/* ---- license ---- */ +.license summary { cursor: pointer; color: var(--green); width: fit-content; font-size: 0.9rem; } +.license summary:hover { text-decoration: underline; } +.license pre { margin-top: 1rem; white-space: pre-wrap; color: var(--muted); font-size: 0.78rem; line-height: 1.65; } + +footer { + border-top: 1px dashed var(--green-dim); margin-top: 1rem; padding: 1.8rem 0 3rem; + color: var(--muted); font-size: 0.8rem; display: flex; flex-wrap: wrap; gap: 0.6rem 1.4rem; justify-content: space-between; +} +footer a { color: var(--muted); } +footer a:hover { color: var(--green); } + +@media (max-width: 720px) { + .hero { grid-template-columns: 1fr; padding-top: 2rem; } + .nav-links { display: none; } + .team { grid-template-columns: repeat(2, 1fr); } +} +@media (max-width: 380px) { + .team { grid-template-columns: 1fr; } +} +@media (prefers-reduced-motion: reduce) { + * { transition: none !important; scroll-behavior: auto; } + .cursor { animation: none; } +} diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css deleted file mode 100644 index a54a639..0000000 --- a/stylesheets/stylesheet.css +++ /dev/null @@ -1,247 +0,0 @@ -body { - margin: 0; - padding: 0; - background: #151515 url("../images/bkg.png") 0 0; - color: #eaeaea; - font: 16px; - line-height: 1.5; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; -} - -/* General & 'Reset' Stuff */ - -.container { - width: 90%; - max-width: 600px; - margin: 0 auto; -} - -section { - display: block; - margin: 0 0 20px 0; -} - -h1, h2, h3, h4, h5, h6 { - margin: 0 0 20px; -} - -li { - line-height: 1.4 ; -} - -/* Header,
- header - container - h1 - project name - h2 - project description -*/ - -header { - background: rgba(0, 0, 0, 0.1); - width: 100%; - border-bottom: 1px dashed #b5e853; - padding: 20px 0; - margin: 0 0 40px 0; -} - -header h1 { - font-size: 30px; - line-height: 1.5; - margin: 0 0 0 -40px; - font-weight: bold; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - color: #b5e853; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), - 0 0 5px rgba(181, 232, 83, 0.1), - 0 0 10px rgba(181, 232, 83, 0.1); - letter-spacing: -1px; - -webkit-font-smoothing: antialiased; -} - -header h1:before { - content: "./ "; - font-size: 24px; -} - -header h2 { - font-size: 18px; - font-weight: 300; - color: #666; -} - -#downloads .btn { - display: inline-block; - text-align: center; - margin: 0; -} - -/* Main Content -*/ - -#main_content { - width: 100%; - -webkit-font-smoothing: antialiased; -} -section img { - max-width: 100% -} - -h1, h2, h3, h4, h5, h6 { - font-weight: normal; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - color: #b5e853; - letter-spacing: -0.03em; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), - 0 0 5px rgba(181, 232, 83, 0.1), - 0 0 10px rgba(181, 232, 83, 0.1); -} - -#main_content h1 { - font-size: 30px; -} - -#main_content h2 { - font-size: 24px; -} - -#main_content h3 { - font-size: 18px; -} - -#main_content h4 { - font-size: 14px; -} - -#main_content h5 { - font-size: 12px; - text-transform: uppercase; - margin: 0 0 5px 0; -} - -#main_content h6 { - font-size: 12px; - text-transform: uppercase; - color: #999; - margin: 0 0 5px 0; -} - -dt { - font-style: italic; - font-weight: bold; -} - -ul li { - list-style: none; -} - -ul li:before { - content: ">>"; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - font-size: 13px; - color: #b5e853; - margin-left: -37px; - margin-right: 21px; - line-height: 16px; -} - -blockquote { - color: #aaa; - padding-left: 10px; - border-left: 1px dotted #666; -} - -pre { - background: rgba(0, 0, 0, 0.9); - border: 1px solid rgba(255, 255, 255, 0.15); - padding: 10px; - font-size: 14px; - color: #b5e853; - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - text-wrap: normal; - overflow: auto; - overflow-y: hidden; -} - -table { - width: 100%; - margin: 0 0 20px 0; -} - -th { - text-align: left; - border-bottom: 1px dashed #b5e853; - padding: 5px 10px; -} - -td { - padding: 5px 10px; -} - -hr { - height: 0; - border: 0; - border-bottom: 1px dashed #b5e853; - color: #b5e853; -} - -/* Buttons -*/ - -.btn { - display: inline-block; - background: -webkit-linear-gradient(top, rgba(40, 40, 40, 0.3), rgba(35, 35, 35, 0.3) 50%, rgba(10, 10, 10, 0.3) 50%, rgba(0, 0, 0, 0.3)); - padding: 8px 18px; - border-radius: 50px; - border: 2px solid rgba(0, 0, 0, 0.7); - border-bottom: 2px solid rgba(0, 0, 0, 0.7); - border-top: 2px solid rgba(0, 0, 0, 1); - color: rgba(255, 255, 255, 0.8); - font-family: Helvetica, Arial, sans-serif; - font-weight: bold; - font-size: 13px; - text-decoration: none; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.75); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.btn:hover { - background: -webkit-linear-gradient(top, rgba(40, 40, 40, 0.6), rgba(35, 35, 35, 0.6) 50%, rgba(10, 10, 10, 0.8) 50%, rgba(0, 0, 0, 0.8)); -} - -.btn .icon { - display: inline-block; - width: 16px; - height: 16px; - margin: 1px 8px 0 0; - float: left; -} - -.btn-github .icon { - opacity: 0.6; - background: url("../images/blacktocat.png") 0 0 no-repeat; -} - -/* Links - a, a:hover, a:visited -*/ - -a { - color: #63c0f5; - text-shadow: 0 0 5px rgba(104, 182, 255, 0.5); -} - -/* Clearfix */ - -.cf:before, .cf:after { - content:""; - display:table; -} - -.cf:after { - clear:both; -} - -.cf { - zoom:1; -} \ No newline at end of file From 8ee86d23d7345848c36ddf4fb2cb0d24000748b3 Mon Sep 17 00:00:00 2001 From: Marco De Bortoli <493257+debo@users.noreply.github.com> Date: Wed, 29 Jul 2026 12:35:22 +0100 Subject: [PATCH 2/2] feat: use copy icons in code blocks, keep a11y --- index.html | 14 ++++++++------ javascripts/main.js | 11 +++++++++-- stylesheets/style.css | 18 +++++++++++++++--- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index c0a746e..c1c6573 100644 --- a/index.html +++ b/index.html @@ -66,12 +66,12 @@

Every version of PHP, built and run side by side.

Two ways in

1. As a phpenv plugin — the installer wires up phpenv and php-build together:

- +
$ curl -L https://raw.githubusercontent.com/phpenv/phpenv-installer/master/bin/phpenv-installer | bash

2. Standalone — clone and install to a prefix you control:

- +
$ git clone https://github.com/php-build/php-build.git
 $ cd php-build
 $ PREFIX=$HOME/local ./install.sh
@@ -82,14 +82,14 @@

Two ways in

Usage

Build a version

- +
php-build --help
 php-build --definitions
 php-build [-i <environment_or_inifile>] <definition> <prefix>

Build 8.3.0 in development configuration into a chosen prefix:

- +
$ php-build -i development 8.3.0 ~/local/php/8.3.0
@@ -101,7 +101,7 @@

Build dependencies

Debian / Ubuntu

- +
$ sudo apt-get install -y \
     autoconf bison re2c pkg-config \
     libxml2-dev libssl-dev libcurl4-openssl-dev \
@@ -111,7 +111,7 @@ 

Debian / Ubuntu

macOS (Homebrew)

- +
$ brew install pkg-config autoconf \
     openssl icu4c re2c bison libzip
@@ -167,6 +167,8 @@

License

+ + diff --git a/javascripts/main.js b/javascripts/main.js index 68eb922..d4a10e1 100644 --- a/javascripts/main.js +++ b/javascripts/main.js @@ -1,11 +1,18 @@ +var status = document.getElementById("copy-status"); + document.querySelectorAll(".copy").forEach(function (btn) { btn.addEventListener("click", function () { var code = btn.parentElement.querySelector("code"); var text = code.innerText.replace(/^\$ /gm, ""); navigator.clipboard.writeText(text).then(function () { - btn.textContent = "copied"; btn.classList.add("ok"); - setTimeout(function () { btn.textContent = "copy"; btn.classList.remove("ok"); }, 1400); + btn.setAttribute("aria-label", "Copied"); + if (status) status.textContent = "Copied to clipboard"; + setTimeout(function () { + btn.classList.remove("ok"); + btn.setAttribute("aria-label", "Copy to clipboard"); + if (status) status.textContent = ""; + }, 1400); }); }); }); diff --git a/stylesheets/style.css b/stylesheets/style.css index 15c904f..df13915 100644 --- a/stylesheets/style.css +++ b/stylesheets/style.css @@ -118,13 +118,25 @@ pre { pre .prompt { color: var(--green-dim); user-select: none; } .copy { position: absolute; top: 0.5rem; right: 0.5rem; - padding: 0.3rem 0.6rem; font: 600 0.72rem var(--mono); + display: inline-flex; align-items: center; justify-content: center; + width: 30px; height: 30px; padding: 0; color: var(--muted); background: #1b1b1b; border: 1px solid var(--line); - border-radius: 5px; cursor: pointer; opacity: 0; transition: opacity .15s, color .15s, border-color .15s; + border-radius: 6px; cursor: pointer; opacity: 0; transition: opacity .15s, color .15s, border-color .15s; } +.copy .i { display: block; } +.copy .i-check { display: none; } +.copy.ok .i-copy { display: none; } +.copy.ok .i-check { display: block; } .code:hover .copy, .copy:focus-visible { opacity: 1; } .copy:hover { color: var(--green); border-color: var(--green); } -.copy.ok { color: var(--green); border-color: var(--green); } +.copy.ok { color: var(--green); border-color: var(--green); opacity: 1; } +/* touch devices can't hover: keep the control reachable */ +@media (hover: none) { .copy { opacity: 1; } } + +.sr-only { + position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; + overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; +} .step-label { color: var(--muted); font-size: 0.85rem; margin: 0 0 0.5rem; } .step-label b { color: var(--green); }