#
tokens: 38969/50000 24/24 files
lines: on (toggle) GitHub
raw markdown copy reset
# Directory Structure

```
├── .gitignore
├── .npmignore
├── docs
│   ├── google-search-spec.md
│   └── publish-npm.md
├── jest.config.mjs
├── LICENSE
├── package-lock.json
├── package.json
├── README.md
├── src
│   ├── index.ts
│   ├── tools
│   │   ├── fetch.ts
│   │   └── search.ts
│   ├── toolsImpl
│   │   ├── searchTool
│   │   │   └── index.ts
│   │   └── webFetchTool
│   │       ├── htmlParser.ts
│   │       ├── index.ts
│   │       ├── scriptGenerator.ts
│   │       └── types.ts
│   ├── types
│   │   └── search.ts
│   └── utils
│       ├── osascript.ts
│       └── url.ts
├── test
│   ├── data
│   │   └── wikipedia.home.html
│   ├── integration
│   │   ├── web-fetch.test.ts
│   │   └── web-search-tool.test.ts
│   └── unit
│       ├── web-fetch.test.ts
│       └── web-search-url.test.ts
└── tsconfig.json
```

# Files

--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------

```
 1 | # Source
 2 | src/
 3 | 
 4 | # Tests
 5 | **/*.test.ts
 6 | **/*.spec.ts
 7 | coverage/
 8 | jest.config.js
 9 | 
10 | # Development configs
11 | .eslintrc
12 | .prettierrc
13 | tsconfig.json
14 | .editorconfig
15 | .git*
16 | 
17 | # IDE
18 | .vscode/
19 | .idea/
20 | 
21 | # Logs
22 | *.log
23 | npm-debug.log*
24 | 
25 | # Dependencies
26 | node_modules/
27 | 
28 | # Misc
29 | .DS_Store
30 | *.env
31 | .env.*
```

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
 1 | # Dependencies
 2 | node_modules/
 3 | .pnp/
 4 | .pnp.js
 5 | 
 6 | # Production build
 7 | dist/
 8 | build/
 9 | 
10 | # TypeScript cache
11 | *.tsbuildinfo
12 | 
13 | # Environment variables
14 | .env
15 | .env.local
16 | .env.development.local
17 | .env.test.local
18 | .env.production.local
19 | 
20 | # Logs
21 | logs/
22 | *.log
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | 
27 | # Editor directories and files
28 | .idea/
29 | .vscode/
30 | *.swp
31 | *.swo
32 | .DS_Store
33 | *.sublime-workspace
34 | *.sublime-project
35 | 
36 | # Testing
37 | coverage/
38 | 
39 | # Temporary files
40 | *.tmp
41 | *.temp
42 | 
43 | # Debug
44 | .debug/
45 | 
46 | # OS generated files
47 | .DS_Store
48 | .DS_Store?
49 | ._*
50 | .Spotlight-V100
51 | .Trashes
52 | ehthumbs.db
53 | Thumbs.db
54 | .aider*
55 | 
```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # MCP Chrome Google Search Tool
  2 | 
  3 | MCP tool for Google search and webpage content extraction using Chrome browser. Works with Claude to enable Google search and content fetching capabilities.
  4 | 
  5 | ## Quick Installation
  6 | 
  7 | 1. **Configure Claude Desktop**
  8 |    - Open Claude Desktop on Mac
  9 |    - Go to Claude > Settings > Developer > Edit Config
 10 |    - Add the following to your config file:
 11 |    ```json
 12 |    {
 13 |      "mcpServers": {
 14 |        "mcp-chrome-google-search": {
 15 |          "command": "npx",
 16 |          "args": [
 17 |            "-y",
 18 |            "@cmann50/mcp-chrome-google-search"
 19 |          ]
 20 |        }
 21 |      }
 22 |    }
 23 |    ```
 24 |    - Restart Claude Desktop
 25 | 
 26 | 2. **First Time Setup**
 27 |    - **Grant Accessibility Permissions**
 28 |      - On first run, approve macOS accessibility permissions prompt
 29 |      - Navigate to: System Preferences > Security & Privacy > Privacy > Accessibility
 30 |      - Add and enable permissions for your terminal app
 31 | 
 32 |    - **Enable Chrome JavaScript from Apple Events**
 33 |      - Open Chrome
 34 |      - Navigate to: View > Developer > Allow JavaScript from Apple Events
 35 |      - One-time setup only
 36 | 
 37 | Once configured, Claude will be able to perform Google searches and extract webpage content through Chrome when you make requests.
 38 | 
 39 | ## Key Advantages
 40 | 
 41 | - Free to search google
 42 | - Opens and small windows and uses your chrome browser, so should not get blocked
 43 | - Since it is using your Chrome window it can access authenticated content.  Claude can just open the URL in your browser.
 44 | 
 45 | ## Platform Support
 46 | - ✅ macOS
 47 | - ❌ Windows (not supported)
 48 | - ❌ Linux (not supported)
 49 | 
 50 | ## Requirements
 51 | 1. macOS
 52 | 2. Google Chrome
 53 | 3. Node.js 20 or higher
 54 | 
 55 | ## Alternative Installation Methods
 56 | 
 57 | ### NPX Installation
 58 | ```bash
 59 | npx mcp-chrome-google-search
 60 | ```
 61 | 
 62 | 
 63 | ### Custom Installation
 64 | 1. Checkout from git
 65 | 2. Run `npm run build`
 66 | 3. Add to Claude config (use absolute path):
 67 | ```json
 68 | {
 69 |     "google-tools": {
 70 |         "command": "node",
 71 |         "args": [
 72 |             "/your/checkout/path/mcp/mcp-chrome-google-search/dist/index.js"
 73 |         ]
 74 |     }
 75 | }
 76 | ```
 77 | 
 78 | ## Local development
 79 | 
 80 | To test changes locally bump package.json version and run
 81 | to put it in edit mode:
 82 | ```
 83 | npm install -g .
 84 | ```
 85 | Then just do `npm run build` and the files will go in dist where claude is monitoring
 86 | 
 87 | Then press ctrl-R in claude desktop, no need to restart it
 88 | 
 89 | ## Debugging
 90 | 
 91 | ### Log Monitoring
 92 | ```bash
 93 | # Follow logs in real-time
 94 | tail -n 20 -F ~/Library/Logs/Claude/mcp*.log
 95 | ```
 96 | 
 97 | ### Dev Tools Access
 98 | 1. Enable developer settings:
 99 | ```bash
100 | echo '{"allowDevTools": true}' > ~/Library/Application\ Support/Claude/developer_settings.json
101 | ```
102 | 2. Open DevTools: Command-Option-Shift-i in Claude desktop
103 | 3. Use ctrl-r in Claude desktop while tailing for better errors
104 | 
105 | ## Troubleshooting
106 | 
107 | ### Chrome JavaScript Error
108 | If you see:
109 | ```
110 | execution error: Google Chrome got an error: Executing JavaScript through AppleScript 
111 | is turned off. For more information: https://support.google.com/chrome/?p=applescript (12)
112 | ```
113 | 
114 | Solution:
115 | 1. Open Chrome
116 | 2. View > Developer > Allow JavaScript from Apple Events
117 | 
118 | ### Accessibility Permission Issues
119 | If Chrome control fails:
120 | 1. Open System Preferences
121 | 2. Security & Privacy > Privacy > Accessibility
122 | 3. Ensure terminal app is listed and enabled
123 | 4. Use lock icon to make changes if needed
124 | 
125 | ## Implementation Details
126 | 
127 | - Uses AppleScript for Chrome control
128 | - Visible automation - Chrome windows will open/navigate
129 | - Each request opens a new Chrome tab
130 | - Close unused tabs periodically for optimal performance
131 | - Only use with trusted Claude instances (has Chrome control access)
132 | 
133 | ## Support
134 | 
135 | - Create GitHub issues for problems
136 | - Include macOS and Chrome version details
137 | 
138 | ## License
139 | 
140 | MIT License - see LICENSE file for details
```

--------------------------------------------------------------------------------
/src/types/search.ts:
--------------------------------------------------------------------------------

```typescript
 1 | export interface SearchParams {
 2 |   query_text: string;
 3 |   site?: string;
 4 |   timeframe?: 'h' | 'd' | 'w' | 'm' | 'y';
 5 | }
 6 | 
 7 | export interface SearchResult {
 8 |   url: string;
 9 |   description: string;
10 | }
```

--------------------------------------------------------------------------------
/src/toolsImpl/webFetchTool/types.ts:
--------------------------------------------------------------------------------

```typescript
 1 | export interface Link {
 2 |   text: string;
 3 |   url: string;
 4 | }
 5 | 
 6 | export interface ParsedContent {
 7 |   text: string;
 8 |   links: Link[];
 9 | }
10 | 
11 | export interface WebContentOptions {
12 |   includeLinks?: boolean;
13 | }
```

--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------

```json
 1 | {
 2 |   "compilerOptions": {
 3 |     "target": "ES2020",
 4 |     "module": "ES2022",
 5 |     "moduleResolution": "node",
 6 |     "esModuleInterop": true,
 7 |     "outDir": "./dist",
 8 |     "rootDir": "./src",
 9 |     "strict": true
10 |   },
11 |   "include": ["src/**/*"]
12 | }
```

--------------------------------------------------------------------------------
/docs/publish-npm.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Publishing Guide
 2 | 
 3 | ## NPM
 4 | ```bash
 5 | # Update version
 6 | npm version patch|minor|major
 7 | 
 8 | # Build and publish
 9 | npm run build
10 | npm publish --access public
11 | ```
12 | 
13 | ## GitHub
14 | ```bash
15 | # Push changes
16 | git add .
17 | git commit -m "feat: description"
18 | git push origin main
19 | 
20 | # Push tags
21 | git push --tags
22 | ```
23 | 
24 | Note: Ensure you're logged into npm (`npm login`) and GitHub before publishing.
```

--------------------------------------------------------------------------------
/src/utils/osascript.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { execFile } from 'node:child_process';
 2 | import { promisify } from 'node:util';
 3 | 
 4 | const execFileAsync = promisify(execFile);
 5 | 
 6 | export async function runOsascript(script: string): Promise<string> {
 7 |   // Set maxBuffer to 10MB (10 * 1024 * 1024)
 8 |   const { stdout } = await execFileAsync('osascript', ['-e', script], {
 9 |     maxBuffer: 10 * 1024 * 1024
10 |   });
11 |   return stdout;
12 | }
```

--------------------------------------------------------------------------------
/jest.config.mjs:
--------------------------------------------------------------------------------

```
 1 | export default {
 2 |   preset: 'ts-jest',
 3 |   testEnvironment: 'node',
 4 |   moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
 5 |   testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)'],
 6 |   extensionsToTreatAsEsm: ['.ts'],
 7 |   transform: {
 8 |     '^.+\\.tsx?$': ['ts-jest', {
 9 |       useESM: true,
10 |     }]
11 |   },
12 |   moduleNameMapper: {
13 |     '^(\\.{1,2}/.*)\\.js$': '$1',
14 |   }
15 | };
```

--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------

```typescript
 1 | #!/usr/bin/env node
 2 | 
 3 | import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
 4 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
 5 | import { registerSearchTool } from './tools/search.js';
 6 | import { registerFetchTool } from './tools/fetch.js';
 7 | 
 8 | const server = new McpServer({
 9 |   name: "mcp-chrome-google-search",
10 |   version: "1.0.0",
11 | });
12 | 
13 | registerSearchTool(server);
14 | registerFetchTool(server);
15 | 
16 | async function main() {
17 |   const transport = new StdioServerTransport();
18 |   await server.connect(transport);
19 |   console.error("MCP Chrome Google Search Server running on stdio");
20 | }
21 | 
22 | main().catch(error => {
23 |   console.error("Fatal error:", error);
24 |   process.exit(1);
25 | });
```

--------------------------------------------------------------------------------
/src/utils/url.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import type { SearchParams } from '../types/search.js';
 2 | 
 3 | function formatDate(date: Date): string {
 4 |   return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`;
 5 | }
 6 | 
 7 | export function buildGoogleSearchUrl(params: SearchParams, pageNum: number = 0): string {
 8 |   // Build base query
 9 |   let searchQuery = params.query_text;
10 |   
11 |   // Add site restriction if specified
12 |   if (params.site) {
13 |     searchQuery = `site:${params.site} ${searchQuery}`;
14 |   }
15 |   
16 |   // Base URL with encoded query and page number
17 |   let url = `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}&hl=en&start=${pageNum * 10}`;
18 |   
19 |   // Add time restriction if specified
20 |   if (params.timeframe) {
21 |     url += `&tbs=qdr:${params.timeframe}`;
22 |   }
23 |   
24 |   return url;
25 | }
```

--------------------------------------------------------------------------------
/src/toolsImpl/webFetchTool/scriptGenerator.ts:
--------------------------------------------------------------------------------

```typescript
 1 | export function generateAppleScript(url: string): string {
 2 |   const script = `
 3 |     tell application "Google Chrome"
 4 |       make new window with properties {bounds:{50, 50, 425, 717}}
 5 |       set newWindow to window 1
 6 |       
 7 |       tell newWindow
 8 |         set URL of active tab to "${url}"
 9 |       end tell
10 |       
11 |       -- Return focus to Claude
12 |       tell application "Claude" to activate
13 | 
14 |       -- Wait for page to load
15 |       tell active tab of newWindow
16 |         repeat until (loading is false)
17 |           delay 0.1
18 |         end repeat
19 |       end tell
20 |       
21 |       -- Get page content
22 |       tell active tab of newWindow
23 |         set pageContent to (execute javascript "document.documentElement.outerHTML;")
24 |       end tell
25 |       
26 |       -- Close the window
27 |       close newWindow
28 |     end tell
29 |     
30 |     return pageContent
31 |   `;
32 |   return script;
33 | }
```

--------------------------------------------------------------------------------
/src/toolsImpl/webFetchTool/index.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { runOsascript } from '../../utils/osascript.js';
 2 | import { generateAppleScript } from './scriptGenerator.js';
 3 | import { parseHtml } from './htmlParser.js';
 4 | import type { WebContentOptions } from './types.js';
 5 | 
 6 | export async function getWebContent(url: string, options: WebContentOptions = {}): Promise<string> {
 7 |   try {
 8 |     const script = generateAppleScript(url);
 9 |     const rawContent = await runOsascript(script);
10 |     
11 |     if (!rawContent) {
12 |       throw new Error('No content received from page');
13 |     }
14 |     
15 |     const { text, links } = parseHtml(rawContent);
16 |     
17 |     if (!options.includeLinks || links.length === 0) {
18 |       return text;
19 |     }
20 | 
21 |     return `${text}\n\n=== Links ===\n${links.map(link => 
22 |       `${link.text} (${link.url})`).join('\n')}`;
23 |       
24 |   } catch (error: unknown) {
25 |     throw new Error(`Failed to get web content: ${error instanceof Error ? error.message : String(error)}`);
26 |   }
27 | }
```

--------------------------------------------------------------------------------
/docs/google-search-spec.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Google Search URL Specification
 2 | 
 3 | ## Basic Search URLs
 4 | 
 5 | ```
 6 | # Basic search
 7 | https://www.google.com/search?q=news
 8 | 
 9 | # Site-specific search
10 | https://www.google.com/search?q=site:apple.com+news
11 | 
12 | # Site-specific search with time filter
13 | https://www.google.com/search?q=site:apple.com+news&tbs=qdr:d
14 | ```
15 | 
16 | ## Time Filter Parameters
17 | 
18 | Relative time filters using `tbs=qdr:X`:
19 | ```
20 | h : past hour
21 | d : past 24 hours
22 | w : past week
23 | m : past month
24 | y : past year
25 | ```
26 | 
27 | Custom date range using `tbs=cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY`:
28 | ```
29 | Example: tbs=cdr:1,cd_min:12/1/2024,cd_max:12/31/2024
30 | ```
31 | 
32 | ## TypeScript Interface
33 | 
34 | ```typescript
35 | interface SearchParams {
36 |   query_text: string;  // Plain text to search for (no Google operators)
37 | 
38 |   site?: string;          // Optional site restriction (e.g. "apple.com")
39 |   timeframe?: {
40 |     type: 'relative';     // For qdr: filters
41 |     period: 'h' | 'd' | 'w' | 'm' | 'y';
42 |   } | {
43 |     type: 'custom';       // For custom date range
44 |     startDate: Date;      // Will be formatted as MM/DD/YYYY
45 |     endDate: Date;
46 |   };
47 | }
48 | ```
49 | 
50 | Note: The query_text parameter and date portions in custom date ranges require URL encoding.
```

--------------------------------------------------------------------------------
/src/tools/fetch.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { z } from "zod";
 2 | import { getWebContent } from '../toolsImpl/webFetchTool/index.js';
 3 | import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
 4 | 
 5 | export function registerFetchTool(server: McpServer) {
 6 |   server.tool(
 7 |     "web_fetch",
 8 |     "Extract readable text content from a webpage using Chrome browser automation.\n\nKey Features:\n- Returns main content text and optionally links",
 9 |     {
10 |       url: z.string().url()
11 |         .describe("Webpage URL to fetch (must include http:// or https://)"),
12 |       
13 |       includeLinks: z.boolean().optional().default(false)
14 |         .describe("Whether to include extracted links in the output")
15 |     },
16 |     async ({ url, includeLinks }) => {
17 |       try {
18 |         const content = await getWebContent(url, { includeLinks });
19 |         if (!content) {
20 |           return {
21 |             content: [{
22 |               type: "text",
23 |               text: "Failed to retrieve web content"
24 |             }]
25 |           };
26 |         }
27 | 
28 |         // Ensure the content is properly formatted and trimmed
29 |         const formattedContent = content.trim();
30 |         
31 |         return {
32 |           content: [{
33 |             type: "text",
34 |             text: formattedContent
35 |           }]
36 |         };
37 |       } catch (error) {
38 |         const errorMessage = error instanceof Error ? error.message : String(error);
39 |         return {
40 |           content: [{
41 |             type: "text",
42 |             text: `Content fetch failed - please try again: ${errorMessage}`.trim()
43 |           }]
44 |         };
45 |       }
46 |     }
47 |   );
48 | }
```

--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------

```json
 1 | {
 2 |   "name": "@cmann50/mcp-chrome-google-search",
 3 |   "version": "1.0.6",
 4 |   "type": "module",
 5 |   "bin": {
 6 |     "mcp-chrome-google-search": "./dist/index.js"
 7 |   },
 8 |   "files": [
 9 |     "dist"
10 |   ],
11 |   "main": "dist/index.js",
12 |   "scripts": {
13 |     "build": "tsc && chmod +x dist/*.js",
14 |     "prepare": "npm run build",
15 |     "start": "node dist/index.js",
16 |     "test": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.mjs",
17 |     "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.mjs --watch",
18 |     "test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.mjs --coverage"
19 |   },
20 |   "dependencies": {
21 |     "@modelcontextprotocol/sdk": "^1.0.0",
22 |     "@types/cheerio": "^0.22.35",
23 |     "cheerio": "^1.0.0",
24 |     "zod": "^3.22.0"
25 |   },
26 |   "devDependencies": {
27 |     "@types/jest": "^29.5.14",
28 |     "@types/node": "^20.0.0",
29 |     "jest": "^29.7.0",
30 |     "ts-jest": "^29.2.5",
31 |     "typescript": "^5.0.0"
32 |   },
33 |   "types": "./dist/index.d.ts",
34 |   "description": "MCP tool for Google search and webpage content extraction using Chrome browser. Works with Claude to enable Google search and content fetching capabilities.",
35 |   "repository": {
36 |     "type": "git",
37 |     "url": "git+https://github.com/cmann50/mcp-chrome-google-search.git"
38 |   },
39 |   "keywords": [
40 |     "mcp",
41 |     "model-context-protocol",
42 |     "claude-desktop-tool",
43 |     "google-search",
44 |     "chrome",
45 |     "web-search",
46 |     "macos",
47 |     "browser-automation"
48 |   ],
49 |   "author": "Chris Mann",
50 |   "license": "MIT",
51 |   "bugs": {
52 |     "url": "https://github.com/cmann50/mcp-chrome-google-search/issues"
53 |   },
54 |   "homepage": "https://github.com/cmann50/mcp-chrome-google-search#readme"
55 | }
56 | 
```

--------------------------------------------------------------------------------
/src/tools/search.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { z } from "zod";
 2 | import { performGoogleSearch } from '../toolsImpl/searchTool/index.js';
 3 | import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
 4 | 
 5 | export function registerSearchTool(server: McpServer) {
 6 |   server.tool(
 7 |     "web-search",
 8 |     "Search webpages and get a specific page of results (each page has ~10 results). Optionally filter by site and timeframe.",
 9 |     {
10 |       query_text: z.string().min(1).describe("Plain text to search for (no Google operators plain text only - use other parameters for site/date filtering)"),
11 |       site: z.string().optional().describe("Limit search to specific domain (e.g. 'github.com' or 'docs.python.org')"),
12 |       timeframe: z.enum(['h', 'd', 'w', 'm', 'y']).optional().describe("Time range filter (h=hour, d=day, w=week, m=month, y=year)"),
13 |       pageNumber: z.number().min(1).max(5).optional().default(1).describe(
14 |         "Which page of results to fetch (1-5). Each page contains ~10 results"
15 |       )
16 |     },
17 |     async ({ query_text, site, timeframe, pageNumber }) => {
18 |       console.error(`Executing Google search for: ${query_text} (page ${pageNumber})`);
19 |       try {
20 |         const searchParams = { query_text, site, timeframe };
21 |         const results = await performGoogleSearch(searchParams, pageNumber);
22 | 
23 |         return {
24 |           content: [{
25 |             type: "text" as const,
26 |             text: results
27 |           }]
28 |         };
29 |       } catch (error) {
30 |         return {
31 |           content: [{
32 |             type: "text" as const,
33 |             text: `Search failed - please try again: ${error instanceof Error ? error.message : String(error)}`
34 |           }],
35 |           isError: true
36 |         };
37 |       }
38 |     }
39 |   );
40 | }
41 | 
```

--------------------------------------------------------------------------------
/test/unit/web-fetch.test.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { jest } from '@jest/globals';
 2 | import fs from 'fs';
 3 | import path from 'path';
 4 | import { registerFetchTool } from '../../src/tools/fetch';
 5 | import { getWebContent } from '../../src/toolsImpl/webFetchTool';
 6 | import { generateAppleScript } from '../../src/toolsImpl/webFetchTool/scriptGenerator';
 7 | import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
 8 | 
 9 | // Define the type for the tool callback
10 | type WebFetchCallback = (params: { url: string; includeLinks?: boolean }) => Promise<{
11 |   content: Array<{ type: string; text: string }>;
12 | }>;
13 | 
14 | // Mock the script generator
15 | jest.mock('../../src/toolsImpl/webFetchTool/scriptGenerator');
16 | 
17 | // Mock utils/osascript
18 | jest.mock('../../src/utils/osascript', () => ({
19 |   runOsascript: jest.fn().mockImplementation(async () => {
20 |     // Read the fixture file
21 |     const fixturePath = path.join(__dirname, '../data/wikipedia.home.html');
22 |     return fs.readFileSync(fixturePath, 'utf-8');
23 |   })
24 | }));
25 | 
26 | describe('Web Fetch Tool', () => {
27 |   const mockServer = {
28 |     tool: jest.fn()
29 |   };
30 | 
31 |   beforeEach(() => {
32 |     jest.clearAllMocks();
33 |   });
34 | 
35 |   it('should fetch and process web content', async () => {
36 |     // Register the tool
37 |     registerFetchTool(mockServer as unknown as McpServer);
38 | 
39 |     // Get the callback function that was passed to mockServer.tool
40 |     const toolCallback = mockServer.tool.mock.calls[0][3] as WebFetchCallback;
41 |     
42 |     // Call the callback with test parameters
43 |     const result = await toolCallback({ 
44 |       url: 'https://wikipedia.org', 
45 |       includeLinks: true 
46 |     });
47 | 
48 |     // Print the returned text for now
49 |     console.log('Returned content:', result.content[0].text);
50 | 
51 |     // Basic assertions
52 |     expect(result).toBeDefined();
53 |     expect(result.content).toBeInstanceOf(Array);
54 |     expect(result.content[0].type).toBe('text');
55 |     expect(result.content[0].text).toBeTruthy();
56 |   });
57 | 
58 |   // Add more test cases as needed
59 | });
60 | 
```

--------------------------------------------------------------------------------
/test/integration/web-fetch.test.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import {getWebContent} from '../../src/toolsImpl/webFetchTool';
 2 | 
 3 | describe('web-fetch Tool', () => {
 4 |     it('should fetch and parse content from a URL', async () => {
 5 |         const url = 'https://apple.com';
 6 | 
 7 |         try {
 8 |             console.log('Test: Calling getWebContent with URL:', url);
 9 |             const result = await getWebContent(url);
10 |             console.log('Test: Received result type:', typeof result);
11 |             console.log('Test: Result length:', result?.length);
12 |             console.log('Test: Raw result:', result);
13 | 
14 |             // Check that we got content
15 |             expect(result).toBeTruthy();
16 |             expect(result.length).toBeGreaterThan(0);
17 | 
18 |             // Basic content validation - apple.com should contain Apple-related content
19 |             expect(result.toLowerCase()).toMatch(/apple|iphone|mac|ipad/);
20 | 
21 |             // Log the results for inspection
22 |             console.log('Web Content Results:');
23 |             console.log('-----------------');
24 |             console.log(result);
25 |             console.log('-----------------');
26 | 
27 |         } catch (error: unknown) {
28 |             const errorMessage = error instanceof Error ? error.message : String(error);
29 |             throw new Error('Should not throw an error: ' + errorMessage);
30 |         }
31 |     }, 30000);
32 | 
33 |     it('should include links when requested', async () => {
34 |         const url = 'https://apple.com';
35 | 
36 |         const result = await getWebContent(url, {includeLinks: true});
37 | 
38 |         // Check for links section and content
39 |         expect(result).toBeTruthy();
40 |         expect(result.length).toBeGreaterThan(0);
41 | 
42 |         // If we have links, they should be properly formatted
43 |         if (result.includes('=== Links ===')) {
44 |             expect(result).toMatch(/\([^)]+\)/);
45 |         }
46 | 
47 |         console.log('Content with Links:');
48 |         console.log('-----------------');
49 |         console.log(result);
50 |         console.log('-----------------');
51 |     }, 30000);
52 | 
53 | 
54 | });
```

--------------------------------------------------------------------------------
/src/toolsImpl/webFetchTool/htmlParser.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import * as cheerio from 'cheerio';
 2 | import type { ParsedContent, Link } from './types.js';
 3 | 
 4 | export function parseHtml(htmlContent: string): ParsedContent {
 5 |   const $ = cheerio.load(htmlContent);
 6 |   
 7 |   // Only remove script and style elements
 8 |   $('script, style').remove();
 9 |   
10 |   // Get meaningful content from the body
11 |   const mainContent: string[] = [];
12 |   
13 |   // Process main content areas
14 |   $('body').find('*').each((_, elem) => {
15 |     const $elem = $(elem);
16 |     
17 |     // Skip hidden elements
18 |     if ($elem.css('display') === 'none' || $elem.css('visibility') === 'hidden') {
19 |       return;
20 |     }
21 |     
22 |     // Get direct text nodes only (not nested text)
23 |     const directText = $elem.clone().children().remove().end().text().trim();
24 |     if (directText && directText.length > 0) {
25 |       mainContent.push(directText);
26 |     }
27 |   });
28 | 
29 |   // Extract links
30 |   const links: Link[] = [];
31 |   const seenUrls = new Set<string>();
32 |   const seenTexts = new Set<string>();
33 |   
34 |   $('a[href]').each((_, elem) => {
35 |     const $elem = $(elem);
36 |     const url = $elem.attr('href')?.trim();
37 |     const text = $elem.text().trim();
38 |     
39 |     if (!url || !text || seenUrls.has(url) || seenTexts.has(text)) return;
40 |     
41 |     // Skip javascript: and other non-http links
42 |     if (!url.startsWith('javascript:') && 
43 |         !url.startsWith('tel:') &&
44 |         !url.startsWith('mailto:') &&
45 |         text.length > 2) {
46 |       
47 |       // Normalize URLs
48 |       let finalUrl = url;
49 |       if (url.startsWith('//')) {
50 |         finalUrl = 'https:' + url;
51 |       } else if (url.startsWith('/')) {
52 |         // Handle relative URLs later when we have base URL
53 |         finalUrl = url;
54 |       }
55 | 
56 |       links.push({ text, url: finalUrl });
57 |       seenUrls.add(finalUrl);
58 |       seenTexts.add(text);
59 |     }
60 |   });
61 | 
62 |   // Clean and format the content
63 |   const text = mainContent
64 |     .filter(section => section.length > 0)
65 |     .map(section => section
66 |       .replace(/\\s+/g, ' ')  // Normalize whitespace
67 |       .trim())
68 |     .join('\\n')
69 |     .replace(/\\n{3,}/g, '\\n\\n')  // Max 2 newlines in a row
70 |     .trim();
71 | 
72 |   return {
73 |     text: text || 'No content found on the page.',
74 |     links: links.slice(0, 50)  // Include more links
75 |   };
76 | }
```

--------------------------------------------------------------------------------
/test/unit/web-search-url.test.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { buildGoogleSearchUrl } from '../../src/utils/url';
 2 | import type { SearchParams } from '../../src/types/search';
 3 | 
 4 | describe('web-search URL Generation', () => {
 5 |   it('generates basic search URL', () => {
 6 |     const params: SearchParams = {
 7 |       query_text: 'plain search text'
 8 |     };
 9 |     const url = buildGoogleSearchUrl(params);
10 |     expect(url).toBe('https://www.google.com/search?q=plain%20search%20text&hl=en&start=0');
11 |   });
12 | 
13 |   it('generates URL with site filter', () => {
14 |     const params: SearchParams = {
15 |       query_text: 'search text',
16 |       site: 'example.com'
17 |     };
18 |     const url = buildGoogleSearchUrl(params);
19 |     expect(url).toBe('https://www.google.com/search?q=site%3Aexample.com%20search%20text&hl=en&start=0');
20 |   });
21 | 
22 |   it('generates URLs with time filters', () => {
23 |     const periods: Array<'h' | 'd' | 'w' | 'm' | 'y'> = ['h', 'd', 'w', 'm', 'y'];
24 |     
25 |     periods.forEach(period => {
26 |       const params: SearchParams = {
27 |         query_text: 'news',
28 |         timeframe: period
29 |       };
30 |       const url = buildGoogleSearchUrl(params);
31 |       expect(url).toBe(`https://www.google.com/search?q=news&hl=en&start=0&tbs=qdr:${period}`);
32 |     });
33 |   });
34 | 
35 |   it('generates URLs for different pages', () => {
36 |     const params: SearchParams = {
37 |       query_text: 'test search'
38 |     };
39 |     
40 |     // Test zero-based page numbers (0 = first page, 1 = second page, etc)
41 |     const testCases = [
42 |       { pageNum: 0, expected: 'https://www.google.com/search?q=test%20search&hl=en&start=0' },
43 |       { pageNum: 1, expected: 'https://www.google.com/search?q=test%20search&hl=en&start=10' },
44 |       { pageNum: 2, expected: 'https://www.google.com/search?q=test%20search&hl=en&start=20' }
45 |     ];
46 |     
47 |     testCases.forEach(({ pageNum, expected }) => {
48 |       const url = buildGoogleSearchUrl(params, pageNum);
49 |       expect(url).toBe(expected);
50 |     });
51 |   });
52 | 
53 |   it('combines site filter with time filter', () => {
54 |     const params: SearchParams = {
55 |       query_text: 'release notes',
56 |       site: 'github.com',
57 |       timeframe: 'm'
58 |     };
59 |     const url = buildGoogleSearchUrl(params);
60 |     expect(url).toBe('https://www.google.com/search?q=site%3Agithub.com%20release%20notes&hl=en&start=0&tbs=qdr:m');
61 |   });
62 | });
```

--------------------------------------------------------------------------------
/src/toolsImpl/searchTool/index.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { runOsascript } from '../../utils/osascript.js';
 2 | import { buildGoogleSearchUrl } from '../../utils/url.js';
 3 | import type { SearchParams, SearchResult } from '../../types/search.js';
 4 | import * as cheerio from 'cheerio';
 5 | 
 6 | function parseHtml(html: string): SearchResult[] {
 7 |   const $ = cheerio.load(html);
 8 |   const results: SearchResult[] = [];
 9 |   
10 |   // Find all main result containers
11 |   $('.g').each((_, resultDiv) => {
12 |     // Look for the first link in this container
13 |     const link = $(resultDiv).find('a').first();
14 |     const href = link.attr('href');
15 |     
16 |     // Find the description - it's typically the last text block in the container
17 |     const description = $(resultDiv).find('div[style*="-webkit-line-clamp"], div.VwiC3b, .aCOpRe').text();
18 |     
19 |     if (href?.startsWith('http') && 
20 |         !href.includes('google.com') && 
21 |         description.trim().length > 0) {
22 |       results.push({
23 |         url: href,
24 |         description: description.trim()
25 |       });
26 |     }
27 |   });
28 |   
29 |   return results;
30 | }
31 | 
32 | async function fetchSearchPage(searchParams: SearchParams, pageNumber: number): Promise<SearchResult[]> {
33 |   // Convert 1-based page number to 0-based for URL
34 |   const pageIndex = pageNumber - 1;
35 |   const searchUrl = buildGoogleSearchUrl(searchParams, pageIndex);
36 |   
37 |   const script = `
38 |     tell application "Google Chrome"
39 |       make new window with properties {bounds:{50, 50, 425, 717}}
40 |       set newWindow to window 1
41 |       
42 |       tell newWindow
43 |         set URL of active tab to "${searchUrl}"
44 |       end tell
45 |       
46 |       -- Return focus to Claude
47 |       tell application "Claude" to activate
48 | 
49 |       -- Wait for page to load
50 |       tell active tab of newWindow
51 |         repeat until (loading is false)
52 |           delay 0.1
53 |         end repeat
54 |       end tell
55 |       
56 |       -- Get page content
57 |       tell active tab of newWindow
58 |         set pageContent to (execute javascript "document.documentElement.outerHTML;")
59 |       end tell
60 |        
61 |       -- Close the window
62 |       close newWindow
63 |     end tell
64 |     
65 |     return pageContent
66 |   `;
67 | 
68 |   const html = await runOsascript(script);
69 |   return parseHtml(html);
70 | }
71 | 
72 | export async function performGoogleSearch(searchParams: SearchParams, pages: number = 1): Promise<string> {
73 |   try {
74 |     const allResults: SearchResult[] = [];
75 |     
76 |     // Fetch results from multiple pages
77 |     for (let page = 1; page <= pages; page++) {
78 |       const pageResults = await fetchSearchPage(searchParams, page);
79 |       allResults.push(...pageResults);
80 |       
81 |       // Add a small delay between page fetches
82 |       if (page < pages) {
83 |         await new Promise(resolve => setTimeout(resolve, 1000));
84 |       }
85 |     }
86 |     
87 |     return allResults.map(r => `${r.url}\n${r.description}`).join('\n\n');
88 |   } catch (error: unknown) {
89 |     const errorMessage = error instanceof Error ? error.message : String(error);
90 |     throw new Error(`Failed to perform Google search: ${errorMessage}`);
91 |   }
92 | }
```

--------------------------------------------------------------------------------
/test/integration/web-search-tool.test.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import { performGoogleSearch } from '../../src/toolsImpl/searchTool';
 2 | import type { SearchParams } from '../../src/types/search';
 3 | 
 4 | describe('web-search Tool', () => {
 5 |   it('should perform a basic search and return results', async () => {
 6 |     const searchParams: SearchParams = {
 7 |       query_text: 'integration test search'
 8 |     };
 9 |     
10 |     try {
11 |       const result = await performGoogleSearch(searchParams, 1);
12 |       expect(result.length).toBeGreaterThan(0);
13 |       
14 |       const blocks = result.split('\n\n');
15 |       expect(blocks.length).toBeGreaterThan(1);
16 |       
17 |       blocks.forEach((block: string) => {
18 |         const [url, description] = block.split('\n');
19 |         expect(url).toMatch(/^https?:\/\/.+/);
20 |         expect(description?.length).toBeGreaterThan(0);
21 |       });
22 |       
23 |     } catch (error: unknown) {
24 |       const errorMessage = error instanceof Error ? error.message : String(error);
25 |       throw new Error('Search should succeed: ' + errorMessage);
26 |     }
27 |   }, 30000);
28 | 
29 |   it('should handle site filtering', async () => {
30 |     const searchParams: SearchParams = {
31 |       query_text: 'documentation',
32 |       site: 'nodejs.org'
33 |     };
34 |     
35 |     try {
36 |       const result = await performGoogleSearch(searchParams, 1);
37 |       expect(result.length).toBeGreaterThan(0);
38 |       
39 |       const blocks = result.split('\n\n');
40 |       blocks.forEach((block: string) => {
41 |         const [url] = block.split('\n');
42 |         expect(url).toContain('nodejs.org');
43 |       });
44 |       
45 |     } catch (error: unknown) {
46 |       const errorMessage = error instanceof Error ? error.message : String(error);
47 |       throw new Error('Search with site filter should succeed: ' + errorMessage);
48 |     }
49 |   }, 30000);
50 | 
51 |   it('should handle time filtering', async () => {
52 |     const searchParams: SearchParams = {
53 |       query_text: 'news',
54 |       timeframe: 'd'
55 |     };
56 |     
57 |     try {
58 |       const result = await performGoogleSearch(searchParams, 1);
59 |       expect(result.length).toBeGreaterThan(0);
60 |       
61 |       const blocks = result.split('\n\n');
62 |       expect(blocks.length).toBeGreaterThan(1);
63 |       
64 |     } catch (error: unknown) {
65 |       const errorMessage = error instanceof Error ? error.message : String(error);
66 |       throw new Error('Search with time filter should succeed: ' + errorMessage);
67 |     }
68 |   }, 30000);
69 | 
70 |   it('should successfully fetch multiple pages of results', async () => {
71 |     const searchParams: SearchParams = {
72 |       query_text: 'latest news'
73 |     };
74 |     
75 |     try {
76 |       // Test fetching 3 different pages
77 |       for (let page = 1; page <= 3; page++) {
78 |         const results = await performGoogleSearch(searchParams, page);
79 |         
80 |         // Basic validation that we got results
81 |         expect(results.length).toBeGreaterThan(0);
82 |         expect(results.split('\n\n').length).toBeGreaterThan(1);
83 |       }
84 |     } catch (error: unknown) {
85 |       const errorMessage = error instanceof Error ? error.message : String(error);
86 |       throw new Error('Failed to fetch multiple pages: ' + errorMessage);
87 |     }
88 |   }, 30000);
89 | });
```

--------------------------------------------------------------------------------
/test/data/wikipedia.home.html:
--------------------------------------------------------------------------------

```html
  1 | <!DOCTYPE html>
  2 | <html lang="en" class="no-js">
  3 | <head>
  4 | <meta charset="utf-8">
  5 | <title>Wikipedia</title>
  6 | <meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
  7 | <script>
  8 | document.documentElement.className = document.documentElement.className.replace( /(^|\s)no-js(\s|$)/, "$1js-enabled$2" );
  9 | </script>
 10 | <meta name="viewport" content="initial-scale=1,user-scalable=yes">
 11 | <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png">
 12 | <link rel="shortcut icon" href="/static/favicon/wikipedia.ico">
 13 | <link rel="license" href="//creativecommons.org/licenses/by-sa/4.0/">
 14 | <style>
 15 | .sprite{background-image:linear-gradient(transparent,transparent),url(portal/wikipedia.org/assets/img/sprite-de847d1a.svg);background-repeat:no-repeat;display:inline-block;vertical-align:middle}.svg-Commons-logo_sister{background-position:0 0;width:47px;height:47px}.svg-MediaWiki-logo_sister{background-position:0 -47px;width:42px;height:42px}.svg-Meta-Wiki-logo_sister{background-position:0 -89px;width:37px;height:37px}.svg-Wikibooks-logo_sister{background-position:0 -126px;width:37px;height:37px}.svg-Wikidata-logo_sister{background-position:0 -163px;width:49px;height:49px}.svg-Wikifunctions-logo_sister{background-position:0 -212px;width:50px;height:50px}.svg-Wikimedia-logo_black{background-position:0 -262px;width:42px;height:42px}.svg-Wikipedia_wordmark{background-position:0 -304px;width:176px;height:32px}.svg-Wikiquote-logo_sister{background-position:0 -336px;width:42px;height:42px}.svg-Wikisource-logo_sister{background-position:0 -378px;width:39px;height:39px}.svg-Wikispecies-logo_sister{background-position:0 -417px;width:42px;height:42px}.svg-Wikiversity-logo_sister{background-position:0 -459px;width:43px;height:37px}.svg-Wikivoyage-logo_sister{background-position:0 -496px;width:36px;height:36px}.svg-Wiktionary-logo_sister{background-position:0 -532px;width:37px;height:37px}.svg-arrow-down{background-position:0 -569px;width:12px;height:8px}.svg-arrow-down-blue{background-position:0 -577px;width:14px;height:14px}.svg-badge_google_play_store{background-position:0 -591px;width:124px;height:38px}.svg-badge_ios_app_store{background-position:0 -629px;width:110px;height:38px}.svg-language-icon{background-position:0 -667px;width:22px;height:22px}.svg-noimage{background-position:0 -689px;width:58px;height:58px}.svg-search-icon{background-position:0 -747px;width:22px;height:22px}.svg-wikipedia_app_tile{background-position:0 -769px;width:42px;height:42px}
 16 | </style>
 17 | <style>
 18 | html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size:62.5%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:32px;font-size:3.2rem;margin:1.2rem 0}mark{background:#fef6e7;color:#101418}small{font-size:13px;font-size:1.3rem}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1.6rem 4rem}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:14px;font-size:1.4rem}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=search]:focus{outline-offset:-2px}fieldset{border:1px solid #a2a9b1;margin:0 .2rem;padding:.6rem 1rem 1.2rem}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.hidden,[hidden]{display:none!important}.screen-reader-text{display:block;position:absolute!important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}body{background-color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Inter,Helvetica,Arial,sans-serif;font-size:14px;font-size:1.4rem;line-height:1.5;margin:.4rem 0 1.6rem}main{padding:0 1.28rem}a{-ms-touch-action:manipulation;touch-action:manipulation}a,a:active,a:focus{unicode-bidi:embed;outline:0;color:#36c;text-decoration:none}a:focus{outline:1px solid #36c}a:hover{text-decoration:underline}img{vertical-align:middle}hr,img{border:0}hr{clear:both;height:0;border-bottom:1px solid #c8ccd1;margin:.26rem 0}.pure-button{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#f8f9fa;color:#202122;position:relative;min-height:19.2px;min-height:1.92rem;min-width:16px;min-width:1.6rem;margin:.16rem 0;border:1px solid #a2a9b1;-moz-border-radius:2px;border-radius:2px;padding:.8rem 1.6rem;font-family:inherit;font-size:inherit;font-weight:700;text-decoration:none;vertical-align:top;-webkit-transition:background .1s ease,color .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;transition:background .1s ease,color .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;-o-transition:background .1s ease,color .1s ease,border-color .1s ease,box-shadow .1s ease;-moz-transition:background .1s ease,color .1s ease,border-color .1s ease,box-shadow .1s ease,-moz-box-shadow .1s ease;transition:background .1s ease,color .1s ease,border-color .1s ease,box-shadow .1s ease;transition:background .1s ease,color .1s ease,border-color .1s ease,box-shadow .1s ease,-webkit-box-shadow .1s ease,-moz-box-shadow .1s ease}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-hover,.pure-button:hover{background-color:#fff;border-color:#a2a9b1;color:#404244}.pure-button-active,.pure-button:active{background-color:#eaecf0;border-color:#72777d;color:#101418}.pure-button:focus{outline:1px solid transparent;border-color:#36c;-webkit-box-shadow:inset 0 0 0 1px #36c;-moz-box-shadow:inset 0 0 0 1px #36c;box-shadow:inset 0 0 0 1px #36c}.pure-button-primary-progressive{background-color:#36c;border-color:#6485d1;color:#fff}.pure-button-primary-progressive:hover{background:#3056a9;border-color:#3056a9}.pure-button-primary-progressive:active{background-color:#233566;border-color:#233566;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;color:#fff}.pure-button-primary-progressive:focus{-webkit-box-shadow:inset 0 0 0 1px #36c,inset 0 0 0 2px #fff;-moz-box-shadow:inset 0 0 0 1px #36c,inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 1px #36c,inset 0 0 0 2px #fff;border-color:#36c}.pure-form input[type=search]{background-color:#fff;display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #a2a9b1;-moz-border-radius:2px;border-radius:2px;padding:.8rem;-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;vertical-align:middle}.pure-form input:focus:invalid{color:#bf3c2c;border-color:#f54739}.pure-form fieldset{margin:0;padding:.56rem 0 1.2rem;border:0}@media only screen and (max-width:480px){.pure-form input[type=search]{display:block}}.central-textlogo-wrapper{display:inline-block;vertical-align:bottom}.central-textlogo{position:relative;margin:4rem auto .5rem;width:270px;font-family:Linux Libertine,Hoefler Text,Georgia,Times New Roman,Times,serif;font-size:30px;font-size:3rem;font-weight:400;line-height:33px;line-height:3.3rem;text-align:center;-moz-font-feature-settings:"ss05=1";-moz-font-feature-settings:"ss05";-webkit-font-feature-settings:"ss05";-ms-font-feature-settings:"ss05";font-feature-settings:"ss05"}.localized-slogan{display:block;font-family:Linux Libertine,Georgia,Times,"Source Serif Pro",serif;font-size:15px;font-size:1.5rem;font-weight:400}.central-textlogo__image{color:transparent;display:inline-block;overflow:hidden;text-indent:-10000px}.central-featured-logo{position:absolute;top:158px;left:35px}@media (max-width:480px){.central-textlogo{position:relative;height:70px;width:auto;margin:2rem 0 0;text-align:center;line-height:25px;line-height:2.5rem;text-indent:-10px;text-indent:-1rem;font-size:1em}.central-textlogo-wrapper{position:relative;top:12px;text-indent:2px;text-indent:.2rem}.svg-Wikipedia_wordmark{width:150px;height:25px;background-position:0 -260px;-webkit-background-size:100% 100%;-moz-background-size:100%;background-size:100%}.localized-slogan{font-size:14px;font-size:1.4rem}.central-featured-logo{position:relative;display:inline-block;width:57px;height:auto;left:0;top:0}}@media (max-width:240px){.central-textlogo__image{height:auto}}.central-featured{position:relative;height:325px;height:32.5rem;width:546px;width:54.6rem;max-width:100%;margin:0 auto;text-align:center;vertical-align:middle}.central-featured-lang{position:absolute;width:156px;width:15.6rem}.central-featured-lang .link-box{display:block;padding:0;text-decoration:none;white-space:normal}.central-featured-lang .link-box:hover strong{text-decoration:underline}.central-featured-lang :hover{background-color:#eaecf0}.central-featured-lang strong{display:block;font-size:16px;font-size:1.6rem}.central-featured-lang small{color:#54595d;display:inline-block;font-size:13px;font-size:1.3rem;line-height:1.6}.central-featured-lang em{font-style:italic}.central-featured-lang .emNonItalicLang{font-style:normal}.lang1{top:0;right:60%}.lang2{top:0;left:60%}.lang3{top:20%;right:70%}.lang4{top:20%;left:70%}.lang5{top:40%;right:72%}.lang6{top:40%;left:72%}.lang7{top:60%;right:70%}.lang8{top:60%;left:70%}.lang9{top:80%;right:60%}.lang10{top:80%;left:60%}@media (max-width:480px){.central-featured{width:auto;height:auto;margin-top:8rem;font-size:13px;font-size:1.3rem;text-align:left}.central-featured:after{content:" ";display:block;visibility:hidden;clear:both;height:0;font-size:0}.central-featured-lang{display:block;float:left;position:relative;top:auto;left:auto;right:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:64px;height:6.4rem;width:33%;margin:0 0 16px;padding:0 1.6rem;font-size:14px;font-size:1.4rem;text-align:center}.central-featured-lang strong{font-size:14px;font-size:1.4rem;margin-bottom:4px}.central-featured-lang small{line-height:1.4}}@media (max-width:375px){.central-featured-lang{font-size:13px;font-size:1.3rem}}@media (max-width:240px){.central-featured-lang{width:100%}}.search-container{float:none;max-width:95%;width:540px;margin:.4rem auto 1.95rem;text-align:center;vertical-align:middle}.search-container fieldset{word-spacing:-4px}.search-container button{min-height:44px;min-height:4.4rem;margin:0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;padding:.8rem 1.6rem;font-size:16px;font-size:1.6rem;z-index:2}.search-container button .svg-search-icon{text-indent:-9999px}.search-container input[type=search]::-webkit-search-results-button,.search-container input[type=search]::-webkit-search-results-decoration{-webkit-appearance:none}.search-container input::-webkit-calendar-picker-indicator{display:none}.search-container .sprite.svg-arrow-down{position:absolute;top:8px;top:.8rem;right:6px;right:.6rem}#searchInput{-webkit-appearance:none;width:100%;height:44px;height:4.4rem;border-width:1px 0 1px 1px;-moz-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px;padding:.8rem 9.6rem .8rem 1.2rem;font-size:16px;font-size:1.6rem;line-height:1.6;-webkit-transition:background .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;transition:background .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;-o-transition:background .1s ease,border-color .1s ease,box-shadow .1s ease;-moz-transition:background .1s ease,border-color .1s ease,box-shadow .1s ease,-moz-box-shadow .1s ease;transition:background .1s ease,border-color .1s ease,box-shadow .1s ease;transition:background .1s ease,border-color .1s ease,box-shadow .1s ease,-webkit-box-shadow .1s ease,-moz-box-shadow .1s ease}#searchInput:hover{border-color:#72777d}#searchInput:focus{border-color:#6485d1;-webkit-box-shadow:inset 0 0 0 1px #36c;-moz-box-shadow:inset 0 0 0 1px #36c;box-shadow:inset 0 0 0 1px #36c;outline:1px solid transparent}.search-container .search-input{display:inline-block;position:relative;width:73%;vertical-align:top}@media only screen and (max-width:480px){.search-container .pure-form fieldset{margin-left:1rem;margin-right:6.6rem}.search-container .search-input{width:100%;margin-right:-6.6rem}.search-container .pure-form button{float:right;right:-56px;right:-5.6rem}}.suggestions-dropdown{background-color:#fff;display:inline-block;position:absolute;left:0;z-index:2;margin:0;padding:0;border:1px solid #a2a9b1;border-top:0;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.2);-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.2);list-style-type:none;word-spacing:normal}.suggestion-link,.suggestions-dropdown{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;text-align:left}.suggestion-link{display:block;position:relative;min-height:70px;min-height:7rem;padding:1rem 1rem 1rem 8.5rem;border-bottom:1px solid #eaecf0;color:inherit;text-decoration:none;text-align:initial;white-space:normal}.suggestion-link.active{background-color:#f1f4fd}a.suggestion-link:hover{text-decoration:none}a.suggestion-link:active,a.suggestion-link:focus{outline:0;white-space:normal}.suggestion-thumbnail{background-color:#eaecf0;background-image:url(portal/wikipedia.org/assets/img/noimage.png);background-image:-webkit-linear-gradient(transparent,transparent),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 56'%3E%3Cpath fill='%23eee' d='M0 0h56v56H0z'/%3E%3Cpath fill='%23999' d='M36.4 13.5H17.8v24.9c0 1.4.9 2.3 2.3 2.3h18.7v-25c.1-1.4-1-2.2-2.4-2.2zM30.2 17h5.1v6.4h-5.1V17zm-8.8 0h6v1.8h-6V17zm0 4.6h6v1.8h-6v-1.8zm0 15.5v-1.8h13.8v1.8H21.4zm13.8-4.5H21.4v-1.8h13.8v1.8zm0-4.7H21.4v-1.8h13.8v1.8z'/%3E%3C/svg%3E");background-image:-webkit-linear-gradient(transparent,transparent),url(portal/wikipedia.org/assets/img/noimage.svg) !ie;background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),to(transparent)),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 56'%3E%3Cpath fill='%23eee' d='M0 0h56v56H0z'/%3E%3Cpath fill='%23999' d='M36.4 13.5H17.8v24.9c0 1.4.9 2.3 2.3 2.3h18.7v-25c.1-1.4-1-2.2-2.4-2.2zM30.2 17h5.1v6.4h-5.1V17zm-8.8 0h6v1.8h-6V17zm0 4.6h6v1.8h-6v-1.8zm0 15.5v-1.8h13.8v1.8H21.4zm13.8-4.5H21.4v-1.8h13.8v1.8zm0-4.7H21.4v-1.8h13.8v1.8z'/%3E%3C/svg%3E");background-image:-moz- oldlinear-gradient(transparent,transparent),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 56'%3E%3Cpath fill='%23eee' d='M0 0h56v56H0z'/%3E%3Cpath fill='%23999' d='M36.4 13.5H17.8v24.9c0 1.4.9 2.3 2.3 2.3h18.7v-25c.1-1.4-1-2.2-2.4-2.2zM30.2 17h5.1v6.4h-5.1V17zm-8.8 0h6v1.8h-6V17zm0 4.6h6v1.8h-6v-1.8zm0 15.5v-1.8h13.8v1.8H21.4zm13.8-4.5H21.4v-1.8h13.8v1.8zm0-4.7H21.4v-1.8h13.8v1.8z'/%3E%3C/svg%3E");background-image:-o-linear-gradient(transparent,transparent),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 56'%3E%3Cpath fill='%23eee' d='M0 0h56v56H0z'/%3E%3Cpath fill='%23999' d='M36.4 13.5H17.8v24.9c0 1.4.9 2.3 2.3 2.3h18.7v-25c.1-1.4-1-2.2-2.4-2.2zM30.2 17h5.1v6.4h-5.1V17zm-8.8 0h6v1.8h-6V17zm0 4.6h6v1.8h-6v-1.8zm0 15.5v-1.8h13.8v1.8H21.4zm13.8-4.5H21.4v-1.8h13.8v1.8zm0-4.7H21.4v-1.8h13.8v1.8z'/%3E%3C/svg%3E");background-image:linear-gradient(transparent,transparent),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 56'%3E%3Cpath fill='%23eee' d='M0 0h56v56H0z'/%3E%3Cpath fill='%23999' d='M36.4 13.5H17.8v24.9c0 1.4.9 2.3 2.3 2.3h18.7v-25c.1-1.4-1-2.2-2.4-2.2zM30.2 17h5.1v6.4h-5.1V17zm-8.8 0h6v1.8h-6V17zm0 4.6h6v1.8h-6v-1.8zm0 15.5v-1.8h13.8v1.8H21.4zm13.8-4.5H21.4v-1.8h13.8v1.8zm0-4.7H21.4v-1.8h13.8v1.8z'/%3E%3C/svg%3E");background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),to(transparent)),url(portal/wikipedia.org/assets/img/noimage.svg) !ie;background-image:-moz- oldlinear-gradient(transparent,transparent),url(portal/wikipedia.org/assets/img/noimage.svg) !ie;background-image:-o-linear-gradient(transparent,transparent),url(portal/wikipedia.org/assets/img/noimage.svg) !ie;background-image:linear-gradient(transparent,transparent),url(portal/wikipedia.org/assets/img/noimage.svg) !ie;background-image:-o-linear-gradient(transparent,transparent),url(portal/wikipedia.org/assets/img/noimage.png);background-position:50%;background-repeat:no-repeat;-webkit-background-size:100% auto;-moz-background-size:100% auto;background-size:100% auto;-webkit-background-size:cover;-moz-background-size:cover;background-size:cover;height:100%;width:70px;width:7rem;position:absolute;top:0;left:0}.suggestion-title{margin:0 0 .78rem;color:#54595d;font-size:16px;font-size:1.6rem;line-height:18.72px;line-height:1.872rem}.suggestion-link.active .suggestion-title{color:#36c}.suggestion-highlight{font-style:normal;text-decoration:underline}.suggestion-description{color:#72777d;margin:0;font-size:13px;font-size:1.3rem;line-height:14.299px;line-height:1.43rem}.styled-select{display:none;position:absolute;top:10px;top:1rem;bottom:12px;bottom:1.2rem;right:12px;right:1.2rem;max-width:95px;max-width:9.5rem;height:24px;height:2.4rem;-moz-border-radius:2px;border-radius:2px}.styled-select:hover{background-color:#f8f9fa}.styled-select .hide-arrow{right:32px;right:3.2rem;max-width:68px;max-width:6.8rem;height:24px;height:2.4rem;overflow:hidden;text-align:right}.styled-select select{background:transparent;display:inline;overflow:hidden;height:24px;height:2.4rem;min-width:110px;min-width:11rem;max-width:110px;max-width:11rem;width:110px;width:11rem;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:0;line-height:24px;line-height:2.4rem;-webkit-appearance:none;-moz-appearance:window;text-indent:.01px;-o-text-overflow:"";text-overflow:"";opacity:0;-moz-appearance:none;appearance:none;cursor:pointer}.styled-select.no-js{width:95px;width:9.5rem}.styled-select.no-js select{opacity:1;margin:0;padding:0 2.4rem 0 .8rem;color:#54595d}.styled-select.no-js .hide-arrow{width:68px;width:6.8rem}.search-container .styled-select.no-js .js-langpicker-label{display:none}.styled-select.js-enabled .hide-arrow{padding:0 2.4rem 0 .8rem}.styled-select.js-enabled select{background:transparent;position:absolute;top:0;left:0;height:100%;z-index:1;width:100%;border:0;margin:0;padding:0 2.4rem;color:transparent;color:hsla(0,0%,100%,0)}.styled-select.js-enabled select option{color:#54595d}.styled-select.js-enabled select:hover{background-color:transparent}.styled-select-active-helper{display:none}.styled-select.js-enabled select:focus+.styled-select-active-helper{display:block;position:absolute;top:0;left:0;z-index:0;width:100%;height:100%;outline:1px solid #36c}.search-container .js-langpicker-label{display:inline-block;margin:0;color:#54595d;font-size:13px;font-size:1.3rem;line-height:24px;line-height:2.4rem;text-transform:uppercase}.styled-select select:hover{background-color:#f8f9fa}.styled-select select::-ms-expand{display:none}.styled-select select:focus{outline:1px solid transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@-moz-document url-prefix(){.styled-select select{width:110%}}.other-projects{display:inline-block;width:65%}.other-project{float:left;position:relative;width:33%;height:90px;height:9rem}.other-project-link{display:inline-block;min-height:50px;width:90%;padding:1em;white-space:nowrap}.other-project-link:hover{background-color:#eaecf0}a.other-project-link{text-decoration:none}.other-project-icon{display:inline-block;width:50px;text-align:center}.svg-Wikinews-logo_sister{background-image:url(portal/wikipedia.org/assets/img/Wikinews-logo_sister.png);background-position:0 0;-webkit-background-size:47px 26px;-moz-background-size:47px 26px;background-size:47px 26px;width:47px;height:26px}@media (-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.svg-Wikinews-logo_sister{background-image:url(portal/wikipedia.org/assets/img/[email protected])}}.other-project-text,.other-project .sprite-project-logos{display:inline-block}.other-project-text{max-width:65%;font-size:14px;font-size:1.4rem;vertical-align:middle;white-space:normal}.other-project-tagline,.other-project-title{display:block}.other-project-tagline{color:#54595d;font-size:13px;font-size:1.3rem}@media screen and (max-width:768px){.other-projects{width:100%}.other-project{width:33%}}@media screen and (max-width:480px){.other-project{width:50%}.other-project-tagline{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}}@media screen and (max-width:320px){.other-project-text{margin-right:5px;font-size:13px;font-size:1.3rem}}.lang-list-container{background-color:#f8f9fa;overflow:hidden;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-height:0;width:80%;margin:-1.6rem auto 4.8rem;-webkit-transition:max-height .5s ease-out .16s,visibility .5s ease-in 1s;-o-transition:max-height .5s ease-out .16s,visibility .5s ease-in 1s;-moz-transition:max-height .5s ease-out .16s,visibility .5s ease-in 1s;transition:max-height .5s ease-out .16s,visibility .5s ease-in 1s}.js-enabled .lang-list-container{visibility:hidden}.lang-list-active .lang-list-container,.no-js .lang-list-container{visibility:visible;max-height:10000px;-webkit-transition:max-height 1s ease-in .2s,visibility 1000s ease-in 0ms;-o-transition:max-height 1s ease-in .2s,visibility 1000s ease-in 0ms;-moz-transition:max-height 1s ease-in .2s,visibility 1000s ease-in 0ms;transition:max-height 1s ease-in .2s,visibility 1000s ease-in 0ms}.no-js .lang-list-button{display:none}.lang-list-button-wrapper{text-align:center}.lang-list-button{background-color:#f8f9fa;display:inline;position:relative;z-index:1;margin:0 auto;padding:.6rem 1.2rem;outline:16px solid #fff;outline:1.6rem solid #fff;border:1px solid #a2a9b1;-moz-border-radius:2px;border-radius:2px;color:#36c;font-size:14px;font-size:1.4rem;font-weight:700;line-height:1;-webkit-transition:outline-width .1s ease-in .5s;-o-transition:outline-width .1s ease-in .5s;-moz-transition:outline-width .1s ease-in .5s;transition:outline-width .1s ease-in .5s}.lang-list-button:hover{background-color:#fff;border-color:#a2a9b1}.lang-list-button:focus{border-color:#36c;-webkit-box-shadow:inset 0 0 0 1px #36c;-moz-box-shadow:inset 0 0 0 1px #36c;box-shadow:inset 0 0 0 1px #36c}.lang-list-active .lang-list-button{background-color:#fff;outline:1px solid #fff;border-color:#72777d;-webkit-transition-delay:0s;-moz-transition-delay:0s;-o-transition-delay:0s;transition-delay:0s}.lang-list-button-text{padding:0 .64rem;vertical-align:middle}.lang-list-button i{display:inline-block;vertical-align:middle}.no-js .lang-list-border,.no-js .lang-list-button{display:none}.lang-list-border{background-color:#c8ccd1;display:block;position:relative;max-width:460px;width:80%;margin:-1.6rem auto 1.6rem;height:1px;-webkit-transition:max-width .2s ease-out .4s;-o-transition:max-width .2s ease-out .4s;-moz-transition:max-width .2s ease-out .4s;transition:max-width .2s ease-out .4s}.lang-list-active .lang-list-border{max-width:85%;-webkit-transition-delay:0s;-moz-transition-delay:0s;-o-transition-delay:0s;transition-delay:0s}.no-js .lang-list-content{padding:0}.lang-list-content{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;padding:1.6rem 1.6rem 0}.svg-arrow-down-blue{-webkit-transition:-webkit-transform .2s ease-out;transition:-webkit-transform .2s ease-out;-o-transition:transform .2s ease-out;-moz-transition:transform .2s ease-out,-moz-transform .2s ease-out;transition:transform .2s ease-out;transition:transform .2s ease-out,-webkit-transform .2s ease-out,-moz-transform .2s ease-out}.lang-list-active .svg-arrow-down-blue{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.langlist{width:auto;margin:1.6rem 0;text-align:left}.langlist-others{font-weight:700;text-align:center}.hlist ul{margin:0;padding:0}.hlist li,.hlist ul ul{display:inline}.hlist li:before{content:" · ";font-weight:700}.hlist li:first-child:before{content:none}.hlist li>ul:before{content:"\00a0("}.hlist li>ul:after{content:") "}.langlist>ul{-webkit-column-width:11.2rem;-moz-column-width:11.2rem;column-width:11.2rem}.langlist>ul>li{display:block;line-height:1.7;-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}.no-js .langlist>ul{text-align:center;list-style-type:circle}.no-js .langlist>ul>li{display:inline-block;padding:0 .8rem}.langlist>ul>li:before{content:none}.langlist>ul>li a{white-space:normal}@media (max-width:480px){.langlist{font-size:inherit}.langlist a{word-wrap:break-word;white-space:normal}.lang-list-container{width:auto;margin-left:.8rem;margin-right:.8rem}.bookshelf{overflow:visible}}.bookshelf{display:block;border-top:1px solid #c8ccd1;-webkit-box-shadow:0 -1px 0 #fff;-moz-box-shadow:0 -1px 0 #fff;box-shadow:0 -1px 0 #fff;text-align:center;white-space:nowrap}.bookshelf .text{background-color:#f8f9fa;position:relative;top:-11.2px;top:-1.12rem;font-weight:400;padding:0 .8rem}.bookshelf-container{display:block;overflow:visible;width:100%;height:1px;margin:2.4rem 0 1.6rem;font-size:13px;font-size:1.3rem;font-weight:700;line-height:1.5}@media (max-width:480px){.bookshelf{width:auto;left:auto}.bookshelf-container{text-align:left;width:auto}}.app-badges .footer-sidebar-content{background-color:#f8f9fa}.app-badges .footer-sidebar-text{padding-top:.8rem;padding-bottom:.8rem}.app-badges .sprite.footer-sidebar-icon{top:8px;top:.8rem}.app-badges ul{margin:0;padding:0;list-style-type:none}.app-badge{display:inline-block}.app-badge a{color:transparent}@media screen and (max-width:768px){.app-badges .footer-sidebar-content{text-align:center}.app-badges .sprite.footer-sidebar-icon{display:inline-block;position:relative;margin:0;top:-3px;left:0;vertical-align:middle;-webkit-transform:scale(.7);-moz-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}}.footer{overflow:hidden;max-width:100%;margin:0 auto;padding:4.16rem 1.28rem 0;font-size:13px;font-size:1.3rem}.footer:after,.footer:before{content:" ";display:table}.footer:after{clear:both}.footer-sidebar{width:35%;float:left;clear:left;margin-bottom:3.2rem;vertical-align:top}.footer-sidebar-content{position:relative;max-width:350px;margin:0 auto}.sprite.footer-sidebar-icon{position:absolute;top:0;left:8px;left:.8rem}.footer-sidebar-text{position:relative;margin:0;padding-left:6rem;padding-right:2rem;color:#54595d}.site-license{color:#54595d;text-align:center}.site-license small:after{content:"\2022";display:inline-block;font-size:13px;font-size:1.3rem;line-height:inherit;margin-left:.8rem;margin-right:.5rem}.site-license small:last-child:after{display:none}.footer hr{margin-top:1.28rem}@media screen and (max-width:768px){.footer{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-top:1.28rem}.footer .footer-sidebar{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-webkit-order:1;-ms-flex-order:1;order:1}.footer .other-projects{-webkit-box-ordinal-group:2;-moz-box-ordinal-group:2;-webkit-order:2;-ms-flex-order:2;order:2}.footer .app-badges{-webkit-box-ordinal-group:3;-moz-box-ordinal-group:3;-webkit-order:3;-ms-flex-order:3;order:3}.footer hr{-webkit-box-ordinal-group:4;-moz-box-ordinal-group:4;-webkit-order:4;-ms-flex-order:4;order:4}.footer .site-license{-webkit-box-ordinal-group:5;-moz-box-ordinal-group:5;-webkit-order:5;-ms-flex-order:5;order:5}.footer-sidebar{width:100%}.sprite.footer-sidebar-icon{display:block;position:relative;left:0;margin:0 auto 1.28rem}.footer-sidebar-content{max-width:none}.footer-sidebar-text{margin:0;padding:0;text-align:center}}@media screen and (max-width:480px){.footer{padding:.96rem .64rem 1.28rem}}@media (max-width:480px){.search-container{margin-top:0;height:78px;height:7.8rem;position:absolute;top:96px;top:9.6rem;left:0;right:0;max-width:100%;width:auto;padding:0;text-align:left}.search-container label{display:none}.search-form #searchInput{max-width:40%;vertical-align:middle}.search-form .formBtn{max-width:25%;vertical-align:middle}form fieldset{margin:0;border-left:0;border-right:0}hr{margin-top:.65rem}}@media (-o-min-device-pixel-ratio:2/1),(-webkit-min-device-pixel-ratio:2),(min--moz-device-pixel-ratio:2),(min-resolution:2dppx),(min-resolution:192dpi){hr{border-bottom-width:.5px}}@supports (-webkit-marquee-style:slide){hr{border-bottom-width:1px}}.js-enabled .central-featured,.js-enabled .jsl10n{opacity:0}.jsl10n-visible .central-featured,.jsl10n-visible .jsl10n{opacity:1}@media print{body{background-color:transparent}a{color:#000!important;background:none!important;padding:0!important}a:link,a:visited{color:#520;background:transparent}img{border:0}}
 19 | </style>
 20 | <link rel="preconnect" href="//upload.wikimedia.org">
 21 | <link rel="me" href="https://wikis.world/@wikipedia">
 22 | <meta property="og:url" content>
 23 | <meta property="og:title" content="Wikipedia, the free encyclopedia">
 24 | <meta property="og:type" content="website">
 25 | <meta property="og:description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
 26 | <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/2244px-Wikipedia-logo-v2.svg.png">
 27 | </head>
 28 | <body id="www-wikipedia-org">
 29 | <main>
 30 | <div class="central-textlogo">
 31 | <img class="central-featured-logo" src="portal/wikipedia.org/assets/img/Wikipedia-logo-v2.png" srcset="portal/wikipedia.org/assets/img/[email protected] 1.5x, portal/wikipedia.org/assets/img/[email protected] 2x" width="200" height="183" alt>
 32 | <h1 class="central-textlogo-wrapper">
 33 | <span class="central-textlogo__image sprite svg-Wikipedia_wordmark">
 34 | Wikipedia
 35 | </span>
 36 | <strong class="jsl10n localized-slogan" data-jsl10n="portal.slogan">The Free Encyclopedia</strong>
 37 | </h1>
 38 | </div>
 39 | <nav data-jsl10n="top-ten-nav-label" aria-label="Top languages" class="central-featured" data-el-section="primary links">
 40 | <!-- #1. en.wikipedia.org - 1,803,172,000 views/day -->
 41 | <div class="central-featured-lang lang1" lang="en" dir="ltr">
 42 | <a id="js-link-box-en" href="//en.wikipedia.org/" title="English — Wikipedia — The Free Encyclopedia" class="link-box" data-slogan="The Free Encyclopedia">
 43 | <strong>English</strong>
 44 | <small>6,942,000+ <span>articles</span></small>
 45 | </a>
 46 | </div>
 47 | <!-- #2. ja.wikipedia.org - 223,982,000 views/day -->
 48 | <div class="central-featured-lang lang2" lang="ja" dir="ltr">
 49 | <a id="js-link-box-ja" href="//ja.wikipedia.org/" title="Nihongo — ウィキペディア — フリー百科事典" class="link-box" data-slogan="フリー百科事典">
 50 | <strong>日本語</strong>
 51 | <small>1,445,000+ <span>記事</span></small>
 52 | </a>
 53 | </div>
 54 | <!-- #3. ru.wikipedia.org - 222,257,000 views/day -->
 55 | <div class="central-featured-lang lang3" lang="ru" dir="ltr">
 56 | <a id="js-link-box-ru" href="//ru.wikipedia.org/" title="Russkiy — Википедия — Свободная энциклопедия" class="link-box" data-slogan="Свободная энциклопедия">
 57 | <strong>Русский</strong>
 58 | <small>2 020 000+ <span>статей</span></small>
 59 | </a>
 60 | </div>
 61 | <!-- #4. de.wikipedia.org - 196,822,000 views/day -->
 62 | <div class="central-featured-lang lang4" lang="de" dir="ltr">
 63 | <a id="js-link-box-de" href="//de.wikipedia.org/" title="Deutsch — Wikipedia — Die freie Enzyklopädie" class="link-box" data-slogan="Die freie Enzyklopädie">
 64 | <strong>Deutsch</strong>
 65 | <small>2.979.000+ <span>Artikel</span></small>
 66 | </a>
 67 | </div>
 68 | <!-- #5. es.wikipedia.org - 172,057,000 views/day -->
 69 | <div class="central-featured-lang lang5" lang="es" dir="ltr">
 70 | <a id="js-link-box-es" href="//es.wikipedia.org/" title="Español — Wikipedia — La enciclopedia libre" class="link-box" data-slogan="La enciclopedia libre">
 71 | <strong>Español</strong>
 72 | <small>2.003.000+ <span>artículos</span></small>
 73 | </a>
 74 | </div>
 75 | <!-- #6. fr.wikipedia.org - 170,275,000 views/day -->
 76 | <div class="central-featured-lang lang6" lang="fr" dir="ltr">
 77 | <a id="js-link-box-fr" href="//fr.wikipedia.org/" title="Français — Wikipédia — L’encyclopédie libre" class="link-box" data-slogan="L’encyclopédie libre">
 78 | <strong>Français</strong>
 79 | <small>2 659 000+ <span>articles</span></small>
 80 | </a>
 81 | </div>
 82 | <!-- #7. it.wikipedia.org - 116,527,000 views/day -->
 83 | <div class="central-featured-lang lang7" lang="it" dir="ltr">
 84 | <a id="js-link-box-it" href="//it.wikipedia.org/" title="Italiano — Wikipedia — L&#x27;enciclopedia libera" class="link-box" data-slogan="L&#x27;enciclopedia libera">
 85 | <strong>Italiano</strong>
 86 | <small>1.900.000+ <span>voci</span></small>
 87 | </a>
 88 | </div>
 89 | <!-- #8. zh.wikipedia.org - 98,932,000 views/day -->
 90 | <div class="central-featured-lang lang8" lang="zh" dir="ltr">
 91 | <a id="js-link-box-zh" href="//zh.wikipedia.org/" title="Zhōngwén — 维基百科 / 維基百科 — 自由的百科全书 / 自由的百科全書" class="link-box localize-variant" data-slogan="自由的百科全书 / 自由的百科全書">
 92 | <strong>中文</strong>
 93 | <small>1,459,000+ <span>条目 / 條目</span></small>
 94 | </a>
 95 | </div>
 96 | <!-- #9. fa.wikipedia.org - 57,736,000 views/day -->
 97 | <div class="central-featured-lang lang9" lang="fa" dir="rtl">
 98 | <a id="js-link-box-fa" href="//fa.wikipedia.org/" title="Fārsi — ویکی‌پدیا — دانشنامهٔ آزاد" class="link-box" data-slogan="دانشنامهٔ آزاد">
 99 | <strong><bdi dir="rtl">فارسی</bdi></strong>
100 | <small>۱٬۰۲۶٬۰۰۰+ <span>مقاله</span></small>
101 | </a>
102 | </div>
103 | <!-- #10. pl.wikipedia.org - 55,649,000 views/day -->
104 | <div class="central-featured-lang lang10" lang="pl" dir="ltr">
105 | <a id="js-link-box-pl" href="//pl.wikipedia.org/" title="Polski — Wikipedia — Wolna encyklopedia" class="link-box" data-slogan="Wolna encyklopedia">
106 | <strong>Polski</strong>
107 | <small>1 645 000+ <span>haseł</span></small>
108 | </a>
109 | </div>
110 | </nav>
111 | <div role="search" class="search-container">
112 | <form class="pure-form" id="search-form" action="//www.wikipedia.org/search-redirect.php" data-el-section="search">
113 | <fieldset>
114 | <input type="hidden" name="family" value="Wikipedia">
115 | <input type="hidden" id="hiddenLanguageInput" name="language" value="en">
116 | <div class="search-input" id="search-input">
117 | <label for="searchInput" class="screen-reader-text" data-jsl10n="portal.search-input-label">Search Wikipedia</label>
118 | <input id="searchInput" name="search" type="search" size="20" autofocus="autofocus" accesskey="F" dir="auto" autocomplete="off">
119 | <div class="styled-select no-js">
120 | <div class="hide-arrow">
121 | <select id="searchLanguage" name="language">
122 | <option value="af" lang="af">Afrikaans</option>
123 | <option value="ar" lang="ar">العربية</option><!-- Al-ʿArabīyah -->
124 | <option value="ast" lang="ast">Asturianu</option>
125 | <option value="az" lang="az">Azərbaycanca</option>
126 | <option value="bg" lang="bg">Български</option><!-- Bǎlgarski -->
127 | <option value="nan" lang="nan">閩南語 / Bân-lâm-gú</option><!-- Bân-lâm-gú -->
128 | <option value="bn" lang="bn">বাংলা</option><!-- Bangla -->
129 | <option value="be" lang="be">Беларуская</option><!-- Belaruskaya -->
130 | <option value="ca" lang="ca">Català</option>
131 | <option value="cs" lang="cs">Čeština</option>
132 | <option value="cy" lang="cy">Cymraeg</option>
133 | <option value="da" lang="da">Dansk</option>
134 | <option value="de" lang="de">Deutsch</option>
135 | <option value="et" lang="et">Eesti</option>
136 | <option value="el" lang="el">Ελληνικά</option><!-- Ellīniká -->
137 | <option value="en" lang="en" selected=selected>English</option><!-- English -->
138 | <option value="es" lang="es">Español</option>
139 | <option value="eo" lang="eo">Esperanto</option>
140 | <option value="eu" lang="eu">Euskara</option>
141 | <option value="fa" lang="fa">فارسی</option><!-- Fārsi -->
142 | <option value="fr" lang="fr">Français</option>
143 | <option value="gl" lang="gl">Galego</option><!-- Galego -->
144 | <option value="ko" lang="ko">한국어</option><!-- Hangugeo -->
145 | <option value="hy" lang="hy">Հայերեն</option><!-- Hayeren -->
146 | <option value="hi" lang="hi">हिन्दी</option><!-- Hindī -->
147 | <option value="hr" lang="hr">Hrvatski</option>
148 | <option value="id" lang="id">Bahasa Indonesia</option>
149 | <option value="it" lang="it">Italiano</option>
150 | <option value="he" lang="he">עברית</option><!-- Ivrit -->
151 | <option value="ka" lang="ka">ქართული</option><!-- Kartuli -->
152 | <option value="lld" lang="lld">Ladin</option>
153 | <option value="la" lang="la">Latina</option>
154 | <option value="lv" lang="lv">Latviešu</option>
155 | <option value="lt" lang="lt">Lietuvių</option>
156 | <option value="hu" lang="hu">Magyar</option>
157 | <option value="mk" lang="mk">Македонски</option><!-- Makedonski -->
158 | <option value="arz" lang="arz">مصرى</option><!-- Maṣrī -->
159 | <option value="ms" lang="ms">Bahasa Melayu</option><!-- Bahasa Melayu -->
160 | <option value="min" lang="min">Bahaso Minangkabau</option>
161 | <option value="my" lang="my">မြန်မာဘာသာ</option><!-- Myanmarsar -->
162 | <option value="nl" lang="nl">Nederlands</option>
163 | <option value="ja" lang="ja">日本語</option><!-- Nihongo -->
164 | <option value="no" lang="nb">Norsk (bokmål)</option>
165 | <option value="nn" lang="nn">Norsk (nynorsk)</option>
166 | <option value="ce" lang="ce">Нохчийн</option><!-- Noxçiyn -->
167 | <option value="uz" lang="uz">Oʻzbekcha / Ўзбекча</option>
168 | <option value="pl" lang="pl">Polski</option>
169 | <option value="pt" lang="pt">Português</option>
170 | <option value="kk" lang="kk">Қазақша / Qazaqşa / قازاقشا</option>
171 | <option value="ro" lang="ro">Română</option>
172 | <option value="sq" lang="sq">Shqip</option>
173 | <option value="simple" lang="en">Simple English</option>
174 | <option value="ceb" lang="ceb">Sinugboanong Binisaya</option>
175 | <option value="sk" lang="sk">Slovenčina</option>
176 | <option value="sl" lang="sl">Slovenščina</option><!-- Slovenščina -->
177 | <option value="sr" lang="sr">Српски / Srpski</option>
178 | <option value="sh" lang="sh">Srpskohrvatski / Српскохрватски</option>
179 | <option value="fi" lang="fi">Suomi</option>
180 | <option value="sv" lang="sv">Svenska</option>
181 | <option value="ta" lang="ta">தமிழ்</option><!-- Tamiḻ -->
182 | <option value="tt" lang="tt">Татарча / Tatarça</option>
183 | <option value="te" lang="te">తెలుగు</option><!-- Telugu -->
184 | <option value="th" lang="th">ภาษาไทย</option><!-- Phasa Thai -->
185 | <option value="tg" lang="tg">Тоҷикӣ</option><!-- Tojikī -->
186 | <option value="azb" lang="azb">تۆرکجه</option><!-- Türkce -->
187 | <option value="tr" lang="tr">Türkçe</option>
188 | <option value="uk" lang="uk">Українська</option><!-- Ukrayins’ka -->
189 | <option value="ur" lang="ur">اردو</option><!-- Urdu -->
190 | <option value="vi" lang="vi">Tiếng Việt</option>
191 | <option value="war" lang="war">Winaray</option>
192 | <option value="zh" lang="zh">中文</option><!-- Zhōngwén -->
193 | <option value="ru" lang="ru">Русский</option><!-- Russkiy -->
194 | <option value="yue" lang="yue">粵語</option>
195 | </select>
196 | <div class="styled-select-active-helper"></div>
197 | </div>
198 | <i class="sprite svg-arrow-down"></i>
199 | </div>
200 | </div>
201 | <button class="pure-button pure-button-primary-progressive" type="submit">
202 | <i class="sprite svg-search-icon" data-jsl10n="search-input-button">Search</i>
203 | </button>
204 | <input type="hidden" value="Go" name="go">
205 | </fieldset>
206 | </form>
207 | </div>
208 | <nav data-jsl10n="all-languages-nav-label" aria-label="All languages">
209 | <div class="lang-list-button-wrapper">
210 | <button id="js-lang-list-button" aria-expanded="false" aria-controls="js-lang-lists" class="lang-list-button">
211 | <i class="sprite svg-language-icon"></i>
212 | <span class="lang-list-button-text jsl10n" data-jsl10n="portal.language-button-text">Read Wikipedia in your language </span>
213 | <i class="sprite svg-arrow-down-blue"></i>
214 | </button>
215 | </div>
216 | <div class="lang-list-border"></div>
217 | <div class="lang-list-container">
218 | <div id="js-lang-lists" class="lang-list-content">
219 | <h2 class="bookshelf-container">
220 | <span class="bookshelf">
221 | <span class="text">
222 | <bdi dir="ltr">
223 | 1,000,000+
224 | </bdi>
225 | <span class="jsl10n" data-jsl10n="entries">
226 | articles
227 | </span>
228 | </span>
229 | </span>
230 | </h2>
231 | <div class="langlist langlist-large hlist" data-el-section="secondary links">
232 | <ul>
233 | <li><a href="//ar.wikipedia.org/" lang="ar" title="Al-ʿArabīyah"><bdi dir="rtl">العربية</bdi></a></li>
234 | <li><a href="//de.wikipedia.org/" lang="de">Deutsch</a></li>
235 | <li><a href="//en.wikipedia.org/" lang="en" title="English">English</a></li>
236 | <li><a href="//es.wikipedia.org/" lang="es">Español</a></li>
237 | <li><a href="//fa.wikipedia.org/" lang="fa" title="Fārsi"><bdi dir="rtl">فارسی</bdi></a></li>
238 | <li><a href="//fr.wikipedia.org/" lang="fr">Français</a></li>
239 | <li><a href="//it.wikipedia.org/" lang="it">Italiano</a></li>
240 | <li><a href="//arz.wikipedia.org/" lang="arz" title="Maṣrī"><bdi dir="rtl">مصرى</bdi></a></li>
241 | <li><a href="//nl.wikipedia.org/" lang="nl">Nederlands</a></li>
242 | <li><a href="//ja.wikipedia.org/" lang="ja" title="Nihongo">日本語</a></li>
243 | <li><a href="//pl.wikipedia.org/" lang="pl">Polski</a></li>
244 | <li><a href="//pt.wikipedia.org/" lang="pt">Português</a></li>
245 | <li><a href="//ceb.wikipedia.org/" lang="ceb">Sinugboanong Binisaya</a></li>
246 | <li><a href="//sv.wikipedia.org/" lang="sv">Svenska</a></li>
247 | <li><a href="//uk.wikipedia.org/" lang="uk" title="Ukrayins’ka">Українська</a></li>
248 | <li><a href="//vi.wikipedia.org/" lang="vi">Tiếng Việt</a></li>
249 | <li><a href="//war.wikipedia.org/" lang="war">Winaray</a></li>
250 | <li><a href="//zh.wikipedia.org/" lang="zh" title="Zhōngwén">中文</a></li>
251 | <li><a href="//ru.wikipedia.org/" lang="ru" title="Russkiy">Русский</a></li>
252 | </ul>
253 | </div>
254 | <h2 class="bookshelf-container">
255 | <span class="bookshelf">
256 | <span class="text">
257 | <bdi dir="ltr">
258 | 100,000+
259 | </bdi>
260 | <span class="jsl10n" data-jsl10n="portal.entries">
261 | articles
262 | </span>
263 | </span>
264 | </span>
265 | </h2>
266 | <div class="langlist langlist-large hlist" data-el-section="secondary links">
267 | <ul>
268 | <li><a href="//af.wikipedia.org/" lang="af">Afrikaans</a></li>
269 | <li><a href="//ast.wikipedia.org/" lang="ast">Asturianu</a></li>
270 | <li><a href="//az.wikipedia.org/" lang="az">Azərbaycanca</a></li>
271 | <li><a href="//bg.wikipedia.org/" lang="bg" title="Bǎlgarski">Български</a></li>
272 | <li><a href="//zh-min-nan.wikipedia.org/" lang="nan" title="Bân-lâm-gú">閩南語 / Bân-lâm-gú</a></li>
273 | <li><a href="//bn.wikipedia.org/" lang="bn" title="Bangla">বাংলা</a></li>
274 | <li><a href="//be.wikipedia.org/" lang="be" title="Belaruskaya">Беларуская</a></li>
275 | <li><a href="//ca.wikipedia.org/" lang="ca">Català</a></li>
276 | <li><a href="//cs.wikipedia.org/" lang="cs">Čeština</a></li>
277 | <li><a href="//cy.wikipedia.org/" lang="cy">Cymraeg</a></li>
278 | <li><a href="//da.wikipedia.org/" lang="da">Dansk</a></li>
279 | <li><a href="//et.wikipedia.org/" lang="et">Eesti</a></li>
280 | <li><a href="//el.wikipedia.org/" lang="el" title="Ellīniká">Ελληνικά</a></li>
281 | <li><a href="//eo.wikipedia.org/" lang="eo">Esperanto</a></li>
282 | <li><a href="//eu.wikipedia.org/" lang="eu">Euskara</a></li>
283 | <li><a href="//gl.wikipedia.org/" lang="gl" title="Galego">Galego</a></li>
284 | <li><a href="//ko.wikipedia.org/" lang="ko" title="Hangugeo">한국어</a></li>
285 | <li><a href="//hy.wikipedia.org/" lang="hy" title="Hayeren">Հայերեն</a></li>
286 | <li><a href="//hi.wikipedia.org/" lang="hi" title="Hindī">हिन्दी</a></li>
287 | <li><a href="//hr.wikipedia.org/" lang="hr">Hrvatski</a></li>
288 | <li><a href="//id.wikipedia.org/" lang="id">Bahasa Indonesia</a></li>
289 | <li><a href="//he.wikipedia.org/" lang="he" title="Ivrit"><bdi dir="rtl">עברית</bdi></a></li>
290 | <li><a href="//ka.wikipedia.org/" lang="ka" title="Kartuli">ქართული</a></li>
291 | <li><a href="//lld.wikipedia.org/" lang="lld">Ladin</a></li>
292 | <li><a href="//la.wikipedia.org/" lang="la">Latina</a></li>
293 | <li><a href="//lv.wikipedia.org/" lang="lv">Latviešu</a></li>
294 | <li><a href="//lt.wikipedia.org/" lang="lt">Lietuvių</a></li>
295 | <li><a href="//hu.wikipedia.org/" lang="hu">Magyar</a></li>
296 | <li><a href="//mk.wikipedia.org/" lang="mk" title="Makedonski">Македонски</a></li>
297 | <li><a href="//ms.wikipedia.org/" lang="ms" title="Bahasa Melayu">Bahasa Melayu</a></li>
298 | <li><a href="//min.wikipedia.org/" lang="min">Bahaso Minangkabau</a></li>
299 | <li><a href="//my.wikipedia.org/" lang="my" title="Myanmarsar">မြန်မာဘာသာ</a></li>
300 | <li lang="no">Norsk<ul><li><a href="//no.wikipedia.org/" lang="nb">bokmål</a></li><li><a href="//nn.wikipedia.org/" lang="nn">nynorsk</a></li></ul></li>
301 | <li><a href="//ce.wikipedia.org/" lang="ce" title="Noxçiyn">Нохчийн</a></li>
302 | <li><a href="//uz.wikipedia.org/" lang="uz">Oʻzbekcha / Ўзбекча</a></li>
303 | <li><a href="//kk.wikipedia.org/" lang="kk"><span lang="kk-Cyrl">Қазақша</span> / <span lang="kk-Latn">Qazaqşa</span> / <bdi lang="kk-Arab" dir="rtl">قازاقشا</bdi></a></li>
304 | <li><a href="//ro.wikipedia.org/" lang="ro">Română</a></li>
305 | <li><a href="//sq.wikipedia.org/" lang="sq">Shqip</a></li>
306 | <li><a href="//simple.wikipedia.org/" lang="en">Simple English</a></li>
307 | <li><a href="//sk.wikipedia.org/" lang="sk">Slovenčina</a></li>
308 | <li><a href="//sl.wikipedia.org/" lang="sl" title="Slovenščina">Slovenščina</a></li>
309 | <li><a href="//sr.wikipedia.org/" lang="sr">Српски / Srpski</a></li>
310 | <li><a href="//sh.wikipedia.org/" lang="sh">Srpskohrvatski / Српскохрватски</a></li>
311 | <li><a href="//fi.wikipedia.org/" lang="fi">Suomi</a></li>
312 | <li><a href="//ta.wikipedia.org/" lang="ta" title="Tamiḻ">தமிழ்</a></li>
313 | <li><a href="//tt.wikipedia.org/" lang="tt">Татарча / Tatarça</a></li>
314 | <li><a href="//te.wikipedia.org/" lang="te" title="Telugu">తెలుగు</a></li>
315 | <li><a href="//th.wikipedia.org/" lang="th" title="Phasa Thai">ภาษาไทย</a></li>
316 | <li><a href="//tg.wikipedia.org/" lang="tg" title="Tojikī">Тоҷикӣ</a></li>
317 | <li><a href="//azb.wikipedia.org/" lang="azb" title="Türkce"><bdi dir="rtl">تۆرکجه</bdi></a></li>
318 | <li><a href="//tr.wikipedia.org/" lang="tr">Türkçe</a></li>
319 | <li><a href="//ur.wikipedia.org/" lang="ur" title="Urdu"><bdi dir="rtl">اردو</bdi></a></li>
320 | <li><a href="//zh-yue.wikipedia.org/" lang="yue">粵語</a></li>
321 | </ul>
322 | </div>
323 | <h2 class="bookshelf-container">
324 | <span class="bookshelf">
325 | <span class="text">
326 | <bdi dir="ltr">
327 | 10,000+
328 | </bdi>
329 | <span class="jsl10n" data-jsl10n="portal.entries">
330 | articles
331 | </span>
332 | </span>
333 | </span>
334 | </h2>
335 | <div class="langlist hlist" data-el-section="secondary links">
336 | <ul>
337 | <li><a href="//ace.wikipedia.org/" lang="ace">Bahsa Acèh</a></li>
338 | <li><a href="//als.wikipedia.org/" lang="gsw">Alemannisch</a></li>
339 | <li><a href="//am.wikipedia.org/" lang="am" title="Āmariññā">አማርኛ</a></li>
340 | <li><a href="//an.wikipedia.org/" lang="an">Aragonés</a></li>
341 | <li><a href="//hyw.wikipedia.org/" lang="hyw" title="Arevmdahayeren">Արեւմտահայերէն</a></li>
342 | <li><a href="//gor.wikipedia.org/" lang="gor">Bahasa Hulontalo</a></li>
343 | <li><a href="//ban.wikipedia.org/" lang="ban">Basa Bali</a></li>
344 | <li><a href="//bjn.wikipedia.org/" lang="bjn">Bahasa Banjar</a></li>
345 | <li><a href="//map-bms.wikipedia.org/" lang="map-x-bms">Basa Banyumasan</a></li>
346 | <li><a href="//ba.wikipedia.org/" lang="ba" title="Başqortsa">Башҡортса</a></li>
347 | <li><a href="//be-tarask.wikipedia.org/" lang="be-tarask" title="Bielaruskaja (taraškievica)">Беларуская (тарашкевіца)</a></li>
348 | <li><a href="//bcl.wikipedia.org/" lang="bcl">Bikol Central</a></li>
349 | <li><a href="//bpy.wikipedia.org/" lang="bpy" title="Bishnupriya Manipuri">বিষ্ণুপ্রিয়া মণিপুরী</a></li>
350 | <li><a href="//bar.wikipedia.org/" lang="bar">Boarisch</a></li>
351 | <li><a href="//bs.wikipedia.org/" lang="bs">Bosanski</a></li>
352 | <li><a href="//br.wikipedia.org/" lang="br">Brezhoneg</a></li>
353 | <li><a href="//cv.wikipedia.org/" lang="cv" title="Čăvašla">Чӑвашла</a></li>
354 | <li><a href="//dag.wikipedia.org/" lang="dag">Dagbanli</a></li>
355 | <li><a href="//ary.wikipedia.org/" lang="ary" title="Darija"><bdi dir="rtl">الدارجة</bdi></a></li>
356 | <li><a href="//nv.wikipedia.org/" lang="nv">Diné Bizaad</a></li>
357 | <li><a href="//eml.wikipedia.org/" lang="roa-x-eml">Emigliàn–Rumagnòl</a></li>
358 | <li><a href="//hif.wikipedia.org/" lang="hif">Fiji Hindi</a></li>
359 | <li><a href="//fo.wikipedia.org/" lang="fo">Føroyskt</a></li>
360 | <li><a href="//fy.wikipedia.org/" lang="fy">Frysk</a></li>
361 | <li><a href="//ga.wikipedia.org/" lang="ga">Gaeilge</a></li>
362 | <li><a href="//gd.wikipedia.org/" lang="gd">Gàidhlig</a></li>
363 | <li><a href="//glk.wikipedia.org/" lang="glk" title="Giləki"><bdi dir="rtl">گیلکی</bdi></a></li>
364 | <li><a href="//gu.wikipedia.org/" lang="gu" title="Gujarati">ગુજરાતી</a></li>
365 | <li><a href="//hak.wikipedia.org/" lang="hak">Hak-kâ-ngî / 客家語</a></li>
366 | <li><a href="//ha.wikipedia.org/" lang="ha">Hausa</a></li>
367 | <li><a href="//hsb.wikipedia.org/" lang="hsb">Hornjoserbsce</a></li>
368 | <li><a href="//io.wikipedia.org/" lang="io">Ido</a></li>
369 | <li><a href="//ig.wikipedia.org/" lang="ig">Igbo</a></li>
370 | <li><a href="//ilo.wikipedia.org/" lang="ilo">Ilokano</a></li>
371 | <li><a href="//ia.wikipedia.org/" lang="ia">Interlingua</a></li>
372 | <li><a href="//ie.wikipedia.org/" lang="ie">Interlingue</a></li>
373 | <li><a href="//os.wikipedia.org/" lang="os" title="Iron">Ирон</a></li>
374 | <li><a href="//is.wikipedia.org/" lang="is">Íslenska</a></li>
375 | <li><a href="//jv.wikipedia.org/" lang="jv">Jawa</a></li>
376 | <li><a href="//kn.wikipedia.org/" lang="kn" title="Kannada">ಕನ್ನಡ</a></li>
377 | <li><a href="//pam.wikipedia.org/" lang="pam">Kapampangan</a></li>
378 | <li><a href="//km.wikipedia.org/" lang="km" title="Phéasa Khmér">ភាសាខ្មែរ</a></li>
379 | <li><a href="//avk.wikipedia.org/" lang="avk">Kotava</a></li>
380 | <li><a href="//ht.wikipedia.org/" lang="ht">Kreyòl Ayisyen</a></li>
381 | <li><a href="//ku.wikipedia.org/" lang="ku"><span lang="ku-Latn">Kurdî</span> / <bdi lang="ku-Arab" dir="rtl">كوردی</bdi></a></li>
382 | <li><a href="//ckb.wikipedia.org/" lang="ckb" title="Kurdîy Nawendî"><bdi dir="rtl">کوردیی ناوەندی</bdi></a></li>
383 | <li><a href="//ky.wikipedia.org/" lang="ky" title="Kyrgyzča">Кыргызча</a></li>
384 | <li><a href="//mrj.wikipedia.org/" lang="mjr" title="Kyryk Mary">Кырык мары</a></li>
385 | <li><a href="//lb.wikipedia.org/" lang="lb">Lëtzebuergesch</a></li>
386 | <li><a href="//lij.wikipedia.org/" lang="lij">Lìgure</a></li>
387 | <li><a href="//li.wikipedia.org/" lang="li">Limburgs</a></li>
388 | <li><a href="//lmo.wikipedia.org/" lang="lmo">Lombard</a></li>
389 | <li><a href="//mai.wikipedia.org/" lang="mai" title="Maithilī">मैथिली</a></li>
390 | <li><a href="//mg.wikipedia.org/" lang="mg">Malagasy</a></li>
391 | <li><a href="//ml.wikipedia.org/" lang="ml" title="Malayalam">മലയാളം</a></li>
392 | <li><a href="//mr.wikipedia.org/" lang="mr" title="Marathi">मराठी</a></li>
393 | <li><a href="//xmf.wikipedia.org/" lang="xmf" title="Margaluri">მარგალური</a></li>
394 | <li><a href="//mzn.wikipedia.org/" lang="mzn" title="Mäzeruni"><bdi dir="rtl">مازِرونی</bdi></a></li>
395 | <li><a href="//cdo.wikipedia.org/" lang="cdo" title="Ming-deng-ngu">Mìng-dĕ̤ng-ngṳ̄ / 閩東語</a></li>
396 | <li><a href="//mn.wikipedia.org/" lang="mn" title="Mongol">Монгол</a></li>
397 | <li><a href="//nap.wikipedia.org/" lang="nap">Napulitano</a></li>
398 | <li><a href="//new.wikipedia.org/" lang="new" title="Nepal Bhasa">नेपाल भाषा</a></li>
399 | <li><a href="//ne.wikipedia.org/" lang="ne" title="Nepālī">नेपाली</a></li>
400 | <li><a href="//frr.wikipedia.org/" lang="frr">Nordfriisk</a></li>
401 | <li><a href="//oc.wikipedia.org/" lang="oc">Occitan</a></li>
402 | <li><a href="//mhr.wikipedia.org/" lang="mhr" title="Olyk Marij">Олык марий</a></li>
403 | <li><a href="//or.wikipedia.org/" lang="or" title="Oṛiā">ଓଡି଼ଆ</a></li>
404 | <li><a href="//as.wikipedia.org/" lang="as" title="Ôxômiya">অসমীযা়</a></li>
405 | <li><a href="//pa.wikipedia.org/" lang="pa" title="Pañjābī (Gurmukhī)">ਪੰਜਾਬੀ</a></li>
406 | <li><a href="//pnb.wikipedia.org/" lang="pnb" title="Pañjābī (Shāhmukhī)"><bdi dir="rtl">پنجابی (شاہ مکھی)</bdi></a></li>
407 | <li><a href="//ps.wikipedia.org/" lang="ps" title="Paʂto"><bdi dir="rtl">پښتو</bdi></a></li>
408 | <li><a href="//pms.wikipedia.org/" lang="pms">Piemontèis</a></li>
409 | <li><a href="//nds.wikipedia.org/" lang="nds">Plattdüütsch</a></li>
410 | <li><a href="//crh.wikipedia.org/" lang="crh">Qırımtatarca</a></li>
411 | <li><a href="//qu.wikipedia.org/" lang="qu">Runa Simi</a></li>
412 | <li><a href="//sa.wikipedia.org/" lang="sa" title="Saṃskṛtam">संस्कृतम्</a></li>
413 | <li><a href="//sat.wikipedia.org/" lang="sat" title="Santali">ᱥᱟᱱᱛᱟᱲᱤ</a></li>
414 | <li><a href="//sah.wikipedia.org/" lang="sah" title="Saxa Tyla">Саха Тыла</a></li>
415 | <li><a href="//sco.wikipedia.org/" lang="sco">Scots</a></li>
416 | <li><a href="//sn.wikipedia.org/" lang="sn">ChiShona</a></li>
417 | <li><a href="//scn.wikipedia.org/" lang="scn">Sicilianu</a></li>
418 | <li><a href="//si.wikipedia.org/" lang="si" title="Siṃhala">සිංහල</a></li>
419 | <li><a href="//sd.wikipedia.org/" lang="sd" title="Sindhī"><bdi dir="rtl">سنڌي</bdi></a></li>
420 | <li><a href="//szl.wikipedia.org/" lang="szl">Ślůnski</a></li>
421 | <li><a href="//su.wikipedia.org/" lang="su">Basa Sunda</a></li>
422 | <li><a href="//sw.wikipedia.org/" lang="sw">Kiswahili</a></li>
423 | <li><a href="//tl.wikipedia.org/" lang="tl">Tagalog</a></li>
424 | <li><a href="//shn.wikipedia.org/" lang="shn">ၽႃႇသႃႇတႆး</a></li>
425 | <li><a href="//zgh.wikipedia.org/" lang="zgh" title="Tamazight tanawayt">ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ</a></li>
426 | <li><a href="//tum.wikipedia.org/" lang="tum">chiTumbuka</a></li>
427 | <li><a href="//bug.wikipedia.org/" lang="bug">Basa Ugi</a></li>
428 | <li><a href="//vec.wikipedia.org/" lang="vec">Vèneto</a></li>
429 | <li><a href="//vo.wikipedia.org/" lang="vo">Volapük</a></li>
430 | <li><a href="//wa.wikipedia.org/" lang="wa">Walon</a></li>
431 | <li><a href="//zh-classical.wikipedia.org/" lang="lzh" title="Wényán">文言</a></li>
432 | <li><a href="//wuu.wikipedia.org/" lang="wuu" title="Wúyǔ">吴语</a></li>
433 | <li><a href="//yi.wikipedia.org/" lang="yi" title="Yidiš"><bdi dir="rtl">ייִדיש</bdi></a></li>
434 | <li><a href="//yo.wikipedia.org/" lang="yo">Yorùbá</a></li>
435 | <li><a href="//diq.wikipedia.org/" lang="diq">Zazaki</a></li>
436 | <li><a href="//bat-smg.wikipedia.org/" lang="sgs">žemaitėška</a></li>
437 | <li><a href="//zu.wikipedia.org/" lang="zu">isiZulu</a></li>
438 | <li><a href="//mni.wikipedia.org/" lang="mni">ꯃꯤꯇꯩ ꯂꯣꯟ</a></li>
439 | </ul>
440 | </div>
441 | <h2 class="bookshelf-container">
442 | <span class="bookshelf">
443 | <span class="text">
444 | <bdi dir="ltr">
445 | 1,000+
446 | </bdi>
447 | <span class="jsl10n" data-jsl10n="portal.entries">
448 | articles
449 | </span>
450 | </span>
451 | </span>
452 | </h2>
453 | <div class="langlist hlist" data-el-section="secondary links">
454 | <ul>
455 | <li><a href="//lad.wikipedia.org/" lang="lad"><span lang="lad-Latn">Dzhudezmo</span> / <bdi lang="lad-Hebr" dir="rtl">לאדינו</bdi></a></li>
456 | <li><a href="//kbd.wikipedia.org/" lang="kbd" title="Adighabze">Адыгэбзэ</a></li>
457 | <li><a href="//ang.wikipedia.org/" lang="ang">Ænglisc</a></li>
458 | <li><a href="//smn.wikipedia.org/" lang="smn" title="Anarâškielâ">Anarâškielâ</a></li>
459 | <li><a href="//anp.wikipedia.org/" lang="anp" title="Angika">अंगिका</a></li>
460 | <li><a href="//ab.wikipedia.org/" lang="ab" title="Aṗsshwa">Аԥсшәа</a></li>
461 | <li><a href="//roa-rup.wikipedia.org/" lang="rup">armãneashti</a></li>
462 | <li><a href="//frp.wikipedia.org/" lang="frp">Arpitan</a></li>
463 | <li><a href="//atj.wikipedia.org/" lang="atj">atikamekw</a></li>
464 | <li><a href="//arc.wikipedia.org/" lang="arc" title="Ātûrāyâ"><bdi dir="rtl">ܐܬܘܪܝܐ</bdi></a></li>
465 | <li><a href="//gn.wikipedia.org/" lang="gn">Avañe’ẽ</a></li>
466 | <li><a href="//av.wikipedia.org/" lang="av" title="Avar">Авар</a></li>
467 | <li><a href="//ay.wikipedia.org/" lang="ay">Aymar</a></li>
468 | <li><a href="//bew.wikipedia.org/" lang="bew">Betawi</a></li>
469 | <li><a href="//bh.wikipedia.org/" lang="bh" title="Bhōjapurī">भोजपुरी</a></li>
470 | <li><a href="//bi.wikipedia.org/" lang="bi">Bislama</a></li>
471 | <li><a href="//bo.wikipedia.org/" lang="bo" title="Bod Skad">བོད་ཡིག</a></li>
472 | <li><a href="//bxr.wikipedia.org/" lang="bxr" title="Buryad">Буряад</a></li>
473 | <li><a href="//cbk-zam.wikipedia.org/" lang="cbk-x-zam">Chavacano de Zamboanga</a></li>
474 | <li><a href="//ny.wikipedia.org/" lang="ny">Chichewa</a></li>
475 | <li><a href="//co.wikipedia.org/" lang="co">Corsu</a></li>
476 | <li><a href="//za.wikipedia.org/" lang="za">Vahcuengh / 話僮</a></li>
477 | <li><a href="//dga.wikipedia.org/" lang="dga">Dagaare</a></li>
478 | <li><a href="//se.wikipedia.org/" lang="se" title="Davvisámegiella">Davvisámegiella</a></li>
479 | <li><a href="//pdc.wikipedia.org/" lang="pdc">Deitsch</a></li>
480 | <li><a href="//dv.wikipedia.org/" lang="dv" title="Divehi"><bdi dir="rtl">ދިވެހިބަސް</bdi></a></li>
481 | <li><a href="//dsb.wikipedia.org/" lang="dsb">Dolnoserbski</a></li>
482 | <li><a href="//dtp.wikipedia.org/" lang="dtp">Dusun Bundu-liwan</a></li>
483 | <li><a href="//myv.wikipedia.org/" lang="myv" title="Erzjanj">Эрзянь</a></li>
484 | <li><a href="//ext.wikipedia.org/" lang="ext">Estremeñu</a></li>
485 | <li><a href="//fon.wikipedia.org/" lang="fon">Fɔ̀ngbè</a></li>
486 | <li><a href="//ff.wikipedia.org/" lang="ff">Fulfulde</a></li>
487 | <li><a href="//fur.wikipedia.org/" lang="fur">Furlan</a></li>
488 | <li><a href="//gv.wikipedia.org/" lang="gv">Gaelg</a></li>
489 | <li><a href="//gag.wikipedia.org/" lang="gag">Gagauz</a></li>
490 | <li><a href="//inh.wikipedia.org/" lang="inh" title="Ghalghai">ГӀалгӀай</a></li>
491 | <li><a href="//gpe.wikipedia.org/" lang="gpe">Ghanaian Pidgin</a></li>
492 | <li><a href="//ki.wikipedia.org/" lang="ki">Gĩkũyũ</a></li>
493 | <li><a href="//gan.wikipedia.org/" lang="gan" title="Gon ua" data-hans="赣语" data-hant="贛語" class="jscnconv">赣语 / 贛語</a></li>
494 | <li><a href="//guw.wikipedia.org/" lang="guw">Gungbe</a></li>
495 | <li><a href="//xal.wikipedia.org/" lang="xal" title="Halʹmg">Хальмг</a></li>
496 | <li><a href="//haw.wikipedia.org/" lang="haw">ʻŌlelo Hawaiʻi</a></li>
497 | <li><a href="//rw.wikipedia.org/" lang="rw">Ikinyarwanda</a></li>
498 | <li><a href="//iba.wikipedia.org/" lang="iba">Jaku Iban</a></li>
499 | <li><a href="//kbp.wikipedia.org/" lang="kbp">Kabɩyɛ</a></li>
500 | <li><a href="//csb.wikipedia.org/" lang="csb">Kaszëbsczi</a></li>
501 | <li><a href="//kw.wikipedia.org/" lang="kw">Kernewek</a></li>
502 | <li><a href="//kv.wikipedia.org/" lang="kv" title="Komi">Коми</a></li>
503 | <li><a href="//koi.wikipedia.org/" lang="koi" title="Perem Komi">Перем коми</a></li>
504 | <li><a href="//kg.wikipedia.org/" lang="kg">Kongo</a></li>
505 | <li><a href="//gom.wikipedia.org/" lang="gom">कोंकणी / Konknni</a></li>
506 | <li><a href="//ks.wikipedia.org/" lang="ks" title="Koshur"><bdi dir="rtl">كٲشُر</bdi></a></li>
507 | <li><a href="//gcr.wikipedia.org/" lang="gcr">Kriyòl Gwiyannen</a></li>
508 | <li><a href="//kge.wikipedia.org/" lang="kge">Kumoring</a></li>
509 | <li><a href="//kus.wikipedia.org/" lang="kus">Kʋsaal</a></li>
510 | <li><a href="//lo.wikipedia.org/" lang="lo" title="Phaasaa Laao">ພາສາລາວ</a></li>
511 | <li><a href="//lbe.wikipedia.org/" lang="lbe" title="Lakku">Лакку</a></li>
512 | <li><a href="//ltg.wikipedia.org/" lang="ltg">Latgaļu</a></li>
513 | <li><a href="//lez.wikipedia.org/" lang="lez" title="Lezgi">Лезги</a></li>
514 | <li><a href="//nia.wikipedia.org/" lang="nia">Li Niha</a></li>
515 | <li><a href="//ln.wikipedia.org/" lang="ln">Lingála</a></li>
516 | <li><a href="//lfn.wikipedia.org/" lang="lfn">Lingua Franca Nova</a></li>
517 | <li><a href="//olo.wikipedia.org/" lang="olo">livvinkarjala</a></li>
518 | <li><a href="//jbo.wikipedia.org/" lang="jbo">lojban</a></li>
519 | <li><a href="//lg.wikipedia.org/" lang="lg">Luganda</a></li>
520 | <li><a href="//mad.wikipedia.org/" lang="mad">Madhurâ</a></li>
521 | <li><a href="//mt.wikipedia.org/" lang="mt">Malti</a></li>
522 | <li><a href="//btm.wikipedia.org/" lang="btm">Mandailing</a></li>
523 | <li><a href="//mi.wikipedia.org/" lang="mi">Māori</a></li>
524 | <li><a href="//mwl.wikipedia.org/" lang="mwl">Mirandés</a></li>
525 | <li><a href="//mdf.wikipedia.org/" lang="mdf" title="Mokšenj">Мокшень</a></li>
526 | <li><a href="//mnw.wikipedia.org/" lang="mnw">ဘာသာ မန်</a></li>
527 | <li><a href="//mos.wikipedia.org/" lang="mos">Moore</a></li>
528 | <li><a href="//nqo.wikipedia.org/" lang="nqo" title="N&#x27;Ko">ߒߞߏ</a></li>
529 | <li><a href="//fj.wikipedia.org/" lang="fj">Na Vosa Vaka-Viti</a></li>
530 | <li><a href="//nah.wikipedia.org/" lang="nah">Nāhuatlahtōlli</a></li>
531 | <li><a href="//pcm.wikipedia.org/" lang="pcm">Naijá</a></li>
532 | <li><a href="//nds-nl.wikipedia.org/" lang="nds-nl">Nedersaksisch</a></li>
533 | <li><a href="//nrm.wikipedia.org/" lang="roa-x-nrm">Nouormand / Normaund</a></li>
534 | <li><a href="//nov.wikipedia.org/" lang="nov">Novial</a></li>
535 | <li><a href="//om.wikipedia.org/" lang="om">Afaan Oromoo</a></li>
536 | <li><a href="//blk.wikipedia.org/" lang="blk">ပအိုဝ်ႏဘာႏသာႏ</a></li>
537 | <li><a href="//pi.wikipedia.org/" lang="pi" title="Pāḷi">पालि</a></li>
538 | <li><a href="//pag.wikipedia.org/" lang="pag">Pangasinán</a></li>
539 | <li><a href="//ami.wikipedia.org/" lang="ami">Pangcah</a></li>
540 | <li><a href="//pap.wikipedia.org/" lang="pap">Papiamentu</a></li>
541 | <li><a href="//jam.wikipedia.org/" lang="jam">Patois</a></li>
542 | <li><a href="//pfl.wikipedia.org/" lang="pfl">Pfälzisch</a></li>
543 | <li><a href="//pcd.wikipedia.org/" lang="pcd">Picard</a></li>
544 | <li><a href="//krc.wikipedia.org/" lang="krc" title="Qaraçay–Malqar">Къарачай–малкъар</a></li>
545 | <li><a href="//kaa.wikipedia.org/" lang="kaa">Qaraqalpaqsha</a></li>
546 | <li><a href="//ksh.wikipedia.org/" lang="ksh">Ripoarisch</a></li>
547 | <li><a href="//rm.wikipedia.org/" lang="rm">Rumantsch</a></li>
548 | <li><a href="//rue.wikipedia.org/" lang="rue" title="Rusin’skyj">Русиньскый</a></li>
549 | <li><a href="//szy.wikipedia.org/" lang="szy">Sakizaya</a></li>
550 | <li><a href="//sm.wikipedia.org/" lang="sm">Gagana Sāmoa</a></li>
551 | <li><a href="//skr.wikipedia.org/" lang="skr" title="Saraiki">سرائیکی</a></li>
552 | <li><a href="//sc.wikipedia.org/" lang="sc">Sardu</a></li>
553 | <li><a href="//trv.wikipedia.org/" lang="trv">Seediq</a></li>
554 | <li><a href="//stq.wikipedia.org/" lang="stq">Seeltersk</a></li>
555 | <li><a href="//st.wikipedia.org/" lang="st">Sesotho</a></li>
556 | <li><a href="//nso.wikipedia.org/" lang="nso">Sesotho sa Leboa</a></li>
557 | <li><a href="//tn.wikipedia.org/" lang="tn">Setswana</a></li>
558 | <li><a href="//cu.wikipedia.org/" lang="cu" title="Slověnĭskŭ">Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ</a></li>
559 | <li><a href="//so.wikipedia.org/" lang="so">Soomaaliga</a></li>
560 | <li><a href="//srn.wikipedia.org/" lang="srn">Sranantongo</a></li>
561 | <li><a href="//ss.wikipedia.org/" lang="ss">SiSwati</a></li>
562 | <li><a href="//shi.wikipedia.org/" lang="shi">Taclḥit</a></li>
563 | <li><a href="//ty.wikipedia.org/" lang="ty">Reo tahiti</a></li>
564 | <li><a href="//kab.wikipedia.org/" lang="kab" title="Taqbaylit">Taqbaylit</a></li>
565 | <li><a href="//roa-tara.wikipedia.org/" lang="roa">Tarandíne</a></li>
566 | <li><a href="//tay.wikipedia.org/" lang="tay">Tayal</a></li>
567 | <li><a href="//tet.wikipedia.org/" lang="tet">Tetun</a></li>
568 | <li><a href="//tpi.wikipedia.org/" lang="tpi">Tok Pisin</a></li>
569 | <li><a href="//tly.wikipedia.org/" lang="tly">tolışi</a></li>
570 | <li><a href="//to.wikipedia.org/" lang="to">faka Tonga</a></li>
571 | <li><a href="//tk.wikipedia.org/" lang="tk">Türkmençe</a></li>
572 | <li><a href="//tw.wikipedia.org/" lang="tw">Twi</a></li>
573 | <li><a href="//kcg.wikipedia.org/" lang="kcg">Tyap</a></li>
574 | <li><a href="//tyv.wikipedia.org/" lang="tyv" title="Tyva dyl">Тыва дыл</a></li>
575 | <li><a href="//udm.wikipedia.org/" lang="udm" title="Udmurt">Удмурт</a></li>
576 | <li><a href="//ug.wikipedia.org/" lang="ug"><bdi dir="rtl">ئۇيغۇرچه</bdi></a></li>
577 | <li><a href="//vep.wikipedia.org/" lang="vep">Vepsän</a></li>
578 | <li><a href="//fiu-vro.wikipedia.org/" lang="vro">võro</a></li>
579 | <li><a href="//vls.wikipedia.org/" lang="vls">West-Vlams</a></li>
580 | <li><a href="//wo.wikipedia.org/" lang="wo">Wolof</a></li>
581 | <li><a href="//xh.wikipedia.org/" lang="xh">isiXhosa</a></li>
582 | <li><a href="//zea.wikipedia.org/" lang="zea">Zeêuws</a></li>
583 | <li><a href="//alt.wikipedia.org/" lang="alt">алтай тил</a></li>
584 | <li><a href="//awa.wikipedia.org/" lang="awa">अवधी</a></li>
585 | <li><a href="//dty.wikipedia.org/" lang="dty">डोटेली</a></li>
586 | <li><a href="//tcy.wikipedia.org/" lang="tcy">ತುಳು</a></li>
587 | </ul>
588 | </div>
589 | <h2 class="bookshelf-container">
590 | <span class="bookshelf">
591 | <span class="text">
592 | <bdi dir="ltr">
593 | 100+
594 | </bdi>
595 | <span class="jsl10n" data-jsl10n="portal.entries">
596 | articles
597 | </span>
598 | </span>
599 | </span>
600 | </h2>
601 | <div class="langlist langlist-tiny hlist" data-el-section="secondary links">
602 | <ul>
603 | <li><a href="//bdr.wikipedia.org/" lang="bdr">Bajau Sama</a></li>
604 | <li><a href="//bm.wikipedia.org/" lang="bm">Bamanankan</a></li>
605 | <li><a href="//bbc.wikipedia.org/" lang="bbc">Batak Toba</a></li>
606 | <li><a href="//ch.wikipedia.org/" lang="ch">Chamoru</a></li>
607 | <li><a href="//dz.wikipedia.org/" lang="dz" title="Rdzong-Kha">རྫོང་ཁ</a></li>
608 | <li><a href="//ee.wikipedia.org/" lang="ee">Eʋegbe</a></li>
609 | <li><a href="//gur.wikipedia.org/" lang="gur">Farefare</a></li>
610 | <li><a href="//got.wikipedia.org/" lang="got" title="Gutisk">𐌲𐌿𐍄𐌹𐍃𐌺</a></li>
611 | <li><a href="//igl.wikipedia.org/" lang="igl">Igala</a></li>
612 | <li><a href="//iu.wikipedia.org/" lang="iu">ᐃᓄᒃᑎᑐᑦ / Inuktitut</a></li>
613 | <li><a href="//ik.wikipedia.org/" lang="ik">Iñupiak</a></li>
614 | <li><a href="//nr.wikipedia.org/" lang="nr" title="isiNdebele seSewula">isiNdebele seSewula</a></li>
615 | <li><a href="//kl.wikipedia.org/" lang="kl">Kalaallisut</a></li>
616 | <li><a href="//fat.wikipedia.org/" lang="fat">Mfantse</a></li>
617 | <li><a href="//pih.wikipedia.org/" lang="pih">Norfuk / Pitkern</a></li>
618 | <li><a href="//ann.wikipedia.org/" lang="ann">Obolo</a></li>
619 | <li><a href="//pwn.wikipedia.org/" lang="pwn">pinayuanan</a></li>
620 | <li><a href="//pnt.wikipedia.org/" lang="pnt" title="Pontiaká">Ποντιακά</a></li>
621 | <li><a href="//rmy.wikipedia.org/" lang="rmy">romani čhib</a></li>
622 | <li><a href="//rn.wikipedia.org/" lang="rn">Ikirundi</a></li>
623 | <li><a href="//rsk.wikipedia.org/" lang="rsk" title="Ruski">руски</a></li>
624 | <li><a href="//sg.wikipedia.org/" lang="sg">Sängö</a></li>
625 | <li><a href="//tdd.wikipedia.org/" lang="tdd" title="Tai taɯ xoŋ">ᥖᥭᥰᥖᥬᥳᥑᥨᥒᥰ</a></li>
626 | <li><a href="//ti.wikipedia.org/" lang="ti" title="Təgərəña">ትግርኛ</a></li>
627 | <li><a href="//din.wikipedia.org/" lang="din">Thuɔŋjäŋ</a></li>
628 | <li><a href="//chr.wikipedia.org/" lang="chr" title="Tsalagi">ᏣᎳᎩ</a></li>
629 | <li><a href="//chy.wikipedia.org/" lang="chy">Tsėhesenėstsestotse</a></li>
630 | <li><a href="//ts.wikipedia.org/" lang="ts">Xitsonga</a></li>
631 | <li><a href="//ve.wikipedia.org/" lang="ve">Tshivenḓa</a></li>
632 | <li><a href="//guc.wikipedia.org/" lang="guc">Wayuunaiki</a></li>
633 | <li><a href="//ady.wikipedia.org/" lang="ady">адыгабзэ</a></li>
634 | </ul>
635 | </div>
636 | <div class="langlist langlist-others hlist" data-el-section="other languages">
637 | <a class="jsl10n" href="https://meta.wikimedia.org/wiki/Special:MyLanguage/List_of_Wikipedias" lang data-jsl10n="other-languages-label">Other languages</a>
638 | </div></div>
639 | </div>
640 | </nav>
641 | <hr>
642 | </main>
643 | <footer class="footer" data-el-section="other projects">
644 | <div class="footer-sidebar">
645 | <div class="footer-sidebar-content">
646 | <div class="footer-sidebar-icon sprite svg-Wikimedia-logo_black">
647 | </div>
648 | <div class="footer-sidebar-text jsl10n" data-jsl10n="portal.footer-description">
649 | Wikipedia is hosted by the Wikimedia Foundation, a non-profit organization that also hosts a range of other projects.
650 | </div>
651 | <div class="footer-sidebar-text">
652 | <a href="https://donate.wikimedia.org/?wmf_medium=portal&wmf_campaign=portalFooter&wmf_source=portalFooter" target="_blank">
653 | <span class="jsl10n" data-jsl10n="footer-donate">You can support our work with a donation.</span>
654 | </a>
655 | </div>
656 | </div>
657 | </div>
658 | <div class="footer-sidebar app-badges">
659 | <div class="footer-sidebar-content">
660 | <div class="footer-sidebar-text">
661 | <div class="footer-sidebar-icon sprite svg-wikipedia_app_tile"></div>
662 | <strong class="jsl10n" data-jsl10n="portal.app-links.title">
663 | <a class="jsl10n" data-jsl10n="portal.app-links.url" href="https://en.wikipedia.org/wiki/List_of_Wikipedia_mobile_applications">
664 | Download Wikipedia for Android or iOS
665 | </a>
666 | </strong>
667 | <p class="jsl10n" data-jsl10n="portal.app-links.description">
668 | Save your favorite articles to read offline, sync your reading lists across devices and customize your reading experience with the official Wikipedia app.
669 | </p>
670 | <ul>
671 | <li class="app-badge app-badge-android">
672 | <a target="_blank" rel="noreferrer" href="https://play.google.com/store/apps/details?id=org.wikipedia&referrer=utm_source%3Dportal%26utm_medium%3Dbutton%26anid%3Dadmob">
673 | <span class="jsl10n sprite svg-badge_google_play_store" data-jsl10n="portal.app-links.google-store">Google Play Store</span>
674 | </a>
675 | </li>
676 | <li class="app-badge app-badge-ios">
677 | <a target="_blank" rel="noreferrer" href="https://itunes.apple.com/app/apple-store/id324715238?pt=208305&ct=portal&mt=8">
678 | <span class="jsl10n sprite svg-badge_ios_app_store" data-jsl10n="portal.app-links.apple-store">Apple App Store</span>
679 | </a>
680 | </li>
681 | </ul>
682 | </div>
683 | </div>
684 | </div>
685 | <nav data-jsl10n="other-projects-nav-label" aria-label="Other projects" class="other-projects">
686 | <div class="other-project">
687 | <a class="other-project-link" href="//commons.wikimedia.org/">
688 | <div class="other-project-icon">
689 | <div class="sprite svg-Commons-logo_sister"></div>
690 | </div>
691 | <div class="other-project-text">
692 | <span class="other-project-title jsl10n" data-jsl10n="commons.name">Commons</span>
693 | <span class="other-project-tagline jsl10n" data-jsl10n="commons.slogan">Free media collection</span>
694 | </div>
695 | </a>
696 | </div>
697 | <div class="other-project">
698 | <a class="other-project-link" href="//www.wikivoyage.org/">
699 | <div class="other-project-icon">
700 | <div class="sprite svg-Wikivoyage-logo_sister"></div>
701 | </div>
702 | <div class="other-project-text">
703 | <span class="other-project-title jsl10n" data-jsl10n="wikivoyage.name">Wikivoyage</span>
704 | <span class="other-project-tagline jsl10n" data-jsl10n="wikivoyage.slogan">Free travel guide</span>
705 | </div>
706 | </a>
707 | </div>
708 | <div class="other-project">
709 | <a class="other-project-link" href="//www.wiktionary.org/">
710 | <div class="other-project-icon">
711 | <div class="sprite svg-Wiktionary-logo_sister"></div>
712 | </div>
713 | <div class="other-project-text">
714 | <span class="other-project-title jsl10n" data-jsl10n="wiktionary.name">Wiktionary</span>
715 | <span class="other-project-tagline jsl10n" data-jsl10n="wiktionary.slogan">Free dictionary</span>
716 | </div>
717 | </a>
718 | </div>
719 | <div class="other-project">
720 | <a class="other-project-link" href="//www.wikibooks.org/">
721 | <div class="other-project-icon">
722 | <div class="sprite svg-Wikibooks-logo_sister"></div>
723 | </div>
724 | <div class="other-project-text">
725 | <span class="other-project-title jsl10n" data-jsl10n="wikibooks.name">Wikibooks</span>
726 | <span class="other-project-tagline jsl10n" data-jsl10n="wikibooks.slogan">Free textbooks</span>
727 | </div>
728 | </a>
729 | </div>
730 | <div class="other-project">
731 | <a class="other-project-link" href="//www.wikinews.org/">
732 | <div class="other-project-icon">
733 | <div class="sprite svg-Wikinews-logo_sister"></div>
734 | </div>
735 | <div class="other-project-text">
736 | <span class="other-project-title jsl10n" data-jsl10n="wikinews.name">Wikinews</span>
737 | <span class="other-project-tagline jsl10n" data-jsl10n="wikinews.slogan">Free news source</span>
738 | </div>
739 | </a>
740 | </div>
741 | <div class="other-project">
742 | <a class="other-project-link" href="//www.wikidata.org/">
743 | <div class="other-project-icon">
744 | <div class="sprite svg-Wikidata-logo_sister"></div>
745 | </div>
746 | <div class="other-project-text">
747 | <span class="other-project-title jsl10n" data-jsl10n="wikidata.name">Wikidata</span>
748 | <span class="other-project-tagline jsl10n" data-jsl10n="wikidata.slogan">Free knowledge base</span>
749 | </div>
750 | </a>
751 | </div>
752 | <div class="other-project">
753 | <a class="other-project-link" href="//www.wikiversity.org/">
754 | <div class="other-project-icon">
755 | <div class="sprite svg-Wikiversity-logo_sister"></div>
756 | </div>
757 | <div class="other-project-text">
758 | <span class="other-project-title jsl10n" data-jsl10n="wikiversity.name">Wikiversity</span>
759 | <span class="other-project-tagline jsl10n" data-jsl10n="wikiversity.slogan">Free learning resources</span>
760 | </div>
761 | </a>
762 | </div>
763 | <div class="other-project">
764 | <a class="other-project-link" href="//www.wikiquote.org/">
765 | <div class="other-project-icon">
766 | <div class="sprite svg-Wikiquote-logo_sister"></div>
767 | </div>
768 | <div class="other-project-text">
769 | <span class="other-project-title jsl10n" data-jsl10n="wikiquote.name">Wikiquote</span>
770 | <span class="other-project-tagline jsl10n" data-jsl10n="wikiquote.slogan">Free quote compendium</span>
771 | </div>
772 | </a>
773 | </div>
774 | <div class="other-project">
775 | <a class="other-project-link" href="//www.mediawiki.org/">
776 | <div class="other-project-icon">
777 | <div class="sprite svg-MediaWiki-logo_sister"></div>
778 | </div>
779 | <div class="other-project-text">
780 | <span class="other-project-title jsl10n" data-jsl10n="mediawiki.name">MediaWiki</span>
781 | <span class="other-project-tagline jsl10n" data-jsl10n="mediawiki.slogan">Free &amp; open wiki software</span>
782 | </div>
783 | </a>
784 | </div>
785 | <div class="other-project">
786 | <a class="other-project-link" href="//www.wikisource.org/">
787 | <div class="other-project-icon">
788 | <div class="sprite svg-Wikisource-logo_sister"></div>
789 | </div>
790 | <div class="other-project-text">
791 | <span class="other-project-title jsl10n" data-jsl10n="wikisource.name">Wikisource</span>
792 | <span class="other-project-tagline jsl10n" data-jsl10n="wikisource.slogan">Free content library</span>
793 | </div>
794 | </a>
795 | </div>
796 | <div class="other-project">
797 | <a class="other-project-link" href="//species.wikimedia.org/">
798 | <div class="other-project-icon">
799 | <div class="sprite svg-Wikispecies-logo_sister"></div>
800 | </div>
801 | <div class="other-project-text">
802 | <span class="other-project-title jsl10n" data-jsl10n="wikispecies.name">Wikispecies</span>
803 | <span class="other-project-tagline jsl10n" data-jsl10n="wikispecies.slogan">Free species directory</span>
804 | </div>
805 | </a>
806 | </div>
807 | <div class="other-project">
808 | <a class="other-project-link" href="//www.wikifunctions.org/">
809 | <div class="other-project-icon">
810 | <div class="sprite svg-Wikifunctions-logo_sister"></div>
811 | </div>
812 | <div class="other-project-text">
813 | <span class="other-project-title jsl10n" data-jsl10n="wikifunctions.name">Wikifunctions</span>
814 | <span class="other-project-tagline jsl10n" data-jsl10n="wikifunctions.slogan">Free function library</span>
815 | </div>
816 | </a>
817 | </div>
818 | <div class="other-project">
819 | <a class="other-project-link" href="//meta.wikimedia.org/">
820 | <div class="other-project-icon">
821 | <div class="sprite svg-Meta-Wiki-logo_sister"></div>
822 | </div>
823 | <div class="other-project-text">
824 | <span class="other-project-title jsl10n" data-jsl10n="metawiki.name">Meta-Wiki</span>
825 | <span class="other-project-tagline jsl10n" data-jsl10n="metawiki.slogan">Community coordination &amp; documentation</span>
826 | </div>
827 | </a>
828 | </div>
829 | </nav>
830 | <hr>
831 | <p class="site-license">
832 | <small class="jsl10n" data-jsl10n="license">This page is available under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike License</a></small>
833 | <small class="jsl10n" data-jsl10n="terms"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a></small>
834 | <small class="jsl10n" data-jsl10n="privacy-policy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy</a></small>
835 | </p>
836 | </footer>
837 | <script>
838 | var rtlLangs = ['ar','arc','ary','arz','bcc','bgn','bqi','ckb','dv','fa','glk','he','kk-cn','kk-arab','khw','ks','ku-arab','lki','luz','mzn','nqo','pnb','ps','sd','sdh','skr','ug','ur','yi'],
839 |     translationsHash = 'c4ec3936',
840 |     /**
841 |      * This variable is used to convert the generic "portal" keyword in the data-jsl10n attributes
842 |      * e.g. 'data-jsl10n="portal.footer-description"' into a portal-specific key, e.g. "wiki"
843 |      * for the Wikipedia portal.
844 |      */
845 |     translationsPortalKey = 'wiki';
846 |     /**
847 |      * The wm-typeahead.js feature is used for search,and it uses domain name for searching. We want domain
848 |      * name to be portal Specific (different for every portal).So by declaring variable 'portalSearchDomain'
849 |      * in index.handlebars we will make this portal Specific.
850 |     **/
851 |     portalSearchDomain = 'wikipedia.org'
852 |     /*
853 |      This object is used by l10n scripts (page-localized.js, topten-localized.js)
854 |      to reveal the page content after l10n json is loaded.
855 |      A timer is also set to prevent JS from hiding page content indefinitelty.
856 |      This script is inlined to safeguard againt script loading errors and placed
857 |      at the top of the page to safeguard against any HTML loading/parsing errors.
858 |     */
859 |     wmL10nVisible = {
860 |         ready: false,
861 |         makeVisible: function(){
862 |             if ( !wmL10nVisible.ready ) {
863 |                 wmL10nVisible.ready = true;
864 |                 document.body.className += ' jsl10n-visible';
865 |             }
866 |         }
867 |     };
868 |     window.setTimeout( wmL10nVisible.makeVisible, 1000 )
869 | </script>
870 | <script src="portal/wikipedia.org/assets/js/index-24c3e2ca18.js"></script>
871 | <script src="portal/wikipedia.org/assets/js/gt-ie9-ce3fe8e88d.js"></script>
872 | <style>
873 | .styled-select {
874 |         display: block;
875 |     }
876 | </style>
877 | </body>
878 | </html>
879 | 
```