commit 2bdda3c080cca744ea1914ef02a14ed5894c8db4
parent 30fbce9589f421905d68865ad677bc35f1b66b4b
Author: Jake Bauer <jbauer@paritybit.ca>
Date: Fri, 17 Mar 2023 18:35:40 -0400
*
Diffstat:
12 files changed, 301 insertions(+), 23 deletions(-)
diff --git a/content/blog/index.md b/content/blog/index.md
@@ -21,6 +21,9 @@ year old—may not match my current views or practices.
<button type="submit">Search</button>
</form>
+[OpenBSD on the Dell XPS 13 9380](/blog/openbsd-on-the-dell-xps-13-9380)<br>
+<span class="date">March 17, 2023</span>
+
[Styling External Links](/blog/styling-external-links)<br>
<span class="date">March 2, 2023</span>
diff --git a/content/blog/openbsd-on-the-dell-xps-13-9380.md b/content/blog/openbsd-on-the-dell-xps-13-9380.md
@@ -0,0 +1,263 @@
+Title: OpenBSD on the Dell XPS 13 9380
+Author: Jake Bauer
+Date: 2023-03-17
+Summary: OpenBSD on the Dell XPS 13 9380
+
+# [%title]
+
+**Author:** [%author] | **Published:** [%date]
+
+(Yes, I totally ripped off [jcs'](http://jcs.org) format for this.)
+
+It's been a while since I had a laptop with any semblance of computing power
+that I actually enjoyed using.
+
+Back in 2021, I ditched my Thinkpad T420s for a [Mid-2009 MacBook
+Pro](/uses#laptops) and an old 2008-era netbook, both with Core 2 Duo series
+processors. Although the MacBook is still usable for most non-browser-heavy
+tasks, I just fell in love with portability of the netbook which led me to see
+if I could find a newer, more powerful laptop that would fit my preferences.
+I created [this page](/garden/laptops-i-might-like) to compare laptops that
+looked like they might fit what I wanted.
+
+Basically, I wanted a laptop that was small, thin, and lightweight, but also
+high quality and not too expensive. I don't need a ton of performance, I didn't
+want to spend a lot of money, and I prefer not buying new things whenever
+I can, so I opted to get something from the used market. I hopped on eBay, did
+a whole lot of searching, and eventually landed on this.
+
+<figure>
+ <a href="/img/xps/xps.jpg">
+ <img src="/img/xps/xps.jpg" alt="A Dell XPS laptop lying closed at an angle on a table." />
+ </a>
+</figure>
+
+With this new laptop I've launched myself 10 years into the future... from 2009
+to 2019!
+
+## Table of Contents
+
+* [Hardware](#hardware)
+* [Firmware](#firmware)
+* [Power and Heat](#power-and-heat)
+* [OpenBSD Support Log](#openbsd-support-log)
+* [Current OpenBSD Support Summary](#openbsd-support-log)
+
+## Hardware
+
+The Dell XPS 13 9380 is another laptop in Dell's revered XPS line. Known for
+excellent build quality, nice keyboards, beautiful screens, and good battery
+life, this model doesn't disappoint. I managed to snag a version with an Intel
+i7-8665U, 16GB of RAM (soldered), a 256GB SSD, a 1080p touchscreen display, and
+a dead battery; all for a very reasonable price and in great physical
+condition.
+
+The dead battery is probably how I was able to get such a recent, fairly
+high-end machine for only C$500 ($365 USD on 2023-05-16) before shipping and
+taxes (an additional C$90) where comparable models were at least C$150 more
+expensive. I have ordered a replacement 52WHr battery (C$60), but until it
+arrives I can rely on being plugged into the wall and hibernating whenever
+I need to move.
+
+The chassis is made of CNC machined aluminium and the palm rest of a soft,
+comfortable carbon-fibre composite material. The build quality is excellent;
+reminiscent of MacBooks. It also has minimal yet tasteful branding in the form
+of an encircled Dell logo on the lid and silver "DELL" text in the middle of
+the bottom display bezel. The palm rest does have a tendency to pick up
+fingerprints, but it's easily cleaned.
+
+On the right side of the laptop is a headset jack, a USB Type-C port, a micro
+SD card slot, and a speaker.
+
+On the left side of the laptop is a security cable slot, two Thunderbolt
+3-enabled USB-C ports, a battery charge status button and indicator, and
+another speaker.
+
+The laptop can be charged and can output to an external display using any of
+the three USB-C ports. The Thunderbolt 3 ports would theoretically let me plug
+in an external GPU if I wanted to do away with [my desktop](/uses#workstation)
+altogether, but that wasn't a consideration when I got it.
+
+The speakers are nothing stellar. They sound a bit blown out at max volume and
+don't have a great bass response, but they don't sound terrible either and work
+in a pinch. They sound like they respond best in the mid-range, which is where
+most human voices land, and they performed quite well when listening to
+a podcast at about 65% volume.
+
+<figure>
+ <a href="/img/xps/xps-open-on.jpg">
+ <img src="/img/xps/xps-open-on.jpg" alt="The laptop open and on, showing this blog post in a vim window." />
+ </a>
+</figure>
+
+There is a really small 720p webcam at the top of the display providing
+a decent enough picture quality. I'm glad this is at the top of the display and
+not at the bottom looking up into the user's nose, unlike on previous models.
+There is also an array of four microphones at the front of the palm rest, just
+above the charge indicator light, which provides audio of an acceptable level
+of quality. Both are disabled by OpenBSD by default and can be disabled in the
+BIOS.
+
+The 13.3" 1920x1080 glossy, touchscreen display looks crisp, vibrant, and
+clear. Despite it only having 165 PPI, it's sharp from reasonable viewing
+distances and has the added bonus of using much less power than the alternative
+3840x2160 display. The display can reportedly reach a peak brightness of 400
+nits, but I use it at about 30% brightness when indoors. It is by far the best
+display I've had on a laptop. I would have preferred a 16:10 or 3:2 aspect
+ratio, but that's only recently come back in vogue so I would have had to pay
+twice the price or more for a laptop with that feature.
+
+The hinges of the display are stiff and don't wobble at all when typing or when
+moving the laptop around. They are still loose enough that you can mostly open
+the laptop with one hand, though it will start to tip backwards when the
+display is approaching 80°. The screen also closes with a satisfying thud.
+
+The keyboard is Dell's typical, crisp, chiclet-style keyboard that was common
+across all their XPS laptops until more recent models. I enjoy the tactility of
+the keyboard, which doesn't flex at all during normal typing.
+
+The trackpad feels soft and smooth, though the physical click noise is a bit
+loud and high pitched as opposed to a satisfying clunk like on MacBooks. This
+isn't such a big deal though since tapping works just fine.
+
+<figure>
+ <a href="/img/xps/xps-keyboard.jpg">
+ <img src="/img/xps/xps-keyboard.jpg" alt="A top-down view of the keyboard of the laptop." />
+ </a>
+</figure>
+
+There is no audible coil whine or fan noise at idle. When the laptop is under
+heavy load, the fan does noticeably spin up but stays relatively quiet.
+Ultimately, I would have preferred something fanless, but the fanless laptops
+I could find that also satisfied all of my other preferences were quite
+expensive.
+
+Wireless connectivity is provided by a soldered Intel Wireless-AC 9260 WiFi
+5/Bluetooth 5 chipset, which is unique to models of this laptop which come with
+an i5-8365U or i7-8665U processor. In models newer than the XPS 13 9350, XPS
+laptops have come with soldered Intel Killer WiFi chipsets which are not
+supported on OpenBSD. This model is unique out of the newer XPS lineup in that
+it has this other WiFi chipset option; neither the preceding or succeeding
+models seem to have it.
+
+The NVMe SSD is a 256GB Micron 2200S in a removable m.2-2280 form factor. I use
+256GB SSDs in almost all of my machines, so this size is adequate for me, but
+I can always upgrade the storage if I need to in the future. I ran
+CrystalDiskInfo on Windows 10 before wiping the drive, and it reported that the
+SSD has about 84% of its life remaining with ~15TB written to it so far.
+
+## Firmware
+
+Pressing F2 at the boot splash screen will take you into the BIOS Setup menu.
+The 9380 has Dell's typical Windows 7-styled graphical BIOS which is fine and
+does the job. There are plenty of options available from battery management to
+turning off ports and peripherals.
+
+As usual, Secure Boot must be disabled in order to boot OpenBSD.
+
+You can select a temporary boot device or access other functions by pressing
+F12 at the boot splash screen.
+
+There is also an embedded diagnostics tool which will run the hardware through
+various tests. I'm not sure how good this is at detecting most faults, but it
+is a nice thing to have to quickly check that all the hardware is most likely
+working (it did yell at me about the battery).
+
+## Power and Heat
+
+One very important thing that I want from my laptops is for them to not get too
+hot or too loud. That is one of the main reasons I stopped using old Thinkpads.
+
+This model performs admirably. During light workloads the fan is silent or
+inaudible in my typical working environments and is quick to spin down after
+heavy loads. When the fan is spinning, it doesn't produce an annoying or high
+pitched sound, just a noticeable "whooshing".
+
+At idle, the XPS 9380 sits around 45°C, probably because the fan is not
+programmed to ramp up until the processor gets warmer. I am fine with this
+behaviour, as it means that my regular workloads are not likely to make the fan
+spin up. Also, I can run the laptop at minimum clock speeds using `ampd -L`, in
+which case the fan almost never comes on and I don't notice any drop in
+performance for most of the things I do with the machine.
+
+During normal use, the underside of the laptop gets warm, but not at all hot.
+The temperature of the palm rest and keyboard does not noticeably change.
+
+I'll have to wait until the new battery comes in before getting an accurate
+measure of battery life, but for now I measured the laptop pulling about 11.5W
+from the wall during my normal use, and 27W with the screen at full brightness
+while running:
+
+```
+stress --cpu 4 --vm 4 --vm-bytes 1024M
+```
+
+## OpenBSD Support Log
+
+**2023-03-14**: The only thing that didn't work well out of the box was
+resuming from sleep or hibernation. When doing so, the screen would turn on,
+the laptop would appear to try to draw to the screen (various lines and columns
+in the text mode console were replaced with black), but the laptop would freeze
+completely, stop responding to any input, and could only be reset by holding
+the power button down until the laptop turned off.
+
+**2023-03-15**: After a good bit of research, I stumbled upon this
+[openbsd-bugs thread about the Framework
+laptop](https://marc.info/?t=163889280400001&r=1&w=2) which had a solution that
+worked.
+
+It turns out that disabling at least one of the devices handled by the `dwiic`
+driver causes resuming from sleep and hibernation to work properly again. The
+two `dwiic` devices I see are `dwiic0` corresponding to `ELAN2931` (the
+touchscreen) and `dwiic1` corresponding to `DELL08AF` (the trackpad). Because
+the trackpad still works without `dwiic1` being active (it gets handled by the
+`pms` driver instead), I opted to just disable that and leave the touchscreen
+working. Of course, disabling `dwiic` outright also fixes the issue, but leaves
+me without a working touchscreen.
+
+This is the command I ran to make the changes permanent (though I do have to
+repeat it every time I `sysupgrade(8)` to a new kernel):
+
+```
+$ doas config -ef /bsd
+ukc> find dwiic
+226 dwiic* at pci* dev -1 function -1 flags 0x0
+448 dwiic* at acpi0 flags 0x0
+ukc> change 226
+226 dwiic* at pci* dev -1 function -1 flags 0x0
+change [n] y
+dev [-1] ? 21
+function [-1] ? 0
+flags [0] ?
+226 dwiic* changed
+226 dwiic* at pci* dev 0x15 function 0 flags 0x0
+ukc> quit
+```
+
+**2023-03-16**: After much more testing and trying new snapshots and updating
+the BIOS and so on, I [sent
+a report](https://marc.info/?l=openbsd-bugs&m=167901787111102&w=2) to the
+openbsd-bugs mailing list using the `sendbug(1)` utility, so we'll see what
+people more knowledgable than I can make of this problem.
+
+## Current OpenBSD Support Summary
+
+Status is relative to OpenBSD-current as of 2023-03-17.
+
+| Component | Works? | Notes |
+|-----------|--------|-------|
+| Audio | Yes | Intel audio with Realtek ALC299 codec and supported by [azalia](http://man.openbsd.org/azalia.4). Microphone can be disabled in the BIOS. |
+| Battery Status | Yes | 52WHr battery, status available through [acpibat](http://man.openbsd.org/acpibat.4). |
+| Bluetooth | No | Attaches as a [ugen](http://man.openbsd.org/ugen.4) device but OpenBSD does not support Bluetooth. Can be disabled in the BIOS. |
+| Fingerprint sensor | No | Goodix fingerprint sensor embedded in the power button. No OpenBSD compatibility. Can be disabled in the BIOS.
+| Keyboard Backlight | Yes | Supported natively by the embedded controller, including auto-dimming. Can be set to off, half, or full brightness using Fn+F10. |
+| Hibernation | Yes\* | Works with ZZZ after aforementioned tweaks. |
+| NVMe SSD | Yes | Micron 2200S NVMe 256GB supported by [nvme](http://man.openbsd.org/nvme.4). |
+| SD Card Reader | Yes | Works without issue. Can also boot from it. |
+| Suspend / Resume | Yes\* | Works with zzz or in response to the lid closing after aforementioned tweaks. |
+| Touchscreen | Yes | I2C, supported by the [ims](http://man.openbsd.org/ims.4) driver. |
+| Touchpad | Yes | Synaptics clickpad supported by the [pms](http://man.openbsd.org/pms.4) driver when `dwiic1` is disabled, otherwise supported by the [imt](http://man.openbsd.org/imt.4) driver. |
+| USB | Yes | USB-C ports work without issue. |
+| Video | Yes | Coffee Lake video supported via [inteldrm](http://man.openbsd.org/inteldrm.4) for accelerated video, DPMS, backlight control, S3 resume, etc. |
+| Webcam | Yes | Supported by the [uvideo](http://man.openbsd.org/uvideo.4) driver. Can be disabled in the BIOS. |
+| Wireless | Yes | The Intel AC 9260 802.11ac card is supported by the [iwm](http://man.openbsd.org/iwm.4) driver. It works on both 2.4 and 5GHz channels. |
diff --git a/content/garden/laptops-i-might-like.md b/content/garden/laptops-i-might-like.md
@@ -6,8 +6,8 @@ Summary: Laptops I Might Like
The most important factor that I look at when judging a laptop is its build
quality. I don't want a laptop that feels cheap with a wobbly screen, flexible
or creaky chassis, terrible trackpad or keyboard, loud fans, etc. That's more
-important to me than performance. I also prefer a screen between ~12" and ~13"
-large and with a 16:10 or 3:2 aspect ratio.
+important to me than performance. I also prefer a screen size between ~12" and
+~13" and with a 16:10 or 3:2 aspect ratio.
I would like a laptop that is thin, light, and has a relatively small
footprint. I really don't need a lot of performance (plus, I would prefer
diff --git a/content/garden/openbsd-desktop.md b/content/garden/openbsd-desktop.md
@@ -5,7 +5,6 @@ Summary: OpenBSD on the Desktop
[← Back](./)
-
Random things that I want to make note of. Usually small tutorial snippets
## Multimedia
@@ -72,3 +71,6 @@ will tell this invocation of mumble to play audio through the audio1 device but
[https://arlimus.github.io/articles/usepam/](https://arlimus.github.io/articles/usepam/)
+## Documentation
+
+* [How good is OpenBSD Documentation, actually?](https://www.youtube.com/watch?v=NQQ5uD5x8vzg)
diff --git a/content/garden/openbsd-router.md b/content/garden/openbsd-router.md
@@ -5,14 +5,6 @@ Summary: OpenBSD Router
[← Back](./)
-
-The machine is a Dell Optiplex 3010 SFF PC with the following specs:
-
-* CPU: i5-3470 @ 3.20GHz (4C/4T)
-* RAM: 4+4GB DDR3
-* Storage: 120GB Crucial SSD
-* Networking: 2x1GbE PCIe Ethernet Card
-
There are three major software components to this router:
* DHCP - dhcpd
@@ -168,3 +160,16 @@ interface "em0" {
ignore domain-name-servers;
}
```
+
+## Monitoring
+
+Live monitoring of bandwidth on a given interface is accomplished using this
+command ([thanks
+[Solène](https://dataswamp.org/~solene/2019-07-19-ttyplot-netstat-openbsd.html)):
+
+```
+netstat -b -w 1 -I em0 | awk 'NR>3 { print $1/1024; print $2/1024; fflush }' | ttyplot -2 -t "IN/OUT Bandwidth in KB/s" -u "KB/s" -c "#"
+```
+
+Where `em0` can be replaced by any interface to view the bandwidth traversing
+that interface.
diff --git a/content/garden/openbsd-server-setup.md b/content/garden/openbsd-server-setup.md
@@ -5,7 +5,6 @@ Summary: OpenBSD Server Setup
[← Back](./)
-
Everything on this page is common to all OpenBSD servers I set up.
## Initial Boot
diff --git a/content/index.md b/content/index.md
@@ -20,6 +20,7 @@ I blog mostly about technology and computing. I also took part in
[#100DaysToOffload](http://100daystooffload.com/) in 2020. Here are a few of my
favourites:
+* [OpenBSD on the Dell XPS 13 9380](blog/openbsd-on-the-dell-xps-13-9380)
* [Free Software is an Abject Failure](blog/free-software-is-an-abject-failure)
* [Why IRC is Still Good in $CURRENT_YEAR](blog/why-irc-is-still-good)
* [Why Email is the Best Discussion Platform](blog/why-email-is-the-best-discussion-platform)
@@ -28,7 +29,6 @@ favourites:
* [The Joys of Old Tech](blog/the-joys-of-old-tech)
* [A Month-and-a-Half of Self-Hosted Email](blog/a-month-and-a-half-of-self-hosted-email)
* [Are TODO Applications a Waste of Time?](blog/are-todo-applications-a-waste-of-time)
-* [Why I Hate The Term “Modern”](blog/why-i-hate-the-term-modern)
## About This Site
diff --git a/content/uses.md b/content/uses.md
@@ -103,21 +103,26 @@ but, alas, only laptop-land gets such privileges.
[PCPartPicker build list](https://ca.pcpartpicker.com/user/Nescio_/saved/MjYcxr).
-### Laptop
+### Laptops
-I currently use a 2009 MacBook Pro (model A1278) with the following specs:
+I use a [Dell XPS 13 9380](/blog/openbsd-on-the-dell-xps-13-9380) with an Intel
+i7-8665U, 16GB of RAM, a 256GB NVMe SSD, and a 13.3" 1080p touchscreen display.
+This runs OpenBSD.
-* **CPU:** Intel Core 2 Duo P7550
-* **RAM:** 8GB DDR3 @ 1066 MT/s
-* **GPU:** NVIDIA GeForce 9400M
-* **Storage:** Crucial 250GB SATA SSD
-* **Screen:** 13" 1280x800 TFT LCD
+I also have a 2009 MacBook Pro (model A1278) with an Intel Core 2 Duo P7550,
+8GB of RAM, an NVIDIA GeForce 9400M, a 250GB SATA SSD, and a 13.3" 1280x800
+display. This runs Fedora Linux because of the NVIDIA GPU.
+
+I have a pair of 2008-era Toshiba netbooks both with an Intel Core 2 Duo U9300,
+2GB of RAM, a 160GB HDD, and a 12.1" 1280x800 display. These run various
+operating systems such as OpenBSD, 9Front, and I did get one to boot SerenityOS
+but then the kernel panicked.
The most important factor that I look at when judging a laptop is its build
quality. I don't want a laptop that feels cheap with a wobbly screen, flexible
or creaky chassis, terrible trackpad or keyboard, loud fans, etc. That's more
-important to me than performance. I also prefer a screen between ~12" and ~13"
-large and with a 16:10 or 3:2 aspect ratio.
+important to me than performance. I also prefer a screen size between ~12" and
+~13" and with a 16:10 or 3:2 aspect ratio.
### Phone
@@ -149,3 +154,4 @@ using PCIe cards.
A Dell Optiplex 3020 MT with an i3-4150 and 6GB of RAM running OpenBSD acts as
my [file server](/garden/openbsd-nas) running Syncthing and handling backups of
all data synced to it.
+
diff --git a/static/img/xps/xps-keyboard.jpg b/static/img/xps/xps-keyboard.jpg
Binary files differ.
diff --git a/static/img/xps/xps-open-on.jpg b/static/img/xps/xps-open-on.jpg
Binary files differ.
diff --git a/static/img/xps/xps.jpg b/static/img/xps/xps.jpg
Binary files differ.
diff --git a/templates/header.html b/templates/header.html
@@ -7,7 +7,7 @@
<link rel="alternate" type="application/rss+xml" title="RSS feed" href="/feed.xml">
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABX1BMVEUAAAABAAAAAAAAAAAAAAAAAAAAAAC7amoAAABlPz8AAAAAAAAGAwMAAAAAAAAAAAC7d3cKBwe7d3e7d3eWX1/ny4+WX18CAQGHVlaTXl4BAAApGhpiPj7ny4/ny4/oy4/ozI/qz5Ona2u7d3d4TEzny48MCAhlQEC7d3e7d3cAAAAAAAC7d3e8d3cAAAC8d3fnzI+8dnYAAADpzJC9eHjny4+WX1+TXV13S0u7d3fny492S0vnzI/ny4+EU1PnzI8mFxe7d3cjFhZgPT3ny5AAAAC7d3fny4+7d3cAAADozJC6d3e7d3cAAADozI/my5Dny44AAAAAAAC7d3e4d3fkx5DpzY69c3O7d3eoamroy4+FVVWEVFR0Skq7d3e7d3e8d3cAAAC6eHi7eHi7eHi8dna8dnYAAADozJAAAADkyY28eXnqyJHqzY63eHi/dXXny48AAAC7d3e5dXW2dHSjLYEdAAAAcHRSTlMA9cj58gYaBOrflhjq44MI/ePbaP348u/u6Oba1sW+oosL/Pbv7ejnyLuXlI54RkM8Oy4iG/v38efl4ODf2tfT09LQz87FwbeimJeJf397ZUlIRTQvGxYP9/Xv4ODZz86yk4JxYlRQSjctJiYlJCAYM3tXUgAAAg1JREFUOMttk1V3ImEQRO8MQ3CChACBIHF3l427+7q7Tjfz/88+sNhk67Vuf3K6CuryXo2Yfo/HbwYnvDxW25EldVnBNpfdHjVErO2dJ9nsk51tS8SItreMmyLxV46qakxVndW4iNl0yExEjHxFEyfTcz7f3PT7La0EDInM1PxQRMJZTSQbE5OvtbNLuv6d0W5K1zM99DXf6RvTnrCY1XdExcjqKcD9RbFQKF7cAyS105AoQJsheT0EyqWUbdu2badKZeBEA2KFgCOJVxI+uNu169q9A4YqAxIEryWr+hnKG3aTNsowrX2S9vJFLGcLOLZbdAwMO4ZMMCKbegq/5luB+VlIak6CmJLXGzi3XTqHOQ2IiV9e6gMU3EABeJoRPx7p7AXW3cA6kOgQTw1YcwNrNcAvL/QBut1AN9CbET+m5PUWSm6gBH90UEyCsqnjMOUGvsJHzckoV2I4Q8BBq38AvHUMucZryZJOwmx/s98/C7exPkl7YUTilTc+mHre5E8Bw5UBGa2uO6BjwPf6T7p/AuM6WF03UTEWNQlwWVxJpVaKlwCfYgseOatFLtyjYy2RYzzWE5Y9byO0izo02bBv9nUhXA9tNfaBiu5/+OED3+/ksFYGPRL55irOkqOqy8sxVadvQGQv9Kh6Ri6Q6ejIBHKGiHXmLnAomG6UNz0a+k+/vRPBav3fXTdN/wUXrszXABeiEwAAAABJRU5ErkJggg==">
<title></title>
-<style>body{background-color:#fcfcfc;color:#111;line-height:1.4em;max-width:38em;margin:auto;padding-bottom:3em;font-family:"IBM Plex Serif", serif}header{text-align:center;margin:0.7em;font-size:2em;font-weight:bold}h1{font-style:oblique;margin-bottom:0;font-size:1.7em}h2,h3,h4,h5,h6{margin:1.5em 0 -0.3em;line-height:1.1em}nav{text-align:center}nav a{padding:0 0.5em;font-size:1.1em;font-weight:bold;text-decoration:none}nav a:hover{text-decoration:underline}a,nav a:visited{color:#134799}a:hover{text-decoration:none}a:visited{color:#551a8b}article a[href^="http"]:where(:not([href*="paritybit.ca/"]))::after{content:"︎↗"}figure a::after{content:""!important}img,video{max-width:100%}figcaption{text-align:center}blockquote{border-left:3px solid #134799;padding-left:0.5em}summary:hover{cursor:pointer;background-color:#ddd}table{width:100%;text-align:left}table,td,th{border-collapse:collapse;margin-top:1em;padding:2px 4px;vertical-align: top}th{background-color:#ddd}tr:nth-child(even){background-color:#eee}pre{background-color:#ddd;overflow:auto;padding:0.5em;border:1px black solid}code{background-color:#ddd;font-family:"IBM Plex Mono", monospace;font-size:0.9em}.note{border:3px solid #134799;padding:10px 15px}figcaption,.date{font-size:smaller;color:#565151}#icons{float:right}@media print{pre{white-space:pre-wrap}nav{display:none}}@media only screen and (max-width: 700px){body{max-width:90%}#icons{float:none}}</style>
+<style>body{background-color:#fcfcfc;color:#111;line-height:1.4em;max-width:38em;margin:auto;padding-bottom:3em;font-family:"IBM Plex Serif", serif}header{text-align:center;margin:0.7em;font-size:2em;font-weight:bold}h1{font-style:oblique;margin-bottom:0;font-size:1.7em}h2,h3,h4,h5,h6{margin:1.5em 0 -0.3em;line-height:1.1em}nav{text-align:center}nav a{padding:0 0.5em;font-size:1.1em;font-weight:bold;text-decoration:none}nav a:hover{text-decoration:underline}a,nav a:visited{color:#134799}a:hover{text-decoration:none}a:visited{color:#551a8b}article a[href^="http"]:where(:not([href*="paritybit.ca/"]))::after{content:"︎↗"}figure a::after{content:""!important}img,video{max-width:100%}figcaption{text-align:center}blockquote{border-left:3px solid #134799;padding-left:0.5em}summary:hover{cursor:pointer;background-color:#ddd}table{width:100%;text-align:left}table,td,th{border-collapse:collapse;border:1px solid #ddd;margin-top:1em;padding:2px 4px;vertical-align: top}th{background-color:#ddd}tr:nth-child(even){background-color:#eee}pre{background-color:#ddd;overflow:auto;padding:0.5em;border:1px black solid}code{background-color:#ddd;font-family:"IBM Plex Mono", monospace;font-size:0.9em}.note{border:3px solid #134799;padding:10px 15px}figcaption,.date{font-size:smaller;color:#565151}#icons{float:right}@media print{pre{white-space:pre-wrap}nav{display:none}}@media only screen and (max-width: 700px){body{max-width:90%}#icons{float:none}}</style>
</head>
<body>
<header>paritybit.ca</header>