# Third-party material

Everything from outside this repository that the site ships or loads, sorted by licence into four blocks: CC0, CC-BY, MIT / ISC, OFL. Only these licences are allowed. Every entry names its author, its source URL and its licence. `tests/unit/licenses.test.js` checks that each folder in `public/models/` and each file or folder in `public/js/vendor/` has an entry here. This file stays at `public/js/vendor/LICENSES.md`.

## CC0

Public domain dedication (https://creativecommons.org/publicdomain/zero/1.0/). No credit is required; the author and source are recorded anyway. Models are the CC0 glTF files in `public/models/` (see `public/models/README.md` and `docs/assets.md` for what was changed and which species use them).

### kaykit-forest: KayKit Forest Nature Pack 1.0 (FREE)

- Folder: `public/models/kaykit-forest/` (the pack's glTF folder, unchanged)
- Author: Kay Lousberg, https://www.kaylousberg.com
- Source: https://kaylousberg.itch.io/kaykit-forest (also https://kaylousberg.com/game-assets/forest-nature-pack)
- License: CC0 1.0 Universal, https://creativecommons.org/publicdomain/zero/1.0/ ("free to use in personal, educational and commercial projects"; crediting is not mandatory). The pack's own notice is `public/models/kaykit-forest/License.txt`.

### quaternius: animal, fish and mushroom models by Quaternius

- Folder: `public/models/quaternius/` (14 models, listed below: 10 for the forest, and the sea urchin, mackerel, shark and whale of the /chase sea, v5)
- Author: Quaternius, https://quaternius.com (support page https://www.patreon.com/quaternius)
- License: CC0 1.0 Universal, https://creativecommons.org/publicdomain/zero/1.0/. Checked on 2026-10-10 on each model's page (it shows the author "Quaternius" and the licence "CC0 1.0", marked "Public Domain (CC0)") and on the pack page https://quaternius.com/packs/ultimateanimatedanimals.html ("CC0", free for personal and commercial projects).
- Source: the glb of each model from poly.pizza, converted from the author's FBX by FBX2glTF (the sea ones from the packs named in the table, downloaded 2026-10-16). We split it into `.gltf` + `.bin` + texture with `scripts/split-glb.mjs` and dropped the duplicate animation clips the conversion adds. Meshes, materials and clips are otherwise unchanged. Colours and sizes are changed only at run time, by the renderer.

| File | Model page |
| --- | --- |
| `Deer.gltf` | https://poly.pizza/m/T6Cs7tmMHJ |
| `Fox.gltf` | https://poly.pizza/m/Bc97C66HKi |
| `Bunny.gltf` | https://poly.pizza/m/irZjWFARyl |
| `Spider.gltf` | https://poly.pizza/m/yRYJiAJyiM |
| `Snake.gltf` | https://poly.pizza/m/x9x0viZs8V |
| `Frog.gltf` | https://poly.pizza/m/9Z2V8fpazF |
| `Rat.gltf` | https://poly.pizza/m/iltq5bVNaV |
| `Cat.gltf` | https://poly.pizza/m/qKICY6xla2 |
| `Bird.gltf` | https://poly.pizza/m/gYYC0gYMnw |
| `Mushroom.gltf` | https://poly.pizza/m/db1tjMhmiA |
| `SeaUrchin.gltf` | https://poly.pizza/m/uYSDAQuNT9 ("Sea Urchin", Modular Sushi Restaurant Kit) |
| `Mackerel.gltf` | https://poly.pizza/m/uassUTYYae ("Fish Mackerel", Pirate Kit) |
| `Shark.gltf` | https://poly.pizza/m/AyHTK3zUSG ("Shark", Animated Fish Pack) |
| `Whale.gltf` | https://poly.pizza/m/JGFwp6xWgk ("Whale", Animated Fish Pack) |

### quaternius-vol2: Eagle from "Animated Animales Low Poly" (Animal Pack Vol.2) by Quaternius

- Folder: `public/models/quaternius-vol2/` (`Eagle.gltf` + `Eagle.bin`, no texture)
- Author: Quaternius, https://quaternius.com
- Source: https://opengameart.org/content/animated-animales-low-poly (file `Animal Pack Vol.2 by @Quaternius.zip`, downloaded 2026-10-13)
- License: CC0 1.0 Universal, https://creativecommons.org/publicdomain/zero/1.0/ (stated on the source page)
- Changed: the pack's `FBX/Eagle.fbx` was converted to glTF with Blender 5.2 (FBX import, glTF export with both actions as clips `Flying` and `Idle`). The FBX holds the mesh with two levels of smoothing applied (24,800 triangles); Blender's decimate "un-subdivide" (4 iterations) took it back to 1,780 triangles, keeping the skin weights. Then split with `scripts/split-glb.mjs`. Colours and sizes are changed only at run time (the /chase sparrow, great tit and hawk, `public/js/chase/looks.js`).

### gobkit: Rooster from the Gobkit Free Bird Pack

- Folder: `public/models/gobkit/` (`Rooster.gltf` + `Rooster.bin` + `Rooster_texture.png`, and the pack's own notice `LICENSE.txt`)
- Author: Gobkit, https://gobkit.com
- Source: https://gobkit.com/freebies (file `gobkit-birds-pack.zip`, https://gobkit.com/freebies/birds/gobkit-birds-pack.zip, downloaded 2026-10-13)
- License: CC0 1.0 Universal, https://creativecommons.org/publicdomain/zero/1.0/ (the pack's `LICENSE.txt` and `README.txt`, and the freebies page: "CC0 1.0 Universal — public domain", "no attribution required")
- Changed: `Rooster.glb` split with `scripts/split-glb.mjs` (mesh, skin, the four clips `idle`, `attack`, `dead`, `walk` unchanged; the texture is the pack's shared colour atlas `Texture001.png`, byte for byte). Painted as a male pheasant, its tail bone lengthened and resized only at run time (the /chase pheasant, `public/js/chase/looks.js`).

### kenney: Mussel Open from the Kenney Food Kit

- Folder: `public/models/kenney/` (`Mussel.gltf` + `Mussel.bin`, no texture)
- Author: Kenney, https://kenney.nl
- Source: "Mussel Open", https://poly.pizza/m/eWHAc3Pq8z (from the Food Kit, https://kenney.nl/assets/food-kit), the glb downloaded 2026-10-16
- License: CC0 1.0 Universal, https://creativecommons.org/publicdomain/zero/1.0/ (the model page: "Public Domain (CC0)")
- Changed: split with `scripts/split-glb.mjs` (mesh and both materials unchanged). The /chase sea clam (v5).

## CC-BY

Attribution required: each entry needs the title, the author, the licence link and the source URL, and must say what was changed. (Poly by Google models on poly.pizza are CC-BY 3.0: the forest left them out, the sea uses one, "Kelp", by the decision of spec v5 V11.) The pages that show these models credit them too: `/chase` lists `public/js/chase/credits.js` under '그림 출처', and the privacy page names them in section 7 (`tests/unit/chase/credits.test.js` keeps the three in step).

### sketchfab: animals and plants from Sketchfab

- Folder: `public/models/sketchfab/` (the 13 models below: two for the forest, eleven for the sea)
- All were downloaded by the site owner from Sketchfab as glTF (forest 2026-10-13, sea 2026-10-16). We packed each `scene.gltf` + `scene.bin` + textures into one `.glb` and split it again with `scripts/split-glb.mjs` (same layout as the other folders); meshes, skins and clips are unchanged unless the table says otherwise. Colours and sizes are changed at run time by `/chase` (`public/js/chase/looks.js`: `LOOKS` for the forest, `SEA_LOOKS` for the sea).

| File | Title | Author | Source | License | Changes |
| --- | --- | --- | --- | --- | --- |
| `Tanuki.gltf` (+ `Tanuki.bin`, `Tanuki_texture.png`) | "Low Poly Tanuki - Animated" | LtTim, https://sketchfab.com/LtTim | https://sketchfab.com/3d-models/low-poly-tanuki-animated-3beae376b5de415f95e6df638c0f4cda | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | The texture was the material's emissive map; it is now its base colour map (same picture). Recoloured (grey-brown coat, dark legs) and resized at run time. |
| `Mole.gltf` (+ `Mole.bin`, `Mole_texture.jpg`) | "Low Poly Mole" | lexferreira89, https://sketchfab.com/lexferreira89 | https://sketchfab.com/3d-models/low-poly-mole-d75b364f42db47789f0e89047ea5651d | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Recoloured (brown-grey fur), laid on its belly and resized at run time. |
| `Plankton.gltf` (+ `Plankton.bin`) | "Phytoplankton and sediment." | wireframe, https://sketchfab.com/elliottebbs | https://sketchfab.com/3d-models/phytoplankton-and-sediment-f697f93ae3e04376a8943eb1983f192e | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | In Blender 5.2: kept the seven plankton cells only (removed the sediment, the arrows, the camera and the clip `Take 001`), moved the cells closer together (their distances to the middle × 0.45), joined them into one mesh, collapsed edges (5,456 → 494 triangles) and gave the two plankton materials opaque flat colours (green, cyan) in place of the see-through ones. |
| `SeaWeed.gltf` (+ `SeaWeed.bin`) | "Sea Weed" | rkuhlf, https://sketchfab.com/rkuhlf | https://sketchfab.com/3d-models/sea-weed-d97c596b189845b681cc8eef8a3ab429 | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged file (the /chase sea kelp, 다시마); resized at run time. As the sea's big kelp stalks (obstacles, 큰 다시마 줄기) it is also grown three to four times as tall and recoloured dark brown-olive at run time. |
| `Shrimp.gltf` (+ `Shrimp.bin`, `Shrimp_texture.jpg`) | "Shrimp [Low Poly]" | Fecalis, https://sketchfab.com/vpvlolhyk | https://sketchfab.com/3d-models/shrimp-low-poly-652650059ff949b39bbed3bfc34d5e87 | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged; resized at run time. |
| `Sardine.gltf` (+ `Sardine.bin`, `Sardine_texture.png`) | "Sardine Swim" | Drake, https://sketchfab.com/dlp14c | https://sketchfab.com/3d-models/sardine-swim-1c006b4427184eaba81d95d55ccf343b | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | The normal map and the attributes /chase never reads (tangents, the second to fourth UV sets) were removed; the base colour picture was scaled from 1024² to 512². Mesh, skin and clip unchanged. The /chase sea anchovy; resized at run time. |
| `Squid.gltf` (+ `Squid.bin`) | "Squid" | rkuhlf, https://sketchfab.com/rkuhlf | https://sketchfab.com/3d-models/squid-d3b3ded242cf4abc95f2f734b5a9b3d6 | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged in the file; recoloured at run time (a pale peach, so it is not taken for the red octopus) and resized. |
| `JackMackerel.gltf` (+ `JackMackerel.bin`, `JackMackerel_texture.jpg`) | "Ставрида атлантична" | faerbogdan99, https://sketchfab.com/faerbogdan99 | https://sketchfab.com/3d-models/b5ba4a38abb6400da9a21b5430561bff | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | In Blender 5.2: edges collapsed (decimate, UVs kept) from 21,950 to 2,000 triangles; the colour picture scaled from 2048² to 512². The /chase sea jack mackerel: at run time its photo-like colours are replaced by flat colours by height (a blue-green back, a pale band, a silver belly), and it is resized. |
| `Starfish.gltf` (+ `Starfish.bin`) | "Star Fish" | rkuhlf, https://sketchfab.com/rkuhlf | https://sketchfab.com/3d-models/star-fish-6fac7eeb54f2474296a0c473214d44c1 | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged; resized at run time. |
| `Octopus.gltf` (+ `Octopus.bin`) | "Octopus" | rkuhlf, https://sketchfab.com/rkuhlf | https://sketchfab.com/3d-models/octopus-f9c0186d5ac54bcfada2b6113de40ede | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged; resized at run time. |
| `Seagull.gltf` (+ `Seagull.bin`) | "Low-Poly Seagull (with Animation & Rigged)" | simonaskLDE, https://sketchfab.com/simonaskLDE | https://sketchfab.com/3d-models/low-poly-seagull-with-animation-rigged-985024328902444c8270c0f09acc897e | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged; resized at run time. |
| `Neophocaena.gltf` (+ `Neophocaena.bin`) | "Neophocaena" | blackleo077, https://sketchfab.com/blackleo077 | https://sketchfab.com/3d-models/neophocaena-66810258aa5346b19fc1e8f895ad9468 | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged (the /chase sea finless porpoise, 상괭이); resized at run time. |
| `Seal.gltf` (+ `Seal.bin`) | "Seal" | rkuhlf, https://sketchfab.com/rkuhlf | https://sketchfab.com/3d-models/seal-0616281841b44983b1c113b578c0f0ce | CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ | Unchanged; resized at run time. |

Credit lines as the authors ask: This work is based on "Low Poly Tanuki - Animated" (https://sketchfab.com/3d-models/low-poly-tanuki-animated-3beae376b5de415f95e6df638c0f4cda) by LtTim (https://sketchfab.com/LtTim) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Low Poly Mole" (https://sketchfab.com/3d-models/low-poly-mole-d75b364f42db47789f0e89047ea5651d) by lexferreira89 (https://sketchfab.com/lexferreira89) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Phytoplankton and sediment." (https://sketchfab.com/3d-models/phytoplankton-and-sediment-f697f93ae3e04376a8943eb1983f192e) by wireframe (https://sketchfab.com/elliottebbs) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Sea Weed" (https://sketchfab.com/3d-models/sea-weed-d97c596b189845b681cc8eef8a3ab429) by rkuhlf (https://sketchfab.com/rkuhlf) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Shrimp [Low Poly]" (https://sketchfab.com/3d-models/shrimp-low-poly-652650059ff949b39bbed3bfc34d5e87) by Fecalis (https://sketchfab.com/vpvlolhyk) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Sardine Swim" (https://sketchfab.com/3d-models/sardine-swim-1c006b4427184eaba81d95d55ccf343b) by Drake (https://sketchfab.com/dlp14c) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Squid" (https://sketchfab.com/3d-models/squid-d3b3ded242cf4abc95f2f734b5a9b3d6) by rkuhlf (https://sketchfab.com/rkuhlf) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Ставрида атлантична" (https://sketchfab.com/3d-models/b5ba4a38abb6400da9a21b5430561bff) by faerbogdan99 (https://sketchfab.com/faerbogdan99) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Star Fish" (https://sketchfab.com/3d-models/star-fish-6fac7eeb54f2474296a0c473214d44c1) by rkuhlf (https://sketchfab.com/rkuhlf) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Octopus" (https://sketchfab.com/3d-models/octopus-f9c0186d5ac54bcfada2b6113de40ede) by rkuhlf (https://sketchfab.com/rkuhlf) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Low-Poly Seagull (with Animation & Rigged)" (https://sketchfab.com/3d-models/low-poly-seagull-with-animation-rigged-985024328902444c8270c0f09acc897e) by simonaskLDE (https://sketchfab.com/simonaskLDE) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Neophocaena" (https://sketchfab.com/3d-models/neophocaena-66810258aa5346b19fc1e8f895ad9468) by blackleo077 (https://sketchfab.com/blackleo077) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). This work is based on "Seal" (https://sketchfab.com/3d-models/seal-0616281841b44983b1c113b578c0f0ce) by rkuhlf (https://sketchfab.com/rkuhlf) licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/).

### poly-google: Kelp by Poly by Google

- Folder: `public/models/poly-google/` (`Kelp.gltf` + `Kelp.bin` + `Kelp_texture.png`)
- The glb downloaded from poly.pizza (2026-10-16) and split with `scripts/split-glb.mjs`; mesh, material and texture unchanged. The /chase sea brown seaweed (미역); resized at run time.

| File | Title | Author | Source | License | Changes |
| --- | --- | --- | --- | --- | --- |
| `Kelp.gltf` (+ `Kelp.bin`, `Kelp_texture.png`) | "Kelp" | Poly by Google, https://poly.pizza/u/Poly%20by%20Google | https://poly.pizza/m/4cFllH6Iazk | CC BY 3.0, https://creativecommons.org/licenses/by/3.0/ | Unchanged; resized at run time. |

Credit line: This work is based on "Kelp" (https://poly.pizza/m/4cFllH6Iazk) by Poly by Google (https://poly.pizza/u/Poly%20by%20Google) licensed under CC-BY-3.0 (https://creativecommons.org/licenses/by/3.0/), via Poly Pizza.

## MIT / ISC

Copyright and permission notices must stay with the copies. The full text is kept in each entry or in the file named there.

### socket.io-client 4.8.4

Real-time connection of the teacher and student screens to the rt server (spec: no CDN, the
client is kept here at the same version as the server's `socket.io`).

- File: `socket.io-4.8.4.esm.min.js`: copy of `dist/socket.io.esm.min.js` from the npm package `socket.io-client@4.8.4`, with only its last line `//# sourceMappingURL=socket.io.esm.min.js.map` removed (the source map is not copied, so the line would point at a missing file). The code is unchanged.
- Source: https://github.com/socketio/socket.io
- SHA-256 of this file: `3d2279dfc6e6343c212541f27575e3385fcc388c07d24eec47f969743753c40c` (the package's original file: `771c3872e7d9bf81020615fda67ef0fd2aa61fcaf1990100714a46fa2c39f8a1`)
- License: MIT

```
Copyright (c) 2014-present Guillermo Rauch and Socket.IO contributors

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:

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
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.
```


### qrcode-generator 2.0.4

QR code of the join address on the teacher's waiting screen (T15). Drawn in the browser, no
outside QR service.

- File: `qrcode-generator-2.0.4.js`: unmodified copy of `dist/qrcode.mjs` from the npm package `qrcode-generator@2.0.4`.
- Source: https://github.com/kazuhikoarase/qrcode-generator
- SHA-256 of this file (same as the package's file): `ea91d7118a5395289170da848b7c6758b996163bfbccf312591ab65a4911b7c0`
- License: MIT

```
Copyright (c) 2009 Kazuhiko Arase

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:

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
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 word "QR Code" is a registered trademark of DENSO WAVE INCORPORATED.


### three.js 0.185.1

3D world of the student screen (spec.md tech stack, design.md section 0). Imported by path, never by the bare
name `three` and never through an import map (an import map is an inline script, CSP).

- Files: `three-0.185.1.core.min.js` and `three-0.185.1.module.min.js`, copies of
  `build/three.core.min.js` and `build/three.module.min.js` from the npm package `three@0.185.1`.
  The core file is unchanged. In the module file only its import path `./three.core.min.js` is
  renamed to `./three-0.185.1.core.min.js` (twice); the code is unchanged.
- Why 0.185.1 and not 0.186.x: the npm package stopped shipping minified builds in 0.186.0
  (only `three.module.js` + `three.core.js`, about 420KB gzip). 0.185.1 is the newest release
  with the project's own minified builds (about 187KB gzip for both files).
- Source: https://github.com/mrdoob/three.js
- SHA-256 of `three-0.185.1.core.min.js` (same as the package's file): `05b2609338c76cd65daf74f3ac515bc9a5045e1b3b33edc07d8c9bd55250fa90`
- SHA-256 of `three-0.185.1.module.min.js`: `79ab030658a1802ca2ba72ed015c125d1eec30179bd0d2e22a77f72a2bfada3c` (the package's original file: `86bcee248b64f44bcfc23c331ae74619061957d59cab040171dcb6fb5900beb6`)
- License: MIT, full text in `LICENSE-three.txt` (copy of the package's `LICENSE`)


### three.js addons 0.185.1 (`three-addons-0.185.1/`)

glTF models of the /chase 3D scene (`public/js/island/loader.js`, `public/js/chase/scene/`): `GLTFLoader.js`, and the two helpers it imports, `BufferGeometryUtils.js` and `SkeletonUtils.js`.

- Files: copies of `examples/jsm/loaders/GLTFLoader.js`, `examples/jsm/utils/BufferGeometryUtils.js`, `examples/jsm/utils/SkeletonUtils.js` and `examples/jsm/modifiers/SimplifyModifier.js` (T25: low-detail still animals) from the npm package `three@0.185.1` (the same version as `three-0.185.1.module.min.js`). Changed only so they load without an import map: `from 'three'` is now `from '../three-0.185.1.module.min.js'`, the helper imports (`../utils/BufferGeometryUtils.js`, `./SkeletonUtils.js`) point to `./`, and the doc-comment lines starting with `@three_import` (usage examples) are removed. The code is otherwise unchanged.
- Source: https://github.com/mrdoob/three.js
- License: MIT (the same as three.js, see `LICENSE-three.txt`)


## OFL

SIL Open Font License 1.1. Fonts are served from this site (`public/fonts/`), never from an outside address.

### Jua and Pretendard: fonts in `public/fonts/`

- Jua (Woowahan Brothers, via Google Fonts, https://fonts.google.com/specimen/Jua) as `Jua-Regular.subset.woff2`, and Pretendard (Kil Hyung-jin, https://github.com/orioncactus/pretendard) as the renamed derivative Eco Sans, `EcoSans.subset.woff2`.
- License: SIL OFL 1.1. The licence texts are `public/fonts/OFL-Jua.txt` and `public/fonts/OFL-Pretendard.txt`; the rename (Reserved Font Name) is explained in `public/fonts/NOTICE-EcoSans.txt`.
