Compare commits
18 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
4b8dc36bb3 | 3 months ago |
|
|
262f9e08ed | 3 months ago |
|
|
0da0f2b10e | 3 months ago |
|
|
6639ec668c | 3 months ago |
|
|
77b4835a47 | 3 months ago |
|
|
029004f302 | 4 months ago |
|
|
d999a80bc7 | 4 months ago |
|
|
e399e59d54 | 4 months ago |
|
|
5919d3fd02 | 5 months ago |
|
|
9cf68e5de0 | 5 months ago |
|
|
011832b7ab | 5 months ago |
|
|
e8541ab1a1 | 5 months ago |
|
|
dff4740297 | 5 months ago |
|
|
1bd5a88c89 | 5 months ago |
|
|
de84c29b11 | 5 months ago |
|
|
56ebf77b80 | 5 months ago |
|
|
78672a2e66 | 5 months ago |
|
|
4b73716286 | 5 months ago |
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Codegeex.RepoIndex": true
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,176 @@
|
|||||||
|
name: 自动部署到生产环境
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["Django CI"]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
environment:
|
||||||
|
description: '部署环境'
|
||||||
|
required: true
|
||||||
|
default: 'production'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- production
|
||||||
|
- staging
|
||||||
|
image_tag:
|
||||||
|
description: '镜像标签 (默认: latest)'
|
||||||
|
required: false
|
||||||
|
default: 'latest'
|
||||||
|
type: string
|
||||||
|
skip_tests:
|
||||||
|
description: '跳过测试直接部署'
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY: registry.cn-shenzhen.aliyuncs.com
|
||||||
|
IMAGE_NAME: liangliangyy/djangoblog
|
||||||
|
NAMESPACE: djangoblog
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
name: 构建镜像并部署到生产环境
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 检出代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: 设置部署参数
|
||||||
|
id: deploy-params
|
||||||
|
run: |
|
||||||
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||||
|
echo "trigger_type=手动触发" >> $GITHUB_OUTPUT
|
||||||
|
echo "environment=${{ github.event.inputs.environment }}" >> $GITHUB_OUTPUT
|
||||||
|
echo "image_tag=${{ github.event.inputs.image_tag }}" >> $GITHUB_OUTPUT
|
||||||
|
echo "skip_tests=${{ github.event.inputs.skip_tests }}" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "trigger_type=CI自动触发" >> $GITHUB_OUTPUT
|
||||||
|
echo "environment=production" >> $GITHUB_OUTPUT
|
||||||
|
echo "image_tag=latest" >> $GITHUB_OUTPUT
|
||||||
|
echo "skip_tests=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: 显示部署信息
|
||||||
|
run: |
|
||||||
|
echo "🚀 部署信息:"
|
||||||
|
echo " 触发方式: ${{ steps.deploy-params.outputs.trigger_type }}"
|
||||||
|
echo " 部署环境: ${{ steps.deploy-params.outputs.environment }}"
|
||||||
|
echo " 镜像标签: ${{ steps.deploy-params.outputs.image_tag }}"
|
||||||
|
echo " 跳过测试: ${{ steps.deploy-params.outputs.skip_tests }}"
|
||||||
|
|
||||||
|
- name: 设置Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: 登录私有镜像仓库
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY }}
|
||||||
|
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
|
|
||||||
|
- name: 提取镜像元数据
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=ref,event=branch
|
||||||
|
type=sha,prefix={{branch}}-
|
||||||
|
type=raw,value=${{ steps.deploy-params.outputs.image_tag }}
|
||||||
|
|
||||||
|
- name: 构建并推送Docker镜像
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
platforms: linux/amd64
|
||||||
|
|
||||||
|
- name: 部署到生产服务器
|
||||||
|
uses: appleboy/ssh-action@v1.0.3
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.PRODUCTION_HOST }}
|
||||||
|
username: ${{ secrets.PRODUCTION_USER }}
|
||||||
|
key: ${{ secrets.PRODUCTION_SSH_KEY }}
|
||||||
|
port: ${{ secrets.PRODUCTION_PORT || 22 }}
|
||||||
|
script: |
|
||||||
|
echo "🚀 开始部署 DjangoBlog..."
|
||||||
|
|
||||||
|
# 检查kubectl是否可用
|
||||||
|
if ! command -v kubectl &> /dev/null; then
|
||||||
|
echo "❌ 错误: kubectl 未安装或不在PATH中"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查命名空间是否存在
|
||||||
|
if ! kubectl get namespace ${{ env.NAMESPACE }} &> /dev/null; then
|
||||||
|
echo "❌ 错误: 命名空间 ${{ env.NAMESPACE }} 不存在"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 更新deployment镜像
|
||||||
|
echo "📦 更新deployment镜像为: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.deploy-params.outputs.image_tag }}"
|
||||||
|
kubectl set image deployment/djangoblog \
|
||||||
|
djangoblog=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.deploy-params.outputs.image_tag }} \
|
||||||
|
-n ${{ env.NAMESPACE }}
|
||||||
|
|
||||||
|
# 重启deployment
|
||||||
|
echo "🔄 重启deployment..."
|
||||||
|
kubectl -n ${{ env.NAMESPACE }} rollout restart deployment djangoblog
|
||||||
|
|
||||||
|
# 等待deployment完成
|
||||||
|
echo "⏳ 等待deployment完成..."
|
||||||
|
kubectl rollout status deployment/djangoblog -n ${{ env.NAMESPACE }} --timeout=300s
|
||||||
|
|
||||||
|
# 检查deployment状态
|
||||||
|
echo "✅ 检查deployment状态..."
|
||||||
|
kubectl get deployment djangoblog -n ${{ env.NAMESPACE }}
|
||||||
|
kubectl get pods -l app=djangoblog -n ${{ env.NAMESPACE }}
|
||||||
|
|
||||||
|
echo "🎉 部署完成!"
|
||||||
|
|
||||||
|
- name: 发送部署通知
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
# 设置通知内容
|
||||||
|
if [ "${{ job.status }}" = "success" ]; then
|
||||||
|
TITLE="✅ DjangoBlog部署成功"
|
||||||
|
STATUS="成功"
|
||||||
|
else
|
||||||
|
TITLE="❌ DjangoBlog部署失败"
|
||||||
|
STATUS="失败"
|
||||||
|
fi
|
||||||
|
|
||||||
|
MESSAGE="部署状态: ${STATUS}
|
||||||
|
触发方式: ${{ steps.deploy-params.outputs.trigger_type }}
|
||||||
|
部署环境: ${{ steps.deploy-params.outputs.environment }}
|
||||||
|
镜像标签: ${{ steps.deploy-params.outputs.image_tag }}
|
||||||
|
提交者: ${{ github.actor }}
|
||||||
|
时间: $(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
|
||||||
|
# 发送Server酱通知
|
||||||
|
if [ -n "${{ secrets.SERVERCHAN_KEY }}" ]; then
|
||||||
|
echo "{\"title\": \"${TITLE}\", \"desp\": \"${MESSAGE}\"}" > /tmp/serverchan.json
|
||||||
|
|
||||||
|
curl --location "https://sctapi.ftqq.com/${{ secrets.SERVERCHAN_KEY }}.send" \
|
||||||
|
--header "Content-Type: application/json" \
|
||||||
|
--data @/tmp/serverchan.json \
|
||||||
|
--silent > /dev/null
|
||||||
|
|
||||||
|
rm -f /tmp/serverchan.json
|
||||||
|
echo "📱 部署通知已发送"
|
||||||
|
fi
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
NAME="djangoblog"
|
||||||
|
DJANGODIR=/code/djangoblog
|
||||||
|
USER=root
|
||||||
|
GROUP=root
|
||||||
|
NUM_WORKERS=1
|
||||||
|
DJANGO_WSGI_MODULE=djangoblog.wsgi
|
||||||
|
|
||||||
|
|
||||||
|
echo "Starting $NAME as `whoami`"
|
||||||
|
|
||||||
|
cd $DJANGODIR
|
||||||
|
|
||||||
|
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
|
||||||
|
|
||||||
|
python manage.py makemigrations && \
|
||||||
|
python manage.py migrate && \
|
||||||
|
python manage.py collectstatic --noinput && \
|
||||||
|
python manage.py compress --force && \
|
||||||
|
python manage.py build_index && \
|
||||||
|
python manage.py compilemessages
|
||||||
|
|
||||||
|
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
|
||||||
|
--name $NAME \
|
||||||
|
--workers $NUM_WORKERS \
|
||||||
|
--user=$USER --group=$GROUP \
|
||||||
|
--bind 0.0.0.0:8000 \
|
||||||
|
--log-level=debug \
|
||||||
|
--log-file=- \
|
||||||
|
--worker-class gevent \
|
||||||
|
--threads 4
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
user nginx;
|
||||||
|
worker_processes auto;
|
||||||
|
|
||||||
|
error_log /var/log/nginx/error.log notice;
|
||||||
|
pid /var/run/nginx.pid;
|
||||||
|
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
#tcp_nopush on;
|
||||||
|
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
#gzip on;
|
||||||
|
|
||||||
|
server {
|
||||||
|
root /code/djangoblog/collectedstatic/;
|
||||||
|
listen 80;
|
||||||
|
keepalive_timeout 70;
|
||||||
|
location /static/ {
|
||||||
|
expires max;
|
||||||
|
alias /code/djangoblog/collectedstatic/;
|
||||||
|
}
|
||||||
|
location / {
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header Host $http_host;
|
||||||
|
proxy_set_header X-NginX-Proxy true;
|
||||||
|
proxy_redirect off;
|
||||||
|
if (!-f $request_filename) {
|
||||||
|
proxy_pass http://djangoblog:8000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,46 @@
|
|||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.shortcuts import redirect, get_object_or_404
|
||||||
|
from django.views.generic.edit import DeleteView
|
||||||
|
from django.urls import reverse_lazy
|
||||||
|
from .models import Article, Category, Tag, ArticleImage
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
|
"""删除文章视图"""
|
||||||
|
model = Article
|
||||||
|
template_name = 'blog/article_delete_confirm.html'
|
||||||
|
pk_url_kwarg = 'article_id'
|
||||||
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
obj = self.get_object()
|
||||||
|
# 只有文章作者或管理员可以删除
|
||||||
|
if obj.author != request.user and not request.user.is_superuser:
|
||||||
|
return redirect('blog:detailbyid',
|
||||||
|
article_id=obj.id,
|
||||||
|
year=obj.creation_time.year,
|
||||||
|
month=obj.creation_time.month,
|
||||||
|
day=obj.creation_time.day)
|
||||||
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context['all_categories'] = Category.objects.all()
|
||||||
|
context['all_tags'] = Tag.objects.all()
|
||||||
|
return context
|
||||||
|
|
||||||
|
def delete(self, request, *args, **kwargs):
|
||||||
|
# 删除文章前先删除所有相关图片
|
||||||
|
self.object = self.get_object()
|
||||||
|
images = ArticleImage.objects.filter(article=self.object)
|
||||||
|
for image in images:
|
||||||
|
# 删除图片文件
|
||||||
|
image.image.delete()
|
||||||
|
# 删除图片记录
|
||||||
|
image.delete()
|
||||||
|
|
||||||
|
# 调用父类的delete方法删除文章
|
||||||
|
return super().delete(request, *args, *kwargs)
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return reverse_lazy('blog:index')
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
from django import forms
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from .models import ArticleImage
|
||||||
|
|
||||||
|
|
||||||
|
class ImageUploadForm(forms.ModelForm):
|
||||||
|
"""图片上传表单"""
|
||||||
|
class Meta:
|
||||||
|
model = ArticleImage
|
||||||
|
fields = ['image', 'description']
|
||||||
|
widgets = {
|
||||||
|
'image': forms.FileInput(attrs={'class': 'form-control', 'accept': 'image/*'}),
|
||||||
|
'description': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('可选,添加图片描述')})
|
||||||
|
}
|
||||||
Binary file not shown.
@ -0,0 +1,41 @@
|
|||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from blog.models import Category
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = '创建文章分类'
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
categories = [
|
||||||
|
'技术',
|
||||||
|
'生活',
|
||||||
|
'旅行',
|
||||||
|
'美食',
|
||||||
|
'摄影',
|
||||||
|
'读书',
|
||||||
|
'电影',
|
||||||
|
'音乐',
|
||||||
|
'编程',
|
||||||
|
'设计',
|
||||||
|
'健康',
|
||||||
|
'教育',
|
||||||
|
'职场',
|
||||||
|
'财经',
|
||||||
|
'历史',
|
||||||
|
'文化',
|
||||||
|
'体育',
|
||||||
|
'游戏',
|
||||||
|
'科技'
|
||||||
|
]
|
||||||
|
|
||||||
|
for name in categories:
|
||||||
|
category, created = Category.objects.get_or_create(
|
||||||
|
name=name,
|
||||||
|
defaults={'parent_category': None}
|
||||||
|
)
|
||||||
|
if created:
|
||||||
|
self.stdout.write(self.style.SUCCESS(f'创建分类: {name}'))
|
||||||
|
else:
|
||||||
|
self.stdout.write(self.style.WARNING(f'分类已存在: {name}'))
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS('分类创建完成'))
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from blog.models import Category
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = '列出所有文章分类'
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
categories = Category.objects.all()
|
||||||
|
self.stdout.write('当前数据库中的分类:')
|
||||||
|
for category in categories:
|
||||||
|
self.stdout.write(f'- {category.name} (ID: {category.id})')
|
||||||
|
self.stdout.write(f'总计: {categories.count()} 个分类')
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
# Generated by Django
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('blog', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='articleimage',
|
||||||
|
name='article',
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
on_delete=models.deletion.CASCADE,
|
||||||
|
related_name='images',
|
||||||
|
to='blog.article'
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
# Generated by Django 4.2.14 on 2025-11-20 20:45
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('blog', '0006_alter_blogsettings_options'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ArticleImage',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('image', models.ImageField(upload_to='article_images/%Y/%m/%d/', verbose_name='图片')),
|
||||||
|
('description', models.CharField(blank=True, max_length=255, verbose_name='图片描述')),
|
||||||
|
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||||
|
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='blog.article')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': '文章图片',
|
||||||
|
'verbose_name_plural': '文章图片',
|
||||||
|
'ordering': ['-created_time'],
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
# Generated by Django 4.2.14 on 2025-11-20 22:28
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('blog', '0002_auto_20231201_1200'),
|
||||||
|
('blog', '0007_articleimage'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
]
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,9 @@
|
|||||||
|
.button {
|
||||||
|
border: none;
|
||||||
|
padding: 4px 80px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 16px;
|
||||||
|
margin: 4px 2px;
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
let wait = 60;
|
||||||
|
|
||||||
|
function time(o) {
|
||||||
|
if (wait == 0) {
|
||||||
|
o.removeAttribute("disabled");
|
||||||
|
o.value = "获取验证码";
|
||||||
|
wait = 60
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
o.setAttribute("disabled", true);
|
||||||
|
o.value = "重新发送(" + wait + ")";
|
||||||
|
wait--;
|
||||||
|
setTimeout(function () {
|
||||||
|
time(o)
|
||||||
|
},
|
||||||
|
1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("btn").onclick = function () {
|
||||||
|
let id_email = $("#id_email")
|
||||||
|
let token = $("*[name='csrfmiddlewaretoken']").val()
|
||||||
|
let ts = this
|
||||||
|
let myErr = $("#myErr")
|
||||||
|
$.ajax(
|
||||||
|
{
|
||||||
|
url: "/forget_password_code/",
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
"email": id_email.val(),
|
||||||
|
"csrfmiddlewaretoken": token
|
||||||
|
},
|
||||||
|
success: function (result) {
|
||||||
|
if (result != "ok") {
|
||||||
|
myErr.remove()
|
||||||
|
id_email.after("<ul className='errorlist' id='myErr'><li>" + result + "</li></ul>")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
myErr.remove()
|
||||||
|
time(ts)
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
|
alert("发送失败,请重试")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,13 @@
|
|||||||
|
/*!
|
||||||
|
* IE10 viewport hack for Surface/desktop Windows 8 bug
|
||||||
|
* Copyright 2014-2015 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See the Getting Started docs for more information:
|
||||||
|
* http://getbootstrap.com/getting-started/#support-ie10-width
|
||||||
|
*/
|
||||||
|
@-ms-viewport { width: device-width; }
|
||||||
|
@-o-viewport { width: device-width; }
|
||||||
|
@viewport { width: device-width; }
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
body {
|
||||||
|
padding-top: 40px;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-signin {
|
||||||
|
max-width: 330px;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.form-signin-heading {
|
||||||
|
margin: 0 0 15px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
.form-signin .checkbox {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.form-signin .form-control {
|
||||||
|
position: relative;
|
||||||
|
height: auto;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.form-signin .form-control:focus {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.form-signin input[type="email"] {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.form-signin input[type="password"] {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
width: 304px;
|
||||||
|
padding: 20px 25px 30px;
|
||||||
|
margin: 0 auto 25px;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-radius: 2px;
|
||||||
|
-webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
|
||||||
|
box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
|
||||||
|
}
|
||||||
|
.card-signin {
|
||||||
|
width: 354px;
|
||||||
|
padding: 40px;
|
||||||
|
}
|
||||||
|
.card-signin .profile-img {
|
||||||
|
display: block;
|
||||||
|
width: 96px;
|
||||||
|
height: 96px;
|
||||||
|
margin: 0 auto 10px;
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 221 B |
@ -0,0 +1,51 @@
|
|||||||
|
// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
|
||||||
|
// IT'S JUST JUNK FOR OUR DOCS!
|
||||||
|
// ++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
/*!
|
||||||
|
* Copyright 2014-2015 Twitter, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Creative Commons Attribution 3.0 Unported License. For
|
||||||
|
* details, see https://creativecommons.org/licenses/by/3.0/.
|
||||||
|
*/
|
||||||
|
// Intended to prevent false-positive bug reports about Bootstrap not working properly in old versions of IE due to folks testing using IE's unreliable emulation modes.
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function emulatedIEMajorVersion() {
|
||||||
|
var groups = /MSIE ([0-9.]+)/.exec(window.navigator.userAgent)
|
||||||
|
if (groups === null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
var ieVersionNum = parseInt(groups[1], 10)
|
||||||
|
var ieMajorVersion = Math.floor(ieVersionNum)
|
||||||
|
return ieMajorVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
function actualNonEmulatedIEMajorVersion() {
|
||||||
|
// Detects the actual version of IE in use, even if it's in an older-IE emulation mode.
|
||||||
|
// IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx
|
||||||
|
// @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx
|
||||||
|
var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // jshint ignore:line
|
||||||
|
if (jscriptVersion === undefined) {
|
||||||
|
return 11 // IE11+ not in emulation mode
|
||||||
|
}
|
||||||
|
if (jscriptVersion < 9) {
|
||||||
|
return 8 // IE8 (or lower; haven't tested on IE<8)
|
||||||
|
}
|
||||||
|
return jscriptVersion // IE9 or IE10 in any mode, or IE11 in non-IE11 mode
|
||||||
|
}
|
||||||
|
|
||||||
|
var ua = window.navigator.userAgent
|
||||||
|
if (ua.indexOf('Opera') > -1 || ua.indexOf('Presto') > -1) {
|
||||||
|
return // Opera, which might pretend to be IE
|
||||||
|
}
|
||||||
|
var emulated = emulatedIEMajorVersion()
|
||||||
|
if (emulated === null) {
|
||||||
|
return // Not IE
|
||||||
|
}
|
||||||
|
var nonEmulated = actualNonEmulatedIEMajorVersion()
|
||||||
|
|
||||||
|
if (emulated !== nonEmulated) {
|
||||||
|
window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!')
|
||||||
|
}
|
||||||
|
})();
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
/*!
|
||||||
|
* IE10 viewport hack for Surface/desktop Windows 8 bug
|
||||||
|
* Copyright 2014-2015 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// See the Getting Started docs for more information:
|
||||||
|
// http://getbootstrap.com/getting-started/#support-ie10-width
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
|
||||||
|
var msViewportStyle = document.createElement('style')
|
||||||
|
msViewportStyle.appendChild(
|
||||||
|
document.createTextNode(
|
||||||
|
'@-ms-viewport{width:auto!important}'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
document.querySelector('head').appendChild(msViewportStyle)
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
||||||
@ -0,0 +1,91 @@
|
|||||||
|
|
||||||
|
/* 自定义样式 - 修改导航栏背景色和按钮样式 */
|
||||||
|
|
||||||
|
/* 导航栏背景色改为天蓝色 */
|
||||||
|
.main-navigation {
|
||||||
|
background: linear-gradient(to right, #2e9ac5, #66b8db) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章标题链接样式 - 去掉蓝色按钮效果 */
|
||||||
|
.entry-title a {
|
||||||
|
color: #2c3e50 !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
background: none !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-title a:hover {
|
||||||
|
color: #3498db !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 侧边栏链接样式 - 去掉蓝色按钮效果 */
|
||||||
|
.widget a {
|
||||||
|
color: #34495e !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
background: none !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget a:hover {
|
||||||
|
color: #3498db !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章阅读更多链接 - 去掉蓝色按钮效果 */
|
||||||
|
.read-more {
|
||||||
|
background: none !important;
|
||||||
|
color: #3498db !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more:hover {
|
||||||
|
background: none !important;
|
||||||
|
color: #2980b9 !important;
|
||||||
|
transform: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章链接 - 去掉蓝色按钮效果 */
|
||||||
|
a[href*="/p/"],
|
||||||
|
a[href*="/article/"] {
|
||||||
|
background: none !important;
|
||||||
|
color: #3498db !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href*="/p/"]:hover,
|
||||||
|
a[href*="/article/"]:hover {
|
||||||
|
background: none !important;
|
||||||
|
color: #2980b9 !important;
|
||||||
|
transform: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 背景图片样式 */
|
||||||
|
body {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
background-image: url('/static/blog/img/default_bg.jpg');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 网站容器样式,确保背景图片可见 */
|
||||||
|
.site {
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
}
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
|
||||||
|
/* 简单的图标样式 */
|
||||||
|
|
||||||
|
/* 图标基础样式 */
|
||||||
|
[class^="icon-"], [class*=" icon-"] {
|
||||||
|
display: inline-block;
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
margin-right: 0.2em;
|
||||||
|
line-height: 1;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: inherit;
|
||||||
|
text-transform: none;
|
||||||
|
speak: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文件夹图标 */
|
||||||
|
.icon-folder:before {
|
||||||
|
content: "📁";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 标签图标 */
|
||||||
|
.icon-tag:before {
|
||||||
|
content: "🏷️";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 评论图标 */
|
||||||
|
.icon-comment:before {
|
||||||
|
content: "💬";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 搜索图标 */
|
||||||
|
#searchform input[type="submit"]:before {
|
||||||
|
content: "🔍";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 首页图标 */
|
||||||
|
#menu-item-3498 a:before {
|
||||||
|
content: "🏠";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 归档图标 */
|
||||||
|
.menu-item a[href*="archives"]:before {
|
||||||
|
content: "📚";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 管理站点图标 */
|
||||||
|
.menu-item a[href*="admin"]:before {
|
||||||
|
content: "⚙️";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 登录/登出图标 */
|
||||||
|
.menu-item a[href*="login"]:before {
|
||||||
|
content: "🔑";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-item a[href*="logout"]:before {
|
||||||
|
content: "🚪";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 发布文章图标 */
|
||||||
|
.menu-item a[href*="create"]:before {
|
||||||
|
content: "✍️";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 我的文章图标 */
|
||||||
|
.menu-item a[href*="my_articles"]:before {
|
||||||
|
content: "📝";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 返回顶部按钮 */
|
||||||
|
#rocket:before {
|
||||||
|
content: "⬆️";
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 背景切换按钮 */
|
||||||
|
.bg-toggle-btn i {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
@ -0,0 +1,273 @@
|
|||||||
|
/*
|
||||||
|
Styles for older IE versions (previous to IE9).
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #e6e6e6;
|
||||||
|
}
|
||||||
|
body.custom-background-empty {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
body.custom-background-empty .site,
|
||||||
|
body.custom-background-white .site {
|
||||||
|
box-shadow: none;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.assistive-text,
|
||||||
|
.site .screen-reader-text {
|
||||||
|
clip: rect(1px 1px 1px 1px);
|
||||||
|
}
|
||||||
|
.full-width .site-content {
|
||||||
|
float: none;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
img.size-full,
|
||||||
|
img.size-large,
|
||||||
|
img.header-image,
|
||||||
|
img.wp-post-image,
|
||||||
|
img[class*="align"],
|
||||||
|
img[class*="wp-image-"],
|
||||||
|
img[class*="attachment-"] {
|
||||||
|
width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */
|
||||||
|
}
|
||||||
|
.author-avatar {
|
||||||
|
float: left;
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-top: 0.571428571rem;
|
||||||
|
}
|
||||||
|
.author-description {
|
||||||
|
float: right;
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
.site {
|
||||||
|
box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3);
|
||||||
|
margin: 48px auto;
|
||||||
|
max-width: 960px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0 40px;
|
||||||
|
}
|
||||||
|
.site-content {
|
||||||
|
float: left;
|
||||||
|
width: 65.104166667%;
|
||||||
|
}
|
||||||
|
body.template-front-page .site-content,
|
||||||
|
body.attachment .site-content,
|
||||||
|
body.full-width .site-content {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.widget-area {
|
||||||
|
float: right;
|
||||||
|
width: 26.041666667%;
|
||||||
|
}
|
||||||
|
.site-header h1,
|
||||||
|
.site-header h2 {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.site-header h1 {
|
||||||
|
font-size: 26px;
|
||||||
|
line-height: 1.846153846;
|
||||||
|
}
|
||||||
|
.main-navigation ul.nav-menu,
|
||||||
|
.main-navigation div.nav-menu > ul {
|
||||||
|
border-bottom: 1px solid #ededed;
|
||||||
|
border-top: 1px solid #ededed;
|
||||||
|
display: inline-block !important;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.main-navigation ul {
|
||||||
|
margin: 0;
|
||||||
|
text-indent: 0;
|
||||||
|
}
|
||||||
|
.main-navigation li a,
|
||||||
|
.main-navigation li {
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.ie7 .main-navigation li a,
|
||||||
|
.ie7 .main-navigation li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
.main-navigation li a {
|
||||||
|
border-bottom: 0;
|
||||||
|
color: #6a6a6a;
|
||||||
|
line-height: 3.692307692;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
.main-navigation li a:hover {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.main-navigation li {
|
||||||
|
margin: 0 40px 0 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.main-navigation li ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
height: 1px;
|
||||||
|
width: 1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(1px, 1px, 1px, 1px);
|
||||||
|
}
|
||||||
|
.ie7 .main-navigation li ul {
|
||||||
|
clip: inherit;
|
||||||
|
display: none;
|
||||||
|
left: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
.main-navigation li ul ul,
|
||||||
|
.ie7 .main-navigation li ul ul {
|
||||||
|
top: 0;
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
.main-navigation ul li:hover > ul,
|
||||||
|
.main-navigation ul li:focus > ul,
|
||||||
|
.main-navigation .focus > ul {
|
||||||
|
border-left: 0;
|
||||||
|
clip: inherit;
|
||||||
|
overflow: inherit;
|
||||||
|
height: inherit;
|
||||||
|
width: inherit;
|
||||||
|
}
|
||||||
|
.ie7 .main-navigation ul li:hover > ul,
|
||||||
|
.ie7 .main-navigation ul li:focus > ul {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.main-navigation li ul li a {
|
||||||
|
background: #efefef;
|
||||||
|
border-bottom: 1px solid #ededed;
|
||||||
|
display: block;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 2.181818182;
|
||||||
|
padding: 8px 10px;
|
||||||
|
width: 180px;
|
||||||
|
}
|
||||||
|
.main-navigation li ul li a:hover {
|
||||||
|
background: #e3e3e3;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
.main-navigation .current-menu-item > a,
|
||||||
|
.main-navigation .current-menu-ancestor > a,
|
||||||
|
.main-navigation .current_page_item > a,
|
||||||
|
.main-navigation .current_page_ancestor > a {
|
||||||
|
color: #636363;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.main-navigation .menu-toggle {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.entry-header .entry-title {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
#respond form input[type="text"] {
|
||||||
|
width: 46.333333333%;
|
||||||
|
}
|
||||||
|
#respond form textarea.blog-textarea {
|
||||||
|
width: 79.666666667%;
|
||||||
|
}
|
||||||
|
.template-front-page .site-content,
|
||||||
|
.template-front-page article {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.template-front-page.has-post-thumbnail article {
|
||||||
|
float: left;
|
||||||
|
width: 47.916666667%;
|
||||||
|
}
|
||||||
|
.entry-page-image {
|
||||||
|
float: right;
|
||||||
|
margin-bottom: 0;
|
||||||
|
width: 47.916666667%;
|
||||||
|
}
|
||||||
|
/* IE Front Page Template Widget fix */
|
||||||
|
.template-front-page .widget-area {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.template-front-page .widget {
|
||||||
|
width: 100% !important;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.template-front-page .widget-area .widget,
|
||||||
|
.template-front-page .first.front-widgets,
|
||||||
|
.template-front-page.two-sidebars .widget-area .front-widgets {
|
||||||
|
float: left;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
width: 51.875%;
|
||||||
|
}
|
||||||
|
.template-front-page .second.front-widgets,
|
||||||
|
.template-front-page .widget-area .widget:nth-child(odd) {
|
||||||
|
clear: right;
|
||||||
|
}
|
||||||
|
.template-front-page .first.front-widgets,
|
||||||
|
.template-front-page .second.front-widgets,
|
||||||
|
.template-front-page.two-sidebars .widget-area .front-widgets + .front-widgets {
|
||||||
|
float: right;
|
||||||
|
margin: 0 0 24px;
|
||||||
|
width: 39.0625%;
|
||||||
|
}
|
||||||
|
.template-front-page.two-sidebars .widget,
|
||||||
|
.template-front-page.two-sidebars .widget:nth-child(even) {
|
||||||
|
float: none;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
/* add input font for <IE9 Password Box to make the bullets show up */
|
||||||
|
input[type="password"] {
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RTL overrides for IE7 and IE8
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
.rtl .site-header h1,
|
||||||
|
.rtl .site-header h2 {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.rtl .widget-area,
|
||||||
|
.rtl .author-description {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.rtl .author-avatar,
|
||||||
|
.rtl .site-content {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.rtl .main-navigation ul.nav-menu,
|
||||||
|
.rtl .main-navigation div.nav-menu > ul {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.rtl .main-navigation ul li ul li,
|
||||||
|
.rtl .main-navigation ul li ul li ul li {
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
.rtl .main-navigation li ul ul {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.ie7 .rtl .main-navigation li ul ul {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.ie7 .rtl .main-navigation ul li {
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
.ie7 .rtl .main-navigation li ul {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100%;
|
||||||
|
right: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.ie7 .rtl .main-navigation li {
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
.ie7 .rtl .main-navigation li ul ul ul {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
@ -0,0 +1,968 @@
|
|||||||
|
|
||||||
|
/* 现代化博客样式 - 保持原有布局但提升视觉效果 */
|
||||||
|
|
||||||
|
/* 全局样式优化 */
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
||||||
|
color: #333;
|
||||||
|
line-height: 1.6;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 网站容器优化 */
|
||||||
|
.site {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 2rem auto;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 网站头部优化 */
|
||||||
|
.site-header {
|
||||||
|
background: linear-gradient(to bottom, #fff, #f8f9fa);
|
||||||
|
padding: 1.5rem 0;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-title a {
|
||||||
|
font-size: 2.2rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #2c3e50;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-title a::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: -5px;
|
||||||
|
left: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 3px;
|
||||||
|
background: linear-gradient(to right, #3498db, #2980b9);
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-title a:hover {
|
||||||
|
color: #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-title a:hover::after {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-description {
|
||||||
|
color: #7f8c8d;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 导航栏优化 */
|
||||||
|
.main-navigation {
|
||||||
|
margin-top: 1rem;
|
||||||
|
background: linear-gradient(to right, #34495e, #2c3e50);
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 6px;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 4px;
|
||||||
|
background: linear-gradient(to right, #3498db, #2980b9);
|
||||||
|
box-shadow: 0 2px 4px rgba(52, 152, 219, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 1px;
|
||||||
|
background: linear-gradient(to right, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05));
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation ul {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation li {
|
||||||
|
position: relative;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation a {
|
||||||
|
color: #ecf0f1;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 0.9rem 1.2rem;
|
||||||
|
display: block;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation a::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 3px;
|
||||||
|
background: linear-gradient(to right, #3498db, #2980b9);
|
||||||
|
transform: translateX(-50%);
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation a:hover::before {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation a::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
border-radius: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
transition: width 0.6s ease, height 0.6s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation a:hover::after {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation a:hover {
|
||||||
|
color: #fff;
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 当前活动菜单项 */
|
||||||
|
.main-navigation .current-menu-item > a,
|
||||||
|
.main-navigation .current_page_item > a {
|
||||||
|
color: #fff;
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation .current-menu-item > a::before,
|
||||||
|
.main-navigation .current_page_item > a::before {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 下拉菜单样式 */
|
||||||
|
.main-navigation .sub-menu {
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
background: linear-gradient(to bottom, #34495e, #2c3e50);
|
||||||
|
min-width: 220px;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
transform: translateY(15px);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
z-index: 1000;
|
||||||
|
border-radius: 0 0 6px 6px;
|
||||||
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation li:hover > .sub-menu {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation .sub-menu li {
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation .sub-menu a {
|
||||||
|
padding: 0.8rem 1.2rem;
|
||||||
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation .sub-menu li:last-child a {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation .sub-menu a::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 4px;
|
||||||
|
background: linear-gradient(to bottom, #3498db, #2980b9);
|
||||||
|
transform: scaleY(0);
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation .sub-menu a:hover::before {
|
||||||
|
transform: scaleY(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 移动端菜单按钮 */
|
||||||
|
.menu-toggle {
|
||||||
|
display: none;
|
||||||
|
background-color: #34495e;
|
||||||
|
color: #ecf0f1;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 500;
|
||||||
|
margin: 1rem auto;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-toggle::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -100%;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.1), transparent);
|
||||||
|
transition: left 0.5s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-toggle:hover::before {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-toggle:hover {
|
||||||
|
background-color: #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 主内容区域优化 */
|
||||||
|
#main {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#primary {
|
||||||
|
flex: 2;
|
||||||
|
padding-right: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#secondary {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章卡片样式 */
|
||||||
|
article.post {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
||||||
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
article.post:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-header {
|
||||||
|
padding: 1.5rem 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章顶部元信息 */
|
||||||
|
.article-meta-top {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.author-avatar {
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.author-avatar img {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.author-info {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.author-name {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-date {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-views {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章标题 */
|
||||||
|
.entry-title {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.3;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pin-indicator {
|
||||||
|
color: #e74c3c;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-title a {
|
||||||
|
color: #2c3e50;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-title a:hover {
|
||||||
|
color: #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 面包屑导航 */
|
||||||
|
.breadcrumb {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb a {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章元信息 */
|
||||||
|
.article-meta {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta span {
|
||||||
|
margin-right: 1rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta a {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章内容 */
|
||||||
|
.entry-content {
|
||||||
|
padding: 0 1.5rem 1.5rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-summary {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more-container {
|
||||||
|
text-align: right;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: linear-gradient(to right, #3498db, #2980b9);
|
||||||
|
color: #fff;
|
||||||
|
padding: 0.6rem 1.2rem;
|
||||||
|
border-radius: 30px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
box-shadow: 0 2px 5px rgba(52, 152, 219, 0.3);
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -100%;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.2), transparent);
|
||||||
|
transition: left 0.6s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more:hover::before {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 4px 8px rgba(52, 152, 219, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more .arrow {
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
font-weight: bold;
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more:hover .arrow {
|
||||||
|
transform: translateX(3px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 统一所有阅读更多链接的样式 */
|
||||||
|
a[href*="/p/"],
|
||||||
|
a[href*="/article/"] {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: linear-gradient(to right, #3498db, #2980b9);
|
||||||
|
color: #fff;
|
||||||
|
padding: 0.6rem 1.2rem;
|
||||||
|
border-radius: 30px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
box-shadow: 0 2px 5px rgba(52, 152, 219, 0.3);
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href*="/p/"]::before,
|
||||||
|
a[href*="/article/"]::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -100%;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.2), transparent);
|
||||||
|
transition: left 0.6s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href*="/p/"]:hover::before,
|
||||||
|
a[href*="/article/"]:hover::before {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href*="/p/"]:hover,
|
||||||
|
a[href*="/article/"]:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 4px 8px rgba(52, 152, 219, 0.4);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 目录样式 */
|
||||||
|
.toc-container {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-title {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
color: #2c3e50;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-content ul {
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-content li {
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-content a {
|
||||||
|
color: #34495e;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-content a:hover {
|
||||||
|
color: #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章内容区域 */
|
||||||
|
.article-content {
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文章页脚 */
|
||||||
|
.entry-footer {
|
||||||
|
padding: 0 1.5rem 1.5rem;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 侧边栏样式 */
|
||||||
|
.widget-area {
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
border-bottom: 2px solid #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget li {
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget li:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget a {
|
||||||
|
color: #34495e;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget a:hover {
|
||||||
|
color: #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 搜索框样式 */
|
||||||
|
#searchform {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchform input[type="text"] {
|
||||||
|
flex: 1;
|
||||||
|
padding: 0.75rem;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px 0 0 4px;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchform input[type="submit"] {
|
||||||
|
background-color: #3498db;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
padding: 0 1rem;
|
||||||
|
border-radius: 0 4px 4px 0;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchform input[type="submit"]:hover {
|
||||||
|
background-color: #2980b9;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 标签云样式 */
|
||||||
|
.tagcloud a {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0.25rem;
|
||||||
|
padding: 0.25rem 0.5rem;
|
||||||
|
background-color: #f1f2f6;
|
||||||
|
color: #34495e;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tagcloud a:hover {
|
||||||
|
background-color: #3498db;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 评论区域样式 */
|
||||||
|
.comments-area {
|
||||||
|
margin-top: 2rem;
|
||||||
|
padding: 1.5rem;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-list {
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
padding-bottom: 1.5rem;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-author {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-meta {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 页脚样式 */
|
||||||
|
footer[role="contentinfo"] {
|
||||||
|
background-color: #34495e;
|
||||||
|
color: #ecf0f1;
|
||||||
|
padding: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer[role="contentinfo"] a {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer[role="contentinfo"] a:hover {
|
||||||
|
color: #5dade2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 归档页面样式 */
|
||||||
|
.archive-header {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-title {
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-title .icon-folder {
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-description {
|
||||||
|
font-size: 1rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-content {
|
||||||
|
padding: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 时间轴样式 */
|
||||||
|
.timeline-container {
|
||||||
|
position: relative;
|
||||||
|
padding: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline-container::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 30px;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 3px;
|
||||||
|
background: linear-gradient(to bottom, #3498db, #2980b9);
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline-year {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.year-title {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
padding-left: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.year-badge {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
background-color: #3498db;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 50%;
|
||||||
|
box-shadow: 0 3px 10px rgba(52, 152, 219, 0.3);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.year-text {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-count {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
padding: 0.2rem 0.5rem;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline-months {
|
||||||
|
padding-left: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline-month {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.month-title {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.month-badge {
|
||||||
|
position: absolute;
|
||||||
|
left: -45px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
background-color: #2ecc71;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 50%;
|
||||||
|
box-shadow: 0 2px 6px rgba(46, 204, 113, 0.3);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.month-text {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline-articles {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-article {
|
||||||
|
display: flex;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 1rem;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
||||||
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-article:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-date {
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.day {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: #f1f2f6;
|
||||||
|
color: #2c3e50;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-content {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-title {
|
||||||
|
margin: 0 0 0.5rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-title a {
|
||||||
|
color: #2c3e50;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-title a:hover {
|
||||||
|
color: #3498db;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta {
|
||||||
|
display: flex;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: #7f8c8d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta .category {
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta a {
|
||||||
|
color: #3498db;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-meta a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 返回顶部按钮 */
|
||||||
|
#rocket {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 2rem;
|
||||||
|
right: 2rem;
|
||||||
|
width: 3rem;
|
||||||
|
height: 3rem;
|
||||||
|
background-color: #3498db;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rocket.show {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rocket:hover {
|
||||||
|
background-color: #2980b9;
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
#rocket::before {
|
||||||
|
content: "↑";
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media screen and (max-width: 992px) {
|
||||||
|
#main {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
#primary {
|
||||||
|
padding-right: 0;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-area {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
.site {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation ul {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-navigation li {
|
||||||
|
margin: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#primary, #secondary {
|
||||||
|
padding: 0 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
/* Make clicks pass-through */
|
||||||
|
#nprogress {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nprogress .bar {
|
||||||
|
background: red;
|
||||||
|
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1031;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fancy blur effect */
|
||||||
|
#nprogress .peg {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
right: 0px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100%;
|
||||||
|
box-shadow: 0 0 10px #29d, 0 0 5px #29d;
|
||||||
|
opacity: 1.0;
|
||||||
|
|
||||||
|
-webkit-transform: rotate(3deg) translate(0px, -4px);
|
||||||
|
-ms-transform: rotate(3deg) translate(0px, -4px);
|
||||||
|
transform: rotate(3deg) translate(0px, -4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove these to get rid of the spinner */
|
||||||
|
#nprogress .spinner {
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1031;
|
||||||
|
top: 15px;
|
||||||
|
right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nprogress .spinner-icon {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
border: solid 2px transparent;
|
||||||
|
border-top-color: red;
|
||||||
|
border-left-color: red;
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
-webkit-animation: nprogress-spinner 400ms linear infinite;
|
||||||
|
animation: nprogress-spinner 400ms linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nprogress-custom-parent {
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nprogress-custom-parent #nprogress .spinner,
|
||||||
|
.nprogress-custom-parent #nprogress .bar {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes nprogress-spinner {
|
||||||
|
0% { -webkit-transform: rotate(0deg); }
|
||||||
|
100% { -webkit-transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
@keyframes nprogress-spinner {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,305 @@
|
|||||||
|
|
||||||
|
.icon-sn-google {
|
||||||
|
background-position: 0 -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-google {
|
||||||
|
background-color: #4285f4;
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-google {
|
||||||
|
color: #4285f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-github {
|
||||||
|
background-position: -28px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-github {
|
||||||
|
background-color: #333;
|
||||||
|
background-position: -28px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-github {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-weibo {
|
||||||
|
background-position: -56px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-weibo {
|
||||||
|
background-color: #e90d24;
|
||||||
|
background-position: -56px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-weibo {
|
||||||
|
color: #e90d24;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-qq {
|
||||||
|
background-position: -84px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-qq {
|
||||||
|
background-color: #0098e6;
|
||||||
|
background-position: -84px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-qq {
|
||||||
|
color: #0098e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-twitter {
|
||||||
|
background-position: -112px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-twitter {
|
||||||
|
background-color: #50abf1;
|
||||||
|
background-position: -112px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-twitter {
|
||||||
|
color: #50abf1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-facebook {
|
||||||
|
background-position: -140px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-facebook {
|
||||||
|
background-color: #4862a3;
|
||||||
|
background-position: -140px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-facebook {
|
||||||
|
color: #4862a3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-renren {
|
||||||
|
background-position: -168px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-renren {
|
||||||
|
background-color: #197bc8;
|
||||||
|
background-position: -168px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-renren {
|
||||||
|
color: #197bc8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-tqq {
|
||||||
|
background-position: -196px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-tqq {
|
||||||
|
background-color: #1f9ed2;
|
||||||
|
background-position: -196px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-tqq {
|
||||||
|
color: #1f9ed2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-douban {
|
||||||
|
background-position: -224px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-douban {
|
||||||
|
background-color: #279738;
|
||||||
|
background-position: -224px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-douban {
|
||||||
|
color: #279738;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-weixin {
|
||||||
|
background-position: -252px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-weixin {
|
||||||
|
background-color: #00b500;
|
||||||
|
background-position: -252px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-weixin {
|
||||||
|
color: #00b500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-dotted {
|
||||||
|
background-position: -280px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-dotted {
|
||||||
|
background-color: #eee;
|
||||||
|
background-position: -280px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-dotted {
|
||||||
|
color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-site {
|
||||||
|
background-position: -308px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-site {
|
||||||
|
background-color: #00b500;
|
||||||
|
background-position: -308px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-site {
|
||||||
|
color: #00b500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-linkedin {
|
||||||
|
background-position: -336px -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sn-bg-linkedin {
|
||||||
|
background-color: #0077b9;
|
||||||
|
background-position: -336px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-sn-linkedin {
|
||||||
|
color: #0077b9;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*=icon-sn-] {
|
||||||
|
display: inline-block;
|
||||||
|
background-image: url('../img/icon-sn.svg');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-size: auto 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*=icon-sn-]:hover {
|
||||||
|
opacity: .8;
|
||||||
|
filter: alpha(opacity=80);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-google {
|
||||||
|
background: #4285f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-google:active, .btn-sn-google:focus, .btn-sn-google:hover {
|
||||||
|
background: #2a75f3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-github {
|
||||||
|
background: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-github:active, .btn-sn-github:focus, .btn-sn-github:hover {
|
||||||
|
background: #262626;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-weibo {
|
||||||
|
background: #e90d24;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-weibo:active, .btn-sn-weibo:focus, .btn-sn-weibo:hover {
|
||||||
|
background: #d10c20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-qq {
|
||||||
|
background: #0098e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-qq:active, .btn-sn-qq:focus, .btn-sn-qq:hover {
|
||||||
|
background: #0087cd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-twitter {
|
||||||
|
background: #50abf1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-twitter:active, .btn-sn-twitter:focus, .btn-sn-twitter:hover {
|
||||||
|
background: #38a0ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-facebook {
|
||||||
|
background: #4862a3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-facebook:active, .btn-sn-facebook:focus, .btn-sn-facebook:hover {
|
||||||
|
background: #405791;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-renren {
|
||||||
|
background: #197bc8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-renren:active, .btn-sn-renren:focus, .btn-sn-renren:hover {
|
||||||
|
background: #166db1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-tqq {
|
||||||
|
background: #1f9ed2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-tqq:active, .btn-sn-tqq:focus, .btn-sn-tqq:hover {
|
||||||
|
background: #1c8dbc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-douban {
|
||||||
|
background: #279738;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-douban:active, .btn-sn-douban:focus, .btn-sn-douban:hover {
|
||||||
|
background: #228330;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-weixin {
|
||||||
|
background: #00b500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-weixin:active, .btn-sn-weixin:focus, .btn-sn-weixin:hover {
|
||||||
|
background: #009c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-dotted {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-dotted:active, .btn-sn-dotted:focus, .btn-sn-dotted:hover {
|
||||||
|
background: #e1e1e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-site {
|
||||||
|
background: #00b500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-site:active, .btn-sn-site:focus, .btn-sn-site:hover {
|
||||||
|
background: #009c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-linkedin {
|
||||||
|
background: #0077b9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-linkedin:active, .btn-sn-linkedin:focus, .btn-sn-linkedin:hover {
|
||||||
|
background: #0067a0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*=btn-sn-], [class*=btn-sn-]:active, [class*=btn-sn-]:focus, [class*=btn-sn-]:hover {
|
||||||
|
border: none;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-more {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sn-more, .btn-sn-more:active, .btn-sn-more:hover {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*=btn-sn-] [class*=icon-sn-] {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,378 @@
|
|||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem6YaGs126MiZpBA-UFUK0Zdc0.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UN_r8OUuhp.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFVp0bbck.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFWp0bbck.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFW50bbck.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem8YaGs126MiZpBA-UFVZ0b.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: fallback;
|
||||||
|
src: url(mem5YaGs126MiZpBA-UNirkOUuhp.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue