Compare commits

..
2 Commits
251 changed files with 2257 additions and 24738 deletions
+6 -29
View File
@@ -2,7 +2,7 @@ name: AppImage Build
on:
push:
branches: [master, 'release/**']
branches: [master]
pull_request:
branches: [master]
@@ -30,10 +30,10 @@ jobs:
gettext \
libcanberra-dev libglib2.0-dev \
libarchive-dev \
libgtk-3-dev libfontconfig1-dev libpango1.0-dev xvfb xauth dbus-daemon at-spi2-core \
libgtk-3-dev \
libwayland-client0 libwayland-cursor0 libwayland-egl1 \
libxkbcommon0 \
libgtk-3-bin libglib2.0-bin glib-networking shared-mime-info gsettings-desktop-schemas \
libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \
liblua5.4-dev libpci-dev libperl-dev libssl-dev libayatana-appindicator3-dev \
perl python3 python3-minimal python3-dev python3-cffi mono-devel desktop-file-utils \
breeze-gtk-theme \
@@ -56,9 +56,6 @@ jobs:
set -eux
ninja -C build
- name: Test emoji catalog, font coverage and picker
run: xvfb-run -a dbus-run-session -- meson test -C build --print-errorlogs "Emoji Data Tests" "Emoji Font Tests" "Emoji UI Tests"
- name: Install to AppDir
run: |
set -eux
@@ -122,8 +119,9 @@ jobs:
cp -a /usr/lib/x86_64-linux-gnu/libpython3*.so* AppDir/usr/lib/x86_64-linux-gnu/
fi
# Every package ships the pinned font, including portable builds.
cmp data/fonts/NotoColorEmoji.ttf AppDir/usr/share/fonts/zoitechat/NotoColorEmoji.ttf
# The emoji font is not bundled on Linux; the AppImage uses the
# host system's emoji font (e.g. fonts-noto-color-emoji).
test ! -e AppDir/usr/share/fonts/zoitechat/NotoColorEmoji.ttf
if [ -d "/usr/lib/x86_64-linux-gnu/gtk-3.0/modules" ]; then
install -d AppDir/usr/lib/x86_64-linux-gnu/gtk-3.0
@@ -135,25 +133,10 @@ jobs:
cp -a /usr/lib/gtk-3.0/modules AppDir/usr/lib/gtk-3.0/
fi
# HTTPS inline-image downloads use GSocketClient TLS on Linux.
# GLib provides the API, but TLS and system-proxy support live in
# loadable GIO modules shipped by glib-networking. Bundle those
# modules so the AppImage does not depend on the host copy.
gio_module_dir="$(pkg-config --variable=giomoduledir gio-2.0)"
test -n "$gio_module_dir"
test -f "${gio_module_dir}/libgiognutls.so"
install -d "AppDir${gio_module_dir}"
cp -a "${gio_module_dir}"/libgio*.so "AppDir${gio_module_dir}/"
gio-querymodules "AppDir${gio_module_dir}"
test -f "AppDir${gio_module_dir}/libgiognutls.so"
test -s "AppDir${gio_module_dir}/giomodule.cache"
- name: Verify bundled plugins
run: |
set -eux
# Include every built-in plugin except the Windows-only update plugin.
find AppDir/usr/lib -maxdepth 4 -type f -name '*.so' -path '*/zoitechat/plugins/*' -print | sort
for plugin in checksum fishlim lua perl python sysinfo; do
@@ -260,16 +243,10 @@ jobs:
export PYTHONPATH="$pythonpath_entries${PYTHONPATH:+:$PYTHONPATH}"
fi
# Register the private font without hiding the host's normal fonts.
export ZOITECHAT_EMOJI_FONT="${ZOITECHAT_EMOJI_FONT:-$APPDIR/usr/share/fonts/zoitechat/NotoColorEmoji.ttf}"
# OpenSSL trust store override
export SSL_CERT_FILE="${SSL_CERT_FILE:-$APPDIR/etc/ssl/certs/ca-certificates.crt}"
export SSL_CERT_DIR="${SSL_CERT_DIR:-$APPDIR/etc/ssl/certs}"
export CURL_CA_BUNDLE="${CURL_CA_BUNDLE:-$SSL_CERT_FILE}"
# Prefer Wayland if the session provides it, but keep X11 fallback.
# Don't override if the user already set GDK_BACKEND explicitly.
if [ -z "${GDK_BACKEND:-}" ]; then
if [ -n "${WAYLAND_DISPLAY:-}" ] || [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then
export GDK_BACKEND="wayland,x11"
+1 -1
View File
@@ -2,7 +2,7 @@ name: Flatpak Build
on:
push:
branches: [master, 'release/**']
branches: [master]
pull_request:
branches: [master]
-168
View File
@@ -1,168 +0,0 @@
name: macOS build
on:
workflow_dispatch:
inputs:
sign_and_notarize:
description: 'Sign with Developer ID and notarize using release credentials'
type: boolean
default: false
push:
branches: [master]
tags: ['v*']
paths:
- 'src/**'
- 'plugins/**'
- 'data/**'
- 'tools/**'
- 'po/**'
- 'meson*'
- 'VERSION'
- 'packaging/macos/**'
- '.github/workflows/macos-build.yml'
pull_request:
paths:
- 'src/**'
- 'plugins/**'
- 'data/**'
- 'tools/**'
- 'po/**'
- 'meson*'
- 'VERSION'
- 'packaging/macos/**'
- '.github/workflows/macos-build.yml'
permissions:
contents: read
jobs:
build:
if: >-
github.event_name == 'pull_request' ||
(github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')) ||
(github.event_name == 'workflow_dispatch' && !inputs.sign_and_notarize)
name: Native ${{ matrix.arch }} bundle
strategy:
fail-fast: false
matrix:
include:
- runner: macos-15
arch: arm64
- runner: macos-15-intel
arch: x86_64
runs-on: ${{ matrix.runner }}
timeout-minutes: 90
env:
HOMEBREW_NO_AUTO_UPDATE: '1'
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
- name: Install native dependencies
run: brew bundle --file packaging/macos/Brewfile
- name: Test packaging logic
run: python3 -m unittest discover -s packaging/macos/tests -v
- name: Build and test application
run: python3 packaging/macos/build.py --build-number '${{ github.run_number }}'
- name: Verify relocated startup
run: python3 packaging/macos/smoke.py dist/ZoiteChat.app
# Desktop capture can be unavailable on a runner image. Preserve the
# existing build gate and publish the separate visual-check outcome.
- name: Exercise IRC and capture the macOS application window
continue-on-error: true
timeout-minutes: 5
run: python3 packaging/macos/visual-smoke.py dist/ZoiteChat.app
- name: Upload screenshot and visual-check evidence
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: ZoiteChat-macos-${{ matrix.arch }}-visual-check
path: dist/visual-check/
if-no-files-found: ignore
retention-days: 14
- name: Create artifact preserving the application signature
run: ditto -c -k --keepParent dist/ZoiteChat.app dist/ZoiteChat-${{ matrix.arch }}.zip
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: ZoiteChat-macos-${{ matrix.arch }}
path: dist/ZoiteChat-${{ matrix.arch }}.zip
if-no-files-found: error
- name: Upload build logs on failure
if: failure()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: ZoiteChat-macos-${{ matrix.arch }}-logs
path: build-macos/meson-logs/
if-no-files-found: ignore
release:
name: Signed and notarized ${{ matrix.arch }} release
if: >-
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) ||
(github.event_name == 'workflow_dispatch' && inputs.sign_and_notarize && github.ref == 'refs/heads/master')
environment: macos-release
strategy:
fail-fast: false
matrix:
include:
- runner: macos-15
arch: arm64
- runner: macos-15-intel
arch: x86_64
runs-on: ${{ matrix.runner }}
timeout-minutes: 180
env:
HOMEBREW_NO_AUTO_UPDATE: '1'
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
persist-credentials: false
- name: Validate release settings before building
env:
MACOS_CERTIFICATE_P12_BASE64: ${{ secrets.MACOS_CERTIFICATE_P12_BASE64 }}
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
MACOS_SIGNING_IDENTITY: ${{ vars.MACOS_SIGNING_IDENTITY || secrets.MACOS_SIGNING_IDENTITY }}
APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
run: python3 packaging/macos/release.py --check-config
- name: Install native dependencies
run: brew bundle --file packaging/macos/Brewfile
- name: Test packaging and release logic
run: python3 -m unittest discover -s packaging/macos/tests -v
- name: Build and test application
run: python3 packaging/macos/build.py --build-number '${{ github.run_number }}'
- name: Verify relocated startup
run: python3 packaging/macos/smoke.py dist/ZoiteChat.app
- name: Sign, notarize, staple and verify release
env:
MACOS_CERTIFICATE_P12_BASE64: ${{ secrets.MACOS_CERTIFICATE_P12_BASE64 }}
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
MACOS_SIGNING_IDENTITY: ${{ vars.MACOS_SIGNING_IDENTITY || secrets.MACOS_SIGNING_IDENTITY }}
APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
run: >-
python3 packaging/macos/release.py
--app dist/ZoiteChat.app
--output dist/ZoiteChat-${{ matrix.arch }}-signed-notarized.zip
--diagnostics dist/notarization
--notary-timeout 60m
- name: Upload signed and notarized application
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: ZoiteChat-macos-${{ matrix.arch }}-signed-notarized
path: dist/ZoiteChat-${{ matrix.arch }}-signed-notarized.zip
if-no-files-found: error
- name: Upload notarization diagnostics
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: ZoiteChat-macos-${{ matrix.arch }}-notarization-log
path: dist/notarization/*.json
if-no-files-found: ignore
- name: Upload build logs on failure
if: failure()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: ZoiteChat-macos-${{ matrix.arch }}-release-build-logs
path: build-macos/meson-logs/
if-no-files-found: ignore
+1 -42
View File
@@ -4,7 +4,6 @@ on:
push:
branches:
- master
- 'release/**'
pull_request:
branches:
- master
@@ -66,33 +65,9 @@ jobs:
Download-WithRetry -Url https://github.com/jrsoftware/issrc/releases/download/is-6_7_1/innosetup-6.7.1.exe -OutFile deps\innosetup-unicode.exe
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK3_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.1/GTK3_Gvsbuild_zoitechat-2.18.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
Expand-Archive -LiteralPath deps\gtk-${{ matrix.arch }}.zip -DestinationPath C:\gtk-build\gtk\x64\release -Force
# The GTK3 archive omits librsvg. Add only its renderer, loader and
# license from the companion release, keeping the GTK3 DLLs intact.
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK4_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\svg-runtime.zip
if ((Get-FileHash deps\svg-runtime.zip -Algorithm SHA256).Hash -ne 'fb657f9ebae3a6807defb15e66091d643a703ee66cb37488e3e11e5646f45adb') {
throw 'Unexpected SVG runtime archive checksum'
}
$svgArchive = [System.IO.Compression.ZipFile]::OpenRead((Resolve-Path deps\svg-runtime.zip))
try {
foreach ($name in @('bin/rsvg-2-2.dll', 'lib/gdk-pixbuf-2.0/2.10.0/loaders/pixbufloader_svg.dll', 'share/doc/librsvg/COPYING.LIB')) {
$entry = $svgArchive.GetEntry($name)
if ($null -eq $entry) { throw "Missing SVG runtime file: $name" }
$destination = Join-Path 'C:\gtk-build\gtk\x64\release' $name
New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destination, $true)
}
}
finally { $svgArchive.Dispose() }
# This loads the module now, catching missing DLLs before the build.
& C:\gtk-build\gtk\x64\release\bin\gdk-pixbuf-query-loaders.exe --update-cache
if ($LASTEXITCODE -ne 0) { throw 'Could not generate the pixbuf loader cache' }
if (-not (Select-String -LiteralPath 'C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' -SimpleMatch '"svg"')) {
throw 'SVG loader could not be loaded with the GTK3 runtime'
}
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-hicolor-icon-theme-0.18-1-any.pkg.tar.zst -OutFile deps\hicolor-icon-theme.pkg.tar.zst
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\hicolor-icon-theme.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith('mingw64/share/icons/hicolor/')];tf.close();reader.close();f.close()"
@@ -198,22 +173,6 @@ jobs:
)
shell: cmd
- name: Test emoji catalog, font coverage and picker
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
set "PATH=%CD%\..\zoitechat-build\x64\rel;%PATH%"
set "GDK_PIXBUF_MODULE_FILE=%CD%\..\zoitechat-build\x64\rel\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache"
set "ZOITECHAT_EMOJI_FONT=%CD%\..\zoitechat-build\x64\rel\share\fonts\zoitechat\NotoColorEmoji.ttf"
fc /b data\fonts\NotoColorEmoji.ttf "%ZOITECHAT_EMOJI_FONT%"
if errorlevel 1 exit /b 1
for %%T in (data font ui) do (
msbuild win32\emoji-tests.vcxproj /m /verbosity:minimal /p:Configuration=Release /p:Platform=x64 /p:EmojiTestKind=%%T
if errorlevel 1 exit /b 1
..\zoitechat-build\x64\tests\emoji-%%T-tests.exe --tap
if errorlevel 1 exit /b 1
)
- name: Preparing Artifacts
run: |
move ..\zoitechat-build\${{ matrix.platform }}\ZoiteChat-*.exe .\
-428
View File
@@ -1,428 +0,0 @@
name: Windows MSI/MSIX Build
on:
push:
branches:
- master
- 'release/**'
pull_request:
branches:
- master
workflow_dispatch:
jobs:
windows_msi_build:
runs-on: windows-2022
permissions:
contents: read
id-token: write
attestations: write
artifact-metadata: write
strategy:
matrix:
platform: [x64]
arch: [x64]
fail-fast: false
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.14.3'
architecture: ${{ matrix.arch }}
- name: Install Dependencies
shell: pwsh
run: |
New-Item -Name "deps" -ItemType "Directory" -Force | Out-Null
python -m pip install --upgrade pip
python -m pip install cffi
python -m pip install zstandard
$ProgressPreference = 'SilentlyContinue'
function Download-WithRetry {
param(
[string]$Url,
[string]$OutFile,
[int]$MaxAttempts = 5,
[int]$InitialDelaySeconds = 2
)
for ($attempt = 1; $attempt -le $MaxAttempts; $attempt++) {
try {
Invoke-WebRequest -Uri $Url -OutFile $OutFile -ErrorAction Stop
return
}
catch {
if ($attempt -eq $MaxAttempts) {
throw
}
Start-Sleep -Seconds ($InitialDelaySeconds * [math]::Pow(2, $attempt - 1))
}
}
}
# The existing solution includes installer.vcxproj, so Inno Setup is
# still required to build the unmodified solution. This workflow does
# not publish that EXE; it packages the same staged rel tree as MSI/MSIX.
Download-WithRetry -Url https://github.com/jrsoftware/issrc/releases/download/is-6_7_1/innosetup-6.7.1.exe -OutFile deps\innosetup-unicode.exe
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
# Use the same GTK runtime as the existing Windows EXE workflow.
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK3_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
Expand-Archive -LiteralPath deps\gtk-${{ matrix.arch }}.zip -DestinationPath C:\gtk-build\gtk\x64\release -Force
# The GTK3 bundle does not contain librsvg. Restore the renderer,
# pixbuf loader, and license from the matching GTK4 bundle. Do not
# replace the rest of the GTK3 runtime with GTK4 libraries.
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK4_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\svg-runtime.zip
if ((Get-FileHash deps\svg-runtime.zip -Algorithm SHA256).Hash -ne 'fb657f9ebae3a6807defb15e66091d643a703ee66cb37488e3e11e5646f45adb') {
throw 'Unexpected SVG runtime archive checksum'
}
$svgArchive = [System.IO.Compression.ZipFile]::OpenRead((Resolve-Path deps\svg-runtime.zip))
try {
foreach ($name in @('bin/rsvg-2-2.dll', 'lib/gdk-pixbuf-2.0/2.10.0/loaders/pixbufloader_svg.dll', 'share/doc/librsvg/COPYING.LIB')) {
$entry = $svgArchive.GetEntry($name)
if ($null -eq $entry) { throw "Missing SVG runtime file: $name" }
$destination = Join-Path 'C:\gtk-build\gtk\x64\release' $name
New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destination, $true)
}
}
finally { $svgArchive.Dispose() }
# Ensure SVG remains loadable before compiling or packaging.
& C:\gtk-build\gtk\x64\release\bin\gdk-pixbuf-query-loaders.exe --update-cache
if ($LASTEXITCODE -ne 0) { throw 'Could not generate the pixbuf loader cache' }
if (-not (Select-String -LiteralPath 'C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' -SimpleMatch '"svg"')) {
throw 'SVG loader could not be loaded with the GTK3 runtime'
}
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-hicolor-icon-theme-0.18-1-any.pkg.tar.zst -OutFile deps\hicolor-icon-theme.pkg.tar.zst
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\hicolor-icon-theme.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith('mingw64/share/icons/hicolor/')];tf.close();reader.close();f.close()"
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-libarchive-3.8.6-1-any.pkg.tar.zst -OutFile deps\libarchive.pkg.tar.zst
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\libarchive.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith(('mingw64/include/archive','mingw64/lib/libarchive','mingw64/bin/libarchive'))];tf.close();reader.close();f.close()"
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor) {
New-Item -Path C:\gtk-build\gtk\x64\release\share\icons -ItemType Directory -Force | Out-Null
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor -Destination C:\gtk-build\gtk\x64\release\share\icons\hicolor -Recurse -Force
}
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\include) {
New-Item -Path C:\gtk-build\gtk\x64\release\include -ItemType Directory -Force | Out-Null
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\include\archive* -Destination C:\gtk-build\gtk\x64\release\include -Recurse -Force
}
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\lib) {
New-Item -Path C:\gtk-build\gtk\x64\release\lib -ItemType Directory -Force | Out-Null
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\lib\libarchive* -Destination C:\gtk-build\gtk\x64\release\lib -Force
}
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\bin) {
New-Item -Path C:\gtk-build\gtk\x64\release\bin -ItemType Directory -Force | Out-Null
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\bin\libarchive*.dll -Destination C:\gtk-build\gtk\x64\release\bin -Force
}
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64) {
Remove-Item -Path C:\gtk-build\gtk\x64\release\mingw64 -Recurse -Force
}
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/gendef20260315.7z -OutFile deps\gendef.7z
& 7z.exe x deps\gendef.7z -oC:\gtk-build
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/WinSparkle-20260315.7z -OutFile deps\WinSparkle.7z
& 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/perl-5.42.0.1-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.42.0.1\${{ matrix.platform }}
$pyRoot = $env:pythonLocation
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
foreach ($pyDir in @("C:\gtk-build\python-3.14.3", "C:\gtk-build\python-3.14")) {
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
$target = Join-Path $pyDir "${{ matrix.platform }}"
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
}
- uses: actions/setup-python@v6
with:
python-version: '3.8.10'
architecture: ${{ matrix.arch }}
- name: Prepare Python 3.8
shell: pwsh
run: |
python -m pip install --upgrade pip
python -m pip install cffi
$pyRoot = $env:pythonLocation
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
foreach ($pyDir in @("C:\gtk-build\python-3.8.10", "C:\gtk-build\python-3.8")) {
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
$target = Join-Path $pyDir "${{ matrix.platform }}"
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
}
- name: Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
set "PYTHON_DIR=C:\gtk-build\python-3.14.3\${{ matrix.platform }}"
if not exist "%PYTHON_DIR%\libs\python314.lib" (
echo Missing %PYTHON_DIR%\libs\python314.lib
dir "%PYTHON_DIR%\libs"
exit /b 1
)
set "PYTHON38_DIR=C:\gtk-build\python-3.8\${{ matrix.platform }}"
if not exist "%PYTHON38_DIR%\libs\python38.lib" (
echo Missing %PYTHON38_DIR%\libs\python38.lib
dir "%PYTHON38_DIR%\libs"
exit /b 1
)
if not exist "%PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd" (
echo Missing %PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd
exit /b 1
)
set "LIB=%PYTHON_DIR%\libs;%LIB%"
set "INCLUDE=%PYTHON_DIR%\include;%INCLUDE%"
powershell -NoProfile -ExecutionPolicy Bypass -Command "$archiveLib='C:\gtk-build\gtk\x64\release\lib\libarchive.lib'; if (-not (Test-Path $archiveLib)) { $archiveDll = Get-ChildItem 'C:\gtk-build\gtk\x64\release\bin\libarchive*.dll' | Select-Object -First 1; if ($archiveDll) { Push-Location 'C:\gtk-build\gtk\x64\release\lib'; & 'C:\gtk-build\gendef\gendef.exe' $archiveDll.FullName | Out-Null; $archiveDef = Get-ChildItem 'libarchive*.def' | Select-Object -First 1; if ($archiveDef) { & lib /def:$archiveDef.Name /machine:${{ matrix.platform }} /out:libarchive.lib | Out-Null }; Pop-Location } }"
msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
if errorlevel 1 exit /b 1
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\plugins\hcpython38.dll" (
echo hcpython38.dll was not built
exit /b 1
)
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\_cffi_backend.cp38*.pyd" (
echo _cffi_backend for Python 3.8 was not staged for the installer
exit /b 1
)
# Master added native emoji font staging and tests after the release
# branch split. Run these before packaging so MSI/MSIX use verified files.
- name: Test emoji catalog, font coverage and picker
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
set "PATH=%CD%\..\zoitechat-build\x64\rel;%PATH%"
set "GDK_PIXBUF_MODULE_FILE=%CD%\..\zoitechat-build\x64\rel\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache"
set "ZOITECHAT_EMOJI_FONT=%CD%\..\zoitechat-build\x64\rel\share\fonts\zoitechat\NotoColorEmoji.ttf"
fc /b data\fonts\NotoColorEmoji.ttf "%ZOITECHAT_EMOJI_FONT%"
if errorlevel 1 exit /b 1
for %%T in (data font ui) do (
msbuild win32\emoji-tests.vcxproj /m /verbosity:minimal /p:Configuration=Release /p:Platform=x64 /p:EmojiTestKind=%%T
if errorlevel 1 exit /b 1
..\zoitechat-build\x64\tests\emoji-%%T-tests.exe --tap
if errorlevel 1 exit /b 1
)
- name: Install WiX Toolset
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
# Keep this pinned. WiX v6 introduced OSMF terms and WiX v7 adds
# explicit EULA acceptance; do not silently accept new terms in CI.
dotnet tool install --tool-path .wix wix --version 5.0.2
if ($LASTEXITCODE -ne 0) { throw 'Failed to install WiX Toolset 5.0.2' }
& .\.wix\wix.exe --version
if ($LASTEXITCODE -ne 0) { throw 'WiX Toolset could not be executed' }
- name: Build MSI
id: build_msi
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$rawVersion = (Get-Content VERSION -Raw).Trim()
if ($rawVersion -notmatch '^(\d+)\.(\d+)\.(\d+)') {
throw "VERSION '$rawVersion' does not begin with an MSI-compatible major.minor.patch version"
}
# Keep the full development version in the filename, while MSI's
# ProductVersion is numeric (e.g. 2.20.0-dev -> 2.20.0).
$msiVersion = "$($Matches[1]).$($Matches[2]).$($Matches[3])"
$safeVersion = $rawVersion -replace '[^0-9A-Za-z._-]', '-'
$sourceDir = (Resolve-Path "..\zoitechat-build\${{ matrix.platform }}\rel").Path
$outputPath = Join-Path $PWD "ZoiteChat-${safeVersion}_${{ matrix.arch }}.msi"
if (-not (Test-Path (Join-Path $sourceDir 'zoitechat.exe'))) {
throw "Staged ZoiteChat executable is missing from $sourceDir"
}
& .\.wix\wix.exe build win32\wix\zoitechat.wxs `
-arch x64 `
-d "SourceDir=$sourceDir" `
-d "ProductVersion=$msiVersion" `
-out $outputPath
if ($LASTEXITCODE -ne 0) { throw 'WiX MSI build failed' }
if (-not (Test-Path $outputPath)) {
throw "Expected MSI was not created: $outputPath"
}
"path=$outputPath" >> $env:GITHUB_OUTPUT
"filename=$(Split-Path $outputPath -Leaf)" >> $env:GITHUB_OUTPUT
- name: Test MSI administrative extraction
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$msi = '${{ steps.build_msi.outputs.path }}'
$adminImage = Join-Path $PWD 'msi-admin-image'
New-Item -ItemType Directory -Path $adminImage -Force | Out-Null
$arguments = "/a `"$msi`" /qn TARGETDIR=`"$adminImage`""
$process = Start-Process -FilePath msiexec.exe -ArgumentList $arguments -Wait -PassThru
if ($process.ExitCode -ne 0) {
throw "MSI administrative extraction failed with exit code $($process.ExitCode)"
}
foreach ($requiredFile in @(
'zoitechat.exe',
'hclua.dll',
'hcupd.dll',
'WinSparkle.dll',
'hcchecksum.dll',
'hcexec.dll',
'hcfishlim.dll',
'hcsysinfo.dll',
'system.png',
'hcperl.dll',
'hcpython3.dll',
'hcpython38.dll',
'NotoColorEmoji.ttf',
'OFL.txt'
)) {
$match = Get-ChildItem -Path $adminImage -Filter $requiredFile -File -Recurse | Select-Object -First 1
if ($null -eq $match) {
throw "Administrative image does not contain required normal-install file: $requiredFile"
}
}
foreach ($requiredPattern in @('_cffi_backend.cp314*.pyd', '_cffi_backend.cp38*.pyd')) {
$match = Get-ChildItem -Path $adminImage -Filter $requiredPattern -File -Recurse | Select-Object -First 1
if ($null -eq $match) {
throw "Administrative image does not contain required Python support file: $requiredPattern"
}
}
foreach ($requiredPythonFile in @('zoitechat.py', '_zoitechat.py', 'hexchat.py', 'xchat.py')) {
$match = Get-ChildItem -Path $adminImage -Filter $requiredPythonFile -File -Recurse |
Where-Object { $_.Directory.Name -eq 'python' } |
Select-Object -First 1
if ($null -eq $match) {
throw "Administrative image does not contain required Python bridge file: $requiredPythonFile"
}
}
foreach ($excludedFile in @(
'portable-mode',
'zoitechat-text.exe'
)) {
$match = Get-ChildItem -Path $adminImage -Filter $excludedFile -File -Recurse | Select-Object -First 1
if ($null -ne $match) {
throw "MSI incorrectly contains Inno custom/portable-only file: $excludedFile"
}
}
- name: Build MSIX
id: build_msix
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$rawVersion = (Get-Content VERSION -Raw).Trim()
if ($rawVersion -notmatch '^(\d+)\.(\d+)\.(\d+)') {
throw "VERSION '$rawVersion' does not begin with a Store-compatible major.minor.build version"
}
$versionParts = @(
[int]$Matches[1],
[int]$Matches[2],
[int]$Matches[3]
)
if ($versionParts[0] -eq 0) {
throw 'The Microsoft Store requires a non-zero major package version.'
}
foreach ($part in $versionParts) {
if ($part -lt 0 -or $part -gt 65535) {
throw "MSIX version component '$part' is outside the Store-supported 0-65535 range."
}
}
# Partner Center reserves the fourth field as 0. A -dev version
# is packaged as a valid 2.20.0.0, without changing VERSION.
$packageVersion = "$($versionParts[0]).$($versionParts[1]).$($versionParts[2]).0"
$safeVersion = $rawVersion -replace '[^0-9A-Za-z._-]', '-'
$sourceDir = (Resolve-Path "..\zoitechat-build\${{ matrix.platform }}\rel").Path
$outputPath = Join-Path $PWD "ZoiteChat-${safeVersion}_${{ matrix.arch }}.msix"
# Reserved ZoiteChat identity from the release branch. Adjust only
# if the Product identity page in Partner Center changes.
$identityName = 'deependtilde.ZoiteChat'
$publisher = 'CN=6C7766BB-6AC6-488B-A09E-E3F8E68E63E4'
$publisherDisplayName = 'deepend_tilde'
$artifactName = 'MSIX Store Package ${{ matrix.arch }}'
Write-Host "Building Store MSIX for identity: $identityName"
& .\win32\msix\build-msix.ps1 `
-SourceDir $sourceDir `
-OutputPath $outputPath `
-PackageVersion $packageVersion `
-IdentityName $identityName `
-Publisher $publisher `
-PublisherDisplayName $publisherDisplayName `
-SelfSign
if ($LASTEXITCODE -ne 0) {
throw 'MSIX build script failed'
}
if (-not (Test-Path $outputPath)) {
throw "Expected MSIX was not created: $outputPath"
}
"path=$outputPath" >> $env:GITHUB_OUTPUT
"filename=$(Split-Path $outputPath -Leaf)" >> $env:GITHUB_OUTPUT
"package_version=$packageVersion" >> $env:GITHUB_OUTPUT
"store_ready=true" >> $env:GITHUB_OUTPUT
"artifact_name=$artifactName" >> $env:GITHUB_OUTPUT
- name: Upload MSI Installer
id: upload_msi
uses: actions/upload-artifact@v6
with:
name: MSI Installer ${{ matrix.arch }}
path: ${{ steps.build_msi.outputs.path }}
if-no-files-found: error
- name: Attest MSI Installer (Artifact Attestation)
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
uses: actions/attest-build-provenance@v3
with:
subject-name: MSI Installer ${{ matrix.arch }}
subject-digest: sha256:${{ steps.upload_msi.outputs.artifact-digest }}
- name: Upload MSIX Package
id: upload_msix
uses: actions/upload-artifact@v6
with:
name: ${{ steps.build_msix.outputs.artifact_name }}
path: ${{ steps.build_msix.outputs.path }}
if-no-files-found: error
- name: Attest MSIX Package (Artifact Attestation)
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
uses: actions/attest-build-provenance@v3
with:
subject-name: ${{ steps.build_msix.outputs.artifact_name }}
subject-digest: sha256:${{ steps.upload_msix.outputs.artifact-digest }}
-6
View File
@@ -27,9 +27,3 @@ osx/.ZoiteChat.app
*.dmg
*.VC.db
*.VC.opendb
# Native macOS packaging output
/build-macos*/
/dist/
/packaging/macos/__pycache__/
/packaging/macos/tests/__pycache__/
-7
View File
@@ -1,7 +0,0 @@
version: 2
sphinx:
configuration: 'docs/conf.py'
build:
os: 'ubuntu-22.04'
tools:
python: '3.11'
-1
View File
@@ -1 +0,0 @@
2.20.0-dev
-14
View File
@@ -1,20 +1,6 @@
ZoiteChat ChangeLog
=================
2.19.0 (2026-07-28)
-------------------
- Added Python 3.8 compatibility for older Windows releases.
- Added on-demand SASL password prompts, including renewed prompts after reconnecting.
- Corrected NickServ authentication to use the decrypted password for the active network.
- Made system theme matching the default and polished GTK3 theme integration.
- Applied more settings changes immediately, reducing the need to restart ZoiteChat.
- Added descriptive tooltips to the color picker choices and refined default text-event colors.
- Stabilized channel tree font handling across palette and theme updates.
- Corrected the chat scrollbar increment used by its arrow buttons.
- Improved Windows URL launching through the native shell.
- Restored expected minimize behavior when clicking ZoiteChat on the Windows taskbar.
2.18.3 (2026-06-29)
-------------------
+7 -27
View File
@@ -5,34 +5,14 @@ Unicode Emoji 17.0. It is vendored from Debian's
`fonts-noto-color-emoji` 2.051 package, built from the corresponding
Google Noto Emoji release.
Every GTK build installs this exact file: Windows (installer and portable
build files), AppImage, Flatpak and native Meson/RPM builds. It is loaded
into a private Pango/FreeType font map as `ZoiteChat Emoji`; an older system
Noto font cannot replace it. No font is installed globally on Windows.
The font is bundled only with Windows builds, where it is installed
inside the application and registered only for the ZoiteChat process.
It is not installed as a global operating-system font.
Chat windows and the emoji picker share this map. Fontconfig still loads
system fonts and configuration for ordinary text, and the configured text
font, size and style remain in effect. In particular, plain digits, `#`
and `*` are not assigned emoji metrics.
Windows uses the same FreeType backend rather than GDI registration or an
OS-version-specific picker. The dependency bundle already ships FreeType,
Fontconfig and PangoFT2. This rendering path does not require Windows' native
color-font support. Actual Windows 7 execution still needs testing on that OS.
Meson requires PangoFT2 >= 1.44 and Fontconfig >= 2.13. Normal installations
load `share/fonts/zoitechat/NotoColorEmoji.ttf` beneath the configured data
directory; Windows resolves it relative to the executable. AppImage sets
`ZOITECHAT_EMOJI_FONT` to its own copy. For an uninstalled development build:
```sh
ZOITECHAT_EMOJI_FONT="$PWD/data/fonts/NotoColorEmoji.ttf" build/src/fe-gtk/zoitechat
```
A missing/unloadable file logs a warning and retains system-font fallback.
CI verifies the installed copy and tests catalog/font coverage; AppImage and
Windows also run the interactive picker regression tests. Native themes,
DPI and different Pango/Cairo versions can still affect pixel-level output.
Linux (and other Unix) builds do not install this file. They rely on
the emoji font provided by the operating system instead — typically the
distribution's Noto Color Emoji package (`fonts-noto-color-emoji` on
Debian/Ubuntu, `google-noto-color-emoji-fonts` on Fedora).
Upstream release: https://github.com/googlefonts/noto-emoji/releases/tag/v2.051
+4
View File
@@ -3,7 +3,11 @@ if get_option('plugin')
endif
if get_option('gtk-frontend')
# The bundled emoji font ships only with Windows builds; Linux and other
# Unix systems use the system emoji font package instead.
if host_machine.system() == 'windows'
subdir('fonts')
endif
subdir('icons')
subdir('misc')
subdir('man')
+1 -1
View File
@@ -2,7 +2,6 @@ appdir = join_paths(get_option('datadir'), 'applications')
metainfodir = join_paths(get_option('datadir'), 'metainfo')
mimedir = join_paths(get_option('datadir'), 'mime', 'packages')
desktop_utils = find_program('desktop-file-validate', required: false)
appstreamcli = find_program('appstreamcli', required: false)
if get_option('gtk-frontend')
if get_option('install-appdata')
@@ -14,6 +13,7 @@ if get_option('gtk-frontend')
install_dir: metainfodir
)
appstreamcli = find_program('appstreamcli', required: false)
if appstreamcli.found()
test('Validate net.zoite.Zoitechat.appdata.xml', appstreamcli,
args: ['validate', zoitechat_appdata]
@@ -29,38 +29,6 @@
<id>zoitechat.desktop</id>
</provides>
<releases>
<release date="2026-09-15" version="2.19.1">
<description>
<ul>
<li>Fixed /msg messages showing twice on servers using IRCv3 <code>echo-message</code>.</li>
<li>Fixed escaping a leading command slash so <code>//text</code> sends <code>/text</code> as normal chat.</li>
<li>Fixed automatic away clearing when sending messages on servers using <code>echo-message</code>.</li>
<li>Fixed other users' away status not updating until rejoining a channel when <code>away-notify</code> updates are missed.</li>
<li>Fixed private messages and <code>/me</code> actions being routed to the wrong window when using WeeChat's IRC relay, while preserving channel ACTION routing.</li>
<li>Fixed a Flatpak startup error caused by the D-Bus service still using the old HexChat app ID.</li>
<li>Fixed optional Windows 10 theme downloads in the Windows installer.</li>
<li>Fixed the GTK warning when switching from channel tabs to the channel tree.</li>
<li>Fixed GTK3 theme archive root detection so themes with an <code>index.theme</code> file are preferred correctly.</li>
<li>Fixed source-build configuration when plugin AppStream metadata installation is disabled, and corrected the minimum Meson version to 0.59.</li>
</ul>
</description>
</release>
<release date="2026-07-28" version="2.19.0">
<description>
<ul>
<li>Added Python 3.8 compatibility for older Windows releases.</li>
<li>Added on-demand SASL password prompts, including renewed prompts after reconnecting.</li>
<li>Corrected NickServ authentication to use the decrypted password for the active network.</li>
<li>Made system theme matching the default and polished GTK3 theme integration.</li>
<li>Applied more settings changes immediately, reducing the need to restart ZoiteChat.</li>
<li>Added descriptive tooltips to the color picker choices and refined default text-event colors.</li>
<li>Stabilized channel tree font handling across palette and theme updates.</li>
<li>Corrected the chat scrollbar increment used by its arrow buttons.</li>
<li>Improved Windows URL launching through the native shell.</li>
<li>Restored expected minimize behavior when clicking ZoiteChat on the Windows taskbar.</li>
</ul>
</description>
</release>
<release date="2026-06-29" version="2.18.3">
<description>
<ul>
-15
View File
@@ -1,15 +0,0 @@
# Source https://coderwall.com/p/wws2uq
sudo: false
language: python
python:
- "2.7"
cache:
pip: true
custom_install: true
# command to install dependencies
install: pip install --upgrade Sphinx
# command to run tests
script: sphinx-build -n -b html -d _build/doctrees . _build/html
# Flags used here, not in `make html`:
# -n Run in nit-picky mode. Currently, this generates warnings for all missing references.
# -W Turn warnings into errors. This means that the build stops at the first warning and sphinx-build exits with exit status 1.
-94
View File
@@ -1,94 +0,0 @@
[main]
host = https://www.transifex.com
type = PO
[zoitechat-documentation.addons]
file_filter = po/<lang>/LC_MESSAGES/addons.po
source_file = _build/locale/addons.pot
source_lang = en
[zoitechat-documentation.appearance]
file_filter = po/<lang>/LC_MESSAGES/appearance.po
source_file = _build/locale/appearance.pot
source_lang = en
[zoitechat-documentation.building]
file_filter = po/<lang>/LC_MESSAGES/building.po
source_file = _build/locale/building.pot
source_lang = en
[zoitechat-documentation.changelog]
file_filter = po/<lang>/LC_MESSAGES/changelog.po
source_file = _build/locale/changelog.pot
source_lang = en
[zoitechat-documentation.commands]
file_filter = po/<lang>/LC_MESSAGES/commands.po
source_file = _build/locale/commands.pot
source_lang = en
#[zoitechat-documentation.developers]
#file_filter = po/<lang>/LC_MESSAGES/developers.po
#source_file = _build/locale/developers.pot
#source_lang = en
[zoitechat-documentation.faq]
file_filter = po/<lang>/LC_MESSAGES/faq.po
source_file = _build/locale/faq.pot
source_lang = en
#[zoitechat-documentation.getting_started]
#file_filter = po/<lang>/LC_MESSAGES/getting_started.po
#source_file = _build/locale/getting_started.pot
#source_lang = en
#[zoitechat-documentation.helping]
#file_filter = po/<lang>/LC_MESSAGES/helping.po
#source_file = _build/locale/helping.pot
#source_lang = en
#[zoitechat-documentation.index]
#file_filter = po/<lang>/LC_MESSAGES/index.po
#source_file = _build/locale/index.pot
#source_lang = en
#[zoitechat-documentation.perl_modules]
#file_filter = po/<lang>/LC_MESSAGES/perl_modules.po
#source_file = _build/locale/perl_modules.pot
#source_lang = en
#[zoitechat-documentation.plugins]
#file_filter = po/<lang>/LC_MESSAGES/plugins.po
#source_file = _build/locale/plugins.pot
#source_lang = en
#[zoitechat-documentation.script_dbus]
#file_filter = po/<lang>/LC_MESSAGES/script_dbus.po
#source_file = _build/locale/script_dbus.pot
#source_lang = en
#[zoitechat-documentation.script_javascript]
#file_filter = po/<lang>/LC_MESSAGES/script_javascript.po
#source_file = _build/locale/script_javascript.pot
#source_lang = en
#[zoitechat-documentation.script_perl]
#file_filter = po/<lang>/LC_MESSAGES/script_perl.po
#source_file = _build/locale/script_perl.pot
#source_lang = en
#[zoitechat-documentation.script_python]
#file_filter = po/<lang>/LC_MESSAGES/script_python.po
#source_file = _build/locale/script_python.pot
#source_lang = en
[zoitechat-documentation.settings]
file_filter = po/<lang>/LC_MESSAGES/settings.po
source_file = _build/locale/settings.pot
source_lang = en
[zoitechat-documentation.tips]
file_filter = po/<lang>/LC_MESSAGES/tips.po
source_file = _build/locale/tips.pot
source_lang = en
-157
View File
@@ -1,157 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ZoiteChat.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ZoiteChat.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/ZoiteChat"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ZoiteChat"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
server:
@cd $(BUILDDIR)/html
@python -u -m SimpleHTTPServer
-85
View File
@@ -1,85 +0,0 @@
# ZoiteChat documentation
## Getting started
* Install [Python 3](https://www.python.org/)
* Install pip for Python 3
* Install Sphinx: `python -m pip install sphinx`
* On Windows: ensure your Python 3 installation is on `PATH`
* Run `make html` to build the HTML files
* Run the Python webserver to test your changes: `make server`
(http://localhost:8000/)
## Conventions
* 4 Spaces are used for indentation.
* Ordered or unordered lists use visual indentation, where any non-list
subelement would use an indentation of a multiple of 4 again.
Example:
```rest
- a list item
- a list item
with a visually indented continuation
- a list item with a sub-list
- that is also visually indented
- a list item with a code block
.. code-block:: none
that is not visually indented
```
## HTML theme
The `zoitechat` theme inherits Sphinx's built-in `basic` theme. It uses the
same compact layout, blue navigation, and system fonts as zoitechat.org.
Appearance starts in System mode on each page. Light and Dark are available
for the current page; no cookies or browser storage are used.
The theme's templates are in `_theme/zoitechat/`. Its readable CSS and
JavaScript are in `_static/css/zoitechat-docs.css` and
`_static/js/zoitechat-docs.js`. No minification, JavaScript package manager,
external fonts, or CDN assets are required.
Navigation URLs, including `zoite_atlas_url`, are configured through
`html_context` in `conf.py`. The logo
is `_static/zoitechat-logo.svg`. Standard Sphinx search, indexes, source
links, anchors, translations, and previous/next links remain available.
The HTML output also works as locally installed documentation; project-site
links only access the network when clicked.
Build from the repository root:
```sh
sphinx-build -b html docs docs/_build/html
```
Use a clean output directory when switching themes, so stale Basicstrap
assets from an earlier build are not included in a package.
## Debian packaging
The active theme does not use the bundled Basicstrap, Bootstrap, jQuery,
jQuery Cookie, Font Awesome, or icon fonts. Its font stack includes DejaVu
Sans and DejaVu Sans Mono; no font files are bundled by the theme.
Packagers may exclude `docs/_theme/basicstrap/` from the source package.
The default theme continues to build without that directory. No pre-minified
third-party assets need to be added or rebuilt for this theme.
Build with the distribution's `python3-sphinx`. After installing the HTML
into the package staging directory, use `dh_sphinxdoc` (or `dh --with
sphinxdoc`) to replace Sphinx's standard JavaScript files with system
symlinks. Include `${sphinxdoc:Depends}` in the package dependencies and
`${sphinxdoc:Built-Using}` where required for generated assets. The custom
`zoitechat-docs.js` remains a small, readable project source file.
A built-in theme is still selectable with `-D html_theme=classic` if a
packager needs a different layout. The old RST content has existing build
diagnostics; changing the theme does not suppress or alter them.
Shared website chrome is in `_static/css/zoitechat-site.css`, copied from the main site. Keep that readable stylesheet in sync when changing the shared header, navigation, typography, or colours.
Binary file not shown.
-843
View File
@@ -1,843 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Keep the docs close to the desktop client and the main project's website. */
:root {
color-scheme: light;
--page: #ffffff;
--panel: #f1f2f3;
--text: #25282c;
--muted: #58616b;
--line: #bdc3c9;
--soft-line: #dce0e4;
--blue: #215a9e;
--link: #174f92;
--selection: #e6effa;
--code: #f2f4f6;
--comment: #58616b;
--string: #236741;
--number: #7842ab;
--font: system-ui, -apple-system, "Segoe UI", "DejaVu Sans", sans-serif;
--mono: Consolas, "DejaVu Sans Mono", "Liberation Mono", monospace;
}
html[data-theme="dark"] {
color-scheme: dark;
--page: #191c1f;
--panel: #25292d;
--text: #eef0f2;
--muted: #b2bbc4;
--line: #50575e;
--soft-line: #353c43;
--blue: #2865a8;
--link: #8dc0ff;
--selection: #233951;
--code: #111518;
--comment: #b2bbc4;
--string: #92d5ab;
--number: #dfacff;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme]) {
color-scheme: dark;
--page: #191c1f;
--panel: #25292d;
--text: #eef0f2;
--muted: #b2bbc4;
--line: #50575e;
--soft-line: #353c43;
--blue: #2865a8;
--link: #8dc0ff;
--selection: #233951;
--code: #111518;
--comment: #b2bbc4;
--string: #92d5ab;
--number: #dfacff;
}
}
* {
box-sizing: border-box;
}
html {
scroll-padding-top: 16px;
}
body {
margin: 0;
padding: 0;
background: var(--page);
color: var(--text);
font: 14px/1.7 var(--font);
}
a,
a:visited {
color: var(--link);
text-underline-offset: 3px;
}
a:hover {
text-decoration: underline;
}
:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
[hidden] {
display: none !important;
}
button,
input,
select {
font: inherit;
}
button,
summary,
select {
touch-action: manipulation;
}
button,
summary {
cursor: pointer;
}
img {
max-width: 100%;
height: auto;
}
h1,
h2,
h3,
h4 {
color: var(--text);
font-family: var(--font);
font-weight: 600;
line-height: 1.35;
}
h1 {
margin: 0 0 20px;
font-size: 28px;
letter-spacing: -0.5px;
}
h2 {
margin: 28px 0 12px;
font-size: 21px;
}
h3 {
margin: 22px 0 10px;
font-size: 17px;
}
h4 {
font-size: 15px;
}
p {
margin: 0 0 15px;
}
input,
select,
button {
min-height: 34px;
border: 1px solid var(--line);
border-radius: 2px;
padding: 6px 9px;
background: var(--page);
color: var(--text);
}
input[type="submit"],
button {
background: var(--panel);
}
input[type="submit"]:hover,
button:hover {
background: var(--selection);
}
.skip-link {
position: absolute;
top: -100px;
left: 15px;
z-index: 10;
padding: 10px;
background: var(--page);
}
.skip-link:focus {
top: 10px;
}
.site-header,
.docs-layout,
.site-footer {
width: min(1200px, calc(100% - 48px));
margin-inline: auto;
}
.site-header {
padding-top: 32px;
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding-bottom: 16px;
}
.brand {
display: flex;
align-items: center;
gap: 12px;
color: var(--text) !important;
text-decoration: none;
}
.brand img {
display: block;
width: 38px;
height: 42px;
}
.brand strong {
font-size: 28px;
font-weight: 650;
letter-spacing: -0.8px;
}
.appearance {
display: flex;
align-items: center;
gap: 10px;
color: var(--muted);
font-size: 11px;
}
.appearance select {
min-height: 30px;
padding: 3px 7px;
font-size: 12px;
}
.site-nav {
display: flex;
flex-wrap: wrap;
align-items: stretch;
border: 1px solid var(--line);
background: var(--panel);
}
.site-nav > a,
.support-menu > summary {
display: flex;
align-items: center;
min-height: 36px;
padding: 6px 15px;
color: var(--text);
font-size: 13px;
text-decoration: none;
}
.site-nav > a:hover,
.support-menu > summary:hover {
background: var(--selection);
color: var(--link);
}
.site-nav > a.selected {
background: var(--blue);
color: #ffffff;
}
.support-menu {
position: relative;
}
.support-menu > summary {
list-style: none;
}
.support-menu > summary::after {
content: "⌄";
margin-left: 8px;
}
.support-menu > summary::-webkit-details-marker {
display: none;
}
.support-links {
position: absolute;
right: 0;
top: 100%;
z-index: 5;
min-width: 235px;
padding: 5px;
border: 1px solid var(--line);
background: var(--page);
}
.support-links a {
display: block;
padding: 10px 12px;
text-decoration: none;
}
.support-links a:hover {
background: var(--selection);
}
.support-links small {
display: block;
color: var(--muted);
font-size: 11px;
}
.docs-location {
display: flex;
justify-content: space-between;
align-items: start;
gap: 20px;
margin-top: 12px;
color: var(--muted);
font-size: 11px;
}
.docs-location nav {
min-width: 0;
overflow-wrap: anywhere;
}
.docs-location nav > span {
margin-inline: 5px;
}
.docs-version {
flex-shrink: 0;
font-family: var(--mono);
}
.docs-layout {
display: grid;
grid-template-columns: 240px minmax(0, 1fr);
align-items: start;
gap: 36px;
padding-block: 26px 30px;
}
.docs-layout.no-sidebar {
display: block;
}
.docs-sidebar {
position: sticky;
top: 16px;
max-height: calc(100vh - 32px);
overflow: auto;
padding-right: 15px;
border-right: 1px solid var(--soft-line);
font-size: 13px;
}
.docs-navigation > summary {
margin-bottom: 14px;
padding: 5px 0;
color: var(--text);
font-weight: 600;
}
.docs-sidebar h2,
.docs-sidebar h3 {
margin: 20px 0 8px;
padding-bottom: 5px;
border-bottom: 1px solid var(--line);
font-size: 14px;
letter-spacing: 0;
}
.docs-sidebar ul {
margin: 0;
padding-left: 17px;
list-style: none;
}
.docs-sidebar nav > ul {
padding-left: 0;
}
.docs-sidebar li {
margin: 5px 0;
line-height: 1.55;
}
.docs-sidebar li.current > a,
.docs-sidebar a.current {
font-weight: 600;
}
.docs-sidebar .current > a {
text-decoration-thickness: 2px;
}
.docs-search > label {
display: block;
margin-bottom: 5px;
color: var(--muted);
font-size: 11px;
}
.search-inputs {
display: flex;
align-items: stretch;
gap: 5px;
}
.search-inputs input {
width: 100%;
min-width: 0;
font-size: 12px;
}
.search-inputs button {
flex-shrink: 0;
padding-inline: 7px;
font-size: 11px;
}
.docs-content {
min-width: 0;
overflow-wrap: break-word;
}
.docs-content > :first-child,
.docs-content > section:first-child > :first-child {
margin-top: 0;
}
.docs-content li {
margin-bottom: 5px;
}
.docs-content dl {
margin-bottom: 20px;
}
.docs-content dt {
margin-top: 14px;
color: var(--text);
}
.docs-content dd {
margin-left: 24px;
}
.docs-content code,
.docs-content pre,
.docs-content kbd {
font-family: var(--mono);
font-size: 0.9em;
}
.docs-content code.literal {
padding: 1px 4px;
border: 1px solid var(--soft-line);
background: var(--code);
}
.docs-content pre {
margin: 0;
white-space: pre;
line-height: 1.7;
}
.docs-content .highlight,
.docs-content .literal-block {
max-width: 100%;
margin: 16px 0;
padding: 14px;
overflow-x: auto;
border: 1px solid var(--line);
background: var(--code);
color: var(--text);
}
.highlight pre {
background: transparent;
}
.highlight span {
color: var(--text) !important;
}
.highlight .k,
.highlight .kc,
.highlight .kd,
.highlight .kn,
.highlight .kp,
.highlight .kr,
.highlight .kt,
.highlight .o,
.highlight .ow,
.highlight .nb,
.highlight .nf {
color: var(--link) !important;
}
.highlight .c,
.highlight .c1,
.highlight .cm,
.highlight .cp,
.highlight .cs,
.highlight .sd {
color: var(--comment) !important;
}
.highlight .s,
.highlight .s1,
.highlight .s2,
.highlight .sa,
.highlight .sb,
.highlight .sc,
.highlight .se,
.highlight .sh,
.highlight .si,
.highlight .sr,
.highlight .ss {
color: var(--string) !important;
}
.highlight .m,
.highlight .mb,
.highlight .mf,
.highlight .mh,
.highlight .mi,
.highlight .mo,
.highlight .il {
color: var(--number) !important;
}
table.docutils,
table.indextable,
table.genindextable {
width: 100%;
margin: 16px 0;
border-collapse: collapse;
font-size: 13px;
}
table.docutils th,
table.docutils td {
padding: 9px 12px;
border: 1px solid var(--line);
text-align: left;
vertical-align: top;
}
table.docutils th {
background: var(--panel);
}
table.docutils tbody tr:nth-child(even) {
background: var(--panel);
}
table.genindextable td,
table.indextable td {
vertical-align: top;
}
.docs-content .admonition,
.docs-content .topic,
.docs-content .sidebar {
float: none;
width: auto;
margin: 18px 0;
padding: 12px 16px;
border: 1px solid var(--soft-line);
border-left: 3px solid var(--blue);
background: var(--panel);
color: var(--text);
}
.docs-content .admonition-title,
.docs-content .topic-title,
.docs-content .sidebar-title {
margin-bottom: 6px;
font-size: 14px;
font-weight: 600;
}
.docs-content .admonition > :last-child,
.docs-content .topic > :last-child {
margin-bottom: 0;
}
.docs-content img,
.docs-content .figure {
max-width: 100%;
}
.docs-content img {
height: auto;
}
.docs-content .figure {
margin-inline: 0;
}
.docs-content .caption {
color: var(--muted);
font-size: 12px;
}
a.headerlink {
padding-left: 6px;
color: var(--muted);
font-size: 0.8em;
text-decoration: none;
visibility: hidden;
}
h1:hover > .headerlink,
h2:hover > .headerlink,
h3:hover > .headerlink,
h4:hover > .headerlink,
dt:hover > .headerlink,
a.headerlink:focus-visible {
visibility: visible;
}
.highlighted {
background: var(--selection);
color: var(--text);
}
.page-relations {
display: flex;
justify-content: space-between;
gap: 24px;
margin-top: 32px;
padding-top: 16px;
border-top: 1px solid var(--line);
font-size: 13px;
}
.page-relations > div {
max-width: 46%;
}
.page-relations > div:last-child {
margin-left: auto;
text-align: right;
}
.page-relations small {
display: block;
color: var(--muted);
font-size: 11px;
}
.site-footer {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 12px 20px;
padding: 17px 0 28px;
border-top: 1px solid var(--line);
color: var(--muted);
font-size: 11px;
}
.site-footer nav {
display: flex;
flex-wrap: wrap;
gap: 5px 16px;
}
@media (max-width: 1000px) {
.docs-layout {
grid-template-columns: 220px minmax(0, 1fr);
gap: 26px;
}
.site-nav > a,
.support-menu > summary {
padding-inline: 10px;
}
}
@media (max-width: 760px) {
.site-header,
.docs-layout,
.site-footer {
width: calc(100% - 30px);
}
.site-header {
padding-top: 18px;
}
.brand strong {
font-size: 25px;
}
.brand img {
width: 32px;
height: 36px;
}
.appearance > span {
display: none;
}
.site-nav > a,
.support-menu > summary {
min-height: 38px;
padding: 7px 9px;
font-size: 12px;
}
.docs-layout {
display: block;
padding-top: 18px;
}
.docs-sidebar {
position: static;
max-height: none;
margin-bottom: 23px;
padding: 0;
border: 0;
}
.docs-navigation {
padding: 7px 12px;
border: 1px solid var(--line);
background: var(--panel);
}
.docs-navigation > summary {
margin: 0;
}
.sidebar-content {
padding-top: 12px;
}
.docs-sidebar ul {
margin-bottom: 12px;
}
.docs-sidebar .sidebar-content {
max-height: 60vh;
overflow: auto;
}
h1 {
font-size: 26px;
}
.docs-version {
font-size: 10px;
}
.support-links {
right: 0;
min-width: 210px;
}
.docs-content table {
display: block;
max-width: 100%;
overflow-x: auto;
}
}
@media print {
.site-header,
.docs-sidebar,
.site-footer,
.page-relations,
a.headerlink {
display: none;
}
.docs-layout,
.docs-layout.no-sidebar {
display: block;
width: 100%;
padding: 0;
}
.docs-content,
.docs-content * {
color: #000000 !important;
background: #ffffff !important;
}
.docs-content .highlight,
.docs-content .literal-block {
overflow: visible;
}
.docs-content pre {
white-space: pre-wrap;
}
.docs-content .highlight span {
color: #000000 !important;
}
}
/* The shared site stylesheet owns the page shell and primary navigation. */
:root {
--page: var(--bg);
--panel: var(--chrome);
--font: system-ui, -apple-system, "Segoe UI", sans-serif;
}
.site-header { padding: 0; }
.appearance select { min-height: 0; border-radius: 3px; }
.docs-layout {
width: min(1040px, calc(100% - 48px));
grid-template-columns: minmax(0, 1fr) 220px;
gap: 40px;
padding-block: 28px 20px;
}
.docs-content { grid-column: 1; grid-row: 1; }
.docs-sidebar {
grid-column: 2;
grid-row: 1;
padding: 3px 0 0;
border: 0;
}
.site-footer { display: block; }
.site-footer .footer-links { gap: 5px 14px; }
.docs-location { width: 100%; margin-top: 0; margin-bottom: 20px; }
@media (max-width: 800px) {
.docs-layout { grid-template-columns: minmax(0, 1fr) 185px; gap: 26px; }
}
@media (max-width: 760px) {
.docs-layout { display: block; }
}
@media (max-width: 600px) {
.docs-layout { width: calc(100% - 30px); padding-top: 23px; }
}
@media print {
.docs-layout, .docs-layout.no-sidebar { width: 100%; padding: 0; }
}
.site-footer, .footer-grid { font-size: inherit; color: inherit; }
-526
View File
@@ -1,526 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Shared chrome copied from ZoiteChat/site assets/css/site.css (1df996a). */
:root {
color-scheme: light;
--bg: #fff;
--surface: #fff;
--chrome: #f1f2f3;
--chrome2: #e3e5e7;
--text: #25282c;
--muted: #58616b;
--line: #bdc3c9;
--soft-line: #dce0e4;
--blue: #215a9e;
--link: #174f92;
--selection: #e6effa;
--success: #236741;
--code: #f2f4f6;
--shadow: none;
--mono: Consolas,"Liberation Mono",monospace;
}
html[data-theme=dark] {
color-scheme: dark;
--bg: #111416;
--surface: #191c1f;
--chrome: #25292d;
--chrome2: #30353a;
--text: #eef0f2;
--muted: #b2bbc4;
--line: #50575e;
--soft-line: #353c43;
--blue: #2865a8;
--link: #8dc0ff;
--selection: #233951;
--success: #92d5ab;
--code: #111518;
--shadow: none;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: var(--bg);
color: var(--text);
font: 15px/1.6 system-ui,-apple-system,"Segoe UI",sans-serif;
}
a {
color: var(--link);
text-underline-offset: 3px;
}
a:hover {
text-decoration: underline;
}
button, input, select {
font: inherit;
}
button, summary {
cursor: pointer;
}
img {
display: block;
max-width: 100%;
height: auto;
}
button, a, input, select, summary {
touch-action: manipulation;
}
:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
[hidden] {
display: none!important;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip-path: inset(50%);
white-space: nowrap;
border: 0;
}
.skip-link {
position: absolute;
left: 12px;
top: -100px;
z-index: 10;
padding: 10px;
background: var(--surface);
}
.skip-link:focus {
top: 12px;
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding: 0 0 16px;
background: var(--surface);
border-bottom: 1px solid var(--line);
border: 0;
}
.brand {
display: flex;
gap: 12px;
align-items: center;
color: var(--text);
text-decoration: none;
}
.brand img {
width: 38px;
height: 42px;
}
.brand strong {
font-size: 28px;
letter-spacing: -.8px;
font-weight: 650;
}
.brand small {
display: block;
font-size: 12px;
color: var(--muted);
line-height: 1.2;
}
.appearance {
display: flex;
align-items: center;
gap: 10px;
font-size: 11px;
color: var(--muted);
}
select {
border: 1px solid var(--line);
border-radius: 3px;
padding: 5px 8px;
background: var(--surface);
color: var(--text);
}
.navigation {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 12px;
background: var(--chrome);
border-bottom: 1px solid var(--line);
padding: 0;
border: 1px solid var(--line);
border-radius: 0;
}
.nav-links {
display: flex;
align-items: stretch;
flex-wrap: wrap;
gap: 0;
}
.nav-links>a, .nav-menu summary {
display: flex;
align-items: center;
min-height: 36px;
padding: 6px 15px;
color: var(--text);
font-size: 13px;
text-decoration: none;
border-bottom: 0;
}
.nav-links>a[aria-current=page] {
color: #fff;
border-bottom-color: var(--blue);
font-weight: 500;
background: var(--blue);
}
.nav-links>a:hover, .nav-menu summary:hover {
background: var(--selection);
}
.nav-menu {
position: relative;
}
.nav-menu summary {
list-style: none;
}
.nav-menu summary::after {
content: "⌄";
margin-left: 9px;
}
.nav-menu summary::-webkit-details-marker {
display: none;
}
.nav-menu-panel {
position: absolute;
right: 0;
top: 100%;
z-index: 5;
min-width: 280px;
background: var(--surface);
border: 1px solid var(--line);
box-shadow: var(--shadow);
padding: 5px;
}
.nav-menu-panel a {
display: block;
padding: 10px 12px;
text-decoration: none;
}
.nav-menu-panel a:hover {
background: var(--selection);
}
.nav-menu-panel span {
display: block;
font-size: 12px;
color: var(--muted);
}
.site-main {
min-height: 0;
}
h1, h2, h3, p {
margin-top: 0;
}
h1 {
font-size: clamp(30px,3.9vw,46px);
line-height: 1.16;
letter-spacing: -1.5px;
font-weight: 650;
margin-bottom: 20px;
}
h2 {
font-size: 20px;
line-height: 1.3;
letter-spacing: 0;
margin-bottom: 12px;
}
h3 {
font-size: 16px;
line-height: 1.4;
}
p {
color: var(--text);
font-size: 14px;
line-height: 1.7;
margin-bottom: 15px;
}
.site-footer {
padding: 17px 0;
background: var(--surface);
border-top: 1px solid var(--line);
}
.footer-grid {
display: flex;
align-items: start;
justify-content: space-between;
gap: 20px;
}
.footer-copy {
font-size: 11px;
max-width: 62ch;
margin: 0;
color: var(--muted);
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 5px 14px;
max-width: 400px;
font-size: 11px;
}
@media (max-width:1000px) {
.navigation {
padding: 0 15px;
}
.nav-links>a, .nav-menu summary {
padding: 8px 10px;
}
}
@media (max-width:650px) {
.topbar {
padding: 13px 16px;
gap: 8px;
}
.brand strong {
font-size: 20px;
}
.brand small {
font-size: 10px;
}
.brand img {
width: 28px;
height: 31px;
}
.appearance {
gap: 5px;
}
.appearance>span {
display: none;
}
.appearance select {
font-size: 12px;
max-width: 98px;
}
.navigation {
padding: 0 6px;
}
.nav-links {
gap: 0;
}
.nav-links>a, .nav-menu summary {
min-height: 44px;
padding: 8px;
font-size: 12px;
}
h1 {
font-size: 34px;
letter-spacing: -1px;
}
.footer-grid {
display: grid;
gap: 20px;
}
.site-footer {
padding: 20px 17px;
}
.nav-menu-panel {
position: fixed;
right: 10px;
left: 10px;
top: auto;
min-width: 0;
}
}
@media (prefers-reduced-motion:reduce) {
* {
scroll-behavior: auto!important;
}
}
.appearance select {
font-size: 12px;
padding: 3px 7px;
}
.nav-links>a:hover {
background: var(--selection);
color: var(--link);
}
h1 {
font-size: 28px;
font-weight: 600;
letter-spacing: -.5px;
line-height: 1.3;
margin: 0 0 16px;
max-width: none;
}
@media (max-width:1100px) {
.navigation {
padding: 0;
}
}
@media (max-width:800px) {
.nav-links>a, .nav-menu summary {
padding: 6px 10px;
}
}
@media (max-width:600px) {
.topbar {
padding: 0 0 14px;
}
.brand strong {
font-size: 25px;
}
.brand img {
width: 32px;
height: 36px;
}
.nav-links>a, .nav-menu summary {
padding: 7px 9px;
min-height: 38px;
font-size: 12px;
}
.footer-grid {
display: block;
}
.footer-links {
margin-top: 10px;
max-width: none;
}
.site-footer {
padding: 14px 0;
}
h1 {
font-size: 26px;
}
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme]) {
color-scheme: dark;
--bg: #111416;
--surface: #191c1f;
--chrome: #25292d;
--chrome2: #30353a;
--text: #eef0f2;
--muted: #b2bbc4;
--line: #50575e;
--soft-line: #353c43;
--blue: #2865a8;
--link: #8dc0ff;
--selection: #233951;
--success: #92d5ab;
--code: #111518;
--shadow: none;
}
}
.site-header, .site-main, .site-footer {
width: min(1040px, calc(100% - 48px));
margin-inline: auto;
}
.site-header {
margin-top: 32px;
}
.site-main {
padding-block: 28px 20px;
}
.site-header .topbar {
padding: 0 0 16px;
}
.site-header .navigation {
padding: 0;
}
@media (max-width: 600px) {
.site-header, .site-main, .site-footer {
width: calc(100% - 30px);
}
.site-header {
margin-top: 18px;
}
.site-main {
padding-top: 23px;
}
}
/* Match the browser's heading defaults used by the main site. */
h2, h3 { font-weight: bold; }
h2 { margin-top: .83em; }
h3 { margin-block: 1em; }
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

-44
View File
@@ -1,44 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
(() => {
'use strict';
const initialise = () => {
const picker = document.getElementById('theme-picker');
const preference = window.matchMedia('(prefers-color-scheme: dark)');
if (picker instanceof HTMLSelectElement) {
const applyTheme = () => {
const dark = picker.value === 'dark'
|| (picker.value === 'system' && preference.matches);
document.documentElement.dataset.theme = dark ? 'dark' : 'light';
document.querySelectorAll('meta[name="theme-color"]').forEach((meta) => {
meta.setAttribute('content', dark ? '#111416' : '#ffffff');
});
};
// Follow the OS on every visit, including browser back/forward navigation.
const resetTheme = () => {
picker.value = 'system';
applyTheme();
};
picker.addEventListener('change', applyTheme);
preference.addEventListener('change', applyTheme);
window.addEventListener('pageshow', resetTheme);
resetTheme();
}
const navigation = document.getElementById('docs-navigation');
const compact = window.matchMedia('(max-width: 760px)');
if (navigation instanceof HTMLDetailsElement) {
const fitNavigation = () => { navigation.open = !compact.matches; };
compact.addEventListener('change', fitNavigation);
fitNavigation();
}
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initialise, { once: true });
} else {
initialise();
}
})();
-56
View File
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

-366
View File
@@ -1,366 +0,0 @@
{#
basicstrap/layout.html
~~~~~~~~~~~~~~~~~~~~~~~~~
Master layout template for Sphinx themes. on Twitter Bootstrap
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
{%- block doctype -%}
<!DOCTYPE html>
{%- endblock %}
{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
(sidebars != []) %}
{%- set url_root = pathto('', 1) %}
{# XXX necessary? #}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
{%- if not embedded and docstitle %}
{%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
{%- else %}
{%- set titlesuffix = "" %}
{%- endif %}
{%- if theme_bootstrap_version == "3" %}
{%- set bs_span_prefix = "col-md-" %}
{%- set class_device_xs= "xs" %}
{%- set class_device_sm= "sm" %}
{%- set class_device_md= "md" %}
{%- set class_row = "row" %}
{%- else %}
{%- set bs_span_prefix = "span" %}
{%- set class_device_xs= "phone" %}
{%- set class_device_sm= "tablet" %}
{%- set class_device_md= "desktop" %}
{%- if (not theme_row_fixed|tobool) %}
{%- set class_row = "row-fluid" %}
{%- else %}
{%- set class_row = "row" %}
{%- endif %}
{%- endif %}
{%- macro relbar() %}
<div id="navbar-related" class=" related navbar {% if (theme_relbar_inverse|tobool) %}navbar-inverse{% else %}navbar-default{% endif %}" role="navigation" aria-label="related navigation">
<div class="navbar-inner">
<ul class="nav navbar-nav {% if theme_noresponsiverelbar|tobool %}text-center{% endif %}">
<li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></li>
</ul>
<ul class="nav navbar-nav {% if not theme_noresponsiverelbar|tobool %}pull-right hidden-{{ class_device_xs }} hidden-{{ class_device_sm }}{% else %}text-center{% endif %}">
{% if not (theme_nosidebar|tobool) %}
{%- for rellink in rellinks|reverse %}
<li><a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}" {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a></li>
{%- endfor %}
{%- block rootrellink %}
{%- endblock %}
{%- for parent in parents %}
<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a></li>
{%- endfor %}
<li><a href="#">top</a></li>
{%- block relbaritems %} {% endblock %}
{% else %}
{%- if prev %}
<li><a href="{{ prev.link|e }}"><i class="icon icon-double-angle-left"></i>&nbsp;{{ prev.title }}</a></li>
{%- endif %}
<li><a class="uplink" href="{{ pathto(master_doc) }}">{{ _('Contents') }}</a></li>
{%- if next %}
<li><a href="{{ next.link|e }}">{{ next.title }}&nbsp;<i class="icon icon-double-angle-right"></i></a></li>
{%- endif %}
<li><a href="#">top</a></li>
{%- endif %}
</ul>
</div>
</div>
{%- endmacro %}
{%- macro sidebar() %}
{%- if render_sidebar %}
<div class="{{ bs_span_prefix }}{{ theme_sidebar_span }} hidden-{{ class_device_xs }}" id="sidebar-wrapper">
<div class="sidebar hidden-{{ class_device_xs }}" role="navigation" aria-label="main navigation">
{%- block sidebarlogo %}
{%- if logo %}
<p class="logo"><a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
</a></p>
{%- endif %}
{%- endblock %}
{%- if sidebars != None %}
{#- new style sidebar: explicitly include/exclude templates #}
{%- for sidebartemplate in sidebars %}
{%- include sidebartemplate %}
{%- endfor %}
{%- else %}
{#- old style sidebars: using blocks -- should be deprecated #}
{%- block sidebartoc %}
{%- include "localtoc.html" %}
{%- endblock %}
{%- block sidebarrel %}
{%- include "relations.html" %}
{%- endblock %}
{%- block sidebarsourcelink %}
{%- include "sourcelink.html" %}
{%- endblock %}
{%- if customsidebar %}
{%- include customsidebar %}
{%- endif %}
{%- block sidebarsearch %}
{%- include "searchbox.html" %}
{%- endblock %}
{%- endif %}
</div>
</div>
{%- endif %}
{%- endmacro %}
{% set script_files = (['_static/js/jquery.min.js'] if '_static/js/jquery.min.js' not in script_files else []) + script_files + ['_static/js/bootstrap' + theme_bootstrap_version + '.min.js'] %}
{%- macro script() %}
{%- if '_static/documentation_options.js' not in script_files %}
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '{{ url_root }}',
VERSION: '{{ release|e }}',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
HAS_SOURCE: {{ has_source|lower }}
};
</script>
{%- endif %}
{%- for scriptfile in script_files %}
{%- if scriptfile is string -%}
<script src="{{ pathto(scriptfile, 1) }}"></script>
{%- else -%}
{{ js_tag(scriptfile) }}
{%- endif -%}
{%- endfor %}
<script type="text/javascript" src="{{ pathto('_static/js/jquery.cookie.min.js', 1) }}"></script>
<script type="text/javascript" src="{{ pathto('_static/js/basicstrap.js', 1) }}"></script>
<script type="text/javascript">
DOCUMENTATION_OPTIONS.FILE_SUFFIX = DOCUMENTATION_OPTIONS.FILE_SUFFIX || '.html';
DOCUMENTATION_OPTIONS.LINK_SUFFIX = DOCUMENTATION_OPTIONS.LINK_SUFFIX || '.html';
</script>
{%- endmacro %}
{%- macro css() %}
{%- if (theme_googlewebfont|tobool) %}
<link rel="stylesheet" href="{{ pathto(theme_googlewebfont_url, 1) }}" media="screen and (min-width:481px)" type="text/css" />
{%- endif %}
<link rel="stylesheet" href="{{ pathto('_static/css/basicstrap-base.css', 1) }}" type="text/css" />
{%- if (theme_inner_theme|tobool) %}
<link rel="stylesheet" id="current-theme" href="{{ pathto('_static/css/bootstrap' + theme_bootstrap_version + '/' + theme_inner_theme_name + '.css', 1) }}" type="text/css" />
<link rel="stylesheet" id="current-adjust-theme" href="{{ pathto('_static/css/adjust_theme/' + theme_inner_theme_name + '.css', 1) }}" type="text/css" />
{%- else %}
<link rel="stylesheet" id="current-theme" href="{{ pathto('_static/css/bootstrap' + theme_bootstrap_version + '/bootstrap.min.css', 1) }}" type="text/css" />
<link rel="stylesheet" id="current-adjust-theme" type="text/css" />
{%- endif %}
{%- if theme_bootstrap_version == "3" and theme_noflatdesign|tobool %}
<link rel="stylesheet" href="{{ pathto('_static/css/bootstrap' + theme_bootstrap_version + '/bootstrap-theme.min.css', 1) }}" type="text/css" />
{%- endif %}
<link rel="stylesheet" href="{{ pathto('_static/css/font-awesome.min.css', 1) }}">
{% if (theme_nav_fixed_top|tobool) %}
<style type="text/css">
body {
{%- if theme_bootstrap_version == "3" %}
padding-top: 60px;
padding-bottom: 40px;
{%- else %}
padding-top: 60px;
padding-bottom: 40px;
{%- endif %}
}
</style>
{% endif %}
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
{%- if (not theme_noresponsive|tobool) and theme_bootstrap_version == "2" %}
<link rel="stylesheet" href="{{ pathto('_static/css/bootstrap2/bootstrap-responsive.min.css', 1) }}" type="text/css" />
{%- endif %}
{%- if theme_noresponsive|tobool and theme_bootstrap_version == "3" %}
<link rel="stylesheet" href="{{ pathto('_static/css/bootstrap3/bootstrap-non-responsive.css', 1) }}" type="text/css" />
{%- endif %}
{# Keep project CSS last so Bootstrap/basicstrap cannot re-float or resize the docs columns. #}
{%- for cssfile in css_files %}
{%- if cssfile is string -%}
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
{%- else -%}
{{ css_tag(cssfile) }}
{%- endif -%}
{%- endfor %}
{%- endmacro %}
<html lang="{{ theme_lang }}">
<head>
<meta charset="{{ encoding }}" />
{{ metatags }}
{%- block htmltitle %}
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
{%- endblock %}
{%- if theme_noresponsive|tobool and theme_bootstrap_version == "3" %}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{%- endif %}
<meta name="description" content="">
<meta name="author" content="">
<meta name="theme-color" content="#eee5d3" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#161514" media="(prefers-color-scheme: dark)">
{{ css() }}
{%- if not embedded %}
{{ script() }}
{%- if use_opensearch %}
<link rel="search" type="application/opensearchdescription+xml"
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
{%- endif %}
{%- if favicon %}
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
{%- endif %}
{%- endif %}
{%- block linktags %}
{%- if hasdoc('about') %}
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
{%- endif %}
{%- if hasdoc('genindex') %}
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
{%- endif %}
{%- if hasdoc('search') %}
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
{%- endif %}
{%- if hasdoc('copyright') %}
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
{%- endif %}
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
{%- if parents %}
<link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
{%- endif %}
{%- if next %}
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
{%- endif %}
{%- if prev %}
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
{%- endif %}
{%- endblock %}
{%- block extrahead %} {% endblock %}
</head>
<body role="document">
{%- block header %}
<header id="navbar-top" class="site-header" role="banner">
<div class="shell nav-shell">
<a class="brand" href="https://zoitechat.org/" aria-label="ZoiteChat home">
<img class="brand-logo" src="{{ pathto('_static/zoitechat-logo.svg', 1) }}" alt="" width="44" height="48">
<span class="brand-text">ZoiteChat</span>
</a>
<nav class="site-nav" aria-label="Primary">
<a href="https://zoitechat.org/">Home</a>
<a href="https://zoitechat.org/addons.php">Addons</a>
<a href="https://zoitechat.org/announcements.php">Announcements</a>
<a href="https://zoitechat.org/download.php">Download</a>
<a href="{{ pathto(master_doc) }}" aria-current="page">Docs</a>
<a href="https://github.com/ZoiteChat/zoitechat" target="_blank" rel="noopener">GitHub</a>
<details class="nav-menu">
<summary>IRC Support</summary>
<div class="nav-menu-panel" aria-label="IRC support channels">
<a href="https://zoite.net/webchat/?join=%23zoitechat" target="_blank" rel="noopener">
<strong>Zoite IRC</strong>
<span>Official network, #zoitechat</span>
</a>
<a href="https://web.libera.chat/#zoitechat" target="_blank" rel="noopener">
<strong>Libera.Chat</strong>
<span>Secondary support channel, #zoitechat</span>
</a>
</div>
</details>
</nav>
</div>
</header>
{% endblock %}
<!-- container -->
<div class="{% if (not theme_content_fixed|tobool) %}container-fluid{% else %}container{% endif %} docs-shell">
<!-- row -->
<div class="{{ class_row }} docs-main-row">
{%- block content %}
{%- block sidebar1 %}
{% if (not theme_rightsidebar|tobool) %} {{ sidebar() }} {% endif %}
{% endblock %}
<div class="{% if (not theme_nosidebar|tobool) %}{{ bs_span_prefix }}{{ 12 - theme_sidebar_span|int }}{% else %}{{ bs_span_prefix }}12{% endif %}" id="content-wrapper">
<div class="document" role="main">
{%- block document %}
<div class="documentwrapper">
{%- if render_sidebar %}
<div class="bodywrapper">
{%- endif %}
<div class="body">
{% block body %} {% endblock %}
</div>
{%- if render_sidebar %}
</div>
{%- endif %}
</div>
{%- endblock %}
</div>
</div>
{%- block sidebar2 %}
{% if (theme_rightsidebar|tobool) %} {{ sidebar() }} {% endif %}
{% endblock %}
{%- endblock %}{# /content block #}
</div><!-- /row -->
<!-- row -->
<div class="{{ class_row }} footer-relbar">
{%- block relbar2 %}{{ relbar() }}{% endblock %}
</div><!-- /row -->
<!-- footer -->
{%- block footer %}
<footer class="site-footer" role="contentinfo">
<div class="shell footer-grid">
<div>
<div class="footer-brand-wrap">
<img class="footer-logo" src="{{ pathto('_static/zoitechat-logo.svg', 1) }}" alt="" width="40" height="44">
<div class="footer-brand">ZoiteChat</div>
</div>
<p class="footer-copy">ZoiteChat is a HexChat fork, carrying that client lineage forward with care. Built on the foundation HexChat left behind, and grateful to the project and people that made it possible.</p>
</div>
<div class="footer-links">
<a href="https://zoitechat.org/download.php">Download</a>
<a href="https://zoitechat.org/addons.php">Addons</a>
<a href="https://zoitechat.org/announcements.php">Announcements</a>
<a href="https://zoitechat.org/privacy.php">Privacy Policy</a>
<a href="{{ pathto(master_doc) }}">Documentation</a>
<a href="https://github.com/ZoiteChat/zoitechat" target="_blank" rel="noopener">Source code</a>
<a href="https://zoite.net/webchat/?join=%23zoitechat" target="_blank" rel="noopener">Official IRC support</a>
<a href="https://web.libera.chat/#zoitechat" target="_blank" rel="noopener">Libera IRC support</a>
</div>
<div class="footer-meta">
<div>Documentation source: Read the Docs / Sphinx</div>
<div>Theme skin: ZoiteChat main site</div>
</div>
</div>
</footer>
{%- endblock %}
<!-- /footer -->
</div>
<!-- /container -->
{%- if theme_theme_preview|tobool %}
{%- include "_theme_preview.html" %}
{%- endif %}
</body>
</html>
-63
View File
@@ -1,63 +0,0 @@
{#
basicstrap/search.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Template for the search page.
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
{% extends "layout.html" %}
{% set title = _('Search') %}
{% set script_files = script_files + (['_static/language_data.js'] if '_static/language_data.js' not in script_files else []) + ['_static/searchtools.js'] %}
{% block extrahead %}
<script type="text/javascript">
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
</script>
{{ super() }}
{% endblock %}
{% block body %}
<h1 id="search-documentation">{{ _('Search') }}</h1>
<div id="fallback" class="admonition warning">
<script type="text/javascript">$('#fallback').hide();</script>
<p>
{% trans %}Please activate JavaScript to enable the search
functionality.{% endtrans %}
</p>
</div>
<p>
{% trans %}From here you can search these documents. Enter your search
words into the box below and click "search". Note that the search
function will automatically search for all of the words. Pages
containing fewer words won't appear in the result list.{% endtrans %}
</p>
<form class="form-search form-inline" action="" method="get">
<div class="input-append input-group">
<input type="text" class="search-query form-control" name="q" value="" placeholder="Search...">
<span class="input-group-btn">
<input type="submit" class="btn" value="{{ _('search') }}" />
</span>
</div>
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div role="main">
{% if search_performed %}
<h2>{{ _('Search Results') }}</h2>
{% if not search_results %}
<p>{{ _('Your search did not match any results.') }}</p>
{% endif %}
{% endif %}
<div id="search-results">
{% if search_results %}
<ul>
{% for href, caption, context in search_results %}
<li><a href="{{ pathto(href) }}">{{ caption }}</a>
<div class="context">{{ context|e }}</div>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}
-27
View File
@@ -1,27 +0,0 @@
{#
basicstrap/searchbox.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sphinx sidebar template: quick search box.
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
{%- if pagename != "search" %}
<div id="searchbox" role="search">
<h3>{{ _('Quick search') }}</h3>
<form class="search form-inline" action="{{ pathto('search') }}" method="get">
<div class="input-append input-group">
<input type="text" class="search-query form-control" name="q" placeholder="Search...">
<span class="input-group-btn">
<input type="submit" class="btn" value="{{ _('Go') }}" />
</span>
</div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
{{ _('Enter search terms or a module, class or function name.') }}
</p>
</div>
{%- endif %}
-38
View File
@@ -1,38 +0,0 @@
{#
basicstrap/searchresults.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Template for the body of the search results page.
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
<h1 id="search-documentation">Search</h1>
<p>
From here you can search these documents. Enter your search
words into the box below and click "search".
</p>
<form class="form-search" action="" method="get">
<div class="input-append">
<input type="text" class="search-query" name="q">
<input type="submit" class="btn" value="{{ _('search') }}" />
</div>
<span id="search-progress" style="padding-left: 10px"></span>
</form>
{%- if search_performed %}
<h2>Search Results</h2>
{%- if not search_results %}
<p>Your search did not match any results.</p>
{%- endif %}
{%- endif %}
<div id="search-results">
{%- if search_results %}
<ul class="search">
{% for href, caption, context in search_results %}
<li><a href="{{ docroot }}{{ href }}/?highlight={{ q }}">{{ caption }}</a>
<div class="context">{{ context|e }}</div>
</li>
{% endfor %}
</ul>
{%- endif %}
</div>
@@ -1,67 +0,0 @@
/* Table
---------------------------------------------------------*/
table.docutils {
border-color: {{ table_border_color }};
}
table.docutils th,
table.docutils td
{
border-color: {{ table_border_color }};
}
table.docutils tbody + tbody {
border-color: {{ table_border_color }};
}
/* Table-bordered
---------------------------------------------------------*/
table.table-bordered {
border-color: {{ table_border_color }};
}
/* -- admonition -- */
div.admonition {
color: {{ warning_color }};
background-color: {{ warning_background_color }};
border-color: {{ warning_border_color }};
}
/* -- danger, error -- */
div.danger,
div.error {
color: {{ danger_color }};
background-color: {{ danger_background_color }};
border-color: {{ danger_border_color }};
}
/* -- warning, caution, attention -- */
div.warning,
div.caution,
div.attention {
color: {{ warning_color }};
background-color: {{ warning_background_color }};
border-color: {{ warning_border_color }};
}
/* -- note, important -- */
div.note,
div.important {
color: {{ note_color }};
background-color: {{ note_background_color }};
border-color: {{ note_border_color }};
}
/* -- hint, tip -- */
div.hint,
div.tip {
color: {{ hint_color }};
background-color: {{ hint_background_color }};
border-color: {{ hint_border_color }};
}
div.topic {
background-color: {{ table_oddrow_color }};
border-color: {{ table_border_color }};
}
@@ -1,62 +0,0 @@
{% set table_border_color = "#357279" %}
{% set danger_color = "rgba(255, 255, 255, 0.9)" %}
{% set danger_background_color = "#d5b321" %}
{% set danger_border_color = "#d5b321" %}
{% set warning_color = "rgba(255, 255, 255, 0.9)" %}
{% set warning_background_color = "#df6e1e" %}
{% set warning_border_color = "#df6e1e" %}
{% set note_color = "rgba(255, 255, 255, 0.9)" %}
{% set note_background_color = "#48ca3b" %}
{% set note_border_color = "#48ca3b" %}
{% set hint_color = "rgba(255, 255, 255, 0.9)" %}
{% set hint_background_color = "#4d3a7d" %}
{% set hint_border_color = "#4d3a7d" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #00747d !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #00747d;
border: none;
box-shadow: none;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #00747d;
border-top: 1px solid #00747d;
border-bottom: 1px solid #00747d;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: #d92432;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #e5c953;
color: #ffffff;
}
@@ -1,46 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border: 1px solid #eeeeee;
box-shadow: none;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: #178acc;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #022f5a;
color: #ffffff;
}
@@ -1,71 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#ff0039" %}
{% set danger_border_color = "transparent" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#ff7518" %}
{% set warning_border_color = "transparent" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#3fb618" %}
{% set note_border_color = "#transparent" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#9954bb" %}
{% set hint_border_color = "transparent" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #e6e6e6 !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #e6e6e6;
border: 1px solid #e6e6e6;
box-shadow: none;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #e6e6e6;
border-top: 1px solid #e6e6e6;
border-bottom: 1px solid #e6e6e6;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: #090909;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #0066cc;
color: #ffffff;
}
{% if theme_bootstrap_version == "2" %}
/* Docutils
---------------------------------------------------------*/
table.docutils td.label {
min-height: 0px;
}
{% endif %}
@@ -1,73 +0,0 @@
{% set table_border_color = "#222222" %}
{% set danger_color = "#eeeeee" %}
{% set danger_background_color = "#cc0000" %}
{% set danger_border_color = "transparent" %}
{% set warning_color = "#eeeeee" %}
{% set warning_background_color = "#666666" %}
{% set warning_border_color = "transparent" %}
{% set note_color = "#eeeeee" %}
{% set note_background_color = "#5c8a00" %}
{% set note_border_color = "#transparent" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#007399" %}
{% set hint_border_color = "transparent" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #282828 !important;
}
/* Field-list
---------------------------------------------------------*/
table.field-list {
background-color: #060606;
}
/* Citation
---------------------------------------------------------*/
table.citation{
background-color: #060606;
}
/* Footnote
---------------------------------------------------------*/
table.footnote {
background-color: #060606;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #222222;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #282828;
border-top: 1px solid #282828;
border-bottom: 1px solid #282828;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a:hover{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
}
@@ -1,60 +0,0 @@
{% set table_border_color = "#464545" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#e94b35" %}
{% set danger_border_color = "#e94b35" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f59d00" %}
{% set warning_border_color = "#f59d00" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#00bd8b" %}
{% set note_border_color = "#00bd8b" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#2c97de" %}
{% set hint_border_color = "#2c97de" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #464545 !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #464545;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #464545;
border-top: 1px solid #464545;
border-bottom: 1px solid #464545;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #00bc8c;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #375a7f;
}
@@ -1,54 +0,0 @@
{% set table_border_color = "#ecf0f1" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#dd4838" %}
{% set danger_border_color = "#dd4838" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#ec9B00" %}
{% set warning_border_color = "#ec9B00" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#40bc9c" %}
{% set note_border_color = "#40bc9c" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#4b99dc" %}
{% set hint_border_color = "#4b99dc" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #ecf0f1 !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #ecf0f1;
border-top: 1px solid #ecf0f1;
border-bottom: 1px solid #ecf0f1;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #00bc8c;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #2c3e50;
}
@@ -1,69 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#ed6761" %}
{% set danger_border_color = "#ed6761" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f77400" %}
{% set warning_border_color = "#f77400" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#11b446" %}
{% set note_border_color = "#11b446" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#306598" %}
{% set hint_border_color = "#306598" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border-color: #eeeeee;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #000000;
}
ul.sp-localtoc ul a:hover{
background-color: #eeeeee;
color: #000000;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #e74b47;
color: #ffffff;
}
/* Etc
---------------------------------------------------------*/
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@@ -1,61 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#ff3f2c" %}
{% set danger_border_color = "#ff3f2c" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#ff8500" %}
{% set warning_border_color = "#ff8500" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#18B81D" %}
{% set note_border_color = "#18B81D" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#71CAED" %}
{% set hint_border_color = "#71CAED" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #fafafa;
border-color: #eeeeee;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #999999;
}
ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #333333;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #999999;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #333333;
}
@@ -1,20 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#d23f3c" %}
{% set danger_border_color = "#d23f3c" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f19842" %}
{% set warning_border_color = "#f19842" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#69a858" %}
{% set note_border_color = "#69a858" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#8e45ab" %}
{% set hint_border_color = "#8e45ab" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
@@ -1,73 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#db524b" %}
{% set danger_border_color = "#db524b" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f2ae43" %}
{% set warning_border_color = "#f2ae43" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#39af40" %}
{% set note_border_color = "#39af40" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#56C0E0" %}
{% set hint_border_color = "#56C0E0" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #f7f7f7;
border-color: #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
margin-left: 7px;
margin-right: 7px;
border: 1px solid transparent;
border-radius: 4px;
color: #4582ec;
}
ul.sp-localtoc ul a:hover{
border-color: #dddddd;
color: #4582ec;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #333333;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #333333;
}
/* Etc
---------------------------------------------------------*/
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@@ -1,19 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#c9605a" %}
{% set danger_border_color = "#c9605a" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#e48353" %}
{% set warning_border_color = "#e48353" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#9fbe5b" %}
{% set note_border_color = "#9fbe5b" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#55abda" %}
{% set hint_border_color = "#55abda" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
@@ -1,60 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#d88400" %}
{% set danger_border_color = "#d88400" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#9c43a1" %}
{% set warning_border_color = "#9c43a1" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#439500" %}
{% set note_border_color = "#439500" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#0099d1" %}
{% set hint_border_color = "#0099d1" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #dddddd !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #dddddd;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #f4f4f4;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #333333;
}
ul.sp-localtoc ul a:hover{
color: #d9230f;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #fac0ba;
}
@@ -1,83 +0,0 @@
{% set table_border_color = "#1c1e22" %}
{% set danger_color = "rgba(255, 255, 255, 0.9)" %}
{% set danger_background_color = "#f05e57" %}
{% set danger_border_color = "#ef4b60" %}
{% set warning_color = "rgba(255, 255, 255, 0.9)" %}
{% set warning_background_color = "#fa9500" %}
{% set warning_border_color = "#eb6500" %}
{% set note_color = "rgba(255, 255, 255, 0.9)" %}
{% set note_background_color = "#468847" %}
{% set note_border_color = "#5ec65d" %}
{% set hint_color = "rgba(255, 255, 255, 0.9)" %}
{% set hint_background_color = "#56C0E0" %}
{% set hint_border_color = "#31ced9" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #1c1e22 !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #1c1e22;
border-top: 1px solid #1c1e22;
border-bottom: 1px solid #1c1e22;
}
/* Field-list
---------------------------------------------------------*/
table.field-list {
background-color: #272B30;
}
/* Citation
---------------------------------------------------------*/
table.citation{
background-color: #272B30;
}
/* Footnote
---------------------------------------------------------*/
table.footnote {
background-color: #272B30;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #1c1e22;
border-color: #0b0b0d;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #c8c8c8;
}
ul.sp-localtoc ul a:hover{
background-color: #272b2e;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #c8c8c8;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #272b2e;
color: #ffffff;
}
@@ -1,72 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#cd0200" %}
{% set danger_border_color = "#be001e" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#d47500" %}
{% set warning_border_color = "#c54c00" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#3cb521" %}
{% set note_border_color = "#4b9f1d" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#3399f3" %}
{% set hint_border_color = "#11adf1" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #777777;
}
ul.sp-localtoc ul a:hover{
color: #3399f3;
-webkit-transition: color ease-in-out .2s;
transition: color ease-in-out .2s;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #c8c8c8;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
-webkit-transition: color ease-in-out .2s;
transition: color ease-in-out .2s;
}
/* Etc
---------------------------------------------------------*/
div.navbar-inner ul.pull-right li a{
font-size: 12px;
}
@@ -1,36 +0,0 @@
{% set table_border_color = "#999999" %}
{% set table_oddrow_color = "#eaeaea;" %}
{% set table_hover_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#d14432" %}
{% set danger_border_color = "#c72d35" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f26522" %}
{% set warning_border_color = "#f13614" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#24c00b" %}
{% set note_border_color = "#3aa80a" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#185af9" %}
{% set hint_border_color = "#066ee7" %}
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@media (max-width: 480px) {
a.brand {
line-height: 25px;
}
}
table.docutils th.head {
background-color: #015b4e;
color: #fff;
}
{% include "static/css/adjust_theme/_common_adjust.css" %}
@@ -1,123 +0,0 @@
{% set table_border_color = "#4d5d6d" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#db524b" %}
{% set danger_border_color = "#db524b" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f2ae43" %}
{% set warning_border_color = "#f2ae43" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#58b957" %}
{% set note_border_color = "#58b957" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#56c0e0" %}
{% set hint_border_color = "#56c0e0" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #4d5d6d !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #4d5d6d;
border-top: 1px solid #4d5d6d;
border-bottom: 1px solid #4d5d6d;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #4d5d6d;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
font-size: 12px;
color: #ebebeb;
}
ul.sp-localtoc ul a:hover{
color: #ebebeb;
background-color: #485563;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ebebeb;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ebebeb;
background-color: #c85e17;
}
/* Code
---------------------------------------------------------*/
code, pre {
padding:0 3px 2px;
font-family:Menlo,Monaco,Consolas,"Courier New",monospace;
font-size:12px;
color:#3a3f44;
-webkit-border-radius:3px;
-moz-border-radius:3px;
border-radius:3px;
}
code{
padding:2px 4px;
color:#d14;
background-color:#f7f7f9;
border:1px solid #e1e1e8;
white-space:nowrap;
}
pre{
display:block;
padding:10px;
margin:0 0 10.5px;
font-size:13px;
line-height:21px;
word-break:break-all;
word-wrap:break-word;
white-space:pre;
white-space:pre-wrap;
background-color:#f5f5f5;
border:1px solid #ccc;
border:1px solid rgba(0, 0, 0, 0.15);
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
}
pre.prettyprint{
margin-bottom:21px;
}
pre code{
padding:0;
color:inherit;
white-space:pre;
white-space:pre-wrap;
background-color:transparent;
border:0;
}
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@media (max-width: 480px) {
a.brand {
line-height: 30px;
}
}
@@ -1,62 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#e13622" %}
{% set danger_border_color = "#e13622" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f0b82d" %}
{% set warning_border_color = "#f0b82d" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#30b644" %}
{% set note_border_color = "#30b644" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#782753" %}
{% set hint_border_color = "#782753" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #97310e;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #3e152b;
}
@@ -1,62 +0,0 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#f33f13" %}
{% set danger_border_color = "#ed2c00" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#eb9100" %}
{% set warning_border_color = "#d28100" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#3ead68" %}
{% set note_border_color = "#379b5d" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#56c0e0" %}
{% set hint_border_color = "#3ab5da" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #dddddd !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #dddddd;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #fafafa;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #272727;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #006687;
}
@@ -1,36 +0,0 @@
{% set table_border_color = "#228000" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#f40000" %}
{% set danger_border_color = "#a20000" %}
{% set warning_color = "#000000" %}
{% set warning_background_color = "#fcfe00" %}
{% set warning_border_color = "#f40000" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#228000" %}
{% set note_border_color = "#2faa00" %}
{% set hint_color = "#000000" %}
{% set hint_background_color = "#57ffff" %}
{% set hint_border_color = "#a8a900" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
table.docutils {
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
div.admonition {
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
div.topic {
background: url("../../img/stars.gif") !important;
}
-350
View File
@@ -1,350 +0,0 @@
@import url("../basic.css");
/* Table
---------------------------------------------------------*/
table {
border: 0;
max-width: 100%;
background-color: transparent;
border-collapse: collapse;
border-spacing: 0 !important;
}
table.docutils {
width: 100%;
margin-bottom: 20px;
border: 1px solid #dddddd;
border-collapse: separate;
*border-collapse: collapse;
border-left: 0;
border-right: 0;
}
table.docutils th {
font-weight: bold;
}
table.docutils th,
table.docutils td
{
padding: 8px;
line-height: 20px;
text-align: left;
vertical-align: top;
border: none;
border-spacing: 0 !important;
border-collapse: none;
border-top: 1px solid #dddddd;
}
table.docutils caption + thead tr:first-child th,
table.docutils caption + tbody tr:first-child th,
table.docutils caption + tbody tr:first-child td,
table.docutils colgroup + thead tr:first-child th,
table.docutils colgroup + tbody tr:first-child th,
table.docutils colgroup + tbody tr:first-child td,
table.docutils thead:first-child tr:first-child th,
table.docutils tbody:first-child tr:first-child th,
table.docutils tbody:first-child tr:first-child td {
border-top: 0;
}
table.docutils thead th {
vertical-align: bottom;
}
table.docutils tbody + tbody {
border-top: 2px solid #dddddd;
}
/* Table-bordered
---------------------------------------------------------*/
table.table-bordered {
border-top: 1px solid #dddddd;
border-left: 1px solid #dddddd;
border-right: none;
}
table.table-bordered > thead > tr > th,
table.table-bordered > tbody > tr > th,
table.table-bordered > tfoot > tr > th,
table.table-bordered > thead > tr > td,
table.table-bordered > tbody > tr > td,
table.table-bordered > tfoot > tr > td {
border-left: none;
border-bottom-width: 0;
}
/* Highlight Table
---------------------------------------------------------*/
.highlighttable .code pre {
font-size: 12px;
}
.highlighttable .linenos pre {
word-break: normal;
font-size: 12px;
}
div.highlight {
background: none;
}
/* Field-list
---------------------------------------------------------*/
table.field-list {
width: auto;
border: none;
}
/* Citation
---------------------------------------------------------*/
table.citation{
width: auto;
margin-bottom: 0;
border: none;
}
table.citation td.label {
font-size: 100%;
display: block;
line-height: normal;
background: inherit;
}
/* Footnote
---------------------------------------------------------*/
a.footnote-reference {
vertical-align: super;
font-size: 75%;
}
table.footnote td.label {
font-size: 100%;
display: block;
line-height: normal;
background: inherit;
}
table.footnote {
width: auto;
margin-bottom: 0px;
border: none;
}
/* Footer
---------------------------------------------------------*/
footer {
width: 100%;
margin: 0;
text-align: center;
padding: 0px;
padding-left: auto;
padding-right: auto;
}
/* Sidebar
------------------------------------------------------- */
div.sidebar {
border: none;
margin: 0;
padding: 0;
background: none;
width: 100%;
float: none;
}
div.sidebar ul:second-child {
color: red;
background-color: #000 !important;
list-style: none !important;
}
/* Definition lists
----------------------------------------------------------- */
dl dd {
padding-left: 1em;
}
/* Admonition styles
----------------------------------------------------------- */
div.admonition {
padding: 8px 35px 8px 0px;
margin-bottom: 20px;
color: #c09853;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
background-color: #fcf8e3;
border: 1px solid #fbeed5;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
div.admonition p {
margin: 0.5em 1em 0.5em 1em;
padding: 0;
}
div.admonition pre {
margin: 0.4em 1em 0.4em 1em;
}
div.admonition p.admonition-title {
margin: 0;
padding: 0.1em 0 0.1em 0.5em;
font-weight: bold;
}
div.admonition ul, div.admonition ol {
margin: 0.1em 0.5em 0.5em 3em;
padding: 0;
}
/* -- danger, error -- */
div.danger,
div.error {
color: #b94a48;
background-color: #f2dede;
border-color: #eed3d7;
}
/* -- warning, caution, attention -- */
div.warning,
div.caution,
div.attention {
}
/* -- note, important -- */
div.note,
div.important {
color: #468847;
background-color: #dff0d8;
border-color: #d6e9c6;
}
/* -- hint, tip -- */
div.hint,
div.tip {
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1;
}
/* Etc
----------------------------------------------------------- */
div.figure-round img {
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
div.figure-polaroid img{
padding: 4px;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
div.figure-circle img {
-webkit-border-radius: 500px;
-moz-border-radius: 500px;
border-radius: 500px;
}
a.headerlink {
font-size: 60% !important;
padding-left: 5px;
}
/*
#searchbox .search-query {
width: 60%;
}
*/
div.topic {
min-height: 20px;
padding: 9px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
ul.sp-localtoc {
list-style: none;
padding: 0;
}
ul.sp-localtoc ul{
list-style: none;
padding-left: 0;
}
ul.sp-localtoc ul a{
padding-left: 15px;
padding-top:7px;
padding-bottom:7px;
display: block;
text-decoration: none;
color: #777777;
}
ul.sp-localtoc ul a:hover{
color: #555555;
}
ul.sp-localtoc ul ul{
list-style: none;
}
ul.sp-localtoc ul ul a{
padding-left: 25px;
}
ul.sp-localtoc ul ul ul a{
padding-left: 35px;
}
ul.sp-localtoc ul ul ul ul a{
padding-left: 45px;
}
ul.sp-localtoc ul ul ul ul ul a{
padding-left: 55px;
}
ul.sp-localtoc ul ul ul ul ul a{
padding-left: 65px;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #999999;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
}
div.footer-relbar {
margin-top:10px;
}
div.sidebar ul {
list-style: none;
padding-left: 10px;
}
div.sidebar ul ul {
list-style: initial;
padding-left: 40px;
}
div.sidebar p.topless {
padding-left: 10px;
}
-186
View File
@@ -1,186 +0,0 @@
/* Bootstrap
------------------------------------------------------- */
/* apply font awesome
------------------------------------------------------- */
div.danger p.admonition-title:before,
div.error p.admonition-title:before,
div.warning p.admonition-title:before,
div.caution p.admonition-title:before,
div.attention p.admonition-title:before,
div.important p.admonition-title:before,
div.note p.admonition-title:before,
div.hint p.admonition-title:before,
div.tip p.admonition-title:before
{
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
div.danger p.admonition-title:before,
div.error p.admonition-title:before {
content: "\f06a\00a0";
}
div.warning p.admonition-title:before,
div.caution p.admonition-title:before,
div.attention p.admonition-title:before {
content: "\f071\00a0";
}
div.important p.admonition-title:before,
div.note p.admonition-title:before {
content: "\f05a\00a0";
}
div.hint p.admonition-title:before,
div.tip p.admonition-title:before {
content: "\f0eb\00a0";
}
{%- if theme_h1_size != '' %}
h1 { font-size: {{ theme_h1_size }}; line-height: {{ theme_h1_size }};}
{% endif %}
{%- if theme_h2_size != '' %}
h2 { font-size: {{ theme_h2_size }}; line-height: {{ theme_h2_size }};}
{% endif %}
{%- if theme_h3_size != '' %}
h3 { font-size: {{ theme_h3_size }}; line-height: {{ theme_h3_size }};}
{% endif %}
{%- if theme_h4_size != '' %}
h4 { font-size: {{ theme_h4_size }}; line-height: {{ theme_h4_size }};}
{% endif %}
{%- if theme_h5_size != '' %}
h5 { font-size: {{ theme_h5_size }}; line-height: {{ theme_h5_size }};}
{% endif %}
{%- if theme_h6_size != '' %}
h6 { font-size: {{ theme_h6_size }}; line-height: {{ theme_h6_size }};}
{% endif %}
{%- if (theme_googlewebfont|tobool) %}
body,
h1,
h2,
h3,
h4,
h5,
h6,
input,
button,
select,
textarea,
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.navbar,
.navbar-search .search-query,
.navbar .navbar-search .search-query,
/*
.navbar .search-query::-moz-placeholder,
.navbar .search-query::-webkit-input-placeholder,
*/
.navbar .brand,
.navbar .nav>li>a,
.navbar .navbar-text,
.navbar .dropdown-menu li>a,
.nav li>a,
div.subnav,
div.subnav .nav>li>a,
div.subnav .nav>li:first-child>a,
div.subnav .nav>li.active>a,
legend,
.btn,
.alert-heading
{
{{ theme_googlewebfont_style }}
}
{%- endif %}
h2, h3, h4, h5, h6 {
padding-bottom: 10px;
border-bottom: 1px solid #d0d0d0;
}
{%- if theme_bootstrap_version == '2' %}
div.sidebar ul {
margin-left: 0;
}
ul.sp-localtoc{
margin-left: 0 !important;
}
ul.sp-localtoc ul{
margin-left: 0 !important;
}
ul.sp-localtoc ul ul{
margin-left: 0 !important;
}
ul.sp-localtoc ul ul a{
margin-left: 25px;
}
ul.sp-localtoc ul ul ul a{
margin-left: 35px;
}
ul.sp-localtoc ul ul ul ul a{
margin-left: 45px;
}
ul.sp-localtoc ul ul ul ul ul a{
margin-left: 55px;
}
ul.sp-localtoc ul ul ul ul ul a{
margin-left: 65px;
}
{% endif %}
/* for tablet */
@media (max-width: 767px) {
form.sp-searchbox div.input-append {
margin-top: 10px;
margin-left: 12px;
}
form.sp-searchbox div.input-append {
{%- if theme_bootstrap_version == '2' %}
width: 70%;
{% else %}
width: 90%;
{% endif %}
}
form.sp-searchbox input.search-query {
width: 100%;
}
}
/* for smartphone */
@media (max-width: 480px) {
a.brand {
width: 80%;
}
a.navbar-brand {
width: 80%;
height: 100%;
}
.searchbox .search-query {
width: 90%;
}
}
/* for desktop */
@media (min-width: 768px) {
{% if theme_nav_fixed %}
.navbar-inner div.container {
width: {{ theme_nav_width }};
}
{% endif %}
{% if theme_content_fixed %}
div.container {
width: {{ theme_content_width }};
}
{% endif %}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,82 +0,0 @@
/* Template-specific stuff
*
* Customizations just for the template; these are not necessary for anything
* with disabling the responsiveness.
*/
/* Account for fixed navbar */
body {
min-width: 970px;
}
/* Finesse the page header spacing */
.page-header {
margin-bottom: 30px;
}
.page-header .lead {
margin-bottom: 10px;
}
/* Non-responsive overrides
*
* Utilitze the following CSS to disable the responsive-ness of the container,
* grid system, and navbar.
*/
/* Reset the container */
.container {
width: 970px;
max-width: none !important;
}
/* Demonstrate the grids */
.col-xs-3 {
}
.container .navbar-header,
.container .navbar-collapse {
margin-right: 0;
margin-left: 0;
}
/* Always float the navbar header */
.navbar-header {
float: left;
}
/* Undo the collapsing navbar */
.navbar-collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
}
.navbar-toggle {
display: none;
}
.navbar-collapse {
border-top: 0;
}
.navbar-brand {
margin-left: -15px;
}
/* Always apply the floated nav */
.navbar-nav {
float: left;
margin: 0;
}
.navbar-nav > li {
float: left;
}
.navbar-nav > li > a {
padding: 15px;
}
/* Redeclare since we override the float above */
.navbar-nav.navbar-right {
float: right;
}
/* Undo custom dropdowns */
.navbar .navbar-nav .open .dropdown-menu {
position: absolute;
float: left;
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,384 +0,0 @@
.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle;}
.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%;}
.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px;}
.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit;}
.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em;}
a [class^="icon-"],a [class*=" icon-"]{cursor:pointer;}
.icon-glass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf000;');}
.icon-music{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;');}
.icon-search{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;');}
.icon-envelope-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;');}
.icon-heart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;');}
.icon-star{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;');}
.icon-star-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;');}
.icon-user{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;');}
.icon-film{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;');}
.icon-th-large{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;');}
.icon-th{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;');}
.icon-th-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;');}
.icon-ok{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;');}
.icon-remove{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;');}
.icon-zoom-in{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;');}
.icon-zoom-out{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;');}
.icon-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');}
.icon-power-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');}
.icon-signal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;');}
.icon-cog{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');}
.icon-gear{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');}
.icon-trash{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;');}
.icon-home{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;');}
.icon-file-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;');}
.icon-time{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;');}
.icon-road{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;');}
.icon-download-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;');}
.icon-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;');}
.icon-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;');}
.icon-inbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;');}
.icon-play-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;');}
.icon-repeat{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');}
.icon-rotate-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');}
.icon-refresh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;');}
.icon-list-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;');}
.icon-lock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;');}
.icon-flag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;');}
.icon-headphones{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;');}
.icon-volume-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;');}
.icon-volume-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;');}
.icon-volume-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;');}
.icon-qrcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;');}
.icon-barcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;');}
.icon-tag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;');}
.icon-tags{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;');}
.icon-book{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;');}
.icon-bookmark{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;');}
.icon-print{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;');}
.icon-camera{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;');}
.icon-font{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;');}
.icon-bold{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;');}
.icon-italic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;');}
.icon-text-height{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;');}
.icon-text-width{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;');}
.icon-align-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;');}
.icon-align-center{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;');}
.icon-align-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;');}
.icon-align-justify{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;');}
.icon-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;');}
.icon-indent-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;');}
.icon-indent-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;');}
.icon-facetime-video{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;');}
.icon-picture{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;');}
.icon-pencil{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;');}
.icon-map-marker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;');}
.icon-adjust{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;');}
.icon-tint{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;');}
.icon-edit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;');}
.icon-share{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;');}
.icon-check{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;');}
.icon-move{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;');}
.icon-step-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;');}
.icon-fast-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;');}
.icon-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;');}
.icon-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;');}
.icon-pause{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;');}
.icon-stop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;');}
.icon-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;');}
.icon-fast-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;');}
.icon-step-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;');}
.icon-eject{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;');}
.icon-chevron-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;');}
.icon-chevron-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;');}
.icon-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;');}
.icon-minus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;');}
.icon-remove-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;');}
.icon-ok-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;');}
.icon-question-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;');}
.icon-info-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;');}
.icon-screenshot{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;');}
.icon-remove-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;');}
.icon-ok-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;');}
.icon-ban-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;');}
.icon-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;');}
.icon-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;');}
.icon-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;');}
.icon-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;');}
.icon-share-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');}
.icon-mail-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');}
.icon-resize-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;');}
.icon-resize-small{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;');}
.icon-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;');}
.icon-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;');}
.icon-asterisk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;');}
.icon-exclamation-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;');}
.icon-gift{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;');}
.icon-leaf{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;');}
.icon-fire{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;');}
.icon-eye-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;');}
.icon-eye-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;');}
.icon-warning-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;');}
.icon-plane{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;');}
.icon-calendar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;');}
.icon-random{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;');}
.icon-comment{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;');}
.icon-magnet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;');}
.icon-chevron-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;');}
.icon-chevron-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;');}
.icon-retweet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;');}
.icon-shopping-cart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;');}
.icon-folder-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;');}
.icon-folder-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;');}
.icon-resize-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;');}
.icon-resize-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;');}
.icon-bar-chart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;');}
.icon-twitter-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;');}
.icon-facebook-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;');}
.icon-camera-retro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;');}
.icon-key{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;');}
.icon-cogs{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');}
.icon-gears{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');}
.icon-comments{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;');}
.icon-thumbs-up-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;');}
.icon-thumbs-down-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;');}
.icon-star-half{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;');}
.icon-heart-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;');}
.icon-signout{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;');}
.icon-linkedin-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;');}
.icon-pushpin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;');}
.icon-external-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;');}
.icon-signin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;');}
.icon-trophy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;');}
.icon-github-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;');}
.icon-upload-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;');}
.icon-lemon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;');}
.icon-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;');}
.icon-check-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');}
.icon-unchecked{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');}
.icon-bookmark-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;');}
.icon-phone-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;');}
.icon-twitter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;');}
.icon-facebook{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;');}
.icon-github{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;');}
.icon-unlock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;');}
.icon-credit-card{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;');}
.icon-rss{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;');}
.icon-hdd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;');}
.icon-bullhorn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;');}
.icon-bell{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;');}
.icon-certificate{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;');}
.icon-hand-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;');}
.icon-hand-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;');}
.icon-hand-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;');}
.icon-hand-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;');}
.icon-circle-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;');}
.icon-circle-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;');}
.icon-circle-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;');}
.icon-circle-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;');}
.icon-globe{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;');}
.icon-wrench{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;');}
.icon-tasks{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;');}
.icon-filter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;');}
.icon-briefcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;');}
.icon-fullscreen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;');}
.icon-group{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;');}
.icon-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;');}
.icon-cloud{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;');}
.icon-beaker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;');}
.icon-cut{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;');}
.icon-copy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;');}
.icon-paper-clip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');}
.icon-paperclip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');}
.icon-save{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;');}
.icon-sign-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;');}
.icon-reorder{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;');}
.icon-list-ul{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;');}
.icon-list-ol{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;');}
.icon-strikethrough{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;');}
.icon-underline{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;');}
.icon-table{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;');}
.icon-magic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;');}
.icon-truck{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;');}
.icon-pinterest{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;');}
.icon-pinterest-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;');}
.icon-google-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;');}
.icon-google-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;');}
.icon-money{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;');}
.icon-caret-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;');}
.icon-caret-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;');}
.icon-caret-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;');}
.icon-caret-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;');}
.icon-columns{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;');}
.icon-sort{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;');}
.icon-sort-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;');}
.icon-sort-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;');}
.icon-envelope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;');}
.icon-linkedin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;');}
.icon-undo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');}
.icon-rotate-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');}
.icon-legal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;');}
.icon-dashboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;');}
.icon-comment-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;');}
.icon-comments-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;');}
.icon-bolt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;');}
.icon-sitemap{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;');}
.icon-umbrella{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;');}
.icon-paste{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;');}
.icon-lightbulb{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0eb;');}
.icon-exchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ec;');}
.icon-cloud-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ed;');}
.icon-cloud-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ee;');}
.icon-user-md{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f0;');}
.icon-stethoscope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f1;');}
.icon-suitcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f2;');}
.icon-bell-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f3;');}
.icon-coffee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f4;');}
.icon-food{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f5;');}
.icon-file-text-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f6;');}
.icon-building{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f7;');}
.icon-hospital{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f8;');}
.icon-ambulance{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f9;');}
.icon-medkit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fa;');}
.icon-fighter-jet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fb;');}
.icon-beer{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fc;');}
.icon-h-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fd;');}
.icon-plus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fe;');}
.icon-double-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf100;');}
.icon-double-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf101;');}
.icon-double-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf102;');}
.icon-double-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf103;');}
.icon-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf104;');}
.icon-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf105;');}
.icon-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf106;');}
.icon-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf107;');}
.icon-desktop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf108;');}
.icon-laptop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf109;');}
.icon-tablet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10a;');}
.icon-mobile-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10b;');}
.icon-circle-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10c;');}
.icon-quote-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;');}
.icon-quote-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10e;');}
.icon-spinner{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf110;');}
.icon-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf111;');}
.icon-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');}
.icon-mail-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');}
.icon-github-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf113;');}
.icon-folder-close-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf114;');}
.icon-folder-open-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf115;');}
.icon-expand-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf116;');}
.icon-collapse-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf117;');}
.icon-smile{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf118;');}
.icon-frown{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf119;');}
.icon-meh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11a;');}
.icon-gamepad{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11b;');}
.icon-keyboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11c;');}
.icon-flag-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11d;');}
.icon-flag-checkered{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11e;');}
.icon-terminal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf120;');}
.icon-code{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;');}
.icon-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');}
.icon-mail-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');}
.icon-star-half-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');}
.icon-star-half-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');}
.icon-location-arrow{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf124;');}
.icon-crop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;');}
.icon-code-fork{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf126;');}
.icon-unlink{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf127;');}
.icon-question{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf128;');}
.icon-info{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf129;');}
.icon-exclamation{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12a;');}
.icon-superscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;');}
.icon-subscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;');}
.icon-eraser{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12d;');}
.icon-puzzle-piece{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12e;');}
.icon-microphone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf130;');}
.icon-microphone-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf131;');}
.icon-shield{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf132;');}
.icon-calendar-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;');}
.icon-fire-extinguisher{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf134;');}
.icon-rocket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf135;');}
.icon-maxcdn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf136;');}
.icon-chevron-sign-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf137;');}
.icon-chevron-sign-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf138;');}
.icon-chevron-sign-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf139;');}
.icon-chevron-sign-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13a;');}
.icon-html5{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13b;');}
.icon-css3{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13c;');}
.icon-anchor{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13d;');}
.icon-unlock-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13e;');}
.icon-bullseye{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf140;');}
.icon-ellipsis-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf141;');}
.icon-ellipsis-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf142;');}
.icon-rss-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf143;');}
.icon-play-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf144;');}
.icon-ticket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf145;');}
.icon-minus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf146;');}
.icon-check-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf147;');}
.icon-level-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf148;');}
.icon-level-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf149;');}
.icon-check-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14a;');}
.icon-edit-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14b;');}
.icon-external-link-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14c;');}
.icon-share-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14d;');}
.icon-compass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14e;');}
.icon-collapse{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf150;');}
.icon-collapse-top{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf151;');}
.icon-expand{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf152;');}
.icon-eur{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');}
.icon-euro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');}
.icon-gbp{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf154;');}
.icon-usd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');}
.icon-dollar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');}
.icon-inr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');}
.icon-rupee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');}
.icon-jpy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');}
.icon-yen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');}
.icon-cny{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');}
.icon-renminbi{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');}
.icon-krw{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');}
.icon-won{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');}
.icon-btc{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');}
.icon-bitcoin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');}
.icon-file{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15b;');}
.icon-file-text{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15c;');}
.icon-sort-by-alphabet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;');}
.icon-sort-by-alphabet-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15e;');}
.icon-sort-by-attributes{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf160;');}
.icon-sort-by-attributes-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf161;');}
.icon-sort-by-order{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf162;');}
.icon-sort-by-order-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf163;');}
.icon-thumbs-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf164;');}
.icon-thumbs-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf165;');}
.icon-youtube-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf166;');}
.icon-youtube{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;');}
.icon-xing{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf168;');}
.icon-xing-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf169;');}
.icon-youtube-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16a;');}
.icon-dropbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16b;');}
.icon-stackexchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16c;');}
.icon-instagram{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;');}
.icon-flickr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16e;');}
.icon-adn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf170;');}
.icon-bitbucket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf171;');}
.icon-bitbucket-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf172;');}
.icon-tumblr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf173;');}
.icon-tumblr-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf174;');}
.icon-long-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf175;');}
.icon-long-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf176;');}
.icon-long-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf177;');}
.icon-long-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf178;');}
.icon-apple{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf179;');}
.icon-windows{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17a;');}
.icon-android{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17b;');}
.icon-linux{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17c;');}
.icon-dribbble{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17d;');}
.icon-skype{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17e;');}
.icon-foursquare{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf180;');}
.icon-trello{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf181;');}
.icon-female{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf182;');}
.icon-male{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf183;');}
.icon-gittip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf184;');}
.icon-sun{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf185;');}
.icon-moon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf186;');}
.icon-archive{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;');}
.icon-bug{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf188;');}
.icon-vk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf189;');}
.icon-weibo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18a;');}
.icon-renren{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18b;');}
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More