Social Annotations in the Atmosphere
15
fork

Configure Feed

Select the types of activity you want to include in your feed.

updates to make extension more performant

+1495 -59
+1
.beads/beads.base.jsonl
··· 1 + {"id":"seams.so-iji","title":"Update AT Protocol OAuth config with Chrome Web Store extension ID","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-11-14T20:54:15.969349171-08:00","updated_at":"2025-11-14T21:09:37.328022945-08:00"}
+1
.beads/beads.base.meta.json
··· 1 + {"version":"0.23.0","timestamp":"2025-11-14T21:10:33.177343555-08:00","commit":"8be3e44"}
+1
.beads/beads.left.jsonl
··· 1 + {"id":"seams.so-iji","content_hash":"3f105051d1c42a39ebc3af2d850ed6b60a58bfefa2753ce246692a44b3f57ab3","title":"Update AT Protocol OAuth config with Chrome Web Store extension ID","description":"","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-11-14T20:54:15.969349171-08:00","updated_at":"2025-11-14T21:09:37.328022945-08:00","source_repo":"."}
+1
.beads/beads.left.meta.json
··· 1 + {"version":"0.23.0","timestamp":"2025-11-14T21:10:31.078894927-08:00","commit":"8be3e44"}
.beads/issues.jsonl

This is a binary file and will not be displayed.

+2 -1
AGENTS.md
··· 91 91 92 92 ### Backend Development 93 93 - **Dev env**: `cd server && nix develop` - Enter Nix shell with Go toolchain 94 - - **Run**: `go run cmd/server/main.go` - Start backend server (port 8080) 94 + - **Run (dev)**: `cd server && air` - Start backend with hot reload (port 8080) 95 + - **Run (prod)**: `go run cmd/server/main.go` - Start backend server (port 8080) 95 96 - **Test**: `go test ./internal/service -v` - Run integration tests 96 97 - **Build**: `go build -o seams-server ./cmd/server` - Build binary 97 98
assets/icon-128.png

This is a binary file and will not be displayed.

+34
assets/icon.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"> 2 + <defs> 3 + <style> 4 + .line { 5 + fill: none; 6 + stroke: #B8984A; 7 + stroke-width: 3; 8 + stroke-linecap: round; 9 + } 10 + .dot { 11 + fill: #B8984A; 12 + } 13 + </style> 14 + </defs> 15 + 16 + <!-- Outer circle --> 17 + <circle cx="100" cy="100" r="90" class="line"/> 18 + 19 + <!-- Six petal ellipses arranged radially --> 20 + <ellipse cx="100" cy="45" rx="30" ry="55" class="line"/> 21 + <ellipse cx="100" cy="45" rx="30" ry="55" class="line" transform="rotate(60 100 100)"/> 22 + <ellipse cx="100" cy="45" rx="30" ry="55" class="line" transform="rotate(120 100 100)"/> 23 + <ellipse cx="100" cy="45" rx="30" ry="55" class="line" transform="rotate(180 100 100)"/> 24 + <ellipse cx="100" cy="45" rx="30" ry="55" class="line" transform="rotate(240 100 100)"/> 25 + <ellipse cx="100" cy="45" rx="30" ry="55" class="line" transform="rotate(300 100 100)"/> 26 + 27 + <!-- Small dots at the six points --> 28 + <circle cx="100" cy="10" r="4" class="dot"/> 29 + <circle cx="177.94" cy="50" r="4" class="dot"/> 30 + <circle cx="177.94" cy="150" r="4" class="dot"/> 31 + <circle cx="100" cy="190" r="4" class="dot"/> 32 + <circle cx="22.06" cy="150" r="4" class="dot"/> 33 + <circle cx="22.06" cy="50" r="4" class="dot"/> 34 + </svg>
assets/icon_200x200.jpeg

This is a binary file and will not be displayed.

assets/screenshot-1280x800.png

This is a binary file and will not be displayed.

assets/screenshot.png

This is a binary file and will not be displayed.

+2 -2
dns/dnsconfig.js
··· 18 18 // Email records (if needed) 19 19 // MX("@", 10, "mail.example.com."), 20 20 21 - // TXT records for verification (if needed) 22 - // TXT("@", "v=spf1 include:_spf.google.com ~all"), 21 + // TXT records for verification 22 + TXT("@", "google-site-verification=Fa5PSMmFdmEOANhmu_p-f9Ai93m-_4tS4YDfAhmcDvQ"), 23 23 24 24 END 25 25 );
+24 -1
flake.nix
··· 86 86 go 87 87 sqlite 88 88 gcc 89 + air 89 90 dnscontrol 90 91 ] ++ (if pkgs.stdenv.isLinux then [ chromium ] else []); 91 92 ··· 96 97 echo "🚀 Full development environment (Extension + Server)" 97 98 echo "" 98 99 echo "Extension: pnpm dev, pnpm build, pnpm zip" 99 - echo "Server: cd server && go run cmd/server/main.go" 100 + echo "Server: cd server && air" 100 101 ''; 101 102 }; 102 103 ··· 128 129 go 129 130 sqlite 130 131 gcc 132 + air 131 133 ]; 132 134 133 135 shellHook = '' ··· 135 137 echo "Go version: $(go version)" 136 138 echo "" 137 139 echo "Commands:" 140 + echo " cd server && air - Start server with hot reload" 138 141 echo " cd server && go run cmd/server/main.go - Start server" 139 142 echo " cd server && go test ./... - Run tests" 140 143 echo " cd server && go mod tidy - Update dependencies" 144 + ''; 145 + }; 146 + 147 + # pywb proxy test environment 148 + pywb = pkgs.mkShell { 149 + buildInputs = with pkgs; [ 150 + python311 151 + uv 152 + stdenv.cc.cc.lib 153 + ]; 154 + 155 + shellHook = '' 156 + export LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib:$LD_LIBRARY_PATH" 157 + 158 + echo "🔬 pywb test environment" 159 + echo "" 160 + echo "Quick start:" 161 + echo " uv tool install pywb --with setuptools" 162 + echo " wb-manager init test - Initialize pywb collection" 163 + echo " wayback - Start pywb server" 141 164 ''; 142 165 }; 143 166 };
+101
lib/oauth-web.ts
··· 1 + // Web-compatible OAuth implementation (for via-client) 2 + // Adapted from lib/oauth.ts to work without browser.* APIs 3 + 4 + import { 5 + configureOAuth, 6 + createAuthorizationUrl, 7 + finalizeAuthorization, 8 + resolveFromIdentity, 9 + OAuthUserAgent, 10 + type OAuthSession, 11 + } from "@atcute/oauth-browser-client"; 12 + import { storage } from "./storage-adapter"; 13 + 14 + const OAUTH_SESSION_KEY = "synthesis-oauth:session"; 15 + 16 + let isOAuthInitialized = false; 17 + 18 + export function initializeOAuth() { 19 + if (typeof window !== "undefined" && !isOAuthInitialized) { 20 + // Use web redirect URL for via proxy 21 + configureOAuth({ 22 + metadata: { 23 + client_id: import.meta.env.VITE_OAUTH_CLIENT_ID || 'http://localhost:8081/static/client-metadata.json', 24 + redirect_uri: import.meta.env.VITE_OAUTH_REDIRECT_URI || 'http://localhost:8081/static/oauth-callback.html', 25 + }, 26 + }); 27 + isOAuthInitialized = true; 28 + } 29 + } 30 + 31 + export async function startLoginProcess(handle: string): Promise<void> { 32 + console.log('[oauth-web] Starting login process for handle:', handle); 33 + initializeOAuth(); 34 + 35 + console.log('[oauth-web] Resolving identity...'); 36 + const { metadata } = await resolveFromIdentity(handle); 37 + console.log('[oauth-web] PDS metadata:', metadata); 38 + 39 + console.log('[oauth-web] Creating authorization URL...'); 40 + const authUrl = await createAuthorizationUrl({ 41 + metadata: metadata, 42 + scope: import.meta.env.VITE_OAUTH_SCOPE || 'atproto transition:generic', 43 + }); 44 + console.log('[oauth-web] Auth URL:', authUrl.toString()); 45 + 46 + // For web context, redirect to auth URL 47 + window.location.href = authUrl.toString(); 48 + } 49 + 50 + export async function handleOAuthCallback(): Promise<OAuthSession | null> { 51 + console.log('[oauth-web] Handling OAuth callback'); 52 + 53 + // Parse OAuth response from URL (params can be in search or hash) 54 + const url = new URL(window.location.href); 55 + const paramString = url.search || url.hash.slice(1); 56 + const params = new URLSearchParams(paramString); 57 + 58 + console.log('[oauth-web] OAuth params:', Object.fromEntries(params)); 59 + 60 + if (!params.has('code') && !params.has('error')) { 61 + console.log('[oauth-web] No OAuth params found'); 62 + return null; 63 + } 64 + 65 + if (params.has('error')) { 66 + const error = params.get('error'); 67 + const errorDesc = params.get('error_description'); 68 + console.error('[oauth-web] OAuth error:', error, errorDesc); 69 + throw new Error(`OAuth error: ${error} - ${errorDesc}`); 70 + } 71 + 72 + // Finalize authorization with the params 73 + console.log('[oauth-web] Finalizing authorization...'); 74 + const session = await finalizeAuthorization(params); 75 + console.log('[oauth-web] Authorization complete, session:', session); 76 + 77 + // Store session 78 + await saveSession(session); 79 + console.log('[oauth-web] Session saved successfully'); 80 + 81 + return session; 82 + } 83 + 84 + export async function saveSession(session: OAuthSession): Promise<void> { 85 + await storage.local.set({ [OAUTH_SESSION_KEY]: session }); 86 + } 87 + 88 + export async function loadSession(): Promise<OAuthSession | null> { 89 + const result = await storage.local.get(OAUTH_SESSION_KEY); 90 + return result[OAUTH_SESSION_KEY] || null; 91 + } 92 + 93 + export async function clearSession(): Promise<void> { 94 + await storage.local.remove(OAUTH_SESSION_KEY); 95 + } 96 + 97 + export async function getProfile(session: OAuthSession): Promise<any> { 98 + const agent = new OAuthUserAgent(session); 99 + const response = await agent.handle('/xrpc/app.bsky.actor.getProfile?actor=' + session.info.sub); 100 + return await response.json(); 101 + }
+73
lib/storage-adapter.ts
··· 1 + // Storage adapter that mimics browser.storage.local API but uses localStorage 2 + // This allows sharing code between extension and via-client 3 + 4 + export const storage = { 5 + local: { 6 + async get(keys?: string | string[] | Record<string, any>): Promise<Record<string, any>> { 7 + if (!keys) { 8 + // Get all items 9 + const result: Record<string, any> = {}; 10 + for (let i = 0; i < localStorage.length; i++) { 11 + const key = localStorage.key(i); 12 + if (key) { 13 + try { 14 + result[key] = JSON.parse(localStorage.getItem(key) || 'null'); 15 + } catch { 16 + result[key] = localStorage.getItem(key); 17 + } 18 + } 19 + } 20 + return result; 21 + } 22 + 23 + const result: Record<string, any> = {}; 24 + 25 + if (typeof keys === 'string') { 26 + // Single key 27 + try { 28 + const value = localStorage.getItem(keys); 29 + result[keys] = value ? JSON.parse(value) : null; 30 + } catch { 31 + result[keys] = localStorage.getItem(keys); 32 + } 33 + } else if (Array.isArray(keys)) { 34 + // Array of keys 35 + keys.forEach(key => { 36 + try { 37 + const value = localStorage.getItem(key); 38 + result[key] = value ? JSON.parse(value) : null; 39 + } catch { 40 + result[key] = localStorage.getItem(key); 41 + } 42 + }); 43 + } else { 44 + // Object with default values 45 + Object.keys(keys).forEach(key => { 46 + try { 47 + const value = localStorage.getItem(key); 48 + result[key] = value ? JSON.parse(value) : keys[key]; 49 + } catch { 50 + result[key] = localStorage.getItem(key) || keys[key]; 51 + } 52 + }); 53 + } 54 + 55 + return result; 56 + }, 57 + 58 + async set(items: Record<string, any>): Promise<void> { 59 + Object.entries(items).forEach(([key, value]) => { 60 + localStorage.setItem(key, JSON.stringify(value)); 61 + }); 62 + }, 63 + 64 + async remove(keys: string | string[]): Promise<void> { 65 + const keysArray = Array.isArray(keys) ? keys : [keys]; 66 + keysArray.forEach(key => localStorage.removeItem(key)); 67 + }, 68 + 69 + async clear(): Promise<void> { 70 + localStorage.clear(); 71 + }, 72 + }, 73 + };
+46
lib/storage-web.ts
··· 1 + // Web storage adapter using localStorage + BroadcastChannel 2 + // Mimics browser.storage API for via proxy client 3 + 4 + export interface StorageAdapter { 5 + get(key: string): Promise<any>; 6 + set(key: string, value: any): Promise<void>; 7 + onChange(callback: (changes: { key: string; newValue: any; oldValue?: any }) => void): void; 8 + } 9 + 10 + export class WebStorage implements StorageAdapter { 11 + private channel: BroadcastChannel; 12 + private listeners: Array<(changes: { key: string; newValue: any; oldValue?: any }) => void> = []; 13 + 14 + constructor(channelName: string = 'seams-storage') { 15 + this.channel = new BroadcastChannel(channelName); 16 + 17 + // Listen for broadcasts from other contexts 18 + this.channel.onmessage = (event) => { 19 + console.log('[WebStorage] Received broadcast:', event.data); 20 + this.listeners.forEach(callback => callback(event.data)); 21 + }; 22 + } 23 + 24 + async get(key: string): Promise<any> { 25 + const value = localStorage.getItem(key); 26 + return value ? JSON.parse(value) : null; 27 + } 28 + 29 + async set(key: string, value: any): Promise<void> { 30 + const oldValue = await this.get(key); 31 + localStorage.setItem(key, JSON.stringify(value)); 32 + 33 + // Broadcast change to other contexts (sidebar, content script, other tabs) 34 + const change = { key, newValue: value, oldValue }; 35 + console.log('[WebStorage] Broadcasting change:', change); 36 + this.channel.postMessage(change); 37 + } 38 + 39 + onChange(callback: (changes: { key: string; newValue: any; oldValue?: any }) => void): void { 40 + this.listeners.push(callback); 41 + } 42 + 43 + close(): void { 44 + this.channel.close(); 45 + } 46 + }
+3 -1
package.json
··· 6 6 "scripts": { 7 7 "dev": "wxt", 8 8 "build": "wxt build", 9 - "zip": "wxt zip" 9 + "zip": "wxt zip", 10 + "build:via": "vite build --config vite.via.config.ts" 10 11 }, 11 12 "repository": { 12 13 "type": "git", ··· 27 28 }, 28 29 "devDependencies": { 29 30 "@flydotio/dockerfile": "^0.7.10", 31 + "vite": "^5.0.0", 30 32 "wxt": "0.20.9" 31 33 }, 32 34 "pnpm": {
+259 -37
pnpm-lock.yaml
··· 27 27 '@flydotio/dockerfile': 28 28 specifier: ^0.7.10 29 29 version: 0.7.10(@types/node@24.8.1) 30 + vite: 31 + specifier: ^5.0.0 32 + version: 5.4.21(@types/node@24.8.1) 30 33 wxt: 31 34 specifier: 0.20.9 32 - version: 0.20.9(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.5) 35 + version: 0.20.9(@types/node@24.8.1)(rollup@4.52.5) 33 36 34 37 packages: 35 38 ··· 121 124 engines: {node: '>= 0.10.4'} 122 125 hasBin: true 123 126 127 + '@esbuild/aix-ppc64@0.21.5': 128 + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 129 + engines: {node: '>=12'} 130 + cpu: [ppc64] 131 + os: [aix] 132 + 124 133 '@esbuild/aix-ppc64@0.25.11': 125 134 resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} 126 135 engines: {node: '>=18'} 127 136 cpu: [ppc64] 128 137 os: [aix] 129 138 139 + '@esbuild/android-arm64@0.21.5': 140 + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 141 + engines: {node: '>=12'} 142 + cpu: [arm64] 143 + os: [android] 144 + 130 145 '@esbuild/android-arm64@0.25.11': 131 146 resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} 132 147 engines: {node: '>=18'} 133 148 cpu: [arm64] 134 149 os: [android] 135 150 151 + '@esbuild/android-arm@0.21.5': 152 + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 153 + engines: {node: '>=12'} 154 + cpu: [arm] 155 + os: [android] 156 + 136 157 '@esbuild/android-arm@0.25.11': 137 158 resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} 138 159 engines: {node: '>=18'} 139 160 cpu: [arm] 161 + os: [android] 162 + 163 + '@esbuild/android-x64@0.21.5': 164 + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 165 + engines: {node: '>=12'} 166 + cpu: [x64] 140 167 os: [android] 141 168 142 169 '@esbuild/android-x64@0.25.11': ··· 145 172 cpu: [x64] 146 173 os: [android] 147 174 175 + '@esbuild/darwin-arm64@0.21.5': 176 + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 177 + engines: {node: '>=12'} 178 + cpu: [arm64] 179 + os: [darwin] 180 + 148 181 '@esbuild/darwin-arm64@0.25.11': 149 182 resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} 150 183 engines: {node: '>=18'} 151 184 cpu: [arm64] 152 185 os: [darwin] 153 186 187 + '@esbuild/darwin-x64@0.21.5': 188 + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 189 + engines: {node: '>=12'} 190 + cpu: [x64] 191 + os: [darwin] 192 + 154 193 '@esbuild/darwin-x64@0.25.11': 155 194 resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} 156 195 engines: {node: '>=18'} 157 196 cpu: [x64] 158 197 os: [darwin] 159 198 199 + '@esbuild/freebsd-arm64@0.21.5': 200 + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 201 + engines: {node: '>=12'} 202 + cpu: [arm64] 203 + os: [freebsd] 204 + 160 205 '@esbuild/freebsd-arm64@0.25.11': 161 206 resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} 162 207 engines: {node: '>=18'} 163 208 cpu: [arm64] 164 209 os: [freebsd] 165 210 211 + '@esbuild/freebsd-x64@0.21.5': 212 + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 213 + engines: {node: '>=12'} 214 + cpu: [x64] 215 + os: [freebsd] 216 + 166 217 '@esbuild/freebsd-x64@0.25.11': 167 218 resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} 168 219 engines: {node: '>=18'} 169 220 cpu: [x64] 170 221 os: [freebsd] 171 222 223 + '@esbuild/linux-arm64@0.21.5': 224 + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 225 + engines: {node: '>=12'} 226 + cpu: [arm64] 227 + os: [linux] 228 + 172 229 '@esbuild/linux-arm64@0.25.11': 173 230 resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} 174 231 engines: {node: '>=18'} 175 232 cpu: [arm64] 176 233 os: [linux] 177 234 235 + '@esbuild/linux-arm@0.21.5': 236 + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 237 + engines: {node: '>=12'} 238 + cpu: [arm] 239 + os: [linux] 240 + 178 241 '@esbuild/linux-arm@0.25.11': 179 242 resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} 180 243 engines: {node: '>=18'} 181 244 cpu: [arm] 182 245 os: [linux] 183 246 247 + '@esbuild/linux-ia32@0.21.5': 248 + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 249 + engines: {node: '>=12'} 250 + cpu: [ia32] 251 + os: [linux] 252 + 184 253 '@esbuild/linux-ia32@0.25.11': 185 254 resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} 186 255 engines: {node: '>=18'} 187 256 cpu: [ia32] 188 257 os: [linux] 189 258 259 + '@esbuild/linux-loong64@0.21.5': 260 + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 261 + engines: {node: '>=12'} 262 + cpu: [loong64] 263 + os: [linux] 264 + 190 265 '@esbuild/linux-loong64@0.25.11': 191 266 resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} 192 267 engines: {node: '>=18'} 193 268 cpu: [loong64] 194 269 os: [linux] 195 270 271 + '@esbuild/linux-mips64el@0.21.5': 272 + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 273 + engines: {node: '>=12'} 274 + cpu: [mips64el] 275 + os: [linux] 276 + 196 277 '@esbuild/linux-mips64el@0.25.11': 197 278 resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} 198 279 engines: {node: '>=18'} 199 280 cpu: [mips64el] 200 281 os: [linux] 201 282 283 + '@esbuild/linux-ppc64@0.21.5': 284 + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 285 + engines: {node: '>=12'} 286 + cpu: [ppc64] 287 + os: [linux] 288 + 202 289 '@esbuild/linux-ppc64@0.25.11': 203 290 resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} 204 291 engines: {node: '>=18'} 205 292 cpu: [ppc64] 206 293 os: [linux] 207 294 295 + '@esbuild/linux-riscv64@0.21.5': 296 + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 297 + engines: {node: '>=12'} 298 + cpu: [riscv64] 299 + os: [linux] 300 + 208 301 '@esbuild/linux-riscv64@0.25.11': 209 302 resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} 210 303 engines: {node: '>=18'} 211 304 cpu: [riscv64] 212 305 os: [linux] 213 306 307 + '@esbuild/linux-s390x@0.21.5': 308 + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 309 + engines: {node: '>=12'} 310 + cpu: [s390x] 311 + os: [linux] 312 + 214 313 '@esbuild/linux-s390x@0.25.11': 215 314 resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} 216 315 engines: {node: '>=18'} 217 316 cpu: [s390x] 317 + os: [linux] 318 + 319 + '@esbuild/linux-x64@0.21.5': 320 + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 321 + engines: {node: '>=12'} 322 + cpu: [x64] 218 323 os: [linux] 219 324 220 325 '@esbuild/linux-x64@0.25.11': ··· 229 334 cpu: [arm64] 230 335 os: [netbsd] 231 336 337 + '@esbuild/netbsd-x64@0.21.5': 338 + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 339 + engines: {node: '>=12'} 340 + cpu: [x64] 341 + os: [netbsd] 342 + 232 343 '@esbuild/netbsd-x64@0.25.11': 233 344 resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} 234 345 engines: {node: '>=18'} ··· 241 352 cpu: [arm64] 242 353 os: [openbsd] 243 354 355 + '@esbuild/openbsd-x64@0.21.5': 356 + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 357 + engines: {node: '>=12'} 358 + cpu: [x64] 359 + os: [openbsd] 360 + 244 361 '@esbuild/openbsd-x64@0.25.11': 245 362 resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} 246 363 engines: {node: '>=18'} ··· 253 370 cpu: [arm64] 254 371 os: [openharmony] 255 372 373 + '@esbuild/sunos-x64@0.21.5': 374 + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 375 + engines: {node: '>=12'} 376 + cpu: [x64] 377 + os: [sunos] 378 + 256 379 '@esbuild/sunos-x64@0.25.11': 257 380 resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} 258 381 engines: {node: '>=18'} 259 382 cpu: [x64] 260 383 os: [sunos] 261 384 385 + '@esbuild/win32-arm64@0.21.5': 386 + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 387 + engines: {node: '>=12'} 388 + cpu: [arm64] 389 + os: [win32] 390 + 262 391 '@esbuild/win32-arm64@0.25.11': 263 392 resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} 264 393 engines: {node: '>=18'} 265 394 cpu: [arm64] 266 395 os: [win32] 267 396 397 + '@esbuild/win32-ia32@0.21.5': 398 + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 399 + engines: {node: '>=12'} 400 + cpu: [ia32] 401 + os: [win32] 402 + 268 403 '@esbuild/win32-ia32@0.25.11': 269 404 resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} 270 405 engines: {node: '>=18'} 271 406 cpu: [ia32] 407 + os: [win32] 408 + 409 + '@esbuild/win32-x64@0.21.5': 410 + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 411 + engines: {node: '>=12'} 412 + cpu: [x64] 272 413 os: [win32] 273 414 274 415 '@esbuild/win32-x64@0.25.11': ··· 997 1138 998 1139 es6-error@4.1.1: 999 1140 resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} 1141 + 1142 + esbuild@0.21.5: 1143 + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 1144 + engines: {node: '>=12'} 1145 + hasBin: true 1000 1146 1001 1147 esbuild@0.25.11: 1002 1148 resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} ··· 1944 2090 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1945 2091 hasBin: true 1946 2092 1947 - vite@7.1.11: 1948 - resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==} 1949 - engines: {node: ^20.19.0 || >=22.12.0} 2093 + vite@5.4.21: 2094 + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} 2095 + engines: {node: ^18.0.0 || >=20.0.0} 1950 2096 hasBin: true 1951 2097 peerDependencies: 1952 - '@types/node': ^20.19.0 || >=22.12.0 1953 - jiti: '>=1.21.0' 1954 - less: ^4.0.0 2098 + '@types/node': ^18.0.0 || >=20.0.0 2099 + less: '*' 1955 2100 lightningcss: ^1.21.0 1956 - sass: ^1.70.0 1957 - sass-embedded: ^1.70.0 1958 - stylus: '>=0.54.8' 1959 - sugarss: ^5.0.0 1960 - terser: ^5.16.0 1961 - tsx: ^4.8.1 1962 - yaml: ^2.4.2 2101 + sass: '*' 2102 + sass-embedded: '*' 2103 + stylus: '*' 2104 + sugarss: '*' 2105 + terser: ^5.4.0 1963 2106 peerDependenciesMeta: 1964 2107 '@types/node': 1965 - optional: true 1966 - jiti: 1967 2108 optional: true 1968 2109 less: 1969 2110 optional: true ··· 1978 2119 sugarss: 1979 2120 optional: true 1980 2121 terser: 1981 - optional: true 1982 - tsx: 1983 - optional: true 1984 - yaml: 1985 2122 optional: true 1986 2123 1987 2124 watchpack@2.4.4: ··· 2206 2343 transitivePeerDependencies: 2207 2344 - supports-color 2208 2345 2346 + '@esbuild/aix-ppc64@0.21.5': 2347 + optional: true 2348 + 2209 2349 '@esbuild/aix-ppc64@0.25.11': 2350 + optional: true 2351 + 2352 + '@esbuild/android-arm64@0.21.5': 2210 2353 optional: true 2211 2354 2212 2355 '@esbuild/android-arm64@0.25.11': 2213 2356 optional: true 2214 2357 2358 + '@esbuild/android-arm@0.21.5': 2359 + optional: true 2360 + 2215 2361 '@esbuild/android-arm@0.25.11': 2362 + optional: true 2363 + 2364 + '@esbuild/android-x64@0.21.5': 2216 2365 optional: true 2217 2366 2218 2367 '@esbuild/android-x64@0.25.11': 2219 2368 optional: true 2220 2369 2370 + '@esbuild/darwin-arm64@0.21.5': 2371 + optional: true 2372 + 2221 2373 '@esbuild/darwin-arm64@0.25.11': 2374 + optional: true 2375 + 2376 + '@esbuild/darwin-x64@0.21.5': 2222 2377 optional: true 2223 2378 2224 2379 '@esbuild/darwin-x64@0.25.11': 2225 2380 optional: true 2226 2381 2382 + '@esbuild/freebsd-arm64@0.21.5': 2383 + optional: true 2384 + 2227 2385 '@esbuild/freebsd-arm64@0.25.11': 2228 2386 optional: true 2229 2387 2388 + '@esbuild/freebsd-x64@0.21.5': 2389 + optional: true 2390 + 2230 2391 '@esbuild/freebsd-x64@0.25.11': 2231 2392 optional: true 2232 2393 2394 + '@esbuild/linux-arm64@0.21.5': 2395 + optional: true 2396 + 2233 2397 '@esbuild/linux-arm64@0.25.11': 2234 2398 optional: true 2235 2399 2400 + '@esbuild/linux-arm@0.21.5': 2401 + optional: true 2402 + 2236 2403 '@esbuild/linux-arm@0.25.11': 2237 2404 optional: true 2238 2405 2406 + '@esbuild/linux-ia32@0.21.5': 2407 + optional: true 2408 + 2239 2409 '@esbuild/linux-ia32@0.25.11': 2240 2410 optional: true 2241 2411 2412 + '@esbuild/linux-loong64@0.21.5': 2413 + optional: true 2414 + 2242 2415 '@esbuild/linux-loong64@0.25.11': 2243 2416 optional: true 2244 2417 2418 + '@esbuild/linux-mips64el@0.21.5': 2419 + optional: true 2420 + 2245 2421 '@esbuild/linux-mips64el@0.25.11': 2246 2422 optional: true 2247 2423 2424 + '@esbuild/linux-ppc64@0.21.5': 2425 + optional: true 2426 + 2248 2427 '@esbuild/linux-ppc64@0.25.11': 2428 + optional: true 2429 + 2430 + '@esbuild/linux-riscv64@0.21.5': 2249 2431 optional: true 2250 2432 2251 2433 '@esbuild/linux-riscv64@0.25.11': 2252 2434 optional: true 2253 2435 2436 + '@esbuild/linux-s390x@0.21.5': 2437 + optional: true 2438 + 2254 2439 '@esbuild/linux-s390x@0.25.11': 2440 + optional: true 2441 + 2442 + '@esbuild/linux-x64@0.21.5': 2255 2443 optional: true 2256 2444 2257 2445 '@esbuild/linux-x64@0.25.11': ··· 2260 2448 '@esbuild/netbsd-arm64@0.25.11': 2261 2449 optional: true 2262 2450 2451 + '@esbuild/netbsd-x64@0.21.5': 2452 + optional: true 2453 + 2263 2454 '@esbuild/netbsd-x64@0.25.11': 2264 2455 optional: true 2265 2456 2266 2457 '@esbuild/openbsd-arm64@0.25.11': 2458 + optional: true 2459 + 2460 + '@esbuild/openbsd-x64@0.21.5': 2267 2461 optional: true 2268 2462 2269 2463 '@esbuild/openbsd-x64@0.25.11': ··· 2272 2466 '@esbuild/openharmony-arm64@0.25.11': 2273 2467 optional: true 2274 2468 2469 + '@esbuild/sunos-x64@0.21.5': 2470 + optional: true 2471 + 2275 2472 '@esbuild/sunos-x64@0.25.11': 2473 + optional: true 2474 + 2475 + '@esbuild/win32-arm64@0.21.5': 2276 2476 optional: true 2277 2477 2278 2478 '@esbuild/win32-arm64@0.25.11': 2279 2479 optional: true 2280 2480 2481 + '@esbuild/win32-ia32@0.21.5': 2482 + optional: true 2483 + 2281 2484 '@esbuild/win32-ia32@0.25.11': 2485 + optional: true 2486 + 2487 + '@esbuild/win32-x64@0.21.5': 2282 2488 optional: true 2283 2489 2284 2490 '@esbuild/win32-x64@0.25.11': ··· 2936 3142 es-module-lexer@1.7.0: {} 2937 3143 2938 3144 es6-error@4.1.1: {} 3145 + 3146 + esbuild@0.21.5: 3147 + optionalDependencies: 3148 + '@esbuild/aix-ppc64': 0.21.5 3149 + '@esbuild/android-arm': 0.21.5 3150 + '@esbuild/android-arm64': 0.21.5 3151 + '@esbuild/android-x64': 0.21.5 3152 + '@esbuild/darwin-arm64': 0.21.5 3153 + '@esbuild/darwin-x64': 0.21.5 3154 + '@esbuild/freebsd-arm64': 0.21.5 3155 + '@esbuild/freebsd-x64': 0.21.5 3156 + '@esbuild/linux-arm': 0.21.5 3157 + '@esbuild/linux-arm64': 0.21.5 3158 + '@esbuild/linux-ia32': 0.21.5 3159 + '@esbuild/linux-loong64': 0.21.5 3160 + '@esbuild/linux-mips64el': 0.21.5 3161 + '@esbuild/linux-ppc64': 0.21.5 3162 + '@esbuild/linux-riscv64': 0.21.5 3163 + '@esbuild/linux-s390x': 0.21.5 3164 + '@esbuild/linux-x64': 0.21.5 3165 + '@esbuild/netbsd-x64': 0.21.5 3166 + '@esbuild/openbsd-x64': 0.21.5 3167 + '@esbuild/sunos-x64': 0.21.5 3168 + '@esbuild/win32-arm64': 0.21.5 3169 + '@esbuild/win32-ia32': 0.21.5 3170 + '@esbuild/win32-x64': 0.21.5 2939 3171 2940 3172 esbuild@0.25.11: 2941 3173 optionalDependencies: ··· 3914 4146 3915 4147 uuid@8.3.2: {} 3916 4148 3917 - vite-node@3.2.4(@types/node@24.8.1)(jiti@2.6.1): 4149 + vite-node@3.2.4(@types/node@24.8.1): 3918 4150 dependencies: 3919 4151 cac: 6.7.14 3920 4152 debug: 4.4.3 3921 4153 es-module-lexer: 1.7.0 3922 4154 pathe: 2.0.3 3923 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1) 4155 + vite: 5.4.21(@types/node@24.8.1) 3924 4156 transitivePeerDependencies: 3925 4157 - '@types/node' 3926 - - jiti 3927 4158 - less 3928 4159 - lightningcss 3929 4160 - sass ··· 3932 4163 - sugarss 3933 4164 - supports-color 3934 4165 - terser 3935 - - tsx 3936 - - yaml 3937 4166 3938 - vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1): 4167 + vite@5.4.21(@types/node@24.8.1): 3939 4168 dependencies: 3940 - esbuild: 0.25.11 3941 - fdir: 6.5.0(picomatch@4.0.3) 3942 - picomatch: 4.0.3 4169 + esbuild: 0.21.5 3943 4170 postcss: 8.5.6 3944 4171 rollup: 4.52.5 3945 - tinyglobby: 0.2.15 3946 4172 optionalDependencies: 3947 4173 '@types/node': 24.8.1 3948 4174 fsevents: 2.3.3 3949 - jiti: 2.6.1 3950 4175 3951 4176 watchpack@2.4.4: 3952 4177 dependencies: ··· 4027 4252 dependencies: 4028 4253 is-wsl: 3.1.0 4029 4254 4030 - wxt@0.20.9(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.5): 4255 + wxt@0.20.9(@types/node@24.8.1)(rollup@4.52.5): 4031 4256 dependencies: 4032 4257 '@1natsu/wait-element': 4.1.2 4033 4258 '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.52.5) ··· 4071 4296 publish-browser-extension: 3.0.2 4072 4297 scule: 1.3.0 4073 4298 unimport: 5.5.0 4074 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1) 4075 - vite-node: 3.2.4(@types/node@24.8.1)(jiti@2.6.1) 4299 + vite: 5.4.21(@types/node@24.8.1) 4300 + vite-node: 3.2.4(@types/node@24.8.1) 4076 4301 web-ext-run: 0.2.4 4077 4302 transitivePeerDependencies: 4078 4303 - '@types/node' 4079 4304 - canvas 4080 - - jiti 4081 4305 - less 4082 4306 - lightningcss 4083 4307 - rollup ··· 4087 4311 - sugarss 4088 4312 - supports-color 4089 4313 - terser 4090 - - tsx 4091 - - yaml 4092 4314 4093 4315 xdg-basedir@5.1.0: {} 4094 4316
+323
public/about.css
··· 1 + @import url('fonts.css'); 2 + 3 + * { 4 + box-sizing: border-box; 5 + margin: 0; 6 + padding: 0; 7 + } 8 + 9 + :root { 10 + --forest-green: #2d5016; 11 + --forest-green-light: #3d6b1f; 12 + --forest-green-dark: #1f3810; 13 + } 14 + 15 + body { 16 + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 17 + background: #fafafa; 18 + color: #1a1a1a; 19 + position: relative; 20 + line-height: 1.6; 21 + margin: 0; 22 + padding: 0; 23 + } 24 + 25 + /* Blueprint grid background */ 26 + body::before { 27 + content: ''; 28 + position: fixed; 29 + inset: 0; 30 + pointer-events: none; 31 + background-image: 32 + radial-gradient(circle, rgba(45, 80, 22, 0.06) 1px, transparent 1px); 33 + background-size: 20px 20px; 34 + z-index: 0; 35 + } 36 + 37 + /* Layout - Sidebar + Main Content */ 38 + .layout { 39 + display: flex; 40 + min-height: 100vh; 41 + position: relative; 42 + z-index: 1; 43 + } 44 + 45 + /* Sidebar */ 46 + .sidebar { 47 + width: 420px; 48 + background: #fff; 49 + border-right: 2px dashed #d0d0d0; 50 + position: sticky; 51 + top: 0; 52 + height: 100vh; 53 + overflow-y: auto; 54 + flex-shrink: 0; 55 + } 56 + 57 + .sidebar-content { 58 + display: flex; 59 + flex-direction: column; 60 + justify-content: space-between; 61 + min-height: 100vh; 62 + padding: 60px 0; 63 + } 64 + 65 + /* Hero Section in Sidebar */ 66 + .hero { 67 + flex: 1; 68 + display: flex; 69 + flex-direction: column; 70 + justify-content: center; 71 + align-items: center; 72 + text-align: center; 73 + padding: 0 48px; 74 + } 75 + 76 + .logo { 77 + font-family: 'Spectral', serif; 78 + font-size: 16px; 79 + font-weight: 700; 80 + letter-spacing: 0.1em; 81 + text-transform: uppercase; 82 + color: #666; 83 + margin-bottom: 24px; 84 + } 85 + 86 + .hero h1 { 87 + font-family: 'Fraunces', serif; 88 + font-size: clamp(28px, 3vw, 40px); 89 + font-weight: 600; 90 + margin-bottom: 24px; 91 + color: #1a1a1a; 92 + line-height: 1.2; 93 + letter-spacing: -0.01em; 94 + } 95 + 96 + /* CTA Buttons */ 97 + .cta-buttons { 98 + display: flex; 99 + gap: 12px; 100 + flex-direction: column; 101 + align-items: center; 102 + } 103 + 104 + .cta-primary, 105 + .cta-secondary { 106 + padding: 12px 28px; 107 + border-radius: 2px; 108 + font-size: 14px; 109 + font-weight: 500; 110 + text-decoration: none; 111 + transition: all 0.2s; 112 + border: 1px dashed; 113 + display: inline-block; 114 + } 115 + 116 + .cta-primary { 117 + background: var(--forest-green); 118 + color: #fff; 119 + border-color: var(--forest-green-dark); 120 + } 121 + 122 + .cta-primary:hover { 123 + background: var(--forest-green-dark); 124 + transform: translateY(-1px); 125 + } 126 + 127 + .cta-secondary { 128 + background: transparent; 129 + color: var(--forest-green); 130 + border-color: var(--forest-green); 131 + } 132 + 133 + .cta-secondary:hover { 134 + border-color: var(--forest-green-dark); 135 + background: rgba(45, 80, 22, 0.05); 136 + } 137 + 138 + /* Main Content Area */ 139 + .main-content { 140 + flex: 1; 141 + background: #fafafa; 142 + overflow-y: auto; 143 + } 144 + 145 + /* Content Section */ 146 + .content-section { 147 + padding: 60px 48px; 148 + max-width: 900px; 149 + } 150 + 151 + .content-container h1 { 152 + font-family: 'Fraunces', serif; 153 + font-size: 36px; 154 + font-weight: 700; 155 + margin-bottom: 24px; 156 + color: #1a1a1a; 157 + line-height: 1.2; 158 + } 159 + 160 + .content-container h2 { 161 + font-family: 'Fraunces', serif; 162 + font-size: 24px; 163 + font-weight: 600; 164 + margin-top: 40px; 165 + margin-bottom: 16px; 166 + color: #1a1a1a; 167 + line-height: 1.3; 168 + } 169 + 170 + .content-container p { 171 + font-family: 'Fraunces', serif; 172 + margin-bottom: 16px; 173 + line-height: 1.7; 174 + color: #333; 175 + font-size: 16px; 176 + } 177 + 178 + .content-container ul { 179 + font-family: 'Fraunces', serif; 180 + margin-bottom: 16px; 181 + padding-left: 24px; 182 + } 183 + 184 + .content-container li { 185 + margin-bottom: 12px; 186 + line-height: 1.7; 187 + color: #333; 188 + } 189 + 190 + .content-container a { 191 + color: var(--forest-green); 192 + text-decoration: none; 193 + border-bottom: 1px dashed var(--forest-green); 194 + transition: border-color 0.2s; 195 + } 196 + 197 + .content-container a:hover { 198 + border-bottom-color: var(--forest-green-dark); 199 + } 200 + 201 + .content-container strong { 202 + font-weight: 600; 203 + color: #1a1a1a; 204 + } 205 + 206 + /* Footer in Sidebar */ 207 + .footer { 208 + padding-top: 40px; 209 + color: #999; 210 + font-size: 13px; 211 + text-align: center; 212 + margin: 0; 213 + border-top: 2px dashed #d0d0d0; 214 + } 215 + 216 + .mobile-footer { 217 + display: none; 218 + } 219 + 220 + .desktop-footer { 221 + display: block; 222 + } 223 + 224 + .footer-icons { 225 + display: flex; 226 + gap: 20px; 227 + justify-content: center; 228 + align-items: center; 229 + } 230 + 231 + .footer-icons a { 232 + color: #1a1a1a; 233 + text-decoration: none; 234 + transition: all 0.2s; 235 + display: flex; 236 + align-items: center; 237 + justify-content: center; 238 + } 239 + 240 + .footer-icons a img, 241 + .footer-icons a svg { 242 + width: 32px; 243 + height: 32px; 244 + opacity: 0.6; 245 + transition: opacity 0.2s; 246 + } 247 + 248 + .footer-icons a:hover img, 249 + .footer-icons a:hover svg { 250 + opacity: 1; 251 + } 252 + 253 + /* Responsive */ 254 + @media (max-width: 1024px) { 255 + .layout { 256 + flex-direction: column; 257 + } 258 + 259 + .sidebar { 260 + width: 100%; 261 + height: auto; 262 + position: relative; 263 + border-right: none; 264 + border-bottom: 2px dashed #d0d0d0; 265 + } 266 + 267 + .sidebar-content { 268 + min-height: auto; 269 + padding: 40px 0; 270 + } 271 + 272 + .hero { 273 + justify-content: flex-start; 274 + padding: 0 32px; 275 + } 276 + 277 + .desktop-footer { 278 + display: none; 279 + } 280 + 281 + .mobile-footer { 282 + display: block; 283 + padding: 40px 32px; 284 + margin: 0; 285 + border-top: 2px dashed #d0d0d0; 286 + background: #fafafa; 287 + } 288 + 289 + .content-section { 290 + padding: 48px 32px; 291 + } 292 + } 293 + 294 + @media (max-width: 640px) { 295 + .sidebar-content { 296 + padding: 32px 0; 297 + } 298 + 299 + .hero { 300 + padding: 0 24px; 301 + } 302 + 303 + .hero h1 { 304 + font-size: 28px; 305 + } 306 + 307 + .mobile-footer { 308 + padding: 32px 24px; 309 + font-size: 12px; 310 + } 311 + 312 + .content-section { 313 + padding: 32px 24px; 314 + } 315 + 316 + .content-container h1 { 317 + font-size: 28px; 318 + } 319 + 320 + .content-container h2 { 321 + font-size: 20px; 322 + } 323 + }
+85
public/about.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 + <title>About - Seams.so</title> 7 + <link rel="stylesheet" href="about.css"> 8 + </head> 9 + <body> 10 + <div class="layout"> 11 + <aside class="sidebar"> 12 + <div class="sidebar-content"> 13 + <header class="hero"> 14 + <div class="logo">Seams</div> 15 + <h1>About</h1> 16 + <div class="cta-buttons"> 17 + <a href="/" class="cta-secondary">← Back to Home</a> 18 + </div> 19 + </header> 20 + 21 + <footer class="footer desktop-footer"> 22 + <div class="footer-icons"> 23 + <a href="https://tangled.org/@hyl.st/seams.so" target="_blank" aria-label="Tangled"> 24 + <img src="https://semble.so/_next/static/media/tangled-icon.b95d4d65.svg" alt="Tangled" /> 25 + </a> 26 + <a href="https://bsky.app" target="_blank" aria-label="Bluesky"> 27 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 320"> 28 + <path fill="currentColor" d="M180 142c-16.3-31.7-60.7-90.8-102-120C38.5-5.9 23.4-1 13.5 3.4 2.1 8.6 0 26.2 0 36.5c0 10.4 5.7 84.8 9.4 97.2 12.2 41 55.7 55 95.7 50.5-58.7 8.6-110.8 30-42.4 106.1 75.1 77.9 103-16.7 117.3-64.6 14.3 48 30.8 139 116 64.6 64-64.6 17.6-97.5-41.1-106.1 40 4.4 83.5-9.5 95.7-50.5 3.7-12.4 9.4-86.8 9.4-97.2 0-10.3-2-27.9-13.5-33C336.5-1 321.5-6 282 22c-41.3 29.2-85.7 88.3-102 120Z"/> 29 + </svg> 30 + </a> 31 + </div> 32 + </footer> 33 + </div> 34 + </aside> 35 + 36 + <main class="main-content"> 37 + <div class="content-section"> 38 + <div class="content-container"> 39 + <h1>About Seams</h1> 40 + 41 + <p>Seams is an open social annotation tool built on AT Protocol. It's an experiment in collaborative knowledge-building, inspired by tools like Hypothesis, but designed for the decentralized web. <br/> We believe strongly that new tools that respect their users, and allow them to work together can bring around more positive futures</p> 42 + 43 + <h2>Why AT Protocol?</h2> 44 + <ul> 45 + <li><strong>You own your content</strong> - Your annotations are stored in your AT Protocol Personal Data Server (PDS), which in most cases is hosted by Bluesky. If Seams shuts down, all your annotations remain accessible.</li> 46 + <li><strong>It's portable</strong> - Your data can move with you. If you switch PDS providers, Seams continues to work with your annotations.</li> 47 + </ul> 48 + 49 + <h2>Get Started</h2> 50 + <p>To start using Seams, you'll need:</p> 51 + <ul> 52 + <li>An AT Protocol account (most likely a Bluesky account)</li> 53 + <li>The Seams browser extension (available for Chrome and Firefox)</li> 54 + </ul> 55 + <p>Once installed, simply highlight text on any webpage and add your annotation. Your insights become part of the collective knowledge layer.</p> 56 + 57 + <h2>Privacy</h2> 58 + <p>...or "We don't want you data"</p> 59 + <ul> 60 + <li><strong>Your annotations are yours</strong> - They're stored in your AT Protocol Personal Data Server (PDS), which you control. We don't own and won't try to sell your data.</li> 61 + <li><strong>Public by default</strong> - Annotations you create are publicly visible to anyone who visits the same page or finds them through our feed. This is a social annotation tool, not a private archive. When AT Protocol introduces more granular privacy controls, we will adopt their approach.</li> 62 + <li><strong>What we collect</strong> - The app indexes annotations from your PDS for display. We cache profile information (handle, display name, avatar) for performance. We don't track your browsing behavior or use analytics that can personally identify you.</li> 63 + </ul> 64 + 65 + <h2>Contact</h2> 66 + <p>Questions or feedback? Reach out to <a href="https://bsky.app/profile/seams.so" target="_blank">@seams.so</a> on Bluesky.</p> 67 + </div> 68 + </div> 69 + </main> 70 + 71 + <footer class="footer mobile-footer"> 72 + <div class="footer-icons"> 73 + <a href="https://tangled.org/@sealight.xyz/seams.so" target="_blank" aria-label="Tangled"> 74 + <img src="https://semble.so/_next/static/media/tangled-icon.b95d4d65.svg" alt="Tangled" /> 75 + </a> 76 + <a href="https://bsky.app" target="_blank" aria-label="Bluesky"> 77 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 320"> 78 + <path fill="currentColor" d="M180 142c-16.3-31.7-60.7-90.8-102-120C38.5-5.9 23.4-1 13.5 3.4 2.1 8.6 0 26.2 0 36.5c0 10.4 5.7 84.8 9.4 97.2 12.2 41 55.7 55 95.7 50.5-58.7 8.6-110.8 30-42.4 106.1 75.1 77.9 103-16.7 117.3-64.6 14.3 48 30.8 139 116 64.6 64-64.6 17.6-97.5-41.1-106.1 40 4.4 83.5-9.5 95.7-50.5 3.7-12.4 9.4-86.8 9.4-97.2 0-10.3-2-27.9-13.5-33C336.5-1 321.5-6 282 22c-41.3 29.2-85.7 88.3-102 120Z"/> 79 + </svg> 80 + </a> 81 + </div> 82 + </footer> 83 + </div> 84 + </body> 85 + </html>
+64
public/fonts.css
··· 1 + /* fraunces-regular - latin */ 2 + @font-face { 3 + font-display: swap; 4 + font-family: 'Fraunces'; 5 + font-style: normal; 6 + font-weight: 400; 7 + src: url('fonts/fraunces-v38-latin-regular.eot'); /* IE9 Compat Modes */ 8 + src: url('fonts/fraunces-v38-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 9 + url('fonts/fraunces-v38-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 10 + url('fonts/fraunces-v38-latin-regular.woff') format('woff'), /* Modern Browsers */ 11 + url('fonts/fraunces-v38-latin-regular.ttf') format('truetype'); /* Safari, Android, iOS */ 12 + } 13 + 14 + /* fraunces-600 - latin */ 15 + @font-face { 16 + font-display: swap; 17 + font-family: 'Fraunces'; 18 + font-style: normal; 19 + font-weight: 600; 20 + src: url('fonts/fraunces-v38-latin-600.eot'); /* IE9 Compat Modes */ 21 + src: url('fonts/fraunces-v38-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 22 + url('fonts/fraunces-v38-latin-600.woff2') format('woff2'), /* Super Modern Browsers */ 23 + url('fonts/fraunces-v38-latin-600.woff') format('woff'), /* Modern Browsers */ 24 + url('fonts/fraunces-v38-latin-600.ttf') format('truetype'); /* Safari, Android, iOS */ 25 + } 26 + 27 + /* fraunces-700 - latin */ 28 + @font-face { 29 + font-display: swap; 30 + font-family: 'Fraunces'; 31 + font-style: normal; 32 + font-weight: 700; 33 + src: url('fonts/fraunces-v38-latin-700.eot'); /* IE9 Compat Modes */ 34 + src: url('fonts/fraunces-v38-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 35 + url('fonts/fraunces-v38-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ 36 + url('fonts/fraunces-v38-latin-700.woff') format('woff'), /* Modern Browsers */ 37 + url('fonts/fraunces-v38-latin-700.ttf') format('truetype'); /* Safari, Android, iOS */ 38 + } 39 + 40 + /* spectral-600 - latin */ 41 + @font-face { 42 + font-display: swap; 43 + font-family: 'Spectral'; 44 + font-style: normal; 45 + font-weight: 600; 46 + src: url('fonts/spectral-v15-latin-600.eot'); /* IE9 Compat Modes */ 47 + src: url('fonts/spectral-v15-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 48 + url('fonts/spectral-v15-latin-600.woff2') format('woff2'), /* Super Modern Browsers */ 49 + url('fonts/spectral-v15-latin-600.woff') format('woff'), /* Modern Browsers */ 50 + url('fonts/spectral-v15-latin-600.ttf') format('truetype'); /* Safari, Android, iOS */ 51 + } 52 + 53 + /* spectral-700 - latin */ 54 + @font-face { 55 + font-display: swap; 56 + font-family: 'Spectral'; 57 + font-style: normal; 58 + font-weight: 700; 59 + src: url('fonts/spectral-v15-latin-700.eot'); /* IE9 Compat Modes */ 60 + src: url('fonts/spectral-v15-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 61 + url('fonts/spectral-v15-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ 62 + url('fonts/spectral-v15-latin-700.woff') format('woff'), /* Modern Browsers */ 63 + url('fonts/spectral-v15-latin-700.ttf') format('truetype'); /* Safari, Android, iOS */ 64 + }
public/fonts/fraunces-v38-latin-600.eot

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-600.ttf

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-600.woff

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-600.woff2

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-700.eot

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-700.ttf

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-700.woff

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-700.woff2

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-regular.eot

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-regular.ttf

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-regular.woff

This is a binary file and will not be displayed.

public/fonts/fraunces-v38-latin-regular.woff2

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-600.eot

This is a binary file and will not be displayed.

+341
public/fonts/spectral-v15-latin-600.svg
··· 1 + <?xml version="1.0" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 3 + <svg xmlns="http://www.w3.org/2000/svg"> 4 + <defs > 5 + <font id="Spectral" horiz-adv-x="598" ><font-face 6 + font-family="Spectral SemiBold" 7 + units-per-em="1000" 8 + panose-1="0 0 0 0 0 0 0 0 0 0" 9 + ascent="1059" 10 + descent="-463" 11 + alphabetic="0" /> 12 + <glyph unicode=" " glyph-name="space" horiz-adv-x="250" /> 13 + <glyph unicode="!" glyph-name="exclam" horiz-adv-x="261" d="M117 211L62 660H199L144 211H117ZM130 -5Q102 -5 82 15T62 64Q62 92 82 112T130 133Q158 133 178 113T199 64Q199 36 179 16T130 -5Z" /> 14 + <glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="450" d="M114 490L76 740H174L136 490H114ZM314 490L276 740H374L336 490H314Z" /> 15 + <glyph unicode="#" glyph-name="numbersign" horiz-adv-x="536" d="M57 0L116 202H19V251H130L174 402H77V451H188L249 660H301L240 451H368L429 660H481L420 451H517V402H406L362 251H459V202H347L289 0H237L296 202H167L109 0H57ZM182 251H310L354 402H226L182 251Z" /> 16 + <glyph unicode="$" glyph-name="dollar" horiz-adv-x="536" d="M207 -80V-5Q133 8 94 48T54 134Q54 174 94 174H145V77Q169 56 207 46V296Q124 333 91 375T58 479Q58 518 78 553T131 616T207 658V740H244V667Q262 670 280 670Q292 670 304 669V740H341V664Q402 17 + 652 436 618T470 543Q470 522 461 513T431 504H385V588Q367 604 341 612V374Q397 347 429 320T475 260T489 185Q489 118 447 70T341 2V-80H304V-7Q283 -10 263 -10Q253 -10 244 -9V-80H207ZM282 619Q261 619 244 615V418Q257 411 272 404T304 390V618Q293 619 282 18 + 619ZM163 523Q163 498 172 479T207 441V600Q163 574 163 523ZM261 39Q284 39 304 44V251Q280 264 244 280V40Q252 40 261 39ZM388 141Q388 169 379 189T341 229V58Q388 85 388 141Z" /> 19 + <glyph unicode="%" glyph-name="percent" horiz-adv-x="775" d="M161 345Q91 345 51 400T10 548Q10 605 29 651T83 723T161 750Q231 750 271 695T312 547Q312 490 292 444T238 372T161 345ZM168 372Q185 372 195 396T209 456T214 531Q214 581 208 624T189 695T155 20 + 722Q138 722 128 699T113 640T108 564Q108 514 114 471T133 400T168 372ZM133 17L602 750L643 723L174 -10L133 17ZM615 -10Q545 -10 505 45T464 193Q464 250 483 296T537 368T615 395Q685 395 725 340T766 192Q766 135 746 89T692 17T615 -10ZM622 17Q639 17 649 21 + 41T663 101T668 176Q668 226 662 269T643 340T609 367Q592 367 582 344T567 285T562 209Q562 159 568 116T587 45T622 17Z" /> 22 + <glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="736" d="M233 -10Q142 -10 86 35T30 160Q30 212 63 259T169 347Q138 380 121 405T95 453T87 507Q87 551 113 588T184 647T286 670Q370 670 418 633T467 537Q467 494 428 458T302 382Q311 374 320 365T338 23 + 346L491 192Q542 269 584 390L486 429V445H729V429L643 392Q613 326 583 269T519 164L631 52L714 16V0H514L441 73Q397 33 346 12T233 -10ZM202 540Q202 506 220 477T277 408Q313 437 332 469T352 541Q352 577 332 601T277 625Q243 625 223 601T202 540ZM147 194Q147 24 + 130 184 95T282 59Q351 59 411 104L255 260Q238 276 224 291T197 319Q166 289 157 261T147 194Z" /> 25 + <glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="250" d="M114 490L76 740H174L136 490H114Z" /> 26 + <glyph unicode="(" glyph-name="parenleft" horiz-adv-x="257" d="M224 -150Q139 -51 95 60T51 295Q51 419 95 530T224 740H247V737Q187 641 155 537T122 295Q122 204 136 128T179 -15T247 -147V-150H224Z" /> 27 + <glyph unicode=")" glyph-name="parenright" horiz-adv-x="257" d="M10 -150V-147Q51 -82 78 -15T120 128T135 295Q135 432 103 536T10 737V740H33Q118 641 162 530T206 295Q206 171 162 60T33 -150H10Z" /> 28 + <glyph unicode="*" glyph-name="asterisk" horiz-adv-x="379" d="M24 595Q22 616 27 633T48 665L178 599L153 741Q189 760 225 741L201 599L330 665Q345 651 351 634T355 595L209 574L314 470Q299 433 255 428L189 555L124 428Q80 433 65 470L169 574L24 595Z" /> 29 + <glyph unicode="+" glyph-name="plus" horiz-adv-x="536" d="M240 62V246H58V298H240V482H296V298H478V246H296V62H240Z" /> 30 + <glyph unicode="," glyph-name="comma" horiz-adv-x="261" d="M29 -197L87 108H211V91L50 -197H29Z" /> 31 + <glyph unicode="-" glyph-name="hyphen" horiz-adv-x="371" d="M48 222V292H323V222H48Z" /> 32 + <glyph unicode="." glyph-name="period" horiz-adv-x="261" d="M130 -5Q102 -5 82 15T62 64Q62 92 82 112T130 133Q158 133 178 113T199 64Q199 36 179 16T130 -5Z" /> 33 + <glyph unicode="/" glyph-name="slash" horiz-adv-x="250" d="M0 -120L200 750H250L50 -120H0Z" /> 34 + <glyph unicode="0" glyph-name="zero" horiz-adv-x="536" d="M268 -10Q194 -10 141 31T61 149T33 330Q33 428 62 504T145 625T268 670Q342 670 395 629T475 512T503 330Q503 233 473 156T390 35T268 -10ZM286 38Q315 38 334 71T364 164T374 299Q374 392 362 465T322 35 + 581T253 623Q223 623 203 590T173 499T162 363Q162 269 175 196T215 80T286 38Z" /> 36 + <glyph unicode="1" glyph-name="one" horiz-adv-x="536" d="M150 0V16L243 53V552L73 472V510L319 660H364V53L447 16V0H150Z" /> 37 + <glyph unicode="2" glyph-name="two" horiz-adv-x="536" d="M52 0V32Q135 125 189 188T275 294T322 369T341 431T345 500Q345 555 319 585T244 615Q188 615 146 583V467H73Q55 467 48 474T40 504Q40 532 59 561T111 615T188 655T279 670Q338 670 383 647T453 583T478 38 + 493Q478 461 471 434T444 378T391 312T303 224T173 100H427L482 198H498L488 0H52Z" /> 39 + <glyph unicode="3" glyph-name="three" horiz-adv-x="536" d="M258 -10Q194 -10 144 9T65 59T36 124Q36 146 43 153T68 161H142V64Q182 39 248 39Q307 39 340 76T373 172Q373 241 337 280T212 319H157V365H197Q258 365 298 402T339 508Q339 568 315 594T245 621Q226 40 + 621 204 616T159 596V485H85Q66 485 59 492T52 521Q52 558 82 592T164 648T277 670Q337 670 380 649T448 593T472 513Q472 462 430 419T310 359Q412 346 459 298T507 179Q507 130 475 87T386 17T258 -10Z" /> 41 + <glyph unicode="4" glyph-name="four" horiz-adv-x="536" d="M191 0V16L284 53V182H12V208L359 660H404V256H523V182H404V53L488 16V0H191ZM109 256H284V491L109 256Z" /> 42 + <glyph unicode="5" glyph-name="five" horiz-adv-x="536" d="M476 227Q476 156 442 103T349 20T212 -10Q135 -10 97 14T59 67Q59 85 75 96L124 132L189 35Q200 34 214 34Q279 34 323 73T367 186Q367 255 323 294T192 334Q167 334 142 331T88 320L100 660H444V569H151L144 43 + 381Q212 410 275 410Q338 410 383 386T452 320T476 227Z" /> 44 + <glyph unicode="6" glyph-name="six" horiz-adv-x="536" d="M271 -10Q201 -10 148 21T65 109T36 240Q36 348 85 434T227 580T445 670V637Q326 600 257 516T171 316Q198 352 237 372T328 392Q383 392 422 367T483 298T505 201Q505 147 479 99T401 20T271 -10ZM166 45 + 243Q166 140 196 89T275 37Q311 37 333 58T367 112T378 176Q378 244 352 282T271 320Q238 320 211 305T167 263Q166 253 166 243Z" /> 46 + <glyph unicode="7" glyph-name="seven" horiz-adv-x="536" d="M98 0Q124 60 151 115T211 233T290 372T396 553H55V660H486V629Q451 560 412 482T337 323T272 159T227 0H98Z" /> 47 + <glyph unicode="8" glyph-name="eight" horiz-adv-x="536" d="M266 -10Q205 -10 154 9T72 64T41 147Q41 176 52 205T91 262T174 320Q110 360 86 399T61 493Q61 541 91 581T169 646T274 670Q328 670 373 649T446 591T474 507Q474 466 439 432T347 367Q424 323 459 48 + 281T495 179Q495 121 463 79T378 13T266 -10ZM176 535Q176 509 185 487T221 442T304 390Q335 411 353 439T371 504Q371 565 343 594T268 624Q228 624 202 601T176 535ZM148 165Q148 104 181 69T267 34Q320 34 349 62T379 136Q379 172 362 196T308 243T212 298V298Q173 49 + 270 161 240T148 165Z" /> 50 + <glyph unicode="9" glyph-name="nine" horiz-adv-x="536" d="M91 -10V23Q210 60 279 144T365 344Q339 308 299 288T209 268Q154 268 114 293T53 362T31 459Q31 513 57 561T135 640T265 670Q336 670 389 639T471 551T501 420Q501 312 451 226T310 80T91 -10ZM159 51 + 484Q159 417 185 379T265 340Q298 340 325 355T370 398Q370 407 370 417Q370 520 340 571T262 623Q226 623 203 602T170 548T159 484Z" /> 52 + <glyph unicode=":" glyph-name="colon" horiz-adv-x="261" d="M130 -5Q102 -5 82 15T62 64Q62 92 82 112T130 133Q158 133 178 113T199 64Q199 36 179 16T130 -5ZM130 324Q102 324 82 344T62 393Q62 421 82 441T130 462Q158 462 178 442T199 393Q199 365 179 345T130 53 + 324Z" /> 54 + <glyph unicode=";" glyph-name="semicolon" horiz-adv-x="261" d="M130 324Q102 324 82 344T62 393Q62 421 82 441T130 462Q158 462 178 442T199 393Q199 365 179 345T130 324ZM268 -197L326 108H450V91L289 -197H268Z" /> 55 + <glyph unicode="&lt;" glyph-name="less" horiz-adv-x="536" d="M478 62L58 247V297L478 482V423L135 272L478 121V62Z" /> 56 + <glyph unicode="=" glyph-name="equal" horiz-adv-x="536" d="M58 348V400H478V348H58ZM58 144V196H478V144H58Z" /> 57 + <glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="536" d="M58 62V121L401 272L58 423V482L478 297V247L58 62Z" /> 58 + <glyph unicode="?" glyph-name="question" horiz-adv-x="479" d="M197 211L168 364Q245 382 287 417T329 509Q329 565 299 592T223 619Q203 619 183 614T143 595V484H64Q47 484 41 492T34 523Q34 558 62 592T139 648T246 670Q303 670 345 647T411 583T435 493Q435 59 + 425 386 373T235 288L224 211H197ZM210 -5Q182 -5 162 15T141 64Q141 92 161 112T210 133Q237 133 258 113T279 64Q279 36 258 16T210 -5Z" /> 60 + <glyph unicode="@" glyph-name="at" horiz-adv-x="810" d="M372 -118Q280 -118 211 -79T103 28T64 182Q64 262 91 331T170 452T290 533T442 562Q540 562 607 520T708 409T742 257Q742 187 717 134T652 50T562 20Q507 20 479 50T452 131Q414 73 379 47T304 21Q269 61 + 21 246 50T223 136Q223 194 243 247T297 341T373 405T461 429Q484 429 504 424T538 408L576 426H597L546 143Q539 101 550 83T592 65Q623 65 649 89T692 157T708 258Q708 332 678 394T590 493T448 530Q348 530 277 487T169 370T132 200Q132 114 166 50T260 -49T400 62 + -84Q464 -84 514 -69T606 -25L619 -48Q565 -82 509 -100T372 -118ZM319 177Q319 129 329 110T362 91Q384 91 408 111T457 167L491 360Q480 374 467 383T433 392Q401 392 376 363T335 284T319 177Z" /> 63 + <glyph unicode="A" glyph-name="A" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280Z" /> 64 + <glyph unicode="B" glyph-name="B" horiz-adv-x="686" d="M53 0V16L136 57V603L53 644V660H345Q414 660 469 644T555 595T587 512Q587 461 551 419T445 358Q539 345 592 302T646 192Q646 137 610 94T511 25T369 0H53ZM306 605H261V366H312Q380 366 418 397T457 65 + 483Q457 605 306 605ZM343 315H261V55H350Q425 55 468 92T511 186Q511 252 468 283T343 315Z" /> 66 + <glyph unicode="C" glyph-name="C" horiz-adv-x="717" d="M399 -10Q295 -10 219 32T100 148T57 315Q57 388 86 452T165 565T279 642T415 670Q466 670 501 664T564 647T620 622L629 440H611L530 581Q500 601 475 610T417 620Q352 620 300 584T218 483T188 333Q188 67 + 242 217 177T295 77T406 42Q451 42 483 54T543 83L621 206H638L625 41Q583 18 530 4T399 -10Z" /> 68 + <glyph unicode="D" glyph-name="D" horiz-adv-x="791" d="M53 0V16L136 57V603L53 644V660H374Q489 660 569 621T692 514T735 360Q735 282 708 217T631 103T514 27T367 0H53ZM340 605H261V55H355Q434 55 489 88T574 183T604 329Q604 455 537 530T340 605Z" /> 69 + <glyph unicode="E" glyph-name="E" horiz-adv-x="669" d="M53 0V16L136 57V603L53 644V660H575V487H559L490 605H261V368H422L476 453H492V230H476L422 313H261V55H515L587 195H603V0H53Z" /> 70 + <glyph unicode="F" glyph-name="F" horiz-adv-x="624" d="M53 0V16L136 57V603L53 644V660H565V487H549L483 605H261V366H412L466 451H482V232H466L412 315H261V57L359 16V0H53Z" /> 71 + <glyph unicode="G" glyph-name="G" horiz-adv-x="761" d="M398 -10Q326 -10 265 14T157 82T84 185T58 315Q58 391 87 456T168 569T285 643T426 670Q479 670 516 664T583 647T642 622L650 451H633L550 582Q517 603 490 612T428 621Q360 621 305 586T219 489T187 72 + 346Q187 252 219 185T305 82T427 46Q450 46 475 49T525 58V236L436 280V296H723V280L650 234V74Q620 49 578 30T488 1T398 -10Z" /> 73 + <glyph unicode="H" glyph-name="H" horiz-adv-x="825" d="M53 0V16L136 57V603L53 644V660H340V644L261 603V368H564V603L485 644V660H773V644L690 603V57L773 16V0H485V16L564 57V313H261V57L340 16V0H53Z" /> 74 + <glyph unicode="I" glyph-name="I" horiz-adv-x="404" d="M56 0V16L139 57V603L56 644V660H348V644L265 603V57L348 16V0H56Z" /> 75 + <glyph unicode="J" glyph-name="J" horiz-adv-x="415" d="M58 -174Q37 -174 25 -164T12 -139Q12 -134 15 -119L26 -76L115 -93Q134 -69 142 -36T150 50V603L67 644V660H359V644L276 603V243Q276 133 253 54T184 -81Q139 -136 112 -155T58 -174Z" /> 76 + <glyph unicode="K" glyph-name="K" horiz-adv-x="752" d="M53 0V16L136 57V603L53 644V660H345V644L261 603V57L345 16V0H53ZM262 335L537 609L465 644V660H690V644L625 617L380 380L673 44L740 16V0H550L262 335Z" /> 77 + <glyph unicode="L" glyph-name="L" horiz-adv-x="642" d="M53 0V16L136 57V603L53 644V660H355V644L261 603V55H491L567 235H583V0H53Z" /> 78 + <glyph unicode="M" glyph-name="M" horiz-adv-x="980" d="M49 0V16L132 57L152 603L66 644V660H288L501 167L713 660H926V644L841 610L858 57L931 16V0H658V16L736 56L726 538L494 -5H442L210 534L197 56L282 16V0H49Z" /> 79 + <glyph unicode="N" glyph-name="N" horiz-adv-x="809" d="M49 0V16L133 57V602L50 644V660H222L608 204V605L500 644V660H760V644L678 604V-5H626L203 493V56L311 16V0H49Z" /> 80 + <glyph unicode="O" glyph-name="O" horiz-adv-x="796" d="M398 -10Q325 -10 263 15T154 86T83 194T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 257 714 195T642 87T534 16T398 -10ZM416 41Q472 41 514 73T581 81 + 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41Z" /> 82 + <glyph unicode="P" glyph-name="P" horiz-adv-x="665" d="M53 0V16L136 57V603L53 644V660H363Q481 660 552 618T624 482Q624 426 587 384T486 317T339 293H261V57L359 16V0H53ZM318 605H261V344H325Q404 344 449 380T494 473Q494 543 449 574T318 605Z" /> 83 + <glyph unicode="Q" glyph-name="Q" horiz-adv-x="796" d="M685 -153Q641 -153 594 -142T490 -99T357 -8Q270 1 203 47T96 166T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 251 710 186T628 74T505 6Q561 -40 603 84 + -66T680 -104T745 -115Q767 -115 783 -112T810 -105V-126Q787 -137 756 -145T685 -153ZM416 41Q472 41 514 73T581 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41Z" /> 85 + <glyph unicode="R" glyph-name="R" horiz-adv-x="700" d="M53 0V16L136 57V603L53 644V660H360Q465 660 525 617T586 497Q586 441 549 400T450 335L637 55L707 16V0H520L331 305H261V58L336 16V0H53ZM312 605H261V356H318Q380 356 418 391T457 482Q457 540 419 86 + 572T312 605Z" /> 87 + <glyph unicode="S" glyph-name="S" horiz-adv-x="555" d="M268 -10Q204 -10 157 2T63 39L53 206H70L131 91Q193 40 261 40Q317 40 351 67T385 146Q385 184 368 207T314 250T221 296Q150 330 112 369T74 476Q74 513 92 548T143 610T215 654T296 670Q346 670 389 88 + 659T473 626L483 466H467L406 576Q377 598 352 609T294 620Q252 620 225 592T197 521Q197 476 227 449T327 388Q388 360 427 333T485 272T504 188Q504 140 484 104T429 42T352 3T268 -10Z" /> 89 + <glyph unicode="T" glyph-name="T" horiz-adv-x="690" d="M178 0V16L282 57V605H131L56 448H40V660H650V448H634L559 605H408V57L511 16V0H178Z" /> 90 + <glyph unicode="U" glyph-name="U" horiz-adv-x="826" d="M416 -10Q334 -10 271 18T172 108T136 272V603L53 644V660H345V644L262 603V278Q262 195 288 147T357 79T455 58Q499 58 536 76T597 135T620 243V605L524 644V660H773V644L690 604V272Q690 171 655 109T558 91 + 18T416 -10Z" /> 92 + <glyph unicode="V" glyph-name="V" horiz-adv-x="754" d="M356 -5L96 607L26 644V660H312V644L228 606L410 174H416L598 607L515 644V660H728V644L671 613L405 -5H356Z" /> 93 + <glyph unicode="W" glyph-name="W" horiz-adv-x="1017" d="M278 -5L89 605L13 644V660H303V644L218 606L338 202H343L516 665H566L741 202H746L865 606L780 644V660H1004V644L936 608L745 -5H696L516 458H510L327 -5H278Z" /> 94 + <glyph unicode="X" glyph-name="X" horiz-adv-x="764" d="M30 0V16L106 55L316 319L108 608L43 644V660H340V644L261 606V601L406 403L563 601V605L486 644V660H710V644L645 609L441 356L663 56L734 16V0H432V16L504 53V57L351 270L184 58L183 54L264 16V0H30Z" /> 95 + <glyph unicode="Y" glyph-name="Y" horiz-adv-x="739" d="M221 0V16L311 57V308L91 608L26 644V660H308V644L233 608V604L409 365L568 602V606L492 644V660H713V644L648 611L437 309V57L526 16V0H221Z" /> 96 + <glyph unicode="Z" glyph-name="Z" horiz-adv-x="678" d="M86 0V29L428 605H184L114 465H98V660H581V631L239 55H504L576 205H592V0H86Z" /> 97 + <glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="257" d="M61 -150V740H245V715H129V-125H245V-150H61Z" /> 98 + <glyph unicode="\" glyph-name="backslash" horiz-adv-x="250" d="M200 -120L0 750H50L250 -120H200Z" /> 99 + <glyph unicode="]" glyph-name="bracketright" horiz-adv-x="257" d="M12 -150V-125H128V715H12V740H196V-150H12Z" /> 100 + <glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="536" d="M58 250L243 670H293L478 250H419L268 593L116 250H58Z" /> 101 + <glyph unicode="_" glyph-name="underscore" horiz-adv-x="500" d="M25 -140V-90H475V-140H25Z" /> 102 + <glyph unicode="`" glyph-name="grave" horiz-adv-x="272" d="M227 530H210L29 689V707H149L227 530Z" /> 103 + <glyph unicode="a" glyph-name="a" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 464 367 433T410 104 + 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126Z" /> 105 + <glyph unicode="b" glyph-name="b" horiz-adv-x="573" d="M95 -6V636L33 685V695L201 750H211V403H216Q287 464 362 464Q409 464 447 438T509 363T532 247Q532 166 501 109T416 21T298 -10Q213 -10 151 24L105 -6H95ZM291 387Q251 387 211 363V77Q249 41 304 41Q333 106 + 41 359 57T401 113T417 223Q417 307 379 347T291 387Z" /> 107 + <glyph unicode="c" glyph-name="c" horiz-adv-x="482" d="M256 -10Q192 -10 144 17T70 92T43 206Q43 282 76 340T168 431T298 464Q346 464 378 449T426 415T443 382Q443 366 424 352L386 321L301 421Q294 422 288 422Q247 422 217 399T170 338T154 253Q154 173 108 + 195 129T312 84Q341 84 372 92T440 119H443V105Q419 57 371 24T256 -10Z" /> 109 + <glyph unicode="d" glyph-name="d" horiz-adv-x="573" d="M208 -10Q161 -10 122 15T60 86T37 194Q37 279 68 339T154 431T275 464Q323 464 359 455V636L292 686V695L465 750H475V45L545 16V0H369L360 50H354Q316 19 282 5T208 -10ZM153 222Q153 142 191 105T279 110 + 67Q319 67 359 91V377Q341 394 322 403T278 412Q244 412 216 395T170 337T153 222Z" /> 111 + <glyph unicode="e" glyph-name="e" horiz-adv-x="491" d="M260 -10Q159 -10 101 49T43 206Q43 282 74 340T159 431T276 464Q356 464 401 409T447 254L443 249H155Q155 205 171 168T222 107T318 84Q346 84 378 92T445 119H448V105Q424 56 375 23T260 -10ZM256 419Q216 112 + 419 191 387T158 294H350Q341 363 318 391T256 419Z" /> 113 + <glyph unicode="f" glyph-name="f" horiz-adv-x="359" d="M44 0V16L109 48V408H32V454H109V481Q109 522 131 568T190 656T271 723T361 749Q389 749 401 739T413 715Q413 711 412 706T410 694L399 647L274 679Q251 658 238 616T225 510V454H349V408H225V47L299 16V0H44Z" /> 114 + <glyph unicode="g" glyph-name="g" horiz-adv-x="543" d="M251 163Q224 163 198 170Q172 157 164 143T155 114Q155 96 171 85T222 74H344Q420 74 456 40T493 -60Q493 -105 465 -146T382 -213T251 -240Q161 -240 118 -201T75 -108Q75 -87 85 -65L148 -20V-18Q113 115 + -7 95 18T76 78Q76 92 79 105T88 133L164 183Q125 202 102 236T78 314Q78 356 100 390T162 443T251 463Q275 463 301 457T342 443L497 453V395L390 403L388 401Q404 385 414 362T425 314Q425 271 402 237T340 183T251 163ZM258 205Q290 205 307 234T325 311Q325 116 + 363 303 392T247 422Q215 422 197 394T178 316Q178 264 200 235T258 205ZM153 -86Q153 -138 185 -171T268 -205Q326 -205 361 -175T397 -102Q397 -66 378 -46T301 -26H205Q198 -26 193 -26Q172 -33 163 -49T153 -86Z" /> 117 + <glyph unicode="h" glyph-name="h" horiz-adv-x="603" d="M38 0V16L103 48V636L41 685V695L209 750H219V390H223Q260 426 294 445T373 464Q433 464 471 434T510 343V48L575 16V0H335V16L394 46V300Q394 338 371 358T311 379Q288 379 262 371T219 349V46L278 16V0H38Z" /> 118 + <glyph unicode="i" glyph-name="i" horiz-adv-x="325" d="M162 571Q133 571 114 590T95 639Q95 668 114 687T162 706Q191 706 210 687T230 639Q230 610 211 591T162 571ZM42 0V16L107 48V350L45 398V409L213 464H223V48L284 16V0H42Z" /> 119 + <glyph unicode="j" glyph-name="j" horiz-adv-x="324" d="M161 571Q132 571 113 590T94 639Q94 668 113 687T161 706Q190 706 209 687T229 639Q229 610 210 591T161 571ZM43 -230V-213Q68 -191 81 -169T100 -115T106 -37V350L44 398V409L212 464H222V14Q222 -42 120 + 206 -85T152 -163T43 -230Z" /> 121 + <glyph unicode="k" glyph-name="k" horiz-adv-x="584" d="M38 0V16L103 48V636L41 685V695L209 750H219V259L373 396V402L324 438V454H527V438L463 403L315 288L506 50L570 16V0H401L367 52L219 239V46L286 16V0H38Z" /> 122 + <glyph unicode="l" glyph-name="l" horiz-adv-x="313" d="M35 0V16L101 48V636L38 685V695L207 750H216V48L277 16V0H35Z" /> 123 + <glyph unicode="m" glyph-name="m" horiz-adv-x="884" d="M38 0V16L103 48V350L41 395V405L199 464H209L218 390H223Q259 426 292 445T369 464Q418 464 452 443T498 379H501Q541 420 576 442T659 464Q717 464 754 434T791 343V48L856 16V0H616V16L675 48V300Q675 124 + 338 653 358T596 379Q569 379 544 370T502 343V48L560 16V0H330V16L386 48V300Q386 338 364 358T307 379Q285 379 260 371T219 349V48L274 16V0H38Z" /> 125 + <glyph unicode="n" glyph-name="n" horiz-adv-x="603" d="M38 0V16L103 48V350L41 395V405L199 464H209L218 390H223Q260 426 294 445T373 464Q433 464 471 434T510 343V48L575 16V0H335V16L394 48V300Q394 338 371 358T311 379Q288 379 262 371T219 349V48L278 16V0H38Z" /> 126 + <glyph unicode="o" glyph-name="o" horiz-adv-x="544" d="M272 -10Q203 -10 151 21T70 107T41 227Q41 293 70 346T151 432T272 464Q341 464 393 432T474 347T503 227Q503 161 474 107T393 22T272 -10ZM284 37Q318 37 339 61T371 124T381 207Q381 261 369 309T331 127 + 387T262 418Q228 418 206 394T174 331T163 248Q163 194 175 146T215 67T284 37Z" /> 128 + <glyph unicode="p" glyph-name="p" horiz-adv-x="580" d="M38 -230V-214L103 -182V346L41 395V405L199 464H209L217 403H223Q261 435 295 449T370 464Q417 464 455 438T517 363T540 247Q540 166 509 109T425 21T310 -10Q258 -10 219 0V-182L294 -214V-230H38ZM299 129 + 387Q259 387 219 363V77Q258 41 319 41Q346 41 370 57T409 111T425 216Q425 304 387 345T299 387Z" /> 130 + <glyph unicode="q" glyph-name="q" horiz-adv-x="571" d="M286 -230V-214L361 -185V49H355Q319 18 284 4T210 -10Q163 -10 125 15T63 86T40 194Q40 279 72 339T159 431T283 464Q318 464 346 458T402 440L468 464H477V-183L542 -214V-230H286ZM156 222Q156 142 131 + 193 105T281 67Q299 67 319 72T361 91V340Q361 367 360 375T351 389Q335 402 316 407T274 412Q242 412 215 395T172 336T156 222Z" /> 132 + <glyph unicode="r" glyph-name="r" horiz-adv-x="413" d="M41 0V16L106 48V346L44 395V405L202 464H211L221 371H225Q260 421 290 441T350 462Q375 462 389 451T404 418Q404 412 400 397L388 350L290 372Q250 358 221 321V48L298 16V0H41Z" /> 133 + <glyph unicode="s" glyph-name="s" horiz-adv-x="435" d="M211 -10Q162 -10 127 -1T57 25V140H71L105 86Q139 31 207 31Q246 31 267 47T288 93Q288 117 276 132T239 159T174 188Q120 211 93 240T66 317Q66 358 87 391T145 444T225 464Q294 464 356 432V317H341L309 134 + 366Q291 395 271 408T225 421Q193 421 174 405T155 361Q155 332 177 315T254 275Q283 263 310 249T356 208T375 135Q375 89 351 57T288 7T211 -10Z" /> 135 + <glyph unicode="t" glyph-name="t" horiz-adv-x="373" d="M216 -10Q162 -10 126 16T89 89V408H13V418L103 454L191 564H205V454H341V408H205V111Q205 86 227 74T280 61Q299 61 314 63T343 68L346 67V53Q332 29 298 10T216 -10Z" /> 136 + <glyph unicode="u" glyph-name="u" horiz-adv-x="578" d="M221 -10Q161 -10 123 20T85 111V406L20 438V454H201V154Q201 115 224 95T284 75Q306 75 331 82T374 105V406L309 438V454H490V46L556 16V0H374V63H370Q333 27 299 9T221 -10Z" /> 137 + <glyph unicode="v" glyph-name="v" horiz-adv-x="478" d="M221 0L34 409L-30 438V454H234V438L160 408V404L274 158H278L379 399V404L312 438V454H508V438L436 403L252 0H221Z" /> 138 + <glyph unicode="w" glyph-name="w" horiz-adv-x="738" d="M195 0L34 409L-30 438V454H234V438L160 408V404L252 159H257L383 454H414L543 160H547L639 399V404L572 438V454H769V438L697 403L525 0H494L362 294L226 0H195Z" /> 139 + <glyph unicode="x" glyph-name="x" horiz-adv-x="527" d="M21 0V16L74 49L209 215L69 409L24 438V454H268V438L208 410V404L290 289L370 398V404L317 438V454H490V438L437 405L315 255L466 45L507 16V0H271V16L328 44V50L234 180L144 56V50L202 16V0H21Z" /> 140 + <glyph unicode="y" glyph-name="y" horiz-adv-x="478" d="M-31 454H230V438L160 408V404L280 149H285L381 399V404L315 438V454H508V438L436 404L221 -119Q201 -166 183 -192T142 -229T89 -240Q65 -240 57 -233T48 -199V-146H151Q168 -125 183 -96T222 -10L226 141 + 1L33 409L-31 438V454Z" /> 142 + <glyph unicode="z" glyph-name="z" horiz-adv-x="494" d="M60 0V19L279 408H127L76 302H59L70 464H75Q88 460 107 457T143 454H423V435L204 46H371L414 158H431V0H60Z" /> 143 + <glyph unicode="{" glyph-name="braceleft" horiz-adv-x="257" d="M222 -150Q139 -150 102 -113T64 -17Q64 25 76 61T100 131T112 199Q112 232 94 257T26 283H1V308H26Q75 308 93 333T112 391Q112 425 100 459T76 529T64 607Q64 666 101 703T222 740H245V715H218Q175 144 + 715 154 690T132 625Q132 586 143 551T164 482T175 413Q175 376 155 346T85 295Q135 274 155 244T175 177Q175 143 165 109T143 40T132 -35Q132 -75 153 -100T218 -125H245V-150H222Z" /> 145 + <glyph unicode="|" glyph-name="bar" horiz-adv-x="250" d="M100 -250V750H150V-250H100Z" /> 146 + <glyph unicode="}" glyph-name="braceright" horiz-adv-x="257" d="M35 -150H12V-125H39Q83 -125 104 -100T125 -35Q125 4 115 39T93 109T82 177Q82 214 102 244T172 295Q122 316 102 346T82 413Q82 448 93 481T114 550T125 625Q125 665 104 690T39 715H12V740H35Q118 147 + 740 155 703T193 607Q193 566 181 530T157 459T145 391Q145 358 163 333T231 308H256V283H231Q182 283 164 258T145 199Q145 165 157 131T181 61T193 -17Q193 -76 156 -113T35 -150Z" /> 148 + <glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="536" d="M58 201Q58 269 89 306T172 343Q208 343 233 330T279 298T320 267T366 253Q396 253 410 275T424 343H478Q478 275 448 238T364 201Q328 201 302 214T256 246T215 277T170 291Q143 291 128 268T112 149 + 201H58Z" /> 150 + <glyph unicode="&#xa0;" glyph-name="uni00A0" horiz-adv-x="250" /> 151 + <glyph unicode="&#xa1;" glyph-name="exclamdown" horiz-adv-x="261" d="M131 326Q103 326 83 346T62 395Q62 422 82 443T131 464Q158 464 179 443T200 395Q200 367 179 347T131 326ZM62 -201L117 248H144L199 -201H62Z" /> 152 + <glyph unicode="&#xa2;" glyph-name="cent" horiz-adv-x="536" d="M183 26L202 105Q137 125 100 179T63 310Q63 386 96 444T187 534T316 567L333 635H373L356 565Q409 557 436 533T463 489Q463 478 459 471T445 455L406 423L341 507L266 202Q295 191 332 191Q360 153 + 191 392 201T460 231H463V202Q438 158 390 126T276 94Q258 94 240 96L223 26H183ZM174 357Q174 315 188 280T231 222L306 525Q265 525 236 502T190 441T174 357Z" /> 154 + <glyph unicode="&#xa3;" glyph-name="sterling" horiz-adv-x="536" d="M44 314V354H122V457Q122 499 142 537T197 605T273 652T360 669Q416 669 450 649T485 605Q485 592 473 579L434 532L341 624H337Q293 624 266 590T238 493V354H393V314H238V267Q238 235 226 155 + 209T176 141L139 100H393L465 197H483L444 0H41L35 30L90 107Q104 127 111 140T120 166T122 199V314H44Z" /> 156 + <glyph unicode="&#xa4;" glyph-name="currency" horiz-adv-x="536" d="M57 99L135 178Q121 198 113 222T105 272Q105 298 113 322T135 366L57 445L96 483L174 405Q194 419 218 427T268 435Q294 435 318 427T361 405L440 483L479 445L400 366Q414 346 422 322T431 157 + 272Q431 246 423 222T400 178L479 99L440 61L361 139Q341 125 318 117T268 109Q242 109 218 117T174 139L96 61L57 99ZM268 159Q314 159 345 191T376 272Q376 321 345 353T268 385Q222 385 191 353T160 272Q160 223 191 191T268 159Z" /> 158 + <glyph unicode="&#xa5;" glyph-name="yen" horiz-adv-x="536" d="M122 0V16L208 57V238H75V278H208V388H75V428H184L45 622L2 644V660H254V644L192 620V618L306 448L407 614V617L343 644V660H534V644L483 623L351 428H461V388H329V278H461V238H329V57L415 16V0H122Z" /> 159 + <glyph unicode="&#xa6;" glyph-name="brokenbar" horiz-adv-x="250" d="M100 350V750H150V350H100ZM100 -250V150H150V-250H100Z" /> 160 + <glyph unicode="&#xa7;" glyph-name="section" horiz-adv-x="520" d="M310 670Q348 670 378 660T427 634T445 603Q445 595 436 585L396 539L296 626Q251 625 221 600T191 540Q191 518 202 501T245 469T334 440Q422 418 454 383T487 296Q487 246 459 210T379 152Q404 161 + 133 414 108T425 49Q425 3 395 -35T315 -97T210 -121Q172 -121 140 -110T89 -83T69 -51Q69 -42 79 -32L119 14L222 -79Q270 -78 301 -54T333 4Q333 28 322 46T279 80T189 111Q100 132 66 169T31 261Q31 310 60 345T138 401Q117 419 108 443T99 499Q99 547 128 586T206 162 + 647T310 670ZM268 198Q308 189 336 177Q362 184 380 203T398 248Q398 272 387 290T344 323T255 350Q205 361 172 378Q147 367 136 349T124 305Q124 280 135 261T178 227T268 198Z" /> 163 + <glyph unicode="&#xa8;" glyph-name="dieresis" horiz-adv-x="390" d="M99 563Q75 563 60 578T44 617Q44 640 59 655T99 671Q122 671 137 656T153 617Q153 594 138 579T99 563ZM291 563Q267 563 252 578T237 617Q237 640 252 655T291 671Q315 671 330 656T345 164 + 617Q345 594 330 579T291 563Z" /> 165 + <glyph unicode="&#xa9;" glyph-name="copyright" horiz-adv-x="806" d="M403 -10Q331 -10 271 15T165 86T95 194T70 330Q70 404 95 466T165 573T270 644T403 670Q475 670 535 645T641 574T711 466T736 330Q736 257 711 195T641 87T536 16T403 -10ZM403 28Q487 166 + 28 553 67T657 175T696 330Q696 417 658 485T553 592T403 632Q319 632 253 593T149 485T110 330Q110 243 148 175T253 68T403 28ZM416 129Q319 129 264 183T209 324Q209 383 238 432T317 510T426 540Q471 540 498 532T552 509L556 394H527L488 474Q471 485 458 167 + 490T427 495Q370 495 334 452T297 341Q297 263 332 219T420 175Q442 175 459 180T492 193L534 266H563L555 162Q526 148 494 139T416 129Z" /> 168 + <glyph unicode="&#xaa;" glyph-name="ordfeminine" horiz-adv-x="408" d="M144 417Q119 417 101 433T82 477Q82 506 100 522T168 552L218 565V599Q218 640 180 640Q173 640 166 639T151 633V582H106Q91 582 91 598Q91 615 107 631T147 658T199 669Q245 669 270 169 + 652T295 602V464Q304 455 322 455H337L339 453V445Q333 434 319 426T280 417Q236 417 222 452H218Q204 437 185 427T144 417ZM156 492Q156 477 165 469T190 460Q204 460 218 466V543Q181 535 169 523T156 492ZM85 291V343H326V291H85Z" /> 170 + <glyph unicode="&#xab;" glyph-name="guillemotleft" horiz-adv-x="451" d="M225 70L24 247L225 424H241L132 247L241 70H225ZM412 70L211 247L412 424H428L319 247L428 70H412Z" /> 171 + <glyph unicode="&#xac;" glyph-name="logicalnot" horiz-adv-x="536" d="M424 62V246H58V298H478V62H424Z" /> 172 + <glyph unicode="&#xae;" glyph-name="registered" horiz-adv-x="547" d="M274 232Q212 232 163 260T86 338T58 451Q58 513 86 562T163 641T274 670Q336 670 384 641T461 563T489 451Q489 388 461 339T385 261T274 232ZM274 263Q327 263 367 288T430 355T453 451Q453 173 + 504 431 546T368 613T274 638Q220 638 180 614T117 547T94 451Q94 397 116 355T179 288T274 263ZM162 325V332L193 348V558L162 574V580H276Q316 580 339 564T363 517Q363 496 348 479T309 452L364 345L390 332V325H318L262 442H242V348L272 332V325H162ZM257 557H242V465H259Q280 174 + 465 295 477T311 512Q311 536 296 546T257 557Z" /> 175 + <glyph unicode="&#xaf;" glyph-name="overscore" horiz-adv-x="370" d="M45 589V645H325V589H45Z" /> 176 + <glyph unicode="&#xb0;" glyph-name="degree" horiz-adv-x="500" d="M250 410Q213 410 184 428T137 475T120 540Q120 575 137 604T183 652T250 670Q288 670 317 652T363 605T380 540Q380 505 363 476T317 428T250 410ZM250 452Q285 452 309 475T334 540Q334 581 177 + 310 605T250 629Q215 629 191 605T166 540Q166 499 190 476T250 452Z" /> 178 + <glyph unicode="&#xb1;" glyph-name="plusminus" horiz-adv-x="536" d="M240 152V286H58V338H240V482H296V338H478V286H296V152H240ZM58 61V113H478V61H58Z" /> 179 + <glyph unicode="&#xb2;" glyph-name="twosuperior" horiz-adv-x="331" d="M27 505V527Q82 588 115 630T167 702T191 756T198 803Q198 831 185 847T144 864Q118 864 94 850V767H41Q31 767 26 771T20 790Q20 815 41 840T97 883T173 900Q230 900 263 870T296 794Q296 180 + 771 289 751T262 707T202 650T98 566H266L296 625H311L305 505H27Z" /> 181 + <glyph unicode="&#xb3;" glyph-name="threesuperior" horiz-adv-x="333" d="M156 495Q114 495 84 507T37 539T20 577Q20 590 25 594T42 598H93V540Q114 528 146 528Q180 528 197 548T215 602Q215 643 195 665T123 687H90V717H104Q144 717 169 739T195 805Q195 182 + 864 143 864Q133 864 122 862T101 854V785H50Q39 785 34 789T28 810Q28 830 47 851T97 886T169 900Q224 900 258 876T293 808Q293 772 264 747T183 713Q313 700 313 610Q313 577 293 551T236 510T156 495Z" /> 183 + <glyph unicode="&#xb4;" glyph-name="acute" horiz-adv-x="272" d="M44 530L122 707H242V689L62 530H44Z" /> 184 + <glyph unicode="&#xb5;" glyph-name="micro" horiz-adv-x="561" d="M232 -10Q208 -10 186 -3T145 22L181 -210L78 -230H76V454H192V154Q192 115 215 95T274 75Q296 75 322 82T365 105V454H481V71Q488 64 500 60T532 55H564L568 52V43Q556 23 531 7T467 -10Q427 185 + -10 403 9T369 63H362Q330 28 301 9T232 -10Z" /> 186 + <glyph unicode="&#xb6;" glyph-name="paragraph" horiz-adv-x="507" d="M265 -110V359H223Q169 359 127 379T60 434T35 514Q35 590 82 625T207 660H320V-110H265ZM376 -110V660H514V644L431 603V-110H376Z" /> 187 + <glyph unicode="&#xb7;" glyph-name="middot" horiz-adv-x="250" d="M125 203Q97 203 77 223T56 271Q56 299 76 319T125 340Q153 340 173 320T194 271Q194 243 174 223T125 203Z" /> 188 + <glyph unicode="&#xb8;" glyph-name="cedilla" horiz-adv-x="500" d="M240 -240Q186 -240 158 -214V-198H162Q186 -209 221 -209Q249 -209 262 -199T276 -171Q276 -149 256 -135T176 -103L234 23H271L238 -48Q296 -65 319 -88T342 -151Q342 -189 315 -214T240 -240Z" /> 189 + <glyph unicode="&#xb9;" glyph-name="onesuperior" horiz-adv-x="283" d="M59 505V520L115 542V819L15 770V802L160 890H208V542L258 520V505H59Z" /> 190 + <glyph unicode="&#xba;" glyph-name="ordmasculine" horiz-adv-x="408" d="M204 417Q146 417 111 454T75 543Q75 595 110 632T204 669Q262 669 297 632T333 543Q333 491 297 454T204 417ZM210 443Q231 443 242 468T253 532Q253 579 239 611T199 643Q177 643 167 191 + 617T156 554Q156 506 169 475T210 443ZM85 291V343H326V291H85Z" /> 192 + <glyph unicode="&#xbb;" glyph-name="guillemotright" horiz-adv-x="451" d="M24 70L132 247L24 424H39L241 247L39 70H24ZM211 70L319 247L211 424H226L428 247L226 70H211Z" /> 193 + <glyph unicode="&#xbc;" glyph-name="onequarter" horiz-adv-x="775" d="M98 355V370L154 392V669L54 620V652L199 740H247V392L297 370V355H98ZM145 17L614 750L655 723L186 -10L145 17ZM513 0V15L569 40V101H405V119L597 385H662V147H732V101H662V40L712 15V0H513ZM467 194 + 147H569V294L467 147Z" /> 195 + <glyph unicode="&#xbd;" glyph-name="onehalf" horiz-adv-x="775" d="M92 355V370L148 392V669L48 620V652L193 740H241V392L291 370V355H92ZM116 17L585 750L626 723L157 -10L116 17ZM437 0V22Q492 83 525 125T577 197T601 251T608 298Q608 326 595 342T554 359Q528 196 + 359 504 345V262H451Q441 262 436 266T430 285Q430 310 451 335T507 378T583 395Q640 395 673 365T706 289Q706 266 699 246T672 202T612 145T508 61H676L706 120H721L715 0H437Z" /> 197 + <glyph unicode="&#xbe;" glyph-name="threequarters" horiz-adv-x="775" d="M169 345Q127 345 97 357T50 389T33 427Q33 440 38 444T55 448H106V390Q127 378 159 378Q193 378 210 398T228 452Q228 493 208 515T136 537H103V567H117Q157 567 182 589T208 655Q208 198 + 714 156 714Q146 714 135 712T114 704V635H63Q52 635 47 639T41 660Q41 680 60 701T110 736T182 750Q237 750 271 726T306 658Q306 622 277 597T196 563Q326 550 326 460Q326 427 306 401T249 360T169 345ZM166 17L635 750L676 723L207 -10L166 17ZM538 0V15L594 199 + 40V101H430V119L622 385H687V147H757V101H687V40L737 15V0H538ZM492 147H594V294L492 147Z" /> 200 + <glyph unicode="&#xbf;" glyph-name="questiondown" horiz-adv-x="479" d="M269 464Q297 464 317 443T338 395Q338 367 318 347T269 326Q242 326 222 346T201 395Q201 422 221 443T269 464ZM282 248L311 94Q234 76 192 41T150 -50Q150 -106 180 -133T256 -161Q276 201 + -161 296 -156T336 -137V-25H415Q432 -25 438 -33T445 -64Q445 -99 417 -133T340 -189T233 -211Q176 -211 134 -188T68 -124T44 -34Q44 33 93 85T244 171L255 248H282Z" /> 202 + <glyph unicode="&#xc0;" glyph-name="Agrave" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280ZM390 710H371L198 842V862H315L390 710Z" /> 203 + <glyph unicode="&#xc1;" glyph-name="Aacute" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280ZM373 710L448 862H565V842L393 710H373Z" /> 204 + <glyph unicode="&#xc2;" glyph-name="Acircumflex" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280ZM228 710L362 862H402L537 710H519L382 779L245 710H228Z" /> 205 + <glyph unicode="&#xc3;" glyph-name="Atilde" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280ZM223 724Q239 774 254 800T286 835T323 845Q351 845 374 832T420 206 + 805T464 792Q482 792 496 802T523 845H542Q526 794 511 768T478 733T441 724Q413 724 390 737T344 763T300 776Q282 776 269 767T241 724H223Z" /> 207 + <glyph unicode="&#xc4;" glyph-name="Adieresis" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280ZM286 731Q262 731 247 747T231 786Q231 809 246 824T286 840Q309 208 + 840 324 825T340 786Q340 763 325 747T286 731ZM478 731Q454 731 439 747T424 786Q424 809 439 824T478 840Q502 840 517 825T532 786Q532 763 517 747T478 731Z" /> 209 + <glyph unicode="&#xc5;" glyph-name="Aring" horiz-adv-x="764" d="M25 0V16L87 50L346 665H416L672 51L740 16V0H452V16L539 51L468 225H229L158 51L241 16V0H25ZM251 280H445L348 518L251 280ZM382 710Q343 710 319 734T294 794Q294 830 318 854T382 878Q421 210 + 878 445 854T470 794Q470 758 446 734T382 710ZM387 734Q418 734 418 787Q418 854 378 854Q363 854 355 842T347 801Q347 734 387 734Z" /> 211 + <glyph unicode="&#xc6;" glyph-name="AE" horiz-adv-x="1010" d="M464 660H915V487H899L830 605H602V368H763L816 453H832V230H816L763 313H602V55H855L927 195H943V0H393V16L476 57V232H269L158 50L237 16V0H22V16L86 51L464 660ZM302 287H476V573L302 287Z" /> 212 + <glyph unicode="&#xc7;" glyph-name="Ccedilla" horiz-adv-x="717" d="M378 -209Q407 -209 420 -199T433 -171Q433 -149 413 -135T334 -103L377 -9Q279 -5 208 38T97 153T57 315Q57 388 86 452T165 565T279 642T415 670Q466 670 501 664T564 647T620 622L629 440H611L530 213 + 581Q500 601 475 610T417 620Q352 620 300 584T218 483T188 333Q188 242 217 177T295 77T406 42Q451 42 483 54T543 83L621 206H638L625 41Q585 19 535 5T413 -10L396 -48Q453 -65 476 -88T499 -151Q499 -189 472 -214T398 -240Q343 -240 316 -214V-198H319Q344 214 + -209 378 -209Z" /> 215 + <glyph unicode="&#xc8;" glyph-name="Egrave" horiz-adv-x="669" d="M53 0V16L136 57V603L53 644V660H575V487H559L490 605H261V368H422L476 453H492V230H476L422 313H261V55H515L587 195H603V0H53ZM354 710H335L162 842V862H279L354 710Z" /> 216 + <glyph unicode="&#xc9;" glyph-name="Eacute" horiz-adv-x="669" d="M53 0V16L136 57V603L53 644V660H575V487H559L490 605H261V368H422L476 453H492V230H476L422 313H261V55H515L587 195H603V0H53ZM337 710L412 862H529V842L357 710H337Z" /> 217 + <glyph unicode="&#xca;" glyph-name="Ecircumflex" horiz-adv-x="669" d="M53 0V16L136 57V603L53 644V660H575V487H559L490 605H261V368H422L476 453H492V230H476L422 313H261V55H515L587 195H603V0H53ZM192 710L326 862H366L501 710H483L346 779L209 710H192Z" /> 218 + <glyph unicode="&#xcb;" glyph-name="Edieresis" horiz-adv-x="669" d="M53 0V16L136 57V603L53 644V660H575V487H559L490 605H261V368H422L476 453H492V230H476L422 313H261V55H515L587 195H603V0H53ZM250 731Q226 731 211 747T195 786Q195 809 210 824T250 840Q273 219 + 840 288 825T304 786Q304 763 289 747T250 731ZM442 731Q418 731 403 747T388 786Q388 809 403 824T442 840Q466 840 481 825T496 786Q496 763 481 747T442 731Z" /> 220 + <glyph unicode="&#xcc;" glyph-name="Igrave" horiz-adv-x="404" d="M56 0V16L139 57V603L56 644V660H348V644L265 603V57L348 16V0H56ZM210 710H191L18 842V862H135L210 710Z" /> 221 + <glyph unicode="&#xcd;" glyph-name="Iacute" horiz-adv-x="404" d="M56 0V16L139 57V603L56 644V660H348V644L265 603V57L348 16V0H56ZM193 710L268 862H385V842L213 710H193Z" /> 222 + <glyph unicode="&#xce;" glyph-name="Icircumflex" horiz-adv-x="404" d="M56 0V16L139 57V603L56 644V660H348V644L265 603V57L348 16V0H56ZM48 710L182 862H222L357 710H339L202 779L65 710H48Z" /> 223 + <glyph unicode="&#xcf;" glyph-name="Idieresis" horiz-adv-x="404" d="M56 0V16L139 57V603L56 644V660H348V644L265 603V57L348 16V0H56ZM106 731Q82 731 67 747T51 786Q51 809 66 824T106 840Q129 840 144 825T160 786Q160 763 145 747T106 731ZM298 731Q274 224 + 731 259 747T244 786Q244 809 259 824T298 840Q322 840 337 825T352 786Q352 763 337 747T298 731Z" /> 225 + <glyph unicode="&#xd0;" glyph-name="Eth" horiz-adv-x="791" d="M53 0V16L136 57V316H53V368H136V603L53 644V660H374Q489 660 569 621T692 514T735 360Q735 282 708 217T631 103T514 27T367 0H53ZM423 316H261V55H355Q434 55 489 88T574 183T604 329Q604 455 226 + 537 530T340 605H261V368H423V316Z" /> 227 + <glyph unicode="&#xd1;" glyph-name="Ntilde" horiz-adv-x="809" d="M49 0V16L133 57V602L50 644V660H222L608 204V605L500 644V660H760V644L678 604V-5H626L203 493V56L311 16V0H49ZM253 724Q269 774 284 800T316 835T353 845Q381 845 404 832T450 805T494 792Q512 228 + 792 526 802T553 845H572Q556 794 541 768T508 733T471 724Q443 724 420 737T374 763T330 776Q312 776 299 767T271 724H253Z" /> 229 + <glyph unicode="&#xd2;" glyph-name="Ograve" horiz-adv-x="796" d="M398 -10Q325 -10 263 15T154 86T83 194T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 257 714 195T642 87T534 16T398 -10ZM416 41Q472 41 230 + 514 73T581 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41ZM398 710H379L206 842V862H323L398 710Z" /> 231 + <glyph unicode="&#xd3;" glyph-name="Oacute" horiz-adv-x="796" d="M398 -10Q325 -10 263 15T154 86T83 194T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 257 714 195T642 87T534 16T398 -10ZM416 41Q472 41 232 + 514 73T581 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41ZM382 710L457 862H574V842L402 710H382Z" /> 233 + <glyph unicode="&#xd4;" glyph-name="Ocircumflex" horiz-adv-x="796" d="M398 -10Q325 -10 263 15T154 86T83 194T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 257 714 195T642 87T534 16T398 -10ZM416 41Q472 234 + 41 514 73T581 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41ZM236 710L370 862H410L545 710H527L390 779L253 710H236Z" /> 235 + <glyph unicode="&#xd5;" glyph-name="Otilde" horiz-adv-x="796" d="M398 -10Q325 -10 263 15T154 86T83 194T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 257 714 195T642 87T534 16T398 -10ZM416 41Q472 41 236 + 514 73T581 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41ZM231 724Q247 774 262 800T294 835T331 845Q359 845 382 832T428 805T472 792Q490 792 504 802T531 845H550Q534 794 519 768T486 733T449 237 + 724Q421 724 398 737T352 763T308 776Q290 776 277 767T249 724H231Z" /> 238 + <glyph unicode="&#xd6;" glyph-name="Odieresis" horiz-adv-x="796" d="M398 -10Q325 -10 263 15T154 86T83 194T57 330Q57 404 82 466T154 573T262 644T398 670Q471 670 533 645T642 574T713 466T739 330Q739 257 714 195T642 87T534 16T398 -10ZM416 41Q472 239 + 41 514 73T581 163T605 300Q605 397 576 469T496 580T383 620Q327 620 284 589T216 499T191 362Q191 265 221 193T302 81T416 41ZM295 731Q271 731 256 747T240 786Q240 809 255 824T295 840Q318 840 333 825T349 786Q349 763 334 747T295 731ZM487 731Q463 731 240 + 448 747T433 786Q433 809 448 824T487 840Q511 840 526 825T541 786Q541 763 526 747T487 731Z" /> 241 + <glyph unicode="&#xd7;" glyph-name="multiply" horiz-adv-x="536" d="M121 87L82 126L229 272L82 419L121 458L268 311L415 458L453 419L307 272L453 126L415 87L268 233L121 87Z" /> 242 + <glyph unicode="&#xd8;" glyph-name="Oslash" horiz-adv-x="796" d="M58 -10L149 92Q106 137 82 198T57 330Q57 404 82 466T154 573T262 644T398 670Q458 670 511 653T607 604L666 670H739L647 568Q690 523 714 462T739 330Q739 257 714 195T642 87T534 16T398 243 + -10Q338 -10 285 7T190 56L130 -10H58ZM191 362Q191 309 200 263T227 180L542 531Q512 574 471 597T383 620Q327 620 284 589T216 499T191 362ZM416 41Q472 41 514 73T581 163T605 300Q605 352 596 398T570 481L256 130Q286 88 327 65T416 41Z" /> 244 + <glyph unicode="&#xd9;" glyph-name="Ugrave" horiz-adv-x="826" d="M416 -10Q334 -10 271 18T172 108T136 272V603L53 644V660H345V644L262 603V278Q262 195 288 147T357 79T455 58Q499 58 536 76T597 135T620 243V605L524 644V660H773V644L690 604V272Q690 171 245 + 655 109T558 18T416 -10ZM447 710H428L255 842V862H372L447 710Z" /> 246 + <glyph unicode="&#xda;" glyph-name="Uacute" horiz-adv-x="826" d="M416 -10Q334 -10 271 18T172 108T136 272V603L53 644V660H345V644L262 603V278Q262 195 288 147T357 79T455 58Q499 58 536 76T597 135T620 243V605L524 644V660H773V644L690 604V272Q690 171 247 + 655 109T558 18T416 -10ZM431 710L506 862H623V842L451 710H431Z" /> 248 + <glyph unicode="&#xdb;" glyph-name="Ucircumflex" horiz-adv-x="826" d="M416 -10Q334 -10 271 18T172 108T136 272V603L53 644V660H345V644L262 603V278Q262 195 288 147T357 79T455 58Q499 58 536 76T597 135T620 243V605L524 644V660H773V644L690 604V272Q690 249 + 171 655 109T558 18T416 -10ZM285 710L419 862H459L594 710H576L439 779L302 710H285Z" /> 250 + <glyph unicode="&#xdc;" glyph-name="Udieresis" horiz-adv-x="826" d="M416 -10Q334 -10 271 18T172 108T136 272V603L53 644V660H345V644L262 603V278Q262 195 288 147T357 79T455 58Q499 58 536 76T597 135T620 243V605L524 644V660H773V644L690 604V272Q690 251 + 171 655 109T558 18T416 -10ZM344 731Q320 731 305 747T289 786Q289 809 304 824T344 840Q367 840 382 825T398 786Q398 763 383 747T344 731ZM536 731Q512 731 497 747T482 786Q482 809 497 824T536 840Q560 840 575 825T590 786Q590 763 575 747T536 731Z" /> 252 + <glyph unicode="&#xdd;" glyph-name="Yacute" horiz-adv-x="739" d="M221 0V16L311 57V308L91 608L26 644V660H308V644L233 608V604L409 365L568 602V606L492 644V660H713V644L648 611L437 309V57L526 16V0H221ZM390 710L465 862H582V842L410 710H390Z" /> 253 + <glyph unicode="&#xde;" glyph-name="Thorn" horiz-adv-x="665" d="M53 0V16L136 57V603L53 644V660H345V644L261 603V535H363Q481 535 552 493T624 357Q624 301 587 259T486 192T339 168H261V57L345 16V0H53ZM318 480H261V219H325Q404 219 449 255T494 348Q494 254 + 418 449 449T318 480Z" /> 255 + <glyph unicode="&#xdf;" glyph-name="germandbls" horiz-adv-x="644" d="M52 0V16L115 48V407H37V454H115V480Q115 531 132 579T182 666T262 727T370 750Q460 750 506 712T553 620Q553 587 540 563T507 519T467 480T434 438T421 385Q421 362 434 346T472 314T529 256 + 273Q581 235 599 204T617 132Q617 92 595 60T535 9T454 -10Q405 -10 371 -1T302 25V140H317L351 86Q366 61 389 46T444 31Q479 31 501 49T523 100Q523 126 509 144T469 179T412 217Q378 240 355 266T331 341Q331 371 343 393T372 435T407 477T436 529T448 602Q448 257 + 646 423 676T348 706Q283 706 257 663T231 546V0H52Z" /> 258 + <glyph unicode="&#xe0;" glyph-name="agrave" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 464 259 + 367 433T410 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126ZM246 530H229L48 689V707H168L246 530Z" /> 260 + <glyph unicode="&#xe1;" glyph-name="aacute" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 464 261 + 367 433T410 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126ZM231 530L309 707H429V689L249 530H231Z" /> 262 + <glyph unicode="&#xe2;" glyph-name="acircumflex" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 263 + 464 367 433T410 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126ZM83 530L217 707H257L392 530H374L237 264 + 618L100 530H83Z" /> 265 + <glyph unicode="&#xe3;" glyph-name="atilde" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 464 266 + 367 433T410 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126ZM78 552Q96 610 111 638T143 675T179 684Q206 267 + 684 230 668T275 636T318 620Q336 620 349 632T378 684H397Q378 626 363 598T331 561T295 552Q268 552 244 568T199 600T156 616Q138 616 125 604T96 552H78Z" /> 268 + <glyph unicode="&#xe4;" glyph-name="adieresis" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 269 + 464 367 433T410 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126ZM141 563Q117 563 102 578T86 617Q86 640 270 + 101 655T141 671Q164 671 179 656T195 617Q195 594 180 579T141 563ZM333 563Q309 563 294 578T279 617Q279 640 294 655T333 671Q357 671 372 656T387 617Q387 594 372 579T333 563Z" /> 271 + <glyph unicode="&#xe5;" glyph-name="aring" horiz-adv-x="504" d="M153 -10Q102 -10 71 20T39 100Q39 152 73 185T197 241L294 265V331Q294 368 271 391T212 414Q198 414 184 411T153 400V302H80Q63 302 57 310T50 338Q50 367 77 396T148 444T246 464Q324 464 272 + 367 433T410 344V71Q417 64 429 60T461 55H494L497 52V43Q485 23 460 7T396 -10Q359 -10 336 7T301 55H294Q267 25 231 8T153 -10ZM149 126Q149 95 167 79T219 63Q254 63 294 80V227Q231 214 200 200T159 167T149 126ZM237 702Q276 702 300 678T325 618Q325 582 273 + 301 558T237 534Q198 534 174 557T149 618Q149 654 173 678T237 702ZM233 678Q218 678 210 666T202 625Q202 558 242 558Q273 558 273 611Q273 678 233 678Z" /> 274 + <glyph unicode="&#xe6;" glyph-name="ae" horiz-adv-x="743" d="M154 -10Q106 -10 73 19T40 101Q40 153 74 186T200 242L295 265V331Q295 368 272 391T212 414Q198 414 185 411T154 400V302H81Q63 302 57 310T51 338Q51 367 78 396T149 444T247 464Q347 464 386 275 + 411Q416 436 452 450T529 464Q609 464 654 409T700 254L695 249H408Q408 205 424 168T475 107T570 84Q599 84 630 92T698 119H701V105Q677 56 628 23T512 -10Q453 -10 408 12T334 73H327Q299 38 255 14T154 -10ZM508 419Q468 419 443 387T410 294H603Q594 363 570 276 + 391T508 419ZM150 126Q150 95 168 79T220 63Q247 63 271 71T321 93Q295 142 295 208V227Q233 215 202 201T160 168T150 126Z" /> 277 + <glyph unicode="&#xe7;" glyph-name="ccedilla" horiz-adv-x="482" d="M244 -209Q273 -209 286 -199T299 -171Q299 -149 279 -135T200 -103L242 -10Q152 -5 98 53T43 206Q43 282 76 340T168 431T298 464Q346 464 378 449T426 415T443 382Q443 366 424 352L386 278 + 321L301 421Q294 422 288 422Q247 422 217 399T170 338T154 253Q154 173 195 129T312 84Q341 84 372 92T440 119H443V105Q421 61 379 29T280 -9L262 -48Q319 -65 342 -88T365 -151Q365 -189 338 -214T264 -240Q209 -240 182 -214V-198H185Q210 -209 244 -209Z" 279 + /> 280 + <glyph unicode="&#xe8;" glyph-name="egrave" horiz-adv-x="491" d="M260 -10Q159 -10 101 49T43 206Q43 282 74 340T159 431T276 464Q356 464 401 409T447 254L443 249H155Q155 205 171 168T222 107T318 84Q346 84 378 92T445 119H448V105Q424 56 375 23T260 281 + -10ZM256 419Q216 419 191 387T158 294H350Q341 363 318 391T256 419ZM272 530H255L74 689V707H194L272 530Z" /> 282 + <glyph unicode="&#xe9;" glyph-name="eacute" horiz-adv-x="491" d="M260 -10Q159 -10 101 49T43 206Q43 282 74 340T159 431T276 464Q356 464 401 409T447 254L443 249H155Q155 205 171 168T222 107T318 84Q346 84 378 92T445 119H448V105Q424 56 375 23T260 283 + -10ZM256 419Q216 419 191 387T158 294H350Q341 363 318 391T256 419ZM258 530L336 707H456V689L276 530H258Z" /> 284 + <glyph unicode="&#xea;" glyph-name="ecircumflex" horiz-adv-x="491" d="M260 -10Q159 -10 101 49T43 206Q43 282 74 340T159 431T276 464Q356 464 401 409T447 254L443 249H155Q155 205 171 168T222 107T318 84Q346 84 378 92T445 119H448V105Q424 56 375 23T260 285 + -10ZM256 419Q216 419 191 387T158 294H350Q341 363 318 391T256 419ZM110 530L244 707H284L419 530H401L264 618L127 530H110Z" /> 286 + <glyph unicode="&#xeb;" glyph-name="edieresis" horiz-adv-x="491" d="M260 -10Q159 -10 101 49T43 206Q43 282 74 340T159 431T276 464Q356 464 401 409T447 254L443 249H155Q155 205 171 168T222 107T318 84Q346 84 378 92T445 119H448V105Q424 56 375 23T260 287 + -10ZM256 419Q216 419 191 387T158 294H350Q341 363 318 391T256 419ZM168 563Q144 563 129 578T113 617Q113 640 128 655T168 671Q191 671 206 656T222 617Q222 594 207 579T168 563ZM360 563Q336 563 321 578T306 617Q306 640 321 655T360 671Q384 671 399 656T414 288 + 617Q414 594 399 579T360 563Z" /> 289 + <glyph unicode="&#xec;" glyph-name="igrave" horiz-adv-x="325" d="M42 0V16L107 48V350L45 398V409L213 464H223V48L284 16V0H42ZM171 530H154L-27 689V707H93L171 530Z" /> 290 + <glyph unicode="&#xed;" glyph-name="iacute" horiz-adv-x="325" d="M42 0V16L107 48V350L45 398V409L213 464H223V48L284 16V0H42ZM157 530L235 707H355V689L175 530H157Z" /> 291 + <glyph unicode="&#xee;" glyph-name="icircumflex" horiz-adv-x="325" d="M42 0V16L107 48V350L45 398V409L213 464H223V48L284 16V0H42ZM9 530L143 707H183L318 530H300L163 618L26 530H9Z" /> 292 + <glyph unicode="&#xef;" glyph-name="idieresis" horiz-adv-x="325" d="M42 0V16L107 48V350L45 398V409L213 464H223V48L284 16V0H42ZM67 563Q43 563 28 578T12 617Q12 640 27 655T67 671Q90 671 105 656T121 617Q121 594 106 579T67 563ZM259 563Q235 563 220 293 + 578T205 617Q205 640 220 655T259 671Q283 671 298 656T313 617Q313 594 298 579T259 563Z" /> 294 + <glyph unicode="&#xf0;" glyph-name="eth" horiz-adv-x="549" d="M272 -10Q204 -10 152 21T71 104T41 220Q41 297 73 351T160 435T281 464Q303 464 320 462T353 456Q326 535 274 593L201 523H129L239 627Q178 680 94 710V749Q197 722 281 667L359 741H431L321 295 + 637Q409 567 458 470T508 261Q508 180 478 119T395 24T272 -10ZM163 229Q163 179 175 135T214 64T279 37Q325 37 353 91T382 266Q382 314 376 359Q354 384 331 398T276 413Q225 413 194 370T163 229Z" /> 296 + <glyph unicode="&#xf1;" glyph-name="ntilde" horiz-adv-x="603" d="M38 0V16L103 48V350L41 395V405L199 464H209L218 390H223Q260 426 294 445T373 464Q433 464 471 434T510 343V48L575 16V0H335V16L394 48V300Q394 338 371 358T311 379Q288 379 262 371T219 297 + 349V48L278 16V0H38ZM148 552Q166 610 181 638T213 675T249 684Q276 684 300 668T345 636T388 620Q406 620 419 632T448 684H467Q448 626 433 598T401 561T365 552Q338 552 314 568T269 600T226 616Q208 616 195 604T166 552H148Z" /> 298 + <glyph unicode="&#xf2;" glyph-name="ograve" horiz-adv-x="544" d="M272 -10Q203 -10 151 21T70 107T41 227Q41 293 70 346T151 432T272 464Q341 464 393 432T474 347T503 227Q503 161 474 107T393 22T272 -10ZM284 37Q318 37 339 61T371 124T381 207Q381 261 299 + 369 309T331 387T262 418Q228 418 206 394T174 331T163 248Q163 194 175 146T215 67T284 37ZM279 530H262L81 689V707H201L279 530Z" /> 300 + <glyph unicode="&#xf3;" glyph-name="oacute" horiz-adv-x="544" d="M272 -10Q203 -10 151 21T70 107T41 227Q41 293 70 346T151 432T272 464Q341 464 393 432T474 347T503 227Q503 161 474 107T393 22T272 -10ZM284 37Q318 37 339 61T371 124T381 207Q381 261 301 + 369 309T331 387T262 418Q228 418 206 394T174 331T163 248Q163 194 175 146T215 67T284 37ZM265 530L343 707H463V689L283 530H265Z" /> 302 + <glyph unicode="&#xf4;" glyph-name="ocircumflex" horiz-adv-x="544" d="M272 -10Q203 -10 151 21T70 107T41 227Q41 293 70 346T151 432T272 464Q341 464 393 432T474 347T503 227Q503 161 474 107T393 22T272 -10ZM284 37Q318 37 339 61T371 124T381 207Q381 303 + 261 369 309T331 387T262 418Q228 418 206 394T174 331T163 248Q163 194 175 146T215 67T284 37ZM116 530L250 707H290L425 530H407L270 618L133 530H116Z" /> 304 + <glyph unicode="&#xf5;" glyph-name="otilde" horiz-adv-x="544" d="M272 -10Q203 -10 151 21T70 107T41 227Q41 293 70 346T151 432T272 464Q341 464 393 432T474 347T503 227Q503 161 474 107T393 22T272 -10ZM284 37Q318 37 339 61T371 124T381 207Q381 261 305 + 369 309T331 387T262 418Q228 418 206 394T174 331T163 248Q163 194 175 146T215 67T284 37ZM111 552Q129 610 144 638T176 675T212 684Q239 684 263 668T308 636T351 620Q369 620 382 632T411 684H430Q411 626 396 598T364 561T328 552Q301 552 277 568T232 600T189 306 + 616Q171 616 158 604T129 552H111Z" /> 307 + <glyph unicode="&#xf6;" glyph-name="odieresis" horiz-adv-x="544" d="M272 -10Q203 -10 151 21T70 107T41 227Q41 293 70 346T151 432T272 464Q341 464 393 432T474 347T503 227Q503 161 474 107T393 22T272 -10ZM284 37Q318 37 339 61T371 124T381 207Q381 308 + 261 369 309T331 387T262 418Q228 418 206 394T174 331T163 248Q163 194 175 146T215 67T284 37ZM174 563Q150 563 135 578T119 617Q119 640 134 655T174 671Q197 671 212 656T228 617Q228 594 213 579T174 563ZM366 563Q342 563 327 578T312 617Q312 640 327 655T366 309 + 671Q390 671 405 656T420 617Q420 594 405 579T366 563Z" /> 310 + <glyph unicode="&#xf7;" glyph-name="divide" horiz-adv-x="536" d="M234 415V482H302V415H234ZM58 246V298H478V246H58ZM234 62V129H302V62H234Z" /> 311 + <glyph unicode="&#xf8;" glyph-name="oslash" horiz-adv-x="544" d="M41 -10L102 63Q73 94 57 136T41 227Q41 293 70 346T151 432T272 464Q310 464 343 454T403 425L435 464H503L443 391Q472 359 487 317T503 227Q503 161 474 107T393 22T272 -10Q234 -10 201 312 + 0T141 29L109 -10H41ZM163 248Q163 194 174 150L349 360Q335 387 314 402T262 418Q228 418 206 394T174 331T163 248ZM284 37Q318 37 339 61T371 124T381 207Q381 260 370 304L196 94Q211 68 233 53T284 37Z" /> 313 + <glyph unicode="&#xf9;" glyph-name="ugrave" horiz-adv-x="578" d="M221 -10Q161 -10 123 20T85 111V406L20 438V454H201V154Q201 115 224 95T284 75Q306 75 331 82T374 105V406L309 438V454H490V46L556 16V0H374V63H370Q333 27 299 9T221 -10ZM293 530H276L95 314 + 689V707H215L293 530Z" /> 315 + <glyph unicode="&#xfa;" glyph-name="uacute" horiz-adv-x="578" d="M221 -10Q161 -10 123 20T85 111V406L20 438V454H201V154Q201 115 224 95T284 75Q306 75 331 82T374 105V406L309 438V454H490V46L556 16V0H374V63H370Q333 27 299 9T221 -10ZM278 530L356 707H476V689L296 316 + 530H278Z" /> 317 + <glyph unicode="&#xfb;" glyph-name="ucircumflex" horiz-adv-x="578" d="M221 -10Q161 -10 123 20T85 111V406L20 438V454H201V154Q201 115 224 95T284 75Q306 75 331 82T374 105V406L309 438V454H490V46L556 16V0H374V63H370Q333 27 299 9T221 -10ZM130 530L264 318 + 707H304L439 530H421L284 618L147 530H130Z" /> 319 + <glyph unicode="&#xfc;" glyph-name="udieresis" horiz-adv-x="578" d="M221 -10Q161 -10 123 20T85 111V406L20 438V454H201V154Q201 115 224 95T284 75Q306 75 331 82T374 105V406L309 438V454H490V46L556 16V0H374V63H370Q333 27 299 9T221 -10ZM188 563Q164 320 + 563 149 578T133 617Q133 640 148 655T188 671Q211 671 226 656T242 617Q242 594 227 579T188 563ZM380 563Q356 563 341 578T326 617Q326 640 341 655T380 671Q404 671 419 656T434 617Q434 594 419 579T380 563Z" /> 321 + <glyph unicode="&#xfd;" glyph-name="yacute" horiz-adv-x="478" d="M-31 454H230V438L160 408V404L280 149H285L381 399V404L315 438V454H508V438L436 404L221 -119Q201 -166 183 -192T142 -229T89 -240Q65 -240 57 -233T48 -199V-146H151Q168 -125 183 -96T222 322 + -10L226 1L33 409L-31 438V454ZM268 530L346 707H466V689L286 530H268Z" /> 323 + <glyph unicode="&#xfe;" glyph-name="thorn" horiz-adv-x="578" d="M38 -230V-214L103 -182V636L41 685V695L203 750H219V404H225Q262 436 296 450T370 464Q417 464 455 438T517 363T540 247Q540 166 509 109T425 21T310 -10Q258 -10 219 0V-182L294 -214V-230H38ZM299 324 + 387Q259 387 219 363V77Q258 41 319 41Q346 41 370 57T409 111T425 216Q425 304 387 345T299 387Z" /> 325 + <glyph unicode="&#xff;" glyph-name="ydieresis" horiz-adv-x="478" d="M-31 454H230V438L160 408V404L280 149H285L381 399V404L315 438V454H508V438L436 404L221 -119Q201 -166 183 -192T142 -229T89 -240Q65 -240 57 -233T48 -199V-146H151Q168 -125 183 -96T222 326 + -10L226 1L33 409L-31 438V454ZM178 563Q154 563 139 578T123 617Q123 640 138 655T178 671Q201 671 216 656T232 617Q232 594 217 579T178 563ZM370 563Q346 563 331 578T316 617Q316 640 331 655T370 671Q394 671 409 656T424 617Q424 594 409 579T370 563Z" 327 + /> 328 + <glyph unicode="&#x2013;" glyph-name="endash" horiz-adv-x="500" d="M48 247V297H452V247H48Z" /> 329 + <glyph unicode="&#x2014;" glyph-name="emdash" horiz-adv-x="1000" d="M48 247V297H952V247H48Z" /> 330 + <glyph unicode="&#x2018;" glyph-name="quoteleft" horiz-adv-x="245" d="M224 744L145 489H17V512L200 744H224Z" /> 331 + <glyph unicode="&#x2019;" glyph-name="quoteright" horiz-adv-x="245" d="M22 486L100 740H228V718L46 486H22Z" /> 332 + <glyph unicode="&#x201a;" glyph-name="quotesinglbase" horiz-adv-x="245" d="M22 -186L100 68H228V46L46 -186H22Z" /> 333 + <glyph unicode="&#x201c;" glyph-name="quotedblleft" horiz-adv-x="442" d="M224 744L145 489H17V512L200 744H224ZM420 744L341 489H213V512L396 744H420Z" /> 334 + <glyph unicode="&#x201d;" glyph-name="quotedblright" horiz-adv-x="442" d="M22 486L100 740H228V718L46 486H22ZM218 486L296 740H424V718L242 486H218Z" /> 335 + <glyph unicode="&#x201e;" glyph-name="quotedblbase" horiz-adv-x="442" d="M22 -186L100 68H228V46L46 -186H22ZM218 -186L296 68H424V46L242 -186H218Z" /> 336 + <glyph unicode="&#x2022;" glyph-name="bullet" horiz-adv-x="500" d="M250 150Q197 150 163 185T128 272Q128 325 162 359T250 393Q301 393 336 359T371 272Q371 220 336 185T250 150Z" /> 337 + <glyph unicode="&#x2039;" glyph-name="guilsinglleft" horiz-adv-x="264" d="M225 70L24 247L225 424H241L132 247L241 70H225Z" /> 338 + <glyph unicode="&#x203a;" glyph-name="guilsinglright" horiz-adv-x="264" d="M24 70L132 247L24 424H39L241 247L39 70H24Z" /> 339 + </font> 340 + </defs> 341 + </svg>
public/fonts/spectral-v15-latin-600.ttf

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-600.woff

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-600.woff2

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-700.eot

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-700.ttf

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-700.woff

This is a binary file and will not be displayed.

public/fonts/spectral-v15-latin-700.woff2

This is a binary file and will not be displayed.

+31 -4
public/index.html
··· 3 3 <head> 4 4 <meta charset="UTF-8"> 5 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 - <title>seams.so - Wisdom is made Together</title> 6 + <title>Seams - Wisdom is made Together</title> 7 7 <link rel="stylesheet" href="landing.css"> 8 8 </head> 9 9 <body> ··· 15 15 <h1><span style="white-space: nowrap;">Wisdom is Made</span> <br>Together</h1> 16 16 <p class="tagline">Annotations in the Atmosphere</p> 17 17 <div class="cta-buttons"> 18 - <a href="#install" class="cta-primary">Install Extension</a> 18 + <a href="https://addons.mozilla.org/en-US/firefox/addon/seams/" class="cta-primary" target="_blank">Install Extension</a> 19 + <a href="/about.html" class="cta-secondary">About</a> 19 20 </div> 20 21 </header> 21 22 22 23 <footer class="footer desktop-footer"> 23 24 <div class="footer-icons"> 24 - <a href="https://tangled.org/@hyl.st/seams.so" target="_blank" aria-label="Tangled"> 25 + <a href="https://tangled.org/@sealight.xyz/seams.so" target="_blank" aria-label="Tangled"> 25 26 <img src="https://semble.so/_next/static/media/tangled-icon.b95d4d65.svg" alt="Tangled" /> 26 27 </a> 27 28 <a href="https://bsky.app" target="_blank" aria-label="Bluesky"> ··· 47 48 48 49 <footer class="footer mobile-footer"> 49 50 <div class="footer-icons"> 50 - <a href="https://tangled.org/@hyl.st/seams.so" target="_blank" aria-label="Tangled"> 51 + <a href="https://tangled.org/@sealight.xyz/seams.so" target="_blank" aria-label="Tangled"> 51 52 <img src="https://semble.so/_next/static/media/tangled-icon.b95d4d65.svg" alt="Tangled" /> 52 53 </a> 53 54 <a href="https://bsky.app" target="_blank" aria-label="Bluesky"> ··· 62 63 <script> 63 64 // Backend URL defaults to same origin (production) or can be overridden for development 64 65 // window.BACKEND_URL = 'http://localhost:8080'; 66 + 67 + // Detect browser and set appropriate extension URL 68 + function getBrowserExtensionUrl() { 69 + const ua = navigator.userAgent; 70 + 71 + // Check Chrome (also works for Edge since it's Chromium-based) 72 + if (ua.includes('Chrome')) { 73 + return 'https://chromewebstore.google.com/detail/seams/dmkgcehijkfpalmplnallinblhimageb'; 74 + } 75 + 76 + // Firefox 77 + if (ua.includes('Firefox')) { 78 + return 'https://addons.mozilla.org/en-US/firefox/addon/seams/'; 79 + } 80 + 81 + // Default fallback to Firefox 82 + return 'https://addons.mozilla.org/en-US/firefox/addon/seams/'; 83 + } 84 + 85 + // Update button href when page loads 86 + document.addEventListener('DOMContentLoaded', function() { 87 + const installButton = document.querySelector('.cta-primary'); 88 + if (installButton) { 89 + installButton.href = getBrowserExtensionUrl(); 90 + } 91 + }); 65 92 </script> 66 93 <script type="module" src="landing.js"></script> 67 94 </body>
+14 -10
public/landing.css
··· 1 + @import url('fonts.css'); 2 + 1 3 * { 2 4 box-sizing: border-box; 3 5 margin: 0; ··· 72 74 } 73 75 74 76 .logo { 75 - font-size: 14px; 76 - font-weight: 600; 77 - letter-spacing: 0.15em; 77 + font-family: 'Spectral', serif; 78 + font-size: 16px; 79 + font-weight: 700; 80 + letter-spacing: 0.1em; 78 81 text-transform: uppercase; 79 - color: #999; 82 + color: #666; 80 83 margin-bottom: 24px; 81 84 } 82 85 83 86 .hero h1 { 87 + font-family: 'Fraunces', serif; 84 88 font-size: clamp(28px, 3vw, 40px); 85 - font-weight: 700; 89 + font-weight: 600; 86 90 margin-bottom: 24px; 87 91 color: #1a1a1a; 88 - line-height: 1.1; 89 - letter-spacing: -0.02em; 92 + line-height: 1.2; 93 + letter-spacing: -0.01em; 90 94 } 91 95 92 96 .tagline { ··· 101 105 .cta-buttons { 102 106 display: flex; 103 107 gap: 12px; 104 - flex-direction: column; 108 + flex-direction: row; 105 109 align-items: center; 106 110 } 107 111 108 112 .cta-primary, 109 113 .cta-secondary { 110 - padding: 12px 28px; 114 + padding: 10px 20px; 111 115 border-radius: 2px; 112 - font-size: 14px; 116 + font-size: 13px; 113 117 font-weight: 500; 114 118 text-decoration: none; 115 119 transition: all 0.2s;
+3 -1
public/oauth/client-metadata.json
··· 5 5 "https://synthes-is.netlify.app", 6 6 "https://synthes-is.netlify.app/oauth/callback", 7 7 "https://synthes-is.netlify.app/oauth/ff/callback", 8 - "https://e7a0b7703dc3d21c8ef60539da3ed68d27b48e8c.extensions.allizom.org/" 8 + "https://e7a0b7703dc3d21c8ef60539da3ed68d27b48e8c.extensions.allizom.org/", 9 + "https://synthesis@seams.so/oauth/ff/callback", 10 + "https://dmkgcehijkfpalmplnallinblhimageb.chromium.org/oauth/callback.html" 9 11 ], 10 12 "application_type": "web", 11 13 "client_name": "Seams",
+44
server/.air.toml
··· 1 + root = "." 2 + testdata_dir = "testdata" 3 + tmp_dir = "tmp" 4 + 5 + [build] 6 + args_bin = [] 7 + bin = "./tmp/main" 8 + cmd = "go build -o ./tmp/main ./cmd/server" 9 + delay = 1000 10 + exclude_dir = ["vendor", "testdata", "tmp", "db", "../public"] 11 + exclude_file = [] 12 + exclude_regex = ["_test.go"] 13 + exclude_unchanged = false 14 + follow_symlink = false 15 + full_bin = "" 16 + include_dir = [] 17 + include_ext = ["go", "tpl", "tmpl", "html"] 18 + include_file = [] 19 + kill_delay = "0s" 20 + log = "build-errors.log" 21 + poll = false 22 + poll_interval = 0 23 + rerun = false 24 + rerun_delay = 500 25 + send_interrupt = false 26 + stop_on_error = false 27 + 28 + [color] 29 + app = "" 30 + build = "yellow" 31 + main = "magenta" 32 + runner = "green" 33 + watcher = "cyan" 34 + 35 + [log] 36 + main_only = false 37 + time = false 38 + 39 + [misc] 40 + clean_on_exit = false 41 + 42 + [screen] 43 + clear_on_rebuild = false 44 + keep_scroll = true
+7
server/README.md
··· 35 35 36 36 ### Run Server 37 37 38 + **Development (with hot reload):** 39 + ```bash 40 + cd server 41 + air 42 + ``` 43 + 44 + **Production:** 38 45 ```bash 39 46 cd server 40 47 go run cmd/server/main.go
+1 -1
server/cmd/server/main.go
··· 67 67 r.Get("/health", handler.Health) 68 68 69 69 // Serve static files for everything else 70 - publicDir := getEnv("PUBLIC_DIR", "./public") 70 + publicDir := getEnv("PUBLIC_DIR", "../public") 71 71 log.Printf("Serving static files from %s", publicDir) 72 72 73 73 // Create final handler that checks API routes first, then static files
server/tmp/main

This is a binary file and will not be displayed.

+32
vite.via.config.ts
··· 1 + import { defineConfig } from 'vite'; 2 + import path from 'path'; 3 + 4 + export default defineConfig({ 5 + build: { 6 + outDir: 'pywb-test/static', 7 + emptyOutDir: false, 8 + sourcemap: true, 9 + rollupOptions: { 10 + input: { 11 + client: path.resolve(__dirname, 'entrypoints/via-client/main.ts'), 12 + sidebar: path.resolve(__dirname, 'entrypoints/via-client/sidebar.ts'), 13 + 'oauth-callback': path.resolve(__dirname, 'entrypoints/via-client/oauth-callback.ts'), 14 + }, 15 + output: { 16 + entryFileNames: 'seams-[name].js', 17 + format: 'es', 18 + }, 19 + }, 20 + }, 21 + resolve: { 22 + alias: { 23 + '@': path.resolve(__dirname, './'), 24 + }, 25 + }, 26 + define: { 27 + 'import.meta.env.VITE_OAUTH_CLIENT_ID': JSON.stringify(process.env.VITE_OAUTH_CLIENT_ID || 'http://localhost:8081/static/client-metadata.json'), 28 + 'import.meta.env.VITE_OAUTH_REDIRECT_URI': JSON.stringify(process.env.VITE_OAUTH_REDIRECT_URI || 'http://localhost:8081/static/oauth-callback.html'), 29 + 'import.meta.env.VITE_OAUTH_SCOPE': JSON.stringify(process.env.VITE_OAUTH_SCOPE || 'atproto transition:generic'), 30 + 'import.meta.env.BACKEND_URL': JSON.stringify(process.env.BACKEND_URL || 'https://seams.so'), 31 + }, 32 + });
+2 -1
wxt.config.ts
··· 5 5 manifest: (env) => ({ 6 6 name: 'Seams', 7 7 description: 'Web annotations on AT Protocol', 8 - ...(env.browser === 'chrome' && { 8 + // Include key for development, but exclude for production Chrome Web Store upload 9 + ...(env.browser === 'chrome' && env.mode !== 'production' && { 9 10 key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyv6hsV+VmGtQB8kZFQE0x0VYvhH0Lq2GzDhKZHh9BvPZLmFJQjXqzD9K0UzXxMXBj8FqV3WEJ9xFzDqJc+hKRBqJFQp0vXYrG8hVLVsqxW2wYpF1K8ZqMH3J0V2VB9C3KxvqBJk9kQxqHj8BvXJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFz8B1XJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFz8B1XJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFz8B1XJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFQIDAQAB', 10 11 }), 11 12 ...(env.browser === 'firefox' && {