Update project configuration and documentation: set version in package.json, enhance spec.md with canvas feature details, add credits URL in zola.toml, and improve footer layout in base.html. Remove unused static files including 404.html, index.html, main.css, robots.txt, site.webmanifest, and sitemap.xml.
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 Open Free Books 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.
|
||||
4
content/credits.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
+++
|
||||
title = "Credits"
|
||||
template = "credits.html"
|
||||
+++
|
||||
82
data/credits.json
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
{
|
||||
"intro": "Open Free Books uses the open source libraries below (in alphabetical order—we try!).",
|
||||
"contributors_note": "Textbook authors and maintainers are listed on the homepage.",
|
||||
"project": {
|
||||
"name": "Open Free Books",
|
||||
"version": "0.0.1",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/hananoshikayomaru/openfreebooks/blob/main/LICENSE",
|
||||
"copyright": "Copyright (c) 2026 Open Free Books contributors",
|
||||
"url": "https://openfreebooks.org"
|
||||
},
|
||||
"libraries": [
|
||||
{
|
||||
"name": "Bun",
|
||||
"version": "1.3.10",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/oven-sh/bun/blob/main/LICENSE.md",
|
||||
"copyright": "Copyright (c) Oven-sh",
|
||||
"url": "https://bun.sh"
|
||||
},
|
||||
{
|
||||
"name": "Sass",
|
||||
"version": "1.89.x",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/sass/dart-sass/blob/main/LICENSE",
|
||||
"copyright": "Copyright (c) Google Inc. and contributors",
|
||||
"url": "https://sass-lang.com"
|
||||
},
|
||||
{
|
||||
"name": "Solid.js",
|
||||
"version": "1.9.13",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/solidjs/solid/blob/main/LICENSE",
|
||||
"copyright": "Copyright (c) 2016-2025 Ryan Carniato",
|
||||
"url": "https://www.solidjs.com"
|
||||
},
|
||||
{
|
||||
"name": "TypeScript",
|
||||
"version": "5.9.3",
|
||||
"license": "Apache License 2.0",
|
||||
"license_url": "https://github.com/microsoft/TypeScript/blob/main/LICENSE.txt",
|
||||
"copyright": "Copyright (c) Microsoft Corporation",
|
||||
"url": "https://www.typescriptlang.org"
|
||||
},
|
||||
{
|
||||
"name": "Vite",
|
||||
"version": "6.4.2",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/vitejs/vite/blob/main/LICENSE",
|
||||
"copyright": "Copyright (c) 2019-present VoidZero Inc. and Vite contributors",
|
||||
"url": "https://vite.dev"
|
||||
},
|
||||
{
|
||||
"name": "vite-plugin-solid",
|
||||
"version": "2.11.12",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/solidjs/vite-plugin-solid/blob/main/LICENSE",
|
||||
"copyright": "Copyright (c) 2021-present SolidJS contributors",
|
||||
"url": "https://github.com/solidjs/vite-plugin-solid"
|
||||
},
|
||||
{
|
||||
"name": "Zola",
|
||||
"version": "0.22.1",
|
||||
"license": "MIT",
|
||||
"license_url": "https://github.com/getzola/zola/blob/master/LICENSE",
|
||||
"copyright": "Copyright (c) 2017-present Vincent Prouillet and contributors",
|
||||
"url": "https://www.getzola.org"
|
||||
}
|
||||
],
|
||||
"hosting": [
|
||||
{
|
||||
"name": "Cloudflare",
|
||||
"url": "https://www.cloudflare.com",
|
||||
"note": "Static site hosting, CDN, and deploy (Workers & Wrangler)"
|
||||
},
|
||||
{
|
||||
"name": "GitHub",
|
||||
"url": "https://github.com/hananoshikayomaru/openfreebooks",
|
||||
"note": "Code hosting"
|
||||
}
|
||||
]
|
||||
}
|
||||
34
data/credits.types.ts
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/** Credits page data (`data/credits.json`). */
|
||||
|
||||
export interface CreditProject {
|
||||
name: string;
|
||||
version: string;
|
||||
license: string;
|
||||
license_url: string;
|
||||
copyright: string;
|
||||
url?: string;
|
||||
}
|
||||
|
||||
export interface CreditLibrary {
|
||||
name: string;
|
||||
version: string;
|
||||
license: string;
|
||||
license_url?: string;
|
||||
copyright: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface CreditHosting {
|
||||
name: string;
|
||||
version?: string;
|
||||
url: string;
|
||||
note: string;
|
||||
}
|
||||
|
||||
export interface CreditsFile {
|
||||
intro: string;
|
||||
contributors_note: string;
|
||||
project: CreditProject;
|
||||
libraries: CreditLibrary[];
|
||||
hosting: CreditHosting[];
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"name": "openfreebooks",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
|
|
|||
4
spec.md
|
|
@ -4,4 +4,6 @@ this project is free internet textbooks for elementary schools to university stu
|
|||
|
||||
this project is build using zola. interactivity by solid js. deployed to cloudflare.
|
||||
|
||||
canvas feature use jsoncanvas standard by Obsidian.
|
||||
canvas feature use [jsoncanvas](https://jsoncanvas.org/spec/1.0/) standard by Obsidian. Viewer is [JSON canvas viewer](https://github.com/Hesprs/JSON-Canvas-Viewer).
|
||||
|
||||
not markdown, html based. but in every page, we should have a copy as md button using [defuddle](https://github.com/kepano/defuddle).
|
||||
3
static/icons/social/ATTRIBUTION.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
Social icons are from [Tabler Icons](https://tabler.io/icons) ([MIT License](https://github.com/tabler/tabler-icons/blob/master/LICENSE)).
|
||||
|
||||
Source: https://github.com/tabler/tabler-icons/tree/main/icons/outline
|
||||
19
static/icons/social/bluesky.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [decentralized, network, protocol, innovative, communication, new-wave, future, tech, connectivity, open]
|
||||
category: Brand
|
||||
version: "2.45"
|
||||
unicode: "fd75"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M6.335 5.144c-1.654 -1.199 -4.335 -2.127 -4.335 .826c0 .59 .35 4.953 .556 5.661c.713 2.463 3.13 2.75 5.444 2.369c-4.045 .665 -4.889 3.208 -2.667 5.41c1.03 1.018 1.913 1.59 2.667 1.59c2 0 3.134 -2.769 3.5 -3.5c.333 -.667 .5 -1.167 .5 -1.5c0 .333 .167 .833 .5 1.5c.366 .731 1.5 3.5 3.5 3.5c.754 0 1.637 -.571 2.667 -1.59c2.222 -2.203 1.378 -4.746 -2.667 -5.41c2.314 .38 4.73 .094 5.444 -2.369c.206 -.708 .556 -5.072 .556 -5.661c0 -2.953 -2.68 -2.025 -4.335 -.826c-2.293 1.662 -4.76 5.048 -5.665 6.856c-.905 -1.808 -3.372 -5.194 -5.665 -6.856" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 932 B |
22
static/icons/social/discord.svg
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<!--
|
||||
tags: [app, application, logo, communication, talks, gamers, freeware, platform, brand, discord]
|
||||
category: Brand
|
||||
version: "1.21"
|
||||
unicode: "ece3"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0" />
|
||||
<path d="M14 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0" />
|
||||
<path d="M15.5 17c0 1 1.5 3 2 3c1.5 0 2.833 -1.667 3.5 -3c.667 -1.667 .5 -5.833 -1.5 -11.5c-1.457 -1.015 -3 -1.34 -4.5 -1.5l-.972 1.923a11.913 11.913 0 0 0 -4.053 0l-.975 -1.923c-1.5 .16 -3.043 .485 -4.5 1.5c-2 5.667 -2.167 9.833 -1.5 11.5c.667 1.333 2 3 3.5 3c.5 0 2 -2 2 -3" />
|
||||
<path d="M7 16.5c3.5 1 6.5 1 10 0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 785 B |
20
static/icons/social/email.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!--
|
||||
tags: [inbox, gmail, email, envelope, message, mail, contact, conversation, letter, post]
|
||||
category: Communication
|
||||
version: "1.0"
|
||||
unicode: "eae5"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10" />
|
||||
<path d="M3 7l9 6l9 -6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 485 B |
19
static/icons/social/facebook.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [logo, app, application, community, social, communication, website, user, post, images, photos, comment, feedback, fb]
|
||||
category: Brand
|
||||
version: "1.18"
|
||||
unicode: "ec1a"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M7 10v4h3v7h4v-7h3l1 -4h-4v-2a1 1 0 0 1 1 -1h3v-4h-3a5 5 0 0 0 -5 5v2h-3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 478 B |
19
static/icons/social/github.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [logo, website, hosting, project, programming, software, development, brand, github, company]
|
||||
category: Brand
|
||||
version: "1.18"
|
||||
unicode: "ec1c"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 673 B |
19
static/icons/social/gitlab.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [logo, website, software, code, programming, programmers, brand, gitlab, company, trademark]
|
||||
category: Brand
|
||||
version: "1.9"
|
||||
unicode: "ec1d"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M21 14l-9 7l-9 -7l3 -11l3 7h6l3 -7l3 11" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 418 B |
21
static/icons/social/instagram.svg
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<!--
|
||||
tags: [logo, app, application, images, photos, videos, post, stories, online, community]
|
||||
category: Brand
|
||||
version: "1.9"
|
||||
unicode: "ec20"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 8a4 4 0 0 1 4 -4h8a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-8a4 4 0 0 1 -4 -4l0 -8" />
|
||||
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
||||
<path d="M16.5 7.5v.01" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 524 B |
23
static/icons/social/linkedin.svg
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--
|
||||
tags: [logo, website, corporation, work, business, internet, brand, linkedin, company, trademark]
|
||||
category: Brand
|
||||
version: "1.15"
|
||||
unicode: "ec8c"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 11v5" />
|
||||
<path d="M8 8v.01" />
|
||||
<path d="M12 16v-5" />
|
||||
<path d="M16 16v-3a2 2 0 1 0 -4 0" />
|
||||
<path d="M3 7a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v10a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4l0 -10" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 571 B |
20
static/icons/social/mastodon.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!--
|
||||
tags: [web, app, social, nodes, network, brand, mastodon, logo, company, trademark]
|
||||
category: Brand
|
||||
version: "1.75"
|
||||
unicode: "f250"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 845 B |
24
static/icons/social/medium.svg
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
tags: [logo, website, brand, wordmark, design, medium, company, trademark, identity, corporate]
|
||||
category: Brand
|
||||
version: "1.13"
|
||||
unicode: "ec70"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" />
|
||||
<path d="M8 9h1l3 3l3 -3h1" />
|
||||
<path d="M8 15l2 0" />
|
||||
<path d="M14 15l2 0" />
|
||||
<path d="M9 9l0 6" />
|
||||
<path d="M15 9l0 6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 590 B |
19
static/icons/social/orcid.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [software, code, developer, public, licence, technology, brand, open, source, logo]
|
||||
category: Brand
|
||||
version: "1.36"
|
||||
unicode: "edd0"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 3a9 9 0 0 1 3.618 17.243l-2.193 -5.602a3 3 0 1 0 -2.849 0l-2.193 5.603a9 9 0 0 1 3.617 -17.244" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 469 B |
21
static/icons/social/rss.svg
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<!--
|
||||
category: Communication
|
||||
tags: [feed, subscribe, rss, design]
|
||||
version: "1.0"
|
||||
unicode: "eb19"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 432 B |
20
static/icons/social/scholar.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!--
|
||||
category: Map
|
||||
tags: [students, class, teachers, professors, doctors, hall, classroom, subject, science, break, lesson]
|
||||
version: "1.22"
|
||||
unicode: "ecf7"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M22 9l-10 -4l-10 4l10 4l10 -4v6" />
|
||||
<path d="M6 10.6v5.4a6 3 0 0 0 12 0v-5.4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 462 B |
22
static/icons/social/substack.svg
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<!--
|
||||
tags: [newspaper, article, news, file, paper, text, record, information]
|
||||
category: Document
|
||||
version: "1.0"
|
||||
unicode: "eafd"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M16 6h3a1 1 0 0 1 1 1v11a2 2 0 0 1 -4 0v-13a1 1 0 0 0 -1 -1h-10a1 1 0 0 0 -1 1v12a3 3 0 0 0 3 3h11" />
|
||||
<path d="M8 8l4 0" />
|
||||
<path d="M8 12l4 0" />
|
||||
<path d="M8 16l4 0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 528 B |
19
static/icons/social/threads.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [textile, discussion, conversation, needlework, clothing, forum, dialogue, social, sewing, fabric]
|
||||
category: Brand
|
||||
version: "2.25"
|
||||
unicode: "fb02"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M19 7.5c-1.333 -3 -3.667 -4.5 -7 -4.5c-5 0 -8 2.5 -8 9s3.5 9 8 9s7 -3 7 -5s-1 -5 -7 -5c-2.5 0 -3 1.25 -3 2.5c0 1.5 1 2.5 2.5 2.5c2.5 0 3.5 -1.5 3.5 -5s-2 -4 -3 -4s-1.833 .333 -2.5 1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 567 B |
19
static/icons/social/tiktok.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
tags: [logo, app, application, mobile, video, music, brand, tiktok, company, trademark]
|
||||
category: Brand
|
||||
version: "1.13"
|
||||
unicode: "ec73"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M21 7.917v4.034a9.948 9.948 0 0 1 -5 -1.951v4.5a6.5 6.5 0 1 1 -8 -6.326v4.326a2.5 2.5 0 1 0 4 2v-11.5h4.083a6.005 6.005 0 0 0 4.917 4.917" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 506 B |
23
static/icons/social/website.svg
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--
|
||||
tags: [earth, globe, global, language, union, world, location, navigation, geography, place]
|
||||
category: Map
|
||||
version: "1.0"
|
||||
unicode: "eb54"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />
|
||||
<path d="M3.6 9h16.8" />
|
||||
<path d="M3.6 15h16.8" />
|
||||
<path d="M11.5 3a17 17 0 0 0 0 18" />
|
||||
<path d="M12.5 3a17 17 0 0 1 0 18" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 542 B |
20
static/icons/social/x.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!--
|
||||
tags: [twitter, brand, logo, company, trademark, identity, corporate, business, x]
|
||||
category: Brand
|
||||
version: "2.29"
|
||||
unicode: "fc0f"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 4l11.733 16h4.267l-11.733 -16l-4.267 0" />
|
||||
<path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 463 B |
20
static/icons/social/youtube.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!--
|
||||
tags: [logo, platform, channel, film, video, youtuber, maker, comments, stream, streamer]
|
||||
category: Brand
|
||||
version: "1.15"
|
||||
unicode: "ec90"
|
||||
-->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M2 8a4 4 0 0 1 4 -4h12a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-12a4 4 0 0 1 -4 -4v-8" />
|
||||
<path d="M10 9l5 3l-5 3l0 -6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 482 B |
86
themes/openfreebooks/sass/_credits.scss
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
.credits-page {
|
||||
padding: 54px 0 72px;
|
||||
border-top: 1px solid var(--line);
|
||||
}
|
||||
|
||||
.credits-prose {
|
||||
max-width: var(--prose-width);
|
||||
}
|
||||
|
||||
.credits-lead,
|
||||
.credits-contributors-note,
|
||||
.credits-section-intro {
|
||||
margin: 0 0 1rem;
|
||||
color: var(--soft-ink);
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.72;
|
||||
}
|
||||
|
||||
.credits-contributors-note a,
|
||||
.credits-entry-name a,
|
||||
.credits-entry-license a {
|
||||
color: var(--accent);
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.credits-contributors-note a:hover,
|
||||
.credits-contributors-note a:focus-visible,
|
||||
.credits-entry-name a:hover,
|
||||
.credits-entry-name a:focus-visible,
|
||||
.credits-entry-license a:hover,
|
||||
.credits-entry-license a:focus-visible {
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 3px;
|
||||
}
|
||||
|
||||
.credits-block {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.credits-section-title {
|
||||
margin: 0 0 16px;
|
||||
font-family: var(--font-heading);
|
||||
font-size: clamp(1.35rem, 2.2vw, 1.85rem);
|
||||
font-weight: 400;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.credits-entry {
|
||||
margin: 0 0 28px;
|
||||
padding-bottom: 28px;
|
||||
border-bottom: 1px solid var(--line);
|
||||
}
|
||||
|
||||
.credits-block .credits-entry:last-child {
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.credits-entry-name {
|
||||
margin: 0 0 8px;
|
||||
font-family: var(--font-heading);
|
||||
font-size: 1.25rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.credits-entry-name a {
|
||||
color: var(--ink);
|
||||
}
|
||||
|
||||
.credits-entry-version,
|
||||
.credits-entry-license,
|
||||
.credits-entry-copyright,
|
||||
.credits-entry-note {
|
||||
margin: 0 0 6px;
|
||||
color: var(--soft-ink);
|
||||
font-size: 0.98rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.credits-entry-copyright:last-child,
|
||||
.credits-entry-note:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
|
@ -49,9 +49,21 @@ section.hero {
|
|||
.footer-inner {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px 20px;
|
||||
gap: 12px 24px;
|
||||
}
|
||||
|
||||
.footer-copy {
|
||||
flex: 1 1 16rem;
|
||||
min-width: min(100%, 16rem);
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: baseline;
|
||||
gap: 12px 24px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.footer-link {
|
||||
|
|
|
|||
|
|
@ -4,3 +4,4 @@
|
|||
@import "components";
|
||||
@import "why-sections";
|
||||
@import "contributors";
|
||||
@import "credits";
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Page not found | Open Free Books</title>
|
||||
|
||||
<meta name="description" content="Free, open-source textbooks for every learner — elementary through university." />
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="icon" type="image/x-icon" href="https://openfreebooks.org/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://openfreebooks.org/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="https://openfreebooks.org/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="https://openfreebooks.org/favicon-16x16.png" />
|
||||
<link rel="manifest" href="https://openfreebooks.org/site.webmanifest" />
|
||||
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;700&family=Instrument+Serif:ital@0;1&family=Inter:wght@300;400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link rel="stylesheet" href="https://openfreebooks.org/main.css" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<script id="site-config" type="application/json">
|
||||
{
|
||||
"brand": "Open Free Books",
|
||||
"homeUrl": "https://openfreebooks.org",
|
||||
"browseUrl": "/browse/",
|
||||
"aboutUrl": "/about/",
|
||||
"githubUrl": "https://github.com/hananoshikayomaru/openfreebooks"
|
||||
}
|
||||
</script>
|
||||
<div id="site-header"></div>
|
||||
|
||||
<main>
|
||||
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<div class="hero-content">
|
||||
<h1>Page not found</h1>
|
||||
<p class="hero-lead">That page is not in the catalog yet. Try the homepage or browse when books are published.</p>
|
||||
<div class="hero-actions">
|
||||
<a class="button button-primary" href="https://openfreebooks.org">Back home</a>
|
||||
<a class="button button-secondary" href="https://github.com/hananoshikayomaru/openfreebooks">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container footer-inner">
|
||||
<span>© <span id="footer-year"></span> Open Free Books — Free, open textbooks for every learner</span>
|
||||
<a class="footer-link" href="https://github.com/hananoshikayomaru/openfreebooks">GitHub</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://openfreebooks.org/js/bundle.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,755 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Open Free Books</title>
|
||||
|
||||
<meta name="description" content="Free, open-source textbooks for every learner — elementary through university. Read the full book online at no cost, or contribute on GitHub." />
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="icon" type="image/x-icon" href="https://openfreebooks.org/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://openfreebooks.org/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="https://openfreebooks.org/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="https://openfreebooks.org/favicon-16x16.png" />
|
||||
<link rel="manifest" href="https://openfreebooks.org/site.webmanifest" />
|
||||
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;700&family=Instrument+Serif:ital@0;1&family=Inter:wght@300;400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link rel="stylesheet" href="https://openfreebooks.org/main.css" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<script id="site-config" type="application/json">
|
||||
{
|
||||
"brand": "Open Free Books",
|
||||
"homeUrl": "https://openfreebooks.org",
|
||||
"browseUrl": "/browse/",
|
||||
"aboutUrl": "/about/",
|
||||
"githubUrl": "https://github.com/hananoshikayomaru/openfreebooks"
|
||||
}
|
||||
</script>
|
||||
<div id="site-header"></div>
|
||||
|
||||
<main>
|
||||
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<div class="hero-content">
|
||||
<h1>Open textbooks. Free to read. Open to improve.</h1>
|
||||
<p class="hero-lead">
|
||||
High-quality learning materials for elementary school through university — on the web, at no cost.
|
||||
</p>
|
||||
<ul class="hero-points">
|
||||
<li><strong>Free</strong> means the whole book, for everyone — read it all online without paywalls.</li>
|
||||
<li><strong>Open</strong> means open source — anyone can fix a typo, add a chapter, or fork a book on GitHub.</li>
|
||||
</ul>
|
||||
<div class="hero-actions">
|
||||
<a class="button button-primary" href="/browse/">Browse books</a>
|
||||
<a class="button button-secondary" href="https://github.com/hananoshikayomaru/openfreebooks">View on GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div id="marquee"></div>
|
||||
|
||||
<section class="why-section" id="why-textbook-costs">
|
||||
<div class="container why-row">
|
||||
<div class="why-art" data-scroll-reveal-card>
|
||||
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
|
||||
<title>Stack of textbooks and cost</title>
|
||||
<rect x="48" y="118" width="104" height="12" rx="2" fill="var(--accent)" opacity="0.25"/>
|
||||
<path d="M52 118 L52 72 L88 64 L88 118 Z" fill="none" stroke="var(--ink)" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<path d="M88 118 L88 64 L124 72 L124 118 Z" fill="none" stroke="var(--ink)" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<path d="M124 118 L124 76 L160 84 L160 118 Z" fill="var(--accent)" fill-opacity="0.12" stroke="var(--accent)" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<path d="M56 72 L88 64 L88 68 L56 76 Z" fill="var(--accent)" fill-opacity="0.35" stroke="none"/>
|
||||
<circle cx="148" cy="52" r="28" fill="none" stroke="var(--accent)" stroke-width="1.5"/>
|
||||
<text x="148" y="58" text-anchor="middle" font-family="var(--mono)" font-size="18" fill="var(--accent)">$</text>
|
||||
<path d="M36 148 L164 148" stroke="var(--ink)" stroke-width="1" stroke-dasharray="4 4" opacity="0.4"/>
|
||||
<path d="M72 40 L72 28 M68 34 L76 34" stroke="var(--soft-ink)" stroke-width="1.2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
<div class="why-copy" data-scroll-reveal-card>
|
||||
<p class="section-kicker">The problem</p>
|
||||
<h2 class="section-title">Textbook fees hit families hard</h2>
|
||||
<p>
|
||||
In many countries, families pay hundreds of dollars per child each year for printed textbooks —
|
||||
on top of tuition, devices, and supplies. When money is tight, students share worn copies, skip
|
||||
buying books, or fall behind before the term begins.
|
||||
</p>
|
||||
<p>
|
||||
That cost is not a small inconvenience. It is a barrier to showing up prepared. Open Free Books
|
||||
exists so <strong>every learner can start the year with complete materials</strong>, not a receipt.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="why-section" id="why-html">
|
||||
<div class="container why-row why-row--art-end">
|
||||
<div class="why-art" data-scroll-reveal-card>
|
||||
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
|
||||
<title>Paper and PDF versus interactive HTML</title>
|
||||
<rect x="24" y="48" width="56" height="72" rx="2" fill="none" stroke="var(--ink)" stroke-width="1.5"/>
|
||||
<path d="M32 60 L72 60 M32 72 L68 72 M32 84 L64 84" stroke="var(--soft-ink)" stroke-width="1" stroke-linecap="round"/>
|
||||
<text x="52" y="108" text-anchor="middle" font-family="var(--mono)" font-size="9" fill="var(--muted)">PDF</text>
|
||||
<rect x="88" y="48" width="56" height="72" rx="2" fill="none" stroke="var(--ink)" stroke-width="1.5" stroke-dasharray="3 3" opacity="0.5"/>
|
||||
<path d="M96 60 L136 60 M96 72 L132 72" stroke="var(--soft-ink)" stroke-width="1" stroke-linecap="round" opacity="0.5"/>
|
||||
<path d="M148 56 L148 160" stroke="var(--accent)" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M140 72 L156 72 L152 88 L144 88 Z" fill="var(--accent)" fill-opacity="0.2" stroke="var(--accent)" stroke-width="1.2" stroke-linejoin="round"/>
|
||||
<rect x="156" y="56" width="36" height="104" rx="4" fill="var(--card-bg)" stroke="var(--accent)" stroke-width="1.5"/>
|
||||
<path d="M164 72 L184 72 M164 84 L180 84 M164 96 L182 96" stroke="var(--accent)" stroke-width="1.2" stroke-linecap="round"/>
|
||||
<circle cx="174" cy="118" r="8" fill="none" stroke="var(--accent)" stroke-width="1.2"/>
|
||||
<path d="M171 118 L173 120 L177 114" fill="none" stroke="var(--accent)" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="174" y="140" text-anchor="middle" font-family="var(--mono)" font-size="8" fill="var(--accent)"></></text>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
<div class="why-copy" data-scroll-reveal-card>
|
||||
<p class="section-kicker">The medium</p>
|
||||
<h2 class="section-title">Long live the web — not the PDF</h2>
|
||||
<p>
|
||||
Paper textbooks are fixed: one layout, one edition, no room to fix a typo until the next print run.
|
||||
Most “digital” versions are the same pages exported to PDF — still static, still hard to search,
|
||||
still impossible to embed a simulation or a live diagram.
|
||||
</p>
|
||||
<p>
|
||||
<strong>HTML on the open web</strong> is different. Chapters can link to sources, resize for any screen,
|
||||
include interactive figures, and improve over time. The book becomes something you use — not something
|
||||
you only carry.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="why-section" id="why-teachers">
|
||||
<div class="container why-row">
|
||||
<div class="why-art" data-scroll-reveal-card>
|
||||
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
|
||||
<title>Teacher guiding, open textbook</title>
|
||||
<circle cx="72" cy="56" r="18" fill="none" stroke="var(--ink)" stroke-width="1.5"/>
|
||||
<path d="M48 108 C48 88 60 78 72 78 C84 78 96 88 96 108 L96 130 L48 130 Z" fill="none" stroke="var(--ink)" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<path d="M56 98 L88 98" stroke="var(--accent)" stroke-width="1.2" stroke-linecap="round"/>
|
||||
<path d="M108 72 L108 148 L168 148 L168 88 L148 72 Z" fill="var(--accent)" fill-opacity="0.1" stroke="var(--accent)" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<path d="M116 92 L160 92 M116 108 L152 108 M116 124 L156 124" stroke="var(--ink)" stroke-width="1" stroke-linecap="round" opacity="0.6"/>
|
||||
<path d="M72 130 L72 160 M60 160 L84 160" stroke="var(--ink)" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M100 56 L132 72" stroke="var(--accent)" stroke-width="1.5" stroke-linecap="round" stroke-dasharray="2 3"/>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
<div class="why-copy" data-scroll-reveal-card>
|
||||
<p class="section-kicker">People & books</p>
|
||||
<h2 class="section-title">Replace textbooks, not teachers</h2>
|
||||
<p>
|
||||
A great teacher — whether in person or, someday, assisted by thoughtful tools — still sets pace,
|
||||
asks hard questions, and notices when a student is stuck. That relationship is not what we are
|
||||
trying to automate.
|
||||
</p>
|
||||
<p>
|
||||
Textbooks are different. They are reference and structure: explanations, exercises, diagrams.
|
||||
Those can be <strong>free, forkable, and kept current on the web</strong> so teachers spend less
|
||||
time hunting permissions and more time teaching.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="why-section" id="why-learning">
|
||||
<div class="container why-row why-row--art-end">
|
||||
<div class="why-art" data-scroll-reveal-card>
|
||||
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
|
||||
<title>Student thinking with a textbook</title>
|
||||
<circle cx="100" cy="52" r="20" fill="none" stroke="var(--ink)" stroke-width="1.5"/>
|
||||
<path d="M68 108 C68 86 82 74 100 74 C118 74 132 86 132 108 L132 132 L68 132 Z" fill="none" stroke="var(--ink)" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<rect x="88" y="136" width="24" height="32" rx="2" fill="var(--accent)" fill-opacity="0.15" stroke="var(--accent)" stroke-width="1.5"/>
|
||||
<path d="M94 148 L106 148 M94 156 L106 156" stroke="var(--accent)" stroke-width="1" stroke-linecap="round"/>
|
||||
<path d="M44 64 Q28 48 36 32" fill="none" stroke="var(--soft-ink)" stroke-width="1.2" stroke-linecap="round"/>
|
||||
<path d="M40 36 L36 28 M44 34 L48 26" stroke="var(--soft-ink)" stroke-width="1" stroke-linecap="round"/>
|
||||
<text x="32" y="56" font-family="var(--font-heading)" font-size="14" fill="var(--accent)" font-style="italic">?</text>
|
||||
<path d="M156 72 L168 60 M160 88 L176 88" stroke="var(--muted)" stroke-width="1" stroke-linecap="round" opacity="0.5"/>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
<div class="why-copy" data-scroll-reveal-card>
|
||||
<p class="section-kicker">Agency</p>
|
||||
<h2 class="section-title">Do not outsource your learning</h2>
|
||||
<p>
|
||||
Finishing a chapter is not the same as understanding it. Skimming for answers, copying worked
|
||||
solutions, or rushing to the end leaves gaps that show up on the next test — and in the years after.
|
||||
</p>
|
||||
<p>
|
||||
Read slowly. Try the problems before you peek at hints. Sit with confusion long enough to name what
|
||||
you do not get. <strong>The textbook is a guide; the thinking still has to be yours.</strong> That habit
|
||||
is what school is really training, whether the subject is algebra or history.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="why-section" id="why-not-ai">
|
||||
<div class="container why-row">
|
||||
<div class="why-art" data-scroll-reveal-card>
|
||||
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
|
||||
<title>Open textbook and the earth</title>
|
||||
<circle cx="100" cy="100" r="44" fill="none" stroke="var(--ink)" stroke-width="1.5"/>
|
||||
<path d="M56 100 C56 72 76 56 100 56 C124 56 144 72 144 100 C144 128 124 144 100 144 C76 144 56 128 56 100 Z" fill="var(--accent)" fill-opacity="0.08" stroke="none"/>
|
||||
<path d="M56 92 C80 88 88 108 100 108 C112 108 120 88 144 92" fill="none" stroke="var(--accent)" stroke-width="1.2"/>
|
||||
<path d="M64 112 C88 118 96 98 108 98 C120 98 128 118 136 112" fill="none" stroke="var(--soft-ink)" stroke-width="1"/>
|
||||
<rect x="128" y="36" width="48" height="40" rx="6" fill="none" stroke="var(--muted)" stroke-width="1.2" stroke-dasharray="4 3" opacity="0.55"/>
|
||||
<path d="M136 52 L168 52 M136 60 L160 60" stroke="var(--muted)" stroke-width="1" stroke-linecap="round" opacity="0.5"/>
|
||||
<path d="M120 36 L128 28" stroke="var(--accent)" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<rect x="72" y="118" width="56" height="40" rx="2" fill="var(--card-bg)" stroke="var(--accent)" stroke-width="1.5"/>
|
||||
<path d="M80 132 L120 132 M80 142 L112 142" stroke="var(--ink)" stroke-width="1" stroke-linecap="round" opacity="0.5"/>
|
||||
<text x="100" y="154" text-anchor="middle" font-family="var(--mono)" font-size="7" fill="var(--accent)">OPEN</text>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
<div class="why-copy" data-scroll-reveal-card>
|
||||
<p class="section-kicker">Planet</p>
|
||||
<h2 class="section-title">Open textbooks are gentler on the Earth</h2>
|
||||
<p>
|
||||
Core curriculum changes slowly. Newton’s laws, the structure of a cell, and how fractions work do not
|
||||
need a new AI run every September. Regenerating the same chapter thousands of times burns electricity
|
||||
in data centers — for text that could have been written once and shared openly.
|
||||
</p>
|
||||
<p>
|
||||
<strong>One carefully reviewed book</strong>, published on the web for everyone, means less redundant
|
||||
compute, less e-waste from disposable PDFs, and fewer trucks moving heavy print runs. Students get
|
||||
stable material they can trust; the environment gets less waste from doing the same work over and over.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="why-section why-section--craft" id="why-craft">
|
||||
<div class="container why-row why-row--art-end">
|
||||
<div class="why-art" data-scroll-reveal-card>
|
||||
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
|
||||
<title>Scholars and institutions worldwide</title>
|
||||
<circle cx="100" cy="92" r="46" fill="none" stroke="var(--ink)" stroke-width="1.5"/>
|
||||
<path d="M54 92 C54 68 74 52 100 52 C126 52 146 68 146 92" fill="var(--accent)" fill-opacity="0.08" stroke="none"/>
|
||||
<path d="M54 92 C72 108 88 112 100 112 C112 112 128 108 146 92" fill="none" stroke="var(--accent)" stroke-width="1.2"/>
|
||||
<path d="M54 92 C68 76 84 68 100 68 C116 68 132 76 146 92" fill="none" stroke="var(--soft-ink)" stroke-width="1" opacity="0.5"/>
|
||||
<circle cx="72" cy="148" r="10" fill="none" stroke="var(--ink)" stroke-width="1.2"/>
|
||||
<path d="M66 158 C66 150 69 146 72 146 C75 146 78 150 78 158 L78 168 L66 168 Z" fill="none" stroke="var(--ink)" stroke-width="1.2" stroke-linejoin="round"/>
|
||||
<circle cx="100" cy="152" r="10" fill="none" stroke="var(--accent)" stroke-width="1.2"/>
|
||||
<path d="M94 162 C94 154 97 150 100 150 C103 150 106 154 106 162 L106 172 L94 172 Z" fill="var(--accent)" fill-opacity="0.12" stroke="var(--accent)" stroke-width="1.2" stroke-linejoin="round"/>
|
||||
<circle cx="128" cy="148" r="10" fill="none" stroke="var(--ink)" stroke-width="1.2"/>
|
||||
<path d="M122 158 C122 150 125 146 128 146 C131 146 134 150 134 158 L134 168 L122 168 Z" fill="none" stroke="var(--ink)" stroke-width="1.2" stroke-linejoin="round"/>
|
||||
<path d="M82 48 L88 36 M100 44 L100 32 M118 48 L112 36" stroke="var(--accent)" stroke-width="1" stroke-linecap="round" opacity="0.6"/>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
<div class="why-copy" data-scroll-reveal-card>
|
||||
<p class="section-kicker">Craft</p>
|
||||
<h2 class="section-title">Carefully crafted by brilliant people on Earth</h2>
|
||||
<p>
|
||||
A textbook is not a bulk download. It is years of lectures distilled, diagrams redrawn until they
|
||||
click, exercises tested in real classrooms, and arguments tightened by reviewers who care about
|
||||
getting it right.
|
||||
</p>
|
||||
<p>
|
||||
Open Free Books gathers that work from educators and researchers at institutions around the world —
|
||||
people who have already spent their careers making hard ideas legible. We publish their care
|
||||
<strong>openly</strong> so the next student inherits the best version, not a disposable draft.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container why-craft-logos-wrap" data-scroll-reveal-card>
|
||||
<p class="university-logos-label">Contributors and partners from leading universities include</p>
|
||||
<div class="university-carousel" role="region" aria-label="Universities represented among contributors">
|
||||
<div class="university-carousel-row university-carousel-row--forward">
|
||||
<div class="university-carousel-track">
|
||||
<ul class="university-carousel-group" role="list">
|
||||
<li class="university-logo university-logo--mit">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="MIT">
|
||||
<text x="60" y="34" text-anchor="middle" font-family="var(--mono)" font-size="22" font-weight="700" letter-spacing="0.12em" fill="currentColor">MIT</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--harvard">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Harvard University">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Harvard</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="8" letter-spacing="0.2em" fill="currentColor" opacity="0.75">UNIVERSITY</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--stanford">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Stanford University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="17" fill="currentColor">Stanford</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--berkeley">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="UC Berkeley">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="16" font-weight="700" fill="currentColor">Berkeley</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.1em" fill="currentColor" opacity="0.7">UNIVERSITY OF CALIFORNIA</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--caltech">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Caltech">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">Caltech</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--princeton">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Princeton University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="16" fill="currentColor">Princeton</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--yale">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Yale University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="17" fill="currentColor">Yale</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--columbia">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Columbia University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Columbia</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--cornell">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Cornell University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="16" fill="currentColor">Cornell</text>
|
||||
</svg>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<ul class="university-carousel-group" role="list" aria-hidden="true">
|
||||
<li class="university-logo university-logo--mit">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="MIT">
|
||||
<text x="60" y="34" text-anchor="middle" font-family="var(--mono)" font-size="22" font-weight="700" letter-spacing="0.12em" fill="currentColor">MIT</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--harvard">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Harvard University">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Harvard</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="8" letter-spacing="0.2em" fill="currentColor" opacity="0.75">UNIVERSITY</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--stanford">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Stanford University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="17" fill="currentColor">Stanford</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--berkeley">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="UC Berkeley">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="16" font-weight="700" fill="currentColor">Berkeley</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.1em" fill="currentColor" opacity="0.7">UNIVERSITY OF CALIFORNIA</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--caltech">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Caltech">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">Caltech</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--princeton">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Princeton University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="16" fill="currentColor">Princeton</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--yale">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Yale University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="17" fill="currentColor">Yale</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--columbia">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Columbia University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Columbia</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--cornell">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Cornell University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="16" fill="currentColor">Cornell</text>
|
||||
</svg>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="university-carousel-row university-carousel-row--reverse">
|
||||
<div class="university-carousel-track">
|
||||
<ul class="university-carousel-group" role="list">
|
||||
<li class="university-logo university-logo--cmu">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Carnegie Mellon University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">CMU</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--oxford">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Oxford">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="16" font-style="italic" fill="currentColor">Oxford</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.14em" fill="currentColor" opacity="0.7">UNIVERSITY</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--cambridge">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Cambridge">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Cambridge</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--imperial">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Imperial College London">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="13" font-weight="700" fill="currentColor">Imperial</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.08em" fill="currentColor" opacity="0.7">COLLEGE LONDON</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--lse">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="London School of Economics">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">LSE</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--eth">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="ETH Zurich">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">ETH</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--toronto">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Toronto">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Toronto</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.1em" fill="currentColor" opacity="0.7">UNIVERSITY OF</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--mcgill">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="McGill University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="16" fill="currentColor">McGill</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--hku">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The University of Hong Kong">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">HKU</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.08em" fill="currentColor" opacity="0.7">THE UNIVERSITY OF HONG KONG</text>
|
||||
</svg>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<ul class="university-carousel-group" role="list" aria-hidden="true">
|
||||
<li class="university-logo university-logo--cmu">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Carnegie Mellon University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">CMU</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--oxford">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Oxford">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="16" font-style="italic" fill="currentColor">Oxford</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.14em" fill="currentColor" opacity="0.7">UNIVERSITY</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--cambridge">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Cambridge">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Cambridge</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--imperial">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Imperial College London">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="13" font-weight="700" fill="currentColor">Imperial</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.08em" fill="currentColor" opacity="0.7">COLLEGE LONDON</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--lse">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="London School of Economics">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">LSE</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--eth">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="ETH Zurich">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">ETH</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--toronto">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Toronto">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Toronto</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.1em" fill="currentColor" opacity="0.7">UNIVERSITY OF</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--mcgill">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="McGill University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="16" fill="currentColor">McGill</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--hku">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The University of Hong Kong">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">HKU</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.08em" fill="currentColor" opacity="0.7">THE UNIVERSITY OF HONG KONG</text>
|
||||
</svg>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="university-carousel-row university-carousel-row--forward university-carousel-row--slow">
|
||||
<div class="university-carousel-track">
|
||||
<ul class="university-carousel-group" role="list">
|
||||
<li class="university-logo university-logo--hkust">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Hong Kong University of Science and Technology">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="17" font-weight="700" letter-spacing="0.06em" fill="currentColor">HKUST</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--cuhk">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The Chinese University of Hong Kong">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">CUHK</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--nus">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="National University of Singapore">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">NUS</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.06em" fill="currentColor" opacity="0.7">NATIONAL UNIVERSITY OF SINGAPORE</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--tsinghua">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Tsinghua University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Tsinghua</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--pku">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Peking University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">PKU</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--utokyo">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The University of Tokyo">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="14" fill="currentColor">Tokyo</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.1em" fill="currentColor" opacity="0.7">UNIVERSITY OF</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--anu">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Australian National University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">ANU</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--melbourne">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Melbourne">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Melbourne</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--iitb">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Indian Institute of Technology Bombay">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">IIT</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.08em" fill="currentColor" opacity="0.7">BOMBAY</text>
|
||||
</svg>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<ul class="university-carousel-group" role="list" aria-hidden="true">
|
||||
<li class="university-logo university-logo--hkust">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Hong Kong University of Science and Technology">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="17" font-weight="700" letter-spacing="0.06em" fill="currentColor">HKUST</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--cuhk">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The Chinese University of Hong Kong">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">CUHK</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--nus">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="National University of Singapore">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">NUS</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.06em" fill="currentColor" opacity="0.7">NATIONAL UNIVERSITY OF SINGAPORE</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--tsinghua">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Tsinghua University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Tsinghua</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--pku">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Peking University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">PKU</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--utokyo">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The University of Tokyo">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--font-heading)" font-size="14" fill="currentColor">Tokyo</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.1em" fill="currentColor" opacity="0.7">UNIVERSITY OF</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--anu">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Australian National University">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--mono)" font-size="20" font-weight="700" fill="currentColor">ANU</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--melbourne">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="University of Melbourne">
|
||||
<text x="60" y="30" text-anchor="middle" font-family="var(--font-heading)" font-size="15" fill="currentColor">Melbourne</text>
|
||||
</svg>
|
||||
</li>
|
||||
<li class="university-logo university-logo--iitb">
|
||||
<svg viewBox="0 0 120 48" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Indian Institute of Technology Bombay">
|
||||
<text x="60" y="22" text-anchor="middle" font-family="var(--mono)" font-size="18" font-weight="700" fill="currentColor">IIT</text>
|
||||
<text x="60" y="38" text-anchor="middle" font-family="var(--mono)" font-size="7" letter-spacing="0.08em" fill="currentColor" opacity="0.7">BOMBAY</text>
|
||||
</svg>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section id="browse-by-subject">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Catalog</p>
|
||||
<h2 class="section-title">Browse by subject</h2>
|
||||
<div class="work-grid" data-scroll-reveal>
|
||||
<article class="work-card" data-scroll-reveal-card>
|
||||
<h3>Mathematics</h3>
|
||||
<p class="card-subtitle">Coming soon</p>
|
||||
<p>Algebra, calculus, statistics, and more — structured for self-study and classrooms.</p>
|
||||
</article>
|
||||
<article class="work-card" data-scroll-reveal-card>
|
||||
<h3>Science</h3>
|
||||
<p class="card-subtitle">Coming soon</p>
|
||||
<p>Physics, chemistry, biology, and earth science from introductory to advanced levels.</p>
|
||||
</article>
|
||||
<article class="work-card" data-scroll-reveal-card>
|
||||
<h3>Humanities</h3>
|
||||
<p class="card-subtitle">Coming soon</p>
|
||||
<p>History, literature, philosophy, and languages — readable, citable, and free to share.</p>
|
||||
</article>
|
||||
<article class="work-card" data-scroll-reveal-card>
|
||||
<h3>Computing</h3>
|
||||
<p class="card-subtitle">Coming soon</p>
|
||||
<p>Programming, computer science fundamentals, and practical skills for students and teachers.</p>
|
||||
</article>
|
||||
</div>
|
||||
<p class="section-note">Subject pages and full catalogs are on the roadmap. Contribute a book on GitHub.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="featured-books">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Featured</p>
|
||||
<h2 class="section-title">Featured books</h2>
|
||||
<div class="work-grid" data-scroll-reveal>
|
||||
<article class="work-card" data-scroll-reveal-card>
|
||||
<h3>Your textbook here</h3>
|
||||
<p class="card-subtitle">Placeholder</p>
|
||||
<p>We are building the first open catalog. The first published books will appear in this grid.</p>
|
||||
</article>
|
||||
<article class="work-card" data-scroll-reveal-card>
|
||||
<h3>Community contributions</h3>
|
||||
<p class="card-subtitle">Open source</p>
|
||||
<p>Every book is a repository you can fork, translate, or adapt for your classroom.</p>
|
||||
</article>
|
||||
</div>
|
||||
<p class="section-note">Want to list a book? Open a pull request or start a discussion on GitHub.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section id="contributors" class="contributors-section">
|
||||
<div class="container">
|
||||
<p class="section-kicker">People</p>
|
||||
<h2 class="section-title">Contributors</h2>
|
||||
<p class="contributors-intro">
|
||||
Open Free Books is written and maintained in the open. These are the people building and reviewing the textbooks.
|
||||
</p>
|
||||
<ul class="contributors-avatar-grid" role="list">
|
||||
|
||||
|
||||
<li class="contributors-avatar-item" data-scroll-reveal-card>
|
||||
<button
|
||||
type="button"
|
||||
class="contributor-avatar-btn"
|
||||
data-contributor-dialog="contributor-dialog-man-lung-yeung"
|
||||
aria-label="View contributions by Man Lung Yeung"
|
||||
aria-haspopup="dialog"
|
||||
>
|
||||
|
||||
<img
|
||||
class="contributor-avatar-img"
|
||||
src="https://openfreebooks.org/contributors/manlung.png"
|
||||
alt=""
|
||||
width="48"
|
||||
height="48"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
|
||||
</button>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<dialog id="contributor-dialog-man-lung-yeung" class="contributor-dialog">
|
||||
<form method="dialog" class="contributor-dialog-panel">
|
||||
<button type="submit" class="contributor-dialog-close" aria-label="Close">×</button>
|
||||
<div class="contributor-dialog-header">
|
||||
|
||||
<img
|
||||
class="contributor-dialog-avatar"
|
||||
src="https://openfreebooks.org/contributors/manlung.png"
|
||||
alt=""
|
||||
width="80"
|
||||
height="80"
|
||||
decoding="async"
|
||||
/>
|
||||
|
||||
<div class="contributor-dialog-identity">
|
||||
<h3 class="contributor-dialog-name">Man Lung Yeung</h3>
|
||||
|
||||
<p class="contributor-dialog-job">EdTech specialist / software engineer</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="contributor-dialog-meta">
|
||||
<span class="contributor-meta-label">Education</span>
|
||||
BEng in Computer Science (HKUST) + BBA (HKUST)
|
||||
</p>
|
||||
|
||||
|
||||
<div class="contributor-dialog-contributions">
|
||||
<span class="contributor-meta-label">Contributes</span>
|
||||
<ul class="contributor-contribution-list" role="list">
|
||||
|
||||
<li>Founder</li>
|
||||
|
||||
<li>Math textbook</li>
|
||||
|
||||
<li>Physics textbook</li>
|
||||
|
||||
<li>Chemistry textbook</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="contributor-dialog-links">
|
||||
|
||||
<a class="contributor-link" href="mailto:manlung.yeung@outlook.com">manlung.yeung@outlook.com</a>
|
||||
|
||||
|
||||
<a class="contributor-link contributor-link--external" href="https://manlung.work" rel="noopener noreferrer">Website</a>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
|
||||
<p class="section-note">
|
||||
Want to contribute? Open a pull request on <a href="https://github.com/hananoshikayomaru/openfreebooks">GitHub</a>.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container footer-inner">
|
||||
<span>© <span id="footer-year"></span> Open Free Books — Free, open textbooks for every learner</span>
|
||||
<a class="footer-link" href="https://github.com/hananoshikayomaru/openfreebooks">GitHub</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://openfreebooks.org/js/bundle.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
User-agent: *
|
||||
Disallow:
|
||||
Allow: /
|
||||
Sitemap: https://openfreebooks.org/sitemap.xml
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"name": "Open Free Books",
|
||||
"short_name": "OpenFreeBooks",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#9a6b2e",
|
||||
"background_color": "#f5f4f1",
|
||||
"display": "standalone"
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/</loc>
|
||||
</url>
|
||||
</urlset>
|
||||
|
|
@ -41,8 +41,11 @@
|
|||
|
||||
<footer class="footer">
|
||||
<div class="container footer-inner">
|
||||
<span>© <span id="footer-year"></span> {{ config.extra.site_title }} — Free, open textbooks for every learner</span>
|
||||
<span class="footer-copy">© <span id="footer-year"></span> {{ config.extra.site_title }} — Free, open textbooks for every learner</span>
|
||||
<nav class="footer-links" aria-label="Footer links">
|
||||
<a class="footer-link" href="{{ config.extra.credits_url | safe }}">Credits</a>
|
||||
<a class="footer-link" href="{{ config.extra.github_url | safe }}">GitHub</a>
|
||||
</nav>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
|
|
|||
16
themes/openfreebooks/templates/credits.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Credits | {{ config.extra.site_title }}{% endblock title %}
|
||||
{% block meta_description %}
|
||||
<meta name="description" content="Technology credits and open source acknowledgements for {{ config.extra.site_title }}." />
|
||||
{% endblock meta_description %}
|
||||
|
||||
{% block content %}
|
||||
<section class="credits-page">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Acknowledgements</p>
|
||||
<h1 class="section-title">{{ page.title }}</h1>
|
||||
{% include "partials/credits-content.html" %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock content %}
|
||||
|
|
@ -26,66 +26,47 @@
|
|||
{% endmacro %}
|
||||
|
||||
{% macro social_icon(kind) %}
|
||||
<svg class="contributor-social-icon" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
||||
{% if kind == "email" %}
|
||||
<rect x="3" y="5" width="18" height="14" rx="2"/>
|
||||
<path d="M3 7l9 6 9-6"/>
|
||||
{% include "partials/icons/social/email.html" %}
|
||||
{% elif kind == "github" %}
|
||||
<path d="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.3-2 2.4-.3 5-1.2 5-5.4.9-1.5-.3-3.2 0-4.8-.9-.3-2.9.4-4.5 0-1.3-.4-2.7-.4-4 0-1.6-.4-3.6.3-4.5 0 .3 1.6.3 3.6 0 4.8 0 4.2 2.6 5.1 5 5.4-.4 1-.4 1.3-.4 2.3V20" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/github.html" %}
|
||||
{% elif kind == "gitlab" %}
|
||||
<path d="M4 20l4-12 4 8 4-8 4 12H4z" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/gitlab.html" %}
|
||||
{% elif kind == "x" %}
|
||||
<path d="M4 4l7.5 8.5L4 20h2.5l5-5.7L15.5 20H20l-7.8-9L20 4h-2.5l-4.6 5.2L8.5 4H4z" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/x.html" %}
|
||||
{% elif kind == "youtube" %}
|
||||
<rect x="3" y="6" width="18" height="12" rx="3"/>
|
||||
<path d="M11 10l5 2-5 2v-4z" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/youtube.html" %}
|
||||
{% elif kind == "bluesky" %}
|
||||
<path d="M6.5 5.5c3.2 2.4 6.8 2.4 10 0 0 5.6-2.5 11-5 11s-5-5.4-5-11z" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/bluesky.html" %}
|
||||
{% elif kind == "linkedin" %}
|
||||
<rect x="4" y="4" width="4" height="16"/>
|
||||
<rect x="10" y="10" width="4" height="10"/>
|
||||
<circle cx="6" cy="7" r="2" fill="currentColor" stroke="none"/>
|
||||
<path d="M14 8c2.2 0 4 1.8 4 4v8"/>
|
||||
{% include "partials/icons/social/linkedin.html" %}
|
||||
{% elif kind == "mastodon" %}
|
||||
<rect x="4" y="6" width="16" height="12" rx="3"/>
|
||||
<path d="M8 10v4M12 10v4M16 10v4"/>
|
||||
{% include "partials/icons/social/mastodon.html" %}
|
||||
{% elif kind == "instagram" %}
|
||||
<rect x="4" y="4" width="16" height="16" rx="5"/>
|
||||
<circle cx="12" cy="12" r="3.5"/>
|
||||
<circle cx="17" cy="7" r="1" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/instagram.html" %}
|
||||
{% elif kind == "facebook" %}
|
||||
<path d="M14 8h3V5h-3c-2.8 0-5 2.2-5 5v2H7v3h3v8h4v-8h3l1-3h-4V9c0-.6.4-1 1-1z" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/facebook.html" %}
|
||||
{% elif kind == "threads" %}
|
||||
<path d="M12 4c3.5 0 6 2.2 6 5.5 0 3.8-3.2 6.5-7 6.5-2.2 0-4-.9-4-2.5S8.8 11 12 11s4-.4 4-1.5S14 7 12 7s-3 .8-3 2" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/threads.html" %}
|
||||
{% elif kind == "tiktok" %}
|
||||
<path d="M10 6v9.5a3.5 3.5 0 11-2-3.2V9.5M14 6v5.5c1.2 0 2.2-.6 2.8-1.5V6h3v4.5c0 3.3-2.7 6-6 6s-6-2.7-6-6 2.7-6 6-6" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/tiktok.html" %}
|
||||
{% elif kind == "discord" %}
|
||||
<path d="M8 8c1.5-1 4.5-1 6 0M7 16c2-1 8-1 10 0M9 10v1M15 10v1" fill="currentColor" stroke="none"/>
|
||||
<path d="M6 7c-1 2-1.5 5-1 9 1.5 1 4 1.5 7 1.5s5.5-.5 7-1.5c.5-4 .5-7-1-9-2-1.5-10-1.5-12 0z"/>
|
||||
{% include "partials/icons/social/discord.html" %}
|
||||
{% elif kind == "orcid" %}
|
||||
<circle cx="12" cy="12" r="8"/>
|
||||
<path d="M9 10v6M12 10v6M15 10c0 2-1 3-1 3v3"/>
|
||||
{% include "partials/icons/social/orcid.html" %}
|
||||
{% elif kind == "scholar" %}
|
||||
<path d="M12 4L4 8v2c0 5 3.5 8.5 8 10 4.5-1.5 8-5 8-10V8l-8-4z"/>
|
||||
<path d="M12 12v6"/>
|
||||
{% include "partials/icons/social/scholar.html" %}
|
||||
{% elif kind == "medium" %}
|
||||
<circle cx="8" cy="12" r="4" fill="currentColor" stroke="none"/>
|
||||
<circle cx="16" cy="12" r="4" fill="currentColor" stroke="none"/>
|
||||
<circle cx="12" cy="12" r="4" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/medium.html" %}
|
||||
{% elif kind == "substack" %}
|
||||
<path d="M5 6h14v3H5zM5 11h14v2l-7 5-7-5v-2z" fill="currentColor" stroke="none"/>
|
||||
{% include "partials/icons/social/substack.html" %}
|
||||
{% elif kind == "rss" %}
|
||||
<path d="M5 5v14M5 15a7 7 0 017 7M5 11a3 3 0 013 3"/>
|
||||
{% include "partials/icons/social/rss.html" %}
|
||||
{% else %}
|
||||
<path d="M10 13a5 5 0 007.5 4M14 6.5l2-2 2 2M10 10l-2 2 2 2"/>
|
||||
<circle cx="12" cy="12" r="9"/>
|
||||
{% include "partials/icons/social/website.html" %}
|
||||
{% endif %}
|
||||
</svg>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro website_icon() %}
|
||||
<svg class="contributor-social-icon" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="9"/>
|
||||
<path d="M3 12h18M12 3c2.5 2.8 4 6 4 9s-1.5 6.2-4 9M12 3c-2.5 2.8-4 6-4 9s1.5 6.2 4 9"/>
|
||||
</svg>
|
||||
{% include "partials/icons/social/website.html" %}
|
||||
{% endmacro %}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{% set contributors_data = load_data(path="contributors.json", format="json") %}
|
||||
{% set contributors_data = load_data(path="data/contributors.json", format="json") %}
|
||||
|
||||
<div class="community-contributors" id="contributors">
|
||||
<div class="container">
|
||||
|
|
|
|||
68
themes/openfreebooks/templates/partials/credits-content.html
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{% set credits = load_data(path="data/credits.json", format="json") %}
|
||||
{% set libraries = credits.libraries | sort(attribute="name") %}
|
||||
|
||||
<div class="credits-prose">
|
||||
<p class="credits-lead">{{ credits.intro }}</p>
|
||||
<p class="credits-contributors-note">
|
||||
{{ credits.contributors_note }}
|
||||
<a href="{{ get_url(path='/') | safe }}#contributors">View contributors</a>.
|
||||
</p>
|
||||
|
||||
<section class="credits-block" aria-labelledby="credits-project-heading">
|
||||
<h2 id="credits-project-heading" class="credits-section-title">This project</h2>
|
||||
<article class="credits-entry">
|
||||
<h3 class="credits-entry-name">
|
||||
{% if credits.project.url %}
|
||||
<a href="{{ credits.project.url | safe }}">{{ credits.project.name }}</a>
|
||||
{% else %}
|
||||
{{ credits.project.name }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
<p class="credits-entry-version">Version {{ credits.project.version }}</p>
|
||||
<p class="credits-entry-license">
|
||||
<a href="{{ credits.project.license_url | safe }}">{{ credits.project.license }} License</a>
|
||||
</p>
|
||||
<p class="credits-entry-copyright">{{ credits.project.copyright }}</p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="credits-block" aria-labelledby="credits-libraries-heading">
|
||||
<h2 id="credits-libraries-heading" class="credits-section-title">Third party acknowledgements</h2>
|
||||
<p class="credits-section-intro">
|
||||
{{ credits.project.name }} uses the open source libraries below (in alphabetical order):
|
||||
</p>
|
||||
{% for lib in libraries %}
|
||||
<article class="credits-entry">
|
||||
<h3 class="credits-entry-name">
|
||||
<a href="{{ lib.url | safe }}" rel="noopener noreferrer">{{ lib.name }}</a>
|
||||
</h3>
|
||||
<p class="credits-entry-version">Version {{ lib.version }}</p>
|
||||
<p class="credits-entry-license">
|
||||
{% if lib.license_url %}
|
||||
<a href="{{ lib.license_url | safe }}" rel="noopener noreferrer">{{ lib.license }}</a>
|
||||
{% else %}
|
||||
{{ lib.license }}
|
||||
{% endif %}
|
||||
</p>
|
||||
<p class="credits-entry-copyright">{{ lib.copyright }}</p>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
{% if credits.hosting %}
|
||||
<section class="credits-block" aria-labelledby="credits-hosting-heading">
|
||||
<h2 id="credits-hosting-heading" class="credits-section-title">Hosting & deploy</h2>
|
||||
{% for item in credits.hosting %}
|
||||
<article class="credits-entry">
|
||||
<h3 class="credits-entry-name">
|
||||
<a href="{{ item.url | safe }}" rel="noopener noreferrer">{{ item.name }}</a>
|
||||
</h3>
|
||||
{% if item.version %}
|
||||
<p class="credits-entry-version">Version {{ item.version }}</p>
|
||||
{% endif %}
|
||||
<p class="credits-entry-note">{{ item.note }}</p>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M6.335 5.144c-1.654 -1.199 -4.335 -2.127 -4.335 .826c0 .59 .35 4.953 .556 5.661c.713 2.463 3.13 2.75 5.444 2.369c-4.045 .665 -4.889 3.208 -2.667 5.41c1.03 1.018 1.913 1.59 2.667 1.59c2 0 3.134 -2.769 3.5 -3.5c.333 -.667 .5 -1.167 .5 -1.5c0 .333 .167 .833 .5 1.5c.366 .731 1.5 3.5 3.5 3.5c.754 0 1.637 -.571 2.667 -1.59c2.222 -2.203 1.378 -4.746 -2.667 -5.41c2.314 .38 4.73 .094 5.444 -2.369c.206 -.708 .556 -5.072 .556 -5.661c0 -2.953 -2.68 -2.025 -4.335 -.826c-2.293 1.662 -4.76 5.048 -5.665 6.856c-.905 -1.808 -3.372 -5.194 -5.665 -6.856" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 813 B |
|
|
@ -0,0 +1,14 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0" />
|
||||
<path d="M14 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0" />
|
||||
<path d="M15.5 17c0 1 1.5 3 2 3c1.5 0 2.833 -1.667 3.5 -3c.667 -1.667 .5 -5.833 -1.5 -11.5c-1.457 -1.015 -3 -1.34 -4.5 -1.5l-.972 1.923a11.913 11.913 0 0 0 -4.053 0l-.975 -1.923c-1.5 .16 -3.043 .485 -4.5 1.5c-2 5.667 -2.167 9.833 -1.5 11.5c.667 1.333 2 3 3.5 3c.5 0 2 -2 2 -3" />
|
||||
<path d="M7 16.5c3.5 1 6.5 1 10 0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 681 B |
|
|
@ -0,0 +1,12 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10" />
|
||||
<path d="M3 7l9 6l9 -6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 381 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M7 10v4h3v7h4v-7h3l1 -4h-4v-2a1 1 0 0 1 1 -1h3v-4h-3a5 5 0 0 0 -5 5v2h-3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 346 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 566 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M21 14l-9 7l-9 -7l3 -11l3 7h6l3 -7l3 11" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 313 B |
|
|
@ -0,0 +1,13 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 8a4 4 0 0 1 4 -4h8a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-8a4 4 0 0 1 -4 -4l0 -8" />
|
||||
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
||||
<path d="M16.5 7.5v.01" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 429 B |
|
|
@ -0,0 +1,15 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 11v5" />
|
||||
<path d="M8 8v.01" />
|
||||
<path d="M12 16v-5" />
|
||||
<path d="M16 16v-3a2 2 0 1 0 -4 0" />
|
||||
<path d="M3 7a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v10a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4l0 -10" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 466 B |
|
|
@ -0,0 +1,12 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 754 B |
|
|
@ -0,0 +1,16 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" />
|
||||
<path d="M8 9h1l3 3l3 -3h1" />
|
||||
<path d="M8 15l2 0" />
|
||||
<path d="M14 15l2 0" />
|
||||
<path d="M9 9l0 6" />
|
||||
<path d="M15 9l0 6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 487 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 3a9 9 0 0 1 3.618 17.243l-2.193 -5.602a3 3 0 1 0 -2.849 0l-2.193 5.603a9 9 0 0 1 3.617 -17.244" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 372 B |
|
|
@ -0,0 +1,13 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 381 B |
|
|
@ -0,0 +1,12 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M22 9l-10 -4l-10 4l10 4l10 -4v6" />
|
||||
<path d="M6 10.6v5.4a6 3 0 0 0 12 0v-5.4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 352 B |
|
|
@ -0,0 +1,14 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M16 6h3a1 1 0 0 1 1 1v11a2 2 0 0 1 -4 0v-13a1 1 0 0 0 -1 -1h-10a1 1 0 0 0 -1 1v12a3 3 0 0 0 3 3h11" />
|
||||
<path d="M8 8l4 0" />
|
||||
<path d="M8 12l4 0" />
|
||||
<path d="M8 16l4 0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 446 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M19 7.5c-1.333 -3 -3.667 -4.5 -7 -4.5c-5 0 -8 2.5 -8 9s3.5 9 8 9s7 -3 7 -5s-1 -5 -7 -5c-2.5 0 -3 1.25 -3 2.5c0 1.5 1 2.5 2.5 2.5c2.5 0 3.5 -1.5 3.5 -5s-2 -4 -3 -4s-1.833 .333 -2.5 1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 455 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M21 7.917v4.034a9.948 9.948 0 0 1 -5 -1.951v4.5a6.5 6.5 0 1 1 -8 -6.326v4.326a2.5 2.5 0 1 0 4 2v-11.5h4.083a6.005 6.005 0 0 0 4.917 4.917" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 411 B |
|
|
@ -0,0 +1,15 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />
|
||||
<path d="M3.6 9h16.8" />
|
||||
<path d="M3.6 15h16.8" />
|
||||
<path d="M11.5 3a17 17 0 0 0 0 18" />
|
||||
<path d="M12.5 3a17 17 0 0 1 0 18" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 445 B |
12
themes/openfreebooks/templates/partials/icons/social/x.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M4 4l11.733 16h4.267l-11.733 -16l-4.267 0" />
|
||||
<path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 373 B |
|
|
@ -0,0 +1,12 @@
|
|||
<svg class="contributor-social-icon" aria-hidden="true" width="20" height="20"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.75"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M2 8a4 4 0 0 1 4 -4h12a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-12a4 4 0 0 1 -4 -4v-8" />
|
||||
<path d="M10 9l5 3l-5 3l0 -6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 385 B |
|
|
@ -21,3 +21,4 @@ site_title = "Open Free Books"
|
|||
github_url = "https://github.com/hananoshikayomaru/openfreebooks"
|
||||
browse_url = "/browse/"
|
||||
about_url = "/about/"
|
||||
credits_url = "/credits/"
|
||||
|
|
|
|||