From 98d246558a42c59cde3bb307a00ba7e6f2dd3c85 Mon Sep 17 00:00:00 2001 From: kelinlang Date: Tue, 17 Dec 2019 13:10:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C++/C Primer 中文第四版(非扫描).pdf | Bin 3269889 -> 3288702 bytes .../flv_h265_patch/ffmpeg_3.3_flv_patch.rar | Bin 0 -> 21126 bytes .../flv_h265_patch/ffmpeg_3.3_flv_patch/flv.h | 139 + .../ffmpeg_3.3_flv_patch/flvdec.c | 1320 +++++++++ .../ffmpeg_3.3_flv_patch/flvenc.c | 1114 ++++++++ StreamMedia/flv_h265_patch/ffmpeg_flv/flv.h | 140 + .../flv_h265_patch/ffmpeg_flv/flvdec.c | 1418 ++++++++++ .../flv_h265_patch/ffmpeg_flv/flvenc.c | 1180 +++++++++ StreamMedia/flv_h265_patch/flv_h265_patch.rar | Bin 0 -> 35413 bytes .../nginx_rtmp_module/ngx_rtmp_codec_module.c | 1382 ++++++++++ .../nginx_rtmp_module/ngx_rtmp_live_module.c | 1108 ++++++++ StreamMedia/流媒体测试服务器搭建.md | 39 + .../FFmpeg时间戳详解 - 云+社区 - 腾讯云.html | 338 +++ .../AskDialog-201906131103.css | 2 + .../Column-20199161611.css | 2 + .../MathJax.js.下载 | 19 + .../analytics.js.下载 | 42 + .../api.js.下载 | 19 + .../article-detail.74aef85e22.js.下载 | 1 + .../base-201911131148.css | 2 + .../base.18719486f5.js.下载 | 1 + .../common.64ea2de3ba.js.下载 | 1 + .../draft-master-v1.3.38.css | 2355 +++++++++++++++++ .../draft-master-v1.3.38.js.下载 | 2 + .../f(1).txt | 1 + .../f(2).txt | 1 + .../f.txt | 55 + .../global-201911291451.css | 2 + .../gtm.js.下载 | 240 ++ .../index.93e5437c205358f68660.js.下载 | 4 + .../index.js.下载 | 1 + .../left-nav.3cab8319a893bdfb2876e4cd5499b986.js.下载 | 1 + .../loader.js.下载 | 66 + .../lv0b2oqwtf.jpeg | Bin 0 -> 72557 bytes .../markdown-201810241044.css | 2 + .../qcloudStatApi.js.下载 | 1 + .../stats | 21 + .../stats.js.下载 | 18 + .../wechat-qr.jpg | Bin 0 -> 18664 bytes .../wechatJsSdk.js.下载 | 1 + 直播工具包/流媒体 nginx-1.9.9编译安装 | 12 +- 41 files changed, 11049 insertions(+), 1 deletion(-) create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch.rar create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flv.h create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvdec.c create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvenc.c create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_flv/flv.h create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_flv/flvdec.c create mode 100644 StreamMedia/flv_h265_patch/ffmpeg_flv/flvenc.c create mode 100644 StreamMedia/flv_h265_patch/flv_h265_patch.rar create mode 100644 StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_codec_module.c create mode 100644 StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_live_module.c create mode 100644 StreamMedia/流媒体测试服务器搭建.md create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云.html create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/AskDialog-201906131103.css create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/Column-20199161611.css create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/MathJax.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/analytics.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/api.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/article-detail.74aef85e22.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/base-201911131148.css create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/base.18719486f5.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/common.64ea2de3ba.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/draft-master-v1.3.38.css create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/draft-master-v1.3.38.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/f(1).txt create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/f(2).txt create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/f.txt create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/global-201911291451.css create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/gtm.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/index.93e5437c205358f68660.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/index.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/left-nav.3cab8319a893bdfb2876e4cd5499b986.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/loader.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/lv0b2oqwtf.jpeg create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/markdown-201810241044.css create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/qcloudStatApi.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/stats create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/stats.js.下载 create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/wechat-qr.jpg create mode 100644 直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/wechatJsSdk.js.下载 diff --git a/C++/C Primer 中文第四版(非扫描).pdf b/C++/C Primer 中文第四版(非扫描).pdf index 209757453c54d98e02e390fde5af21e448ae8fe7..8802c7aa0ffb8cd8825c2f5c4402f85febd32e80 100644 GIT binary patch delta 184747 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

KA)I&E8dzo%nj^SChi+Y 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

691oXHOR?V{TCID2>Ik)b?M3{RjUW^2l|8ZLY+ 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 delta 158764 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�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�aeVJv2N@P6 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 diff --git a/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch.rar b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch.rar new file mode 100644 index 0000000000000000000000000000000000000000..3bf11de5bf4950a1ef19e0a3d851dcfaabe2f20e GIT binary patch literal 21126 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 literal 0 HcmV?d00001 diff --git a/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flv.h b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flv.h new file mode 100644 index 0000000..089bc76 --- /dev/null +++ b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flv.h @@ -0,0 +1,139 @@ +/* + * FLV common header + * + * Copyright (c) 2006 The FFmpeg Project + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * FLV common header + */ + +#ifndef AVFORMAT_FLV_H +#define AVFORMAT_FLV_H + +/* offsets for packed values */ +#define FLV_AUDIO_SAMPLESSIZE_OFFSET 1 +#define FLV_AUDIO_SAMPLERATE_OFFSET 2 +#define FLV_AUDIO_CODECID_OFFSET 4 + +#define FLV_VIDEO_FRAMETYPE_OFFSET 4 + +/* bitmasks to isolate specific values */ +#define FLV_AUDIO_CHANNEL_MASK 0x01 +#define FLV_AUDIO_SAMPLESIZE_MASK 0x02 +#define FLV_AUDIO_SAMPLERATE_MASK 0x0c +#define FLV_AUDIO_CODECID_MASK 0xf0 + +#define FLV_VIDEO_CODECID_MASK 0x0f +#define FLV_VIDEO_FRAMETYPE_MASK 0xf0 + +#define AMF_END_OF_OBJECT 0x09 + +#define KEYFRAMES_TAG "keyframes" +#define KEYFRAMES_TIMESTAMP_TAG "times" +#define KEYFRAMES_BYTEOFFSET_TAG "filepositions" + + +enum { + FLV_HEADER_FLAG_HASVIDEO = 1, + FLV_HEADER_FLAG_HASAUDIO = 4, +}; + +enum FlvTagType { + FLV_TAG_TYPE_AUDIO = 0x08, + FLV_TAG_TYPE_VIDEO = 0x09, + FLV_TAG_TYPE_META = 0x12, +}; + +enum { + FLV_STREAM_TYPE_VIDEO, + FLV_STREAM_TYPE_AUDIO, + FLV_STREAM_TYPE_DATA, + FLV_STREAM_TYPE_NB, +}; + +enum { + FLV_MONO = 0, + FLV_STEREO = 1, +}; + +enum { + FLV_SAMPLESSIZE_8BIT = 0, + FLV_SAMPLESSIZE_16BIT = 1 << FLV_AUDIO_SAMPLESSIZE_OFFSET, +}; + +enum { + FLV_SAMPLERATE_SPECIAL = 0, /**< signifies 5512Hz and 8000Hz in the case of NELLYMOSER */ + FLV_SAMPLERATE_11025HZ = 1 << FLV_AUDIO_SAMPLERATE_OFFSET, + FLV_SAMPLERATE_22050HZ = 2 << FLV_AUDIO_SAMPLERATE_OFFSET, + FLV_SAMPLERATE_44100HZ = 3 << FLV_AUDIO_SAMPLERATE_OFFSET, +}; + +enum { + FLV_CODECID_PCM = 0, + FLV_CODECID_ADPCM = 1 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_MP3 = 2 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_PCM_LE = 3 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_NELLYMOSER_16KHZ_MONO = 4 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_NELLYMOSER_8KHZ_MONO = 5 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_NELLYMOSER = 6 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_PCM_ALAW = 7 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_PCM_MULAW = 8 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_AAC = 10<< FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_SPEEX = 11<< FLV_AUDIO_CODECID_OFFSET, +}; + +enum { + FLV_CODECID_H263 = 2, + FLV_CODECID_SCREEN = 3, + FLV_CODECID_VP6 = 4, + FLV_CODECID_VP6A = 5, + FLV_CODECID_SCREEN2 = 6, + FLV_CODECID_H264 = 7, + FLV_CODECID_REALH263= 8, + FLV_CODECID_MPEG4 = 9, + FLV_CODECID_HEVC = 12, +}; + +enum { + FLV_FRAME_KEY = 1 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< key frame (for AVC, a seekable frame) + FLV_FRAME_INTER = 2 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< inter frame (for AVC, a non-seekable frame) + FLV_FRAME_DISP_INTER = 3 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< disposable inter frame (H.263 only) + FLV_FRAME_GENERATED_KEY = 4 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< generated key frame (reserved for server use only) + FLV_FRAME_VIDEO_INFO_CMD = 5 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< video info/command frame +}; + +typedef enum { + AMF_DATA_TYPE_NUMBER = 0x00, + AMF_DATA_TYPE_BOOL = 0x01, + AMF_DATA_TYPE_STRING = 0x02, + AMF_DATA_TYPE_OBJECT = 0x03, + AMF_DATA_TYPE_NULL = 0x05, + AMF_DATA_TYPE_UNDEFINED = 0x06, + AMF_DATA_TYPE_REFERENCE = 0x07, + AMF_DATA_TYPE_MIXEDARRAY = 0x08, + AMF_DATA_TYPE_OBJECT_END = 0x09, + AMF_DATA_TYPE_ARRAY = 0x0a, + AMF_DATA_TYPE_DATE = 0x0b, + AMF_DATA_TYPE_LONG_STRING = 0x0c, + AMF_DATA_TYPE_UNSUPPORTED = 0x0d, +} AMFDataType; + +#endif /* AVFORMAT_FLV_H */ diff --git a/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvdec.c b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvdec.c new file mode 100644 index 0000000..8adae2f --- /dev/null +++ b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvdec.c @@ -0,0 +1,1320 @@ +/* + * FLV demuxer + * Copyright (c) 2003 The FFmpeg Project + * + * This demuxer will generate a 1 byte extradata for VP6F content. + * It is composed of: + * - upper 4 bits: difference between encoded width and visible width + * - lower 4 bits: difference between encoded height and visible height + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/avstring.h" +#include "libavutil/channel_layout.h" +#include "libavutil/dict.h" +#include "libavutil/opt.h" +#include "libavutil/intfloat.h" +#include "libavutil/mathematics.h" +#include "libavcodec/bytestream.h" +#include "libavcodec/mpeg4audio.h" +#include "avformat.h" +#include "internal.h" +#include "avio_internal.h" +#include "flv.h" +#include "hevc.h" + +#define VALIDATE_INDEX_TS_THRESH 2500 + +#define RESYNC_BUFFER_SIZE (1<<20) + +typedef struct FLVContext { + const AVClass *class; ///< Class for private options. + int trust_metadata; ///< configure streams according onMetaData + int wrong_dts; ///< wrong dts due to negative cts + uint8_t *new_extradata[FLV_STREAM_TYPE_NB]; + int new_extradata_size[FLV_STREAM_TYPE_NB]; + int last_sample_rate; + int last_channels; + struct { + int64_t dts; + int64_t pos; + } validate_index[2]; + int validate_next; + int validate_count; + int searched_for_end; + + uint8_t resync_buffer[2*RESYNC_BUFFER_SIZE]; + + int broken_sizes; + int sum_flv_tag_size; + + int last_keyframe_stream_index; + int keyframe_count; + int64_t video_bit_rate; + int64_t audio_bit_rate; + int64_t *keyframe_times; + int64_t *keyframe_filepositions; + int missing_streams; + AVRational framerate; +} FLVContext; + +static int probe(AVProbeData *p, int live) +{ + const uint8_t *d = p->buf; + unsigned offset = AV_RB32(d + 5); + + if (d[0] == 'F' && + d[1] == 'L' && + d[2] == 'V' && + d[3] < 5 && d[5] == 0 && + offset + 100 < p->buf_size && + offset > 8) { + int is_live = !memcmp(d + offset + 40, "NGINX RTMP", 10); + + if (live == is_live) + return AVPROBE_SCORE_MAX; + } + return 0; +} + +static int flv_probe(AVProbeData *p) +{ + return probe(p, 0); +} + +static int live_flv_probe(AVProbeData *p) +{ + return probe(p, 1); +} + +static void add_keyframes_index(AVFormatContext *s) +{ + FLVContext *flv = s->priv_data; + AVStream *stream = NULL; + unsigned int i = 0; + + if (flv->last_keyframe_stream_index < 0) { + av_log(s, AV_LOG_DEBUG, "keyframe stream hasn't been created\n"); + return; + } + + av_assert0(flv->last_keyframe_stream_index <= s->nb_streams); + stream = s->streams[flv->last_keyframe_stream_index]; + + if (stream->nb_index_entries == 0) { + for (i = 0; i < flv->keyframe_count; i++) { + av_log(s, AV_LOG_TRACE, "keyframe filepositions = %"PRId64" times = %"PRId64"\n", + flv->keyframe_filepositions[i], flv->keyframe_times[i] * 1000); + av_add_index_entry(stream, flv->keyframe_filepositions[i], + flv->keyframe_times[i] * 1000, 0, 0, AVINDEX_KEYFRAME); + } + } else + av_log(s, AV_LOG_WARNING, "Skipping duplicate index\n"); + + if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { + av_freep(&flv->keyframe_times); + av_freep(&flv->keyframe_filepositions); + flv->keyframe_count = 0; + } +} + +static AVStream *create_stream(AVFormatContext *s, int codec_type) +{ + FLVContext *flv = s->priv_data; + AVStream *st = avformat_new_stream(s, NULL); + if (!st) + return NULL; + st->codecpar->codec_type = codec_type; + if (s->nb_streams>=3 ||( s->nb_streams==2 + && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE + && s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE)) + s->ctx_flags &= ~AVFMTCTX_NOHEADER; + if (codec_type == AVMEDIA_TYPE_AUDIO) { + st->codecpar->bit_rate = flv->audio_bit_rate; + flv->missing_streams &= ~FLV_HEADER_FLAG_HASAUDIO; + } + if (codec_type == AVMEDIA_TYPE_VIDEO) { + st->codecpar->bit_rate = flv->video_bit_rate; + flv->missing_streams &= ~FLV_HEADER_FLAG_HASVIDEO; + st->avg_frame_rate = flv->framerate; + } + + + avpriv_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */ + flv->last_keyframe_stream_index = s->nb_streams - 1; + add_keyframes_index(s); + return st; +} + +static int flv_same_audio_codec(AVCodecParameters *apar, int flags) +{ + int bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8; + int flv_codecid = flags & FLV_AUDIO_CODECID_MASK; + int codec_id; + + if (!apar->codec_id && !apar->codec_tag) + return 1; + + if (apar->bits_per_coded_sample != bits_per_coded_sample) + return 0; + + switch (flv_codecid) { + // no distinction between S16 and S8 PCM codec flags + case FLV_CODECID_PCM: + codec_id = bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 +#if HAVE_BIGENDIAN + : AV_CODEC_ID_PCM_S16BE; +#else + : AV_CODEC_ID_PCM_S16LE; +#endif + return codec_id == apar->codec_id; + case FLV_CODECID_PCM_LE: + codec_id = bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 + : AV_CODEC_ID_PCM_S16LE; + return codec_id == apar->codec_id; + case FLV_CODECID_AAC: + return apar->codec_id == AV_CODEC_ID_AAC; + case FLV_CODECID_ADPCM: + return apar->codec_id == AV_CODEC_ID_ADPCM_SWF; + case FLV_CODECID_SPEEX: + return apar->codec_id == AV_CODEC_ID_SPEEX; + case FLV_CODECID_MP3: + return apar->codec_id == AV_CODEC_ID_MP3; + case FLV_CODECID_NELLYMOSER_8KHZ_MONO: + case FLV_CODECID_NELLYMOSER_16KHZ_MONO: + case FLV_CODECID_NELLYMOSER: + return apar->codec_id == AV_CODEC_ID_NELLYMOSER; + case FLV_CODECID_PCM_MULAW: + return apar->sample_rate == 8000 && + apar->codec_id == AV_CODEC_ID_PCM_MULAW; + case FLV_CODECID_PCM_ALAW: + return apar->sample_rate == 8000 && + apar->codec_id == AV_CODEC_ID_PCM_ALAW; + default: + return apar->codec_tag == (flv_codecid >> FLV_AUDIO_CODECID_OFFSET); + } +} + +static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, + AVCodecParameters *apar, int flv_codecid) +{ + switch (flv_codecid) { + // no distinction between S16 and S8 PCM codec flags + case FLV_CODECID_PCM: + apar->codec_id = apar->bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 +#if HAVE_BIGENDIAN + : AV_CODEC_ID_PCM_S16BE; +#else + : AV_CODEC_ID_PCM_S16LE; +#endif + break; + case FLV_CODECID_PCM_LE: + apar->codec_id = apar->bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 + : AV_CODEC_ID_PCM_S16LE; + break; + case FLV_CODECID_AAC: + apar->codec_id = AV_CODEC_ID_AAC; + break; + case FLV_CODECID_ADPCM: + apar->codec_id = AV_CODEC_ID_ADPCM_SWF; + break; + case FLV_CODECID_SPEEX: + apar->codec_id = AV_CODEC_ID_SPEEX; + apar->sample_rate = 16000; + break; + case FLV_CODECID_MP3: + apar->codec_id = AV_CODEC_ID_MP3; + astream->need_parsing = AVSTREAM_PARSE_FULL; + break; + case FLV_CODECID_NELLYMOSER_8KHZ_MONO: + // in case metadata does not otherwise declare samplerate + apar->sample_rate = 8000; + apar->codec_id = AV_CODEC_ID_NELLYMOSER; + break; + case FLV_CODECID_NELLYMOSER_16KHZ_MONO: + apar->sample_rate = 16000; + apar->codec_id = AV_CODEC_ID_NELLYMOSER; + break; + case FLV_CODECID_NELLYMOSER: + apar->codec_id = AV_CODEC_ID_NELLYMOSER; + break; + case FLV_CODECID_PCM_MULAW: + apar->sample_rate = 8000; + apar->codec_id = AV_CODEC_ID_PCM_MULAW; + break; + case FLV_CODECID_PCM_ALAW: + apar->sample_rate = 8000; + apar->codec_id = AV_CODEC_ID_PCM_ALAW; + break; + default: + avpriv_request_sample(s, "Audio codec (%x)", + flv_codecid >> FLV_AUDIO_CODECID_OFFSET); + apar->codec_tag = flv_codecid >> FLV_AUDIO_CODECID_OFFSET; + } +} + +static int flv_same_video_codec(AVCodecParameters *vpar, int flags) +{ + int flv_codecid = flags & FLV_VIDEO_CODECID_MASK; + + if (!vpar->codec_id && !vpar->codec_tag) + return 1; + + switch (flv_codecid) { + case FLV_CODECID_H263: + return vpar->codec_id == AV_CODEC_ID_FLV1; + case FLV_CODECID_SCREEN: + return vpar->codec_id == AV_CODEC_ID_FLASHSV; + case FLV_CODECID_SCREEN2: + return vpar->codec_id == AV_CODEC_ID_FLASHSV2; + case FLV_CODECID_VP6: + return vpar->codec_id == AV_CODEC_ID_VP6F; + case FLV_CODECID_VP6A: + return vpar->codec_id == AV_CODEC_ID_VP6A; + case FLV_CODECID_H264: + return vpar->codec_id == AV_CODEC_ID_H264; + case FLV_CODECID_HEVC: + return vpar->codec_id == AV_CODEC_ID_HEVC; + default: + return vpar->codec_tag == flv_codecid; + } +} + +static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, + int flv_codecid, int read) +{ + int ret = 0; + AVCodecParameters *par = vstream->codecpar; + enum AVCodecID old_codec_id = vstream->codecpar->codec_id; + switch (flv_codecid) { + case FLV_CODECID_H263: + par->codec_id = AV_CODEC_ID_FLV1; + break; + case FLV_CODECID_REALH263: + par->codec_id = AV_CODEC_ID_H263; + break; // Really mean it this time + case FLV_CODECID_SCREEN: + par->codec_id = AV_CODEC_ID_FLASHSV; + break; + case FLV_CODECID_SCREEN2: + par->codec_id = AV_CODEC_ID_FLASHSV2; + break; + case FLV_CODECID_VP6: + par->codec_id = AV_CODEC_ID_VP6F; + case FLV_CODECID_VP6A: + if (flv_codecid == FLV_CODECID_VP6A) + par->codec_id = AV_CODEC_ID_VP6A; + if (read) { + if (par->extradata_size != 1) { + ff_alloc_extradata(par, 1); + } + if (par->extradata) + par->extradata[0] = avio_r8(s->pb); + else + avio_skip(s->pb, 1); + } + ret = 1; // 1 byte body size adjustment for flv_read_packet() + break; + case FLV_CODECID_H264: + par->codec_id = AV_CODEC_ID_H264; + vstream->need_parsing = AVSTREAM_PARSE_HEADERS; + ret = 3; // not 4, reading packet type will consume one byte + break; + case FLV_CODECID_MPEG4: + par->codec_id = AV_CODEC_ID_MPEG4; + ret = 3; + break; + case FLV_CODECID_HEVC: + par->codec_id = AV_CODEC_ID_HEVC; + vstream->need_parsing = AVSTREAM_PARSE_NONE; + ret = 3; // not 4, reading packet type will consume one byte + break; + default: + avpriv_request_sample(s, "Video codec (%x)", flv_codecid); + par->codec_tag = flv_codecid; + } + + if (!vstream->internal->need_context_update && par->codec_id != old_codec_id) { + avpriv_request_sample(s, "Changing the codec id midstream"); + return AVERROR_PATCHWELCOME; + } + + return ret; +} + +static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize) +{ + int length = avio_rb16(ioc); + if (length >= buffsize) { + avio_skip(ioc, length); + return -1; + } + + avio_read(ioc, buffer, length); + + buffer[length] = '\0'; + + return length; +} + +static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, int64_t max_pos) +{ + FLVContext *flv = s->priv_data; + unsigned int timeslen = 0, fileposlen = 0, i; + char str_val[256]; + int64_t *times = NULL; + int64_t *filepositions = NULL; + int ret = AVERROR(ENOSYS); + int64_t initial_pos = avio_tell(ioc); + + if (flv->keyframe_count > 0) { + av_log(s, AV_LOG_DEBUG, "keyframes have been paresed\n"); + return 0; + } + av_assert0(!flv->keyframe_times); + av_assert0(!flv->keyframe_filepositions); + + if (s->flags & AVFMT_FLAG_IGNIDX) + return 0; + + while (avio_tell(ioc) < max_pos - 2 && + amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { + int64_t **current_array; + unsigned int arraylen; + + // Expect array object in context + if (avio_r8(ioc) != AMF_DATA_TYPE_ARRAY) + break; + + arraylen = avio_rb32(ioc); + if (arraylen>>28) + break; + + if (!strcmp(KEYFRAMES_TIMESTAMP_TAG , str_val) && !times) { + current_array = × + timeslen = arraylen; + } else if (!strcmp(KEYFRAMES_BYTEOFFSET_TAG, str_val) && + !filepositions) { + current_array = &filepositions; + fileposlen = arraylen; + } else + // unexpected metatag inside keyframes, will not use such + // metadata for indexing + break; + + if (!(*current_array = av_mallocz(sizeof(**current_array) * arraylen))) { + ret = AVERROR(ENOMEM); + goto finish; + } + + for (i = 0; i < arraylen && avio_tell(ioc) < max_pos - 1; i++) { + if (avio_r8(ioc) != AMF_DATA_TYPE_NUMBER) + goto invalid; + current_array[0][i] = av_int2double(avio_rb64(ioc)); + } + if (times && filepositions) { + // All done, exiting at a position allowing amf_parse_object + // to finish parsing the object + ret = 0; + break; + } + } + + if (timeslen == fileposlen && fileposlen>1 && max_pos <= filepositions[0]) { + for (i = 0; i < FFMIN(2,fileposlen); i++) { + flv->validate_index[i].pos = filepositions[i]; + flv->validate_index[i].dts = times[i] * 1000; + flv->validate_count = i + 1; + } + flv->keyframe_times = times; + flv->keyframe_filepositions = filepositions; + flv->keyframe_count = timeslen; + times = NULL; + filepositions = NULL; + } else { +invalid: + av_log(s, AV_LOG_WARNING, "Invalid keyframes object, skipping.\n"); + } + +finish: + av_freep(×); + av_freep(&filepositions); + avio_seek(ioc, initial_pos, SEEK_SET); + return ret; +} + +static int amf_parse_object(AVFormatContext *s, AVStream *astream, + AVStream *vstream, const char *key, + int64_t max_pos, int depth) +{ + AVCodecParameters *apar, *vpar; + FLVContext *flv = s->priv_data; + AVIOContext *ioc; + AMFDataType amf_type; + char str_val[1024]; + double num_val; + + num_val = 0; + ioc = s->pb; + amf_type = avio_r8(ioc); + + switch (amf_type) { + case AMF_DATA_TYPE_NUMBER: + num_val = av_int2double(avio_rb64(ioc)); + break; + case AMF_DATA_TYPE_BOOL: + num_val = avio_r8(ioc); + break; + case AMF_DATA_TYPE_STRING: + if (amf_get_string(ioc, str_val, sizeof(str_val)) < 0) { + av_log(s, AV_LOG_ERROR, "AMF_DATA_TYPE_STRING parsing failed\n"); + return -1; + } + break; + case AMF_DATA_TYPE_OBJECT: + if (key && + (ioc->seekable & AVIO_SEEKABLE_NORMAL) && + !strcmp(KEYFRAMES_TAG, key) && depth == 1) + if (parse_keyframes_index(s, ioc, + max_pos) < 0) + av_log(s, AV_LOG_ERROR, "Keyframe index parsing failed\n"); + else + add_keyframes_index(s); + while (avio_tell(ioc) < max_pos - 2 && + amf_get_string(ioc, str_val, sizeof(str_val)) > 0) + if (amf_parse_object(s, astream, vstream, str_val, max_pos, + depth + 1) < 0) + return -1; // if we couldn't skip, bomb out. + if (avio_r8(ioc) != AMF_END_OF_OBJECT) { + av_log(s, AV_LOG_ERROR, "Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT\n"); + return -1; + } + break; + case AMF_DATA_TYPE_NULL: + case AMF_DATA_TYPE_UNDEFINED: + case AMF_DATA_TYPE_UNSUPPORTED: + break; // these take up no additional space + case AMF_DATA_TYPE_MIXEDARRAY: + { + unsigned v; + avio_skip(ioc, 4); // skip 32-bit max array index + while (avio_tell(ioc) < max_pos - 2 && + amf_get_string(ioc, str_val, sizeof(str_val)) > 0) + // this is the only case in which we would want a nested + // parse to not skip over the object + if (amf_parse_object(s, astream, vstream, str_val, max_pos, + depth + 1) < 0) + return -1; + v = avio_r8(ioc); + if (v != AMF_END_OF_OBJECT) { + av_log(s, AV_LOG_ERROR, "Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_MIXEDARRAY, found %d\n", v); + return -1; + } + break; + } + case AMF_DATA_TYPE_ARRAY: + { + unsigned int arraylen, i; + + arraylen = avio_rb32(ioc); + for (i = 0; i < arraylen && avio_tell(ioc) < max_pos - 1; i++) + if (amf_parse_object(s, NULL, NULL, NULL, max_pos, + depth + 1) < 0) + return -1; // if we couldn't skip, bomb out. + } + break; + case AMF_DATA_TYPE_DATE: + avio_skip(ioc, 8 + 2); // timestamp (double) and UTC offset (int16) + break; + default: // unsupported type, we couldn't skip + av_log(s, AV_LOG_ERROR, "unsupported amf type %d\n", amf_type); + return -1; + } + + if (key) { + apar = astream ? astream->codecpar : NULL; + vpar = vstream ? vstream->codecpar : NULL; + + // stream info doesn't live any deeper than the first object + if (depth == 1) { + if (amf_type == AMF_DATA_TYPE_NUMBER || + amf_type == AMF_DATA_TYPE_BOOL) { + if (!strcmp(key, "duration")) + s->duration = num_val * AV_TIME_BASE; + else if (!strcmp(key, "videodatarate") && + 0 <= (int)(num_val * 1024.0)) + flv->video_bit_rate = num_val * 1024.0; + else if (!strcmp(key, "audiodatarate") && + 0 <= (int)(num_val * 1024.0)) + flv->audio_bit_rate = num_val * 1024.0; + else if (!strcmp(key, "datastream")) { + AVStream *st = create_stream(s, AVMEDIA_TYPE_SUBTITLE); + if (!st) + return AVERROR(ENOMEM); + st->codecpar->codec_id = AV_CODEC_ID_TEXT; + } else if (!strcmp(key, "framerate")) { + flv->framerate = av_d2q(num_val, 1000); + if (vstream) + vstream->avg_frame_rate = flv->framerate; + } else if (flv->trust_metadata) { + if (!strcmp(key, "videocodecid") && vpar) { + int ret = flv_set_video_codec(s, vstream, num_val, 0); + if (ret < 0) + return ret; + } else if (!strcmp(key, "audiocodecid") && apar) { + int id = ((int)num_val) << FLV_AUDIO_CODECID_OFFSET; + flv_set_audio_codec(s, astream, apar, id); + } else if (!strcmp(key, "audiosamplerate") && apar) { + apar->sample_rate = num_val; + } else if (!strcmp(key, "audiosamplesize") && apar) { + apar->bits_per_coded_sample = num_val; + } else if (!strcmp(key, "stereo") && apar) { + apar->channels = num_val + 1; + apar->channel_layout = apar->channels == 2 ? + AV_CH_LAYOUT_STEREO : + AV_CH_LAYOUT_MONO; + } else if (!strcmp(key, "width") && vpar) { + vpar->width = num_val; + } else if (!strcmp(key, "height") && vpar) { + vpar->height = num_val; + } + } + } + if (amf_type == AMF_DATA_TYPE_STRING) { + if (!strcmp(key, "encoder")) { + int version = -1; + if (1 == sscanf(str_val, "Open Broadcaster Software v0.%d", &version)) { + if (version > 0 && version <= 655) + flv->broken_sizes = 1; + } + } else if (!strcmp(key, "metadatacreator") && !strcmp(str_val, "MEGA")) { + flv->broken_sizes = 1; + } + } + } + + if (amf_type == AMF_DATA_TYPE_OBJECT && s->nb_streams == 1 && + ((!apar && !strcmp(key, "audiocodecid")) || + (!vpar && !strcmp(key, "videocodecid")))) + s->ctx_flags &= ~AVFMTCTX_NOHEADER; //If there is either audio/video missing, codecid will be an empty object + + if (!strcmp(key, "duration") || + !strcmp(key, "filesize") || + !strcmp(key, "width") || + !strcmp(key, "height") || + !strcmp(key, "videodatarate") || + !strcmp(key, "framerate") || + !strcmp(key, "videocodecid") || + !strcmp(key, "audiodatarate") || + !strcmp(key, "audiosamplerate") || + !strcmp(key, "audiosamplesize") || + !strcmp(key, "stereo") || + !strcmp(key, "audiocodecid") || + !strcmp(key, "datastream")) + return 0; + + s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED; + if (amf_type == AMF_DATA_TYPE_BOOL) { + av_strlcpy(str_val, num_val > 0 ? "true" : "false", + sizeof(str_val)); + av_dict_set(&s->metadata, key, str_val, 0); + } else if (amf_type == AMF_DATA_TYPE_NUMBER) { + snprintf(str_val, sizeof(str_val), "%.f", num_val); + av_dict_set(&s->metadata, key, str_val, 0); + } else if (amf_type == AMF_DATA_TYPE_STRING) + av_dict_set(&s->metadata, key, str_val, 0); + } + + return 0; +} + +#define TYPE_ONTEXTDATA 1 +#define TYPE_ONCAPTION 2 +#define TYPE_ONCAPTIONINFO 3 +#define TYPE_UNKNOWN 9 + +static int flv_read_metabody(AVFormatContext *s, int64_t next_pos) +{ + FLVContext *flv = s->priv_data; + AMFDataType type; + AVStream *stream, *astream, *vstream; + AVStream av_unused *dstream; + AVIOContext *ioc; + int i; + // only needs to hold the string "onMetaData". + // Anything longer is something we don't want. + char buffer[32]; + + astream = NULL; + vstream = NULL; + dstream = NULL; + ioc = s->pb; + + // first object needs to be "onMetaData" string + type = avio_r8(ioc); + if (type != AMF_DATA_TYPE_STRING || + amf_get_string(ioc, buffer, sizeof(buffer)) < 0) + return TYPE_UNKNOWN; + + if (!strcmp(buffer, "onTextData")) + return TYPE_ONTEXTDATA; + + if (!strcmp(buffer, "onCaption")) + return TYPE_ONCAPTION; + + if (!strcmp(buffer, "onCaptionInfo")) + return TYPE_ONCAPTIONINFO; + + if (strcmp(buffer, "onMetaData") && strcmp(buffer, "onCuePoint")) { + av_log(s, AV_LOG_DEBUG, "Unknown type %s\n", buffer); + return TYPE_UNKNOWN; + } + + // find the streams now so that amf_parse_object doesn't need to do + // the lookup every time it is called. + for (i = 0; i < s->nb_streams; i++) { + stream = s->streams[i]; + if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { + vstream = stream; + flv->last_keyframe_stream_index = i; + } else if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { + astream = stream; + if (flv->last_keyframe_stream_index == -1) + flv->last_keyframe_stream_index = i; + } + else if (stream->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + dstream = stream; + } + + // parse the second object (we want a mixed array) + if (amf_parse_object(s, astream, vstream, buffer, next_pos, 0) < 0) + return -1; + + return 0; +} + +static int flv_read_header(AVFormatContext *s) +{ + int flags; + FLVContext *flv = s->priv_data; + int offset; + int pre_tag_size = 0; + + avio_skip(s->pb, 4); + flags = avio_r8(s->pb); + + flv->missing_streams = flags & (FLV_HEADER_FLAG_HASVIDEO | FLV_HEADER_FLAG_HASAUDIO); + + s->ctx_flags |= AVFMTCTX_NOHEADER; + + offset = avio_rb32(s->pb); + avio_seek(s->pb, offset, SEEK_SET); + + /* Annex E. The FLV File Format + * E.3 TheFLVFileBody + * Field Type Comment + * PreviousTagSize0 UI32 Always 0 + * */ + pre_tag_size = avio_rb32(s->pb); + if (pre_tag_size) { + av_log(s, AV_LOG_WARNING, "Read FLV header error, input file is not a standard flv format, first PreviousTagSize0 always is 0\n"); + } + + s->start_time = 0; + flv->sum_flv_tag_size = 0; + flv->last_keyframe_stream_index = -1; + + return 0; +} + +static int flv_read_close(AVFormatContext *s) +{ + int i; + FLVContext *flv = s->priv_data; + for (i=0; inew_extradata[i]); + av_freep(&flv->keyframe_times); + av_freep(&flv->keyframe_filepositions); + return 0; +} + +static int flv_get_extradata(AVFormatContext *s, AVStream *st, int size) +{ + av_freep(&st->codecpar->extradata); + if (ff_get_extradata(s, st->codecpar, s->pb, size) < 0) + return AVERROR(ENOMEM); + return 0; +} + +static int flv_queue_extradata(FLVContext *flv, AVIOContext *pb, int stream, + int size) +{ + av_free(flv->new_extradata[stream]); + flv->new_extradata[stream] = av_mallocz(size + + AV_INPUT_BUFFER_PADDING_SIZE); + if (!flv->new_extradata[stream]) + return AVERROR(ENOMEM); + flv->new_extradata_size[stream] = size; + avio_read(pb, flv->new_extradata[stream], size); + return 0; +} + +static void clear_index_entries(AVFormatContext *s, int64_t pos) +{ + int i, j, out; + av_log(s, AV_LOG_WARNING, + "Found invalid index entries, clearing the index.\n"); + for (i = 0; i < s->nb_streams; i++) { + AVStream *st = s->streams[i]; + /* Remove all index entries that point to >= pos */ + out = 0; + for (j = 0; j < st->nb_index_entries; j++) + if (st->index_entries[j].pos < pos) + st->index_entries[out++] = st->index_entries[j]; + st->nb_index_entries = out; + } +} + +static int amf_skip_tag(AVIOContext *pb, AMFDataType type) +{ + int nb = -1, ret, parse_name = 1; + + switch (type) { + case AMF_DATA_TYPE_NUMBER: + avio_skip(pb, 8); + break; + case AMF_DATA_TYPE_BOOL: + avio_skip(pb, 1); + break; + case AMF_DATA_TYPE_STRING: + avio_skip(pb, avio_rb16(pb)); + break; + case AMF_DATA_TYPE_ARRAY: + parse_name = 0; + case AMF_DATA_TYPE_MIXEDARRAY: + nb = avio_rb32(pb); + case AMF_DATA_TYPE_OBJECT: + while(!pb->eof_reached && (nb-- > 0 || type != AMF_DATA_TYPE_ARRAY)) { + if (parse_name) { + int size = avio_rb16(pb); + if (!size) { + avio_skip(pb, 1); + break; + } + avio_skip(pb, size); + } + if ((ret = amf_skip_tag(pb, avio_r8(pb))) < 0) + return ret; + } + break; + case AMF_DATA_TYPE_NULL: + case AMF_DATA_TYPE_OBJECT_END: + break; + default: + return AVERROR_INVALIDDATA; + } + return 0; +} + +static int flv_data_packet(AVFormatContext *s, AVPacket *pkt, + int64_t dts, int64_t next) +{ + AVIOContext *pb = s->pb; + AVStream *st = NULL; + char buf[20]; + int ret = AVERROR_INVALIDDATA; + int i, length = -1; + int array = 0; + + switch (avio_r8(pb)) { + case AMF_DATA_TYPE_ARRAY: + array = 1; + case AMF_DATA_TYPE_MIXEDARRAY: + avio_seek(pb, 4, SEEK_CUR); + case AMF_DATA_TYPE_OBJECT: + break; + default: + goto skip; + } + + while (array || (ret = amf_get_string(pb, buf, sizeof(buf))) > 0) { + AMFDataType type = avio_r8(pb); + if (type == AMF_DATA_TYPE_STRING && (array || !strcmp(buf, "text"))) { + length = avio_rb16(pb); + ret = av_get_packet(pb, pkt, length); + if (ret < 0) + goto skip; + else + break; + } else { + if ((ret = amf_skip_tag(pb, type)) < 0) + goto skip; + } + } + + if (length < 0) { + ret = AVERROR_INVALIDDATA; + goto skip; + } + + for (i = 0; i < s->nb_streams; i++) { + st = s->streams[i]; + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + break; + } + + if (i == s->nb_streams) { + st = create_stream(s, AVMEDIA_TYPE_SUBTITLE); + if (!st) + return AVERROR(ENOMEM); + st->codecpar->codec_id = AV_CODEC_ID_TEXT; + } + + pkt->dts = dts; + pkt->pts = dts; + pkt->size = ret; + + pkt->stream_index = st->index; + pkt->flags |= AV_PKT_FLAG_KEY; + +skip: + avio_seek(s->pb, next + 4, SEEK_SET); + + return ret; +} + +static int resync(AVFormatContext *s) +{ + FLVContext *flv = s->priv_data; + int64_t i; + int64_t pos = avio_tell(s->pb); + + for (i=0; !avio_feof(s->pb); i++) { + int j = i & (RESYNC_BUFFER_SIZE-1); + int j1 = j + RESYNC_BUFFER_SIZE; + flv->resync_buffer[j ] = + flv->resync_buffer[j1] = avio_r8(s->pb); + + if (i > 22) { + unsigned lsize2 = AV_RB32(flv->resync_buffer + j1 - 4); + if (lsize2 >= 11 && lsize2 + 8LL < FFMIN(i, RESYNC_BUFFER_SIZE)) { + unsigned size2 = AV_RB24(flv->resync_buffer + j1 - lsize2 + 1 - 4); + unsigned lsize1 = AV_RB32(flv->resync_buffer + j1 - lsize2 - 8); + if (lsize1 >= 11 && lsize1 + 8LL + lsize2 < FFMIN(i, RESYNC_BUFFER_SIZE)) { + unsigned size1 = AV_RB24(flv->resync_buffer + j1 - lsize1 + 1 - lsize2 - 8); + if (size1 == lsize1 - 11 && size2 == lsize2 - 11) { + avio_seek(s->pb, pos + i - lsize1 - lsize2 - 8, SEEK_SET); + return 1; + } + } + } + } + } + return AVERROR_EOF; +} + +static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) +{ + FLVContext *flv = s->priv_data; + int ret, i, size, flags; + enum FlvTagType type; + int stream_type=-1; + int64_t next, pos, meta_pos; + int64_t dts, pts = AV_NOPTS_VALUE; + int av_uninit(channels); + int av_uninit(sample_rate); + AVStream *st = NULL; + int last = -1; + int orig_size; + +retry: + /* pkt size is repeated at end. skip it */ + pos = avio_tell(s->pb); + type = (avio_r8(s->pb) & 0x1F); + orig_size = + size = avio_rb24(s->pb); + flv->sum_flv_tag_size += size + 11; + dts = avio_rb24(s->pb); + dts |= (unsigned)avio_r8(s->pb) << 24; + av_log(s, AV_LOG_TRACE, "type:%d, size:%d, last:%d, dts:%"PRId64" pos:%"PRId64"\n", type, size, last, dts, avio_tell(s->pb)); + if (avio_feof(s->pb)) + return AVERROR_EOF; + avio_skip(s->pb, 3); /* stream id, always 0 */ + flags = 0; + + if (flv->validate_next < flv->validate_count) { + int64_t validate_pos = flv->validate_index[flv->validate_next].pos; + if (pos == validate_pos) { + if (FFABS(dts - flv->validate_index[flv->validate_next].dts) <= + VALIDATE_INDEX_TS_THRESH) { + flv->validate_next++; + } else { + clear_index_entries(s, validate_pos); + flv->validate_count = 0; + } + } else if (pos > validate_pos) { + clear_index_entries(s, validate_pos); + flv->validate_count = 0; + } + } + + if (size == 0) { + ret = FFERROR_REDO; + goto leave; + } + + next = size + avio_tell(s->pb); + + if (type == FLV_TAG_TYPE_AUDIO) { + stream_type = FLV_STREAM_TYPE_AUDIO; + flags = avio_r8(s->pb); + size--; + } else if (type == FLV_TAG_TYPE_VIDEO) { + stream_type = FLV_STREAM_TYPE_VIDEO; + flags = avio_r8(s->pb); + size--; + if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_VIDEO_INFO_CMD) + goto skip; + } else if (type == FLV_TAG_TYPE_META) { + stream_type=FLV_STREAM_TYPE_DATA; + if (size > 13 + 1 + 4) { // Header-type metadata stuff + int type; + meta_pos = avio_tell(s->pb); + type = flv_read_metabody(s, next); + if (type == 0 && dts == 0 || type < 0 || type == TYPE_UNKNOWN) { + if (type < 0 && flv->validate_count && + flv->validate_index[0].pos > next && + flv->validate_index[0].pos - 4 < next + ) { + av_log(s, AV_LOG_WARNING, "Adjusting next position due to index mismatch\n"); + next = flv->validate_index[0].pos - 4; + } + goto skip; + } else if (type == TYPE_ONTEXTDATA) { + avpriv_request_sample(s, "OnTextData packet"); + return flv_data_packet(s, pkt, dts, next); + } else if (type == TYPE_ONCAPTION) { + return flv_data_packet(s, pkt, dts, next); + } + avio_seek(s->pb, meta_pos, SEEK_SET); + } + } else { + av_log(s, AV_LOG_DEBUG, + "Skipping flv packet: type %d, size %d, flags %d.\n", + type, size, flags); +skip: + avio_seek(s->pb, next, SEEK_SET); + ret = FFERROR_REDO; + goto leave; + } + + /* skip empty data packets */ + if (!size) { + ret = FFERROR_REDO; + goto leave; + } + + /* now find stream */ + for (i = 0; i < s->nb_streams; i++) { + st = s->streams[i]; + if (stream_type == FLV_STREAM_TYPE_AUDIO) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && + (s->audio_codec_id || flv_same_audio_codec(st->codecpar, flags))) + break; + } else if (stream_type == FLV_STREAM_TYPE_VIDEO) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && + (s->video_codec_id || flv_same_video_codec(st->codecpar, flags))) + break; + } else if (stream_type == FLV_STREAM_TYPE_DATA) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + break; + } + } + if (i == s->nb_streams) { + static const enum AVMediaType stream_types[] = {AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_SUBTITLE}; + st = create_stream(s, stream_types[stream_type]); + if (!st) + return AVERROR(ENOMEM); + + } + av_log(s, AV_LOG_TRACE, "%d %X %d \n", stream_type, flags, st->discard); + + if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && + ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY || + stream_type == FLV_STREAM_TYPE_AUDIO)) + av_add_index_entry(st, pos, dts, size, 0, AVINDEX_KEYFRAME); + + if ( (st->discard >= AVDISCARD_NONKEY && !((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY || (stream_type == FLV_STREAM_TYPE_AUDIO))) + ||(st->discard >= AVDISCARD_BIDIR && ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_DISP_INTER && (stream_type == FLV_STREAM_TYPE_VIDEO))) + || st->discard >= AVDISCARD_ALL + ) { + avio_seek(s->pb, next, SEEK_SET); + ret = FFERROR_REDO; + goto leave; + } + + // if not streamed and no duration from metadata then seek to end to find + // the duration from the timestamps + if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && + (!s->duration || s->duration == AV_NOPTS_VALUE) && + !flv->searched_for_end) { + int size; + const int64_t pos = avio_tell(s->pb); + // Read the last 4 bytes of the file, this should be the size of the + // previous FLV tag. Use the timestamp of its payload as duration. + int64_t fsize = avio_size(s->pb); +retry_duration: + avio_seek(s->pb, fsize - 4, SEEK_SET); + size = avio_rb32(s->pb); + if (size > 0 && size < fsize) { + // Seek to the start of the last FLV tag at position (fsize - 4 - size) + // but skip the byte indicating the type. + avio_seek(s->pb, fsize - 3 - size, SEEK_SET); + if (size == avio_rb24(s->pb) + 11) { + uint32_t ts = avio_rb24(s->pb); + ts |= avio_r8(s->pb) << 24; + if (ts) + s->duration = ts * (int64_t)AV_TIME_BASE / 1000; + else if (fsize >= 8 && fsize - 8 >= size) { + fsize -= size+4; + goto retry_duration; + } + } + } + + avio_seek(s->pb, pos, SEEK_SET); + flv->searched_for_end = 1; + } + + if (stream_type == FLV_STREAM_TYPE_AUDIO) { + int bits_per_coded_sample; + channels = (flags & FLV_AUDIO_CHANNEL_MASK) == FLV_STEREO ? 2 : 1; + sample_rate = 44100 << ((flags & FLV_AUDIO_SAMPLERATE_MASK) >> + FLV_AUDIO_SAMPLERATE_OFFSET) >> 3; + bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8; + if (!st->codecpar->channels || !st->codecpar->sample_rate || + !st->codecpar->bits_per_coded_sample) { + st->codecpar->channels = channels; + st->codecpar->channel_layout = channels == 1 + ? AV_CH_LAYOUT_MONO + : AV_CH_LAYOUT_STEREO; + st->codecpar->sample_rate = sample_rate; + st->codecpar->bits_per_coded_sample = bits_per_coded_sample; + } + if (!st->codecpar->codec_id) { + flv_set_audio_codec(s, st, st->codecpar, + flags & FLV_AUDIO_CODECID_MASK); + flv->last_sample_rate = + sample_rate = st->codecpar->sample_rate; + flv->last_channels = + channels = st->codecpar->channels; + } else { + AVCodecParameters *par = avcodec_parameters_alloc(); + if (!par) { + ret = AVERROR(ENOMEM); + goto leave; + } + par->sample_rate = sample_rate; + par->bits_per_coded_sample = bits_per_coded_sample; + flv_set_audio_codec(s, st, par, flags & FLV_AUDIO_CODECID_MASK); + sample_rate = par->sample_rate; + avcodec_parameters_free(&par); + } + } else if (stream_type == FLV_STREAM_TYPE_VIDEO) { + int ret = flv_set_video_codec(s, st, flags & FLV_VIDEO_CODECID_MASK, 1); + if (ret < 0) + return ret; + size -= ret; + } else if (stream_type == FLV_STREAM_TYPE_DATA) { + st->codecpar->codec_id = AV_CODEC_ID_TEXT; + } + + if (st->codecpar->codec_id == AV_CODEC_ID_AAC || + st->codecpar->codec_id == AV_CODEC_ID_H264 || + st->codecpar->codec_id == AV_CODEC_ID_MPEG4 || + st->codecpar->codec_id == AV_CODEC_ID_HEVC) { + int type = avio_r8(s->pb); + size--; + if (st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_MPEG4 + || st->codecpar->codec_id == AV_CODEC_ID_HEVC) { + // sign extension + int32_t cts = (avio_rb24(s->pb) + 0xff800000) ^ 0xff800000; + pts = dts + cts; + if (cts < 0) { // dts might be wrong + if (!flv->wrong_dts) + av_log(s, AV_LOG_WARNING, + "Negative cts, previous timestamps might be wrong.\n"); + flv->wrong_dts = 1; + } else if (FFABS(dts - pts) > 1000*60*15) { + av_log(s, AV_LOG_WARNING, + "invalid timestamps %"PRId64" %"PRId64"\n", dts, pts); + dts = pts = AV_NOPTS_VALUE; + } + } + if (type == 0 && (!st->codecpar->extradata || st->codecpar->codec_id == AV_CODEC_ID_AAC || + st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC)) { + AVDictionaryEntry *t; + + if (st->codecpar->extradata) { + if ((ret = flv_queue_extradata(flv, s->pb, stream_type, size)) < 0) + return ret; + ret = FFERROR_REDO; + goto leave; + } + if ((ret = flv_get_extradata(s, st, size)) < 0) + return ret; + + /* Workaround for buggy Omnia A/XE encoder */ + t = av_dict_get(s->metadata, "Encoder", NULL, 0); + if (st->codecpar->codec_id == AV_CODEC_ID_AAC && t && !strcmp(t->value, "Omnia A/XE")) + st->codecpar->extradata_size = 2; + + if (st->codecpar->codec_id == AV_CODEC_ID_AAC && 0) { + MPEG4AudioConfig cfg; + + if (avpriv_mpeg4audio_get_config(&cfg, st->codecpar->extradata, + st->codecpar->extradata_size * 8, 1) >= 0) { + st->codecpar->channels = cfg.channels; + st->codecpar->channel_layout = 0; + if (cfg.ext_sample_rate) + st->codecpar->sample_rate = cfg.ext_sample_rate; + else + st->codecpar->sample_rate = cfg.sample_rate; + av_log(s, AV_LOG_TRACE, "mp4a config channels %d sample rate %d\n", + st->codecpar->channels, st->codecpar->sample_rate); + } + } + + ret = FFERROR_REDO; + goto leave; + } + } + + /* skip empty data packets */ + if (!size) { + ret = FFERROR_REDO; + goto leave; + } + + ret = av_get_packet(s->pb, pkt, size); + if (ret < 0) + return ret; + pkt->dts = dts; + pkt->pts = pts == AV_NOPTS_VALUE ? dts : pts; + pkt->stream_index = st->index; + pkt->pos = pos; + if (flv->new_extradata[stream_type]) { + uint8_t *side = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, + flv->new_extradata_size[stream_type]); + if (side) { + memcpy(side, flv->new_extradata[stream_type], + flv->new_extradata_size[stream_type]); + av_freep(&flv->new_extradata[stream_type]); + flv->new_extradata_size[stream_type] = 0; + } + } + if (stream_type == FLV_STREAM_TYPE_AUDIO && + (sample_rate != flv->last_sample_rate || + channels != flv->last_channels)) { + flv->last_sample_rate = sample_rate; + flv->last_channels = channels; + ff_add_param_change(pkt, channels, 0, sample_rate, 0, 0); + } + + if ( stream_type == FLV_STREAM_TYPE_AUDIO || + ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY) || + stream_type == FLV_STREAM_TYPE_DATA) + pkt->flags |= AV_PKT_FLAG_KEY; + +leave: + last = avio_rb32(s->pb); + if (last != orig_size + 11 && last != orig_size + 10 && + !avio_feof(s->pb) && + (last != orig_size || !last) && last != flv->sum_flv_tag_size && + !flv->broken_sizes) { + av_log(s, AV_LOG_ERROR, "Packet mismatch %d %d %d\n", last, orig_size + 11, flv->sum_flv_tag_size); + avio_seek(s->pb, pos + 1, SEEK_SET); + ret = resync(s); + av_packet_unref(pkt); + if (ret >= 0) { + goto retry; + } + } + return ret; +} + +static int flv_read_seek(AVFormatContext *s, int stream_index, + int64_t ts, int flags) +{ + FLVContext *flv = s->priv_data; + flv->validate_count = 0; + return avio_seek_time(s->pb, stream_index, ts, flags); +} + +#define OFFSET(x) offsetof(FLVContext, x) +#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM +static const AVOption options[] = { + { "flv_metadata", "Allocate streams according to the onMetaData array", OFFSET(trust_metadata), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, + { "missing_streams", "", OFFSET(missing_streams), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0xFF, VD | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, + { NULL } +}; + +static const AVClass flv_class = { + .class_name = "flvdec", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVInputFormat ff_flv_demuxer = { + .name = "flv", + .long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), + .priv_data_size = sizeof(FLVContext), + .read_probe = flv_probe, + .read_header = flv_read_header, + .read_packet = flv_read_packet, + .read_seek = flv_read_seek, + .read_close = flv_read_close, + .extensions = "flv", + .priv_class = &flv_class, +}; + +static const AVClass live_flv_class = { + .class_name = "live_flvdec", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVInputFormat ff_live_flv_demuxer = { + .name = "live_flv", + .long_name = NULL_IF_CONFIG_SMALL("live RTMP FLV (Flash Video)"), + .priv_data_size = sizeof(FLVContext), + .read_probe = live_flv_probe, + .read_header = flv_read_header, + .read_packet = flv_read_packet, + .read_seek = flv_read_seek, + .read_close = flv_read_close, + .extensions = "flv", + .priv_class = &live_flv_class, + .flags = AVFMT_TS_DISCONT +}; diff --git a/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvenc.c b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvenc.c new file mode 100644 index 0000000..eb955e5 --- /dev/null +++ b/StreamMedia/flv_h265_patch/ffmpeg_3.3_flv_patch/flvenc.c @@ -0,0 +1,1114 @@ +/* + * FLV muxer + * Copyright (c) 2003 The FFmpeg Project + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/intreadwrite.h" +#include "libavutil/dict.h" +#include "libavutil/intfloat.h" +#include "libavutil/avassert.h" +#include "libavutil/mathematics.h" +#include "avio_internal.h" +#include "avio.h" +#include "avc.h" +#include "avformat.h" +#include "flv.h" +#include "internal.h" +#include "metadata.h" +#include "libavutil/opt.h" +#include "libavcodec/put_bits.h" +#include "libavcodec/aacenctab.h" +#include "hevc.h" + + +static const AVCodecTag flv_video_codec_ids[] = { + { AV_CODEC_ID_FLV1, FLV_CODECID_H263 }, + { AV_CODEC_ID_H263, FLV_CODECID_REALH263 }, + { AV_CODEC_ID_MPEG4, FLV_CODECID_MPEG4 }, + { AV_CODEC_ID_FLASHSV, FLV_CODECID_SCREEN }, + { AV_CODEC_ID_FLASHSV2, FLV_CODECID_SCREEN2 }, + { AV_CODEC_ID_VP6F, FLV_CODECID_VP6 }, + { AV_CODEC_ID_VP6, FLV_CODECID_VP6 }, + { AV_CODEC_ID_VP6A, FLV_CODECID_VP6A }, + { AV_CODEC_ID_H264, FLV_CODECID_H264 }, + { AV_CODEC_ID_HEVC, FLV_CODECID_HEVC }, + { AV_CODEC_ID_NONE, 0 } +}; + +static const AVCodecTag flv_audio_codec_ids[] = { + { AV_CODEC_ID_MP3, FLV_CODECID_MP3 >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_U8, FLV_CODECID_PCM >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_S16BE, FLV_CODECID_PCM >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_S16LE, FLV_CODECID_PCM_LE >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_ADPCM_SWF, FLV_CODECID_ADPCM >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_AAC, FLV_CODECID_AAC >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_NELLYMOSER, FLV_CODECID_NELLYMOSER >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_MULAW, FLV_CODECID_PCM_MULAW >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_ALAW, FLV_CODECID_PCM_ALAW >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_SPEEX, FLV_CODECID_SPEEX >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_NONE, 0 } +}; + +typedef enum { + FLV_AAC_SEQ_HEADER_DETECT = (1 << 0), + FLV_NO_SEQUENCE_END = (1 << 1), + FLV_ADD_KEYFRAME_INDEX = (1 << 2), + FLV_NO_METADATA = (1 << 3), + FLV_NO_DURATION_FILESIZE = (1 << 4), +} FLVFlags; + +typedef struct FLVFileposition { + int64_t keyframe_position; + double keyframe_timestamp; + struct FLVFileposition *next; +} FLVFileposition; + +typedef struct FLVContext { + AVClass *av_class; + int reserved; + int64_t duration_offset; + int64_t filesize_offset; + int64_t duration; + int64_t delay; ///< first dts delay (needed for AVC & Speex) + + int64_t datastart_offset; + int64_t datasize_offset; + int64_t datasize; + int64_t videosize_offset; + int64_t videosize; + int64_t audiosize_offset; + int64_t audiosize; + + int64_t metadata_size_pos; + int64_t metadata_totalsize_pos; + int64_t metadata_totalsize; + int64_t keyframe_index_size; + + int64_t lasttimestamp_offset; + double lasttimestamp; + int64_t lastkeyframetimestamp_offset; + double lastkeyframetimestamp; + int64_t lastkeyframelocation_offset; + int64_t lastkeyframelocation; + + int acurframeindex; + int64_t keyframes_info_offset; + + int64_t filepositions_count; + FLVFileposition *filepositions; + FLVFileposition *head_filepositions; + + AVCodecParameters *audio_par; + AVCodecParameters *video_par; + double framerate; + AVCodecParameters *data_par; + + int flags; +} FLVContext; + +typedef struct FLVStreamContext { + int64_t last_ts; ///< last timestamp for each stream +} FLVStreamContext; + +static int get_audio_flags(AVFormatContext *s, AVCodecParameters *par) +{ + int flags = (par->bits_per_coded_sample == 16) ? FLV_SAMPLESSIZE_16BIT + : FLV_SAMPLESSIZE_8BIT; + + if (par->codec_id == AV_CODEC_ID_AAC) // specs force these parameters + return FLV_CODECID_AAC | FLV_SAMPLERATE_44100HZ | + FLV_SAMPLESSIZE_16BIT | FLV_STEREO; + else if (par->codec_id == AV_CODEC_ID_SPEEX) { + if (par->sample_rate != 16000) { + av_log(s, AV_LOG_ERROR, + "FLV only supports wideband (16kHz) Speex audio\n"); + return AVERROR(EINVAL); + } + if (par->channels != 1) { + av_log(s, AV_LOG_ERROR, "FLV only supports mono Speex audio\n"); + return AVERROR(EINVAL); + } + return FLV_CODECID_SPEEX | FLV_SAMPLERATE_11025HZ | FLV_SAMPLESSIZE_16BIT; + } else { + switch (par->sample_rate) { + case 48000: + // 48khz mp3 is stored with 44k1 samplerate identifer + if (par->codec_id == AV_CODEC_ID_MP3) { + flags |= FLV_SAMPLERATE_44100HZ; + break; + } else { + goto error; + } + case 44100: + flags |= FLV_SAMPLERATE_44100HZ; + break; + case 22050: + flags |= FLV_SAMPLERATE_22050HZ; + break; + case 11025: + flags |= FLV_SAMPLERATE_11025HZ; + break; + case 16000: // nellymoser only + case 8000: // nellymoser only + case 5512: // not MP3 + if (par->codec_id != AV_CODEC_ID_MP3) { + flags |= FLV_SAMPLERATE_SPECIAL; + break; + } + default: +error: + av_log(s, AV_LOG_ERROR, + "FLV does not support sample rate %d, " + "choose from (44100, 22050, 11025)\n", par->sample_rate); + return AVERROR(EINVAL); + } + } + + if (par->channels > 1) + flags |= FLV_STEREO; + + switch (par->codec_id) { + case AV_CODEC_ID_MP3: + flags |= FLV_CODECID_MP3 | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_U8: + flags |= FLV_CODECID_PCM | FLV_SAMPLESSIZE_8BIT; + break; + case AV_CODEC_ID_PCM_S16BE: + flags |= FLV_CODECID_PCM | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_S16LE: + flags |= FLV_CODECID_PCM_LE | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_ADPCM_SWF: + flags |= FLV_CODECID_ADPCM | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_NELLYMOSER: + if (par->sample_rate == 8000) + flags |= FLV_CODECID_NELLYMOSER_8KHZ_MONO | FLV_SAMPLESSIZE_16BIT; + else if (par->sample_rate == 16000) + flags |= FLV_CODECID_NELLYMOSER_16KHZ_MONO | FLV_SAMPLESSIZE_16BIT; + else + flags |= FLV_CODECID_NELLYMOSER | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_MULAW: + flags = FLV_CODECID_PCM_MULAW | FLV_SAMPLERATE_SPECIAL | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_ALAW: + flags = FLV_CODECID_PCM_ALAW | FLV_SAMPLERATE_SPECIAL | FLV_SAMPLESSIZE_16BIT; + break; + case 0: + flags |= par->codec_tag << 4; + break; + default: + av_log(s, AV_LOG_ERROR, "Audio codec '%s' not compatible with FLV\n", + avcodec_get_name(par->codec_id)); + return AVERROR(EINVAL); + } + + return flags; +} + +static void put_amf_string(AVIOContext *pb, const char *str) +{ + size_t len = strlen(str); + avio_wb16(pb, len); + avio_write(pb, str, len); +} + +static void put_avc_eos_tag(AVIOContext *pb, unsigned ts) +{ + avio_w8(pb, FLV_TAG_TYPE_VIDEO); + avio_wb24(pb, 5); /* Tag Data Size */ + avio_wb24(pb, ts); /* lower 24 bits of timestamp in ms */ + avio_w8(pb, (ts >> 24) & 0x7F); /* MSB of ts in ms */ + avio_wb24(pb, 0); /* StreamId = 0 */ + avio_w8(pb, 23); /* ub[4] FrameType = 1, ub[4] CodecId = 7 */ + avio_w8(pb, 2); /* AVC end of sequence */ + avio_wb24(pb, 0); /* Always 0 for AVC EOS. */ + avio_wb32(pb, 16); /* Size of FLV tag */ +} + +static void put_amf_double(AVIOContext *pb, double d) +{ + avio_w8(pb, AMF_DATA_TYPE_NUMBER); + avio_wb64(pb, av_double2int(d)); +} + +static void put_amf_byte(AVIOContext *pb, unsigned char abyte) +{ + avio_w8(pb, abyte); +} + +static void put_amf_dword_array(AVIOContext *pb, uint32_t dw) +{ + avio_w8(pb, AMF_DATA_TYPE_ARRAY); + avio_wb32(pb, dw); +} + +static void put_amf_bool(AVIOContext *pb, int b) +{ + avio_w8(pb, AMF_DATA_TYPE_BOOL); + avio_w8(pb, !!b); +} + +static void write_metadata(AVFormatContext *s, unsigned int ts) +{ + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + int write_duration_filesize = !(flv->flags & FLV_NO_DURATION_FILESIZE); + int metadata_count = 0; + int64_t metadata_count_pos; + AVDictionaryEntry *tag = NULL; + + /* write meta_tag */ + avio_w8(pb, FLV_TAG_TYPE_META); // tag type META + flv->metadata_size_pos = avio_tell(pb); + avio_wb24(pb, 0); // size of data part (sum of all parts below) + avio_wb24(pb, ts); // timestamp + avio_wb32(pb, 0); // reserved + + /* now data of data_size size */ + + /* first event name as a string */ + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, "onMetaData"); // 12 bytes + + /* mixed array (hash) with size and string/type/data tuples */ + avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY); + metadata_count_pos = avio_tell(pb); + metadata_count = 4 * !!flv->video_par + + 5 * !!flv->audio_par + + 1 * !!flv->data_par; + if (write_duration_filesize) { + metadata_count += 2; // +2 for duration and file size + } + avio_wb32(pb, metadata_count); + + if (write_duration_filesize) { + put_amf_string(pb, "duration"); + flv->duration_offset = avio_tell(pb); + // fill in the guessed duration, it'll be corrected later if incorrect + put_amf_double(pb, s->duration / AV_TIME_BASE); + } + + if (flv->video_par) { + put_amf_string(pb, "width"); + put_amf_double(pb, flv->video_par->width); + + put_amf_string(pb, "height"); + put_amf_double(pb, flv->video_par->height); + + put_amf_string(pb, "videodatarate"); + put_amf_double(pb, flv->video_par->bit_rate / 1024.0); + + if (flv->framerate != 0.0) { + put_amf_string(pb, "framerate"); + put_amf_double(pb, flv->framerate); + metadata_count++; + } + + put_amf_string(pb, "videocodecid"); + put_amf_double(pb, flv->video_par->codec_tag); + } + + if (flv->audio_par) { + put_amf_string(pb, "audiodatarate"); + put_amf_double(pb, flv->audio_par->bit_rate / 1024.0); + + put_amf_string(pb, "audiosamplerate"); + put_amf_double(pb, flv->audio_par->sample_rate); + + put_amf_string(pb, "audiosamplesize"); + put_amf_double(pb, flv->audio_par->codec_id == AV_CODEC_ID_PCM_U8 ? 8 : 16); + + put_amf_string(pb, "stereo"); + put_amf_bool(pb, flv->audio_par->channels == 2); + + put_amf_string(pb, "audiocodecid"); + put_amf_double(pb, flv->audio_par->codec_tag); + } + + if (flv->data_par) { + put_amf_string(pb, "datastream"); + put_amf_double(pb, 0.0); + } + + ff_standardize_creation_time(s); + while ((tag = av_dict_get(s->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) { + if( !strcmp(tag->key, "width") + ||!strcmp(tag->key, "height") + ||!strcmp(tag->key, "videodatarate") + ||!strcmp(tag->key, "framerate") + ||!strcmp(tag->key, "videocodecid") + ||!strcmp(tag->key, "audiodatarate") + ||!strcmp(tag->key, "audiosamplerate") + ||!strcmp(tag->key, "audiosamplesize") + ||!strcmp(tag->key, "stereo") + ||!strcmp(tag->key, "audiocodecid") + ||!strcmp(tag->key, "duration") + ||!strcmp(tag->key, "onMetaData") + ||!strcmp(tag->key, "datasize") + ||!strcmp(tag->key, "lasttimestamp") + ||!strcmp(tag->key, "totalframes") + ||!strcmp(tag->key, "hasAudio") + ||!strcmp(tag->key, "hasVideo") + ||!strcmp(tag->key, "hasCuePoints") + ||!strcmp(tag->key, "hasMetadata") + ||!strcmp(tag->key, "hasKeyframes") + ){ + av_log(s, AV_LOG_DEBUG, "Ignoring metadata for %s\n", tag->key); + continue; + } + put_amf_string(pb, tag->key); + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, tag->value); + metadata_count++; + } + + if (write_duration_filesize) { + put_amf_string(pb, "filesize"); + flv->filesize_offset = avio_tell(pb); + put_amf_double(pb, 0); // delayed write + } + + if (flv->flags & FLV_ADD_KEYFRAME_INDEX) { + flv->acurframeindex = 0; + flv->keyframe_index_size = 0; + + put_amf_string(pb, "hasVideo"); + put_amf_bool(pb, !!flv->video_par); + metadata_count++; + + put_amf_string(pb, "hasKeyframes"); + put_amf_bool(pb, 1); + metadata_count++; + + put_amf_string(pb, "hasAudio"); + put_amf_bool(pb, !!flv->audio_par); + metadata_count++; + + put_amf_string(pb, "hasMetadata"); + put_amf_bool(pb, 1); + metadata_count++; + + put_amf_string(pb, "canSeekToEnd"); + put_amf_bool(pb, 1); + metadata_count++; + + put_amf_string(pb, "datasize"); + flv->datasize_offset = avio_tell(pb); + flv->datasize = 0; + put_amf_double(pb, flv->datasize); + metadata_count++; + + put_amf_string(pb, "videosize"); + flv->videosize_offset = avio_tell(pb); + flv->videosize = 0; + put_amf_double(pb, flv->videosize); + metadata_count++; + + put_amf_string(pb, "audiosize"); + flv->audiosize_offset = avio_tell(pb); + flv->audiosize = 0; + put_amf_double(pb, flv->audiosize); + metadata_count++; + + put_amf_string(pb, "lasttimestamp"); + flv->lasttimestamp_offset = avio_tell(pb); + flv->lasttimestamp = 0; + put_amf_double(pb, 0); + metadata_count++; + + put_amf_string(pb, "lastkeyframetimestamp"); + flv->lastkeyframetimestamp_offset = avio_tell(pb); + flv->lastkeyframetimestamp = 0; + put_amf_double(pb, 0); + metadata_count++; + + put_amf_string(pb, "lastkeyframelocation"); + flv->lastkeyframelocation_offset = avio_tell(pb); + flv->lastkeyframelocation = 0; + put_amf_double(pb, 0); + metadata_count++; + + put_amf_string(pb, "keyframes"); + put_amf_byte(pb, AMF_DATA_TYPE_OBJECT); + metadata_count++; + + flv->keyframes_info_offset = avio_tell(pb); + } + + put_amf_string(pb, ""); + avio_w8(pb, AMF_END_OF_OBJECT); + + /* write total size of tag */ + flv->metadata_totalsize = avio_tell(pb) - flv->metadata_size_pos - 10; + + avio_seek(pb, metadata_count_pos, SEEK_SET); + avio_wb32(pb, metadata_count); + + avio_seek(pb, flv->metadata_size_pos, SEEK_SET); + avio_wb24(pb, flv->metadata_totalsize); + avio_skip(pb, flv->metadata_totalsize + 10 - 3); + flv->metadata_totalsize_pos = avio_tell(pb); + avio_wb32(pb, flv->metadata_totalsize + 11); +} + +static int unsupported_codec(AVFormatContext *s, + const char* type, int codec_id) +{ + const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id); + av_log(s, AV_LOG_ERROR, + "%s codec %s not compatible with flv\n", + type, + desc ? desc->name : "unknown"); + return AVERROR(ENOSYS); +} + +static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par) { + int64_t data_size; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + + if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + int64_t pos; + avio_w8(pb, + par->codec_type == AVMEDIA_TYPE_VIDEO ? + FLV_TAG_TYPE_VIDEO : FLV_TAG_TYPE_AUDIO); + avio_wb24(pb, 0); // size patched later + avio_wb24(pb, 0); // ts + avio_w8(pb, 0); // ts ext + avio_wb24(pb, 0); // streamid + pos = avio_tell(pb); + if (par->codec_id == AV_CODEC_ID_AAC) { + avio_w8(pb, get_audio_flags(s, par)); + avio_w8(pb, 0); // AAC sequence header + + if (!par->extradata_size && (flv->flags & FLV_AAC_SEQ_HEADER_DETECT)) { + PutBitContext pbc; + int samplerate_index; + int channels = flv->audio_par->channels + - (flv->audio_par->channels == 8 ? 1 : 0); + uint8_t data[2]; + + for (samplerate_index = 0; samplerate_index < 16; + samplerate_index++) + if (flv->audio_par->sample_rate + == mpeg4audio_sample_rates[samplerate_index]) + break; + + init_put_bits(&pbc, data, sizeof(data)); + put_bits(&pbc, 5, flv->audio_par->profile + 1); //profile + put_bits(&pbc, 4, samplerate_index); //sample rate index + put_bits(&pbc, 4, channels); + put_bits(&pbc, 1, 0); //frame length - 1024 samples + put_bits(&pbc, 1, 0); //does not depend on core coder + put_bits(&pbc, 1, 0); //is not extension + flush_put_bits(&pbc); + + avio_w8(pb, data[0]); + avio_w8(pb, data[1]); + + av_log(s, AV_LOG_WARNING, "AAC sequence header: %02x %02x.\n", + data[0], data[1]); + } + avio_write(pb, par->extradata, par->extradata_size); + } else { + avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags + avio_w8(pb, 0); // AVC sequence header + avio_wb24(pb, 0); // composition time + if (par->codec_id == AV_CODEC_ID_HEVC) { + ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0); + } else { + ff_isom_write_avcc(pb, par->extradata, par->extradata_size); + } + } + data_size = avio_tell(pb) - pos; + avio_seek(pb, -data_size - 10, SEEK_CUR); + avio_wb24(pb, data_size); + avio_skip(pb, data_size + 10 - 3); + avio_wb32(pb, data_size + 11); // previous tag size + } +} + +static int flv_append_keyframe_info(AVFormatContext *s, FLVContext *flv, double ts, int64_t pos) +{ + FLVFileposition *position = av_malloc(sizeof(FLVFileposition)); + + if (!position) { + av_log(s, AV_LOG_WARNING, "no mem for add keyframe index!\n"); + return AVERROR(ENOMEM); + } + + position->keyframe_timestamp = ts; + position->keyframe_position = pos; + + if (!flv->filepositions_count) { + flv->filepositions = position; + flv->head_filepositions = flv->filepositions; + position->next = NULL; + } else { + flv->filepositions->next = position; + position->next = NULL; + flv->filepositions = flv->filepositions->next; + } + + flv->filepositions_count++; + + return 0; +} + +static int shift_data(AVFormatContext *s) +{ + int ret = 0; + int n = 0; + int64_t metadata_size = 0; + FLVContext *flv = s->priv_data; + int64_t pos, pos_end = avio_tell(s->pb); + uint8_t *buf, *read_buf[2]; + int read_buf_id = 0; + int read_size[2]; + AVIOContext *read_pb; + + metadata_size = flv->filepositions_count * 9 * 2 + 10; /* filepositions and times value */ + metadata_size += 2 + 13; /* filepositions String */ + metadata_size += 2 + 5; /* times String */ + metadata_size += 3; /* Object end */ + + flv->keyframe_index_size = metadata_size; + + if (metadata_size < 0) + return metadata_size; + + buf = av_malloc_array(metadata_size, 2); + if (!buf) { + return AVERROR(ENOMEM); + } + read_buf[0] = buf; + read_buf[1] = buf + metadata_size; + + avio_seek(s->pb, flv->metadata_size_pos, SEEK_SET); + avio_wb24(s->pb, flv->metadata_totalsize + metadata_size); + + avio_seek(s->pb, flv->metadata_totalsize_pos, SEEK_SET); + avio_wb32(s->pb, flv->metadata_totalsize + 11 + metadata_size); + avio_seek(s->pb, pos_end, SEEK_SET); + + /* Shift the data: the AVIO context of the output can only be used for + * writing, so we re-open the same output, but for reading. It also avoids + * a read/seek/write/seek back and forth. */ + avio_flush(s->pb); + ret = s->io_open(s, &read_pb, s->filename, AVIO_FLAG_READ, NULL); + if (ret < 0) { + av_log(s, AV_LOG_ERROR, "Unable to re-open %s output file for " + "the second pass (add_keyframe_index)\n", s->filename); + goto end; + } + + /* mark the end of the shift to up to the last data we wrote, and get ready + * for writing */ + pos_end = avio_tell(s->pb); + avio_seek(s->pb, flv->keyframes_info_offset + metadata_size, SEEK_SET); + + /* start reading at where the keyframe index information will be placed */ + avio_seek(read_pb, flv->keyframes_info_offset, SEEK_SET); + pos = avio_tell(read_pb); + +#define READ_BLOCK do { \ + read_size[read_buf_id] = avio_read(read_pb, read_buf[read_buf_id], metadata_size); \ + read_buf_id ^= 1; \ +} while (0) + + /* shift data by chunk of at most keyframe *filepositions* and *times* size */ + READ_BLOCK; + do { + READ_BLOCK; + n = read_size[read_buf_id]; + if (n < 0) + break; + avio_write(s->pb, read_buf[read_buf_id], n); + pos += n; + } while (pos <= pos_end); + + ff_format_io_close(s, &read_pb); + +end: + av_free(buf); + return ret; +} + + +static int flv_write_header(AVFormatContext *s) +{ + int i; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + + for (i = 0; i < s->nb_streams; i++) { + AVCodecParameters *par = s->streams[i]->codecpar; + FLVStreamContext *sc; + switch (par->codec_type) { + case AVMEDIA_TYPE_VIDEO: + if (s->streams[i]->avg_frame_rate.den && + s->streams[i]->avg_frame_rate.num) { + flv->framerate = av_q2d(s->streams[i]->avg_frame_rate); + } + if (flv->video_par) { + av_log(s, AV_LOG_ERROR, + "at most one video stream is supported in flv\n"); + return AVERROR(EINVAL); + } + flv->video_par = par; + if (!ff_codec_get_tag(flv_video_codec_ids, par->codec_id)) + return unsupported_codec(s, "Video", par->codec_id); + + if (par->codec_id == AV_CODEC_ID_MPEG4 || + par->codec_id == AV_CODEC_ID_H263) { + int error = s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL; + av_log(s, error ? AV_LOG_ERROR : AV_LOG_WARNING, + "Codec %s is not supported in the official FLV specification,\n", avcodec_get_name(par->codec_id)); + + if (error) { + av_log(s, AV_LOG_ERROR, + "use vstrict=-1 / -strict -1 to use it anyway.\n"); + return AVERROR(EINVAL); + } + } else if (par->codec_id == AV_CODEC_ID_VP6) { + av_log(s, AV_LOG_WARNING, + "Muxing VP6 in flv will produce flipped video on playback.\n"); + } + break; + case AVMEDIA_TYPE_AUDIO: + if (flv->audio_par) { + av_log(s, AV_LOG_ERROR, + "at most one audio stream is supported in flv\n"); + return AVERROR(EINVAL); + } + flv->audio_par = par; + if (get_audio_flags(s, par) < 0) + return unsupported_codec(s, "Audio", par->codec_id); + if (par->codec_id == AV_CODEC_ID_PCM_S16BE) + av_log(s, AV_LOG_WARNING, + "16-bit big-endian audio in flv is valid but most likely unplayable (hardware dependent); use s16le\n"); + break; + case AVMEDIA_TYPE_DATA: + if (par->codec_id != AV_CODEC_ID_TEXT && par->codec_id != AV_CODEC_ID_NONE) + return unsupported_codec(s, "Data", par->codec_id); + flv->data_par = par; + break; + case AVMEDIA_TYPE_SUBTITLE: + if (par->codec_id != AV_CODEC_ID_TEXT) { + av_log(s, AV_LOG_ERROR, "Subtitle codec '%s' for stream %d is not compatible with FLV\n", + avcodec_get_name(par->codec_id), i); + return AVERROR_INVALIDDATA; + } + flv->data_par = par; + break; + default: + av_log(s, AV_LOG_ERROR, "Codec type '%s' for stream %d is not compatible with FLV\n", + av_get_media_type_string(par->codec_type), i); + return AVERROR(EINVAL); + } + avpriv_set_pts_info(s->streams[i], 32, 1, 1000); /* 32 bit pts in ms */ + + sc = av_mallocz(sizeof(FLVStreamContext)); + if (!sc) + return AVERROR(ENOMEM); + s->streams[i]->priv_data = sc; + sc->last_ts = -1; + } + + flv->delay = AV_NOPTS_VALUE; + + avio_write(pb, "FLV", 3); + avio_w8(pb, 1); + avio_w8(pb, FLV_HEADER_FLAG_HASAUDIO * !!flv->audio_par + + FLV_HEADER_FLAG_HASVIDEO * !!flv->video_par); + avio_wb32(pb, 9); + avio_wb32(pb, 0); + + for (i = 0; i < s->nb_streams; i++) + if (s->streams[i]->codecpar->codec_tag == 5) { + avio_w8(pb, 8); // message type + avio_wb24(pb, 0); // include flags + avio_wb24(pb, 0); // time stamp + avio_wb32(pb, 0); // reserved + avio_wb32(pb, 11); // size + flv->reserved = 5; + } + + if (flv->flags & FLV_NO_METADATA) { + pb->seekable = 0; + } else { + write_metadata(s, 0); + } + + for (i = 0; i < s->nb_streams; i++) { + flv_write_codec_header(s, s->streams[i]->codecpar); + } + + flv->datastart_offset = avio_tell(pb); + return 0; +} + +static int flv_write_trailer(AVFormatContext *s) +{ + int64_t file_size; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + int build_keyframes_idx = flv->flags & FLV_ADD_KEYFRAME_INDEX; + int i, res; + int64_t cur_pos = avio_tell(s->pb); + + if (build_keyframes_idx) { + FLVFileposition *newflv_posinfo, *p; + + avio_seek(pb, flv->videosize_offset, SEEK_SET); + put_amf_double(pb, flv->videosize); + + avio_seek(pb, flv->audiosize_offset, SEEK_SET); + put_amf_double(pb, flv->audiosize); + + avio_seek(pb, flv->lasttimestamp_offset, SEEK_SET); + put_amf_double(pb, flv->lasttimestamp); + + avio_seek(pb, flv->lastkeyframetimestamp_offset, SEEK_SET); + put_amf_double(pb, flv->lastkeyframetimestamp); + + avio_seek(pb, flv->lastkeyframelocation_offset, SEEK_SET); + put_amf_double(pb, flv->lastkeyframelocation + flv->keyframe_index_size); + avio_seek(pb, cur_pos, SEEK_SET); + + res = shift_data(s); + if (res < 0) { + goto end; + } + avio_seek(pb, flv->keyframes_info_offset, SEEK_SET); + put_amf_string(pb, "filepositions"); + put_amf_dword_array(pb, flv->filepositions_count); + for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) { + put_amf_double(pb, newflv_posinfo->keyframe_position + flv->keyframe_index_size); + } + + put_amf_string(pb, "times"); + put_amf_dword_array(pb, flv->filepositions_count); + for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) { + put_amf_double(pb, newflv_posinfo->keyframe_timestamp); + } + + newflv_posinfo = flv->head_filepositions; + while (newflv_posinfo) { + p = newflv_posinfo->next; + if (p) { + newflv_posinfo->next = p->next; + av_free(p); + p = NULL; + } else { + av_free(newflv_posinfo); + newflv_posinfo = NULL; + } + } + + put_amf_string(pb, ""); + avio_w8(pb, AMF_END_OF_OBJECT); + + avio_seek(pb, cur_pos + flv->keyframe_index_size, SEEK_SET); + } + +end: + if (flv->flags & FLV_NO_SEQUENCE_END) { + av_log(s, AV_LOG_DEBUG, "FLV no sequence end mode open\n"); + } else { + /* Add EOS tag */ + for (i = 0; i < s->nb_streams; i++) { + AVCodecParameters *par = s->streams[i]->codecpar; + FLVStreamContext *sc = s->streams[i]->priv_data; + if (par->codec_type == AVMEDIA_TYPE_VIDEO && + (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC)) + put_avc_eos_tag(pb, sc->last_ts); + } + } + + file_size = avio_tell(pb); + + if (build_keyframes_idx) { + flv->datasize = file_size - flv->datastart_offset; + avio_seek(pb, flv->datasize_offset, SEEK_SET); + put_amf_double(pb, flv->datasize); + } + if (!(flv->flags & FLV_NO_METADATA)) { + if (!(flv->flags & FLV_NO_DURATION_FILESIZE)) { + /* update information */ + if (avio_seek(pb, flv->duration_offset, SEEK_SET) < 0) { + av_log(s, AV_LOG_WARNING, "Failed to update header with correct duration.\n"); + } else { + put_amf_double(pb, flv->duration / (double)1000); + } + if (avio_seek(pb, flv->filesize_offset, SEEK_SET) < 0) { + av_log(s, AV_LOG_WARNING, "Failed to update header with correct filesize.\n"); + } else { + put_amf_double(pb, file_size); + } + } + } + + return 0; +} + +static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) +{ + AVIOContext *pb = s->pb; + AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; + FLVContext *flv = s->priv_data; + FLVStreamContext *sc = s->streams[pkt->stream_index]->priv_data; + unsigned ts; + int size = pkt->size; + uint8_t *data = NULL; + int flags = -1, flags_size, ret; + int64_t cur_offset = avio_tell(pb); + + if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A || + par->codec_id == AV_CODEC_ID_VP6 || par->codec_id == AV_CODEC_ID_AAC) { + flags_size = 2; + } else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + flags_size = 5; + } else { + flags_size = 1; + } + + if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + int side_size = 0; + uint8_t *side = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size); + if (side && side_size > 0 && (side_size != par->extradata_size || memcmp(side, par->extradata, side_size))) { + av_free(par->extradata); + par->extradata = av_mallocz(side_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!par->extradata) { + par->extradata_size = 0; + return AVERROR(ENOMEM); + } + memcpy(par->extradata, side, side_size); + par->extradata_size = side_size; + flv_write_codec_header(s, par); + } + } + + if (flv->delay == AV_NOPTS_VALUE) + flv->delay = -pkt->dts; + + if (pkt->dts < -flv->delay) { + av_log(s, AV_LOG_WARNING, + "Packets are not in the proper order with respect to DTS\n"); + return AVERROR(EINVAL); + } + + ts = pkt->dts; + + if (s->event_flags & AVSTREAM_EVENT_FLAG_METADATA_UPDATED) { + write_metadata(s, ts); + s->event_flags &= ~AVSTREAM_EVENT_FLAG_METADATA_UPDATED; + } + + avio_write_marker(pb, av_rescale(ts, AV_TIME_BASE, 1000), + pkt->flags & AV_PKT_FLAG_KEY && (flv->video_par ? par->codec_type == AVMEDIA_TYPE_VIDEO : 1) ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); + + switch (par->codec_type) { + case AVMEDIA_TYPE_VIDEO: + avio_w8(pb, FLV_TAG_TYPE_VIDEO); + + flags = ff_codec_get_tag(flv_video_codec_ids, par->codec_id); + + flags |= pkt->flags & AV_PKT_FLAG_KEY ? FLV_FRAME_KEY : FLV_FRAME_INTER; + break; + case AVMEDIA_TYPE_AUDIO: + flags = get_audio_flags(s, par); + + av_assert0(size); + + avio_w8(pb, FLV_TAG_TYPE_AUDIO); + break; + case AVMEDIA_TYPE_SUBTITLE: + case AVMEDIA_TYPE_DATA: + avio_w8(pb, FLV_TAG_TYPE_META); + break; + default: + return AVERROR(EINVAL); + } + + if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) { + /* check if extradata looks like mp4 formatted */ + if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) + if ((ret = ff_avc_parse_nal_units_buf(pkt->data, &data, &size)) < 0) + return ret; + } else if (par->codec_id == AV_CODEC_ID_HEVC) { + if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) + if ((ret = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) + return ret; + } else if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && + (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) { + if (!s->streams[pkt->stream_index]->nb_frames) { + av_log(s, AV_LOG_ERROR, "Malformed AAC bitstream detected: " + "use the audio bitstream filter 'aac_adtstoasc' to fix it " + "('-bsf:a aac_adtstoasc' option with ffmpeg)\n"); + return AVERROR_INVALIDDATA; + } + av_log(s, AV_LOG_WARNING, "aac bitstream error\n"); + } + + /* check Speex packet duration */ + if (par->codec_id == AV_CODEC_ID_SPEEX && ts - sc->last_ts > 160) + av_log(s, AV_LOG_WARNING, "Warning: Speex stream has more than " + "8 frames per packet. Adobe Flash " + "Player cannot handle this!\n"); + + if (sc->last_ts < ts) + sc->last_ts = ts; + + if (size + flags_size >= 1<<24) { + av_log(s, AV_LOG_ERROR, "Too large packet with size %u >= %u\n", + size + flags_size, 1<<24); + return AVERROR(EINVAL); + } + + avio_wb24(pb, size + flags_size); + avio_wb24(pb, ts & 0xFFFFFF); + avio_w8(pb, (ts >> 24) & 0x7F); // timestamps are 32 bits _signed_ + avio_wb24(pb, flv->reserved); + + if (par->codec_type == AVMEDIA_TYPE_DATA || + par->codec_type == AVMEDIA_TYPE_SUBTITLE ) { + int data_size; + int64_t metadata_size_pos = avio_tell(pb); + if (par->codec_id == AV_CODEC_ID_TEXT) { + // legacy FFmpeg magic? + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, "onTextData"); + avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY); + avio_wb32(pb, 2); + put_amf_string(pb, "type"); + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, "Text"); + put_amf_string(pb, "text"); + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, pkt->data); + put_amf_string(pb, ""); + avio_w8(pb, AMF_END_OF_OBJECT); + } else { + // just pass the metadata through + avio_write(pb, data ? data : pkt->data, size); + } + /* write total size of tag */ + data_size = avio_tell(pb) - metadata_size_pos; + avio_seek(pb, metadata_size_pos - 10, SEEK_SET); + avio_wb24(pb, data_size); + avio_seek(pb, data_size + 10 - 3, SEEK_CUR); + avio_wb32(pb, data_size + 11); + } else { + av_assert1(flags>=0); + avio_w8(pb,flags); + if (par->codec_id == AV_CODEC_ID_VP6) + avio_w8(pb,0); + if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A) { + if (par->extradata_size) + avio_w8(pb, par->extradata[0]); + else + avio_w8(pb, ((FFALIGN(par->width, 16) - par->width) << 4) | + (FFALIGN(par->height, 16) - par->height)); + } else if (par->codec_id == AV_CODEC_ID_AAC) { + avio_w8(pb, 1); // AAC raw + } else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + avio_w8(pb, 1); // AVC NALU + avio_wb24(pb, pkt->pts - pkt->dts); + } + + avio_write(pb, data ? data : pkt->data, size); + + avio_wb32(pb, size + flags_size + 11); // previous tag size + flv->duration = FFMAX(flv->duration, + pkt->pts + flv->delay + pkt->duration); + } + + if (flv->flags & FLV_ADD_KEYFRAME_INDEX) { + switch (par->codec_type) { + case AVMEDIA_TYPE_VIDEO: + flv->videosize += (avio_tell(pb) - cur_offset); + flv->lasttimestamp = flv->acurframeindex / flv->framerate; + if (pkt->flags & AV_PKT_FLAG_KEY) { + double ts = flv->acurframeindex / flv->framerate; + int64_t pos = cur_offset; + + flv->lastkeyframetimestamp = flv->acurframeindex / flv->framerate; + flv->lastkeyframelocation = pos; + flv_append_keyframe_info(s, flv, ts, pos); + } + flv->acurframeindex++; + break; + + case AVMEDIA_TYPE_AUDIO: + flv->audiosize += (avio_tell(pb) - cur_offset); + break; + + default: + av_log(s, AV_LOG_WARNING, "par->codec_type is type = [%d]\n", par->codec_type); + break; + } + } + + av_free(data); + + return pb->error; +} + +static const AVOption options[] = { + { "flvflags", "FLV muxer flags", offsetof(FLVContext, flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "aac_seq_header_detect", "Put AAC sequence header based on stream data", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_AAC_SEQ_HEADER_DETECT}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "no_sequence_end", "disable sequence end for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_SEQUENCE_END}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "no_metadata", "disable metadata for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_METADATA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "no_duration_filesize", "disable duration and filesize zero value metadata for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_DURATION_FILESIZE}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "add_keyframe_index", "Add keyframe index metadata", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_ADD_KEYFRAME_INDEX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { NULL }, +}; + +static const AVClass flv_muxer_class = { + .class_name = "flv muxer", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVOutputFormat ff_flv_muxer = { + .name = "flv", + .long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), + .mime_type = "video/x-flv", + .extensions = "flv", + .priv_data_size = sizeof(FLVContext), + .audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_ADPCM_SWF, + .video_codec = AV_CODEC_ID_FLV1, + .write_header = flv_write_header, + .write_packet = flv_write_packet, + .write_trailer = flv_write_trailer, + .codec_tag = (const AVCodecTag* const []) { + flv_video_codec_ids, flv_audio_codec_ids, 0 + }, + .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | + AVFMT_TS_NONSTRICT, + .priv_class = &flv_muxer_class, +}; diff --git a/StreamMedia/flv_h265_patch/ffmpeg_flv/flv.h b/StreamMedia/flv_h265_patch/ffmpeg_flv/flv.h new file mode 100644 index 0000000..e776555 --- /dev/null +++ b/StreamMedia/flv_h265_patch/ffmpeg_flv/flv.h @@ -0,0 +1,140 @@ +/* + * FLV common header + * + * Copyright (c) 2006 The FFmpeg Project + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * FLV common header + */ + +#ifndef AVFORMAT_FLV_H +#define AVFORMAT_FLV_H + +/* offsets for packed values */ +#define FLV_AUDIO_SAMPLESSIZE_OFFSET 1 +#define FLV_AUDIO_SAMPLERATE_OFFSET 2 +#define FLV_AUDIO_CODECID_OFFSET 4 + +#define FLV_VIDEO_FRAMETYPE_OFFSET 4 + +/* bitmasks to isolate specific values */ +#define FLV_AUDIO_CHANNEL_MASK 0x01 +#define FLV_AUDIO_SAMPLESIZE_MASK 0x02 +#define FLV_AUDIO_SAMPLERATE_MASK 0x0c +#define FLV_AUDIO_CODECID_MASK 0xf0 + +#define FLV_VIDEO_CODECID_MASK 0x0f +#define FLV_VIDEO_FRAMETYPE_MASK 0xf0 + +#define AMF_END_OF_OBJECT 0x09 + +#define KEYFRAMES_TAG "keyframes" +#define KEYFRAMES_TIMESTAMP_TAG "times" +#define KEYFRAMES_BYTEOFFSET_TAG "filepositions" + + +enum { + FLV_HEADER_FLAG_HASVIDEO = 1, + FLV_HEADER_FLAG_HASAUDIO = 4, +}; + +enum FlvTagType { + FLV_TAG_TYPE_AUDIO = 0x08, + FLV_TAG_TYPE_VIDEO = 0x09, + FLV_TAG_TYPE_META = 0x12, +}; + +enum { + FLV_STREAM_TYPE_VIDEO, + FLV_STREAM_TYPE_AUDIO, + FLV_STREAM_TYPE_SUBTITLE, + FLV_STREAM_TYPE_DATA, + FLV_STREAM_TYPE_NB, +}; + +enum { + FLV_MONO = 0, + FLV_STEREO = 1, +}; + +enum { + FLV_SAMPLESSIZE_8BIT = 0, + FLV_SAMPLESSIZE_16BIT = 1 << FLV_AUDIO_SAMPLESSIZE_OFFSET, +}; + +enum { + FLV_SAMPLERATE_SPECIAL = 0, /**< signifies 5512Hz and 8000Hz in the case of NELLYMOSER */ + FLV_SAMPLERATE_11025HZ = 1 << FLV_AUDIO_SAMPLERATE_OFFSET, + FLV_SAMPLERATE_22050HZ = 2 << FLV_AUDIO_SAMPLERATE_OFFSET, + FLV_SAMPLERATE_44100HZ = 3 << FLV_AUDIO_SAMPLERATE_OFFSET, +}; + +enum { + FLV_CODECID_PCM = 0, + FLV_CODECID_ADPCM = 1 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_MP3 = 2 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_PCM_LE = 3 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_NELLYMOSER_16KHZ_MONO = 4 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_NELLYMOSER_8KHZ_MONO = 5 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_NELLYMOSER = 6 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_PCM_ALAW = 7 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_PCM_MULAW = 8 << FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_AAC = 10<< FLV_AUDIO_CODECID_OFFSET, + FLV_CODECID_SPEEX = 11<< FLV_AUDIO_CODECID_OFFSET, +}; + +enum { + FLV_CODECID_H263 = 2, + FLV_CODECID_SCREEN = 3, + FLV_CODECID_VP6 = 4, + FLV_CODECID_VP6A = 5, + FLV_CODECID_SCREEN2 = 6, + FLV_CODECID_H264 = 7, + FLV_CODECID_REALH263= 8, + FLV_CODECID_MPEG4 = 9, + FLV_CODECID_HEVC = 12, +}; + +enum { + FLV_FRAME_KEY = 1 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< key frame (for AVC, a seekable frame) + FLV_FRAME_INTER = 2 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< inter frame (for AVC, a non-seekable frame) + FLV_FRAME_DISP_INTER = 3 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< disposable inter frame (H.263 only) + FLV_FRAME_GENERATED_KEY = 4 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< generated key frame (reserved for server use only) + FLV_FRAME_VIDEO_INFO_CMD = 5 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< video info/command frame +}; + +typedef enum { + AMF_DATA_TYPE_NUMBER = 0x00, + AMF_DATA_TYPE_BOOL = 0x01, + AMF_DATA_TYPE_STRING = 0x02, + AMF_DATA_TYPE_OBJECT = 0x03, + AMF_DATA_TYPE_NULL = 0x05, + AMF_DATA_TYPE_UNDEFINED = 0x06, + AMF_DATA_TYPE_REFERENCE = 0x07, + AMF_DATA_TYPE_MIXEDARRAY = 0x08, + AMF_DATA_TYPE_OBJECT_END = 0x09, + AMF_DATA_TYPE_ARRAY = 0x0a, + AMF_DATA_TYPE_DATE = 0x0b, + AMF_DATA_TYPE_LONG_STRING = 0x0c, + AMF_DATA_TYPE_UNSUPPORTED = 0x0d, +} AMFDataType; + +#endif /* AVFORMAT_FLV_H */ diff --git a/StreamMedia/flv_h265_patch/ffmpeg_flv/flvdec.c b/StreamMedia/flv_h265_patch/ffmpeg_flv/flvdec.c new file mode 100644 index 0000000..63cf244 --- /dev/null +++ b/StreamMedia/flv_h265_patch/ffmpeg_flv/flvdec.c @@ -0,0 +1,1418 @@ +/* + * FLV demuxer + * Copyright (c) 2003 The FFmpeg Project + * + * This demuxer will generate a 1 byte extradata for VP6F content. + * It is composed of: + * - upper 4 bits: difference between encoded width and visible width + * - lower 4 bits: difference between encoded height and visible height + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/avstring.h" +#include "libavutil/channel_layout.h" +#include "libavutil/dict.h" +#include "libavutil/opt.h" +#include "libavutil/intfloat.h" +#include "libavutil/mathematics.h" +#include "libavutil/time_internal.h" +#include "libavcodec/bytestream.h" +#include "avformat.h" +#include "internal.h" +#include "avio_internal.h" +#include "flv.h" +#include "hevc.h" + +#define VALIDATE_INDEX_TS_THRESH 2500 + +#define RESYNC_BUFFER_SIZE (1<<20) + +typedef struct FLVContext { + const AVClass *class; ///< Class for private options. + int trust_metadata; ///< configure streams according onMetaData + int trust_datasize; ///< trust data size of FLVTag + int dump_full_metadata; ///< Dump full metadata of the onMetadata + int wrong_dts; ///< wrong dts due to negative cts + uint8_t *new_extradata[FLV_STREAM_TYPE_NB]; + int new_extradata_size[FLV_STREAM_TYPE_NB]; + int last_sample_rate; + int last_channels; + struct { + int64_t dts; + int64_t pos; + } validate_index[2]; + int validate_next; + int validate_count; + int searched_for_end; + + uint8_t resync_buffer[2*RESYNC_BUFFER_SIZE]; + + int broken_sizes; + int sum_flv_tag_size; + + int last_keyframe_stream_index; + int keyframe_count; + int64_t video_bit_rate; + int64_t audio_bit_rate; + int64_t *keyframe_times; + int64_t *keyframe_filepositions; + int missing_streams; + AVRational framerate; + int64_t last_ts; + int64_t time_offset; + int64_t time_pos; +} FLVContext; + +/* AMF date type */ +typedef struct amf_date { + double milliseconds; + int16_t timezone; +} amf_date; + +static int probe(const AVProbeData *p, int live) +{ + const uint8_t *d = p->buf; + unsigned offset = AV_RB32(d + 5); + + if (d[0] == 'F' && + d[1] == 'L' && + d[2] == 'V' && + d[3] < 5 && d[5] == 0 && + offset + 100 < p->buf_size && + offset > 8) { + int is_live = !memcmp(d + offset + 40, "NGINX RTMP", 10); + + if (live == is_live) + return AVPROBE_SCORE_MAX; + } + return 0; +} + +static int flv_probe(const AVProbeData *p) +{ + return probe(p, 0); +} + +static int live_flv_probe(const AVProbeData *p) +{ + return probe(p, 1); +} + +static int kux_probe(const AVProbeData *p) +{ + const uint8_t *d = p->buf; + + if (d[0] == 'K' && + d[1] == 'D' && + d[2] == 'K' && + d[3] == 0 && + d[4] == 0) { + return AVPROBE_SCORE_EXTENSION + 1; + } + return 0; +} + +static void add_keyframes_index(AVFormatContext *s) +{ + FLVContext *flv = s->priv_data; + AVStream *stream = NULL; + unsigned int i = 0; + + if (flv->last_keyframe_stream_index < 0) { + av_log(s, AV_LOG_DEBUG, "keyframe stream hasn't been created\n"); + return; + } + + av_assert0(flv->last_keyframe_stream_index <= s->nb_streams); + stream = s->streams[flv->last_keyframe_stream_index]; + + if (stream->nb_index_entries == 0) { + for (i = 0; i < flv->keyframe_count; i++) { + av_log(s, AV_LOG_TRACE, "keyframe filepositions = %"PRId64" times = %"PRId64"\n", + flv->keyframe_filepositions[i], flv->keyframe_times[i] * 1000); + av_add_index_entry(stream, flv->keyframe_filepositions[i], + flv->keyframe_times[i] * 1000, 0, 0, AVINDEX_KEYFRAME); + } + } else + av_log(s, AV_LOG_WARNING, "Skipping duplicate index\n"); + + if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { + av_freep(&flv->keyframe_times); + av_freep(&flv->keyframe_filepositions); + flv->keyframe_count = 0; + } +} + +static AVStream *create_stream(AVFormatContext *s, int codec_type) +{ + FLVContext *flv = s->priv_data; + AVStream *st = avformat_new_stream(s, NULL); + if (!st) + return NULL; + st->codecpar->codec_type = codec_type; + if (s->nb_streams>=3 ||( s->nb_streams==2 + && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE + && s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE + && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_DATA + && s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_DATA)) + s->ctx_flags &= ~AVFMTCTX_NOHEADER; + if (codec_type == AVMEDIA_TYPE_AUDIO) { + st->codecpar->bit_rate = flv->audio_bit_rate; + flv->missing_streams &= ~FLV_HEADER_FLAG_HASAUDIO; + } + if (codec_type == AVMEDIA_TYPE_VIDEO) { + st->codecpar->bit_rate = flv->video_bit_rate; + flv->missing_streams &= ~FLV_HEADER_FLAG_HASVIDEO; + st->avg_frame_rate = flv->framerate; + } + + + avpriv_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */ + flv->last_keyframe_stream_index = s->nb_streams - 1; + add_keyframes_index(s); + return st; +} + +static int flv_same_audio_codec(AVCodecParameters *apar, int flags) +{ + int bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8; + int flv_codecid = flags & FLV_AUDIO_CODECID_MASK; + int codec_id; + + if (!apar->codec_id && !apar->codec_tag) + return 1; + + if (apar->bits_per_coded_sample != bits_per_coded_sample) + return 0; + + switch (flv_codecid) { + // no distinction between S16 and S8 PCM codec flags + case FLV_CODECID_PCM: + codec_id = bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 +#if HAVE_BIGENDIAN + : AV_CODEC_ID_PCM_S16BE; +#else + : AV_CODEC_ID_PCM_S16LE; +#endif + return codec_id == apar->codec_id; + case FLV_CODECID_PCM_LE: + codec_id = bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 + : AV_CODEC_ID_PCM_S16LE; + return codec_id == apar->codec_id; + case FLV_CODECID_AAC: + return apar->codec_id == AV_CODEC_ID_AAC; + case FLV_CODECID_ADPCM: + return apar->codec_id == AV_CODEC_ID_ADPCM_SWF; + case FLV_CODECID_SPEEX: + return apar->codec_id == AV_CODEC_ID_SPEEX; + case FLV_CODECID_MP3: + return apar->codec_id == AV_CODEC_ID_MP3; + case FLV_CODECID_NELLYMOSER_8KHZ_MONO: + case FLV_CODECID_NELLYMOSER_16KHZ_MONO: + case FLV_CODECID_NELLYMOSER: + return apar->codec_id == AV_CODEC_ID_NELLYMOSER; + case FLV_CODECID_PCM_MULAW: + return apar->sample_rate == 8000 && + apar->codec_id == AV_CODEC_ID_PCM_MULAW; + case FLV_CODECID_PCM_ALAW: + return apar->sample_rate == 8000 && + apar->codec_id == AV_CODEC_ID_PCM_ALAW; + default: + return apar->codec_tag == (flv_codecid >> FLV_AUDIO_CODECID_OFFSET); + } +} + +static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, + AVCodecParameters *apar, int flv_codecid) +{ + switch (flv_codecid) { + // no distinction between S16 and S8 PCM codec flags + case FLV_CODECID_PCM: + apar->codec_id = apar->bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 +#if HAVE_BIGENDIAN + : AV_CODEC_ID_PCM_S16BE; +#else + : AV_CODEC_ID_PCM_S16LE; +#endif + break; + case FLV_CODECID_PCM_LE: + apar->codec_id = apar->bits_per_coded_sample == 8 + ? AV_CODEC_ID_PCM_U8 + : AV_CODEC_ID_PCM_S16LE; + break; + case FLV_CODECID_AAC: + apar->codec_id = AV_CODEC_ID_AAC; + break; + case FLV_CODECID_ADPCM: + apar->codec_id = AV_CODEC_ID_ADPCM_SWF; + break; + case FLV_CODECID_SPEEX: + apar->codec_id = AV_CODEC_ID_SPEEX; + apar->sample_rate = 16000; + break; + case FLV_CODECID_MP3: + apar->codec_id = AV_CODEC_ID_MP3; + astream->need_parsing = AVSTREAM_PARSE_FULL; + break; + case FLV_CODECID_NELLYMOSER_8KHZ_MONO: + // in case metadata does not otherwise declare samplerate + apar->sample_rate = 8000; + apar->codec_id = AV_CODEC_ID_NELLYMOSER; + break; + case FLV_CODECID_NELLYMOSER_16KHZ_MONO: + apar->sample_rate = 16000; + apar->codec_id = AV_CODEC_ID_NELLYMOSER; + break; + case FLV_CODECID_NELLYMOSER: + apar->codec_id = AV_CODEC_ID_NELLYMOSER; + break; + case FLV_CODECID_PCM_MULAW: + apar->sample_rate = 8000; + apar->codec_id = AV_CODEC_ID_PCM_MULAW; + break; + case FLV_CODECID_PCM_ALAW: + apar->sample_rate = 8000; + apar->codec_id = AV_CODEC_ID_PCM_ALAW; + break; + default: + avpriv_request_sample(s, "Audio codec (%x)", + flv_codecid >> FLV_AUDIO_CODECID_OFFSET); + apar->codec_tag = flv_codecid >> FLV_AUDIO_CODECID_OFFSET; + } +} + +static int flv_same_video_codec(AVCodecParameters *vpar, int flags) +{ + int flv_codecid = flags & FLV_VIDEO_CODECID_MASK; + + if (!vpar->codec_id && !vpar->codec_tag) + return 1; + + switch (flv_codecid) { + case FLV_CODECID_H263: + return vpar->codec_id == AV_CODEC_ID_FLV1; + case FLV_CODECID_SCREEN: + return vpar->codec_id == AV_CODEC_ID_FLASHSV; + case FLV_CODECID_SCREEN2: + return vpar->codec_id == AV_CODEC_ID_FLASHSV2; + case FLV_CODECID_VP6: + return vpar->codec_id == AV_CODEC_ID_VP6F; + case FLV_CODECID_VP6A: + return vpar->codec_id == AV_CODEC_ID_VP6A; + case FLV_CODECID_H264: + return vpar->codec_id == AV_CODEC_ID_H264; + case FLV_CODECID_HEVC: + return vpar->codec_id == AV_CODEC_ID_HEVC; + default: + return vpar->codec_tag == flv_codecid; + } +} + +static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, + int flv_codecid, int read) +{ + int ret = 0; + AVCodecParameters *par = vstream->codecpar; + enum AVCodecID old_codec_id = vstream->codecpar->codec_id; + switch (flv_codecid) { + case FLV_CODECID_H263: + par->codec_id = AV_CODEC_ID_FLV1; + break; + case FLV_CODECID_REALH263: + par->codec_id = AV_CODEC_ID_H263; + break; // Really mean it this time + case FLV_CODECID_SCREEN: + par->codec_id = AV_CODEC_ID_FLASHSV; + break; + case FLV_CODECID_SCREEN2: + par->codec_id = AV_CODEC_ID_FLASHSV2; + break; + case FLV_CODECID_VP6: + par->codec_id = AV_CODEC_ID_VP6F; + case FLV_CODECID_VP6A: + if (flv_codecid == FLV_CODECID_VP6A) + par->codec_id = AV_CODEC_ID_VP6A; + if (read) { + if (par->extradata_size != 1) { + ff_alloc_extradata(par, 1); + } + if (par->extradata) + par->extradata[0] = avio_r8(s->pb); + else + avio_skip(s->pb, 1); + } + ret = 1; // 1 byte body size adjustment for flv_read_packet() + break; + case FLV_CODECID_H264: + par->codec_id = AV_CODEC_ID_H264; + vstream->need_parsing = AVSTREAM_PARSE_HEADERS; + ret = 3; // not 4, reading packet type will consume one byte + break; + case FLV_CODECID_MPEG4: + par->codec_id = AV_CODEC_ID_MPEG4; + ret = 3; + break; + case FLV_CODECID_HEVC: + par->codec_id = AV_CODEC_ID_HEVC; + vstream->need_parsing = AVSTREAM_PARSE_NONE; + ret = 3; + break; + default: + avpriv_request_sample(s, "Video codec (%x)", flv_codecid); + par->codec_tag = flv_codecid; + } + + if (!vstream->internal->need_context_update && par->codec_id != old_codec_id) { + avpriv_request_sample(s, "Changing the codec id midstream"); + return AVERROR_PATCHWELCOME; + } + + return ret; +} + +static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize) +{ + int length = avio_rb16(ioc); + if (length >= buffsize) { + avio_skip(ioc, length); + return -1; + } + + avio_read(ioc, buffer, length); + + buffer[length] = '\0'; + + return length; +} + +static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, int64_t max_pos) +{ + FLVContext *flv = s->priv_data; + unsigned int timeslen = 0, fileposlen = 0, i; + char str_val[256]; + int64_t *times = NULL; + int64_t *filepositions = NULL; + int ret = AVERROR(ENOSYS); + int64_t initial_pos = avio_tell(ioc); + + if (flv->keyframe_count > 0) { + av_log(s, AV_LOG_DEBUG, "keyframes have been parsed\n"); + return 0; + } + av_assert0(!flv->keyframe_times); + av_assert0(!flv->keyframe_filepositions); + + if (s->flags & AVFMT_FLAG_IGNIDX) + return 0; + + while (avio_tell(ioc) < max_pos - 2 && + amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { + int64_t **current_array; + unsigned int arraylen; + + // Expect array object in context + if (avio_r8(ioc) != AMF_DATA_TYPE_ARRAY) + break; + + arraylen = avio_rb32(ioc); + if (arraylen>>28) + break; + + if (!strcmp(KEYFRAMES_TIMESTAMP_TAG , str_val) && !times) { + current_array = × + timeslen = arraylen; + } else if (!strcmp(KEYFRAMES_BYTEOFFSET_TAG, str_val) && + !filepositions) { + current_array = &filepositions; + fileposlen = arraylen; + } else + // unexpected metatag inside keyframes, will not use such + // metadata for indexing + break; + + if (!(*current_array = av_mallocz(sizeof(**current_array) * arraylen))) { + ret = AVERROR(ENOMEM); + goto finish; + } + + for (i = 0; i < arraylen && avio_tell(ioc) < max_pos - 1; i++) { + if (avio_r8(ioc) != AMF_DATA_TYPE_NUMBER) + goto invalid; + current_array[0][i] = av_int2double(avio_rb64(ioc)); + } + if (times && filepositions) { + // All done, exiting at a position allowing amf_parse_object + // to finish parsing the object + ret = 0; + break; + } + } + + if (timeslen == fileposlen && fileposlen>1 && max_pos <= filepositions[0]) { + for (i = 0; i < FFMIN(2,fileposlen); i++) { + flv->validate_index[i].pos = filepositions[i]; + flv->validate_index[i].dts = times[i] * 1000; + flv->validate_count = i + 1; + } + flv->keyframe_times = times; + flv->keyframe_filepositions = filepositions; + flv->keyframe_count = timeslen; + times = NULL; + filepositions = NULL; + } else { +invalid: + av_log(s, AV_LOG_WARNING, "Invalid keyframes object, skipping.\n"); + } + +finish: + av_freep(×); + av_freep(&filepositions); + avio_seek(ioc, initial_pos, SEEK_SET); + return ret; +} + +static int amf_parse_object(AVFormatContext *s, AVStream *astream, + AVStream *vstream, const char *key, + int64_t max_pos, int depth) +{ + AVCodecParameters *apar, *vpar; + FLVContext *flv = s->priv_data; + AVIOContext *ioc; + AMFDataType amf_type; + char str_val[1024]; + double num_val; + amf_date date; + + num_val = 0; + ioc = s->pb; + amf_type = avio_r8(ioc); + + switch (amf_type) { + case AMF_DATA_TYPE_NUMBER: + num_val = av_int2double(avio_rb64(ioc)); + break; + case AMF_DATA_TYPE_BOOL: + num_val = avio_r8(ioc); + break; + case AMF_DATA_TYPE_STRING: + if (amf_get_string(ioc, str_val, sizeof(str_val)) < 0) { + av_log(s, AV_LOG_ERROR, "AMF_DATA_TYPE_STRING parsing failed\n"); + return -1; + } + break; + case AMF_DATA_TYPE_OBJECT: + if (key && + (ioc->seekable & AVIO_SEEKABLE_NORMAL) && + !strcmp(KEYFRAMES_TAG, key) && depth == 1) + if (parse_keyframes_index(s, ioc, + max_pos) < 0) + av_log(s, AV_LOG_ERROR, "Keyframe index parsing failed\n"); + else + add_keyframes_index(s); + while (avio_tell(ioc) < max_pos - 2 && + amf_get_string(ioc, str_val, sizeof(str_val)) > 0) + if (amf_parse_object(s, astream, vstream, str_val, max_pos, + depth + 1) < 0) + return -1; // if we couldn't skip, bomb out. + if (avio_r8(ioc) != AMF_END_OF_OBJECT) { + av_log(s, AV_LOG_ERROR, "Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT\n"); + return -1; + } + break; + case AMF_DATA_TYPE_NULL: + case AMF_DATA_TYPE_UNDEFINED: + case AMF_DATA_TYPE_UNSUPPORTED: + break; // these take up no additional space + case AMF_DATA_TYPE_MIXEDARRAY: + { + unsigned v; + avio_skip(ioc, 4); // skip 32-bit max array index + while (avio_tell(ioc) < max_pos - 2 && + amf_get_string(ioc, str_val, sizeof(str_val)) > 0) + // this is the only case in which we would want a nested + // parse to not skip over the object + if (amf_parse_object(s, astream, vstream, str_val, max_pos, + depth + 1) < 0) + return -1; + v = avio_r8(ioc); + if (v != AMF_END_OF_OBJECT) { + av_log(s, AV_LOG_ERROR, "Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_MIXEDARRAY, found %d\n", v); + return -1; + } + break; + } + case AMF_DATA_TYPE_ARRAY: + { + unsigned int arraylen, i; + + arraylen = avio_rb32(ioc); + for (i = 0; i < arraylen && avio_tell(ioc) < max_pos - 1; i++) + if (amf_parse_object(s, NULL, NULL, NULL, max_pos, + depth + 1) < 0) + return -1; // if we couldn't skip, bomb out. + } + break; + case AMF_DATA_TYPE_DATE: + // timestamp (double) and UTC offset (int16) + date.milliseconds = av_int2double(avio_rb64(ioc)); + date.timezone = avio_rb16(ioc); + break; + default: // unsupported type, we couldn't skip + av_log(s, AV_LOG_ERROR, "unsupported amf type %d\n", amf_type); + return -1; + } + + if (key) { + apar = astream ? astream->codecpar : NULL; + vpar = vstream ? vstream->codecpar : NULL; + + // stream info doesn't live any deeper than the first object + if (depth == 1) { + if (amf_type == AMF_DATA_TYPE_NUMBER || + amf_type == AMF_DATA_TYPE_BOOL) { + if (!strcmp(key, "duration")) + s->duration = num_val * AV_TIME_BASE; + else if (!strcmp(key, "videodatarate") && + 0 <= (int)(num_val * 1024.0)) + flv->video_bit_rate = num_val * 1024.0; + else if (!strcmp(key, "audiodatarate") && + 0 <= (int)(num_val * 1024.0)) + flv->audio_bit_rate = num_val * 1024.0; + else if (!strcmp(key, "datastream")) { + AVStream *st = create_stream(s, AVMEDIA_TYPE_SUBTITLE); + if (!st) + return AVERROR(ENOMEM); + st->codecpar->codec_id = AV_CODEC_ID_TEXT; + } else if (!strcmp(key, "framerate")) { + flv->framerate = av_d2q(num_val, 1000); + if (vstream) + vstream->avg_frame_rate = flv->framerate; + } else if (flv->trust_metadata) { + if (!strcmp(key, "videocodecid") && vpar) { + int ret = flv_set_video_codec(s, vstream, num_val, 0); + if (ret < 0) + return ret; + } else if (!strcmp(key, "audiocodecid") && apar) { + int id = ((int)num_val) << FLV_AUDIO_CODECID_OFFSET; + flv_set_audio_codec(s, astream, apar, id); + } else if (!strcmp(key, "audiosamplerate") && apar) { + apar->sample_rate = num_val; + } else if (!strcmp(key, "audiosamplesize") && apar) { + apar->bits_per_coded_sample = num_val; + } else if (!strcmp(key, "stereo") && apar) { + apar->channels = num_val + 1; + apar->channel_layout = apar->channels == 2 ? + AV_CH_LAYOUT_STEREO : + AV_CH_LAYOUT_MONO; + } else if (!strcmp(key, "width") && vpar) { + vpar->width = num_val; + } else if (!strcmp(key, "height") && vpar) { + vpar->height = num_val; + } + } + } + if (amf_type == AMF_DATA_TYPE_STRING) { + if (!strcmp(key, "encoder")) { + int version = -1; + if (1 == sscanf(str_val, "Open Broadcaster Software v0.%d", &version)) { + if (version > 0 && version <= 655) + flv->broken_sizes = 1; + } + } else if (!strcmp(key, "metadatacreator")) { + if ( !strcmp (str_val, "MEGA") + || !strncmp(str_val, "FlixEngine", 10)) + flv->broken_sizes = 1; + } + } + } + + if (amf_type == AMF_DATA_TYPE_OBJECT && s->nb_streams == 1 && + ((!apar && !strcmp(key, "audiocodecid")) || + (!vpar && !strcmp(key, "videocodecid")))) + s->ctx_flags &= ~AVFMTCTX_NOHEADER; //If there is either audio/video missing, codecid will be an empty object + + if ((!strcmp(key, "duration") || + !strcmp(key, "filesize") || + !strcmp(key, "width") || + !strcmp(key, "height") || + !strcmp(key, "videodatarate") || + !strcmp(key, "framerate") || + !strcmp(key, "videocodecid") || + !strcmp(key, "audiodatarate") || + !strcmp(key, "audiosamplerate") || + !strcmp(key, "audiosamplesize") || + !strcmp(key, "stereo") || + !strcmp(key, "audiocodecid") || + !strcmp(key, "datastream")) && !flv->dump_full_metadata) + return 0; + + s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED; + if (amf_type == AMF_DATA_TYPE_BOOL) { + av_strlcpy(str_val, num_val > 0 ? "true" : "false", + sizeof(str_val)); + av_dict_set(&s->metadata, key, str_val, 0); + } else if (amf_type == AMF_DATA_TYPE_NUMBER) { + snprintf(str_val, sizeof(str_val), "%.f", num_val); + av_dict_set(&s->metadata, key, str_val, 0); + } else if (amf_type == AMF_DATA_TYPE_STRING) { + av_dict_set(&s->metadata, key, str_val, 0); + } else if (amf_type == AMF_DATA_TYPE_DATE) { + time_t time; + struct tm t; + char datestr[128]; + time = date.milliseconds / 1000; // to seconds + localtime_r(&time, &t); + strftime(datestr, sizeof(datestr), "%a, %d %b %Y %H:%M:%S %z", &t); + + av_dict_set(&s->metadata, key, datestr, 0); + } + } + + return 0; +} + +#define TYPE_ONTEXTDATA 1 +#define TYPE_ONCAPTION 2 +#define TYPE_ONCAPTIONINFO 3 +#define TYPE_UNKNOWN 9 + +static int flv_read_metabody(AVFormatContext *s, int64_t next_pos) +{ + FLVContext *flv = s->priv_data; + AMFDataType type; + AVStream *stream, *astream, *vstream; + AVStream av_unused *dstream; + AVIOContext *ioc; + int i; + char buffer[32]; + + astream = NULL; + vstream = NULL; + dstream = NULL; + ioc = s->pb; + + // first object needs to be "onMetaData" string + type = avio_r8(ioc); + if (type != AMF_DATA_TYPE_STRING || + amf_get_string(ioc, buffer, sizeof(buffer)) < 0) + return TYPE_UNKNOWN; + + if (!strcmp(buffer, "onTextData")) + return TYPE_ONTEXTDATA; + + if (!strcmp(buffer, "onCaption")) + return TYPE_ONCAPTION; + + if (!strcmp(buffer, "onCaptionInfo")) + return TYPE_ONCAPTIONINFO; + + if (strcmp(buffer, "onMetaData") && strcmp(buffer, "onCuePoint")) { + av_log(s, AV_LOG_DEBUG, "Unknown type %s\n", buffer); + return TYPE_UNKNOWN; + } + + // find the streams now so that amf_parse_object doesn't need to do + // the lookup every time it is called. + for (i = 0; i < s->nb_streams; i++) { + stream = s->streams[i]; + if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { + vstream = stream; + flv->last_keyframe_stream_index = i; + } else if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { + astream = stream; + if (flv->last_keyframe_stream_index == -1) + flv->last_keyframe_stream_index = i; + } + else if (stream->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + dstream = stream; + } + + // parse the second object (we want a mixed array) + if (amf_parse_object(s, astream, vstream, buffer, next_pos, 0) < 0) + return -1; + + return 0; +} + +static int flv_read_header(AVFormatContext *s) +{ + int flags; + FLVContext *flv = s->priv_data; + int offset; + int pre_tag_size = 0; + + /* Actual FLV data at 0xe40000 in KUX file */ + if(!strcmp(s->iformat->name, "kux")) + avio_skip(s->pb, 0xe40000); + + avio_skip(s->pb, 4); + flags = avio_r8(s->pb); + + flv->missing_streams = flags & (FLV_HEADER_FLAG_HASVIDEO | FLV_HEADER_FLAG_HASAUDIO); + + s->ctx_flags |= AVFMTCTX_NOHEADER; + + offset = avio_rb32(s->pb); + avio_seek(s->pb, offset, SEEK_SET); + + /* Annex E. The FLV File Format + * E.3 TheFLVFileBody + * Field Type Comment + * PreviousTagSize0 UI32 Always 0 + * */ + pre_tag_size = avio_rb32(s->pb); + if (pre_tag_size) { + av_log(s, AV_LOG_WARNING, "Read FLV header error, input file is not a standard flv format, first PreviousTagSize0 always is 0\n"); + } + + s->start_time = 0; + flv->sum_flv_tag_size = 0; + flv->last_keyframe_stream_index = -1; + + return 0; +} + +static int flv_read_close(AVFormatContext *s) +{ + int i; + FLVContext *flv = s->priv_data; + for (i=0; inew_extradata[i]); + av_freep(&flv->keyframe_times); + av_freep(&flv->keyframe_filepositions); + return 0; +} + +static int flv_get_extradata(AVFormatContext *s, AVStream *st, int size) +{ + if (!size) + return 0; + + av_freep(&st->codecpar->extradata); + if (ff_get_extradata(s, st->codecpar, s->pb, size) < 0) + return AVERROR(ENOMEM); + st->internal->need_context_update = 1; + return 0; +} + +static int flv_queue_extradata(FLVContext *flv, AVIOContext *pb, int stream, + int size) +{ + if (!size) + return 0; + + av_free(flv->new_extradata[stream]); + flv->new_extradata[stream] = av_mallocz(size + + AV_INPUT_BUFFER_PADDING_SIZE); + if (!flv->new_extradata[stream]) + return AVERROR(ENOMEM); + flv->new_extradata_size[stream] = size; + avio_read(pb, flv->new_extradata[stream], size); + return 0; +} + +static void clear_index_entries(AVFormatContext *s, int64_t pos) +{ + int i, j, out; + av_log(s, AV_LOG_WARNING, + "Found invalid index entries, clearing the index.\n"); + for (i = 0; i < s->nb_streams; i++) { + AVStream *st = s->streams[i]; + /* Remove all index entries that point to >= pos */ + out = 0; + for (j = 0; j < st->nb_index_entries; j++) + if (st->index_entries[j].pos < pos) + st->index_entries[out++] = st->index_entries[j]; + st->nb_index_entries = out; + } +} + +static int amf_skip_tag(AVIOContext *pb, AMFDataType type) +{ + int nb = -1, ret, parse_name = 1; + + switch (type) { + case AMF_DATA_TYPE_NUMBER: + avio_skip(pb, 8); + break; + case AMF_DATA_TYPE_BOOL: + avio_skip(pb, 1); + break; + case AMF_DATA_TYPE_STRING: + avio_skip(pb, avio_rb16(pb)); + break; + case AMF_DATA_TYPE_ARRAY: + parse_name = 0; + case AMF_DATA_TYPE_MIXEDARRAY: + nb = avio_rb32(pb); + case AMF_DATA_TYPE_OBJECT: + while(!pb->eof_reached && (nb-- > 0 || type != AMF_DATA_TYPE_ARRAY)) { + if (parse_name) { + int size = avio_rb16(pb); + if (!size) { + avio_skip(pb, 1); + break; + } + avio_skip(pb, size); + } + if ((ret = amf_skip_tag(pb, avio_r8(pb))) < 0) + return ret; + } + break; + case AMF_DATA_TYPE_NULL: + case AMF_DATA_TYPE_OBJECT_END: + break; + default: + return AVERROR_INVALIDDATA; + } + return 0; +} + +static int flv_data_packet(AVFormatContext *s, AVPacket *pkt, + int64_t dts, int64_t next) +{ + AVIOContext *pb = s->pb; + AVStream *st = NULL; + char buf[20]; + int ret = AVERROR_INVALIDDATA; + int i, length = -1; + int array = 0; + + switch (avio_r8(pb)) { + case AMF_DATA_TYPE_ARRAY: + array = 1; + case AMF_DATA_TYPE_MIXEDARRAY: + avio_seek(pb, 4, SEEK_CUR); + case AMF_DATA_TYPE_OBJECT: + break; + default: + goto skip; + } + + while (array || (ret = amf_get_string(pb, buf, sizeof(buf))) > 0) { + AMFDataType type = avio_r8(pb); + if (type == AMF_DATA_TYPE_STRING && (array || !strcmp(buf, "text"))) { + length = avio_rb16(pb); + ret = av_get_packet(pb, pkt, length); + if (ret < 0) + goto skip; + else + break; + } else { + if ((ret = amf_skip_tag(pb, type)) < 0) + goto skip; + } + } + + if (length < 0) { + ret = AVERROR_INVALIDDATA; + goto skip; + } + + for (i = 0; i < s->nb_streams; i++) { + st = s->streams[i]; + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + break; + } + + if (i == s->nb_streams) { + st = create_stream(s, AVMEDIA_TYPE_SUBTITLE); + if (!st) + return AVERROR(ENOMEM); + st->codecpar->codec_id = AV_CODEC_ID_TEXT; + } + + pkt->dts = dts; + pkt->pts = dts; + pkt->size = ret; + + pkt->stream_index = st->index; + pkt->flags |= AV_PKT_FLAG_KEY; + +skip: + avio_seek(s->pb, next + 4, SEEK_SET); + + return ret; +} + +static int resync(AVFormatContext *s) +{ + FLVContext *flv = s->priv_data; + int64_t i; + int64_t pos = avio_tell(s->pb); + + for (i=0; !avio_feof(s->pb); i++) { + int j = i & (RESYNC_BUFFER_SIZE-1); + int j1 = j + RESYNC_BUFFER_SIZE; + flv->resync_buffer[j ] = + flv->resync_buffer[j1] = avio_r8(s->pb); + + if (i >= 8 && pos) { + uint8_t *d = flv->resync_buffer + j1 - 8; + if (d[0] == 'F' && + d[1] == 'L' && + d[2] == 'V' && + d[3] < 5 && d[5] == 0) { + av_log(s, AV_LOG_WARNING, "Concatenated FLV detected, might fail to demux, decode and seek %"PRId64"\n", flv->last_ts); + flv->time_offset = flv->last_ts + 1; + flv->time_pos = avio_tell(s->pb); + } + } + + if (i > 22) { + unsigned lsize2 = AV_RB32(flv->resync_buffer + j1 - 4); + if (lsize2 >= 11 && lsize2 + 8LL < FFMIN(i, RESYNC_BUFFER_SIZE)) { + unsigned size2 = AV_RB24(flv->resync_buffer + j1 - lsize2 + 1 - 4); + unsigned lsize1 = AV_RB32(flv->resync_buffer + j1 - lsize2 - 8); + if (lsize1 >= 11 && lsize1 + 8LL + lsize2 < FFMIN(i, RESYNC_BUFFER_SIZE)) { + unsigned size1 = AV_RB24(flv->resync_buffer + j1 - lsize1 + 1 - lsize2 - 8); + if (size1 == lsize1 - 11 && size2 == lsize2 - 11) { + avio_seek(s->pb, pos + i - lsize1 - lsize2 - 8, SEEK_SET); + return 1; + } + } + } + } + } + return AVERROR_EOF; +} + +static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) +{ + FLVContext *flv = s->priv_data; + int ret, i, size, flags; + enum FlvTagType type; + int stream_type=-1; + int64_t next, pos, meta_pos; + int64_t dts, pts = AV_NOPTS_VALUE; + int av_uninit(channels); + int av_uninit(sample_rate); + AVStream *st = NULL; + int last = -1; + int orig_size; + +retry: + /* pkt size is repeated at end. skip it */ + pos = avio_tell(s->pb); + type = (avio_r8(s->pb) & 0x1F); + orig_size = + size = avio_rb24(s->pb); + flv->sum_flv_tag_size += size + 11; + dts = avio_rb24(s->pb); + dts |= (unsigned)avio_r8(s->pb) << 24; + av_log(s, AV_LOG_TRACE, "type:%d, size:%d, last:%d, dts:%"PRId64" pos:%"PRId64"\n", type, size, last, dts, avio_tell(s->pb)); + if (avio_feof(s->pb)) + return AVERROR_EOF; + avio_skip(s->pb, 3); /* stream id, always 0 */ + flags = 0; + + if (flv->validate_next < flv->validate_count) { + int64_t validate_pos = flv->validate_index[flv->validate_next].pos; + if (pos == validate_pos) { + if (FFABS(dts - flv->validate_index[flv->validate_next].dts) <= + VALIDATE_INDEX_TS_THRESH) { + flv->validate_next++; + } else { + clear_index_entries(s, validate_pos); + flv->validate_count = 0; + } + } else if (pos > validate_pos) { + clear_index_entries(s, validate_pos); + flv->validate_count = 0; + } + } + + if (size == 0) { + ret = FFERROR_REDO; + goto leave; + } + + next = size + avio_tell(s->pb); + + if (type == FLV_TAG_TYPE_AUDIO) { + stream_type = FLV_STREAM_TYPE_AUDIO; + flags = avio_r8(s->pb); + size--; + } else if (type == FLV_TAG_TYPE_VIDEO) { + stream_type = FLV_STREAM_TYPE_VIDEO; + flags = avio_r8(s->pb); + size--; + if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_VIDEO_INFO_CMD) + goto skip; + } else if (type == FLV_TAG_TYPE_META) { + stream_type=FLV_STREAM_TYPE_SUBTITLE; + if (size > 13 + 1 + 4) { // Header-type metadata stuff + int type; + meta_pos = avio_tell(s->pb); + type = flv_read_metabody(s, next); + if (type == 0 && dts == 0 || type < 0) { + if (type < 0 && flv->validate_count && + flv->validate_index[0].pos > next && + flv->validate_index[0].pos - 4 < next + ) { + av_log(s, AV_LOG_WARNING, "Adjusting next position due to index mismatch\n"); + next = flv->validate_index[0].pos - 4; + } + goto skip; + } else if (type == TYPE_ONTEXTDATA) { + avpriv_request_sample(s, "OnTextData packet"); + return flv_data_packet(s, pkt, dts, next); + } else if (type == TYPE_ONCAPTION) { + return flv_data_packet(s, pkt, dts, next); + } else if (type == TYPE_UNKNOWN) { + stream_type = FLV_STREAM_TYPE_DATA; + } + avio_seek(s->pb, meta_pos, SEEK_SET); + } + } else { + av_log(s, AV_LOG_DEBUG, + "Skipping flv packet: type %d, size %d, flags %d.\n", + type, size, flags); +skip: + if (avio_seek(s->pb, next, SEEK_SET) != next) { + // This can happen if flv_read_metabody above read past + // next, on a non-seekable input, and the preceding data has + // been flushed out from the IO buffer. + av_log(s, AV_LOG_ERROR, "Unable to seek to the next packet\n"); + return AVERROR_INVALIDDATA; + } + ret = FFERROR_REDO; + goto leave; + } + + /* skip empty data packets */ + if (!size) { + ret = FFERROR_REDO; + goto leave; + } + + /* now find stream */ + for (i = 0; i < s->nb_streams; i++) { + st = s->streams[i]; + if (stream_type == FLV_STREAM_TYPE_AUDIO) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && + (s->audio_codec_id || flv_same_audio_codec(st->codecpar, flags))) + break; + } else if (stream_type == FLV_STREAM_TYPE_VIDEO) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && + (s->video_codec_id || flv_same_video_codec(st->codecpar, flags))) + break; + } else if (stream_type == FLV_STREAM_TYPE_SUBTITLE) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + break; + } else if (stream_type == FLV_STREAM_TYPE_DATA) { + if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA) + break; + } + } + if (i == s->nb_streams) { + static const enum AVMediaType stream_types[] = {AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_SUBTITLE, AVMEDIA_TYPE_DATA}; + st = create_stream(s, stream_types[stream_type]); + if (!st) + return AVERROR(ENOMEM); + + } + av_log(s, AV_LOG_TRACE, "%d %X %d \n", stream_type, flags, st->discard); + + if (flv->time_pos <= pos) { + dts += flv->time_offset; + } + + if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && + ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY || + stream_type == FLV_STREAM_TYPE_AUDIO)) + av_add_index_entry(st, pos, dts, size, 0, AVINDEX_KEYFRAME); + + if ( (st->discard >= AVDISCARD_NONKEY && !((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY || (stream_type == FLV_STREAM_TYPE_AUDIO))) + ||(st->discard >= AVDISCARD_BIDIR && ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_DISP_INTER && (stream_type == FLV_STREAM_TYPE_VIDEO))) + || st->discard >= AVDISCARD_ALL + ) { + avio_seek(s->pb, next, SEEK_SET); + ret = FFERROR_REDO; + goto leave; + } + + // if not streamed and no duration from metadata then seek to end to find + // the duration from the timestamps + if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && + (!s->duration || s->duration == AV_NOPTS_VALUE) && + !flv->searched_for_end) { + int size; + const int64_t pos = avio_tell(s->pb); + // Read the last 4 bytes of the file, this should be the size of the + // previous FLV tag. Use the timestamp of its payload as duration. + int64_t fsize = avio_size(s->pb); +retry_duration: + avio_seek(s->pb, fsize - 4, SEEK_SET); + size = avio_rb32(s->pb); + if (size > 0 && size < fsize) { + // Seek to the start of the last FLV tag at position (fsize - 4 - size) + // but skip the byte indicating the type. + avio_seek(s->pb, fsize - 3 - size, SEEK_SET); + if (size == avio_rb24(s->pb) + 11) { + uint32_t ts = avio_rb24(s->pb); + ts |= avio_r8(s->pb) << 24; + if (ts) + s->duration = ts * (int64_t)AV_TIME_BASE / 1000; + else if (fsize >= 8 && fsize - 8 >= size) { + fsize -= size+4; + goto retry_duration; + } + } + } + + avio_seek(s->pb, pos, SEEK_SET); + flv->searched_for_end = 1; + } + + if (stream_type == FLV_STREAM_TYPE_AUDIO) { + int bits_per_coded_sample; + channels = (flags & FLV_AUDIO_CHANNEL_MASK) == FLV_STEREO ? 2 : 1; + sample_rate = 44100 << ((flags & FLV_AUDIO_SAMPLERATE_MASK) >> + FLV_AUDIO_SAMPLERATE_OFFSET) >> 3; + bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8; + if (!st->codecpar->channels || !st->codecpar->sample_rate || + !st->codecpar->bits_per_coded_sample) { + st->codecpar->channels = channels; + st->codecpar->channel_layout = channels == 1 + ? AV_CH_LAYOUT_MONO + : AV_CH_LAYOUT_STEREO; + st->codecpar->sample_rate = sample_rate; + st->codecpar->bits_per_coded_sample = bits_per_coded_sample; + } + if (!st->codecpar->codec_id) { + flv_set_audio_codec(s, st, st->codecpar, + flags & FLV_AUDIO_CODECID_MASK); + flv->last_sample_rate = + sample_rate = st->codecpar->sample_rate; + flv->last_channels = + channels = st->codecpar->channels; + } else { + AVCodecParameters *par = avcodec_parameters_alloc(); + if (!par) { + ret = AVERROR(ENOMEM); + goto leave; + } + par->sample_rate = sample_rate; + par->bits_per_coded_sample = bits_per_coded_sample; + flv_set_audio_codec(s, st, par, flags & FLV_AUDIO_CODECID_MASK); + sample_rate = par->sample_rate; + avcodec_parameters_free(&par); + } + } else if (stream_type == FLV_STREAM_TYPE_VIDEO) { + int ret = flv_set_video_codec(s, st, flags & FLV_VIDEO_CODECID_MASK, 1); + if (ret < 0) + return ret; + size -= ret; + } else if (stream_type == FLV_STREAM_TYPE_SUBTITLE) { + st->codecpar->codec_id = AV_CODEC_ID_TEXT; + } else if (stream_type == FLV_STREAM_TYPE_DATA) { + st->codecpar->codec_id = AV_CODEC_ID_NONE; // Opaque AMF data + } + + if (st->codecpar->codec_id == AV_CODEC_ID_AAC || + st->codecpar->codec_id == AV_CODEC_ID_H264 || + st->codecpar->codec_id == AV_CODEC_ID_MPEG4 || + st->codecpar->codec_id == AV_CODEC_ID_HEVC ) { + int type = avio_r8(s->pb); + size--; + + if (size < 0) { + ret = AVERROR_INVALIDDATA; + goto leave; + } + + if (st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_MPEG4 || st->codecpar->codec_id == AV_CODEC_ID_HEVC) { + // sign extension + int32_t cts = (avio_rb24(s->pb) + 0xff800000) ^ 0xff800000; + pts = dts + cts; + if (cts < 0) { // dts might be wrong + if (!flv->wrong_dts) + av_log(s, AV_LOG_WARNING, + "Negative cts, previous timestamps might be wrong.\n"); + flv->wrong_dts = 1; + } else if (FFABS(dts - pts) > 1000*60*15) { + av_log(s, AV_LOG_WARNING, + "invalid timestamps %"PRId64" %"PRId64"\n", dts, pts); + dts = pts = AV_NOPTS_VALUE; + } + } + if (type == 0 && (!st->codecpar->extradata || st->codecpar->codec_id == AV_CODEC_ID_AAC || + st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC)) { + AVDictionaryEntry *t; + + if (st->codecpar->extradata) { + if ((ret = flv_queue_extradata(flv, s->pb, stream_type, size)) < 0) + return ret; + ret = FFERROR_REDO; + goto leave; + } + if ((ret = flv_get_extradata(s, st, size)) < 0) + return ret; + + /* Workaround for buggy Omnia A/XE encoder */ + t = av_dict_get(s->metadata, "Encoder", NULL, 0); + if (st->codecpar->codec_id == AV_CODEC_ID_AAC && t && !strcmp(t->value, "Omnia A/XE")) + st->codecpar->extradata_size = 2; + + ret = FFERROR_REDO; + goto leave; + } + } + + /* skip empty data packets */ + if (!size) { + ret = FFERROR_REDO; + goto leave; + } + + ret = av_get_packet(s->pb, pkt, size); + if (ret < 0) + return ret; + pkt->dts = dts; + pkt->pts = pts == AV_NOPTS_VALUE ? dts : pts; + pkt->stream_index = st->index; + pkt->pos = pos; + if (flv->new_extradata[stream_type]) { + uint8_t *side = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, + flv->new_extradata_size[stream_type]); + if (side) { + memcpy(side, flv->new_extradata[stream_type], + flv->new_extradata_size[stream_type]); + av_freep(&flv->new_extradata[stream_type]); + flv->new_extradata_size[stream_type] = 0; + } + } + if (stream_type == FLV_STREAM_TYPE_AUDIO && + (sample_rate != flv->last_sample_rate || + channels != flv->last_channels)) { + flv->last_sample_rate = sample_rate; + flv->last_channels = channels; + ff_add_param_change(pkt, channels, 0, sample_rate, 0, 0); + } + + if ( stream_type == FLV_STREAM_TYPE_AUDIO || + ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY) || + stream_type == FLV_STREAM_TYPE_SUBTITLE || + stream_type == FLV_STREAM_TYPE_DATA) + pkt->flags |= AV_PKT_FLAG_KEY; + +leave: + last = avio_rb32(s->pb); + if (!flv->trust_datasize) { + if (last != orig_size + 11 && last != orig_size + 10 && + !avio_feof(s->pb) && + (last != orig_size || !last) && last != flv->sum_flv_tag_size && + !flv->broken_sizes) { + av_log(s, AV_LOG_ERROR, "Packet mismatch %d %d %d\n", last, orig_size + 11, flv->sum_flv_tag_size); + avio_seek(s->pb, pos + 1, SEEK_SET); + ret = resync(s); + av_packet_unref(pkt); + if (ret >= 0) { + goto retry; + } + } + } + + if (ret >= 0) + flv->last_ts = pkt->dts; + + return ret; +} + +static int flv_read_seek(AVFormatContext *s, int stream_index, + int64_t ts, int flags) +{ + FLVContext *flv = s->priv_data; + flv->validate_count = 0; + return avio_seek_time(s->pb, stream_index, ts, flags); +} + +#define OFFSET(x) offsetof(FLVContext, x) +#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM +static const AVOption options[] = { + { "flv_metadata", "Allocate streams according to the onMetaData array", OFFSET(trust_metadata), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, + { "flv_full_metadata", "Dump full metadata of the onMetadata", OFFSET(dump_full_metadata), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, + { "flv_ignore_prevtag", "Ignore the Size of previous tag", OFFSET(trust_datasize), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, + { "missing_streams", "", OFFSET(missing_streams), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0xFF, VD | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, + { NULL } +}; + +static const AVClass flv_class = { + .class_name = "flvdec", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVInputFormat ff_flv_demuxer = { + .name = "flv", + .long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), + .priv_data_size = sizeof(FLVContext), + .read_probe = flv_probe, + .read_header = flv_read_header, + .read_packet = flv_read_packet, + .read_seek = flv_read_seek, + .read_close = flv_read_close, + .extensions = "flv", + .priv_class = &flv_class, +}; + +static const AVClass live_flv_class = { + .class_name = "live_flvdec", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVInputFormat ff_live_flv_demuxer = { + .name = "live_flv", + .long_name = NULL_IF_CONFIG_SMALL("live RTMP FLV (Flash Video)"), + .priv_data_size = sizeof(FLVContext), + .read_probe = live_flv_probe, + .read_header = flv_read_header, + .read_packet = flv_read_packet, + .read_seek = flv_read_seek, + .read_close = flv_read_close, + .extensions = "flv", + .priv_class = &live_flv_class, + .flags = AVFMT_TS_DISCONT +}; + +static const AVClass kux_class = { + .class_name = "kuxdec", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVInputFormat ff_kux_demuxer = { + .name = "kux", + .long_name = NULL_IF_CONFIG_SMALL("KUX (YouKu)"), + .priv_data_size = sizeof(FLVContext), + .read_probe = kux_probe, + .read_header = flv_read_header, + .read_packet = flv_read_packet, + .read_seek = flv_read_seek, + .read_close = flv_read_close, + .extensions = "kux", + .priv_class = &kux_class, +}; diff --git a/StreamMedia/flv_h265_patch/ffmpeg_flv/flvenc.c b/StreamMedia/flv_h265_patch/ffmpeg_flv/flvenc.c new file mode 100644 index 0000000..a9661a5 --- /dev/null +++ b/StreamMedia/flv_h265_patch/ffmpeg_flv/flvenc.c @@ -0,0 +1,1180 @@ +/* + * FLV muxer + * Copyright (c) 2003 The FFmpeg Project + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/intreadwrite.h" +#include "libavutil/dict.h" +#include "libavutil/intfloat.h" +#include "libavutil/avassert.h" +#include "libavutil/mathematics.h" +#include "avio_internal.h" +#include "avio.h" +#include "avc.h" +#include "avformat.h" +#include "flv.h" +#include "internal.h" +#include "metadata.h" +#include "libavutil/opt.h" +#include "libavcodec/put_bits.h" +#include "libavcodec/aacenctab.h" +#include "hevc.h" + + +static const AVCodecTag flv_video_codec_ids[] = { + { AV_CODEC_ID_FLV1, FLV_CODECID_H263 }, + { AV_CODEC_ID_H263, FLV_CODECID_REALH263 }, + { AV_CODEC_ID_MPEG4, FLV_CODECID_MPEG4 }, + { AV_CODEC_ID_FLASHSV, FLV_CODECID_SCREEN }, + { AV_CODEC_ID_FLASHSV2, FLV_CODECID_SCREEN2 }, + { AV_CODEC_ID_VP6F, FLV_CODECID_VP6 }, + { AV_CODEC_ID_VP6, FLV_CODECID_VP6 }, + { AV_CODEC_ID_VP6A, FLV_CODECID_VP6A }, + { AV_CODEC_ID_H264, FLV_CODECID_H264 }, + { AV_CODEC_ID_HEVC, FLV_CODECID_HEVC }, + { AV_CODEC_ID_NONE, 0 } +}; + +static const AVCodecTag flv_audio_codec_ids[] = { + { AV_CODEC_ID_MP3, FLV_CODECID_MP3 >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_U8, FLV_CODECID_PCM >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_S16BE, FLV_CODECID_PCM >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_S16LE, FLV_CODECID_PCM_LE >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_ADPCM_SWF, FLV_CODECID_ADPCM >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_AAC, FLV_CODECID_AAC >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_NELLYMOSER, FLV_CODECID_NELLYMOSER >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_MULAW, FLV_CODECID_PCM_MULAW >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_PCM_ALAW, FLV_CODECID_PCM_ALAW >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_SPEEX, FLV_CODECID_SPEEX >> FLV_AUDIO_CODECID_OFFSET }, + { AV_CODEC_ID_NONE, 0 } +}; + +typedef enum { + FLV_AAC_SEQ_HEADER_DETECT = (1 << 0), + FLV_NO_SEQUENCE_END = (1 << 1), + FLV_ADD_KEYFRAME_INDEX = (1 << 2), + FLV_NO_METADATA = (1 << 3), + FLV_NO_DURATION_FILESIZE = (1 << 4), +} FLVFlags; + +typedef struct FLVFileposition { + int64_t keyframe_position; + double keyframe_timestamp; + struct FLVFileposition *next; +} FLVFileposition; + +typedef struct FLVContext { + AVClass *av_class; + int reserved; + int64_t duration_offset; + int64_t filesize_offset; + int64_t duration; + int64_t delay; ///< first dts delay (needed for AVC & Speex) + + int64_t datastart_offset; + int64_t datasize_offset; + int64_t datasize; + int64_t videosize_offset; + int64_t videosize; + int64_t audiosize_offset; + int64_t audiosize; + + int64_t metadata_size_pos; + int64_t metadata_totalsize_pos; + int64_t metadata_totalsize; + int64_t keyframe_index_size; + + int64_t lasttimestamp_offset; + double lasttimestamp; + int64_t lastkeyframetimestamp_offset; + double lastkeyframetimestamp; + int64_t lastkeyframelocation_offset; + int64_t lastkeyframelocation; + + int acurframeindex; + int64_t keyframes_info_offset; + + int64_t filepositions_count; + FLVFileposition *filepositions; + FLVFileposition *head_filepositions; + + AVCodecParameters *audio_par; + AVCodecParameters *video_par; + double framerate; + AVCodecParameters *data_par; + + int flags; +} FLVContext; + +typedef struct FLVStreamContext { + int64_t last_ts; ///< last timestamp for each stream +} FLVStreamContext; + +static int get_audio_flags(AVFormatContext *s, AVCodecParameters *par) +{ + int flags = (par->bits_per_coded_sample == 16) ? FLV_SAMPLESSIZE_16BIT + : FLV_SAMPLESSIZE_8BIT; + + if (par->codec_id == AV_CODEC_ID_AAC) // specs force these parameters + return FLV_CODECID_AAC | FLV_SAMPLERATE_44100HZ | + FLV_SAMPLESSIZE_16BIT | FLV_STEREO; + else if (par->codec_id == AV_CODEC_ID_SPEEX) { + if (par->sample_rate != 16000) { + av_log(s, AV_LOG_ERROR, + "FLV only supports wideband (16kHz) Speex audio\n"); + return AVERROR(EINVAL); + } + if (par->channels != 1) { + av_log(s, AV_LOG_ERROR, "FLV only supports mono Speex audio\n"); + return AVERROR(EINVAL); + } + return FLV_CODECID_SPEEX | FLV_SAMPLERATE_11025HZ | FLV_SAMPLESSIZE_16BIT; + } else { + switch (par->sample_rate) { + case 48000: + // 48khz mp3 is stored with 44k1 samplerate identifer + if (par->codec_id == AV_CODEC_ID_MP3) { + flags |= FLV_SAMPLERATE_44100HZ; + break; + } else { + goto error; + } + case 44100: + flags |= FLV_SAMPLERATE_44100HZ; + break; + case 22050: + flags |= FLV_SAMPLERATE_22050HZ; + break; + case 11025: + flags |= FLV_SAMPLERATE_11025HZ; + break; + case 16000: // nellymoser only + case 8000: // nellymoser only + case 5512: // not MP3 + if (par->codec_id != AV_CODEC_ID_MP3) { + flags |= FLV_SAMPLERATE_SPECIAL; + break; + } + default: +error: + av_log(s, AV_LOG_ERROR, + "FLV does not support sample rate %d, " + "choose from (44100, 22050, 11025)\n", par->sample_rate); + return AVERROR(EINVAL); + } + } + + if (par->channels > 1) + flags |= FLV_STEREO; + + switch (par->codec_id) { + case AV_CODEC_ID_MP3: + flags |= FLV_CODECID_MP3 | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_U8: + flags |= FLV_CODECID_PCM | FLV_SAMPLESSIZE_8BIT; + break; + case AV_CODEC_ID_PCM_S16BE: + flags |= FLV_CODECID_PCM | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_S16LE: + flags |= FLV_CODECID_PCM_LE | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_ADPCM_SWF: + flags |= FLV_CODECID_ADPCM | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_NELLYMOSER: + if (par->sample_rate == 8000) + flags |= FLV_CODECID_NELLYMOSER_8KHZ_MONO | FLV_SAMPLESSIZE_16BIT; + else if (par->sample_rate == 16000) + flags |= FLV_CODECID_NELLYMOSER_16KHZ_MONO | FLV_SAMPLESSIZE_16BIT; + else + flags |= FLV_CODECID_NELLYMOSER | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_MULAW: + flags = FLV_CODECID_PCM_MULAW | FLV_SAMPLERATE_SPECIAL | FLV_SAMPLESSIZE_16BIT; + break; + case AV_CODEC_ID_PCM_ALAW: + flags = FLV_CODECID_PCM_ALAW | FLV_SAMPLERATE_SPECIAL | FLV_SAMPLESSIZE_16BIT; + break; + case 0: + flags |= par->codec_tag << 4; + break; + default: + av_log(s, AV_LOG_ERROR, "Audio codec '%s' not compatible with FLV\n", + avcodec_get_name(par->codec_id)); + return AVERROR(EINVAL); + } + + return flags; +} + +static void put_amf_string(AVIOContext *pb, const char *str) +{ + size_t len = strlen(str); + avio_wb16(pb, len); + avio_write(pb, str, len); +} + +// FLV timestamps are 32 bits signed, RTMP timestamps should be 32-bit unsigned +static void put_timestamp(AVIOContext *pb, int64_t ts) { + avio_wb24(pb, ts & 0xFFFFFF); + avio_w8(pb, (ts >> 24) & 0x7F); +} + +static void put_avc_eos_tag(AVIOContext *pb, unsigned ts) +{ + avio_w8(pb, FLV_TAG_TYPE_VIDEO); + avio_wb24(pb, 5); /* Tag Data Size */ + put_timestamp(pb, ts); + avio_wb24(pb, 0); /* StreamId = 0 */ + avio_w8(pb, 23); /* ub[4] FrameType = 1, ub[4] CodecId = 7 */ + avio_w8(pb, 2); /* AVC end of sequence */ + avio_wb24(pb, 0); /* Always 0 for AVC EOS. */ + avio_wb32(pb, 16); /* Size of FLV tag */ +} + +static void put_amf_double(AVIOContext *pb, double d) +{ + avio_w8(pb, AMF_DATA_TYPE_NUMBER); + avio_wb64(pb, av_double2int(d)); +} + +static void put_amf_byte(AVIOContext *pb, unsigned char abyte) +{ + avio_w8(pb, abyte); +} + +static void put_amf_dword_array(AVIOContext *pb, uint32_t dw) +{ + avio_w8(pb, AMF_DATA_TYPE_ARRAY); + avio_wb32(pb, dw); +} + +static void put_amf_bool(AVIOContext *pb, int b) +{ + avio_w8(pb, AMF_DATA_TYPE_BOOL); + avio_w8(pb, !!b); +} + +static void write_metadata(AVFormatContext *s, unsigned int ts) +{ + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + int write_duration_filesize = !(flv->flags & FLV_NO_DURATION_FILESIZE); + int metadata_count = 0; + int64_t metadata_count_pos; + AVDictionaryEntry *tag = NULL; + + /* write meta_tag */ + avio_w8(pb, FLV_TAG_TYPE_META); // tag type META + flv->metadata_size_pos = avio_tell(pb); + avio_wb24(pb, 0); // size of data part (sum of all parts below) + avio_wb24(pb, ts); // timestamp + avio_wb32(pb, 0); // reserved + + /* now data of data_size size */ + + /* first event name as a string */ + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, "onMetaData"); // 12 bytes + + /* mixed array (hash) with size and string/type/data tuples */ + avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY); + metadata_count_pos = avio_tell(pb); + metadata_count = 4 * !!flv->video_par + + 5 * !!flv->audio_par + + 1 * !!flv->data_par; + if (write_duration_filesize) { + metadata_count += 2; // +2 for duration and file size + } + avio_wb32(pb, metadata_count); + + if (write_duration_filesize) { + put_amf_string(pb, "duration"); + flv->duration_offset = avio_tell(pb); + // fill in the guessed duration, it'll be corrected later if incorrect + put_amf_double(pb, s->duration / AV_TIME_BASE); + } + + if (flv->video_par) { + put_amf_string(pb, "width"); + put_amf_double(pb, flv->video_par->width); + + put_amf_string(pb, "height"); + put_amf_double(pb, flv->video_par->height); + + put_amf_string(pb, "videodatarate"); + put_amf_double(pb, flv->video_par->bit_rate / 1024.0); + + if (flv->framerate != 0.0) { + put_amf_string(pb, "framerate"); + put_amf_double(pb, flv->framerate); + metadata_count++; + } + + put_amf_string(pb, "videocodecid"); + put_amf_double(pb, flv->video_par->codec_tag); + } + + if (flv->audio_par) { + put_amf_string(pb, "audiodatarate"); + put_amf_double(pb, flv->audio_par->bit_rate / 1024.0); + + put_amf_string(pb, "audiosamplerate"); + put_amf_double(pb, flv->audio_par->sample_rate); + + put_amf_string(pb, "audiosamplesize"); + put_amf_double(pb, flv->audio_par->codec_id == AV_CODEC_ID_PCM_U8 ? 8 : 16); + + put_amf_string(pb, "stereo"); + put_amf_bool(pb, flv->audio_par->channels == 2); + + put_amf_string(pb, "audiocodecid"); + put_amf_double(pb, flv->audio_par->codec_tag); + } + + if (flv->data_par) { + put_amf_string(pb, "datastream"); + put_amf_double(pb, 0.0); + } + + ff_standardize_creation_time(s); + while ((tag = av_dict_get(s->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) { + if( !strcmp(tag->key, "width") + ||!strcmp(tag->key, "height") + ||!strcmp(tag->key, "videodatarate") + ||!strcmp(tag->key, "framerate") + ||!strcmp(tag->key, "videocodecid") + ||!strcmp(tag->key, "audiodatarate") + ||!strcmp(tag->key, "audiosamplerate") + ||!strcmp(tag->key, "audiosamplesize") + ||!strcmp(tag->key, "stereo") + ||!strcmp(tag->key, "audiocodecid") + ||!strcmp(tag->key, "duration") + ||!strcmp(tag->key, "onMetaData") + ||!strcmp(tag->key, "datasize") + ||!strcmp(tag->key, "lasttimestamp") + ||!strcmp(tag->key, "totalframes") + ||!strcmp(tag->key, "hasAudio") + ||!strcmp(tag->key, "hasVideo") + ||!strcmp(tag->key, "hasCuePoints") + ||!strcmp(tag->key, "hasMetadata") + ||!strcmp(tag->key, "hasKeyframes") + ){ + av_log(s, AV_LOG_DEBUG, "Ignoring metadata for %s\n", tag->key); + continue; + } + put_amf_string(pb, tag->key); + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, tag->value); + metadata_count++; + } + + if (write_duration_filesize) { + put_amf_string(pb, "filesize"); + flv->filesize_offset = avio_tell(pb); + put_amf_double(pb, 0); // delayed write + } + + if (flv->flags & FLV_ADD_KEYFRAME_INDEX) { + flv->acurframeindex = 0; + flv->keyframe_index_size = 0; + + put_amf_string(pb, "hasVideo"); + put_amf_bool(pb, !!flv->video_par); + metadata_count++; + + put_amf_string(pb, "hasKeyframes"); + put_amf_bool(pb, 1); + metadata_count++; + + put_amf_string(pb, "hasAudio"); + put_amf_bool(pb, !!flv->audio_par); + metadata_count++; + + put_amf_string(pb, "hasMetadata"); + put_amf_bool(pb, 1); + metadata_count++; + + put_amf_string(pb, "canSeekToEnd"); + put_amf_bool(pb, 1); + metadata_count++; + + put_amf_string(pb, "datasize"); + flv->datasize_offset = avio_tell(pb); + flv->datasize = 0; + put_amf_double(pb, flv->datasize); + metadata_count++; + + put_amf_string(pb, "videosize"); + flv->videosize_offset = avio_tell(pb); + flv->videosize = 0; + put_amf_double(pb, flv->videosize); + metadata_count++; + + put_amf_string(pb, "audiosize"); + flv->audiosize_offset = avio_tell(pb); + flv->audiosize = 0; + put_amf_double(pb, flv->audiosize); + metadata_count++; + + put_amf_string(pb, "lasttimestamp"); + flv->lasttimestamp_offset = avio_tell(pb); + flv->lasttimestamp = 0; + put_amf_double(pb, 0); + metadata_count++; + + put_amf_string(pb, "lastkeyframetimestamp"); + flv->lastkeyframetimestamp_offset = avio_tell(pb); + flv->lastkeyframetimestamp = 0; + put_amf_double(pb, 0); + metadata_count++; + + put_amf_string(pb, "lastkeyframelocation"); + flv->lastkeyframelocation_offset = avio_tell(pb); + flv->lastkeyframelocation = 0; + put_amf_double(pb, 0); + metadata_count++; + + put_amf_string(pb, "keyframes"); + put_amf_byte(pb, AMF_DATA_TYPE_OBJECT); + metadata_count++; + + flv->keyframes_info_offset = avio_tell(pb); + } + + put_amf_string(pb, ""); + avio_w8(pb, AMF_END_OF_OBJECT); + + /* write total size of tag */ + flv->metadata_totalsize = avio_tell(pb) - flv->metadata_size_pos - 10; + + avio_seek(pb, metadata_count_pos, SEEK_SET); + avio_wb32(pb, metadata_count); + + avio_seek(pb, flv->metadata_size_pos, SEEK_SET); + avio_wb24(pb, flv->metadata_totalsize); + avio_skip(pb, flv->metadata_totalsize + 10 - 3); + flv->metadata_totalsize_pos = avio_tell(pb); + avio_wb32(pb, flv->metadata_totalsize + 11); +} + +static int unsupported_codec(AVFormatContext *s, + const char* type, int codec_id) +{ + const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id); + av_log(s, AV_LOG_ERROR, + "%s codec %s not compatible with flv\n", + type, + desc ? desc->name : "unknown"); + return AVERROR(ENOSYS); +} + +static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, int64_t ts) { + int64_t data_size; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + + if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 + || par->codec_id == AV_CODEC_ID_MPEG4 + || par->codec_id == AV_CODEC_ID_HEVC) { + int64_t pos; + avio_w8(pb, + par->codec_type == AVMEDIA_TYPE_VIDEO ? + FLV_TAG_TYPE_VIDEO : FLV_TAG_TYPE_AUDIO); + avio_wb24(pb, 0); // size patched later + put_timestamp(pb, ts); + avio_wb24(pb, 0); // streamid + pos = avio_tell(pb); + if (par->codec_id == AV_CODEC_ID_AAC) { + avio_w8(pb, get_audio_flags(s, par)); + avio_w8(pb, 0); // AAC sequence header + + if (!par->extradata_size && (flv->flags & FLV_AAC_SEQ_HEADER_DETECT)) { + PutBitContext pbc; + int samplerate_index; + int channels = flv->audio_par->channels + - (flv->audio_par->channels == 8 ? 1 : 0); + uint8_t data[2]; + + for (samplerate_index = 0; samplerate_index < 16; + samplerate_index++) + if (flv->audio_par->sample_rate + == mpeg4audio_sample_rates[samplerate_index]) + break; + + init_put_bits(&pbc, data, sizeof(data)); + put_bits(&pbc, 5, flv->audio_par->profile + 1); //profile + put_bits(&pbc, 4, samplerate_index); //sample rate index + put_bits(&pbc, 4, channels); + put_bits(&pbc, 1, 0); //frame length - 1024 samples + put_bits(&pbc, 1, 0); //does not depend on core coder + put_bits(&pbc, 1, 0); //is not extension + flush_put_bits(&pbc); + + avio_w8(pb, data[0]); + avio_w8(pb, data[1]); + + av_log(s, AV_LOG_WARNING, "AAC sequence header: %02x %02x.\n", + data[0], data[1]); + } + avio_write(pb, par->extradata, par->extradata_size); + } else { + avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags + avio_w8(pb, 0); // AVC sequence header + avio_wb24(pb, 0); // composition time + //ff_isom_write_avcc(pb, par->extradata, par->extradata_size); + if(par->codec_id == AV_CODEC_ID_HEVC) + { + ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0); + } + else + { + ff_isom_write_avcc(pb, par->extradata, par->extradata_size); + } + } + data_size = avio_tell(pb) - pos; + avio_seek(pb, -data_size - 10, SEEK_CUR); + avio_wb24(pb, data_size); + avio_skip(pb, data_size + 10 - 3); + avio_wb32(pb, data_size + 11); // previous tag size + } +} + +static int flv_append_keyframe_info(AVFormatContext *s, FLVContext *flv, double ts, int64_t pos) +{ + FLVFileposition *position = av_malloc(sizeof(FLVFileposition)); + + if (!position) { + av_log(s, AV_LOG_WARNING, "no mem for add keyframe index!\n"); + return AVERROR(ENOMEM); + } + + position->keyframe_timestamp = ts; + position->keyframe_position = pos; + + if (!flv->filepositions_count) { + flv->filepositions = position; + flv->head_filepositions = flv->filepositions; + position->next = NULL; + } else { + flv->filepositions->next = position; + position->next = NULL; + flv->filepositions = flv->filepositions->next; + } + + flv->filepositions_count++; + + return 0; +} + +static int shift_data(AVFormatContext *s) +{ + int ret = 0; + int n = 0; + int64_t metadata_size = 0; + FLVContext *flv = s->priv_data; + int64_t pos, pos_end = avio_tell(s->pb); + uint8_t *buf, *read_buf[2]; + int read_buf_id = 0; + int read_size[2]; + AVIOContext *read_pb; + + metadata_size = flv->filepositions_count * 9 * 2 + 10; /* filepositions and times value */ + metadata_size += 2 + 13; /* filepositions String */ + metadata_size += 2 + 5; /* times String */ + metadata_size += 3; /* Object end */ + + flv->keyframe_index_size = metadata_size; + + if (metadata_size < 0) + return metadata_size; + + buf = av_malloc_array(metadata_size, 2); + if (!buf) { + return AVERROR(ENOMEM); + } + read_buf[0] = buf; + read_buf[1] = buf + metadata_size; + + avio_seek(s->pb, flv->metadata_size_pos, SEEK_SET); + avio_wb24(s->pb, flv->metadata_totalsize + metadata_size); + + avio_seek(s->pb, flv->metadata_totalsize_pos, SEEK_SET); + avio_wb32(s->pb, flv->metadata_totalsize + 11 + metadata_size); + avio_seek(s->pb, pos_end, SEEK_SET); + + /* Shift the data: the AVIO context of the output can only be used for + * writing, so we re-open the same output, but for reading. It also avoids + * a read/seek/write/seek back and forth. */ + avio_flush(s->pb); + ret = s->io_open(s, &read_pb, s->url, AVIO_FLAG_READ, NULL); + if (ret < 0) { + av_log(s, AV_LOG_ERROR, "Unable to re-open %s output file for " + "the second pass (add_keyframe_index)\n", s->url); + goto end; + } + + /* mark the end of the shift to up to the last data we wrote, and get ready + * for writing */ + pos_end = avio_tell(s->pb); + avio_seek(s->pb, flv->keyframes_info_offset + metadata_size, SEEK_SET); + + /* start reading at where the keyframe index information will be placed */ + avio_seek(read_pb, flv->keyframes_info_offset, SEEK_SET); + pos = avio_tell(read_pb); + +#define READ_BLOCK do { \ + read_size[read_buf_id] = avio_read(read_pb, read_buf[read_buf_id], metadata_size); \ + read_buf_id ^= 1; \ +} while (0) + + /* shift data by chunk of at most keyframe *filepositions* and *times* size */ + READ_BLOCK; + do { + READ_BLOCK; + n = read_size[read_buf_id]; + if (n < 0) + break; + avio_write(s->pb, read_buf[read_buf_id], n); + pos += n; + } while (pos <= pos_end); + + ff_format_io_close(s, &read_pb); + +end: + av_free(buf); + return ret; +} + +static int flv_init(struct AVFormatContext *s) +{ + int i; + FLVContext *flv = s->priv_data; + + for (i = 0; i < s->nb_streams; i++) { + AVCodecParameters *par = s->streams[i]->codecpar; + FLVStreamContext *sc; + switch (par->codec_type) { + case AVMEDIA_TYPE_VIDEO: + if (s->streams[i]->avg_frame_rate.den && + s->streams[i]->avg_frame_rate.num) { + flv->framerate = av_q2d(s->streams[i]->avg_frame_rate); + } + if (flv->video_par) { + av_log(s, AV_LOG_ERROR, + "at most one video stream is supported in flv\n"); + return AVERROR(EINVAL); + } + flv->video_par = par; + if (!ff_codec_get_tag(flv_video_codec_ids, par->codec_id)) + return unsupported_codec(s, "Video", par->codec_id); + + if (par->codec_id == AV_CODEC_ID_MPEG4 || + par->codec_id == AV_CODEC_ID_H263) { + int error = s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL; + av_log(s, error ? AV_LOG_ERROR : AV_LOG_WARNING, + "Codec %s is not supported in the official FLV specification,\n", avcodec_get_name(par->codec_id)); + + if (error) { + av_log(s, AV_LOG_ERROR, + "use vstrict=-1 / -strict -1 to use it anyway.\n"); + return AVERROR(EINVAL); + } + } else if (par->codec_id == AV_CODEC_ID_VP6) { + av_log(s, AV_LOG_WARNING, + "Muxing VP6 in flv will produce flipped video on playback.\n"); + } + break; + case AVMEDIA_TYPE_AUDIO: + if (flv->audio_par) { + av_log(s, AV_LOG_ERROR, + "at most one audio stream is supported in flv\n"); + return AVERROR(EINVAL); + } + flv->audio_par = par; + if (get_audio_flags(s, par) < 0) + return unsupported_codec(s, "Audio", par->codec_id); + if (par->codec_id == AV_CODEC_ID_PCM_S16BE) + av_log(s, AV_LOG_WARNING, + "16-bit big-endian audio in flv is valid but most likely unplayable (hardware dependent); use s16le\n"); + break; + case AVMEDIA_TYPE_DATA: + if (par->codec_id != AV_CODEC_ID_TEXT && par->codec_id != AV_CODEC_ID_NONE) + return unsupported_codec(s, "Data", par->codec_id); + flv->data_par = par; + break; + case AVMEDIA_TYPE_SUBTITLE: + if (par->codec_id != AV_CODEC_ID_TEXT) { + av_log(s, AV_LOG_ERROR, "Subtitle codec '%s' for stream %d is not compatible with FLV\n", + avcodec_get_name(par->codec_id), i); + return AVERROR_INVALIDDATA; + } + flv->data_par = par; + break; + default: + av_log(s, AV_LOG_ERROR, "Codec type '%s' for stream %d is not compatible with FLV\n", + av_get_media_type_string(par->codec_type), i); + return AVERROR(EINVAL); + } + avpriv_set_pts_info(s->streams[i], 32, 1, 1000); /* 32 bit pts in ms */ + + sc = av_mallocz(sizeof(FLVStreamContext)); + if (!sc) + return AVERROR(ENOMEM); + s->streams[i]->priv_data = sc; + sc->last_ts = -1; + } + + flv->delay = AV_NOPTS_VALUE; + + return 0; +} + +static int flv_write_header(AVFormatContext *s) +{ + int i; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + + avio_write(pb, "FLV", 3); + avio_w8(pb, 1); + avio_w8(pb, FLV_HEADER_FLAG_HASAUDIO * !!flv->audio_par + + FLV_HEADER_FLAG_HASVIDEO * !!flv->video_par); + avio_wb32(pb, 9); + avio_wb32(pb, 0); + + for (i = 0; i < s->nb_streams; i++) + if (s->streams[i]->codecpar->codec_tag == 5) { + avio_w8(pb, 8); // message type + avio_wb24(pb, 0); // include flags + avio_wb24(pb, 0); // time stamp + avio_wb32(pb, 0); // reserved + avio_wb32(pb, 11); // size + flv->reserved = 5; + } + + if (flv->flags & FLV_NO_METADATA) { + pb->seekable = 0; + } else { + write_metadata(s, 0); + } + + for (i = 0; i < s->nb_streams; i++) { + flv_write_codec_header(s, s->streams[i]->codecpar, 0); + } + + flv->datastart_offset = avio_tell(pb); + return 0; +} + +static int flv_write_trailer(AVFormatContext *s) +{ + int64_t file_size; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + int build_keyframes_idx = flv->flags & FLV_ADD_KEYFRAME_INDEX; + int i, res; + int64_t cur_pos = avio_tell(s->pb); + + if (build_keyframes_idx) { + FLVFileposition *newflv_posinfo, *p; + + avio_seek(pb, flv->videosize_offset, SEEK_SET); + put_amf_double(pb, flv->videosize); + + avio_seek(pb, flv->audiosize_offset, SEEK_SET); + put_amf_double(pb, flv->audiosize); + + avio_seek(pb, flv->lasttimestamp_offset, SEEK_SET); + put_amf_double(pb, flv->lasttimestamp); + + avio_seek(pb, flv->lastkeyframetimestamp_offset, SEEK_SET); + put_amf_double(pb, flv->lastkeyframetimestamp); + + avio_seek(pb, flv->lastkeyframelocation_offset, SEEK_SET); + put_amf_double(pb, flv->lastkeyframelocation + flv->keyframe_index_size); + avio_seek(pb, cur_pos, SEEK_SET); + + res = shift_data(s); + if (res < 0) { + goto end; + } + avio_seek(pb, flv->keyframes_info_offset, SEEK_SET); + put_amf_string(pb, "filepositions"); + put_amf_dword_array(pb, flv->filepositions_count); + for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) { + put_amf_double(pb, newflv_posinfo->keyframe_position + flv->keyframe_index_size); + } + + put_amf_string(pb, "times"); + put_amf_dword_array(pb, flv->filepositions_count); + for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) { + put_amf_double(pb, newflv_posinfo->keyframe_timestamp); + } + + newflv_posinfo = flv->head_filepositions; + while (newflv_posinfo) { + p = newflv_posinfo->next; + if (p) { + newflv_posinfo->next = p->next; + av_free(p); + p = NULL; + } else { + av_free(newflv_posinfo); + newflv_posinfo = NULL; + } + } + + put_amf_string(pb, ""); + avio_w8(pb, AMF_END_OF_OBJECT); + + avio_seek(pb, cur_pos + flv->keyframe_index_size, SEEK_SET); + } + +end: + if (flv->flags & FLV_NO_SEQUENCE_END) { + av_log(s, AV_LOG_DEBUG, "FLV no sequence end mode open\n"); + } else { + /* Add EOS tag */ + for (i = 0; i < s->nb_streams; i++) { + AVCodecParameters *par = s->streams[i]->codecpar; + FLVStreamContext *sc = s->streams[i]->priv_data; + if (par->codec_type == AVMEDIA_TYPE_VIDEO && + (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC)) + put_avc_eos_tag(pb, sc->last_ts); + } + } + + file_size = avio_tell(pb); + + if (build_keyframes_idx) { + flv->datasize = file_size - flv->datastart_offset; + avio_seek(pb, flv->datasize_offset, SEEK_SET); + put_amf_double(pb, flv->datasize); + } + if (!(flv->flags & FLV_NO_METADATA)) { + if (!(flv->flags & FLV_NO_DURATION_FILESIZE)) { + /* update information */ + if (avio_seek(pb, flv->duration_offset, SEEK_SET) < 0) { + av_log(s, AV_LOG_WARNING, "Failed to update header with correct duration.\n"); + } else { + put_amf_double(pb, flv->duration / (double)1000); + } + if (avio_seek(pb, flv->filesize_offset, SEEK_SET) < 0) { + av_log(s, AV_LOG_WARNING, "Failed to update header with correct filesize.\n"); + } else { + put_amf_double(pb, file_size); + } + } + } + + return 0; +} + +static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) +{ + AVIOContext *pb = s->pb; + AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; + FLVContext *flv = s->priv_data; + FLVStreamContext *sc = s->streams[pkt->stream_index]->priv_data; + unsigned ts; + int size = pkt->size; + uint8_t *data = NULL; + int flags = -1, flags_size, ret; + int64_t cur_offset = avio_tell(pb); + + if (par->codec_type == AVMEDIA_TYPE_AUDIO && !pkt->size) { + av_log(s, AV_LOG_WARNING, "Empty audio Packet\n"); + return AVERROR(EINVAL); + } + + if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A || + par->codec_id == AV_CODEC_ID_VP6 || par->codec_id == AV_CODEC_ID_AAC) + flags_size = 2; + else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) + { + flags_size = 5; + } + else + { + flags_size = 1; + } + + /* + if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + int side_size = 0; + uint8_t *side = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size); + if (side && side_size > 0 && (side_size != par->extradata_size || memcmp(side, par->extradata, side_size))) { + av_free(par->extradata); + par->extradata = av_mallocz(side_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!par->extradata) { + par->extradata_size = 0; + return AVERROR(ENOMEM); + } + memcpy(par->extradata, side, side_size); + par->extradata_size = side_size; + flv_write_codec_header(s, par, pkt->dts); + } + } + */ + if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + int side_size = 0; + uint8_t *side = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size); + if (side && side_size > 0 && (side_size != par->extradata_size || memcmp(side, par->extradata, side_size))) { + av_free(par->extradata); + par->extradata = av_mallocz(side_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!par->extradata) { + par->extradata_size = 0; + return AVERROR(ENOMEM); + } + memcpy(par->extradata, side, side_size); + par->extradata_size = side_size; + flv_write_codec_header(s, par, pkt->dts); + } else { + flv_write_codec_header(s, par, pkt->dts); + } + } + + if (flv->delay == AV_NOPTS_VALUE) + flv->delay = -pkt->dts; + + if (pkt->dts < -flv->delay) { + av_log(s, AV_LOG_WARNING, + "Packets are not in the proper order with respect to DTS\n"); + return AVERROR(EINVAL); + } + if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) { + if (pkt->pts == AV_NOPTS_VALUE) { + av_log(s, AV_LOG_ERROR, "Packet is missing PTS\n"); + return AVERROR(EINVAL); + } + } + + ts = pkt->dts; + + if (s->event_flags & AVSTREAM_EVENT_FLAG_METADATA_UPDATED) { + write_metadata(s, ts); + s->event_flags &= ~AVSTREAM_EVENT_FLAG_METADATA_UPDATED; + } + + avio_write_marker(pb, av_rescale(ts, AV_TIME_BASE, 1000), + pkt->flags & AV_PKT_FLAG_KEY && (flv->video_par ? par->codec_type == AVMEDIA_TYPE_VIDEO : 1) ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); + + switch (par->codec_type) { + case AVMEDIA_TYPE_VIDEO: + avio_w8(pb, FLV_TAG_TYPE_VIDEO); + + flags = ff_codec_get_tag(flv_video_codec_ids, par->codec_id); + + flags |= pkt->flags & AV_PKT_FLAG_KEY ? FLV_FRAME_KEY : FLV_FRAME_INTER; + break; + case AVMEDIA_TYPE_AUDIO: + flags = get_audio_flags(s, par); + + av_assert0(size); + + avio_w8(pb, FLV_TAG_TYPE_AUDIO); + break; + case AVMEDIA_TYPE_SUBTITLE: + case AVMEDIA_TYPE_DATA: + avio_w8(pb, FLV_TAG_TYPE_META); + break; + default: + return AVERROR(EINVAL); + } + + if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) { + /* check if extradata looks like mp4 formatted */ + if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) + if ((ret = ff_avc_parse_nal_units_buf(pkt->data, &data, &size)) < 0) + return ret; + } else if (par->codec_id == AV_CODEC_ID_HEVC) + { + if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) + if ((ret = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) + return ret; + } + else if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && + (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) { + if (!s->streams[pkt->stream_index]->nb_frames) { + av_log(s, AV_LOG_ERROR, "Malformed AAC bitstream detected: " + "use the audio bitstream filter 'aac_adtstoasc' to fix it " + "('-bsf:a aac_adtstoasc' option with ffmpeg)\n"); + return AVERROR_INVALIDDATA; + } + av_log(s, AV_LOG_WARNING, "aac bitstream error\n"); + } + + /* check Speex packet duration */ + if (par->codec_id == AV_CODEC_ID_SPEEX && ts - sc->last_ts > 160) + av_log(s, AV_LOG_WARNING, "Warning: Speex stream has more than " + "8 frames per packet. Adobe Flash " + "Player cannot handle this!\n"); + + if (sc->last_ts < ts) + sc->last_ts = ts; + + if (size + flags_size >= 1<<24) { + av_log(s, AV_LOG_ERROR, "Too large packet with size %u >= %u\n", + size + flags_size, 1<<24); + return AVERROR(EINVAL); + } + + avio_wb24(pb, size + flags_size); + put_timestamp(pb, ts); + avio_wb24(pb, flv->reserved); + + if (par->codec_type == AVMEDIA_TYPE_DATA || + par->codec_type == AVMEDIA_TYPE_SUBTITLE ) { + int data_size; + int64_t metadata_size_pos = avio_tell(pb); + if (par->codec_id == AV_CODEC_ID_TEXT) { + // legacy FFmpeg magic? + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, "onTextData"); + avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY); + avio_wb32(pb, 2); + put_amf_string(pb, "type"); + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, "Text"); + put_amf_string(pb, "text"); + avio_w8(pb, AMF_DATA_TYPE_STRING); + put_amf_string(pb, pkt->data); + put_amf_string(pb, ""); + avio_w8(pb, AMF_END_OF_OBJECT); + } else { + // just pass the metadata through + avio_write(pb, data ? data : pkt->data, size); + } + /* write total size of tag */ + data_size = avio_tell(pb) - metadata_size_pos; + avio_seek(pb, metadata_size_pos - 10, SEEK_SET); + avio_wb24(pb, data_size); + avio_seek(pb, data_size + 10 - 3, SEEK_CUR); + avio_wb32(pb, data_size + 11); + } else { + av_assert1(flags>=0); + avio_w8(pb,flags); + if (par->codec_id == AV_CODEC_ID_VP6) + avio_w8(pb,0); + if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A) { + if (par->extradata_size) + avio_w8(pb, par->extradata[0]); + else + avio_w8(pb, ((FFALIGN(par->width, 16) - par->width) << 4) | + (FFALIGN(par->height, 16) - par->height)); + } else if (par->codec_id == AV_CODEC_ID_AAC) { + avio_w8(pb, 1); // AAC raw + } + else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { + avio_w8(pb, 1); // AVC NALU + avio_wb24(pb, pkt->pts - pkt->dts); + } + + avio_write(pb, data ? data : pkt->data, size); + + avio_wb32(pb, size + flags_size + 11); // previous tag size + flv->duration = FFMAX(flv->duration, + pkt->pts + flv->delay + pkt->duration); + } + + if (flv->flags & FLV_ADD_KEYFRAME_INDEX) { + switch (par->codec_type) { + case AVMEDIA_TYPE_VIDEO: + flv->videosize += (avio_tell(pb) - cur_offset); + flv->lasttimestamp = flv->acurframeindex / flv->framerate; + if (pkt->flags & AV_PKT_FLAG_KEY) { + double ts = flv->acurframeindex / flv->framerate; + int64_t pos = cur_offset; + + flv->lastkeyframetimestamp = flv->acurframeindex / flv->framerate; + flv->lastkeyframelocation = pos; + flv_append_keyframe_info(s, flv, ts, pos); + } + flv->acurframeindex++; + break; + + case AVMEDIA_TYPE_AUDIO: + flv->audiosize += (avio_tell(pb) - cur_offset); + break; + + default: + av_log(s, AV_LOG_WARNING, "par->codec_type is type = [%d]\n", par->codec_type); + break; + } + } + + av_free(data); + + return pb->error; +} + +static int flv_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt) +{ + int ret = 1; + AVStream *st = s->streams[pkt->stream_index]; + + if (st->codecpar->codec_id == AV_CODEC_ID_AAC) { + if (pkt->size > 2 && (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) + ret = ff_stream_add_bitstream_filter(st, "aac_adtstoasc", NULL); + } + return ret; +} + +static const AVOption options[] = { + { "flvflags", "FLV muxer flags", offsetof(FLVContext, flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "aac_seq_header_detect", "Put AAC sequence header based on stream data", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_AAC_SEQ_HEADER_DETECT}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "no_sequence_end", "disable sequence end for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_SEQUENCE_END}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "no_metadata", "disable metadata for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_METADATA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "no_duration_filesize", "disable duration and filesize zero value metadata for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_DURATION_FILESIZE}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { "add_keyframe_index", "Add keyframe index metadata", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_ADD_KEYFRAME_INDEX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, + { NULL }, +}; + +static const AVClass flv_muxer_class = { + .class_name = "flv muxer", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVOutputFormat ff_flv_muxer = { + .name = "flv", + .long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), + .mime_type = "video/x-flv", + .extensions = "flv", + .priv_data_size = sizeof(FLVContext), + .audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_ADPCM_SWF, + .video_codec = AV_CODEC_ID_FLV1, + .init = flv_init, + .write_header = flv_write_header, + .write_packet = flv_write_packet, + .write_trailer = flv_write_trailer, + .check_bitstream= flv_check_bitstream, + .codec_tag = (const AVCodecTag* const []) { + flv_video_codec_ids, flv_audio_codec_ids, 0 + }, + .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | + AVFMT_TS_NONSTRICT, + .priv_class = &flv_muxer_class, +}; diff --git a/StreamMedia/flv_h265_patch/flv_h265_patch.rar b/StreamMedia/flv_h265_patch/flv_h265_patch.rar new file mode 100644 index 0000000000000000000000000000000000000000..4e0810617d3d8ad0d1850b6ef74c83094c3c4e48 GIT binary patch literal 35413 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 literal 0 HcmV?d00001 diff --git a/StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_codec_module.c b/StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_codec_module.c new file mode 100644 index 0000000..b9d74f3 --- /dev/null +++ b/StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_codec_module.c @@ -0,0 +1,1382 @@ + +/* + * Copyright (C) Roman Arutyunyan + */ + + +#include +#include +#include "ngx_rtmp_codec_module.h" +#include "ngx_rtmp_live_module.h" +#include "ngx_rtmp_cmd_module.h" +#include "ngx_rtmp_bitop.h" +#include "ngx_rbuf.h" + + +#define NGX_RTMP_CODEC_META_OFF 0 +#define NGX_RTMP_CODEC_META_ON 1 +#define NGX_RTMP_CODEC_META_COPY 2 + + +static void * ngx_rtmp_codec_create_app_conf(ngx_conf_t *cf); +static char * ngx_rtmp_codec_merge_app_conf(ngx_conf_t *cf, + void *parent, void *child); +static ngx_int_t ngx_rtmp_codec_postconfiguration(ngx_conf_t *cf); +static ngx_int_t ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s); +static ngx_int_t ngx_rtmp_codec_copy_meta(ngx_rtmp_session_t *s, + ngx_rtmp_header_t *h, ngx_chain_t *in); +static ngx_int_t ngx_rtmp_codec_prepare_meta(ngx_rtmp_session_t *s, + uint32_t timestamp); +static void ngx_rtmp_codec_parse_aac_header(ngx_rtmp_session_t *s, + ngx_chain_t *in); +static void ngx_rtmp_codec_parse_avc_header(ngx_rtmp_session_t *s, + ngx_chain_t *in); +static void ngx_rtmp_codec_parse_hevc_header(ngx_rtmp_session_t *s, + ngx_chain_t *in); +#if (NGX_DEBUG) +static void ngx_rtmp_codec_dump_header(ngx_rtmp_session_t *s, const char *type, + ngx_chain_t *in); +#endif + + +typedef struct { + ngx_uint_t meta; +} ngx_rtmp_codec_app_conf_t; + + +static ngx_conf_enum_t ngx_rtmp_codec_meta_slots[] = { + { ngx_string("off"), NGX_RTMP_CODEC_META_OFF }, + { ngx_string("on"), NGX_RTMP_CODEC_META_ON }, + { ngx_string("copy"), NGX_RTMP_CODEC_META_COPY }, + { ngx_null_string, 0 } +}; + + +static ngx_command_t ngx_rtmp_codec_commands[] = { + + { ngx_string("meta"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_enum_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_codec_app_conf_t, meta), + &ngx_rtmp_codec_meta_slots }, + + ngx_null_command +}; + + +static ngx_rtmp_module_t ngx_rtmp_codec_module_ctx = { + NULL, /* preconfiguration */ + ngx_rtmp_codec_postconfiguration, /* postconfiguration */ + NULL, /* create main configuration */ + NULL, /* init main configuration */ + NULL, /* create server configuration */ + NULL, /* merge server configuration */ + ngx_rtmp_codec_create_app_conf, /* create app configuration */ + ngx_rtmp_codec_merge_app_conf /* merge app configuration */ +}; + + +ngx_module_t ngx_rtmp_codec_module = { + NGX_MODULE_V1, + &ngx_rtmp_codec_module_ctx, /* module context */ + ngx_rtmp_codec_commands, /* module directives */ + NGX_RTMP_MODULE, /* module type */ + NULL, /* init master */ + NULL, /* init module */ + NULL, /* init process */ + NULL, /* init thread */ + NULL, /* exit thread */ + NULL, /* exit process */ + NULL, /* exit master */ + NGX_MODULE_V1_PADDING +}; + + +static const char * +audio_codecs[] = { + "", + "ADPCM", + "MP3", + "LinearLE", + "Nellymoser16", + "Nellymoser8", + "Nellymoser", + "G711A", + "G711U", + "", + "AAC", + "Speex", + "", + "", + "MP3-8K", + "DeviceSpecific", + "Uncompressed" +}; + + +static const char * +video_codecs[] = { + "", + "Jpeg", + "Sorenson-H263", + "ScreenVideo", + "On2-VP6", + "On2-VP6-Alpha", + "ScreenVideo2", + "H264", + "", + "", + "", + "", + "H265" +}; + + +u_char * +ngx_rtmp_get_audio_codec_name(ngx_uint_t id) +{ + return (u_char *)(id < sizeof(audio_codecs) / sizeof(audio_codecs[0]) + ? audio_codecs[id] + : ""); +} + + +u_char * +ngx_rtmp_get_video_codec_name(ngx_uint_t id) +{ + return (u_char *)(id < sizeof(video_codecs) / sizeof(video_codecs[0]) + ? video_codecs[id] + : ""); +} + + +static ngx_uint_t +ngx_rtmp_codec_get_next_version() +{ + ngx_uint_t v; + static ngx_uint_t version; + + do { + v = ++version; + } while (v == 0); + + return v; +} + + +static ngx_int_t +ngx_rtmp_codec_disconnect(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, + ngx_chain_t *in) +{ + ngx_rtmp_codec_ctx_t *ctx; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + if (ctx == NULL) { + return NGX_OK; + } + + if (ctx->avc_header) { + ngx_rtmp_shared_free_frame(ctx->avc_header); + ctx->avc_header = NULL; + } + + if (ctx->aac_header) { + ngx_rtmp_shared_free_frame(ctx->aac_header); + ctx->aac_header = NULL; + } + + if (ctx->meta) { + ngx_rtmp_shared_free_frame(ctx->meta); + ctx->meta = NULL; + } + + return NGX_OK; +} + + +static ngx_int_t +ngx_rtmp_codec_av(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, + ngx_chain_t *in) +{ + ngx_rtmp_core_srv_conf_t *cscf; + ngx_rtmp_core_app_conf_t *cacf; + ngx_rtmp_codec_ctx_t *ctx; + ngx_rtmp_frame_t **header; + uint8_t fmt; + u_char frametype; + static ngx_uint_t sample_rates[] = + { 5512, 11025, 22050, 44100 }; + + if (h->type != NGX_RTMP_MSG_AUDIO && h->type != NGX_RTMP_MSG_VIDEO) { + return NGX_OK; + } + + if (h->type == NGX_RTMP_MSG_VIDEO) { + frametype = in->buf->pos[0] & 0xf0; + if (frametype != 0x10 && frametype != 0x20) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "codec: receive unkwnon frametype %02xD", frametype); + return NGX_OK; + } + } + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + if (ctx == NULL) { + ctx = ngx_pcalloc(s->pool, sizeof(ngx_rtmp_codec_ctx_t)); + ngx_rtmp_set_ctx(s, ctx, ngx_rtmp_codec_module); + } + + /* save codec */ + if (in->buf->last - in->buf->pos < 1) { + return NGX_OK; + } + + fmt = in->buf->pos[0]; + if (h->type == NGX_RTMP_MSG_AUDIO) { + ctx->audio_codec_id = (fmt & 0xf0) >> 4; + ctx->audio_channels = (fmt & 0x01) + 1; + ctx->sample_size = (fmt & 0x02) ? 2 : 1; + + if (ctx->sample_rate == 0) { + ctx->sample_rate = sample_rates[(fmt & 0x0c) >> 2]; + } + s->acodec = ctx->audio_codec_id; + } else { + ctx->video_codec_id = (fmt & 0x0f); + s->vcodec = ctx->video_codec_id; + } + + /* save AVC/AAC header */ + if (in->buf->last - in->buf->pos < 3) { + return NGX_OK; + } + + /* no conf */ + if (!ngx_rtmp_is_codec_header(in)) { + return NGX_OK; + } + + cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module); + cacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_core_module); + header = NULL; + + if (h->type == NGX_RTMP_MSG_AUDIO) { + if (ctx->audio_codec_id == NGX_RTMP_AUDIO_AAC) { + header = &ctx->aac_header; + ngx_rtmp_codec_parse_aac_header(s, in); + } + } else { + if (ctx->video_codec_id == NGX_RTMP_VIDEO_H264) { + header = &ctx->avc_header; + ngx_rtmp_codec_parse_avc_header(s, in); + } //else if (ctx->video_codec_id == cacf->hevc_codec) { + if (ctx->video_codec_id == NGX_RTMP_VIDEO_H265) { + header = &ctx->avc_header; + ngx_rtmp_codec_parse_hevc_header(s, in); + } + } + + if (header == NULL) { + return NGX_OK; + } + + if (*header) { + ngx_rtmp_shared_free_frame(*header); + } + + *header = ngx_rtmp_shared_alloc_frame(cscf->chunk_size, in, 0); + + return NGX_OK; +} + + +static void +ngx_rtmp_codec_parse_aac_header(ngx_rtmp_session_t *s, ngx_chain_t *in) +{ + ngx_uint_t idx; + ngx_rtmp_codec_ctx_t *ctx; + ngx_rtmp_bit_reader_t br; + + static ngx_uint_t aac_sample_rates[] = + { 96000, 88200, 64000, 48000, + 44100, 32000, 24000, 22050, + 16000, 12000, 11025, 8000, + 7350, 0, 0, 0 }; + +#if (NGX_DEBUG) + ngx_rtmp_codec_dump_header(s, "aac", in); +#endif + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + + ngx_rtmp_bit_init_reader(&br, in->buf->pos, in->buf->last); + + ngx_rtmp_bit_read(&br, 16); + + ctx->aac_profile = (ngx_uint_t) ngx_rtmp_bit_read(&br, 5); + if (ctx->aac_profile == 31) { + ctx->aac_profile = (ngx_uint_t) ngx_rtmp_bit_read(&br, 6) + 32; + } + + idx = (ngx_uint_t) ngx_rtmp_bit_read(&br, 4); + if (idx == 15) { + ctx->sample_rate = (ngx_uint_t) ngx_rtmp_bit_read(&br, 24); + } else { + ctx->sample_rate = aac_sample_rates[idx]; + } + + ctx->aac_chan_conf = (ngx_uint_t) ngx_rtmp_bit_read(&br, 4); + + if (ctx->aac_profile == 5 || ctx->aac_profile == 29) { + + if (ctx->aac_profile == 29) { + ctx->aac_ps = 1; + } + + ctx->aac_sbr = 1; + + idx = (ngx_uint_t) ngx_rtmp_bit_read(&br, 4); + if (idx == 15) { + ctx->sample_rate = (ngx_uint_t) ngx_rtmp_bit_read(&br, 24); + } else { + ctx->sample_rate = aac_sample_rates[idx]; + } + + ctx->aac_profile = (ngx_uint_t) ngx_rtmp_bit_read(&br, 5); + if (ctx->aac_profile == 31) { + ctx->aac_profile = (ngx_uint_t) ngx_rtmp_bit_read(&br, 6) + 32; + } + } + + /* MPEG-4 Audio Specific Config + + 5 bits: object type + if (object type == 31) + 6 bits + 32: object type + 4 bits: frequency index + if (frequency index == 15) + 24 bits: frequency + 4 bits: channel configuration + + if (object_type == 5) + 4 bits: frequency index + if (frequency index == 15) + 24 bits: frequency + 5 bits: object type + if (object type == 31) + 6 bits + 32: object type + + var bits: AOT Specific Config + */ + + ngx_log_debug3(NGX_LOG_DEBUG_RTMP, s->log, 0, + "codec: aac header profile=%ui, " + "sample_rate=%ui, chan_conf=%ui", + ctx->aac_profile, ctx->sample_rate, ctx->aac_chan_conf); +} + + +/* + * ITU-T H.265 7.3.1 General NAL unit syntax + */ +static ngx_int_t +ngx_rtmp_codec_parse_hevc_nal_to_rbsp(ngx_rtmp_session_t *s, u_char *p, + ngx_rtmp_bit_reader_t *br, ngx_uint_t nal_unit_type, + ngx_uint_t nal_unit_len) +{ + ngx_uint_t i, count, rbsp_bytes; + + /* + * nal_unit + * nal_unit_header() + * NumBytesInRbsp = 0 + * for (i = 2; i < NumBytesInNalUnit; i++) + * if (i + 2 < NumBytesInNalUnit && next_bits(24) == 0x000003) { + * rbsp_byte[NumBytesInRbsp++] + * rbsp_byte[NumBytesInRbsp++] + * i += 2 + * emulation_prevention_three_byte // equal to 0x03 + * } else + * rbsp_byte[NumBytesInRbsp++] + * + * nal_unit_header + * forbidden_zero_bit 1 bit + * nal_unit_type 6 bits + * nuh_layer_id 6 bits + * nuh_temporal_id_plus1 3 bits + * + * ITU-T H.265 7.4.2.1 + * emulation_prevention_three_byte is a byte equal to 0x03. + * When an emulation_prevention_three_byte is present in the NAL unit, + * it shall be discarded by the decoding process + * Within the NAL unit, the following three-byte sequences shall not + * occur at any byte-aligned position: + * 0x000000 + * 0x000001 + * 0x000002 + * Within the NAL unit, any four-byte sequence that starts with + * 0x000003 other than the following sequences shall not occur at + * any byte-aligned position: + * 0x00000300 + * 0x00000301 + * 0x00000302 + * 0x00000303 + */ + + ngx_rtmp_bit_read(br, 1); + if (ngx_rtmp_bit_read(br, 6) != nal_unit_type) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "nal_unit_type not expect %ui", nal_unit_type); + return NGX_ERROR; + } + ngx_rtmp_bit_read(br, 6); + ngx_rtmp_bit_read(br, 3); + + count = 0; + rbsp_bytes = 0; + for (i = 0; i < nal_unit_len; ++i) { + if (count == 2) { /* already 0x0000 */ + if (br->pos[i] < 0x03) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "three bytes sequence error"); + return NGX_ERROR; + } + + if (br->pos[i] == 0x03 && br->pos[i + 1] > 0x03) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "four bytes sequence error"); + return NGX_ERROR; + } + + if (br->pos[i] == 0x03) { + count = 0; + continue; + } + } + + *p++ = br->pos[i]; + ++rbsp_bytes; + if (br->pos[i] == 0x00) { + ++count; + } else { + count = 0; + } + } + + return rbsp_bytes; +} + +/* + * ITU-T H.265 7.3.3 Profile, tier and level syntax + */ +static void +ngx_rtmp_codec_parse_hevc_ptl(ngx_rtmp_session_t *s, ngx_rtmp_bit_reader_t *br, + ngx_flag_t profilePresentFlag, ngx_uint_t maxNumSubLayersMinus1) +{ + ngx_uint_t i, slppf[8], sllpf[8]; + + if (profilePresentFlag) { + /* + * profile_tier_level + * general_profile_space 2 bits + * general_tier_flag 1 bit + * general_profile_idc 5 bits + * for (j = 0; j < 32; j++) + * general_profile_compatibility_flag[j] 1 bit + * general_progressive_source_flag 1 bit + * general_interlaced_source_flag 1 bit + * general_non_packed_constraint_flag 1 bit + * general_frame_only_constraint_flag 1 bit + * + * general_max_12bit_constraint_flag 1 bit + * general_max_10bit_constraint_flag 1 bit + * general_max_8bit_constraint_flag 1 bit + * general_max_422chroma_constraint_flag 1 bit + * general_max_420chroma_constraint_flag 1 bit + * general_max_monochrome_constraint_flag 1 bit + * general_intra_constraint_flag 1 bit + * general_one_picture_only_constraint_flag 1 bit + * general_lower_bit_rate_constraint_flag 1 bit + * general_reserved_zero_34bits 34 bits + * + * general_inbld_flag 1 bit + */ + ngx_rtmp_bit_read(br, 88); + } + + /* + * profile_tier_level + * general_level_idc 8 bits + */ + ngx_rtmp_bit_read(br, 8); + + /* + * profile_tier_level + * for(i = 0; i < maxNumSubLayersMinus1; i++) { + * sub_layer_profile_present_flag[i] 1 bit + * sub_layer_level_present_flag[i] 1 bit + * } + * + * if (maxNumSubLayersMinus1 > 0) + * for(i = maxNumSubLayersMinus1; i < 8; i++) + * reserved_zero_2bits[i] 2 bits + */ + for (i = 0; i < maxNumSubLayersMinus1; ++i) { + slppf[i] = ngx_rtmp_bit_read(br, 1); + sllpf[i] = ngx_rtmp_bit_read(br, 1); + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "%d sub_layer_profile_present_flag:%d, " + "sub_layer_level_present_flag:%d", i, slppf[i], sllpf[i]); + } + + if (maxNumSubLayersMinus1 > 0) { + for (i = maxNumSubLayersMinus1; i < 8; ++i) { + ngx_uint_t t = ngx_rtmp_bit_read(br, 2); + ngx_log_error(NGX_LOG_ERR, s->log, 0, "zero bit %d", t); + } + } + + /* + * profile_tier_level + * for (i = 0; i < maxNumSubLayersMinus1; i++) { + * if (sub_layer_profile_present_flag[i] { + * 44 bits + * } + * if (sub_layer_level_present_flag[i]) { + * sub_layer_level_idc[i] 8 bits + * } + * } + */ + for (i = 0; i < maxNumSubLayersMinus1; ++i) { + if (slppf[i]) { + ngx_rtmp_bit_read(br, 88); + } + + if (sllpf[i]) { + ngx_rtmp_bit_read(br, 8); + } + } +} + +/* + * ITU-T H.265 7.3.2.2 Sequence parameter set RBSP syntax + */ +static void +ngx_rtmp_codec_parse_hevc_sps(ngx_rtmp_session_t *s, ngx_rtmp_codec_ctx_t *ctx, + ngx_rtmp_bit_reader_t *pbr, ngx_uint_t nal_unit_len) +{ + ngx_uint_t mslm, psi, cfi, width, height, + subwidthC, subheightC, + cwlo, cwro, cwto, cwbo; + ngx_rtmp_bit_reader_t br; + u_char buf[4096]; + ngx_int_t rbsp_bytes; + + ngx_rtmp_bit_init_reader(&br, pbr->pos, pbr->pos + nal_unit_len); + rbsp_bytes = ngx_rtmp_codec_parse_hevc_nal_to_rbsp(s, buf, &br, NAL_SPS, + nal_unit_len); + if (rbsp_bytes == NGX_ERROR) { + return; + } + + ngx_rtmp_bit_init_reader(&br, buf, buf + rbsp_bytes); + + /* + * seq_parameter_set_rbsp + * sps_video_parameter_set_id 4 bits + * sps_max_sub_layers_minus1 3 bits + * sps_temporal_id_nesting_flag 1 bit + */ + ngx_rtmp_bit_read(&br, 4); + mslm = ngx_rtmp_bit_read(&br, 3); + ngx_rtmp_bit_read(&br, 1); + + /* + * seq_parameter_set_rbsp + * profile_tier_level(1, sps_max_sub_layers_minus1) + */ + ngx_rtmp_codec_parse_hevc_ptl(s, &br, 1, mslm); + + /* calc resolution */ + /* + * seq_parameter_set_rbsp + * sps_seq_parameter_set_id v + * chroma_format_idc v + * if (chroma_format_idc == 3) + * separate_colour_plane_flag 1 bit + * pic_width_in_luma_samples v + * pic_height_in_luma_samples v + * conformance_window_flag 1 bit + * if (conformance_window_flag) { + * conf_win_left_offset v + * conf_win_right_offset v + * conf_win_top_offset v + * conf_win_bottom_offset v + * } + */ + psi = ngx_rtmp_bit_read_golomb(&br); + if (psi > 16 || br.err) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "read sps_seq_parameter_set_id error: %ui", psi); + return; + } + + cfi = ngx_rtmp_bit_read_golomb(&br); + if (cfi > 3 || br.err) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "read chroma_format_idc error: %ui", cfi); + return; + } + + if (cfi == 3) { + ngx_rtmp_bit_read(&br, 1); + } + + width = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + if (br.err) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, "read width error"); + return; + } + + height = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + if (br.err) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, "read height error"); + return; + } + + if (ngx_rtmp_bit_read(&br, 1)) { + cwlo = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + cwro = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + cwto = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + cwbo = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + /* + * ITU-T H.265 Table 6-1 + */ + if (cfi == 1) { /* 4:2:0 */ + subwidthC = 2; + subheightC = 2; + } else if (cfi == 2) { /* 4:2:2 */ + subwidthC = 2; + subheightC = 1; + } else { /* Monochrome or 4:4:4 */ + subwidthC = 1; + subheightC = 1; + } + + /* + * ITU-T H.265 7.4.3.2.1 + * + * horizontal picture coordinates from + * SubWidthC * conf_win_left_offset to + * pic_width_in_luma_samples - (SubWidthC * conf_win_right_offset + 1) + * vertical picture coordinates from + * SubHeightC * conf_win_top_offset to + * pic_height_in_luma_samples - + * (SubHeightC * conf_win_bottom_offset + 1) + */ + ctx->width = width - (subwidthC * cwro + 1) - (subwidthC * cwlo); + ctx->height = height - (subheightC * cwbo + 1) - (subheightC * cwto); + } else { + ctx->width = width; + ctx->height = height; + } + + return; +} + +static void +ngx_rtmp_codec_parse_hevc_header(ngx_rtmp_session_t *s, ngx_chain_t *in) +{ + ngx_uint_t i, j, num_arrays, nal_unit_type, num_nalus, + nal_unit_len; + ngx_rtmp_codec_ctx_t *ctx; + ngx_rtmp_bit_reader_t br; + +#if (NGX_DEBUG) + ngx_rtmp_codec_dump_header(s, "hevc", in); +#endif + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + + ngx_rtmp_bit_init_reader(&br, in->buf->pos, in->buf->last); + + /* + * FrameType 4 bits + * CodecID 4 bits + * AVCPacketType 1 byte + * CompositionTime 3 bytes + * HEVCDecoderConfigurationRecord + * configurationVersion 1 byte + */ + ngx_rtmp_bit_read(&br, 48); + + /* + * HEVCDecoderConfigurationRecord + * general_profile_space 2 bits + * general_tier_flag 1 bit + * general_profile_idc 5 bits + * general_profile_compatibility_flags 4 bytes + * general_constraint_indicator_flags 6 bytes + * general_level_idc 1 byte + * min_spatial_segmentation_idc 4 bits reserved + 12 bits + * parallelismType 6 bits reserved + 2 bits + * chroma_format_idc 6 bits reserved + 2 bits + * bit_depth_luma_minus8 5 bits reserved + 3 bits + * bit_depth_chroma_minus8 5 bits reserved + 3 bits + * avgFrameRate 2 bytes + */ + ngx_rtmp_bit_read(&br, 160); + + /* + * HEVCDecoderConfigurationRecord + * constantFrameRate 2 bits + * numTemporalLayers 3 bits + * temporalIdNested 1 bit + * lengthSizeMinusOne 2 bits + */ + ctx->avc_nal_bytes = (ngx_uint_t) ((ngx_rtmp_bit_read_8(&br) & 0x03) + 1); + + /* + * HEVCDecoderConfigurationRecord + * numOfArrays 1 byte + */ + num_arrays = (ngx_uint_t) ngx_rtmp_bit_read_8(&br); + + for (i = 0; i < num_arrays; ++i) { + /* + * array_completeness 1 bit + * reserved 1 bit + * NAL_unit_type 6 bits + * numNalus 2 bytes + */ + nal_unit_type = (ngx_uint_t) (ngx_rtmp_bit_read_8(&br) & 0x3f); + num_nalus = (ngx_uint_t) ngx_rtmp_bit_read_16(&br); + + for (j = 0; j < num_nalus; ++j) { + /* + * nalUnitLength 2 bytes + */ + nal_unit_len = (ngx_uint_t) ngx_rtmp_bit_read_16(&br); + + switch (nal_unit_type) { + case NAL_SPS: + ngx_rtmp_codec_parse_hevc_sps(s, ctx, &br, nal_unit_len); + ngx_rtmp_bit_read(&br, nal_unit_len * 8); + break; + default: + ngx_rtmp_bit_read(&br, nal_unit_len * 8); + break; + } + } + } + + ngx_log_debug7(NGX_LOG_DEBUG_RTMP, s->log, 0, + "codec: hevc header " + "profile=%ui, compat=%ui, level=%ui, " + "nal_bytes=%ui, ref_frames=%ui, width=%ui, height=%ui", + ctx->avc_profile, ctx->avc_compat, ctx->avc_level, + ctx->avc_nal_bytes, ctx->avc_ref_frames, + ctx->width, ctx->height); +} + + +static void +ngx_rtmp_codec_parse_avc_header(ngx_rtmp_session_t *s, ngx_chain_t *in) +{ + ngx_uint_t profile_idc, width, height, crop_left, crop_right, + crop_top, crop_bottom, frame_mbs_only, n, cf_idc, + num_ref_frames; + ngx_rtmp_codec_ctx_t *ctx; + ngx_rtmp_bit_reader_t br; + +#if (NGX_DEBUG) + ngx_rtmp_codec_dump_header(s, "avc", in); +#endif + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + + ngx_rtmp_bit_init_reader(&br, in->buf->pos, in->buf->last); + + ngx_rtmp_bit_read(&br, 48); + + ctx->avc_profile = (ngx_uint_t) ngx_rtmp_bit_read_8(&br); + ctx->avc_compat = (ngx_uint_t) ngx_rtmp_bit_read_8(&br); + ctx->avc_level = (ngx_uint_t) ngx_rtmp_bit_read_8(&br); + + /* nal bytes */ + ctx->avc_nal_bytes = (ngx_uint_t) ((ngx_rtmp_bit_read_8(&br) & 0x03) + 1); + + /* nnals */ + if ((ngx_rtmp_bit_read_8(&br) & 0x1f) == 0) { + return; + } + + /* nal size */ + ngx_rtmp_bit_read(&br, 16); + + /* nal type */ + if (ngx_rtmp_bit_read_8(&br) != 0x67) { + return; + } + + /* SPS */ + + /* profile idc */ + profile_idc = (ngx_uint_t) ngx_rtmp_bit_read(&br, 8); + + /* flags */ + ngx_rtmp_bit_read(&br, 8); + + /* level idc */ + ngx_rtmp_bit_read(&br, 8); + + /* SPS id */ + ngx_rtmp_bit_read_golomb(&br); + + if (profile_idc == 100 || profile_idc == 110 || + profile_idc == 122 || profile_idc == 244 || profile_idc == 44 || + profile_idc == 83 || profile_idc == 86 || profile_idc == 118) + { + /* chroma format idc */ + cf_idc = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + if (cf_idc == 3) { + + /* separate color plane */ + ngx_rtmp_bit_read(&br, 1); + } + + /* bit depth luma - 8 */ + ngx_rtmp_bit_read_golomb(&br); + + /* bit depth chroma - 8 */ + ngx_rtmp_bit_read_golomb(&br); + + /* qpprime y zero transform bypass */ + ngx_rtmp_bit_read(&br, 1); + + /* seq scaling matrix present */ + if (ngx_rtmp_bit_read(&br, 1)) { + + for (n = 0; n < (cf_idc != 3 ? 8u : 12u); n++) { + + /* seq scaling list present */ + if (ngx_rtmp_bit_read(&br, 1)) { + + /* TODO: scaling_list() + if (n < 6) { + } else { + } + */ + } + } + } + } + + /* log2 max frame num */ + ngx_rtmp_bit_read_golomb(&br); + + /* pic order cnt type */ + switch (ngx_rtmp_bit_read_golomb(&br)) { + case 0: + + /* max pic order cnt */ + ngx_rtmp_bit_read_golomb(&br); + break; + + case 1: + + /* delta pic order alwys zero */ + ngx_rtmp_bit_read(&br, 1); + + /* offset for non-ref pic */ + ngx_rtmp_bit_read_golomb(&br); + + /* offset for top to bottom field */ + ngx_rtmp_bit_read_golomb(&br); + + /* num ref frames in pic order */ + num_ref_frames = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + for (n = 0; n < num_ref_frames; n++) { + + /* offset for ref frame */ + ngx_rtmp_bit_read_golomb(&br); + } + } + + /* num ref frames */ + ctx->avc_ref_frames = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + /* gaps in frame num allowed */ + ngx_rtmp_bit_read(&br, 1); + + /* pic width in mbs - 1 */ + width = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + /* pic height in map units - 1 */ + height = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + /* frame mbs only flag */ + frame_mbs_only = (ngx_uint_t) ngx_rtmp_bit_read(&br, 1); + + if (!frame_mbs_only) { + + /* mbs adaprive frame field */ + ngx_rtmp_bit_read(&br, 1); + } + + /* direct 8x8 inference flag */ + ngx_rtmp_bit_read(&br, 1); + + /* frame cropping */ + if (ngx_rtmp_bit_read(&br, 1)) { + + crop_left = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + crop_right = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + crop_top = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + crop_bottom = (ngx_uint_t) ngx_rtmp_bit_read_golomb(&br); + + } else { + + crop_left = 0; + crop_right = 0; + crop_top = 0; + crop_bottom = 0; + } + + ctx->width = (width + 1) * 16 - (crop_left + crop_right) * 2; + ctx->height = (2 - frame_mbs_only) * (height + 1) * 16 - + (crop_top + crop_bottom) * 2; + + ngx_log_debug7(NGX_LOG_DEBUG_RTMP, s->log, 0, + "codec: avc header " + "profile=%ui, compat=%ui, level=%ui, " + "nal_bytes=%ui, ref_frames=%ui, width=%ui, height=%ui", + ctx->avc_profile, ctx->avc_compat, ctx->avc_level, + ctx->avc_nal_bytes, ctx->avc_ref_frames, + ctx->width, ctx->height); +} + + +#if (NGX_DEBUG) +static void +ngx_rtmp_codec_dump_header(ngx_rtmp_session_t *s, const char *type, + ngx_chain_t *in) +{ + u_char buf[256], *p, *pp; + u_char hex[] = "0123456789abcdef"; + + for (pp = buf, p = in->buf->pos; + p < in->buf->last && pp < buf + sizeof(buf) - 1; + ++p) + { + *pp++ = hex[*p >> 4]; + *pp++ = hex[*p & 0x0f]; + } + + *pp = 0; + + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, s->log, 0, + "codec: %s header %s", type, buf); +} +#endif + + +static ngx_int_t +ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s) +{ + ngx_rtmp_codec_ctx_t *ctx; + ngx_rtmp_core_srv_conf_t *cscf; + ngx_int_t rc; + + static struct { + double width; + double height; + double duration; + double frame_rate; + double video_data_rate; + double video_codec_id; + double audio_data_rate; + double audio_codec_id; + u_char profile[32]; + u_char level[32]; + } v; + + static ngx_rtmp_amf_elt_t out_inf[] = { + + { NGX_RTMP_AMF_STRING, + ngx_string("Server"), + "Pingo (https://github.com/im-pingo/nginx-rtmp-module)", 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("width"), + &v.width, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("height"), + &v.height, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("displayWidth"), + &v.width, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("displayHeight"), + &v.height, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("duration"), + &v.duration, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("framerate"), + &v.frame_rate, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("fps"), + &v.frame_rate, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("videodatarate"), + &v.video_data_rate, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("videocodecid"), + &v.video_codec_id, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("audiodatarate"), + &v.audio_data_rate, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("audiocodecid"), + &v.audio_codec_id, 0 }, + + { NGX_RTMP_AMF_STRING, + ngx_string("profile"), + &v.profile, sizeof(v.profile) }, + + { NGX_RTMP_AMF_STRING, + ngx_string("level"), + &v.level, sizeof(v.level) }, + }; + + static ngx_rtmp_amf_elt_t out_elts[] = { + + { NGX_RTMP_AMF_STRING, + ngx_null_string, + "onMetaData", 0 }, + + { NGX_RTMP_AMF_OBJECT, + ngx_null_string, + out_inf, sizeof(out_inf) }, + }; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + if (ctx == NULL) { + return NGX_OK; + } + + if (ctx->meta) { + ngx_rtmp_shared_free_frame(ctx->meta); + } + + cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module); + + ctx->meta = ngx_rtmp_shared_alloc_frame(cscf->chunk_size, NULL, 1); + + v.width = ctx->width; + v.height = ctx->height; + v.duration = ctx->duration; + v.frame_rate = ctx->frame_rate; + v.video_data_rate = ctx->video_data_rate; + v.video_codec_id = ctx->video_codec_id; + v.audio_data_rate = ctx->audio_data_rate; + v.audio_codec_id = ctx->audio_codec_id; + ngx_memcpy(v.profile, ctx->profile, sizeof(ctx->profile)); + ngx_memcpy(v.level, ctx->level, sizeof(ctx->level)); + + rc = ngx_rtmp_append_amf(s, &ctx->meta->chain, &ctx->meta->chain, out_elts, + sizeof(out_elts) / sizeof(out_elts[0])); + if (rc != NGX_OK || ctx->meta == NULL) { + return NGX_ERROR; + } + + return ngx_rtmp_codec_prepare_meta(s, 0); +} + + +static ngx_int_t +ngx_rtmp_codec_copy_meta(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, + ngx_chain_t *in) +{ + ngx_rtmp_codec_ctx_t *ctx; + ngx_rtmp_core_srv_conf_t *cscf; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + + cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module); + + if (ctx->meta) { + ngx_rtmp_shared_free_frame(ctx->meta); + } + + ctx->meta = ngx_rtmp_shared_alloc_frame(cscf->chunk_size, in, 0); + + if (ctx->meta == NULL) { + return NGX_ERROR; + } + + return ngx_rtmp_codec_prepare_meta(s, h->timestamp); +} + + +static ngx_int_t +ngx_rtmp_codec_prepare_meta(ngx_rtmp_session_t *s, uint32_t timestamp) +{ + ngx_rtmp_codec_ctx_t *ctx; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + + ctx->meta->hdr.csid = NGX_RTMP_CSID_AMF; + ctx->meta->hdr.msid = NGX_RTMP_MSID; + ctx->meta->hdr.type = NGX_RTMP_MSG_AMF_META; + ctx->meta->hdr.timestamp = timestamp; + + ctx->meta_version = ngx_rtmp_codec_get_next_version(); + + return NGX_OK; +} + + +static ngx_int_t +ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, + ngx_chain_t *in) +{ + ngx_rtmp_codec_app_conf_t *cacf; + ngx_rtmp_codec_ctx_t *ctx; + ngx_uint_t skip; + + static struct { + double width; + double height; + double duration; + double frame_rate; + double video_data_rate; + double video_codec_id_n; + u_char video_codec_id_s[32]; + double audio_data_rate; + double audio_codec_id_n; + u_char audio_codec_id_s[32]; + u_char profile[32]; + u_char level[32]; + } v; + + static ngx_rtmp_amf_elt_t in_video_codec_id[] = { + + { NGX_RTMP_AMF_NUMBER, + ngx_null_string, + &v.video_codec_id_n, 0 }, + + { NGX_RTMP_AMF_STRING, + ngx_null_string, + &v.video_codec_id_s, sizeof(v.video_codec_id_s) }, + }; + + static ngx_rtmp_amf_elt_t in_audio_codec_id[] = { + + { NGX_RTMP_AMF_NUMBER, + ngx_null_string, + &v.audio_codec_id_n, 0 }, + + { NGX_RTMP_AMF_STRING, + ngx_null_string, + &v.audio_codec_id_s, sizeof(v.audio_codec_id_s) }, + }; + + static ngx_rtmp_amf_elt_t in_inf[] = { + + { NGX_RTMP_AMF_NUMBER, + ngx_string("width"), + &v.width, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("height"), + &v.height, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("duration"), + &v.duration, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("framerate"), + &v.frame_rate, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("fps"), + &v.frame_rate, 0 }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("videodatarate"), + &v.video_data_rate, 0 }, + + { NGX_RTMP_AMF_VARIANT, + ngx_string("videocodecid"), + in_video_codec_id, sizeof(in_video_codec_id) }, + + { NGX_RTMP_AMF_NUMBER, + ngx_string("audiodatarate"), + &v.audio_data_rate, 0 }, + + { NGX_RTMP_AMF_VARIANT, + ngx_string("audiocodecid"), + in_audio_codec_id, sizeof(in_audio_codec_id) }, + + { NGX_RTMP_AMF_STRING, + ngx_string("profile"), + &v.profile, sizeof(v.profile) }, + + { NGX_RTMP_AMF_STRING, + ngx_string("level"), + &v.level, sizeof(v.level) }, + }; + + static ngx_rtmp_amf_elt_t in_elts[] = { + + { NGX_RTMP_AMF_STRING, + ngx_null_string, + NULL, 0 }, + + { NGX_RTMP_AMF_OBJECT, + ngx_null_string, + in_inf, sizeof(in_inf) }, + }; + + cacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_codec_module); + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + if (ctx == NULL) { + ctx = ngx_pcalloc(s->pool, sizeof(ngx_rtmp_codec_ctx_t)); + ngx_rtmp_set_ctx(s, ctx, ngx_rtmp_codec_module); + } + + ngx_memzero(&v, sizeof(v)); + + /* use -1 as a sign of unchanged data; + * 0 is a valid value for uncompressed audio */ + v.audio_codec_id_n = -1; + + /* FFmpeg sends a string in front of actal metadata; ignore it */ + skip = !(in->buf->last > in->buf->pos + && *in->buf->pos == NGX_RTMP_AMF_STRING); + if (ngx_rtmp_receive_amf(s, in, in_elts + skip, + sizeof(in_elts) / sizeof(in_elts[0]) - skip)) + { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "codec: error parsing data frame"); + return NGX_OK; + } + + ctx->width = (ngx_uint_t) v.width; + ctx->height = (ngx_uint_t) v.height; + ctx->duration = (ngx_uint_t) v.duration; + ctx->frame_rate = v.frame_rate; + ctx->video_data_rate = (ngx_uint_t) v.video_data_rate; + ctx->video_codec_id = (ngx_uint_t) v.video_codec_id_n; + ctx->audio_data_rate = (ngx_uint_t) v.audio_data_rate; + ctx->audio_codec_id = (v.audio_codec_id_n == -1 + ? 0 : v.audio_codec_id_n == 0 + ? NGX_RTMP_AUDIO_UNCOMPRESSED : (ngx_uint_t) v.audio_codec_id_n); + ngx_memcpy(ctx->profile, v.profile, sizeof(v.profile)); + ngx_memcpy(ctx->level, v.level, sizeof(v.level)); + + ngx_log_debug8(NGX_LOG_DEBUG_RTMP, s->log, 0, + "codec: data frame: " + "width=%ui height=%ui duration=%ui frame_rate=%f " + "video=%s (%ui) audio=%s (%ui)", + ctx->width, ctx->height, ctx->duration, ctx->frame_rate, + ngx_rtmp_get_video_codec_name(ctx->video_codec_id), + ctx->video_codec_id, + ngx_rtmp_get_audio_codec_name(ctx->audio_codec_id), + ctx->audio_codec_id); + + switch (cacf->meta) { + case NGX_RTMP_CODEC_META_ON: + return ngx_rtmp_codec_reconstruct_meta(s); + case NGX_RTMP_CODEC_META_COPY: + return ngx_rtmp_codec_copy_meta(s, h, in); + } + + /* NGX_RTMP_CODEC_META_OFF */ + + return NGX_OK; +} + + +static void * +ngx_rtmp_codec_create_app_conf(ngx_conf_t *cf) +{ + ngx_rtmp_codec_app_conf_t *cacf; + + cacf = ngx_pcalloc(cf->pool, sizeof(ngx_rtmp_codec_app_conf_t)); + if (cacf == NULL) { + return NULL; + } + + cacf->meta = NGX_CONF_UNSET_UINT; + + return cacf; +} + + +static char * +ngx_rtmp_codec_merge_app_conf(ngx_conf_t *cf, void *parent, void *child) +{ + ngx_rtmp_codec_app_conf_t *prev = parent; + ngx_rtmp_codec_app_conf_t *conf = child; + + ngx_conf_merge_uint_value(conf->meta, prev->meta, NGX_RTMP_CODEC_META_ON); + + return NGX_CONF_OK; +} + + +static ngx_int_t +ngx_rtmp_codec_postconfiguration(ngx_conf_t *cf) +{ + ngx_rtmp_core_main_conf_t *cmcf; + ngx_rtmp_handler_pt *h; + ngx_rtmp_amf_handler_t *ch; + + cmcf = ngx_rtmp_conf_get_module_main_conf(cf, ngx_rtmp_core_module); + + h = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_AUDIO]); + *h = ngx_rtmp_codec_av; + + h = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_VIDEO]); + *h = ngx_rtmp_codec_av; + + h = ngx_array_push(&cmcf->events[NGX_RTMP_DISCONNECT]); + *h = ngx_rtmp_codec_disconnect; + + /* register metadata handler */ + ch = ngx_array_push(&cmcf->amf); + if (ch == NULL) { + return NGX_ERROR; + } + ngx_str_set(&ch->name, "@setDataFrame"); + ch->handler = ngx_rtmp_codec_meta_data; + + ch = ngx_array_push(&cmcf->amf); + if (ch == NULL) { + return NGX_ERROR; + } + ngx_str_set(&ch->name, "onMetaData"); + ch->handler = ngx_rtmp_codec_meta_data; + + + return NGX_OK; +} diff --git a/StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_live_module.c b/StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_live_module.c new file mode 100644 index 0000000..2f15e80 --- /dev/null +++ b/StreamMedia/flv_h265_patch/nginx_rtmp_module/ngx_rtmp_live_module.c @@ -0,0 +1,1108 @@ + +/* + * Copyright (C) Roman Arutyunyan + */ + + +#include +#include +#include "ngx_rtmp_live_module.h" +#include "ngx_rtmp_cmd_module.h" +#include "ngx_rtmp_codec_module.h" + + +static ngx_rtmp_publish_pt next_publish; +static ngx_rtmp_play_pt next_play; +static ngx_rtmp_close_stream_pt next_close_stream; +static ngx_rtmp_pause_pt next_pause; +static ngx_rtmp_stream_begin_pt next_stream_begin; +static ngx_rtmp_stream_eof_pt next_stream_eof; + + +static ngx_int_t ngx_rtmp_live_postconfiguration(ngx_conf_t *cf); +static void * ngx_rtmp_live_create_app_conf(ngx_conf_t *cf); +static char * ngx_rtmp_live_merge_app_conf(ngx_conf_t *cf, + void *parent, void *child); +static char *ngx_rtmp_live_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); +static void ngx_rtmp_live_start(ngx_rtmp_session_t *s); +static void ngx_rtmp_live_stop(ngx_rtmp_session_t *s); + + +static ngx_command_t ngx_rtmp_live_commands[] = { + + { ngx_string("live"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, live), + NULL }, + + { ngx_string("buffer"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_msec_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, buflen), + NULL }, + + { ngx_string("sync"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_rtmp_live_set_msec_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, sync), + NULL }, + + { ngx_string("interleave"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, interleave), + NULL }, + + { ngx_string("wait_key"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, wait_key), + NULL }, + + { ngx_string("wait_video"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, wait_video), + NULL }, + + { ngx_string("publish_notify"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, publish_notify), + NULL }, + + { ngx_string("play_restart"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, play_restart), + NULL }, + + { ngx_string("idle_streams"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_conf_set_flag_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, idle_streams), + NULL }, + + { ngx_string("drop_idle_publisher"), + NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, + ngx_rtmp_live_set_msec_slot, + NGX_RTMP_APP_CONF_OFFSET, + offsetof(ngx_rtmp_live_app_conf_t, idle_timeout), + NULL }, + + ngx_null_command +}; + + +static ngx_rtmp_module_t ngx_rtmp_live_module_ctx = { + NULL, /* preconfiguration */ + ngx_rtmp_live_postconfiguration, /* postconfiguration */ + NULL, /* create main configuration */ + NULL, /* init main configuration */ + NULL, /* create server configuration */ + NULL, /* merge server configuration */ + ngx_rtmp_live_create_app_conf, /* create app configuration */ + ngx_rtmp_live_merge_app_conf /* merge app configuration */ +}; + + +ngx_module_t ngx_rtmp_live_module = { + NGX_MODULE_V1, + &ngx_rtmp_live_module_ctx, /* module context */ + ngx_rtmp_live_commands, /* module directives */ + NGX_RTMP_MODULE, /* module type */ + NULL, /* init master */ + NULL, /* init module */ + NULL, /* init process */ + NULL, /* init thread */ + NULL, /* exit thread */ + NULL, /* exit process */ + NULL, /* exit master */ + NGX_MODULE_V1_PADDING +}; + + +static void * +ngx_rtmp_live_create_app_conf(ngx_conf_t *cf) +{ + ngx_rtmp_live_app_conf_t *lacf; + + lacf = ngx_pcalloc(cf->pool, sizeof(ngx_rtmp_live_app_conf_t)); + if (lacf == NULL) { + return NULL; + } + + lacf->live = NGX_CONF_UNSET; + lacf->buflen = NGX_CONF_UNSET_MSEC; + lacf->sync = NGX_CONF_UNSET_MSEC; + lacf->idle_timeout = NGX_CONF_UNSET_MSEC; + lacf->interleave = NGX_CONF_UNSET; + lacf->wait_key = NGX_CONF_UNSET; + lacf->wait_video = NGX_CONF_UNSET; + lacf->publish_notify = NGX_CONF_UNSET; + lacf->play_restart = NGX_CONF_UNSET; + lacf->idle_streams = NGX_CONF_UNSET; + + return lacf; +} + + +static char * +ngx_rtmp_live_merge_app_conf(ngx_conf_t *cf, void *parent, void *child) +{ + ngx_rtmp_live_app_conf_t *prev = parent; + ngx_rtmp_live_app_conf_t *conf = child; + + ngx_conf_merge_value(conf->live, prev->live, 0); + ngx_conf_merge_msec_value(conf->buflen, prev->buflen, 0); + ngx_conf_merge_msec_value(conf->sync, prev->sync, 300); + ngx_conf_merge_msec_value(conf->idle_timeout, prev->idle_timeout, 0); + ngx_conf_merge_value(conf->interleave, prev->interleave, 0); + ngx_conf_merge_value(conf->wait_key, prev->wait_key, 1); + ngx_conf_merge_value(conf->wait_video, prev->wait_video, 0); + ngx_conf_merge_value(conf->publish_notify, prev->publish_notify, 0); + ngx_conf_merge_value(conf->play_restart, prev->play_restart, 0); + ngx_conf_merge_value(conf->idle_streams, prev->idle_streams, 1); + + return NGX_CONF_OK; +} + + +static char * +ngx_rtmp_live_set_msec_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +{ + char *p = conf; + ngx_str_t *value; + ngx_msec_t *msp; + + msp = (ngx_msec_t *) (p + cmd->offset); + + value = cf->args->elts; + + if (value[1].len == sizeof("off") - 1 && + ngx_strncasecmp(value[1].data, (u_char *) "off", value[1].len) == 0) + { + *msp = 0; + return NGX_CONF_OK; + } + + return ngx_conf_set_msec_slot(cf, cmd, conf); +} + + +static void +ngx_rtmp_live_idle(ngx_event_t *pev) +{ + ngx_connection_t *c; + ngx_rtmp_session_t *s; + + c = pev->data; + s = c->data; + + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "live: drop idle publisher"); + + s->finalize_reason = NGX_LIVE_DROP_IDLE; + ngx_rtmp_finalize_session(s); +} + + +static void +ngx_rtmp_live_set_status(ngx_rtmp_session_t *s, ngx_rtmp_frame_t *control, + ngx_rtmp_frame_t **status, size_t nstatus, + unsigned active) +{ + ngx_rtmp_live_app_conf_t *lacf; + ngx_rtmp_live_ctx_t *ctx, *pctx; + ngx_rtmp_frame_t **frame; + ngx_event_t *e; + size_t n; + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + + ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: set active=%ui", active); + + if (ctx->active == active) { + ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: unchanged active=%ui", active); + return; + } + + ctx->active = active; + + if (ctx->publishing) { + + /* publisher */ + + if (lacf->idle_timeout) { + e = &ctx->idle_evt; + + if (active && !ctx->idle_evt.timer_set) { + e->data = s->connection; + e->log = s->log; + e->handler = ngx_rtmp_live_idle; + + ngx_add_timer(e, lacf->idle_timeout); + + } else if (!active && ctx->idle_evt.timer_set) { + ngx_del_timer(e); + } + } + + ctx->stream->active = active; + + for (pctx = ctx->stream->ctx; pctx; pctx = pctx->next) { + if (pctx->publishing == 0) { + ngx_rtmp_live_set_status(pctx->session, control, status, + nstatus, active); + } + } + + return; + } + + /* subscriber */ + + if (control && ngx_rtmp_send_message(s, control, 0) != NGX_OK) { + ngx_rtmp_finalize_session(s); + return; + } + + if (!ctx->silent) { + frame = status; + + for (n = 0; n < nstatus; ++n, ++frame) { + if (*frame && ngx_rtmp_send_message(s, *frame, 0) != NGX_OK) { + ngx_rtmp_finalize_session(s); + return; + } + } + } + + ctx->cs[0].active = 0; + ctx->cs[0].dropped = 0; + + ctx->cs[1].active = 0; + ctx->cs[1].dropped = 0; +} + + +static void +ngx_rtmp_live_start(ngx_rtmp_session_t *s) +{ + ngx_rtmp_live_app_conf_t *lacf; + ngx_rtmp_frame_t *control; + ngx_rtmp_frame_t *status[3]; + size_t n, nstatus; + + if (s->live_type == NGX_HLS_LIVE) { + return; + } + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + + control = ngx_rtmp_create_stream_begin(s, NGX_RTMP_MSID); + + nstatus = 0; + + if (lacf->play_restart) { + status[nstatus++] = ngx_rtmp_create_status(s, "NetStream.Play.Start", + "status", "Start live"); + status[nstatus++] = ngx_rtmp_create_sample_access(s); + } + + if (lacf->publish_notify) { + status[nstatus++] = ngx_rtmp_create_status(s, + "NetStream.Play.PublishNotify", + "status", "Start publishing"); + } + + ngx_rtmp_live_set_status(s, control, status, nstatus, 1); + + if (control) { + ngx_rtmp_shared_free_frame(control); + } + + for (n = 0; n < nstatus; ++n) { + ngx_rtmp_shared_free_frame(status[n]); + } +} + + +static void +ngx_rtmp_live_stop(ngx_rtmp_session_t *s) +{ + ngx_rtmp_live_app_conf_t *lacf; + ngx_rtmp_frame_t *control; + ngx_rtmp_frame_t *status[3]; + size_t n, nstatus; + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + + control = ngx_rtmp_create_stream_eof(s, NGX_RTMP_MSID); + + nstatus = 0; + + if (lacf->play_restart) { + status[nstatus++] = ngx_rtmp_create_status(s, "NetStream.Play.Stop", + "status", "Stop live"); + } + + if (lacf->publish_notify) { + status[nstatus++] = ngx_rtmp_create_status(s, + "NetStream.Play.UnpublishNotify", + "status", "Stop publishing"); + } + + ngx_rtmp_live_set_status(s, control, status, nstatus, 0); + + if (control) { + ngx_rtmp_shared_free_frame(control); + } + + for (n = 0; n < nstatus; ++n) { + ngx_rtmp_shared_free_frame(status[n]); + } +} + + +static ngx_int_t +ngx_rtmp_live_stream_begin(ngx_rtmp_session_t *s, ngx_rtmp_stream_begin_t *v) +{ + ngx_rtmp_live_ctx_t *ctx; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + + if (ctx == NULL || ctx->stream == NULL || !ctx->publishing) { + goto next; + } + + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: stream_begin"); + + ngx_rtmp_live_start(s); + +next: + return next_stream_begin(s, v); +} + + +static ngx_int_t +ngx_rtmp_live_stream_eof(ngx_rtmp_session_t *s, ngx_rtmp_stream_eof_t *v) +{ + ngx_rtmp_live_ctx_t *ctx; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + + if (ctx == NULL || ctx->stream == NULL || !ctx->publishing) { + goto next; + } + + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: stream_eof"); + + ngx_rtmp_live_stop(s); + +next: + return next_stream_eof(s, v); +} + + +static void +ngx_rtmp_live_join(ngx_rtmp_session_t *s, u_char *name, unsigned publisher) +{ + ngx_rtmp_live_ctx_t *ctx; + ngx_live_stream_t *st; + ngx_rtmp_live_app_conf_t *lacf; + ngx_str_t pubpri; + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + if (lacf == NULL) { + return; + } + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + if (ctx && ctx->stream) { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: already joined"); + return; + } + + if (ctx == NULL) { + ctx = ngx_palloc(s->pool, sizeof(ngx_rtmp_live_ctx_t)); + ngx_rtmp_set_ctx(s, ctx, ngx_rtmp_live_module); + } + + ngx_memzero(ctx, sizeof(*ctx)); + + ctx->session = s; + + ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: join '%s'", name); + + st = s->live_stream; + + if (!(publisher || st->publish_ctx || lacf->idle_streams)) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "live: stream not found"); + + s->status = 404; + ngx_rtmp_send_status(s, "NetStream.Play.StreamNotFound", "error", + "No such stream"); + + ngx_rtmp_finalize_session(s); + + return; + } + + if (publisher) { + // set publish priority + if (s->relay) { // relay pull + ctx->pubpri = -1; + } else { + if (ngx_rtmp_arg(s, (u_char *) "pubpri", 6, &pubpri) == NGX_OK) { + ctx->pubpri = ngx_atoi(pubpri.data, pubpri.len); + if (ctx->pubpri == NGX_ERROR) { // invalid publish priority + ctx->pubpri = 0; + } + } + } + + // duplicate publish priority + if (ngx_map_find(&st->pubctx, (intptr_t) ctx->pubpri)) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "live: already publishing"); + + ngx_rtmp_send_status(s, "NetStream.Publish.BadName", "error", + "Already publishing"); + + return; + } + + ctx->node.raw_key = (intptr_t) ctx->pubpri; + ngx_map_insert(&st->pubctx, &ctx->node, 0); + + st->publishing = 1; + } + + ctx->stream = st; + ctx->publishing = publisher; + ctx->next = st->ctx; + + st->ctx = ctx; + + if (lacf->buflen) { + s->out_buffer = 1; + } + + ctx->cs[0].csid = NGX_RTMP_CSID_VIDEO; + ctx->cs[1].csid = NGX_RTMP_CSID_AUDIO; + + if (!ctx->publishing && ctx->stream->active) { + ngx_rtmp_live_start(s); + } +} + + +static ngx_int_t +ngx_rtmp_live_close_stream(ngx_rtmp_session_t *s, ngx_rtmp_close_stream_t *v) +{ + ngx_rtmp_session_t *ss; + ngx_rtmp_live_ctx_t *ctx, **cctx, *pctx; + ngx_rtmp_live_app_conf_t *lacf; + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + if (lacf == NULL) { + goto next; + } + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + if (ctx == NULL) { + goto next; + } + + if (ctx->stream == NULL) { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: not joined"); + goto next; + } + + ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: leave '%s'", ctx->stream->name); + + if (s->publishing) { + ngx_map_delete(&s->live_stream->pubctx, (intptr_t) ctx->pubpri); + } + + if (ctx->stream->publishing && ctx->publishing) { + ctx->stream->publishing = 0; + } + + for (cctx = &ctx->stream->ctx; *cctx; cctx = &(*cctx)->next) { + if (*cctx == ctx) { + *cctx = ctx->next; + break; + } + } + + if (ctx->publishing || ctx->stream->active) { + ngx_rtmp_live_stop(s); + } + + if (ctx->publishing) { + ngx_rtmp_send_status(s, "NetStream.Unpublish.Success", + "status", "Stop publishing"); + if (!lacf->idle_streams) { + for (pctx = ctx->stream->ctx; pctx; pctx = pctx->next) { + if (pctx->publishing == 0) { + ss = pctx->session; + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: no publisher"); + ngx_rtmp_finalize_session(ss); + } + } + } + } + + if (ctx->stream->ctx) { + ctx->stream = NULL; + goto next; + } + + ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: delete empty stream '%s'", + ctx->stream->name); + + ctx->stream = NULL; + + if (!ctx->silent && !ctx->publishing && !lacf->play_restart) { + ngx_rtmp_send_status(s, "NetStream.Play.Stop", "status", "Stop live"); + } + +next: + return next_close_stream(s, v); +} + + +static ngx_int_t +ngx_rtmp_live_pause(ngx_rtmp_session_t *s, ngx_rtmp_pause_t *v) +{ + ngx_rtmp_live_ctx_t *ctx; + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + + if (ctx == NULL || ctx->stream == NULL) { + goto next; + } + + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: pause=%i timestamp=%f", + (ngx_int_t) v->pause, v->position); + + if (v->pause) { + if (ngx_rtmp_send_status(s, "NetStream.Pause.Notify", "status", + "Paused live") + != NGX_OK) + { + return NGX_ERROR; + } + + ctx->paused = 1; + + ngx_rtmp_live_stop(s); + + } else { + if (ngx_rtmp_send_status(s, "NetStream.Unpause.Notify", "status", + "Unpaused live") + != NGX_OK) + { + return NGX_ERROR; + } + + ctx->paused = 0; + + ngx_rtmp_live_start(s); + } + +next: + return next_pause(s, v); +} + +static ngx_int_t +ngx_rtmp_live_av(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, + ngx_chain_t *in) +{ + ngx_rtmp_live_ctx_t *ctx, *pctx; + ngx_rtmp_codec_ctx_t *codec_ctx; + ngx_rtmp_frame_t *header, *coheader, *meta, *avframe, *dummy; + ngx_rtmp_core_srv_conf_t *cscf; + ngx_rtmp_live_app_conf_t *lacf; + ngx_rtmp_session_t *ss; + ngx_rtmp_header_t ch, lh, clh; + ngx_int_t rc, mandatory, dummy_audio; + ngx_uint_t prio; + ngx_uint_t peers; + ngx_uint_t meta_version; + ngx_uint_t csidx; + uint32_t delta; + ngx_rtmp_live_chunk_stream_t *cs; + u_char frametype; + +#define MSG_TYPE (h->type == NGX_RTMP_MSG_VIDEO ? "video" : "audio") + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + if (lacf == NULL) { + return NGX_ERROR; + } + + if (!lacf->live || in == NULL || in->buf == NULL || s->pause == 1) { + return NGX_OK; + } + + codec_ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module); + + if (s->pause == 2) { + if ((codec_ctx && codec_ctx->video_codec_id == 0) || + (h->type == NGX_RTMP_MSG_VIDEO && + ngx_rtmp_get_video_frame_type(in) == NGX_RTMP_VIDEO_KEY_FRAME)) + { + s->pause = 0; + } else { + return NGX_OK; + } + } + + if (h->type == NGX_RTMP_MSG_VIDEO) { + frametype = in->buf->pos[0] & 0xf0; + if (frametype != 0x10 && frametype != 0x20) { + ngx_log_error(NGX_LOG_ERR, s->log, 0, + "codec: receive unkwnon frametype %02xD", frametype); + return NGX_OK; + } + } + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + if (ctx == NULL || ctx->stream == NULL) { + return NGX_OK; + } + + if (ctx->publishing == 0) { + ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: %s from non-publisher", MSG_TYPE); + return NGX_OK; + } + + if (!ctx->stream->active) { + ngx_rtmp_live_start(s); + } + + if (ctx->idle_evt.timer_set) { + ngx_add_timer(&ctx->idle_evt, lacf->idle_timeout); + } + + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: %s packet timestamp=%uD", + MSG_TYPE, h->timestamp); + + s->current_time = h->timestamp; + + peers = 0; + header = NULL; + coheader = NULL; + meta = NULL; + dummy = NULL; + meta_version = 0; + mandatory = 0; + + prio = (h->type == NGX_RTMP_MSG_VIDEO ? + ngx_rtmp_get_video_frame_type(in) : 0); + + cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module); + + csidx = !(lacf->interleave || h->type == NGX_RTMP_MSG_VIDEO); + + cs = &ctx->cs[csidx]; + + ngx_memzero(&ch, sizeof(ch)); + + ch.timestamp = h->timestamp; + ch.msid = NGX_RTMP_MSID; + ch.csid = cs->csid; + ch.type = h->type; + ch.mlen = h->mlen; + + lh = ch; + + if (cs->active) { + lh.timestamp = cs->timestamp; + } + + clh = lh; + clh.type = (h->type == NGX_RTMP_MSG_AUDIO ? NGX_RTMP_MSG_VIDEO : + NGX_RTMP_MSG_AUDIO); + + cs->active = 1; + cs->timestamp = ch.timestamp; + + delta = ch.timestamp - lh.timestamp; +/* + if (delta >> 31) { + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: clipping non-monotonical timestamp %uD->%uD", + lh.timestamp, ch.timestamp); + + delta = 0; + + ch.timestamp = lh.timestamp; + } +*/ + avframe = ngx_rtmp_shared_alloc_frame(cscf->chunk_size, in, 0); + avframe->hdr = ch; + + if (codec_ctx) { + + if (h->type == NGX_RTMP_MSG_AUDIO) { + header = codec_ctx->aac_header; + + if (lacf->interleave) { + coheader = codec_ctx->avc_header; + } + + if (codec_ctx->audio_codec_id == NGX_RTMP_AUDIO_AAC && + ngx_rtmp_is_codec_header(in)) + { + prio = 0; + mandatory = 1; + } + + } else { + header = codec_ctx->avc_header; + + if (lacf->interleave) { + coheader = codec_ctx->aac_header; + } + + if ((codec_ctx->video_codec_id == NGX_RTMP_VIDEO_H264 || codec_ctx->video_codec_id == NGX_RTMP_VIDEO_H265) && + ngx_rtmp_is_codec_header(in)) + { + prio = 0; + mandatory = 1; + } + } + + if (codec_ctx->meta) { + meta = codec_ctx->meta; + meta_version = codec_ctx->meta_version; + } + } + + if (ngx_rtmp_gop_cache(s, avframe) == NGX_ERROR) { + return NGX_ERROR; + } + + /* broadcast to all subscribers */ + + for (pctx = ctx->stream->ctx; pctx; pctx = pctx->next) { + // not the highest priority + if (ngx_map_rbegin(&ctx->stream->pubctx) != &ctx->node) { + break; + } + + // do not send to publish session + if (pctx->publishing || pctx->paused || s->pause) { + continue; + } + + ss = pctx->session; + cs = &pctx->cs[csidx]; + + if (ss->live_type == NGX_MPEGTS_LIVE || ss->live_type == NGX_HLS_LIVE) { + continue; + } + + /* send gop cache is set */ + switch (ngx_rtmp_gop_send(s, ss)) { + case NGX_DECLINED: + break; + case NGX_ERROR: + ngx_rtmp_finalize_session(ss); + continue; + default: + peers++; + continue; + } + + /* send metadata */ + + if (meta && meta_version != pctx->meta_version) { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: meta"); + + if (ngx_rtmp_send_message(ss, meta, 0) == NGX_OK) { + pctx->meta_version = meta_version; + } + } + + /* sync stream */ + + if (cs->active && (lacf->sync && cs->dropped > lacf->sync)) { + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: sync %s dropped=%uD", MSG_TYPE, cs->dropped); + + cs->active = 0; + cs->dropped = 0; + } + + /* absolute packet */ + + if (!cs->active) { + + if (mandatory) { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: skipping header"); + continue; + } + + if (lacf->wait_video && h->type == NGX_RTMP_MSG_AUDIO && + !pctx->cs[0].active) + { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: waiting for video"); + continue; + } + + if (lacf->wait_key && prio != NGX_RTMP_VIDEO_KEY_FRAME && + (lacf->interleave || h->type == NGX_RTMP_MSG_VIDEO)) + { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: skip non-key"); + continue; + } + + dummy_audio = 0; + if (lacf->wait_video && h->type == NGX_RTMP_MSG_VIDEO && + !pctx->cs[1].active) + { + dummy_audio = 1; + if (dummy == NULL) { + dummy = ngx_rtmp_shared_alloc_frame(cscf->chunk_size, + NULL, 1); + dummy->hdr = clh; + } + } + + if (header || coheader) { + + /* send absolute codec header */ + + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: abs %s header timestamp=%uD", + MSG_TYPE, lh.timestamp); + + if (header) { + header->hdr = lh; + rc = ngx_rtmp_send_message(ss, header, 0); + if (rc != NGX_OK) { + continue; + } + } + + if (coheader) { + coheader->hdr = clh; + rc = ngx_rtmp_send_message(ss, coheader, 0); + if (rc != NGX_OK) { + continue; + } + + } else if (dummy_audio) { + ngx_rtmp_send_message(ss, dummy, 0); + } + + cs->timestamp = lh.timestamp; + cs->active = 1; + ss->current_time = cs->timestamp; + + } + } + + /* send av packet */ + + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: rel %s packet delta=%uD", + MSG_TYPE, delta); + + if (ngx_rtmp_send_message(ss, avframe, prio) != NGX_OK) { + ++pctx->ndropped; + + cs->dropped += delta; + + if (mandatory) { + ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->log, 0, + "live: mandatory packet failed"); + ngx_rtmp_finalize_session(ss); + } + + continue; + } + + cs->timestamp += delta; + ++peers; + ss->current_time = cs->timestamp; + } + + if (avframe) { + ngx_rtmp_shared_free_frame(avframe); + } + + if (dummy) { + ngx_rtmp_shared_free_frame(dummy); + } + + ngx_rtmp_update_bandwidth(&ctx->stream->bw_in, h->mlen); + ngx_rtmp_update_bandwidth(&ctx->stream->bw_out, h->mlen * peers); + + ngx_rtmp_update_bandwidth(h->type == NGX_RTMP_MSG_AUDIO ? + &ctx->stream->bw_in_audio : + &ctx->stream->bw_in_video, + h->mlen); + + return NGX_OK; +} + + +static ngx_int_t +ngx_rtmp_live_publish(ngx_rtmp_session_t *s, ngx_rtmp_publish_t *v) +{ + ngx_rtmp_live_app_conf_t *lacf; + ngx_rtmp_live_ctx_t *ctx; + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + + if (lacf == NULL || !lacf->live) { + goto next; + } + + ngx_log_debug2(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: publish: name='%s' type='%s'", + v->name, v->type); + + /* join stream as publisher */ + + ngx_rtmp_live_join(s, v->name, 1); + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + if (ctx == NULL || !ctx->publishing) { + goto next; + } + + ctx->silent = v->silent; + + if (!ctx->silent) { + ngx_rtmp_send_status(s, "NetStream.Publish.Start", + "status", "Start publishing"); + } + +next: + return next_publish(s, v); +} + + +static ngx_int_t +ngx_rtmp_live_play(ngx_rtmp_session_t *s, ngx_rtmp_play_t *v) +{ + ngx_rtmp_live_app_conf_t *lacf; + ngx_rtmp_live_ctx_t *ctx; + ngx_rtmp_session_t *ps; + + lacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_live_module); + + if (lacf == NULL || !lacf->live || + s->live_type == NGX_HLS_LIVE || s->live_type == NGX_MPEGTS_LIVE) + { + goto next; + } + + ngx_log_debug4(NGX_LOG_DEBUG_RTMP, s->log, 0, + "live: play: name='%s' start=%uD duration=%uD reset=%d", + v->name, (uint32_t) v->start, + (uint32_t) v->duration, (uint32_t) v->reset); + + /* join stream as subscriber */ + + ngx_rtmp_live_join(s, v->name, 0); + + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_live_module); + if (ctx == NULL) { + goto next; + } + + ctx->silent = v->silent; + + if (!ctx->silent && !lacf->play_restart) { + ngx_rtmp_send_status(s, "NetStream.Play.Start", + "status", "Start live"); + ngx_rtmp_send_sample_access(s); + } + + if (s->live_stream->publish_ctx && s->live_stream->publish_ctx->session) { + ps = s->live_stream->publish_ctx->session; + ngx_rtmp_gop_send(ps, s); + } + +next: + return next_play(s, v); +} + + +static ngx_int_t +ngx_rtmp_live_postconfiguration(ngx_conf_t *cf) +{ + ngx_rtmp_core_main_conf_t *cmcf; + ngx_rtmp_handler_pt *h; + + cmcf = ngx_rtmp_conf_get_module_main_conf(cf, ngx_rtmp_core_module); + + /* register raw event handlers */ + + h = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_AUDIO]); + *h = ngx_rtmp_live_av; + + h = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_VIDEO]); + *h = ngx_rtmp_live_av; + + /* chain handlers */ + + next_publish = ngx_rtmp_publish; + ngx_rtmp_publish = ngx_rtmp_live_publish; + + next_play = ngx_rtmp_play; + ngx_rtmp_play = ngx_rtmp_live_play; + + next_close_stream = ngx_rtmp_close_stream; + ngx_rtmp_close_stream = ngx_rtmp_live_close_stream; + + next_pause = ngx_rtmp_pause; + ngx_rtmp_pause = ngx_rtmp_live_pause; + + next_stream_begin = ngx_rtmp_stream_begin; + ngx_rtmp_stream_begin = ngx_rtmp_live_stream_begin; + + next_stream_eof = ngx_rtmp_stream_eof; + ngx_rtmp_stream_eof = ngx_rtmp_live_stream_eof; + + return NGX_OK; +} diff --git a/StreamMedia/流媒体测试服务器搭建.md b/StreamMedia/流媒体测试服务器搭建.md new file mode 100644 index 0000000..4db9328 --- /dev/null +++ b/StreamMedia/流媒体测试服务器搭建.md @@ -0,0 +1,39 @@ +# Nginx 搭建rtmp流媒体服务器 +## 1.源码下载(所有代码放一个路径) +### Nginx-1.17.6:https://nginx.org/en/download.html +### nginx-client-module:https://github.com/AlexWoo/nginx-client-module.git +### nginx-multiport-module:https://github.com/AlexWoo/nginx-multiport-module.git +### nginx-toolkit-module:https://github.com/AlexWoo/nginx-toolkit-module.git +### nginx-multiport-module:https://github.com/AlexWoo/nginx-multiport-module.git + +## 2.解压Nginx + tar -zxvf nginx-1.17.6.tar.gz + +## 3.配置 + 进入nginx-1.17.6路径,执行下面命令: + ./configure --prefix=/home/kelinlang/workspace/install/nginx_rtmp/nginx-1.17.6 --add-module=../nginx-client-module --add-module=../nginx-multiport-module --add-module=../nginx-toolkit-module --add-module=../nginx-rtmp-module --with-http_ssl_module --with-cc-opt="-Wno-error" + 备注:--prefix用于设置安装目录,根据实际情况设置路径 + +## 4.编译安装 + make && make install + +## 5.修改配置文件 + 配置文件路径:/home/kelinlang/workspace/install/nginx_rtmp/nginx-1.17.6/conf/nginx.conf +## 6.启动服务 + 进入安装目录sbin文件夹,执行nginx + 备注:启动服务后出现报端口号错误需要修改配置文件或者杀占用端口号的进程 + + +# ZLMeideaKit搭建rtsp服务器(开源库本身支持H265视频流) +## 1.源码下载 + git clone https://github.com/xiongziliang/ZLMediaKit.git +## 2.更新依赖库 + cd ZLMediaKit + git submodule update --init +## 3.编译 + cd ZLMediaKit + ./build_for_linux.sh +## 4.运行服务器 + 进入路径:/release/linux/Debug + 执行:./MediaServer + 备注:启动服务后会自动生成配置文件config.ini,如果运行服务打印log提示断开被占用需要修改对应端口号 diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云.html b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云.html new file mode 100644 index 0000000..3718082 --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云.html @@ -0,0 +1,338 @@ + + +FFmpeg时间戳详解 - 云+社区 - 腾讯云

\ No newline at end of file diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/AskDialog-201906131103.css b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/AskDialog-201906131103.css new file mode 100644 index 0000000..83ffdfb --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/AskDialog-201906131103.css @@ -0,0 +1,2 @@ +@charset "UTF-8";.qa-mask{left:0;top:0;z-index:9000;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70)}.qa-screenshot{position:fixed;z-index:9001}.qa-screenshot-tools{padding:0 10px;white-space:nowrap;height:40px;line-height:40px;background-color:#fff;border-radius:2px;font-size:0}.qa-screenshot-tools .image-edit-btn{box-sizing:border-box;display:inline-block;vertical-align:middle;margin:0 10px;padding:0;width:24px;height:24px;line-height:24px;text-align:center;border:none;background-color:transparent;font-size:0;cursor:pointer}.qa-screenshot-tools .image-edit-btn:after{content:'';display:inline-block;vertical-align:middle;width:100%;height:100%}.qa-screenshot-tools .image-edit-btn:focus{outline:0}.qa-screenshot-tools .image-edit-btn.rect:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:51.72% 67.22%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.rect.actived:after,.qa-screenshot-tools .image-edit-btn.rect:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:72.91% 0.5599999999999999%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.round:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:26.11% 38.33%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.round.actived:after,.qa-screenshot-tools .image-edit-btn.round:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.49% 38.33%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.arrow:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:38.92% 52.78%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.arrow.actived:after,.qa-screenshot-tools .image-edit-btn.arrow:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:13.3% 52.78%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.brush:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:47.29% 15%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.brush.actived:after,.qa-screenshot-tools .image-edit-btn.brush:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:47.29% 0.5599999999999999%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.099999999999994% 43.89%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text.actived:after,.qa-screenshot-tools .image-edit-btn.text:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.49% 52.78%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.revocation:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:72.91% 15%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.revocation.actived:after,.qa-screenshot-tools .image-edit-btn.revocation:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:26.11% 52.78%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.cancle:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:47.29% 29.439999999999998%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.cancle.actived:after,.qa-screenshot-tools .image-edit-btn.cancle:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.099999999999994% 0.5599999999999999%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.sure:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:38.92% 67.22%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.sure.actived:after,.qa-screenshot-tools .image-edit-btn.sure:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:26.11% 67.22%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.mosaic:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.49% 67.22%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.mosaic.actived:after,.qa-screenshot-tools .image-edit-btn.mosaic:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:13.3% 67.22%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.dot-small{margin:0 1px}.qa-screenshot-tools .image-edit-btn.dot-small:after{width:6px;height:6px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:95.02000000000001% 98.48%;background-size:3783.3333333333335% 3400%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.dot-small.actived:after,.qa-screenshot-tools .image-edit-btn.dot-small:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:98.64% 98.48%;background-size:3783.3333333333335% 3400%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.dot-normal{margin:0 4px}.qa-screenshot-tools .image-edit-btn.dot-normal:after{width:12px;height:12px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:97.67% 94.27%;background-size:1891.6666666666667% 1700%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.dot-normal.actived:after,.qa-screenshot-tools .image-edit-btn.dot-normal:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:97.67% 86.98%;background-size:1891.6666666666667% 1700%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.dot-large{width:auto}.qa-screenshot-tools .image-edit-btn.dot-large:after{width:20px;height:20px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:71.5% 28.799999999999997%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.dot-large.actived:after,.qa-screenshot-tools .image-edit-btn.dot-large:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:11.110000000000001% 79.89%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text-small{margin:0 2px}.qa-screenshot-tools .image-edit-btn.text-small:after{vertical-align:baseline;margin-top:10px;width:8px;height:10px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:59.81999999999999% 69.59%;background-size:2837.5% 2039.9999999999998%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text-small.actived:after,.qa-screenshot-tools .image-edit-btn.text-small:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:87.67% 90.21000000000001%;background-size:2837.5% 2039.9999999999998%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text-normal{margin:0 3px}.qa-screenshot-tools .image-edit-btn.text-normal:after{vertical-align:baseline;margin-top:7px;width:10px;height:13px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:96.77% 79.58%;background-size:2270% 1569.230769230769%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text-normal.actived:after,.qa-screenshot-tools .image-edit-btn.text-normal:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:96.77% 71.73%;background-size:2270% 1569.230769230769%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text-large{margin:0 5px}.qa-screenshot-tools .image-edit-btn.text-large:after{vertical-align:baseline;margin-top:3px;width:14px;height:17px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:37.09% 36.9%;background-size:1621.4285714285716% 1200%;;background-repeat:no-repeat}.qa-screenshot-tools .image-edit-btn.text-large.actived:after,.qa-screenshot-tools .image-edit-btn.text-large:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:49.3% 50.8%;background-size:1621.4285714285716% 1200%;;background-repeat:no-repeat}.qa-screenshot-tools .split{display:inline-block;vertical-align:middle;margin:0 10px;width:1px;height:20px;background-color:#ddd}.qa-screenshot-tools [class*=' color-'],.qa-screenshot-tools [class^=color-]{margin:0 4px;border:1px solid #ccc;border-width:.5px}.qa-screenshot-tools .split+[class*=' color-'],.qa-screenshot-tools .split+[class^=color-]{margin-left:10px}.qa-screenshot-tools [class*=' color-']:last-child,.qa-screenshot-tools [class^=color-]:last-child{margin-right:10px}.qa-screenshot-tools [class*=' color-'].actived,.qa-screenshot-tools [class^=color-].actived{border-color:#888}.qa-screenshot-tools .image-edit-btn.color-red{background-color:#db4e33}.qa-screenshot-tools .image-edit-btn.color-yellow{background-color:#f9e96a}.qa-screenshot-tools .image-edit-btn.color-green{background-color:#9fe561}.qa-screenshot-tools .image-edit-btn.color-blue{background-color:#67b1f3}.qa-screenshot-tools .image-edit-btn.color-gray{background-color:#676767}.qa-screenshot-tools .image-edit-btn.color-white{background-color:#fff}.qa-screenshot-tools.sub{position:absolute;top:100%;margin-top:10px}.qa-screenshot-tools.sub:before{content:'';position:absolute;left:50%;bottom:100%;margin-left:-5px;border-style:solid;border-color:#fff transparent;border-width:0 5px 5px}.qa-r-editor-container{position:relative;padding-top:55px;border:1px solid #e5e5e5;background-color:#fff}.qa-r-editor-toolbar{position:absolute;left:0;top:0;z-index:100;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:0 18px;height:54px;border-bottom:1px solid #e5e5e5;background-color:#f7f8fa;line-height:54px;font-size:0}.qa-r-editor-btns{overflow:hidden}.qa-r-editor-btns-inner{-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;-webkit-transform:translate3d(-365px,0,0);transform:translate3d(-365px,0,0)}.qa-r-editor-btn-wrap{display:inline-block;vertical-align:middle;margin-right:11px}.qa-r-editor-btn{display:inline-block;vertical-align:middle;padding:0;width:20px;height:20px;border:none;background-color:transparent;cursor:pointer;text-align:center;line-height:20px}.qa-r-editor-btn i{display:inline-block;vertical-align:middle;width:16px;height:16px;font-size:0;font-style:normal}.qa-r-editor-btn.disabled{opacity:.5;cursor:not-allowed}.qa-ico-bold,.qa-r-editor-btn.disabled .qa-ico-bold,.qa-r-editor-btn.disabled:hover .qa-ico-bold{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:67.77% 78.19%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-bold,.qa-r-editor-btn:hover .qa-ico-bold{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 0.53%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-italic,.qa-r-editor-btn.disabled .qa-ico-italic,.qa-r-editor-btn.disabled:hover .qa-ico-italic{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:43.13% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-italic,.qa-r-editor-btn:hover .qa-ico-italic{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:51.66% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-underline,.qa-r-editor-btn.disabled .qa-ico-underline,.qa-r-editor-btn.disabled:hover .qa-ico-underline{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:17.54% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-underline,.qa-r-editor-btn:hover .qa-ico-underline{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:26.07% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-code,.qa-r-editor-btn.disabled .qa-ico-code,.qa-r-editor-btn.disabled:hover .qa-ico-code{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 48.4%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-code,.qa-r-editor-btn:hover .qa-ico-code{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 57.98%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-h,.qa-r-editor-btn.disabled .qa-ico-h,.qa-r-editor-btn.disabled:hover .qa-ico-h{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:26.07% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-h,.qa-r-editor-btn:hover .qa-ico-h{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:34.599999999999994% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-blockquote,.qa-r-editor-btn.disabled .qa-ico-blockquote,.qa-r-editor-btn.disabled:hover .qa-ico-blockquote{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:59.24% 78.19%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-blockquote,.qa-r-editor-btn:hover .qa-ico-blockquote{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:50.71% 78.19%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-code-block,.qa-r-editor-btn.disabled .qa-ico-code-block,.qa-r-editor-btn.disabled:hover .qa-ico-code-block{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 29.26%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-code-block,.qa-r-editor-btn:hover .qa-ico-code-block{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 38.83%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-ol,.qa-r-editor-btn.disabled .qa-ico-ol,.qa-r-editor-btn.disabled:hover .qa-ico-ol{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 26.06%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-ol,.qa-r-editor-btn:hover .qa-ico-ol{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 16.49%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-ul,.qa-r-editor-btn.disabled .qa-ico-ul,.qa-r-editor-btn.disabled:hover .qa-ico-ul{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:9% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-ul,.qa-r-editor-btn:hover .qa-ico-ul{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.47000000000000003% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-pic,.qa-r-editor-btn.disabled .qa-ico-pic,.qa-r-editor-btn.disabled:hover .qa-ico-pic{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 45.21%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-pic,.qa-r-editor-btn:hover .qa-ico-pic{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 35.64%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-link,.qa-r-editor-btn.disabled .qa-ico-link,.qa-r-editor-btn.disabled:hover .qa-ico-link{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 0.53%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-link,.qa-r-editor-btn:hover .qa-ico-link{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:77.25% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-delete-link,.qa-r-editor-btn.disabled .qa-ico-delete-link,.qa-r-editor-btn.disabled:hover .qa-ico-delete-link{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 67.55%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-delete-link,.qa-r-editor-btn:hover .qa-ico-delete-link{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 77.13%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ico-arrow,.qa-r-editor-btn.disabled .qa-ico-arrow,.qa-r-editor-btn.disabled:hover .qa-ico-arrow{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:99.53% 29.26%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-arrow,.qa-r-editor-btn:hover .qa-ico-arrow{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:99.53% 10.11%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-spliter{display:inline-block;vertical-align:middle;margin-right:11px;width:1px;height:16px;background-color:#ccc}.qa-r-editor{position:relative;padding:20px 15px;min-height:180px}.qa-r-editor-toolbar-more .qa-r-editor-btns-inner{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.qa-r-editor-toolbar-more .qa-r-editor-btn-trigger .qa-ico-arrow{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:99.53% 0.53%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-toolbar-more .qa-r-editor-btn-trigger:hover .qa-ico-arrow{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:85.78% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-r-editor-container.disabled .qa-r-editor-toolbar:after{content:'';position:absolute;left:0;top:0;width:100%;height:100%}.qa-r-editor-container.disabled .qa-r-editor-btn{opacity:.5}.qa-r-editor-tip{position:relative;height:180px;text-align:center;color:#888}.qa-r-editor-tip:before{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.qa-r-editor-tip .tip-cnt{display:inline-block;vertical-align:middle;max-width:98%}.qa-r-editor-bubble{position:absolute;left:18px;right:18px;top:100%;margin-top:-8px;color:#444;z-index:900}.qa-r-editor-bubble-inner{font-size:12px;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #e5e5e5;border-radius:2px;background-color:#fff;line-height:18px;position:static !important;left:310px;top:50%;padding:10px 100px 10px 10px;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.qa-r-editor-bubble-inner:after,.qa-r-editor-bubble-inner:before{font-size:0;position:absolute;width:0;height:0;content:'';border:8px dashed transparent;bottom:100%;left:inherit;right:inherit;margin-bottom:-1px;border-bottom-style:solid}.qa-r-editor-bubble-inner:before{margin-left:-8px;border-bottom-color:#e5e5e5}.qa-r-editor-bubble-inner:after{margin-left:-7px;border-bottom-color:#fff}.qa-r-editor-bubble-input{font-size:14px;width:100%;height:30px;line-height:18px;display:inline-block;padding:5px 10px;border:1px solid #d1d2d3;border-radius:2px;color:#171d25;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:inherit}.qa-r-editor-bubble-input::-webkit-input-placeholder{color:#888}.qa-r-editor-bubble-input::-moz-placeholder{color:#888}.qa-r-editor-bubble-input:-ms-input-placeholder{color:#888}.qa-r-editor-bubble-input::placeholder{color:#888}.qa-r-editor-bubble-input.error{border:1px solid #e54545;color:#e54545}.qa-r-editor-bubble-btns{position:absolute;right:0;top:10px;width:100px;text-align:center;font-size:0}.qa-r-editor-bubble-btn{display:inline-block;vertical-align:middle;padding:0 8px;border:none;background-color:transparent;font-size:14px;line-height:30px;cursor:pointer;color:#00a4ff}.qa-r-editor-bubble-btn:hover{text-decoration:none;color:#0092ee}.qa-r-editor-bubble-btn-weak{color:#888}.qa-r-editor-bubble-btn-weak:hover{color:#0092ee}.qa-r-editor-bubble-tip.error{margin:5px 0 0;color:#e54545;font-size:14px}.qa-r-editor.draft-editor-host.c-markdown{white-space:normal;font-size:14px;line-height:1.5}.qa-r-editor.draft-editor-host.c-markdown h1:first-child,.qa-r-editor.draft-editor-host.c-markdown h2:first-child,.qa-r-editor.draft-editor-host.c-markdown h3:first-child,.qa-r-editor.draft-editor-host.c-markdown h4:first-child,.qa-r-editor.draft-editor-host.c-markdown h5:first-child,.qa-r-editor.draft-editor-host.c-markdown h6:first-child{margin-top:0}.qa-r-editor.draft-editor-host.c-markdown .public-DraftEditor-content{padding:15px}.qa-r-editor.draft-editor-host.c-markdown blockquote,.qa-r-editor.draft-editor-host.c-markdown div.paragraph,.qa-r-editor.draft-editor-host.c-markdown figure,.qa-r-editor.draft-editor-host.c-markdown img,.qa-r-editor.draft-editor-host.c-markdown p,.qa-r-editor.draft-editor-host.c-markdown pre{margin:0 0 10px}.qa-r-editor.draft-editor-host.c-markdown p{min-height:0}.qa-r-editor.draft-editor-host.c-markdown ol,.qa-r-editor.draft-editor-host.c-markdown ul{margin:0 0 15px}.qa-ani-loading{text-align:center}.qa-ani-loading>div{display:inline-block;width:8px;height:8px;border-radius:100%;background-color:#00a4ff;-webkit-animation:bouncedelay .7s infinite ease-in-out both;animation:bouncedelay .7s infinite ease-in-out both;text-align:center;margin-left:4px;margin-right:4px}.qa-ani-loading .one{-webkit-animation-delay:-.32s;animation-delay:-.32s}.qa-ani-loading .two{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(.5);opacity:1}40%{-webkit-transform:scale(1);opacity:.8}}@keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(.5);transform:scale(.5);opacity:1}40%{transform:scale(1);-webkit-transform:scale(1);opacity:.8}}.qa-notice-channel{margin-bottom:30px;padding:20px;border-radius:4px;background-color:#f7f8fa}.qa-notice-channel .c-input-list{display:inline-block;vertical-align:middle;padding-top:0}.qa-notice-channel .c-input-list label{margin-bottom:0;margin-right:20px;min-width:0;cursor:pointer}.qa-notice-channel .c-input-text{-webkit-box-sizing:border-box;box-sizing:border-box;margin-right:20px;width:150px;height:36px;line-height:24px}.qa-notice-channel .notice-channel-text{margin-bottom:10px;font-size:14px;color:#000}.qa-notice-channel .channel-setting{margin-top:10px;font-size:0}.qa-notice-channel .channel-setting .c-input-text{margin-right:10px}.qa-notice-channel .input-email{width:200px}.qa-notice-channel .input-code{width:120px}.qa-notice-channel .c-btn{margin-left:0;margin-right:10px;padding:0 10px;min-width:80px;height:36px;line-height:34px;vertical-align:middle}.qa-notice-channel .btn-counting{width:110px}.qa-notice-channel .channel-ft{margin-top:20px;padding-top:20px;border-top:1px solid #ddd}.qa-notice-channel .channel-ft .c-btn-link{min-width:0}.qa-notice-channel .c-f-tip-word.error{color:#e54545;font-size:14px}.qa-notice-channel p.c-f-tip-word.error{margin-top:5px}.qa-dialog{position:absolute;z-index:9001;background-color:#fff;padding:50px 0 30px;-webkit-box-sizing:border-box;box-sizing:border-box;width:560px;text-align:left;white-space:normal;border-radius:4px;font-family:PingFangSC-Light,'helvetica neue','hiragino sans gb',arial,'microsoft yahei ui','microsoft yahei',simsun,sans-serif;font-size:14px;line-height:1.5;color:#444}.qa-dialog :focus{outline:0}.qa-dialog-hd{margin-bottom:20px;padding:0 30px}.qa-dialog-title{margin:0;font-size:18px;font-weight:400;color:#000;line-height:1.1}.qa-dialog-close{position:absolute;right:27px;top:27px;font-size:0;text-align:center}.qa-dialog-close:before{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:42.18% 78.19%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-dialog-close:hover:before{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:77.25% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-dialog-bd{padding-left:30px;padding-right:30px}.qa-dialog-ft{padding-left:30px;padding-right:30px;margin-top:30px;text-align:center;font-size:0}.qa-dialog-ft .c-btn{margin:0 5px;padding:0 20px;min-width:0}.qa-dialog-btn .qa-ani-loading>div{background-color:#fff}.qa-dialog.small{width:360px}.qa-dialog.large{width:1000px}.qa-dialog.without-close{padding-top:30px}.qa-dialog-mask,.qa-mask{position:fixed;left:0;top:0;z-index:9000;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70)}.qa-dialog-container{position:fixed;left:0;top:0;z-index:9001;-webkit-box-sizing:border-box;box-sizing:border-box;padding:50px 0;width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center;white-space:nowrap}.qa-dialog-container:before{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.qa-dialog-container .qa-dialog{display:inline-block;vertical-align:middle;position:relative}.qa-dialog-confirm{width:auto;min-width:360px;max-width:560px}.qa-dialog-confirm .qa-dialog-hd{margin-bottom:12px}.qa-dialog-confirm-cnt{min-height:40px}.qa-dialog-confirm.error .qa-dialog-title,.qa-dialog-confirm.success .qa-dialog-title{position:relative;padding-left:42px}.qa-dialog-confirm.error .qa-dialog-title .icon,.qa-dialog-confirm.success .qa-dialog-title .icon{position:absolute;left:0;top:-7px;width:32px;height:32px;background-size:709.375% 637.5%;;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.51% 0.58%;background-repeat:no-repeat}.qa-dialog-confirm.success .qa-dialog-title .icon{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:17.95% 0.58%;background-size:709.375% 637.5%;;background-repeat:no-repeat}.qa-dialog-confirm.error .qa-dialog-bd,.qa-dialog-confirm.success .qa-dialog-bd{padding-left:72px}.qa-dialog .c-btn{height:35px;border-radius:2px;color:#fff;font-size:14px;line-height:35px;text-align:center;display:inline-block;cursor:pointer;outline:0;box-sizing:border-box;padding:0 10px;min-width:90px;background-color:#00a4ff}.qa-dialog .c-btn:hover{text-decoration:none;background-color:#0092ee}.qa-dialog .c-btn-pay{background-color:#ff7200}.qa-dialog .c-btn-pay:hover{background-color:#f06c00}.qa-dialog .c-btn-disabled,.qa-dialog .c-btn-disabled:hover{background-color:#d5d7de;cursor:default}.qa-dialog .c-btn-hole{border:1px solid #00a4ff;background-color:#fff;color:#00a4ff;line-height:33px}.qa-dialog .c-btn-hole-white{border:1px solid #fff;background:0 0;color:#fff;line-height:33px}.qa-dialog .c-btn-hole:hover{background-color:#0092ee;border:1px solid #0092ee;color:#fff}.qa-dialog .c-btn-hole-white:hover{background-color:#fff;color:#0092ee}.qa-dialog .c-btn-weak{background:#fcfcfc;border:1px solid #d1d2d3;color:#00a4ff;line-height:33px}.qa-dialog .c-btn-weak:hover{background:#f2f2f2;border:1px solid #b4b7bf}.qa-dialog .c-btn-longer{width:220px}.qa-dialog .c-btn-big{height:45px;line-height:45px;font-size:16px}.qa-dialog .c-btn-small{height:30px;line-height:28px;min-width:100px;font-size:14px}.qa-dialog .c-link{color:#00a4ff;display:inline-block;margin:0 10px;font-size:14px}.qa-quickask-dialog .c-loading{text-align:center}.qa-quickask-dialog .c-loading .c-loading-inner>div{display:inline-block;width:10px;height:10px;border-radius:100%;background-color:#00a4ff;-webkit-animation:askBouncedelay .7s infinite ease-in-out both;animation:askBouncedelay .7s infinite ease-in-out both;text-align:center;margin-left:4px;margin-right:4px}.qa-quickask-dialog .c-loading .c-loading-inner .one{-webkit-animation-delay:-.32s;animation-delay:-.32s}.qa-quickask-dialog .c-loading .c-loading-inner .two{-webkit-animation-delay:-.16s;animation-delay:-.16s}@keyframes askBouncedelay{0%,100%,80%{-webkit-transform:scale(.5);transform:scale(.5);opacity:1}40%{transform:scale(1);-webkit-transform:scale(1);opacity:.8}}.qa-quickask-dialog .c-btn{height:36px;min-width:140px;padding:0 20px;background-color:#00a4ff;border:1px solid transparent;border:none;color:#fff;font-size:14px;line-height:34px;text-align:center;display:inline-block;cursor:pointer;outline:0;box-sizing:border-box}.qa-quickask-dialog .c-btn:hover{text-decoration:none;background-color:#0092ee}.qa-quickask-dialog .c-btn-weak{background:0 0;border:1px solid #DCDEE6;color:#666}.qa-quickask-dialog .c-btn-weak:hover{background:0 0;border:1px solid #999;color:#000}.qa-quickask-dialog .c-btn-hole{border:1px solid #00a4ff;background-color:transparent;color:#00a4ff}.qa-quickask-dialog .c-btn-hole:hover{background-color:rgba(0,164,255,.15);border:1px solid #00a4ff;color:#00a4ff}.qa-quickask-dialog .c-btn-disabled,.qa-quickask-dialog .c-btn-disabled:hover{background-color:#ddd;border-color:#ddd;color:#999;cursor:default}.qa-quickask-dialog .c-btn.loading{cursor:default}.qa-quickask-dialog .c-btn.loading .text{display:none}.qa-quickask-dialog .c-btn.loading .c-loading{display:block}.qa-quickask-dialog .c-btn .c-loading-inner>div{background-color:#fff;vertical-align:middle}.qa-quickask-dialog .c-btn.loading:hover{background-color:#00a4ff}.qa-quickask-dialog .c-btn-hole.loading:hover{background-color:#fff}.qa-quickask-dialog .c-btn-weak .c-loading-inner>div{background-color:#ddd}.qa-quickask-dialog .c-btn-weak.loading:hover{background-color:#fff;border-color:#ddd}.qa-quickask-dialog .c-btn-disabled .c-loading-inner>div{background-color:#fff}.qa-quickask-dialog .c-btn-disabled.loading:hover{background-color:#d5d7de}#qc-quickask-root .c-modal-mask{display:table-cell;vertical-align:middle;text-align:center;position:fixed;left:0;top:0;z-index:9000;width:100%;height:100%;background-color:#000;background-color:rgba(0,0,0,.7)}#qc-quickask-root .c-modal{position:fixed;z-index:9000;left:0;top:0;width:100%;height:100%}.qa-quickask-dialog-container.c-modal-visible{display:block;overflow-y:auto;text-align:center}.qa-quickask-dialog-container.c-modal-visible:before{content:' ';display:inline-block;vertical-align:middle;height:100%}.qa-quickask-dialog-container.c-modal-visible .c-modal-inner{display:inline-block;vertical-align:middle}.qa-quickask-dialog.c-dialog{display:block;padding-bottom:0;width:900px;max-width:99%;text-align:left;margin-left:auto;margin-right:auto;background-color:#fff}.qa-quickask-dialog .c-dialog-hd{position:relative;z-index:2}.qa-quickask-dialog .c-dialog-hd-title{font-size:16px;line-height:65px;font-weight:700;color:#333;padding-left:25px;display:block}.qa-quickask-dialog .c-dialog-hd-close{position:absolute;width:40px;height:40px;right:11px;top:50%;margin-top:-20px;background-color:transparent;font-size:0;text-align:center}.qa-quickask-dialog .c-dialog-hd-close span{display:none}.qa-quickask-dialog .c-dialog-hd-close:before{content:"";display:inline-block;vertical-align:middle;width:25px;height:25px;background-image:url(sprite/AskDialog-201906131103.svg);;background-size:908% 816%;;background-position:34.160000000000004% 0.5599999999999999%;background-repeat:no-repeat}.qa-quickask-dialog .c-dialog-hd-close:hover:before{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:34.160000000000004% 15.64%;background-size:908% 816%;;background-repeat:no-repeat}.qa-quickask-dialog .c-dialog-hd-close:after{content:"";display:inline-block;width:0;height:100%;vertical-align:middle}.qa-quickask-dialog .c-dialog-ft{text-align:center;padding:20px 25px 40px}.qa-quickask-dialog .c-dialog-ft .c-btn{margin:0 5px;padding-left:10px;padding-right:10px;min-width:100px;vertical-align:middle}.qa-quickask-dialog .c-dialog-bd{padding:0 25px;min-height:50px;max-height:inherit;overflow:hidden;overflow-y:auto;font-size:14px;color:#666;line-height:1.5;-webkit-overflow-scrolling:touch}.qa-quickask-form-item{margin-bottom:20px}.qa-quickask-form-item:last-child{margin-bottom:0}.qa-quickask-form-item.tag-item{margin-top:-10px}.qa-quickask-form-title{margin-bottom:10px;display:block;line-height:1.1;color:#000}.qa-quickask-dialog .qa-search-bar{width:100%;box-sizing:border-box}.qa-quickask-input{-webkit-box-sizing:border-box;box-sizing:border-box;padding:4px 15px;width:100%;height:45px;border:1px solid #e5e5e5;background-color:#fff;color:#444;line-height:35px;font-size:14px}.qa-quickask-input:focus,.qa-quickask-input:hover{border-color:#00a4ff;outline:0}.qa-quickask-input.error{border-color:#e54545}.qa-quickask-validate{margin-top:8px;margin-bottom:-10px;color:#e54545}.qa-quickask-count-validate{text-align:right}.qa-quickask-tip{margin-bottom:10px}.qa-quickask-dialog .com-2-tag-cont .com-2-text,.qa-quickask-dialog .qa-r-editor-container,.qa-quickask-dialog .qa-r-editor-container>.qa-r-editor-toolbar{border-radius:0}.qa-quickask-dialog .qa-r-editor-container .image-content img{max-height:200px}.qa-quickask-dialog .qa-r-editor.draft-editor-host.c-markdown .table-editor-context-menu ul{margin:0}.qa-quickask-dialog .qa-r-editor-container .image-block .image-block-actions{bottom:15px}.qa-quickask-dialog .inform-mode{padding-top:5px;padding-bottom:5px}.qa-ask-check-item{display:inline-block;vertical-align:top;position:relative;margin-right:10px;padding-left:21px;cursor:pointer;word-wrap:break-word;line-height:21px}.qa-ask-check-item.disabled{cursor:default;color:#999}.qa-ask-check-item.block{margin-right:0;display:block}.qa-ask-check-item span{vertical-align:middle}.qa-ask-check-item .weak-text{color:#999}.qa-ask-check-item .qa-ask-checkbox{position:absolute;left:0;top:3px}.qa-ask-checkbox{width:16px;height:16px;cursor:pointer;vertical-align:middle;outline:0;background:0 0\9;background-image:url(sprite/AskDialog-201906131103.svg);;-webkit-appearance:none;background-position:60.19% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ask-checkbox:focus,.qa-ask-checkbox:hover{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.19% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ask-checkbox:checked,.qa-ask-checkbox:checked:focus,.qa-ask-checkbox:checked:hover{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:68.72% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ask-checkbox[disabled]{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 64.36%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-ask-checkbox[disabled]:checked{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 54.790000000000006%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.form-ctrl-label.disabled,.qa-ask-checkbox-wrap.disabled,.qa-ask-checkbox[disabled],.qa-ask-checkbox[disabled]+label{cursor:default;cursor:not-allowed}.qa-modification a{color:#00a4ff}.qa-search-panel{box-sizing:border-box;background:url(src/projects/AskDialog/cssComponents/img/banner.png) center top no-repeat #1E232D;background-size:auto 100%;padding-top:90px;height:255px;min-width:1000px}.qa-search-panel .logo{margin-bottom:30px;font-size:24px;line-height:1.1;color:#000;text-align:center}.qa-search-panel .logo a{color:inherit}.qa-search-panel .logo a:hover{color:#00a4ff;text-decoration:none}.qa-search-panel .com-search-bar{display:block;margin:0 auto;width:650px}.qa-search-panel .com-search-bar .search-input{padding:10px 46px 10px 15px;height:40px}.qa-search-panel .com-search .search-btn{width:46px;line-height:40px;text-align:center}.qa-search-bar{position:relative;margin:0 auto;width:650px}.qa-search{position:relative;display:block}.qa-search .search-input{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:10px 46px 10px 15px;width:100%;height:40px;border:none;border-radius:2px;font-size:14px;line-height:20px;color:#000;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.qa-search input::-webkit-input-placeholder{color:#999}.qa-search input::-moz-placeholder{color:#999}.qa-search input:-ms-input-placeholder{color:#999}.qa-search input::placeholder{color:#999}.qa-search .search-btn{position:absolute;right:0;top:0;width:46px;height:100%;border:none;background-color:transparent;line-height:40px;font-size:0;text-align:center}.qa-search .search-btn:after{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 83.50999999999999%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-search .search-btn:hover:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 73.94%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-search-bar.in-header{margin:0;width:auto;-webkit-transition:all .2s;transition:all .2s}.qa-search-bar.in-header .search-input{padding:7px 34px 7px 9px;height:34px;-webkit-box-shadow:none;box-shadow:none;background:#444}.qa-search-bar.in-header .search-input:focus{background:#fff}.qa-search-bar.in-header .search-btn{width:34px;line-height:34px}.qa-search-bar.in-header.hidden{opacity:0;visibility:hidden;pointer-events:none}.qa-search-bar.in-header.focus .search-input{background:#fff}.qa-search-bar.in-header.focus .search-btn:after{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 73.94%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qc-header-search{position:absolute;left:50%;top:13px;box-sizing:border-box;margin-left:-500px;width:1000px;-webkit-transition:opacity .2s;transition:opacity .2s}.qc-header-search.hidden{opacity:0;visibility:hidden;pointer-events:none}.qc-header-search .qa-search-bar{width:650px}.qa-search-dropdown{display:none;position:absolute;left:0;top:100%;z-index:900;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:5px;width:100%;border-radius:2px;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3);background:#fff}.qa-search-bar.show .qa-search-dropdown{display:block}.qa-search-dropdown-bd{overflow-x:hidden;overflow-y:auto;max-height:400px;padding-top:10px}.qa-search-dropdown-group{margin-bottom:10px}.qa-search-dropdown-group dt{padding:0 20px;font-size:14px;line-height:35px;color:#888}.qa-search-dropdown-group .link{display:block;padding:10px 20px;font-size:14px;line-height:15px;color:#444;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.qa-search-dropdown-group .link.hover,.qa-search-dropdown-group .link:hover{background-color:#f7f8fa;color:#00a4ff;text-decoration:none}.qa-search-dropdown-group .link .avatar,.qa-search-dropdown-group .link img{position:relative;top:-1px;vertical-align:middle;margin-right:9px;width:32px;height:32px;border-radius:50%}.qa-search-dropdown-group .link .avatar{display:inline-block;background-size:cover;background-position:center}.qa-search-dropdown-group .tag-icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:9px;width:32px;height:32px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.51% 20.349999999999998%;background-size:709.375% 637.5%;;background-repeat:no-repeat}.qa-search-dropdown-keywords{font-size:0;margin-left:20px}.qa-search-dropdown-keywords a{display:inline-block;vertical-align:middle;padding:5px 0;margin-right:20px;max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;color:#444;line-height:24px}.qa-search-dropdown-keywords a:hover{color:#00a4ff;text-decoration:none}.qa-search-dropdown-history dt{position:relative;margin-bottom:10px;background-color:#f7f8fa}.qa-search-dropdown-history .link-clear{position:absolute;right:15px;top:0;padding:0 5px}.qa-search-dropdown-history .link-clear .qa-i-delete{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.47000000000000003% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-search-dropdown-history .link-clear:hover .qa-i-delete{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:9% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-search-dropdown-history .link{position:relative;padding-right:50px}.qa-search-dropdown-history .link-btn{position:absolute;right:15px;top:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px;height:100%;background-color:transparent;border:none;opacity:0;visibility:hidden;-webkit-transition:all .2s;transition:all .2s;cursor:pointer}.qa-search-dropdown-history .link-btn .qa-i-close{position:relative;top:-2px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 19.68%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-search-dropdown-history .link-btn:hover .qa-i-close{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:82.46% 10.11%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.qa-search-dropdown-history .link:hover .link-btn{opacity:1;visibility:visible}.qa-search-dropdown-ft{-webkit-box-sizing:border-box;box-sizing:border-box;height:46px;background-color:#f7f8fa;border-top:1px solid #e5e5e5;line-height:45px;font-size:14px;overflow:hidden}.qa-search-dropdown-ft .link-more{display:block;color:#444;text-align:center}.qa-search-dropdown-ft .link-more:hover{color:#00a4ff;text-decoration:none}.qa-search-dropdown-ft .link-clear{float:right;margin-right:30px}.qa-search-dropdown.only-one-group .qa-search-dropdown-bd{max-height:none}.qa-search-dropdown.only-one-group .qa-search-dropdown-history dt{background-color:transparent}.qa-search-dropdown.only-one-group .qa-search-dropdown-history dd{max-height:300px;overflow-x:hidden;overflow-y:auto}.qa-search-keywords{margin:10px auto -5px;width:650px}.qa-search-keywords:after{content:'';display:table;clear:both}.qa-search-keywords a{float:left;margin-right:10px;font-size:14px;line-height:24px;color:#fff}.dialog-ask-finished .notice-channel-text{margin-bottom:10px;font-size:14px;color:#000}.dialog-ask-finished .channel-setting{margin-top:10px}.dialog-ask-finished .channel-setting .c-input-text{font-size:14px;line-height:23px;height:23px;display:inline-block;padding:5px 10px;border:1px solid #d1d2d3;border-radius:2px;color:#171d25;vertical-align:middle;box-sizing:content-box;margin-right:10px}.dialog-ask-finished .input-email{width:200px}.dialog-ask-finished .input-code{width:120px}.dialog-ask-finished .c-btn,.dialog-ask-finished .c-input-list input,.dialog-ask-finished .c-input-list span{vertical-align:middle}.com-tab-hd{position:relative;border-bottom:1px solid #e5e5e5}.com-tab-hd .com-tab-ctrl{border-bottom:none}.com-tab-hd-extra{position:absolute;right:0;top:0}.com-tab-ctrl{border-bottom:1px solid #e5e5e5;font-size:0}.com-tab-item{display:inline-block;vertical-align:middle;margin-right:10px}.com-tab-item:last-child{margin-right:0}.com-tab-item a{position:relative;display:block;padding:0 20px;height:32px;color:#999;font-size:12px;line-height:32px}.com-tab-item a:hover{color:#00a4ff}.com-tab-item.actived a,.com-tab-item.actived a:hover{color:#333;cursor:default;font-weight:700}.com-tab-item.actived a:after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background-color:#00a4ff}.com-tab-panel{padding-top:20px}.com-tab-hd.large .com-tab-ctrl{border-bottom-color:#E1E3E9}.com-tab-hd.large .com-tab-item a{height:42px;font-size:16px;line-height:42px}.com-tab-hd.large .com-tab-item.actived a,.com-tab-hd.large .com-tab-item.actived a:hover{font-weight:400;color:#00a4ff}.com-tab-hd.large .com-tab-item.actived a:after{height:3px}.com-tab-hd.large .com-tab-item .num{margin-left:5px;font-size:12px}.com-tab-hd.large .com-tab-subctrl{padding-top:9px}.com-tab.large .com-tab-panel{padding-top:30px}.com-tab-subctrl{font-size:0}.com-tab-subctrl li{display:inline-block;vertical-align:middle}.com-tab-subctrl li:before{content:'';display:inline-block;vertical-align:middle;margin:0 15px;width:1px;height:18px;background:#D9D9D9}.com-tab-subctrl li:first-child:before{display:none}.com-tab-subctrl a{display:inline-block;vertical-align:middle;font-size:14px;line-height:24px;color:#333;text-align:center}.com-tab-subctrl a:hover{color:#00a4ff;text-decoration:none}.com-tab-subctrl .actived a{color:#00a4ff;font-weight:700;cursor:default}.com-tag-v2-list{font-size:0;margin-bottom:-10px}.com-tag-v2{box-sizing:border-box;display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;max-width:calc(100% - 10px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 5px;height:18px;font-size:12px;line-height:16px;border-radius:2px;border:1px solid #E8ECF3;color:#666;background-color:#fff}a.com-tag-v2:hover{border-color:#FE7902;background-color:#FAECE0;color:#FE7902}.com-tag-v2-list.highlight .com-tag-v2{border-color:transparent;background-color:#FAECE0;color:#FE7902}.com-tag-v2-list.highlight a.com-tag-v2:hover{border-color:#FE7902;background-color:#FAECE0;color:#FE7902}.com-tag-v2-list.gray .com-tag-v2{border-color:transparent;background-color:#F3F5F9;color:#333}.com-tag-v2-list.gray a.com-tag-v2:hover{border-color:transparent;background-color:#d2d9e7}.com-tag-v2-list.gray .com-tag-v2.disabled,.com-tag-v2-list.gray .com-tag-v2.disabled:hover{color:#999;background-color:#F3F5F9;cursor:not-allowed}.com-tag-v2-list.gray .com-tag-v2.actived,.com-tag-v2-list.gray .com-tag-v2.actived:hover{background-color:#00a4ff;color:#fff}.com-tag-v2-list.large>li{display:inline-block;vertical-align:middle;max-width:100%}.com-tag-v2-list.large .com-tag-v2{padding:0 10px;height:26px;font-size:12px;line-height:24px;max-width:none;display:block}.com-tag-v2-list.large .com-tag-v2-icon{position:relative;top:-1px;vertical-align:middle;width:16px;height:16px;margin-right:10px;margin-left:-6px}.com-tag-v2-list.large.in-side{padding:15px 15px 5px;border-bottom:1px solid #D2D9E7}.com-2-tag-cont{padding:11px 5px 1px 15px;position:relative;z-index:1;min-height:45px;box-sizing:border-box;font-size:0}.com-2-tag-cont .com-2-tag-txt,.com-2-tagsinput-list dd a{display:inline-block;font-size:12px;line-height:22px;background-color:#F3F5F9;padding:0 8px;color:#333;margin-right:10px;margin-bottom:10px}.com-2-tag-cont .com-2-tag-txt span{display:inline-block;vertical-align:middle;max-width:10em;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-tagsinput-list dd a:hover{border-color:#00a4ff}.com-2-tag-cont .com-2-tag-input{width:auto;max-width:10em;border:0;background:0 0;outline:0;line-height:22px;height:22px;font-size:12px;color:#333}.com-2-tag-cont .com-2-text{box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:0;z-index:-1;border:1px solid #e5e5e5;border-radius:2px;padding:0 15px;font-size:14px;line-height:42px;color:#999}.com-2-tag-cont .com-2-text:hover,.com-2-tag-input:focus+.com-2-text,.com-2-tag-input:hover{border-color:#00a4ff}.com-2-tag-txt{cursor:default}.com-2-tag-txt .com-2-btn-close{cursor:pointer;display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/AskDialog-201906131103.svg);;margin-right:-5px;margin-left:8px;background-position:99.53% 19.68%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-2-tagsinput-list{font-size:12px;padding-left:60px;margin-top:10px}.com-2-tagsinput-list dt{float:left;margin-left:-60px;color:#999;line-height:21px}.com-2-tagsinput-list dd{display:inline-block;vertical-align:middle}.com-2-tagsinput-list dd a{display:block;margin-right:10px;margin-bottom:5px;max-width:8em;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none}.com-2-tagsinput-list dd a.disabled{background-color:#e5e5e5;color:#999;cursor:default}.com-2-tagsinput-bar{position:relative}.com-2-tagsinput-dropdown{display:none;position:absolute;top:100%;left:0;z-index:900;margin-top:5px;padding:15px;width:100%;font-size:12px;background:#fff;border:1px solid #e5e5e5;border-radius:2px;box-sizing:border-box}.com-2-tagsinput-dropdown.show{display:block}.com-2-tagsinput-dropdown-tit{font-size:12px;color:#999}.com-2-tagsinput-dropdown-tit em{padding:0 6px;color:#333}.com-2-tagsinput-dropdown-menu{height:180px;overflow-y:auto;overflow-x:hidden;box-sizing:border-box;margin:15px -15px 0}.com-2-tagsinput-dropdown-menu li{padding:6px 15px;cursor:pointer;font-size:12px;line-height:18px}.com-2-tagsinput-dropdown-menu li.hover,.com-2-tagsinput-dropdown-menu li:hover{color:#00a4ff;background-color:#F3F5F9}.com-2-tagsinput-dropdown-loading{display:none;position:relative;color:#999}.com-2-tagsinput-dropdown-menu+.com-2-tagsinput-dropdown-loading{margin-top:5px}.com-2-tagsinput-dropdown-loading .icon-loading{margin-right:10px}.com-2-tagsinput-dropdown-loading .icon-loading:before{content:'';width:16px;height:16px;display:inline-block;background-image:url(sprite/AskDialog-201906131103.svg);;-moz-animation:spin .6s infinite linear;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear;vertical-align:-3px;background-position:51.66% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-2-tagsinput-dropdown.is-loading .com-2-tagsinput-dropdown-loading{display:block}.com-2-tagsinput-dropdown-tip{display:none;color:#999}.com-2-tagsinput-dropdown-tip a{color:#00a4ff}.com-2-tagsinput-dropdown-tip a:hover{text-decoration:underline}.com-2-tagsinput-dropdown.is-err .com-2-tagsinput-dropdown-tip{display:block}.com-2-tagsinput-tab{margin:0 5px 5px}.com-2-tagsinput-tab .com-tab-item{margin-right:20px}.com-2-tagsinput-tab .com-tab-item a{padding:0 5px;color:#666}.com-2-tagsinput-tab .com-tab-item a:hover{color:#00a4ff}.com-2-tagsinput-tab .com-tab-item.actived a,.com-2-tagsinput-tab .com-tab-item.actived a:hover{color:#00a4ff;font-weight:400}.com-2-tagsinput-tab .com-tab-panel{padding-top:10px;max-height:170px;overflow:auto}.com-2-tagsinput-tab .com-tag-v2-list.large .com-tag-v2{font-size:12px}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.com-carousel{position:relative}.com-carousel-main{height:500px;overflow:hidden;background-color:#020B25}.com-carousel-item,.com-carousel-list{height:100%}.com-carousel-ctrl{position:absolute;left:50%;bottom:90px;z-index:3;text-align:center;font-size:0;white-space:nowrap;transform:translateX(-50%)}.com-carousel-ctrl-item{display:inline-block;vertical-align:middle;margin:0 3px;padding:10px 0;cursor:pointer}.com-carousel-ctrl-item.actived{cursor:default}.com-carousel-ctrl-item i{display:block;width:30px;height:3px;background:rgba(255,255,255,.3)}.com-carousel-ctrl-item:hover i{background:rgba(255,255,255,.5)}.com-carousel-ctrl-item.actived i{background-color:#fff}.com-carousel-pages{opacity:0;transition:opacity .2s}.com-carousel:hover .com-carousel-pages{opacity:1;filter:alpha(opacity=100)}.com-carousel-page{position:absolute;top:55%;font-size:0;width:60px;height:400px;line-height:400px;margin-top:-200px}.com-carousel-page.prev{left:20px;text-align:left}.com-carousel-page.next{right:20px;text-align:right}.com-carousel-page:before{content:'';display:inline-block;width:22px;height:41px;overflow:hidden;line-height:99;vertical-align:middle}.com-carousel-page.prev:before{background-image:url(sprite/AskDialog-201906131103.png);background-position:0px 0px}.com-carousel-page.next:before{background-image:url(sprite/AskDialog-201906131103.png);background-position:-24px 0px}.com-2-salon-panels{font-size:0}.com-2-salon-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;margin-bottom:20px;width:calc((100% - 20px - 1px)/ 2)}.com-2-salon-panels>.panel-cell:nth-child(2n){margin-right:0}.com-2-salon-panel{box-sizing:border-box;position:relative;padding:20px;height:140px;background-color:#f7f8fa;transition:box-shadow .3s linear}.com-2-salon-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-salon-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-2-salon-panel-img{position:absolute;left:0;top:0;width:100%;height:100%;background-size:auto 100%;background-position:center right;background-repeat:no-repeat;background-image:url(src/components/SalonPanels2/css/img/bg-demo.jpg)}.com-2-salon-panel-main{position:relative}.com-2-salon-panel-title{height:52px;font-size:18px;line-height:26px;font-weight:400;color:#000;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-2-salon-panel-infos{position:relative;margin-top:20px;padding-right:110px;line-height:26px}.com-2-salon-panel-infos .panel-btn{position:absolute;right:0;bottom:0}.com-2-salon-panel-loading{height:130px}.com-salon-specialist{width:440px;height:440px}.com-salon-specialist .com-carousel-main{height:100%;background-color:#E2E2E2}.com-salon-specialist-item{position:relative;height:100%}.com-salon-specialist-img{display:block;width:100%;height:100%;background-position:right center;background-size:cover;font-size:0}.com-salon-specialist-ft{box-sizing:border-box;position:absolute;left:0;bottom:0;padding:20px 20px 22px;width:100%}.com-salon-specialist-name{font-size:30px;line-height:42px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-salon-specialist-identity{font-size:14px;line-height:20px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-salon-specialist .com-carousel-ctrl{box-sizing:border-box;left:auto;right:20px;bottom:10px;transform:translateX(0)}.com-salon-specialist .com-carousel-ctrl-item i{box-sizing:border-box;width:8px;height:8px;background-color:#fff;border:1px solid #00a4ff;border-radius:50%}.com-salon-specialist .com-carousel-ctrl-item.actived i{background-color:#00a4ff}.com-salon-primary-specialist-img{width:100%;height:435px;background-color:#E2E2E2;background-size:auto 100%;background-position:right center}.com-salon-primary-specialist-text{width:100%;height:100%;background-size:auto 100%;background-position:left center}.com-salon-primary{box-sizing:border-box;position:relative;margin-bottom:20px;padding:20px;display:table;table-layout:fixed;width:100%;background-color:#fff;box-shadow:0 -1px 16px 0 rgba(0,0,0,.13)}.com-salon-primary-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-salon-primary-specialist{display:table-cell;vertical-align:top}.com-salon-primary-specialist .com-salon-specialist{position:relative;width:100%;height:435px}.com-salon-primary-mark.com-mark-skew{position:absolute;left:100%;top:-3px;z-index:2;padding-left:0;margin-left:20px;min-width:72px;white-space:nowrap}.com-salon-primary-mark.com-mark-skew .mark-bg{margin-left:0;width:calc(100% - 18px)}.com-salon-primary-mark.com-mark-skew .mark-bg:before,.com-salon-primary-mark.com-mark-skew .mark-cnt:before{display:none}.com-salon-primary-main{position:relative;display:table-cell;vertical-align:top;width:287px;padding-left:35px;padding-top:20px}.com-salon-primary-bd{margin-bottom:10px;min-height:215px}.com-salon-primary-desc,.com-salon-primary-pretitle,.com-salon-primary-title{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-salon-primary-pretitle{font-size:18px;line-height:25px;color:#999;max-height:50px}.com-salon-primary-title{margin-top:7px;font-size:30px;line-height:36px;color:#000;font-weight:400;max-height:72px}.com-salon-primary-desc{margin-top:20px;font-size:14px;line-height:24px;color:#999;-webkit-line-clamp:4;max-height:96px}.com-salon-primary-avatars.com-2-avatars-group{padding-bottom:25px;margin-bottom:20px;border-bottom:1px solid #D8D8D8}.com-salon-primary-avatars.com-2-avatars-group .group-text{color:#333}.com-salon-primary-ft{position:absolute;left:0;right:0;bottom:0;padding-left:35px;padding-bottom:20px}.com-salon-primary-datas .com-icon-data{display:block;margin-right:0;margin-bottom:10px}.com-salon-primary-datas .com-icon-data:last-child{margin-bottom:0}.com-salon-primary-btn.com-arrow-btn{margin-top:20px;width:100%;position:relative;z-index:2;padding-right:48px;height:36px;font-size:16px;line-height:34px}.com-salon-primary-btn .com-arrow-btn-text:after{border-width:17px 6px}.com-salon-primary-btn .com-arrow-btn-caret{width:36px;padding-left:12px}.com-salon-primary-btn .com-arrow-btn-caret:after{margin-left:-5px;width:10px;height:10px}.com-salon-primary.loading .com-loading-placeholder{height:437px;background-color:transparent}.com-salon-group{position:relative;z-index:100;margin-top:-90px}.com-salon-group.tile{margin-top:0}.com-salon-group.tile .com-salon-group-primary{display:block;font-size:0;padding:0;box-shadow:none;background-color:#F7F8FA;margin-bottom:10px;transition:box-shadow .3s linear}.com-salon-group.tile .com-salon-group-primary:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-salon-group.tile .com-salon-primary-specialist{display:inline-block;vertical-align:top;width:calc((100% - 10px - 1px)/ 2)}.com-salon-group.tile .com-salon-primary-specialist-img,.com-salon-group.tile .com-salon-specialist{height:320px}.com-salon-group.tile .com-salon-specialist-img{background-position:right top}.com-salon-group.tile .com-salon-primary-main{display:inline-block;vertical-align:top;padding:20px 30px;box-sizing:border-box;width:calc((100% - 10px - 1px)/ 2 + 10px);height:320px}.com-salon-group.tile .com-salon-primary-mark{display:none}.com-salon-group.tile .com-salon-primary-bd{min-height:120px}.com-salon-group.tile .com-salon-primary-pretitle{font-size:14px;line-height:20px;display:block;white-space:nowrap}.com-salon-group.tile .com-salon-primary-title{margin-top:5px;font-size:24px;line-height:36px;display:block;white-space:nowrap}.com-salon-group.tile .com-salon-primary-desc{margin-top:10px;-webkit-line-clamp:3;max-height:72px}.com-salon-group.tile .com-salon-primary-avatars.com-2-avatars-group{border-bottom:none;padding-bottom:0;margin-bottom:20px}.com-salon-group.tile .com-2-avatars-group .group-text{font-size:12px;color:#999}.com-salon-group.tile .com-salon-primary-datas .com-icon-data{font-size:12px;margin-bottom:0}.com-salon-group.tile .com-salon-primary-datas .com-icon-data>div{display:block;display:-webkit-box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;max-height:48px}.com-salon-group.tile .com-icon-data [class*=com-i-],.com-salon-group.tile .com-icon-data [class^=com-i-]{width:14px;height:14px}.com-salon-group.tile .com-salon-primary-btn.com-arrow-btn{margin-top:10px;width:auto;padding-right:42px;height:32px;font-size:14px;line-height:30px;min-width:190px}.com-salon-group.tile .com-salon-primary-btn .com-arrow-btn-text:after{border-width:15px 5px}.com-salon-group.tile .com-salon-primary-btn .com-arrow-btn-caret{width:32px;padding-left:10px}.com-salon-group.tile .com-salon-primary-btn .com-arrow-btn-caret:after{margin-left:-5px;width:10px;height:10px}.com-salon-group.tile .com-2-salon-panels>.panel-cell{margin-right:10px;width:calc((100% - 10px - 1px)/ 2)}.com-salon-group.tile .com-2-salon-panels>.panel-cell:last-child{margin-right:0}.com-salon-group.tile .com-2-salon-panel{height:130px}.com-salon-group.tile .com-salon-primary.loading{background-color:#F3F5F9}.com-salon-group.tile .com-salon-primary.loading .com-loading-placeholder{height:320px}.com-salon-group.tile .com-salon-primary-ft{padding-bottom:20px;padding-left:30px;padding-right:30px}.com-2-activity-panels{font-size:0}.com-2-activity-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;margin-bottom:25px}.com-2-activity-panels.list2>.panel-cell{width:calc((100% - 20px - 1px)/ 2)}.com-2-activity-panels.list2>.panel-cell:nth-child(2n){margin-right:0}.com-2-activity-panels.list3>.panel-cell{width:calc((100% - 20px * 2 - 1px)/ 3)}.com-2-activity-panels.list3>.panel-cell:nth-child(3n){margin-right:0}.com-2-activity-panels.list4>.panel-cell{width:calc((100% - 20px * 3 - 1px)/ 4)}.com-2-activity-panels.list4>.panel-cell:nth-child(4n){margin-right:0}.com-2-activity-panel{display:block;background-color:#fff;box-shadow:0 1px 3px 0 #E1E3E9;transition:box-shadow .3s linear}.com-2-activity-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-activity-panel-object{position:relative;padding-top:52.1052631579%;border-bottom:1px solid #eee;overflow:hidden}.com-2-activity-panel-img{position:absolute;left:0;top:0;width:100%;height:100%;background-position:center;background-size:cover}.com-2-activity-panel-time{position:absolute;right:10px;bottom:10px;padding:0 8px;height:24px;background-color:rgba(0,0,0,.8);color:#fff;font-size:14px;line-height:24px}.com-2-activity-panel-main{box-sizing:border-box;padding:20px}.com-2-activity-panel-bd{min-height:82px}.com-2-activity-panel-pretitle{margin-bottom:10px;font-size:14px;line-height:24px;color:#666}.com-2-activity-panel-title{height:48px;font-size:18px;line-height:24px;color:#000;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-2-activity-panel-pretitle em,.com-2-activity-panel-title em{color:#ff7200}.com-2-activity-panel-ft{position:relative;margin-top:20px;padding-right:110px}.com-2-activity-panel-ft .panel-btn{position:absolute;right:0;top:0}.com-2-activity-panel.topic .com-2-activity-panel-bd{min-height:0;height:60px}.com-2-activity-panel.topic .com-2-activity-panel-pretitle{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:65px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-activity-panel.topic .com-2-activity-panel-pretitle.without-order{padding-right:0}.com-2-activity-panel.topic .pretitle-order{position:absolute;left:100%;top:0;margin-left:-60px}.com-2-activity-panel.topic .com-2-activity-panel-title{height:24px;white-space:nowrap;display:block}.com-2-activity-panel.activity{box-shadow:none;background-color:transparent}.com-2-activity-panel.activity:hover{box-shadow:none}.com-2-activity-panel.activity .com-2-activity-panel-object{border:1px solid #E5E8ED;transition:box-shadow .3s linear}.com-2-activity-panel.activity:hover .com-2-activity-panel-object{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-activity-panel.activity .com-2-activity-panel-main{padding:15px 0 0}.com-2-activity-panel.activity .com-2-activity-panel-bd{min-height:0}.com-2-activity-panel.activity .com-2-activity-panel-pretitle{margin-bottom:0;color:#999}.com-2-activity-panel.activity .com-2-activity-panel-title{display:block;height:auto}.com-2-activity-panel-infos{margin-top:10px;font-size:0}.com-2-activity-panel-info{font-size:12px;line-height:18px;color:#999}.com-2-activity-panel-info:before{content:'';display:inline-block;vertical-align:middle;margin:0 5px;width:2px;height:2px;border-radius:2px;background-color:#666}.com-2-activity-panel-info:first-child:before{display:none}.com-teacher-panels{font-size:0;margin-bottom:-40px}.com-teacher-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:40px;margin-bottom:40px}.com-teacher-panels.list2>.panel-cell{width:calc((100% - 40px - 1px)/ 2)}.com-teacher-panels.list2>.panel-cell:nth-child(2n){margin-right:0}.com-teacher-panel{display:table;table-layout:fixed;width:100%}.com-teacher-panel-object{display:table-cell;vertical-align:top;padding-right:30px;width:190px}.com-teacher-panel-img{display:block;padding-top:137.5%;width:100%;background-size:cover;background-position:center}.com-teacher-panel-main{position:relative;box-sizing:border-box;display:table-cell;vertical-align:top}.com-teacher-panel-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:22px;line-height:32px;color:#000;font-weight:400}.com-teacher-panel-name.with-verify{padding-right:20px}.com-teacher-panel-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-teacher-panel-name .com-verification{position:absolute;right:0;top:8px;margin-right:0}.com-teacher-panel-identity{font-size:14px;line-height:24px;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-teacher-panel-desc{margin-top:10px;font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:4;max-height:96px}.com-teacher-panel-links{position:absolute;left:0;bottom:0;width:100%}.com-teacher-panel-links .com-icon-disorder{padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #E1E3E9}.com-teacher-panel-links .com-icon-disorder:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.com-icon-disorder-link{box-sizing:border-box;display:inline-block;vertical-align:middle;position:relative;max-width:100%;padding-left:24px;font-size:14px;line-height:24px;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-icon-disorder-link:hover{color:#00a4ff}.com-icon-disorder-icon{position:absolute;left:0;top:4px;width:16px;height:16px}.com-icon-disorder-icon.article{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:99.53% 48.4%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-icon-disorder-icon.video{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:43.13% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-icon-disorder-link:hover .com-icon-disorder-icon.article{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:99.53% 57.98%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-icon-disorder-link:hover .com-icon-disorder-icon.video{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:34.599999999999994% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-tags-bar{margin-bottom:60px;background-color:#f7f8fa;padding:20px 10px}.com-tags-bar>.com-inner{position:relative;padding-left:50px;min-height:24px}.com-tags-bar-title{position:absolute;left:10px;top:0;width:30px;height:24px;border-right:1px solid #E1E3E9;font-size:0;line-height:24px}.com-tags-bar-title:before{content:'';display:inline-block;vertical-align:middle;width:20px;height:20px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:32.37% 79.89%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.com-tags-bar-main{font-size:0;white-space:nowrap;overflow:hidden}.com-tags-bar-item{display:inline-block;vertical-align:middle;margin-right:30px;font-size:14px;line-height:24px;color:#666}.com-tags-bar-item:hover{color:#00a4ff}.com-tags-bar-item:before{content:'#';margin-right:5px;color:#999}.com-activity-gallery{margin-bottom:20px;overflow:hidden}.com-activity-gallery-list{display:inline-block;vertical-align:middle;font-size:0;white-space:nowrap}.com-activity-gallery-list>li{display:inline-block;vertical-align:top;margin-right:20px}.com-activity-gallery-img{width:380px;height:194px;background-size:cover;background-position:center}.com-activity-gallery-title{margin-top:10px;font-size:14px;line-height:20px;font-weight:400;color:#666}.com-detail-timebar-item{position:relative;margin-left:70px;padding-bottom:40px;padding-left:35px;border-left:1px dashed #E1E3E9}.com-detail-timebar-item:first-child:before{content:'';position:absolute;left:-1px;top:0;width:1px;height:8px;background-color:#fff}.com-detail-timebar-item:last-child{padding-bottom:0}.com-detail-timebar-item:last-child:before{content:'';position:absolute;left:-1px;top:23px;bottom:0;width:1px;background-color:#fff}.com-detail-timebar-dot{box-sizing:border-box;position:absolute;left:-7px;top:8px;width:15px;height:15px;border:1px solid #00a4ff;border-radius:50%;background-color:#fff}.com-detail-timebar-time{position:absolute;right:100%;top:0;width:78px;font-size:24px;line-height:32px;color:#333;white-space:nowrap;font-weight:300}.com-detail-timebar-main{box-sizing:border-box;display:table;width:100%}.com-detail-timebar-hd{display:table-cell;padding-right:20px;width:240px;vertical-align:top}.com-detail-timebar-bd{display:table-cell;vertical-align:top;transition:all .3s ease-in-out}.com-detail-timebar-author{position:relative}.com-detail-timebar-author .com-2-avatar{position:absolute;left:0;top:0;width:42px;height:42px;transition:all .3s linear}.com-detail-timebar-author .author-main{margin-left:54px;transition:all .3s linear}.com-detail-timebar-author .author-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:18px;line-height:24px;color:#000;font-weight:400}.com-detail-timebar-author .author-name.with-verify{padding-right:17px}.com-detail-timebar-author .author-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-detail-timebar-author .com-verification{position:absolute;right:0;top:6px;margin-right:0}.com-detail-timebar-author .author-identity{margin-top:5px;font-size:14px;line-height:18px;color:#999}.com-detail-timebar-author-detail{box-sizing:border-box;position:absolute;left:295px;right:0;top:0;padding:20px;min-height:144px;background-color:#F3F5F9;border-radius:0 16px 16px;-ms-transform:scale(0);transform:scale(0);-ms-transform-origin:left top;transform-origin:left top;opacity:0;-ms-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.com-detail-timebar-author-detail-inner{display:table;table-layout:fixed;width:100%}.com-detail-timebar-author-detail .detail-desc-cnt{display:table-cell;vertical-align:top;padding-right:50px}.com-detail-timebar-author-detail .detail-desc{font-size:14px;line-height:24px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-detail-timebar-author-detail .detail-skills-cnt{display:table-cell;vertical-align:top;width:200px}.com-detail-timebar-author-detail .detail-skills-title{margin-bottom:10px;font-size:12px;line-height:18px;color:#999;font-weight:400}.com-detail-timebar-item.author-detail .com-detail-timebar-author .com-2-avatar{width:90px;height:90px}.com-detail-timebar-item.author-detail .com-detail-timebar-author .author-main{margin-left:0;padding-top:100px}.com-detail-timebar-item.author-detail .com-detail-timebar-author-detail{-ms-transform:scale(1);transform:scale(1);opacity:1;transition-delay:50ms}.com-detail-timebar-item.author-detail .com-detail-timebar-bd{opacity:0;transition-delay:50ms}.com-topic-resources-hd{margin-bottom:14px}.com-topic-resources-title{font-size:14px;line-height:24px;color:#000;font-weight:400}.com-topic-resource{margin-bottom:13px;background-color:#f3f5f9;transition:box-shadow .3s linear}.com-topic-resource:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-topic-resource:last-child{margin-bottom:0}.com-topic-resource-video{box-sizing:border-box;display:table;width:100%}.com-topic-resource-video-object{display:table-cell;width:122px;height:66px;position:relative}.com-topic-resource-video-img{position:relative;display:block;width:100%;height:100%;background-size:cover;background-position:center}.com-topic-resource-video-img:before{content:'';position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.com-topic-resource-video-icon{box-sizing:border-box;position:absolute;left:50%;top:50%;margin:-13px 0 0 -13px;width:26px;height:26px;border-radius:50%;border:1px solid #fff}.com-topic-resource-video-icon:before{content:'';position:absolute;left:50%;top:50%;margin:-5px 0 0 -3px;width:0;height:0;border-style:solid;border-color:transparent #fff;border-width:5px 0 5px 9px}.com-topic-resource-video-main{display:table-cell;vertical-align:middle;padding:0 20px}.com-topic-resource-video-title{font-size:14px;line-height:14px;color:#333;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-topic-resource-video-desc{margin-top:8px;font-size:12px;line-height:18px;color:#999}.com-topic-resource-art{display:block;padding:15px 20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;line-height:18px;color:#333}.com-topic-resource-art-icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:10px;width:16px;height:16px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:99.53% 38.83%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-organizer{box-sizing:border-box;display:table;width:100%}.com-organizer-cell{display:table-cell;vertical-align:middle}.com-organizer-cell.avatar{padding-right:20px;width:120px}.com-organizer-cell.identity{padding-right:10px;width:140px}.com-organizer .com-2-avatar{width:120px;height:50px}.com-organizer .com-2-avatar-inner{background-size:contain;background-color:transparent;border-color:transparent;border-radius:0}.com-organizer-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:12em;font-size:20px;line-height:24px;color:#000;font-weight:400;word-wrap:break-word}.com-organizer-name.with-verify{padding-right:17px}.com-organizer-name-inner{display:block;color:inherit}a.com-organizer-name-inner:hover{color:#00a4ff}.com-organizer-name .com-verification{position:absolute;right:0;top:6px;margin-right:0}.com-organizer-identity{margin-top:7px;font-size:14px;line-height:20px;color:#999}.com-organizer-desc{font-size:14px;line-height:28px;color:#666}.com-organizer.small{position:relative;display:block;padding-left:130px;min-height:45px}.com-organizer.small .com-organizer-cell{display:block;width:auto;padding-right:0}.com-organizer.small .com-organizer-cell.avatar{position:absolute;left:0;top:0}.com-organizer.small .com-organizer-identity{display:none}.com-organizer.small .com-organizer-name{max-width:100%}.com-organizer.small .com-organizer-name-inner{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-organizer.small .com-organizer-desc{line-height:24px;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-organizer.person .com-organizer-cell.avatar{width:90px}.com-organizer.person .com-2-avatar{width:90px;height:90px}.com-organizer.person .com-2-avatar-inner{background-size:cover;background-color:#fff;border-color:#EFEFEF;border-radius:50% 50% 50% 0}.com-organizers{font-size:0}.com-organizers>.panel-cell{margin-bottom:20px;font-size:14px}.com-organizers[class*=list]>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px}.com-organizers.list3>.panel-cell{width:calc((100% - 20px * 2 -1px)/ 3)}.com-organizers.list3>.panel-cell:nth-child(3n){margin-right:0}.com-video-player{position:relative;height:528px;background-color:#000}.com-video-player-img{height:100%;background-size:cover;background-position:center;margin:0 auto}.com-video-player-mask{position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.59)}.com-video-player-cnt{position:absolute;left:0;top:50%;transform:translateY(-50%);width:100%;text-align:center}.com-video-player-cnt.counting{color:#fff;font-size:16px;line-height:32px;text-align:center}.com-video-player-cnt.counting em{margin:0 5px;color:#F5A623}.com-video-player-play{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;width:60px;height:60px;border-radius:50%;border:1px solid #fff;text-align:center;line-height:58px;cursor:pointer}.com-video-player-play:before{content:'';display:inline-block;vertical-align:middle;margin-left:5px;width:0;height:0;border-style:solid;border-width:15px 0 15px 24px;border-color:transparent #fff}.com-video-player-play.loading{animation:playLoading 2s linear infinite}.com-video-player-play.loading:before{position:absolute;left:-5px;top:50%;margin-top:-5px;margin-left:0;width:10px;height:10px;border:none;border-radius:50%;background-color:#fff}@keyframes playLoading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.com-video-player-state{display:inline-block;vertical-align:middle;margin-top:15px;color:#fff;font-size:14px}.com-ani-playing{position:relative;top:-2px;display:inline-block;vertical-align:middle;font-size:0;margin-right:8px;height:16px}.com-ani-playing span{display:inline-block;vertical-align:bottom;width:2px;height:16px;background-color:#fff;-webkit-animation:playing 1.5s linear infinite;animation:playing 1.5s linear infinite;-webkit-transform-origin:center bottom;-webkit-transform:scaleY(.125);transform-origin:center bottom;transform:scaleY(.125)}.com-ani-playing span:nth-child(2){-webkit-animation-delay:.5s;-webkit-transform:scaleY(1);animation-delay:.5s;transform:scaleY(1)}.com-ani-playing span:nth-child(3){-webkit-animation-delay:1s;-webkit-transform:scaleY(.675);animation-delay:1s;transform:scaleY(.675)}.com-ani-playing span:nth-child(4){-webkit-animation-delay:1.5s;-webkit-transform:scaleY(.8);animation-delay:1.5s;transform:scaleY(.8)}.com-ani-playing span+span{margin-left:2px}@keyframes -webkit-playing{0%,100%{-webkit-transform:scaleY(1)}50%{-webkit-transform:scaleY(.125)}}@keyframes playing{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.125)}}.com-video-player-tip{box-sizing:border-box;position:absolute;left:0;top:50%;width:100%;color:#fff;font-size:16px;line-height:32px;text-align:center;margin-top:-16px}.com-video-player-tip.counting em{margin:0 5px;color:#F5A623}.com-video-tab{position:relative;height:100%}.com-video-tab-hd{height:60px;border-bottom:1px solid #E1E3E9}.com-video-tab-ctrl{font-size:0;height:100%}.com-video-tab-item{position:relative;display:inline-block;vertical-align:middle;width:50%;height:100%;color:#000}.com-video-tab-item:before{content:'';position:absolute;left:0;top:50%;margin-top:-15px;width:1px;height:30px;background-color:#E1E3E9}.com-video-tab-item:first-child:before{display:none}.com-video-tab-item a{display:block;font-size:14px;line-height:60px;text-align:center;color:inherit}.com-video-tab-item a:hover{color:#00a4ff}.com-video-tab-item.actived a,.com-video-tab-item.actived a:hover{color:#00a4ff;cursor:default}.com-video-tab-bd{position:absolute;left:0;top:61px;bottom:0;width:100%}.com-video-tab-panel{height:100%}.com-video-tab-ctrl.one-tab .com-video-tab-item{width:100%}.com-video-tab-ctrl.one-tab .com-video-tab-item a{padding:0 20px;text-align:left}.com-video-tab-ctrl.one-tab .com-video-tab-item.actived a,.com-video-tab-ctrl.one-tab .com-video-tab-item.actived a:hover{color:#000}.com-video-comments{position:relative;height:100%}.com-video-comments-list{position:absolute;left:0;top:0;bottom:137px;width:100%;box-sizing:border-box;overflow-x:hidden;overflow-y:auto;padding:20px}.com-video-comment+.com-video-comment{margin-top:20px}.com-video-comment-cnt{font-size:14px;line-height:22px;color:#333;word-wrap:break-word}.com-video-comment-ft{position:relative;padding-right:70px;margin-top:3px;font-size:12px;line-height:18px;color:#999}.com-video-comment-user{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-video-comment-time{position:absolute;right:0;top:0}.com-video-comments-edit{box-sizing:border-box;position:absolute;left:0;bottom:0;width:100%;padding:20px}.com-video-comments-edit textarea{box-sizing:border-box;width:100%;height:55px;padding:10px;border:1px solid transparent;background-color:#F3F5F9;font-size:14px;line-height:22px;resize:none}.com-video-comments-edit textarea:focus{background-color:#fff;border-color:#00a4ff}.com-video-comments-edit textarea:disabled,.com-video-comments-edit textarea:disabled:focus{background-color:#F3F5F9;border-color:transparent}.com-video-comments-edit .edit-btns{margin-top:10px;text-align:right}.com-video-comments-edit .c-btn{height:28px;font-size:12px;line-height:26px}.com-video-nav{position:relative;height:100%}.com-video-nav .com-video-nav-list{box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:61px;padding:10px 0;overflow-x:hidden;overflow-y:auto}.com-video-nav-item{box-sizing:border-box;display:table;table-layout:fixed;width:100%;padding:10px 20px}.com-video-nav-item .item-object{display:table-cell;vertical-align:top;width:134px;height:74px;position:relative}.com-video-nav-item .item-img{position:relative;display:block;width:100%;height:100%;background-size:cover;background-position:center}.com-video-nav-item .item-img:before{content:'';display:block;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.com-video-nav-item .item-icon{display:none;box-sizing:border-box;position:absolute;left:50%;top:50%;margin:-12px 0 0 -12px;width:24px;height:24px;border:1px solid #fff;border-radius:50%}.com-video-nav-item .item-icon:before{content:'';position:absolute;left:50%;top:50%;margin:-5px 0 0 -4px;width:0;height:0;border-style:solid;border-color:transparent #fff;border-width:5px 0 5px 9px}.com-video-nav-item .item-status{position:absolute;right:8px;bottom:8px;width:12px;height:12px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:56.74% 54.690000000000005%;background-size:1891.6666666666667% 1700%;;background-repeat:no-repeat}.com-video-nav-item .com-ani-playing{position:absolute;right:8px;bottom:8px;top:auto}.com-video-nav-item .item-main{display:table-cell;vertical-align:top;padding-left:10px}.com-video-nav-item .item-title{font-size:12px;line-height:22px;color:#000;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-video-nav-item .item-time{display:block;margin-top:13px;font-size:12px;line-height:18px;color:#999;text-align:right}.com-video-nav-item:hover .item-img:before{display:none}.com-video-nav-item:hover .item-title{color:#00a4ff}.com-video-nav-item.actived{cursor:default}.com-video-nav-item.actived .item-img:before{display:block}.com-video-nav-item.actived .item-title{color:#00a4ff}.com-video-nav-ft{box-sizing:border-box;position:absolute;left:0;right:0;bottom:0;border-top:1px solid #E1E3E9;height:60px;padding:10px 20px}.com-video-nav-link{display:block;font-size:14px;line-height:40px;color:#000}.com-video-nav-link:hover{color:#00a4ff}.com-video-section{position:relative;height:470px;background-color:#fff;overflow:hidden}.com-video-section-main{margin-right:330px;height:100%;transition:all .3s ease-in-out}.com-video-section-side{position:absolute;right:0;top:0;z-index:10;width:330px;height:100%;transition:all .3s ease-in-out}.com-video-section-toggle{position:absolute;right:100%;top:56px;width:18px;height:32px;background-color:#000;font-size:0}.com-video-section-toggle:before{content:'';position:absolute;left:50%;top:50%;margin:-5px 0 0 -4px;width:9px;height:11px;background-image:url(sprite/AskDialog-201906131103.svg);;transition:all .3s ease-in-out;background-position:38.07% 28.499999999999996%;background-size:2522.222222222222% 1854.5454545454547%;;background-repeat:no-repeat}.com-video-section .com-video-player{height:100%}.com-video-section.hide .com-video-section-main{margin-right:0}.com-video-section.hide .com-video-section-side{transform:translateX(100%)}.com-video-section.hide .com-video-section-toggle:before{transform:rotate(180deg)}.com-topic-panel-hd{position:relative;padding-right:100px;line-height:32px}.com-topic-panel-title{font-size:18px;line-height:32px;color:#000;font-weight:400}.com-topic-panel-extra{position:absolute;right:0;top:0}.com-topic-panel-desc{margin-top:10px;font-size:14px;line-height:24px;color:#999;word-wrap:break-word}.com-topic-panel-desc p+p{margin-top:10px}.com-topic-panel .com-topic-resources{margin-top:15px}.com-2-user-panels{font-size:0}.com-2-user-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:60px;margin-bottom:40px}.com-2-user-panels.list2>.panel-cell{width:calc((100% - 60px - 1px)/ 2)}.com-2-user-panels.list2>.panel-cell:nth-child(2n){margin-right:0}.com-2-user-panel{display:table;table-layout:fixed;box-sizing:border-box;width:100%}.com-2-user-panel-side{display:table-cell;vertical-align:top;padding-right:20px;width:110px}.com-2-user-panel-main{display:table-cell;vertical-align:top}.com-2-user-panel .com-2-avatar{margin-bottom:7px;width:90px;height:90px}.com-2-user-panel-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:18px;line-height:24px;color:#000;font-weight:400}.com-2-user-panel-name.with-verify{padding-right:17px}.com-2-user-panel-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-2-user-panel-name .com-verification{position:absolute;right:0;top:6px;margin-right:0}.com-2-user-panel-identity{margin-top:3px;font-size:12px;line-height:18px;color:#999}.com-2-user-panel-desc{box-sizing:border-box;margin-bottom:20px;padding:20px;background-color:#F3F5F9;border-radius:0 16px 16px;font-size:14px;line-height:24px;color:#666;height:144px}.com-2-user-panel-desc p{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:4;max-height:96px}.com-2-user-panel-skills-title{margin-bottom:10px;font-size:12px;line-height:18px;color:#999}.com-partners-wrap{margin:60px 0;text-align:center;font-size:0}.com-partners{position:relative;display:inline-block;vertical-align:middle;max-width:100%;box-sizing:border-box;padding-left:140px}.com-partners dt{position:absolute;left:0;top:0;padding-right:30px;font-size:16px;line-height:40px;color:#666}.com-partners dt:after{content:'';position:absolute;right:0;top:50%;margin-top:-13px;width:1px;height:26px;background-color:#DFE4EE}.com-partners dd{padding-top:6px;text-align:left}.com-partner{vertical-align:middle;height:30px;margin-left:35px;margin-bottom:20px}.com-2-article-panel{position:relative;box-sizing:border-box;padding:35px 25px 38px;background-color:#F3F5F9;height:250px;transition:box-shadow .3s linear}.com-2-article-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-article-panel>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-2-article-panel-author{position:relative;z-index:2;margin-bottom:11px;font-size:0}.com-2-article-panel-author .author-link{color:#333}.com-2-article-panel-author .author-name{display:inline-block;vertical-align:middle;margin-left:7px;max-width:20em;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.com-2-article-panel-author .author-link:hover{color:#00a4ff}.com-2-article-panel-author .com-verification{margin:0 0 0 5px}.com-2-article-panel-title{margin-bottom:10px;font-size:18px;line-height:27px;font-weight:400;color:#333;display:block;display:-webkit-box;display:block;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:54px;white-space:nowrap}.com-2-article-panel-cnt{margin-bottom:0}.com-2-article-panel-cnt .com-media-object{padding-right:0;padding-left:15px;width:106px;vertical-align:top;padding-top:6px}.com-2-article-panel-cnt .com-thumbnail{width:106px;height:80px}.com-2-article-panel-desc{font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-2-article-panel-opts{position:static;margin-top:13px}.com-2-article-panel.large{padding-left:293px}.com-2-article-panel.large.without-img{padding-left:25px}.com-2-article-panel.large .com-2-article-panel-title{display:block;white-space:nowrap}.com-2-article-panel.large .com-2-article-panel-cnt{display:block}.com-2-article-panel.large .com-2-article-panel-cnt .com-media-body{padding:0}.com-2-article-panel.large .com-2-article-panel-desc{-webkit-line-clamp:3;max-height:72px}.com-2-article-panel.large .com-2-article-panel-cnt .com-media-object{position:absolute;left:30px;top:35px;display:block;padding-left:0}.com-2-article-panel.large .com-thumbnail{width:236px;height:177px}.com-2-article-panels{font-size:0;margin-bottom:-15px}.com-2-article-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:15px;margin-bottom:15px;width:calc((100% - 15px * 2)/ 3)}.com-2-article-panels>.panel-cell:first-child{width:calc(100% - 15px - (100% - 15px * 2)/ 3)}.com-2-article-panels>.panel-cell:nth-child(3n+2){margin-right:0;width:calc((100% - 15px * 2)/ 3 - 1px)\9}.com-loading-placeholder.com-2-article-panel-loading{height:250px}.com-sub-section{margin-bottom:30px}.com-sub-section-hd{position:relative;padding-bottom:6px;border-bottom:1px solid #000}.com-sub-section-hd:before{content:'';position:absolute;left:0;bottom:-1px;width:80px;height:1px;background-color:#00a4ff}.com-sub-section-title{font-size:14px;line-height:20px;color:#666;font-weight:400}.com-sub-section-bd{padding:15px}.com-sub-section.bg-color .com-sub-section-bd{background-color:#F3F5F9}.com-timebar{margin:10px 20px 20px}.com-timebar-item{position:relative;padding:0 20px 15px 22px;border-left:1px solid #E1E3E9}.com-timebar-item:last-child{padding-bottom:0}.com-timebar-dot{position:absolute;left:-5px;top:6px;box-sizing:border-box;width:9px;height:9px;border-radius:50%;border:1px solid #999;background-color:#EFEFEF}.com-timebar-item:hover .com-timebar-dot{left:-6px;top:5px;width:11px;height:11px;border:1px solid #00a4ff;background-color:#fff}.com-timebar-item:hover .com-timebar-dot:before{content:'';position:absolute;left:2px;top:2px;width:5px;height:5px;border-radius:50%;background-color:#00a4ff}.com-timebar-infos{font-size:0;font-size:12px;line-height:23px;color:#999}.com-timebar-info:before{content:'';display:inline-block;vertical-align:middle;margin:0 5px;width:2px;height:2px;border-radius:2px;background-color:#666}.com-timebar-info:first-child:before{display:none}.com-timebar-title{margin-top:4px;font-size:14px;line-height:26px;color:#333;font-weight:400}.com-timebar-item:hover .com-timebar-title{color:#00a4ff}.com-loading-placeholder.com-timebar-loading.small{height:440px}.com-scroll{position:relative;overflow:hidden;height:440px;padding-top:10px}.com-scroll:after{content:'';position:absolute;left:0;bottom:0;width:100%;height:65px;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));pointer-events:none}.com-scroll.hide-mask:after{display:none}.com-scroll-cnt{margin-right:-18px;height:100%;overflow-x:hidden;overflow-y:scroll}.com-4-article-panels{font-size:0;margin-bottom:-10px}.com-4-article-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;width:calc((100% - 10px * 2 - 1px)/ 3)}.com-4-article-panels>.panel-cell:first-child{width:calc(66.6666% - 3px)}.com-4-article-panels>.panel-cell:nth-child(3n+2){margin-right:0}.com-loading-placeholder.com-4-article-panel-loading{height:162px}.com-4-article-panel{position:relative;box-sizing:border-box;padding:26px 20px;background-color:#F7F8FA;height:164px;transition:box-shadow .3s linear}.com-4-article-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-4-article-panel>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-4-article-panel-title{margin-bottom:10px;font-size:18px;line-height:26px;font-weight:400;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-4-article-panel-cnt{margin-bottom:0}.com-4-article-panel-cnt .com-media-object{padding-right:0;padding-left:15px;width:83px;vertical-align:top;padding-top:5px}.com-4-article-panel-cnt .com-thumbnail{width:83px;height:63px}.com-4-article-panel-desc{font-size:14px;line-height:22px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-4-article-panel-infos{margin-top:10px;font-size:0;line-height:20px}.com-4-article-panel-info{display:inline-block;vertical-align:middle;font-size:12px;color:#999}.com-4-article-panel-info em{margin-right:5px}.com-4-article-panel-author{position:relative;z-index:2;display:inline-block;vertical-align:middle;margin-right:20px}.com-4-article-panel-author .author-link{color:#999}.com-4-article-panel-author .com-2-avatar{width:20px;height:20px}.com-4-article-panel-author .author-name{display:inline-block;vertical-align:middle;margin-left:10px;max-width:5em;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.panel-cell:nth-child(n+3) .com-4-article-panel-author .author-name{max-width:12em}.com-4-article-panel-author .author-link:hover{color:#00a4ff}.com-4-article-panel-author .com-verification{margin:0 0 0 5px}.com-4-article-panel.large{padding-left:190px}.com-4-article-panel.large.without-img{padding-left:20px}.com-4-article-panel.large .com-4-article-panel-title{margin-bottom:5px}.com-4-article-panel.large .com-4-article-panel-cnt{display:block}.com-4-article-panel.large .com-4-article-panel-cnt .com-media-body{padding:0}.com-4-article-panel.large .com-4-article-panel-cnt .com-media-object{position:absolute;left:20px;top:26px;display:block;padding-left:0;padding-top:0;width:auto}.com-4-article-panel.large .com-thumbnail{width:146px;height:109px}.com-4-article-panel.large .com-4-article-panel-infos{margin-top:12px}.com-4-article-panel.large .com-4-article-panel-author .author-name{max-width:15em}.com-salon-panel{position:relative;box-sizing:border-box;padding:56px 0 31px;height:230px;background-color:#F3F5F9;transition:box-shadow .3s linear}.com-salon-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-salon-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-salon-panel-hd{box-sizing:border-box;position:absolute;left:0;top:0;padding:15px 25px 0;width:100%;height:56px;overflow:hidden;background-position:right -40px;background-repeat:no-repeat;background-size:220px auto}.com-salon-panel-city{font-size:40px;line-height:44px;font-weight:400;color:#E1E3E9;font-style:italic}.com-salon-panel-bd{box-sizing:border-box;height:100%;position:relative;background-color:#fff;padding:20px 25px;border:1px solid #F4F4F5}.com-salon-panel-title{position:relative;font-size:18px;line-height:27px;color:#333;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:54px}.com-salon-panel-infos{margin-top:12px;font-size:0}.com-salon-panel-infos .com-icon-datas{display:inline-block;vertical-align:middle;margin-right:20px}.com-salon-panel-btns{margin-top:20px}.com-salon-panel-btns .panel-btn{position:absolute;right:25px;bottom:-13px}.com-salon-panel-btns .com-2-avatar:nth-child(n+4){display:none}.com-salon-panel.large{padding:28px 25px 25px;height:194px;overflow:hidden}.com-salon-panel.large .com-salon-panel-hd{display:none}.com-salon-panel.large .com-salon-panel-img{position:absolute;right:0;top:0;width:100%;height:100%;background-position:right bottom;background-repeat:no-repeat;background-size:auto 100%}.com-salon-panel.large .com-salon-panel-bd{position:static;padding:0;background-color:transparent;border:none}.com-salon-panel.large .com-salon-panel-title{max-width:270px}.com-salon-panel.large .com-mark-skew{position:absolute;right:25px;top:0}.com-salon-panel.large .com-salon-panel-btns{position:absolute;left:25px;right:25px;bottom:25px}.com-salon-panel.large .panel-btn{position:relative;left:0;top:0;margin-right:15px}.com-salon-panel.large .com-2-avatars-group{display:inline-block;vertical-align:middle}.com-salon-panel.large .com-2-avatars{display:none}.com-salon-panels{font-size:0;margin-bottom:-15px}.com-salon-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:15px;margin-bottom:15px;width:calc((100% - 15px * 2)/ 3)}.com-salon-panels>.panel-cell:nth-child(1),.com-salon-panels>.panel-cell:nth-child(2){width:calc((100% - 15px)/ 2)}.com-salon-panels>.panel-cell:nth-child(3n+2){margin-right:0}.com-salon-panels>.panel-cell:nth-child(3n+5){width:calc((100% - 15px * 2)/ 3 - 1px)\9}.com-loading-placeholder.com-salon-panel-loading{height:230px}.com-loading-placeholder.com-salon-panel-loading.large{height:194px}.com-user-panel{position:relative;box-sizing:border-box;height:275px}.com-user-panel-summary{opacity:1;transition:all .3s linear;transition-delay:.2s}.com-user-panel:hover .com-user-panel-summary{opacity:0}.com-user-panel-hd{box-sizing:border-box;padding:0 20px;height:175px;border-bottom:1px solid #EEEEEF}.com-user-panel-hd .com-2-avatar{display:block;width:90px;height:90px}.com-user-panel-title{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;max-width:100%;margin-top:16px;font-weight:400}.com-user-panel-title.with-verify{padding-right:17px}.com-user-panel-title-inner{font-size:18px;line-height:25px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-user-panel-title .com-verification{position:absolute;right:0;top:7px;margin-right:0;white-space:normal}.com-user-panel-title .com-verification .c-bubble-left,.com-user-panel-title .com-verification .c-bubble-right{width:160px}.com-user-panel-identity{position:relative;box-sizing:border-box;margin-top:8px;font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-user-panel-bd{padding:20px 20px 0}.com-user-panel-skills{margin-top:17px}.com-user-panel-skills>dt{font-size:12px;line-height:18px;color:#999}.com-user-panel-skills>dd{margin-top:8px}.com-user-panel-skills .com-tag-v2{margin-bottom:8px}.com-user-panel-detail{position:absolute;left:0;top:0;box-sizing:border-box;width:100%;height:100%;background-color:#fff;opacity:0;-ms-transform:translateY(10px);-webkit-transform:translateY(10px);transform:translateY(10px);transition:all .3s linear;transition-delay:.2s;border:1px solid #E1E3E9}.com-user-panel:hover .com-user-panel-detail{opacity:1;-ms-transform:translateY(0);-webkit-transform:translateY(0);transform:translateY(0);will-change:transform,opacity;z-index:900}.com-user-panel-detail>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-user-panel-detail .com-user-panel-hd{position:relative;padding-top:20px;padding-left:82px;height:110px;background-color:#F3F5F9}.com-user-panel-detail .com-2-avatar{position:absolute;left:25px;top:26px;width:45px;height:45px}.com-user-panel-detail .com-user-panel-title{margin-top:0}.com-user-panel-detail:hover .com-user-panel-title-inner{color:#00a4ff}.com-user-panel-detail:hover .com-verification{z-index:900}.com-user-panel-detail .com-user-panel-identity{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:36px;white-space:normal}.com-user-panel-detail .com-user-panel-bd{position:absolute;left:0;top:110px;right:0;bottom:0;box-sizing:border-box;background-color:#fff;padding:20px}.com-user-panel-detail .com-user-panel-desc{font-size:12px;line-height:21px;color:#000;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:4;max-height:84px}.com-user-panel-detail .com-user-panel-skills{margin-top:10px}.com-user-panel-btns{position:absolute;left:0;right:0;bottom:17px;z-index:2;text-align:center}.com-user-panel-btns .c-btn{padding:0 12px;min-width:80px;height:26px;font-size:12px;line-height:26px}.com-user-panel-btns .c-btn-hole{line-height:24px}.com-user-panels-wrap{position:relative;padding-left:40px;padding-right:40px}.com-user-panels-cnt{overflow:hidden}.com-user-panels{font-size:0;white-space:nowrap;text-align:center}.com-user-panels>.panel-cell{display:inline-block;vertical-align:top;margin-left:18px;margin-right:18px;width:213px;white-space:normal;text-align:left}.com-user-panels>.panel-cell:first-child{margin-left:0}.com-user-panels-pages .com-page-btn{position:absolute;top:50%;margin:-12px 0 0}.com-user-panels-pages .com-page-btn.prev{left:0}.com-user-panels-pages .com-page-btn.next{right:0}.com-loading-placeholder.com-user-panel-loading{height:275px}.com-special-list-wrap{position:relative;box-sizing:border-box;height:410px;padding:0 15px 0 30px;border:1px solid #E1E3E9}.com-special-thumbnail{position:absolute;right:15px;top:15px;width:382px;height:378px;background-size:cover;background-position:center;transition:background-image .2s linear}.com-special-list{margin-right:440px}.com-special{box-sizing:border-box;position:relative;display:block;padding:25px 0;height:72px;overflow:hidden;transition:height .5s}.com-special-title{font-size:16px;line-height:22px;font-weight:400;color:#666;cursor:pointer}.com-special-title-inner{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-special-title.with-mark .com-special-title-inner{padding-right:60px}.com-special-title .com-mark-rec{position:absolute;right:0;top:0;font-weight:400}.com-special-detail{box-sizing:border-box;position:absolute;left:0;top:0;padding:25px 0;width:100%;height:100%;opacity:0;visibility:hidden}.com-special-detail .com-special-title{font-size:22px;line-height:30px;font-weight:400;color:#333;cursor:text}.com-special-detail .com-special-desc{margin-top:14px;font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-special-detail .com-arrow-btn{margin-top:15px}.com-special-process{position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#E1E3E9}.com-special-process .process-bar{position:absolute;left:0;bottom:0;height:1px;width:100%;background-color:#00a4ff;display:none;transform:scaleX(0);transform-origin:left}.com-special-list.ani .process-bar{animation:width 10s linear}.com-special.actived{height:193px}.com-special.actived .com-special-summary{opacity:0}.com-special.actived .com-special-detail{opacity:1;visibility:visible}.com-special.actived .com-special-process .process-bar{display:block}.com-loading-placeholder.com-special-list-loading{height:406px}.com-team-panel{position:relative;box-sizing:border-box;height:550px;border:1px solid #E1E3E9;background-color:#fff}.com-team-panel .com-mark-triangle{position:absolute;left:0;top:0}.com-team-panel-hd{padding:30px 0 20px;text-align:center}.com-team-panel-title{font-size:18px;line-height:24px;color:#333;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-team-panel .com-2-avatars{margin-top:15px}.com-team-panel .com-vertical-datas{margin-top:20px}.com-team-panel .com-vertical-data{width:33.3333%}.com-team-panel .com-vertical-data:last-child{text-align:center}.com-team-panel-bd{padding:0 15px}.com-team-panel-subtitle{position:relative;margin-bottom:20px;font-size:12px;line-height:18px;color:#00a4ff;font-weight:400}.com-team-panel-subtitle:before{content:'';position:absolute;left:0;top:50%;width:100%;height:1px;background-color:#00A4FF;background:linear-gradient(to left,rgba(0,209,255,0) 0,rgba(0,164,255,1) 72%)}.com-team-panel-subtitle .text{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:17px;background-color:#fff}.com-team-panel-articles>li{margin-bottom:10px}.com-team-panel-article{margin-bottom:15px}.com-team-panel-article-cat{font-size:12px;line-height:18px;color:#999}.com-team-panel-article-cat .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;width:16px;height:16px;margin-right:5px}.com-team-panel-article-cat .icon.article{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:17.54% 89.89%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-team-panel-article-cat .icon.ask{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.19% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-team-panel-article-cat .icon.action{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:68.72% 99.47%;background-size:1418.75% 1275%;;background-repeat:no-repeat}.com-team-panel-article-title{margin-top:8px;font-size:14px;line-height:24px;color:#333;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-team-panel-article:hover .com-team-panel-article-title{color:#00a4ff}.com-team-panel-article .com-media-object{padding-right:0;padding-left:15px;width:106px}.com-team-panel-article .com-thumbnail{width:106px;height:80px}.com-team-panel-ft{position:absolute;left:0;bottom:0;width:100%;background-color:#F3F5F9;font-size:0}.com-team-panel-ft .ft-btn{display:inline-block;vertical-align:middle;width:100%;font-size:14px;line-height:46px;height:46px;text-align:center;color:#333}.com-team-panel-ft .ft-btn:hover{background-color:#00a4ff;color:#fff}.com-team-panels{font-size:0}.com-team-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;width:calc((100% - 1px - 20px * 2)/ 3)}.com-team-panels>.panel-cell:last-child{margin-right:0}.com-loading-placeholder.com-team-panel-loading{height:550px}.com-2-ask-panel{position:relative;margin-top:20px;padding:30px 30px 17px;border:1px solid #E1E3E9}.com-2-ask-panel:before{content:'';position:absolute;left:20px;top:-1px;width:47px;height:1px;background-color:#fff}.com-2-ask-panel:after{content:'';position:absolute;left:29px;top:-11px;width:28px;height:26px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:17.59% 19.66%;background-size:810.7142857142858% 784.6153846153845%;;background-repeat:no-repeat}.com-2-ask-panel-hd{position:relative;padding-right:200px}.com-2-ask-panel-title{font-size:18px;line-height:21px;font-weight:400;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-ask-panel-title a{color:inherit}.com-2-ask-panel-title a:hover{color:#00a4ff}.com-2-ask-panel-hd-extra{position:absolute;right:0;top:0;font-size:12px;line-height:21px;color:#999}.com-2-ask-panel-bd{position:relative;margin-top:17px;padding-left:160px;min-height:150px}.com-2-ask-panel-author{position:absolute;left:0;top:0;width:150px}.com-2-ask-panel-author .com-2-avatar{display:block;width:90px;height:90px}.com-2-ask-panel-author-name{position:relative;display:inline-block;vertical-align:middle;max-width:100%;box-sizing:border-box;margin-top:14px;font-size:18px;line-height:25px;color:#333;font-weight:500}.com-2-ask-panel-author-name.with-verify{padding-right:20px}.com-2-ask-panel-author:hover .com-2-ask-panel-author-name{color:#00a4ff}.com-2-ask-panel-author-name .name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-ask-panel-author-name .com-verification{position:absolute;right:0;top:7px}.com-2-ask-panel-identity{margin-top:3px;font-size:13px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-ask-panel-answer{box-sizing:border-box;background-color:#F3F5F9;border-radius:0 18px 18px;padding:22px 19px;margin-bottom:0;border:1px solid transparent}.com-2-ask-panel-answer:hover{border-color:#D2D9E7}.com-2-ask-panel-answer .com-media-body{height:106px}.com-2-ask-panel-answer-cnt{margin-top:-5px;font-size:14px;line-height:24px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-2-ask-panel-answer-opts{margin-top:16px}.com-2-ask-panel-answer .com-media-object{padding-right:0;padding-left:40px;width:192px}.com-2-ask-panel-answer .com-thumbnail{width:192px;height:106px}.com-loading-placeholder.com-2-ask-panel-loading{margin-top:20px;height:239px}.com-2-ask-panels>.panel-cell+.panel-cell{margin-top:30px}.com-2-doc-panel{display:table;table-layout:fixed;width:100%;height:90px;background-color:#f7f8fa;transition:box-shadow .2s}.com-2-doc-panel:hover{box-shadow:0 0 6px rgba(0,0,0,.1),0 4px 6px rgba(0,0,0,.1)}.com-2-doc-panel-hd{position:relative;display:table-cell;vertical-align:middle;width:90px;height:90px;text-align:center;overflow:hidden}.com-2-doc-panel .com-mark-triangle{position:absolute;left:0;top:0;z-index:1;width:36px;height:36px}.com-2-doc-panel .com-mark-triangle:before{border-width:18px}.com-2-doc-panel .com-mark-triangle .mark-cnt{margin-top:-15px;margin-left:-7px;-webkit-transform:rotate(-45deg) scale(.8333);-ms-transform:rotate(-45deg) scale(.8333);transform:rotate(-45deg) scale(.8333)}.com-2-doc-panel-img{position:relative;top:-1px;vertical-align:middle;width:90px;height:90px}.com-2-doc-panel-bd{display:table-cell;vertical-align:middle;padding:15px}.com-2-doc-panel-title{font-size:16px;line-height:22px;font-weight:500;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-doc-panel-desc{font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-doc-panel.large{display:block;height:307px}.com-2-doc-panel.large .com-2-doc-panel-hd{display:block;line-height:90px;width:auto}.com-2-doc-panel.large .com-2-doc-panel-bd{display:block;padding:15px 30px}.com-2-doc-panel-outline{margin-top:10px;font-size:14px;line-height:24px;color:#333}.com-2-doc-panel-outline li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-doc-panel-outline li:last-child{margin-top:-4px}.com-2-doc-panels-wrap{font-size:0}.com-2-doc-panels-wrap>.wrap-cell{display:inline-block;vertical-align:top;box-sizing:border-box;margin-right:16px;width:calc((100% - 16px)/ 2)}.com-2-doc-panels-wrap>.wrap-cell:last-child{margin-right:0}.com-2-doc-panels-wrap .com-2-avatars-group{display:none;margin-top:13px}.com-2-doc-panels{margin-bottom:-18px}.com-2-doc-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:12px;margin-bottom:18px;width:calc((100% - 12px)/ 2)}.com-2-doc-panels>.panel-cell:nth-child(2n){margin-right:0}.com-2-doc-panels.large{margin-bottom:0}.com-2-doc-panels.large>.panel-cell{margin-bottom:0;margin-right:16px;width:calc((100% - 16px)/ 2)}.com-2-doc-panels.large>.panel-cell:nth-child(2n){margin-right:0}.com-2-doc-panels.cols-3>.panel-cell{margin-right:20px;margin-bottom:20px;width:calc((100% - 20px * 2)/ 3)}.com-2-doc-panels.cols-3>.panel-cell:nth-child(2n){margin-right:20px}.com-2-doc-panels.cols-3>.panel-cell:nth-child(3n){margin-right:0}.com-loading-placeholder.com-2-doc-panel-loading{height:90px}.com-loading-placeholder.com-2-doc-panel-loading.large{height:307px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel{background-color:#f7f8fa;height:80px}.com-2-doc-panels-wrap.v2 .com-loading-placeholder.com-2-doc-panel-loading{height:80px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel-hd{width:80px;height:80px;background-color:#eef1f5}.com-2-doc-panels-wrap.v2 .com-2-doc-panel-img{width:80px;height:80px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel-bd{padding:10px 20px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel.large{height:260px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel.large .com-2-doc-panel-hd{width:auto}.com-2-doc-panels-wrap.v2 .com-loading-placeholder.com-2-doc-panel-loading.large{height:260px}.com-2-doc-panels-wrap.v2>.wrap-cell{margin-right:10px;width:calc((100% - 10px - 1px)/ 2)}.com-2-doc-panels-wrap.v2>.wrap-cell:last-child{margin-right:0}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell{margin-right:10px;margin-bottom:10px}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell:nth-child(2n){margin-right:0;width:calc((100% - 10px - 1px)/ 2)}.com-2-doc-panels-wrap.v2 .com-2-doc-panels.large>.panel-cell{margin-right:10px;width:calc((100% - 10px - 1px)/ 2)}.com-2-doc-panels-wrap.v2 .com-2-doc-panels.large>.panel-cell:last-child{margin-right:0}.com-owner-panel{margin-bottom:40px;padding-top:48px;width:330px;height:175px}.com-owner-panel-inner{position:relative;box-sizing:border-box;padding:12px 20px 0;width:100%;height:100%;background-color:#fff;border:1px solid #e5e5e5}.com-owner-panel .com-2-avatar{position:absolute;left:20px;top:-48px}.com-owner-panel-hd{padding-left:131px;min-height:66px}.com-owner-panel-title{font-size:18px;line-height:25px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-owner-panel-title a{color:inherit}.com-owner-panel-title a:hover{color:#00a4ff}.com-owner-panel-identity{font-size:14px;line-height:20px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:40px}.com-owner-panel .com-emblem-list{margin-top:5px}.com-owner-panel .com-emblem-list>li{margin-left:0;margin-right:5px}.com-owner-panel-level-title{display:inline-block;vertical-align:middle;font-size:12px;line-height:18px;color:#00a4ff}.com-owner-panel-level-infos{margin-top:10px}.com-owner-panel-process{display:inline-block;vertical-align:middle;margin-right:10px;width:220px}.com-owner-panel-datas{margin-top:20px;display:table;width:100%;padding:0 2px}.com-owner-panel-datas>li{display:table-cell;vertical-align:top;width:50%;text-align:left}.com-owner-panel-data{display:inline-block;vertical-align:top;text-align:center;white-space:nowrap;font-size:13px;line-height:18px;color:#333}.com-owner-panel-data:hover{color:#00a4ff}.com-owner-panel-data .icon{display:inline-block;vertical-align:middle;margin-right:10px;width:24px;height:24px}.com-owner-panel-data .icon.follow{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.099999999999994% 15%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.com-owner-panel-data .icon.column{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:13.3% 38.33%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.com-owner-panel-data .icon.activities{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.099999999999994% 29.439999999999998%;background-size:945.8333333333334% 850%;;background-repeat:no-repeat}.com-owner-panel-data .title{display:inline-block;vertical-align:middle;font-weight:400}.com-owner-panel-data.has-msg .title{position:relative}.com-owner-panel-data.has-msg .title:after{content:'';position:absolute;left:100%;top:50%;margin-top:-3px;margin-left:5px;width:6px;height:6px;border-radius:50%;background-color:#FF7800}.com-login-panel{box-sizing:border-box;margin-top:48px;margin-bottom:40px;padding:20px;width:330px;height:175px;background-color:#fff;border:1px solid #D2D9E7;font-size:18px;line-height:24px;color:#999;text-align:center}.com-login-panel .login-tip{margin-bottom:20px}.com-login-panel .c-btn{min-width:205px;height:40px;line-height:40px}.com-login-panel .c-btn-hole{margin-top:10px;line-height:38px}.com-hero-event{display:block;box-sizing:border-box;padding:10px 20px;margin-left:-1px;margin-right:-1px;height:134px;text-align:center;background-color:#fff;transition:box-shadow .3s linear}.com-hero-event-img{display:block;margin:0 auto;width:44px;height:44px}.com-hero-event-title{display:inline-block;vertical-align:middle;padding-bottom:2px;max-width:100%;margin-top:10px;font-size:18px;line-height:28px;font-weight:400;color:#333;border-bottom:1px solid #00a4ff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-hero-event-title em{color:#00a4ff;font-weight:500}.com-hero-event-title .tag{position:relative;top:-2px;display:inline-block;vertical-align:middle;box-sizing:border-box;margin-right:5px;padding:0 8px;height:20px;border-radius:2px;border:1px solid #FF7200;font-size:12px;line-height:18px;color:#FF7200}.com-hero-event-desc{margin-top:6px;font-size:12px;line-height:21px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-hero-event:hover{position:relative;z-index:2;box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-hero-events{margin-bottom:40px;display:table;table-layout:fixed;width:100%}.com-hero-events>.event-cell{position:relative;display:table-cell;vertical-align:top}.com-hero-events>.event-cell:first-child{padding-left:0}.com-hero-events>.event-cell:last-child{padding-right:0}.com-hero-events>.event-cell:before{content:'';position:absolute;left:0;top:50%;margin-top:-40px;width:1px;height:80px;background-color:#E1E3E9}.com-hero-events>.event-cell:first-child:before{display:none}.com-v2-multi-selector{position:relative;display:inline-block}.com-v2-multi-selector.block{display:block}.com-v2-dropdown-link{display:block;box-sizing:border-box;width:100%;height:44px;padding:0 40px 0 15px;background-color:#fff;border:1px solid #e5e5e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.65,.05,.36,1);font-size:14px;line-height:42px;color:#000}.com-v2-dropdown-link .caret{position:absolute;right:15px;top:50%;margin-top:-4px;width:15px;height:8px;background-image:url(sprite/AskDialog-201906131103.svg);;transition:all .2s linear;background-position:99.06% 64.8%;background-size:1513.3333333333333% 2550%;;background-repeat:no-repeat}.com-v2-multi-selector.opened .com-v2-dropdown-link .caret{transform:rotate(180deg)}.com-v2-dropdown-menu{width:100%;min-width:470px;border:1px solid #e5e5e5;background-color:#fff;position:absolute;top:100%;left:0;z-index:1;margin-top:5px;box-sizing:border-box}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd .tab-btn{color:#444;height:52px;line-height:52px;padding:0 30px;border-right:1px solid #e5e5e5;display:inline-block;font-size:14px}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd .tab-btn.cur{border-bottom:1px solid #fff}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd{font-size:0;margin-bottom:-1px}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd .tab-btn:hover{text-decoration:none}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd+.com-v2-dropdown-tab-bd{border-top:1px solid #e5e5e5}.com-v2-dropdown-menu .com-v2-dropdown-tab-bd{padding:5px 15px;max-height:320px;overflow-x:hidden;overflow-y:auto}.com-v2-dropdown-menu .area-list{font-size:0}.com-v2-dropdown-menu .area-list li{display:inline-block;padding-right:10px;width:50%;font-size:12px;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.com-v2-dropdown-menu .area-list li a{height:44px;line-height:44px;box-sizing:border-box;display:block;padding:0 13px;color:#000}.com-v2-dropdown-menu .area-list+.area-list{border-top:1px solid #e5e5e5;padding-top:5px}.com-v2-dropdown-menu .area-list li a:hover{background-color:#F2F2F2;text-decoration:none}.com-v2-dropdown-menu .area-list li.cur a{color:#fff;background-color:#00a4ff}.com-full-layout{box-sizing:border-box;position:relative;min-width:1000px;background-color:#F3F5F9}.com-full-layout:before{content:'';position:absolute;left:50%;right:0;top:0;bottom:0;background-color:#fff}.com-full-layout>.layout-inner{box-sizing:border-box;position:relative;margin:0 auto;max-width:1200px;height:100%}.com-full-layout-aside{box-sizing:border-box;position:fixed;top:96px;bottom:0;z-index:300;padding:30px 10px;width:200px;background-color:#F3F5F9;overflow:auto}.com-full-layout-main{box-sizing:border-box;position:relative;margin-left:200px;min-height:100%;background-color:#fff;padding:20px 10px 20px 30px}.com-full-layout-hd{margin-bottom:20px}.com-full-layout-title{font-size:22px;line-height:45px;color:#000;font-weight:400}.com-full-layout-desc{margin-top:5px;font-size:14px;line-height:24px;color:#666}.com-crumb.com-full-layout-crumb{margin-top:0;margin-bottom:10px}.com-full-layout-crumb .com-inner{padding:0 0 0 20px}.com-full-layout-nav>li{position:relative;padding:20px;border-bottom:1px solid #D2D9E7}.com-full-layout-nav>li:last-child{border-bottom:none}.com-full-layout-nav .nav-item{display:block;font-size:14px;line-height:24px;color:#333;text-decoration:none}.com-full-layout-nav a.nav-item:hover{color:#00a4ff}.com-full-layout-nav>.actived:after{content:'';position:absolute;left:0;bottom:-1px;width:80px;height:1px;background-color:#00a4ff}.com-full-layout-nav>.actived .nav-item{color:#00a4ff;cursor:default}.com-full-layout-nav .nav-tags{margin-top:15px;margin-right:-30px;padding-right:30px;overflow-x:hidden;overflow-y:auto}.com-full-layout-nav .nav-tags>li{display:block;margin-bottom:15px}.com-full-layout-nav .nav-tags .com-tag-v2{display:inline-block;vertical-align:middle;max-width:100%;margin:0}.com-full-layout-nav .nav-tags-more{margin-top:10px}.com-full-layout-nav .nav-tags-more a{color:#999}.com-full-layout-nav .nav-tags-more a:hover{color:#00a4ff}.com-full-layout-search{margin-bottom:18px}.com-2-hero{padding-top:10px;margin-bottom:30px}.com-2-hero-inner{margin:0 auto}.com-2-hero-list{font-size:0}.com-2-hero-list>.hero-cell{box-sizing:border-box;display:inline-block;vertical-align:middle;width:33.33%}.com-2-hero-list>.hero-cell:nth-child(2){padding:0 10px}.com-2-hero-item{position:relative;box-sizing:border-box;display:block;height:280px;background-color:#79a8ff;background-position:center right;background-repeat:no-repeat;background-size:auto 100%;color:#fff;overflow:hidden}.com-2-hero-item-img{position:absolute;left:0;right:0;top:0;height:100%;background-position:center right;background-repeat:no-repeat;background-size:auto 100%;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.com-2-hero-item:hover .com-2-hero-item-img{-webkit-transform:scale(1.025);transform:scale(1.025)}.com-2-hero-item-mark-wrap{margin-bottom:20px;min-height:20px}.com-2-hero-item-mark{display:inline-block;vertical-align:middle;padding:0 5px;height:20px;font-size:12px;line-height:20px;background-color:#00A4FF;border-radius:2px;color:#fff}.com-2-hero-item-mark.white{background-color:#fff;color:#00a4ff}.com-2-hero-item-cnt{position:relative;padding:60px 45px 0;height:187px}.com-2-hero-item-title{margin-bottom:20px;font-size:28px;line-height:36px;font-weight:400;max-width:350px;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:72px}.com-2-hero-item-desc{margin-top:4px;font-size:14px;line-height:24px;max-width:350px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-hero-item-btns{display:none;position:absolute;left:45px;bottom:0;margin-top:20px}.com-2-hero-item.black{background-color:#e6e9ee;color:#000}.com-3-user-panel{position:relative;box-sizing:border-box;height:210px;text-align:center;padding:20px 10px}.com-3-user-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-3-user-panel .com-2-avatar{display:block;margin:0 auto;width:80px;height:80px;transition:all .3s ease-in-out}.com-3-user-panel-title{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;max-width:100%;margin-top:10px;font-weight:400}.com-3-user-panel-title.with-verify{padding-right:17px}.com-3-user-panel-title-inner{font-size:18px;line-height:25px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-user-panel-title .com-verification{position:absolute;right:0;top:7px;margin-right:0;white-space:normal}.com-3-user-panel:hover .com-verification{z-index:900}.com-3-user-panel-title .com-verification .c-bubble{width:160px;margin-left:-80px}.com-3-user-panel-identity{position:relative;box-sizing:border-box;margin-top:5px;font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-user-panel-skills{font-size:12px;line-height:18px;color:#999;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;height:0;transition:all .3s ease-in-out}.com-3-user-panel-btns{position:absolute;left:0;bottom:15px;z-index:2;width:100%}.com-3-user-panel-btns .c-btn{padding:0 12px;min-width:80px;height:28px;font-size:12px;line-height:26px}.com-3-user-panel:hover{padding-top:15px;background-color:#F7F8FA}.com-3-user-panel:hover .com-2-avatar{width:50px;height:50px}.com-3-user-panel:hover .com-3-user-panel-skills{height:36px}.com-3-user-panels-wrap{position:relative;padding-left:40px;padding-right:40px}.com-3-user-panels-cnt{height:210px;overflow:hidden}.com-3-user-panels{font-size:0}.com-3-user-panels>.panel-cell{display:inline-block;vertical-align:top;box-sizing:border-box;white-space:normal;text-align:left;margin-left:20px;width:calc((100% - 20px * 4 - 1px)/ 5)}.com-3-user-panels>.panel-cell:first-child{margin-left:0}.com-3-user-panels-pages .com-page-btn{position:absolute;top:50%;margin:-21px 0 0;width:42px;height:42px;text-align:center;line-height:42px}.com-3-user-panels-pages .com-page-btn .btn-icon{display:inline-block;vertical-align:middle;width:24px;height:24px}.com-3-user-panels-pages .com-page-btn.prev{left:0}.com-3-user-panels-pages .com-page-btn.next{right:0}.com-loading-placeholder.com-3-user-panel-loading{height:210px}.com-2-special-list-wrap{position:relative;box-sizing:border-box;height:294px;background-color:#F7F8FA}.com-2-special-thumbnail{position:absolute;left:0;top:0;width:280px;height:100%;background-size:cover;background-position:center;transition:background-image .2s linear}.com-2-special-list{margin-right:25px;margin-left:300px;padding-top:10px}.com-2-special{box-sizing:border-box;position:relative;display:block;padding:10px 0;height:41px;overflow:hidden;transition:height .5s}.com-2-special-title{font-size:14px;line-height:20px;font-weight:400;color:#666;cursor:pointer}.com-2-special-title-inner{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-special-title.with-mark .com-2-special-title-inner{padding-right:60px}.com-2-special-title .com-mark-rec{position:absolute;right:0;top:-2px;font-weight:400}.com-2-special-detail{box-sizing:border-box;position:absolute;left:0;top:0;padding:10px 0 20px;width:100%;height:100%;opacity:0;visibility:hidden}.com-2-special-detail .com-2-special-title{font-size:24px;line-height:34px;font-weight:500;color:#000;cursor:text}.com-2-special-detail .com-mark-rec{top:5px}.com-2-special-detail .com-2-special-desc{margin-top:10px;font-size:12px;line-height:22px;color:#333;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-2-special-detail .com-arrow-btn{margin-top:10px}.com-2-special-process{position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#E1E3E9}.special-cell:last-child .com-2-special-process{background-color:transparent}.com-2-special-process .process-bar{position:absolute;left:0;bottom:0;height:1px;width:100%;background-color:#00a4ff;display:none;transform:scaleX(0);transform-origin:left}.com-2-special-list.ani .process-bar{animation:width 10s linear}@keyframes width{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}.com-2-special.actived{height:154px}.com-2-special.actived .com-2-special-summary{opacity:0}.com-2-special.actived .com-2-special-detail{opacity:1;visibility:visible}.com-2-special.actived .com-2-special-process .process-bar{display:block}.com-loading-placeholder.com-2-special-list-loading{height:294px}.com-2-team-panel{position:relative;box-sizing:border-box;height:343px;background-color:#f7f8fa}.com-2-team-panel .com-mark-triangle{position:absolute;left:0;top:0}.com-2-team-panel-hd{padding:30px 20px 20px;text-align:center}.com-2-team-panel-title{font-size:18px;line-height:24px;color:#333;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-team-panel .com-2-avatars{margin-top:15px}.com-2-team-panel .com-2-avatar{width:32px;height:32px}.com-2-team-panel .com-datas{margin-top:20px}.com-2-team-panel-bd{padding:0 20px}.com-2-team-panel-subtitle{position:relative;margin-bottom:10px;font-size:12px;line-height:18px;color:#999;font-weight:400}.com-2-team-panel-subtitle:before{content:'';position:absolute;left:0;top:50%;width:100%;height:1px;background-color:#00A4FF;background:linear-gradient(to left,rgba(0,209,255,0) 0,rgba(0,164,255,1) 72%)}.com-2-team-panel-subtitle .text{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:17px;background-color:#f7f8fa}.com-2-team-panel-articles>li{margin-bottom:10px}.com-2-team-panel-article{display:inline-block;vertical-align:middle;max-width:100%;font-size:12px;line-height:24px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-team-panel-article .split{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin:0 6px;width:2px;height:2px;background-color:#666;border-radius:50%}.com-2-team-panel-article:hover{color:#00a4ff}.com-2-team-panel-article:hover .split{background-color:#00a4ff}.com-2-team-panel-ft{position:absolute;left:0;bottom:0;width:100%;font-size:0;padding-bottom:20px;text-align:center}.com-2-team-panel:hover,.com-2-team-panel:hover .com-2-team-panel-subtitle .text{background-color:#eef1f5}.com-2-team-panel:hover .com-arrow-btn{background-color:#fff;color:#fff}.com-2-team-panel:hover .com-arrow-btn-text{background-color:#00a4ff}.com-2-team-panel:hover .com-arrow-btn-text:after{border-color:#00a4ff transparent transparent #00a4ff}.com-2-team-panel:hover .com-arrow-btn.actived,.com-2-team-panel:hover .com-arrow-btn:hover{box-shadow:0 4px 9px 0 rgba(0,164,255,.22)}.com-2-team-panels{font-size:0}.com-2-team-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;width:calc((100% - 1px - 20px * 2)/ 3)}.com-2-team-panels>.panel-cell:last-child{margin-right:0}.com-loading-placeholder.com-2-team-panel-loading{height:343px}.com-simple-ask{position:relative;padding:10px 20px 10px 76px;box-sizing:border-box;height:70px}.com-simple-ask:hover{background-color:#F7F8FA}.com-simple-ask .panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-simple-ask-answer{position:absolute;left:10px;top:10px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 5px 0;width:46px;height:46px;border-radius:2px;background-color:#E1EEFA;line-height:1.2;color:#00a4ff;text-align:center;cursor:pointer}.com-simple-ask-answer .num{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px}.com-simple-ask-answer .name{font-size:12px}.com-simple-ask-answer.none-answer{background-color:#F3F4F5;color:#444}.com-simple-ask-title{font-size:16px;line-height:28px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-simple-ask-tags{position:relative;z-index:2;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-simple-asks{font-size:0;margin-bottom:-10px}.com-simple-asks>.panel-cell{display:inline-block;vertical-align:top;width:100%}.com-simple-asks.list-2>.panel-cell{margin-right:20px;width:calc((100% - 20px - 1px)/ 2)}.com-simple-asks.list-2>.panel-cell:nth-child(2n){margin-right:0}.com-simple-ask-loading{height:60px;margin-bottom:10px}.com-2-login-panel{margin-bottom:20px;box-sizing:border-box;height:148px;padding-top:20px;text-align:center;background:url(src/components/LoginPanel2/css/img/bg.jpg) right top no-repeat #F7F8FA;background-size:auto 148px}.com-2-login-panel .login-tip{margin-bottom:20px;font-size:14px;line-height:24px;color:#999}.com-2-login-panel .login-tip-primary{font-size:18px}.com-2-login-panel .login-tip-primary em{color:#00a4ff}.com-2-login-panel .c-btn{margin:0 6px;width:110px;min-width:0}.com-2-login-panel .c-btn-hole{background-color:#fff}.com-2-login-panel .c-btn-hole:hover{background-color:#e8f1fb}.com-2-owner-panel{margin-bottom:20px;box-sizing:border-box;height:148px;padding:10px;background:url(src/components/LoginPanel2/css/img/bg.jpg) right top no-repeat #F7F8FA;background-size:auto 148px}.com-2-owner-panel-hd{position:relative;margin-bottom:18px;padding-left:100px}.com-2-owner-panel-hd .com-2-avatar{position:absolute;left:0;top:0;width:80px;height:80px}.com-2-owner-panel-main{min-height:61px}.com-2-owner-panel-title{font-size:16px;line-height:22px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-owner-panel-title a{color:inherit}.com-2-owner-panel-title a:hover{color:#00a4ff}.com-2-owner-panel-identity{margin-bottom:5px;font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-owner-panel .com-emblem-list{margin-top:0;margin-bottom:5px}.com-2-owner-panel .com-emblem{margin-left:0}.com-2-owner-panel .com-emblem:last-child{margin-right:0}.com-2-owner-panel-level-infos{position:relative;padding-right:55px}.com-2-owner-panel-level-title{position:absolute;left:100%;top:0;margin-left:-50px;font-size:12px;line-height:16px;color:#00a4ff;white-space:nowrap}.com-2-owner-panel-datas{font-size:0}.com-2-owner-panel-datas>li{display:inline-block;vertical-align:top;width:33.33%;box-sizing:border-box;padding-right:2px}.com-2-owner-panel-datas>li:last-child{padding-right:0}.com-2-owner-panel-data{display:block;height:20px;font-size:12px;line-height:20px;color:#666;text-align:center;background-color:#fff}.com-2-owner-panel-data:hover{color:#00a4ff}.com-2-owner-panel-data.has-msg:after{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-left:4px;width:6px;height:6px;border-radius:50%;background-color:#FF7800}.com-2-organizer{box-sizing:border-box;display:table;table-layout:fixed;padding:20px;width:100%;border:1px solid #E5E8ED;background-color:#fff;transition:box-shadow .3s linear}a.com-2-organizer:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-organizer-img{display:table-cell;width:120px;vertical-align:middle}.com-2-organizer-img img{display:block;width:100%;max-height:50px}.com-2-organizer-bd{display:table-cell;vertical-align:middle;padding-left:20px;word-wrap:break-word;height:70px}.com-2-organizer-title{font-size:18px;line-height:24px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-organizer-desc{margin-top:2px;font-size:14px;line-height:22px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-2-organizer.small{display:block;text-align:center}.com-2-organizer.small .com-2-organizer-img{display:block;width:120px;height:50px;margin:0 auto}.com-2-organizer.small .com-2-organizer-bd{display:block;margin-top:20px;padding:0}.com-2-organizer.small .com-2-organizer-desc{margin-top:10px}.com-2-organizers{font-size:0}.com-2-organizers>.panel-cell{margin-bottom:20px;font-size:14px}.com-2-organizers[class*=list]>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px}.com-2-organizers.list2>.panel-cell{width:calc((100% - 20px -1px)/ 2)}.com-2-organizers.list2>.panel-cell:nth-child(2n){margin-right:0}.com-2-organizers.list3>.panel-cell{width:calc((100% - 20px * 2 -1px)/ 3)}.com-2-organizers.list3>.panel-cell:nth-child(3n){margin-right:0}.com-2-organizers.list4>.panel-cell{width:calc((100% - 20px * 3 -1px)/ 4)}.com-2-organizers.list4>.panel-cell:nth-child(4n){margin-right:0}.com-action-panel{padding-top:30px;border-bottom:1px solid #E5E8ED}.com-action-panel-hd{position:relative;z-index:1;height:20px}.com-action-panel-action{font-size:14px;line-height:20px;color:#666}.com-action-panel-action-icon{display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-right:5px;width:20px;height:20px}.com-action-panel-action-icon.answer,.com-action-panel-action-icon.ask{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:71.5% 40.760000000000005%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.com-action-panel-action-icon.follow{top:-2px;background-image:url(sprite/AskDialog-201906131103.svg);;background-position:71.5% 52.72%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.com-action-panel-action-icon.join{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:71.5% 64.67%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.com-action-panel-action-icon.like{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:0.48% 79.89%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.com-action-panel-action-icon.publish{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:21.740000000000002% 79.89%;background-size:1135% 1019.9999999999999%;;background-repeat:no-repeat}.com-action-panel-time{position:absolute;right:0;top:0;font-size:14px;line-height:20px;color:#999}.com-action-panel .com-3-article-panel,.com-action-panel .com-3-salon-panel,.com-action-panel .com-3-tag-panel,.com-action-panel .com-column-panel,.com-action-panel .coml-2-user-panel{margin-top:-50px;padding-top:70px;padding-bottom:30px;border-bottom:none}.com-action-panel .com-ask-panel{margin-top:24px;margin-bottom:0;padding-bottom:30px;border-bottom:none}.com-ask-action{padding-top:30px}.com-ask-action-hd{position:relative;z-index:1;height:16px}.com-ask-action-action{font-size:14px;line-height:16px;color:#666}.com-ask-action .com-ask-panel{margin-top:24px;margin-bottom:0;padding-bottom:30px}.com-2-tab-subctrl{margin-bottom:20px;font-size:0}.com-2-tab-subctrl-nav{display:inline-block;vertical-align:middle;font-size:0}.com-2-tab-subctrl-nav-item{display:inline-block;vertical-align:middle;margin-right:45px;font-size:16px;line-height:22px;color:#666}.com-2-tab-subctrl-nav-item a{color:inherit}.com-2-tab-subctrl-nav-item a:hover{color:#00a4ff}.com-2-tab-subctrl-nav-item.actived{font-weight:500;color:#000}.com-2-tab-subctrl-nav-item.actived a{cursor:default}.com-2-tab-subctrl-nav-item.actived a:hover{color:inherit}.com-2-tab-subctrl-drop .com-bubble-menu a{padding:0 15px;height:40px;line-height:40px}.com-2-tab-subctrl-drop .c-bubble-trigger-btn{font-size:16px;line-height:22px;height:22px}.com-2-tab-subctrl-drop.actived .c-bubble-trigger-btn{font-weight:500;color:#000}.com-2-tab-subctrl-drop.actived:hover .c-bubble-trigger-btn{color:#00a4ff}.com-2-tab-subctrl-drop:hover .c-bubble{pointer-events:auto;margin-top:0;padding-top:10px;width:120px}.com-weak-section{margin-bottom:25px}.com-weak-section-title{font-size:16px;line-height:22px;color:#000;font-weight:400}.com-rec-section-hd{position:relative;text-align:center}.com-rec-section-hd:before{content:'';position:absolute;left:0;top:50%;width:100%;height:1px;background-color:#D8D8D8}.com-rec-section-title{position:relative;z-index:1;top:-2px;display:inline-block;vertical-align:middle;padding:0 10px;font-size:16px;line-height:22px;color:#999;font-weight:400;background-color:#fff}.com-rec-section-bd{padding-top:35px}.com-rec-section-ft{margin-top:20px;text-align:center}.com-rec-section-ft .c-btn{min-width:130px;height:32px;line-height:32px;font-size:14px}.com-rec-section-ft .c-btn-hole,.com-rec-section-ft .c-btn-weak{line-height:30px}.com-dialog-level{box-sizing:border-box;min-height:460px;padding:20px 0;text-align:center}.com-dialog-level-bd{box-sizing:border-box;min-height:340px;padding-top:1px}.com-dialog-level-title{margin-bottom:15px;font-size:24px;line-height:36px;font-weight:400;color:#000}.com-dialog-level-title em{color:#FF7800}.com-dialog-level-desc{font-size:18px;line-height:26px;color:#666}.com-dialog-level-ft{margin-top:20px;font-size:14px;line-height:26px;color:#999}.com-dialog-level-now{position:relative;box-sizing:border-box;padding-top:130px;height:230px;width:330px;margin:50px auto 17px;background-image:url(src/components/DLevel/css/img/slice/icon-now.jpg);background-size:100% auto}.com-dialog-level-now .now-content{margin:0 auto;width:110px;height:48px;font-size:32px;line-height:48px;text-align:center;color:#fff;font-weight:700}.com-dialog-level-goal{box-sizing:border-box;margin:77px auto 20px;padding-top:13px;width:220px;height:160px;text-align:center;background-size:100% auto;background-image:url(src/components/DLevel/css/img/slice/icon-goal.jpg)}.com-dialog-level-goal .goal-content{margin:0 auto;width:122px;height:140px;font-size:60px;line-height:140px;color:#fff;text-shadow:0 4px 4px #FCB53B;font-weight:500}.com-dialog-level-goal .goal-action{position:relative;top:-5px;margin-right:3px}.com-dialog-level-gift{margin:88px auto 10px;box-sizing:border-box;padding-top:42px;width:330px;height:160px;background-size:100% auto;background-image:url(src/components/DLevel/css/img/slice/icon-gift.jpg)}.com-dialog-level-gift .gift-content{margin:0 auto;width:160px;height:82px;box-sizing:border-box;text-align:center;color:#fff;padding-top:10px;text-shadow:0 4px 4px #FCB53B;font-weight:500}.com-dialog-level-gift .gift-price{font-size:30px;line-height:42px}.com-dialog-level-gift .gift-name{font-size:14px;line-height:20px}.com-narrow-layout{margin:0 auto;padding:25px 0 50px;width:800px}.com-narrow-layout-pages{margin-bottom:25px}.com-narrow-layout-prev{font-size:12px;line-height:18px;color:#000}.com-narrow-layout-prev:before{content:'';display:inline-block;vertical-align:middle;width:7px;height:11px;background-image:url(sprite/AskDialog-201906131103.svg);;margin-right:10px;position:relative;top:-1px;background-position:61.82% 54.400000000000006%;background-size:3242.857142857143% 1854.5454545454547%;;background-repeat:no-repeat}.com-narrow-layout-prev:hover{color:#00a4ff}.com-narrow-layout-prev:hover:before{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:50% 40.93%;background-size:3242.857142857143% 1854.5454545454547%;;background-repeat:no-repeat}.com-third-section{padding-bottom:25px;margin-bottom:25px;border-bottom:1px solid #eee}.com-third-section.without-border{padding-bottom:0;border-bottom:none}.com-third-section-hd{margin-bottom:20px}.com-third-section-title{font-size:18px;line-height:18px;color:#000;font-weight:400}.com-layout-panel{padding:30px;background-color:#fff;border:1px solid #E5E8ED;box-shadow:0 2px 4px 0 rgba(3,27,78,.06)}.com-layout-panel-subtab{margin-bottom:30px}.com-btn-group{display:inline-block;vertical-align:middle;font-size:0}.com-btn-group .c-btn{vertical-align:middle;box-sizing:border-box;min-width:96px;height:44px;padding:0 15px;border:1px solid #E7EAED;background-color:transparent;font-size:14px;line-height:42px;color:#000;text-align:center}.com-btn-group .c-btn+.c-btn{margin-left:-1px}.com-btn-group .c-btn:hover{position:relative;z-index:2;border-color:#00a4ff;color:#00a4ff}.com-btn-group .c-btn.actived,.com-btn-group .c-btn.actived:hover{position:relative;z-index:1;background-color:rgba(0,154,255,.1);border-color:#00a4ff;color:#00a4ff;cursor:default}.com-form-lattice{font-size:0}.com-form-lattice>.com-form-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px}.com-form-lattice.com-form-lattice-cols-1>.com-form-lattice-cell{width:100%}.com-form-lattice.com-form-lattice-cols-2>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (2 - 1))/ 2)}.com-form-lattice.com-form-lattice-cols-2>.com-form-lattice-cell:nth-child(2n){margin-right:0}.com-form-lattice.com-form-lattice-cols-2>.com-form-lattice-cell:nth-child(2n):after{display:none}.com-form-lattice.com-form-lattice-cols-3>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (3 - 1))/ 3)}.com-form-lattice.com-form-lattice-cols-3>.com-form-lattice-cell:nth-child(3n){margin-right:0}.com-form-lattice.com-form-lattice-cols-3>.com-form-lattice-cell:nth-child(3n):after{display:none}.com-form-lattice.com-form-lattice-cols-4>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (4 - 1))/ 4)}.com-form-lattice.com-form-lattice-cols-4>.com-form-lattice-cell:nth-child(4n){margin-right:0}.com-form-lattice.com-form-lattice-cols-4>.com-form-lattice-cell:nth-child(4n):after{display:none}.com-form-lattice.com-form-lattice-cols-5>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (5 - 1))/ 5)}.com-form-lattice.com-form-lattice-cols-5>.com-form-lattice-cell:nth-child(5n){margin-right:0}.com-form-lattice.com-form-lattice-cols-5>.com-form-lattice-cell:nth-child(5n):after{display:none}.com-form-lattice.com-form-lattice-cols-6>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (6 - 1))/ 6)}.com-form-lattice.com-form-lattice-cols-6>.com-form-lattice-cell:nth-child(6n){margin-right:0}.com-form-lattice.com-form-lattice-cols-6>.com-form-lattice-cell:nth-child(6n):after{display:none}.com-3-sub-section{margin-bottom:20px}.com-3-sub-section-hd{position:relative;margin-bottom:30px;line-height:24px}.com-3-sub-section-title{font-size:24px;line-height:24px;font-weight:400;color:#000}.com-3-sub-section-extra{position:absolute;right:0;top:0}.com-event-panel{margin-bottom:20px}.com-event-panel-inner{box-sizing:border-box;display:table;width:100%;table-layout:fixed}.com-event-panel-object{display:table-cell;width:220px;vertical-align:middle}.com-event-panel-img{display:block;width:220px;height:118px}.com-event-panel-body{position:relative;display:table-cell;vertical-align:middle;border-width:1px 0;border-style:solid;border-color:#ddd transparent;padding:0 140px 0 15px}.com-event-panel-body:after{position:absolute;content:"";right:0;top:-1px;bottom:-1px;width:5px;background:#00A1FF}.com-event-panel-act{position:absolute;right:30px;top:50%;z-index:2;transform:translateY(-50%)}.com-event-panel-act .c-btn{min-width:auto}.com-event-panel-desc,.com-event-panel-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-event-panel-title{font-size:18px;font-weight:700;color:#333}.com-event-panel-desc{font-size:14px;color:#666;margin:10px 0 0}.com-event-panel-s .com-event-panel-object{display:block;width:auto}.com-event-panel-s .com-event-panel-img{width:46px;height:160px}.com-event-panel-l .com-event-panel-img{width:330px;height:160px}.com-event-panel-xl .com-event-panel-object{display:block;width:auto}.com-event-panel-xl .com-event-panel-img{width:700px;height:118px}.com-course-card-list>.card-item{margin-bottom:20px}.com-media-motion{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.1);-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:transform .3s;-moz-transition:transform .3s;-ms-transition:transform .3s;-o-transition:transform .3s;transition:transform .3s}.com-media-motion:hover{-webkit-transform:translate3d(0,-3px,0);transform:translate3d(0,-3px,0)}.com-course-card .com-course-card-title{font-size:14px;color:#333;line-height:24px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.com-course-card .com-course-card-desc{font-size:14px;color:#666;line-height:24px;height:48px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;word-break:break-all;word-wrap:break-word;overflow:hidden;margin-top:10px}.com-course-card .com-course-card-money{font-size:16px;line-height:25px;color:#ff7200}.com-course-card .com-course-card-unit{color:#ff7200;font-size:14px;margin-left:5px}.com-course-card{position:relative;background-color:#fff;display:block}.com-course-card .com-course-card-free{font-size:16px;color:#0abf5b;line-height:25px}.com-course-card .col-star-rating .star-text-lt,.com-course-card .col-star-rating .star-text-rt{font-size:14px}.com-course-card .com-course-card-bd{padding:10px}.com-course-card .com-course-card-title{height:42px;line-height:21px;font-size:14px;color:#333;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.com-course-card .com-course-card-detail{margin-top:6px}.com-course-card .com-course-card-detail-inner{display:table;width:100%;height:22px;box-sizing:border-box}.com-course-card .col-star-rating,.com-course-card .com-course-card-price{display:table-cell;vertical-align:middle}.com-course-card .com-course-card-price{right:10px;bottom:20px;position:static;line-height:22px}.com-course-card .com-course-card-price .com-course-card-free{line-height:22px;font-size:16px;color:#0abf5b}.com-course-card .com-course-card-price .com-course-card-load{line-height:22px;font-size:14px;color:#999}.com-course-card .com-course-card-price .com-course-card-money,.com-course-card .com-course-card-price .com-course-card-unit{line-height:1;font-size:16px;color:#ff7200}.com-course-card .com-course-card-price .com-course-card-unit{position:relative;top:-1px;font-size:14px}.com-course-card .com-course-card-price .com-course-card-origin{position:relative;top:-1px;margin-left:10px;font-size:14px;color:#999}.com-course-card .com-price{display:table-cell;vertical-align:middle;font-size:16px}.com-course-card .com-price-unit{margin-left:5px;font-size:14px}.com-course-card .com-price-origin{margin-left:10px;font-size:14px}.com-course-card .col-star-rating{margin-top:0;text-align:right}.com-course-card .col-star-rating .star-list{margin-left:0}.com-course-card .star-text-rt{margin-left:5px}.com-course-img{padding-top:50%;background-size:cover;background-position:center;position:relative;color:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-align:center;background-color:#00a4ff}.com-course-img .com-course-img-title{font-size:24px;color:#fff;line-height:48px;padding:0 50px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;word-break:break-all;word-wrap:break-word;overflow:hidden;text-align:left}.com-course-img.course-img-s .com-course-img-title{padding:0 20px}.com-course-img .com-course-img-desc{padding:0 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;color:#fff;line-height:22px}.com-course-img::after{content:'';position:absolute;left:0;top:0;width:100%;height:100%;opacity:.9}.com-course-img.color1::after{background:linear-gradient(to right ,#0092ff ,#65c3ff)}.com-course-img.color2::after{background:linear-gradient(to right ,#00B7D6 ,#6ce7f3)}.com-course-img.color3::after{background:linear-gradient(to right ,#2059bf ,#4ba5ff)}.com-course-img .com-course-img-divider{width:220px;height:1px;background:#fff;margin:2px auto 5px}.com-course-img .com-course-img-con{left:0;top:50%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);transform:translate(0,-50%);width:100%;z-index:1}.com-course-img.course-img-s .com-course-img-con{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;top:45px;left:0}.com-course-img.course-img-s{padding-top:50%}.com-course-img.course-img-s .com-course-img-title{line-height:30px;font-size:18px;text-align:left}.com-course-img.course-img-s .com-course-img-desc{font-size:12px;line-height:17px}.com-course-img.course-img-s .com-course-img-divider{width:141px;opacity:.6}.com-course-img .com-bar-tag{background-color:#fff;height:20px;border:none;line-height:20px;font-size:12px;margin-left:0}.com-course-img .com-course-img-tag-lt{position:absolute;top:0;z-index:2}.com-course-img .com-bar-tag.hot{color:#fff;background:#fd7822}.com-course-img .com-bar-tag.cur{background-color:#00a4ff;color:#fff;vertical-align:text-bottom}.com-course-img .com-bar-tag.done,.com-course-img .com-bar-tag.free,.com-course-img .com-bar-tag.live{color:#fff;background-color:rgba(0,0,0,.25)}.com-course-img .com-bar-tag.living,.com-course-img .com-bar-tag.new,.com-course-img .com-bar-tag.recommend,.com-course-img .com-bar-tag.update,.com-course-img .com-bar-tag.updating{color:#fff;background-color:#e1504a}.com-course-img .com-bar-tag.living .icon-live{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:91% 9.790000000000001%;background-size:1418.75% 2039.9999999999998%;;background-repeat:no-repeat}.com-course-img .com-course-img-con,.com-course-img.course-img-s .com-course-img-con{position:absolute;top:50%;margin-top:-30px;width:100%;height:60px;max-height:60px;overflow:hidden;box-sizing:border-box;transform:none;-ms-transform:none;-moz-transform:none;-webkit-transform:none;-o-transform:none}.com-course-img .com-course-img-con .com-course-img-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.com-course-img .com-bar-tag{padding:0 5px;height:18px;line-height:18px;font-size:0}.com-course-img .com-bar-tag+.com-bar-tag{margin-left:5px}.com-course-img .com-course-img-tag{position:absolute;font-size:0;z-index:2}.com-course-img .com-course-img-tag-lt{left:0;top:0}.com-course-img .com-course-img-tag-lb{left:0;bottom:0}.com-course-img .com-course-img-tag-rt{position:absolute;bottom:0;z-index:2;font-size:0;right:0;top:0}.com-course-img .com-course-img-tag-rb{right:0;bottom:0}.com-course-img .com-course-img-tag .com-bar-tag{vertical-align:top}.com-star-rating .star-text-lt,.com-star-rating .star-text-rt{font-size:14px;color:#666;line-height:22px;vertical-align:middle}.com-star-rating .star-text-rt{vertical-align:middle}.com-star-rating .star-list{font-size:0;display:inline-block;vertical-align:middle;margin-left:4px;line-height:1}.com-star-rating .star{width:12px;height:12px;background-image:url(sprite/AskDialog-201906131103.svg);;display:inline-block;margin:0 2px;background-position:44.65% 41.15%;background-size:1891.6666666666667% 1700%;;background-repeat:no-repeat}.com-star-rating .star.full{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:32.09% 28.65%;background-size:1891.6666666666667% 1700%;;background-repeat:no-repeat}.com-star-rating .star.part{background-image:url(sprite/AskDialog-201906131103.svg);;background-position:60.92999999999999% 63.019999999999996%;background-size:1891.6666666666667% 1700%;;background-repeat:no-repeat}.com-star-rating .error-tip{color:red}.com-price{line-height:1;font-size:30px;color:#ff7200}.com-price.free{color:#0abf5b}.com-price.loading,.com-price.paid{color:#999}.com-price .com-price-unit{position:relative;top:-1px;margin-left:14px;font-size:18px}.com-price .com-price-origin{position:relative;top:-1px;margin-left:22px;font-size:18px;color:#999}.com-bar-tag{font-size:0}.com-bar-tag.color-og{color:#fd7822;border-color:#fd7822}.com-bar-tag.color-rd{color:#e1504a;border-color:#e1504a}.com-bar-tag.fill{line-height:18px;color:#fff;background-color:rgba(0,0,0,.25);border:none}.com-bar-tag.fill.color-og{background-color:#fd7822}.com-bar-tag.fill.color-rd{background-color:#e1504a}.com-bar-tag i{display:inline-block;vertical-align:middle}.com-bar-tag span{font-size:12px;vertical-align:middle}.com-lattice{font-size:0}.com-lattice>.com-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px;margin-bottom:40px}.com-lattice.com-lattice-cols-1>.com-lattice-cell{width:100%}.com-lattice.com-lattice-cols-2>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (2 - 1))/ 2)}.com-lattice.com-lattice-cols-2>.com-lattice-cell:nth-child(2n){margin-right:0}.com-lattice.com-lattice-cols-2>.com-lattice-cell:nth-child(2n):after{display:none}.com-lattice.com-lattice-cols-3>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (3 - 1))/ 3)}.com-lattice.com-lattice-cols-3>.com-lattice-cell:nth-child(3n){margin-right:0}.com-lattice.com-lattice-cols-3>.com-lattice-cell:nth-child(3n):after{display:none}.com-lattice.com-lattice-cols-4>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (4 - 1))/ 4)}.com-lattice.com-lattice-cols-4>.com-lattice-cell:nth-child(4n){margin-right:0}.com-lattice.com-lattice-cols-4>.com-lattice-cell:nth-child(4n):after{display:none}.com-lattice.com-lattice-cols-5>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (5 - 1))/ 5)}.com-lattice.com-lattice-cols-5>.com-lattice-cell:nth-child(5n){margin-right:0}.com-lattice.com-lattice-cols-5>.com-lattice-cell:nth-child(5n):after{display:none}.com-lattice.com-lattice-cols-6>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (6 - 1))/ 6)}.com-lattice.com-lattice-cols-6>.com-lattice-cell:nth-child(6n){margin-right:0}.com-lattice.com-lattice-cols-6>.com-lattice-cell:nth-child(6n):after{display:none}.com-lattice-line{font-size:0}.com-lattice-line>.com-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px;margin-bottom:20px;position:relative}.com-lattice-line.com-lattice-cols-1>.com-lattice-cell{width:100%}.com-lattice-line.com-lattice-cols-2>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (2 - 1))/ 2)}.com-lattice-line.com-lattice-cols-2>.com-lattice-cell:nth-child(2n){margin-right:0}.com-lattice-line.com-lattice-cols-2>.com-lattice-cell:nth-child(2n):after{display:none}.com-lattice-line.com-lattice-cols-3>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (3 - 1))/ 3)}.com-lattice-line.com-lattice-cols-3>.com-lattice-cell:nth-child(3n){margin-right:0}.com-lattice-line.com-lattice-cols-3>.com-lattice-cell:nth-child(3n):after{display:none}.com-lattice-line.com-lattice-cols-4>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (4 - 1))/ 4)}.com-lattice-line.com-lattice-cols-4>.com-lattice-cell:nth-child(4n){margin-right:0}.com-lattice-line.com-lattice-cols-4>.com-lattice-cell:nth-child(4n):after{display:none}.com-lattice-line.com-lattice-cols-5>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (5 - 1))/ 5)}.com-lattice-line.com-lattice-cols-5>.com-lattice-cell:nth-child(5n){margin-right:0}.com-lattice-line.com-lattice-cols-5>.com-lattice-cell:nth-child(5n):after{display:none}.com-lattice-line.com-lattice-cols-6>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (6 - 1))/ 6)}.com-lattice-line.com-lattice-cols-6>.com-lattice-cell:nth-child(6n){margin-right:0}.com-lattice-line.com-lattice-cols-6>.com-lattice-cell:nth-child(6n):after{display:none}.com-lattice-line>.com-lattice-cell:after{content:'';position:absolute;right:-40px;top:20px;bottom:20px;width:1px;background-color:#e5e5e5}.com-lattice-line>.com-lattice-cell:last-child:after{display:none}.com-lattice-card{font-size:0}.com-lattice-card>.com-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px;margin-bottom:20px}.com-lattice-card.com-lattice-cols-1>.com-lattice-cell{width:100%}.com-lattice-card.com-lattice-cols-2>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (2 - 1))/ 2)}.com-lattice-card.com-lattice-cols-2>.com-lattice-cell:nth-child(2n){margin-right:0}.com-lattice-card.com-lattice-cols-2>.com-lattice-cell:nth-child(2n):after{display:none}.com-lattice-card.com-lattice-cols-3>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (3 - 1))/ 3)}.com-lattice-card.com-lattice-cols-3>.com-lattice-cell:nth-child(3n){margin-right:0}.com-lattice-card.com-lattice-cols-3>.com-lattice-cell:nth-child(3n):after{display:none}.com-lattice-card.com-lattice-cols-4>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (4 - 1))/ 4)}.com-lattice-card.com-lattice-cols-4>.com-lattice-cell:nth-child(4n){margin-right:0}.com-lattice-card.com-lattice-cols-4>.com-lattice-cell:nth-child(4n):after{display:none}.com-lattice-card.com-lattice-cols-5>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (5 - 1))/ 5)}.com-lattice-card.com-lattice-cols-5>.com-lattice-cell:nth-child(5n){margin-right:0}.com-lattice-card.com-lattice-cols-5>.com-lattice-cell:nth-child(5n):after{display:none}.com-lattice-card.com-lattice-cols-6>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (6 - 1))/ 6)}.com-lattice-card.com-lattice-cols-6>.com-lattice-cell:nth-child(6n){margin-right:0}.com-lattice-card.com-lattice-cols-6>.com-lattice-cell:nth-child(6n):after{display:none}@media all and (max-width:768px){.qa-ask-checkbox{background-image:none;-webkit-appearance:checkbox}.qa-ask-checkbox:checked,.qa-ask-checkbox:checked:focus,.qa-ask-checkbox:checked:hover,.qa-ask-checkbox:focus,.qa-ask-checkbox:hover,.qa-ask-checkbox[disabled],.qa-ask-checkbox[disabled]:checked{background-image:none}}@media screen and (max-width:1680px){.qc-header-search{left:330px;right:340px;margin-left:0;width:auto}}@media screen and (max-width:1340px){.qc-header-search .qa-search-bar{width:auto}}@media screen and (max-width:1200px){.com-salon-specialist-identity{display:none}}@media screen and (max-width:1440px){.com-2-article-panel{padding:30px 20px}.com-2-article-panel-author{margin-bottom:8px}.com-2-article-panel-title{display:block;display:-webkit-box;white-space:normal;height:54px}.com-2-article-panel .com-media-body{height:69px}.com-2-article-panel-cnt{position:relative}.com-2-article-panel-cnt .com-media-object{padding-left:20px;width:80px;height:63px}.com-2-article-panel-cnt .com-thumbnail{width:80px;height:60px}.com-2-article-panel-desc{line-height:21px;-webkit-line-clamp:3;max-height:63px}.com-2-article-panel-opts{position:absolute;left:0;bottom:-30px;width:100%}.com-2-article-panel.large{padding-left:250px}.com-2-article-panel.large.without-img{padding-left:20px}.com-2-article-panel.large .com-2-article-panel-title{white-space:normal}.com-2-article-panel.large .com-2-article-panel-cnt{position:static}.com-2-article-panel.large .com-2-article-panel-desc{line-height:24px}.com-2-article-panel.large .com-2-article-panel-cnt .com-media-object{left:20px;top:30px}.com-2-article-panel.large .com-thumbnail{width:200px;height:190px}.com-2-article-panel.large .com-2-article-panel-opts{position:static}.com-2-article-panels{margin-bottom:-20px}.com-2-article-panels>.panel-cell{margin-right:20px;margin-bottom:20px;width:calc((100% - 20px * 2)/ 3)}.com-2-article-panels>.panel-cell:first-child{width:calc(100% - 20px - (100% - 20px * 2)/ 3)}.com-2-article-panels>.panel-cell:nth-child(3n+2){margin-right:0;width:calc((100% - 20px * 2)/ 3 - 1px)}}@media screen and (max-width:1440px){.com-4-article-panels>.panel-cell,.com-4-article-panels>.panel-cell:first-child{width:calc((100% - 10px - 1px)/ 2)}.com-4-article-panels>.panel-cell:nth-child(2n){margin-right:0}.com-4-article-panels>.panel-cell:nth-child(n+5){display:none}.com-4-article-panel.large{padding-left:20px}.com-4-article-panel.large .com-4-article-panel-title{margin-bottom:10px}.com-4-article-panel.large .com-4-article-panel-cnt{display:table}.com-4-article-panel.large .com-4-article-panel-infos{margin-top:10px}.com-4-article-panel.large .com-4-article-panel-cnt .com-media-object{position:static;display:table-cell;width:83px;padding-top:5px}.com-4-article-panel.large .com-thumbnail{width:83px;height:63px}.com-4-article-panel-author .author-name,.com-4-article-panel.large .com-4-article-panel-author .author-name{max-width:8em}.panel-cell:nth-child(n+3) .com-4-article-panel-author .author-name{max-width:16em}}@media screen and (max-width:1440px){.com-salon-panel-hd{padding-left:20px;padding-right:20px}.com-salon-panel-bd{padding:20px}.com-salon-panel.large{padding:30px 20px 20px}.com-salon-panel.large .com-salon-panel-img{background-size:auto 70%}.com-salon-panel.large .com-salon-panel-title{max-width:250px}.com-salon-panel.large .com-salon-panel-infos{margin-top:9px}.com-salon-panel.large .com-salon-panel-btns{left:20px;bottom:20px}.com-salon-panel.large .panel-btn{position:relative;left:0;top:0;margin-right:0}.com-salon-panels{margin-bottom:-20px}.com-salon-panels>.panel-cell,.com-salon-panels>.panel-cell:nth-child(1),.com-salon-panels>.panel-cell:nth-child(2){margin-right:20px;margin-bottom:20px;width:calc((100% - 1px - 20px)/ 2)}.com-salon-panels>.panel-cell:nth-child(2n){margin-right:0}.com-salon-panels>.panel-cell:nth-child(n+5){display:none}}@media screen and (max-width:1440px){.com-user-panels>.panel-cell{width:202px}}@media screen and (max-width:1440px){.com-special-list-wrap{padding:0 20px}.com-special-thumbnail{right:20px;top:20px;width:366px;height:366px}.com-special-list{margin-right:386px}}@media screen and (max-width:1440px){.com-team-panel-bd{padding:0 20px}.com-team-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;width:calc((100% - 1px - 20px)/ 2)}.com-team-panels>.panel-cell:nth-child(2){margin-right:0}.com-team-panels>.panel-cell:nth-child(n+3){display:none}}@media screen and (max-width:1440px){.com-2-ask-panel{padding-left:20px;padding-right:20px}.com-2-ask-panel-bd{min-height:143px}.com-2-ask-panel-author-name{margin-top:7px}.com-2-ask-panel-answer{padding-top:20px;padding-bottom:20px}.com-2-ask-panel-answer .com-media-body{height:100px}.com-2-ask-panel-answer-opts{margin-top:11px}.com-2-ask-panel-answer .com-media-object{padding-left:20px;width:150px}.com-2-ask-panel-answer .com-thumbnail{width:150px;height:100px}}@media screen and (max-width:1440px){.com-2-doc-panels-wrap>.wrap-cell:first-child{width:calc((100% - 20px * 2)/ 3 * 2 + 20px)}.com-2-doc-panels-wrap>.wrap-cell:last-child{width:calc((100% - 20px * 2)/ 3)}.com-2-doc-panels>.panel-cell{margin-right:0;width:100%}.com-2-doc-panels>.panel-cell:nth-child(n+4){display:none}.com-2-doc-panels.large>.panel-cell{margin-right:20px;width:calc((100% - 1px - 20px)/ 2)}}@media screen and (max-width:1440px){.com-2-doc-panels-wrap.v2>.wrap-cell:first-child{width:calc((100% - 10px * 2)/ 3 * 2 + 10px)}.com-2-doc-panels-wrap.v2>.wrap-cell:last-child{width:calc((100% - 10px * 2)/ 3)}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell,.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell:nth-child(2n){margin-right:0;width:100%}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell:nth-child(n+4){display:none}.com-2-doc-panels-wrap.v2 .com-2-doc-panels.large>.panel-cell{margin-right:10px;width:calc((100% - 1px - 10px)/ 2)}}@media screen and (max-width:1440px){.com-hero-events>.event-cell:nth-child(n+5){display:none}}@media (max-width:1200px){.com-full-layout-main{padding:20px}}@media screen and (max-width:1920px){.com-2-hero-item-img{right:-60px}.com-2-hero-item-cnt{padding-left:30px;padding-right:30px}.com-2-hero-item-btns{left:30px}}@media screen and (max-width:1440px){.com-2-hero-item-cnt{padding-left:20px;padding-right:20px;height:195px}.com-2-hero-item-btns{left:20px}.com-2-hero-item-title{font-size:22px;line-height:32px;max-height:64px}.com-2-hero-item-desc{font-size:12px;line-height:20px;white-space:normal;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;height:40px}.com-2-hero-item .com-2-hero-item-desc,.com-2-hero-item .com-2-hero-item-title{max-width:260px}}@media screen and (max-width:1440px){.com-3-user-panels>.panel-cell{width:calc((100% - 20px * 3 - 1px)/ 4)}.com-3-user-panels>.panel-cell:nth-child(n+5){display:none}}@media screen and (max-width:1440px){.com-2-team-panels>.panel-cell{width:calc((100% - 1px - 20px)/ 2)}.com-2-team-panels>.panel-cell:nth-child(2n){margin-right:0}.com-2-team-panels>.panel-cell:last-child{display:none}}@media (max-width:768px){.com-course-img.course-img-s{padding-top:23.188%}.com-course-img.course-img-s .com-course-img-con{top:50%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);transform:translate(0,-50%)}}@media screen and (max-width:768px){.com-course-img .com-course-img-con{display:none}}@media screen and (max-width:600px){.com-star-rating .star-text-lt{vertical-align:2px}.com-star-rating .star-list,.com-star-rating .star-text-rt{vertical-align:1px}}@media (min-width:769px){.com-lattice-line.com-lattice-cols-1>.com-lattice-cell:after{display:none}} +#MAXIM{content:"weu20190613110403"} \ No newline at end of file diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/Column-20199161611.css b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/Column-20199161611.css new file mode 100644 index 0000000..dbc3759 --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/Column-20199161611.css @@ -0,0 +1,2 @@ +@charset "UTF-8";.col-hidden{display:none !important}.col-body{-webkit-box-sizing:border-box;box-sizing:border-box;margin:30px auto 60px;padding:0 10px;max-width:1200px}.col-body.full-screen{margin:0;padding:0;max-width:none}.col-body-main{-webkit-box-sizing:border-box;box-sizing:border-box;margin:30px auto;padding:0 10px;max-width:1200px}.pg-column .col-body-main,.pg-tag-articles .col-body-main,.pg-tag-articles .com-inner{max-width:830px}.col-body-hd{margin-top:30px;margin-bottom:35px;padding-bottom:30px;border-bottom:1px solid #e5e5e5}.col-body-hd .hd-title{font-size:30px;font-weight:400}.col-body-hd .hd-icon{display:inline-block;vertical-align:-5px;margin-right:10px;width:32px;height:32px}.col-body-hd .hd-icon.tag{background-image:url(sprite/Column-20199161611.svg);;background-position:0.48% 39.57%;background-size:756.25% 684.375%;;background-repeat:no-repeat}.com-sidebar-panel .col-tags{margin-top:0;margin-bottom:-10px}.col-tags{margin:30px -5px 0;font-size:0}.col-tag{display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 5px 10px;padding:0 10px;height:30px;max-width:90%;font-size:12px;line-height:28px;border:1px solid #e5e5e5;border-radius:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#000}.col-tag .tag-num{margin-left:10px;color:#999;font-weight:700}.col-tag.actived,.col-tag:hover{border-color:#00a4ff;color:#00a4ff}.col-tag.actived{cursor:default}.col-tag.actived .tag-num,.col-tag:hover .tag-num{color:#00a4ff}.col-tag-trigger{display:inline-block;vertical-align:middle;margin:0 5px 10px;width:24px;height:30px;line-height:30px;text-align:center;font-size:0}.col-tag-trigger:after{content:'';display:inline-block;vertical-align:middle;width:12px;height:7px;background-image:url(sprite/Column-20199161611.svg);;-webkit-transition:all .2s ease;transition:all .2s ease;background-position:97.83% 83.49%;background-size:2016.6666666666667% 3128.5714285714284%;;background-repeat:no-repeat}.col-tag-trigger.showed:after{-webkit-transform:rotate3d(0,0,1,-180deg);transform:rotate3d(0,0,1,-180deg)}.col-filter-bar{margin-bottom:25px;line-height:24px}.col-filter-bar:after,.col-filter-bar:before{content:'';display:table;clear:both}.col-filter-bar .filter-title{float:left;font-size:16px;font-weight:400;color:#999}.col-filter-bar .filter-title.primary{color:#000}.col-filter-bar .extra-part{float:right}.col-filter-tab{display:inline-block;vertical-align:middle;font-size:0}.col-filter-bar .filter-item{display:inline-block;vertical-align:middle;color:#333;font-size:14px}.col-filter-bar .filter-item:hover{color:#00a4ff}.col-filter-bar .filter-item.actived{color:#00a4ff;font-weight:700}.col-filter-bar .col-split{margin:0 15px}.col-datas{margin-top:24px;color:#999;font-size:0}.col-data{display:inline-block;vertical-align:middle;font-size:14px}.col-datas .col-split{width:auto;height:auto;background:0 0}.col-datas .col-split:before{content:'\B7';font-size:14px}.col-avatar{display:inline-block;vertical-align:middle;width:32px;height:32px;border-radius:50%;background-size:cover;background-position:center;background-repeat:no-repeat}.c-crumb{margin-bottom:20px;font-size:0}.c-crumb a{display:inline-block;vertical-align:middle;font-size:14px;color:#333}.c-crumb a:hover{color:#00a4ff}.c-crumb .crumb-split{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin:0 10px;width:7px;height:11px;background-image:url(src/projects/Column/cssComponents/img/temp/group-trigger2bf83b8d97e800ee2d39d2f724abb7a6.svg)}.c-crumb .crumb-current{display:inline-block;vertical-align:middle;font-size:14px;color:#999}.c-textarea{-webkit-box-sizing:border-box;box-sizing:border-box;height:auto}.c-textarea.block{width:100%}.c-textarea:disabled{background:#f7f8fa}.c-input-text{-webkit-box-sizing:border-box;box-sizing:border-box;height:35px;width:280px;border-color:#e0e0e0}.c-input-text:focus,.c-input-text:hover{border-color:#00a4ff}.c-input-text:disabled{border-color:#e0e0e0;background:#f7f8fa}.c-input-text.block{width:100%}.c-input-text.small{height:30px;font-size:12px;line-height:18px}.c-dropdown.block{display:block;width:auto}.c-dropdown .c-dropdown-menu{max-height:none;z-index:900;overflow:visible}.c-dropdown-menu>ul{max-height:300px;overflow-y:auto;overflow-x:hidden}.c-dropdown-menu-ft{border-top:1px solid #e5e5e5}.c-dropdown-menu-ft a{display:block;padding:0 10px;line-height:35px;text-align:center}.c-dropdown-menu-ft .icon{display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-right:5px}.c-dropdown-menu-ft .icon.edit{width:15px;height:15px;background-image:url(src/projects/Column/cssComponents/img/temp/sidebar-editd18d439a2ab2a83d3b74f09764552ecb.png)}.c-dropdown-menu-ft .edit-text{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 10px;height:34px;width:100%;border:none;line-height:24px;-webkit-box-shadow:0 0 0 1px #e5e5e5;box-shadow:0 0 0 1px #e5e5e5}.c-dropdown-menu-ft .edit-text:focus{-webkit-box-shadow:0 0 0 1px #00a4ff;box-shadow:0 0 0 1px #00a4ff}.c-dropdown-menu-ft .edit-text.error{-webkit-box-shadow:0 0 0 1px #E54544;box-shadow:0 0 0 1px #E54544}.c-dropdown-menu-ft .edit-btns{border-top:1px solid #e5e5e5;font-size:0}.c-dropdown-menu-ft .edit-btn{-webkit-box-sizing:border-box;box-sizing:border-box;width:50%;background-color:transparent;border:none;border-right:1px solid #e5e5e5;font-size:12px;line-height:34px;text-align:center}.c-dropdown-menu-ft .edit-btn:hover{background-color:#f2f2f2}.c-dropdown-menu-ft .edit-btn:last-child{border-right:none}.c-dropdown-btn-style .c-dropdown-link,.c-dropdown-btn-style .c-dropdown-menu li a{color:#333}.c-dropdown-btn-style .c-dropdown-link.placeholder{color:#999}.c-dialog-form-control .col-lables{margin-bottom:-10px}.col-lables .c-form-ctrl-label{margin-right:10px;margin-bottom:10px}.c-f-list.vertical{padding:0}.c-f-list.vertical .f-list-item{margin:0 0 20px;padding:0}.c-f-list.vertical .c-f-list-tit{position:static;display:block;margin-bottom:10px;width:auto;color:#666;z-index:auto}.c-f-list.vertical .c-f-list-con{padding-left:0;z-index:auto}.public-DraftEditor-content{min-height:180px}.DraftEditor-editorContainer,.DraftEditor-root,.public-DraftEditor-content{height:inherit;text-align:initial}.public-DraftEditor-content[contenteditable=true]{-webkit-user-modify:read-write-plaintext-only}.DraftEditor-root{position:relative}.DraftEditor-editorContainer{background-color:rgba(255,255,255,0);border-left:.1px solid transparent;position:relative;z-index:1}.public-DraftEditor-block{position:relative}.DraftEditor-alignLeft .public-DraftStyleDefault-block{text-align:left}.DraftEditor-alignLeft .public-DraftEditorPlaceholder-root{left:0;text-align:left}.DraftEditor-alignCenter .public-DraftStyleDefault-block{text-align:center}.DraftEditor-alignCenter .public-DraftEditorPlaceholder-root{margin:0 auto;text-align:center;width:100%}.DraftEditor-alignRight .public-DraftStyleDefault-block{text-align:right}.DraftEditor-alignRight .public-DraftEditorPlaceholder-root{right:0;text-align:right}.public-DraftEditorPlaceholder-root{color:#9197a3;position:absolute;z-index:0}.public-DraftEditorPlaceholder-hasFocus{color:#bdc1c9}.DraftEditorPlaceholder-hidden{display:none}.public-DraftStyleDefault-block{position:relative;white-space:pre-wrap}.public-DraftStyleDefault-ltr{direction:ltr;text-align:left}.public-DraftStyleDefault-rtl{direction:rtl;text-align:right}.qa-r-editor-container{position:relative;padding-top:46px}.qa-r-editor-toolbar{position:absolute;left:0;top:0;z-index:100;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:46px;border-bottom:1px solid #e5e5e5;line-height:46px;font-size:0;background-color:#fff}.qa-r-editor-btns{overflow:hidden}.qa-r-editor-btn-wrap{display:inline-block;vertical-align:middle;margin-right:11px}.qa-r-editor-btn-wrap:last-child{margin-right:0}.qa-r-editor-btn{display:inline-block;vertical-align:middle;padding:0;border:none;background-color:transparent;cursor:pointer;text-align:center}[class*=' qa-ico-'],[class^=qa-ico-]{display:inline-block;vertical-align:middle;width:16px;height:16px;font-size:0;font-style:normal}.qa-r-editor-btn.disabled{opacity:.5;cursor:not-allowed}.qa-ico-bold,.qa-r-editor-btn.disabled .qa-ico-bold,.qa-r-editor-btn.disabled:hover .qa-ico-bold{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 0.49%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-bold,.qa-r-editor-btn:hover .qa-ico-bold{background-image:url(sprite/Column-20199161611.svg);;background-position:65.03999999999999% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-italic,.qa-r-editor-btn.disabled .qa-ico-italic,.qa-r-editor-btn.disabled:hover .qa-ico-italic{background-image:url(sprite/Column-20199161611.svg);;background-position:64.16% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-italic,.qa-r-editor-btn:hover .qa-ico-italic{background-image:url(sprite/Column-20199161611.svg);;background-position:72.11999999999999% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-underline,.qa-r-editor-btn.disabled .qa-ico-underline,.qa-r-editor-btn.disabled:hover .qa-ico-underline{background-image:url(sprite/Column-20199161611.svg);;background-position:48.230000000000004% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-underline,.qa-r-editor-btn:hover .qa-ico-underline{background-image:url(sprite/Column-20199161611.svg);;background-position:72.11999999999999% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-code,.qa-r-editor-btn.disabled .qa-ico-code,.qa-r-editor-btn.disabled:hover .qa-ico-code{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 35.96%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-code,.qa-r-editor-btn:hover .qa-ico-code{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 27.089999999999996%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-h,.qa-r-editor-btn.disabled .qa-ico-h,.qa-r-editor-btn.disabled:hover .qa-ico-h{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 71.43%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-h,.qa-r-editor-btn:hover .qa-ico-h{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 53.690000000000005%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-blockquote,.qa-r-editor-btn.disabled .qa-ico-blockquote,.qa-r-editor-btn.disabled:hover .qa-ico-blockquote{background-image:url(sprite/Column-20199161611.svg);;background-position:57.08% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-blockquote,.qa-r-editor-btn:hover .qa-ico-blockquote{background-image:url(sprite/Column-20199161611.svg);;background-position:49.120000000000005% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-code-block,.qa-r-editor-btn.disabled .qa-ico-code-block,.qa-r-editor-btn.disabled:hover .qa-ico-code-block{width:18px;background-image:url(sprite/Column-20199161611.svg);;background-position:57.589999999999996% 23.150000000000002%;background-size:1344.4444444444446% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-code-block,.qa-r-editor-btn:hover .qa-ico-code-block{background-image:url(sprite/Column-20199161611.svg);;background-position:0.44999999999999996% 67%;background-size:1344.4444444444446% 1368.75%;;background-repeat:no-repeat}.qa-ico-ol,.qa-r-editor-btn.disabled .qa-ico-ol,.qa-r-editor-btn.disabled:hover .qa-ico-ol{background-image:url(sprite/Column-20199161611.svg);;background-position:16.37% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-ol,.qa-r-editor-btn:hover .qa-ico-ol{background-image:url(sprite/Column-20199161611.svg);;background-position:8.41% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-ul,.qa-r-editor-btn.disabled .qa-ico-ul,.qa-r-editor-btn.disabled:hover .qa-ico-ul{background-image:url(sprite/Column-20199161611.svg);;background-position:40.27% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-ul,.qa-r-editor-btn:hover .qa-ico-ul{background-image:url(sprite/Column-20199161611.svg);;background-position:99.56% 27.089999999999996%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-pic,.qa-r-editor-btn.disabled .qa-ico-pic,.qa-r-editor-btn.disabled:hover .qa-ico-pic{background-image:url(sprite/Column-20199161611.svg);;background-position:32.300000000000004% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-pic,.qa-r-editor-btn:hover .qa-ico-pic{background-image:url(sprite/Column-20199161611.svg);;background-position:24.34% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-link,.qa-r-editor-btn.disabled .qa-ico-link,.qa-r-editor-btn.disabled:hover .qa-ico-link{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 44.83%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-link,.qa-r-editor-btn:hover .qa-ico-link{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 35.96%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-delete-link,.qa-r-editor-btn.disabled .qa-ico-delete-link,.qa-r-editor-btn.disabled:hover .qa-ico-delete-link{background-image:url(sprite/Column-20199161611.svg);;background-position:32.300000000000004% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-delete-link,.qa-r-editor-btn:hover .qa-ico-delete-link{background-image:url(sprite/Column-20199161611.svg);;background-position:40.27% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-arrow,.qa-r-editor-btn.disabled .qa-ico-arrow,.qa-r-editor-btn.disabled:hover .qa-ico-arrow{background-image:url(sprite/Column-20199161611.svg);;background-position:57.96% 53.2%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-arrow,.qa-r-editor-btn:hover .qa-ico-arrow{background-image:url(sprite/Column-20199161611.svg);;background-position:9.29% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-strike,.qa-r-editor-btn.disabled .qa-ico-strike,.qa-r-editor-btn.disabled:hover .qa-ico-strike{background-image:url(sprite/Column-20199161611.svg);;background-position:88.05% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-strike,.qa-r-editor-btn:hover .qa-ico-strike{background-image:url(sprite/Column-20199161611.svg);;background-position:80.08999999999999% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-h1,.qa-r-editor-btn.disabled .qa-ico-h1,.qa-r-editor-btn.disabled:hover .qa-ico-h1{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 9.36%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-h1,.qa-r-editor-btn:hover .qa-ico-h1{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 18.23%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-h2,.qa-r-editor-btn.disabled .qa-ico-h2,.qa-r-editor-btn.disabled:hover .qa-ico-h2{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 27.089999999999996%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-h2,.qa-r-editor-btn:hover .qa-ico-h2{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 35.96%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-h3,.qa-r-editor-btn.disabled .qa-ico-h3,.qa-r-editor-btn.disabled:hover .qa-ico-h3{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 44.83%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-h3,.qa-r-editor-btn:hover .qa-ico-h3{background-image:url(sprite/Column-20199161611.svg);;background-position:57.96% 36.449999999999996%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-table,.qa-r-editor-btn.disabled .qa-ico-table,.qa-r-editor-btn.disabled:hover .qa-ico-table{background-image:url(sprite/Column-20199161611.svg);;background-position:99.56% 18.23%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-table,.qa-r-editor-btn:hover .qa-ico-table{background-image:url(sprite/Column-20199161611.svg);;background-position:99.56% 9.36%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-merge-cells,.qa-r-editor-btn.disabled .qa-ico-merge-cells,.qa-r-editor-btn.disabled:hover .qa-ico-merge-cells{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 59.61%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-merge-cells,.qa-r-editor-btn:hover .qa-ico-merge-cells{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 68.47%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-split-cells,.qa-r-editor-btn.disabled .qa-ico-split-cells,.qa-r-editor-btn.disabled:hover .qa-ico-split-cells{background-image:url(sprite/Column-20199161611.svg);;background-position:64.16% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-split-cells,.qa-r-editor-btn:hover .qa-ico-split-cells{background-image:url(sprite/Column-20199161611.svg);;background-position:72.11999999999999% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-del-table,.qa-r-editor-btn.disabled .qa-ico-del-table,.qa-r-editor-btn.disabled:hover .qa-ico-del-table{background-image:url(sprite/Column-20199161611.svg);;background-position:16.37% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-del-table,.qa-r-editor-btn:hover .qa-ico-del-table{background-image:url(sprite/Column-20199161611.svg);;background-position:24.34% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-del-col,.qa-r-editor-btn.disabled .qa-ico-del-col,.qa-r-editor-btn.disabled:hover .qa-ico-del-col{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 53.690000000000005%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-del-col,.qa-r-editor-btn:hover .qa-ico-del-col{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 62.56%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-del-row,.qa-r-editor-btn.disabled .qa-ico-del-row,.qa-r-editor-btn.disabled:hover .qa-ico-del-row{background-image:url(sprite/Column-20199161611.svg);;background-position:8.41% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-del-row,.qa-r-editor-btn:hover .qa-ico-del-row{background-image:url(sprite/Column-20199161611.svg);;background-position:0.44% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-align-left,.qa-r-editor-btn.disabled .qa-ico-align-left,.qa-r-editor-btn.disabled:hover .qa-ico-align-left{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 18.23%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-align-left,.qa-r-editor-btn:hover .qa-ico-align-left{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 9.36%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-align-center,.qa-r-editor-btn.disabled .qa-ico-align-center,.qa-r-editor-btn.disabled:hover .qa-ico-align-center{background-image:url(sprite/Column-20199161611.svg);;background-position:80.08999999999999% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-align-center,.qa-r-editor-btn:hover .qa-ico-align-center{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 0.49%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-align-right,.qa-r-editor-btn.disabled .qa-ico-align-right,.qa-r-editor-btn.disabled:hover .qa-ico-align-right{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 27.089999999999996%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-align-right,.qa-r-editor-btn:hover .qa-ico-align-right{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 77.34%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-insert-top,.qa-r-editor-btn.disabled .qa-ico-insert-top,.qa-r-editor-btn.disabled:hover .qa-ico-insert-top{background-image:url(sprite/Column-20199161611.svg);;background-position:48.230000000000004% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-insert-top,.qa-r-editor-btn:hover .qa-ico-insert-top{background-image:url(sprite/Column-20199161611.svg);;background-position:56.19% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-insert-bottom,.qa-r-editor-btn.disabled .qa-ico-insert-bottom,.qa-r-editor-btn.disabled:hover .qa-ico-insert-bottom{background-image:url(sprite/Column-20199161611.svg);;background-position:8.41% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-insert-bottom,.qa-r-editor-btn:hover .qa-ico-insert-bottom{background-image:url(sprite/Column-20199161611.svg);;background-position:0.44% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-insert-left,.qa-r-editor-btn.disabled .qa-ico-insert-left,.qa-r-editor-btn.disabled:hover .qa-ico-insert-left{background-image:url(sprite/Column-20199161611.svg);;background-position:16.37% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-insert-left,.qa-r-editor-btn:hover .qa-ico-insert-left{background-image:url(sprite/Column-20199161611.svg);;background-position:24.34% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-ico-insert-right,.qa-r-editor-btn.disabled .qa-ico-insert-right,.qa-r-editor-btn.disabled:hover .qa-ico-insert-right{background-image:url(sprite/Column-20199161611.svg);;background-position:40.27% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-btn.actived .qa-ico-insert-right,.qa-r-editor-btn:hover .qa-ico-insert-right{background-image:url(sprite/Column-20199161611.svg);;background-position:32.300000000000004% 84.73%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.qa-r-editor-spliter{display:inline-block;vertical-align:middle;margin-right:11px;width:1px;height:16px;background-color:#ccc}.qa-r-editor{position:relative;padding:30px 0;min-height:180px}.qa-r-editor-btn-trigger{display:none}.qa-r-editor-toolbar-tip{position:absolute;right:0;top:0;font-size:14px;line-height:54px;color:#999}.qa-r-editor-container.disabled .qa-r-editor-toolbar:after{content:'';position:absolute;left:0;top:0;width:100%;height:100%}.qa-r-editor-container.disabled .qa-r-editor-btn{opacity:.5}.qa-r-editor-tip{position:relative;height:180px;text-align:center;color:#888}.qa-r-editor-tip:before{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.qa-r-editor-tip .tip-cnt{display:inline-block;vertical-align:middle;max-width:98%}.qa-r-editor-bubble{position:absolute;left:0;right:18px;top:100%;margin-top:-8px;color:#333;z-index:900}.qa-r-editor-bubble-inner{font-size:12px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e5e5e5;border-radius:2px;background-color:#fff;line-height:18px;position:static !important;left:285px;top:50%;padding:10px 100px 10px 10px;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.qa-r-editor-bubble-inner:after,.qa-r-editor-bubble-inner:before{font-size:0;position:absolute;width:0;height:0;content:'';border:8px dashed transparent;bottom:100%;left:inherit;right:inherit;margin-left:-7px;border-bottom-style:solid}.qa-r-editor-bubble-inner:before{border-bottom-color:#e5e5e5}.qa-r-editor-bubble-inner:after{margin-bottom:-1px;border-bottom-color:#fff}.qa-r-editor-bubble-input{font-size:14px;width:100%;height:30px;line-height:18px;display:inline-block;padding:5px 10px;border:1px solid #d1d2d3;border-radius:2px;color:#171d25;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:inherit}.qa-r-editor-bubble-input::-webkit-input-placeholder{color:#888}.qa-r-editor-bubble-input:-ms-input-placeholder{color:#888}.qa-r-editor-bubble-input::placeholder{color:#888}.qa-r-editor-bubble-input.error{border:1px solid #e54545;color:#e54545}.qa-r-editor-bubble-btns{position:absolute;right:0;top:10px;width:100px;text-align:center;font-size:0}.qa-r-editor-bubble-btn{display:inline-block;vertical-align:middle;padding:0 8px;border:none;background-color:transparent;font-size:14px;line-height:30px;cursor:pointer;color:#00a4ff}.qa-r-editor-bubble-btn:hover{text-decoration:none;color:#00a4ff}.qa-r-editor-bubble-btn-weak{color:#888}.qa-r-editor-bubble-btn-weak:hover{color:#00a4ff}.qa-r-editor-bubble-tip.error{margin:5px 0 0;color:#e54545;font-size:14px}.col-disorder-list{line-height:2;color:#666}.col-disorder-list li{position:relative;padding-left:10px}.col-disorder-list li:before{content:'';position:absolute;left:2px;top:13px;width:2px;height:2px;border-radius:50%;background-color:#666}.col-disorder-list a{color:inherit}.col-disorder-list a:hover{color:#00a4ff}.col-2-disorder-list{font-size:12px;line-height:20px;color:#666}.col-2-disorder-list li{position:relative;padding-left:15px}.col-2-disorder-list li+li{margin-top:10px}.col-2-disorder-list li:before{content:'';position:absolute;left:0;top:8px;width:4px;height:4px;border-radius:50%;background-color:#666}.col-2-disorder-list a{color:inherit}.col-2-disorder-list a:hover{color:#00a4ff}.col-column-media{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;border:1px solid #e5e5e5}.col-column-media-hd{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px 30px 20px 93px;height:88px;background-color:rgba(216,216,216,.1)}.col-column-media-hd .com-avatar{position:absolute;left:30px;top:20px;width:48px;height:48px;border:1px solid #e5e5e5}.col-column-media-hd .com-media-title{margin-bottom:4px;font-size:18px;line-height:25px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-column-media-datas{font-size:0;color:#999}.col-column-media-data{display:inline-block;vertical-align:middle;font-size:14px}.col-column-media-datas .com-split{background-color:#999}.col-column-media-bd{-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px 30px 30px;height:215px}.col-column-media .list-title{line-height:2;color:#666;font-weight:400}.col-column-media-btn{position:absolute;left:50%;bottom:30px;margin-left:-60px;min-width:0;width:100px;height:28px;font-size:12px;line-height:26px;border:1px solid #DCDEE6;background-color:transparent;color:#666}.col-column-media-btn:hover{background:0 0;border:1px solid #999;color:#000}.col-column-media-btn .c-loading-inner>div{background-color:#ddd}.col-column-media-btn.loading:hover{background-color:transparent;border-color:#bbb}.col-column-media .col-disorder-list li{margin-bottom:0}.com-side-column-panels.recommend .com-side-column-panel-btns{opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.com-side-column-panels.recommend .com-side-column-panel:hover .com-side-column-panel-btns{opacity:1}.col-column-media.shortcut{position:relative;margin:50px 0;min-height:0;background-color:#F3F5F9;border-color:rgba(157,157,157,.18)}.col-column-media.shortcut .col-column-media-hd{padding:20px 140px 20px 94px;height:auto;min-height:70px;background-color:transparent}.col-column-media.shortcut .com-avatar{left:20px;top:20px}.col-column-media.shortcut .col-column-media-datas{color:#666}.col-column-media.shortcut .col-column-media-datas .com-split{width:3px;height:3px;margin:0 10px}.col-column-media.shortcut .col-column-media-bd{height:auto;padding:0 20px 20px}.col-column-media.shortcut .col-column-media-desc{margin:20px 30px;color:#666}.col-column-media.shortcut .col-column-media-btn{position:absolute;left:auto;right:20px;top:25px;margin-top:0;margin-left:0;padding-left:10px;padding-right:10px;width:100px;font-size:12px}.col-column-media.recommend{border:none;border-bottom:1px solid rgba(229,229,229,.5)}.col-column-media.recommend .col-column-media-hd{-webkit-box-sizing:content-box;box-sizing:content-box;padding:0 0 20px 63px;height:auto;min-height:48px;background-color:transparent}.col-column-media.recommend .com-avatar{left:0;top:0}.col-column-media.recommend .com-media-title{box-sizing:border-box;position:relative;margin-bottom:7px;padding-right:56px;overflow:visible}.col-column-media.recommend .com-media-title a{display:block;overflow:hidden;text-overflow:ellipsis}.col-column-media.recommend .com-media-title .c-btn{position:absolute;right:0;top:1px;opacity:0;transition:opacity .3s}.col-column-media.recommend.hover .com-media-title .c-btn,.col-column-media.recommend:hover .com-media-title .c-btn{opacity:1}.col-more{margin-top:25px;text-align:center}.col-cat{margin-bottom:30px}.col-cat .com-media-object{padding-right:15px;width:48px}.col-cat .com-media-img{-webkit-box-sizing:border-box;box-sizing:border-box;width:48px;height:48px;border:1px solid #e5e5e5;background-size:32px 32px;background-repeat:no-repeat}.col-cat .com-media-title{margin-bottom:4px;font-size:16px;line-height:22px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-cat .com-media-desc{color:#999;font-size:0}.col-cat-data{display:inline-block;vertical-align:middle;font-size:14px}.col-cat:hover .com-media-title{color:#00a4ff}.pg-editor{position:relative}.col-editor-header{position:fixed;left:0;top:0;z-index:1000;width:100%;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #e5e5e5}.col-editor-header .header-inner{padding:16px 25px 18px;position:relative;font-size:0;line-height:28px}.col-editor-header .logo{position:relative;top:-1px;display:inline-block;vertical-align:middle}.col-editor-header .logo a{display:block}.col-editor-header .logo-img{display:block;width:100px;height:25px;background-image:url(sprite/Column-20199161611.svg);;background-position:0.7000000000000001% 0.52%;background-size:242% 876%;;background-repeat:no-repeat}.col-editor-header .header-split{display:inline-block;vertical-align:middle;margin:0 10px;width:1px;height:18px;background-color:#ccc}.col-editor-header .header-back{display:inline-block;vertical-align:middle;font-size:14px;color:#999}.col-editor-header .header-sub-title{display:inline-block;vertical-align:middle;font-size:18px;color:#ccc;-webkit-font-smoothing:auto}.col-editor-header .header-sub-title:hover{color:#00a4ff}.col-editor-header .header-back:before{content:'';position:relative;left:0;top:-1px;display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;width:10px;height:10px;border-left:2px solid #999;border-bottom:2px solid #999;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);-webkit-transition:left .4s;transition:left .4s}.col-editor-header .header-back:hover{color:#00a4ff}.col-editor-header .header-back:hover:before{border-left-color:#00a4ff;border-bottom-color:#00a4ff;left:-8px}.col-editor-header .header-title{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;left:25%;top:16px;z-index:-1;width:50%;text-align:center;font-size:18px;color:#000;font-weight:400}.col-editor-header .header-title .icon{display:inline-block;vertical-align:middle;margin-right:10px}.col-editor-header .header-title .icon.edit{width:25px;height:24px;background-image:url(src/projects/Column/cssComponents/img/temp/header-edit087d027e2d31136e978edcb557fd37e1.png)}.col-editor-header .header-opts{position:absolute;right:0;top:0;padding:16px 25px}.col-editor-header .btn-icon-arrow{display:inline-block;vertical-align:middle;margin-left:5px;width:8px;height:5px;background-image:url(sprite/Column-20199161611.svg);;background-position:73.08% 67.75999999999999%;background-size:3025% 4380%;;background-repeat:no-repeat}.col-editor-header .c-btn{vertical-align:middle;margin-left:10px;min-width:80px;height:28px;line-height:26px;font-size:12px}.col-editor-header .c-btn-hole{border-color:#DCDEE6;color:#666}.col-editor-header .c-btn-hole:hover{border-color:#999;color:#000;background-color:transparent}.col-editor-header .c-btn-disabled,.col-editor-header .c-btn-disabled:hover{border-color:#d5d7de;background-color:#d5d7de;color:#fff}.col-editor-header .header-link{display:inline-block;vertical-align:middle;padding:0 10px;margin-left:10px;font-size:14px;color:#000}.col-editor-header .header-link .btn-icon-arrow{background-image:url(sprite/Column-20199161611.svg);;background-position:80.77% 76.17%;background-size:3025% 4380%;;background-repeat:no-repeat}.col-editor-header .header-link:hover{color:#00a4ff}.col-editor-header .header-link:hover .btn-icon-arrow{background-image:url(sprite/Column-20199161611.svg);;background-position:96.15% 93.46%;background-size:3025% 4380%;;background-repeat:no-repeat}.col-editor-header .header-link .com-avatar{width:24px;height:24px}.col-editor-header .header-link .icon{display:inline-block;vertical-align:middle}.col-editor-header .header-link .icon.person{width:29px;height:29px;background-image:url(src/projects/Column/cssComponents/img/temp/header-person787a3fd096119cc6b7b2869253799762.png)}.col-editor-header .user-center{padding:0}.col-editor-sidebar{-webkit-box-sizing:border-box;box-sizing:border-box;position:fixed;right:0;top:0;z-index:1000;width:240px;height:100%;background-color:#f7f8fa;-webkit-box-shadow:0 0 6px 0 rgba(0,0,0,.2);box-shadow:0 0 6px 0 rgba(0,0,0,.2)}.col-editor-sidebar.publish{width:430px}.col-editor-sidebar .sidebar-hd{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;padding:0 25px;height:60px;line-height:60px}.col-editor-sidebar .sidebar-title{font-size:18px;font-weight:400;color:#000}.col-editor-sidebar .sidebar-trigger{position:absolute;right:10px;top:50%;margin-top:-15px;width:30px;height:30px;text-align:center;line-height:30px;font-size:0}.col-editor-sidebar .sidebar-trigger:before{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 0.49%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.col-editor-sidebar .sidebar-trigger:hover:before{background-image:url(sprite/Column-20199161611.svg);;background-position:83.63000000000001% 62.56%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.col-editor-sidebar .sidebar-bd{position:absolute;left:0;right:0;top:56px;bottom:0;overflow-x:hidden;overflow-y:auto;padding:1px 25px 20px}.col-draft-list .draft-item{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid #e5e5e5;color:#333;-webkit-transition:all .2s ease;transition:all .2s ease}.col-draft-list .draft-item a{display:block;color:inherit}.col-draft-list .draft-title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-draft-list .draft-time{display:block;margin-top:4px;color:#999;font-size:12px}.col-draft-list .draft-btns{position:absolute;right:-10px;bottom:12px;opacity:0;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.col-draft-list .draft-btn{display:inline-block;vertical-align:middle;padding:0 10px;border:none;background-color:transparent;cursor:pointer;font-size:0}.col-draft-list .draft-btn .icon{display:block}.col-draft-list .draft-btn .icon.delete{width:16px;height:16px;background-image:url(sprite/Column-20199161611.svg);;background-position:56.19% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.col-draft-list .draft-btn:hover .icon.delete{background-image:url(sprite/Column-20199161611.svg);;background-position:48.230000000000004% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.col-draft-list .draft-item.actived:before{content:'';position:absolute;left:-8px;top:3px;width:2px;height:14px;background-color:#00a4ff}.col-draft-list .draft-item.actived .draft-title,.col-draft-list .draft-item.hover .draft-title,.col-draft-list .draft-item:hover .draft-title{color:#00a4ff}.col-draft-list .draft-item.hover .draft-btns,.col-draft-list .draft-item:hover .draft-btns{opacity:1}.col-editor-switch{position:absolute;right:0;top:0;z-index:901;padding-right:20px;color:#999}.col-editor-switch a{color:inherit}.col-editor-switch a:hover{color:#00a4ff}.col-editor-body{margin:90px auto 20px;padding:0 20px;max-width:830px}.col-editor-body .article-title{-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 0;border:none;background:0 0;margin-bottom:20px;width:100%;height:50px;font-size:30px;font-weight:700;line-height:40px;color:#000}.col-editor-msg{position:relative;z-index:900}.col-editor-msg .msg-inner{position:absolute;right:0;top:30px;font-size:14px;line-height:48px;color:#999;white-space:nowrap}.col-editor-body.fixed-toolbar .col-editor-msg,.col-editor-body.fixed-toolbar .qa-r-editor-toolbar{position:fixed;left:auto;top:65px;width:830px}.col-editor-body.fixed-toolbar .col-editor-msg .msg-inner{top:0}.col-editor-body .qa-r-editor{padding-left:1px;padding-right:1px}.col-editor-body.markdown .qa-r-editor-container{padding-top:0}.col-editor-body.markdown .qa-r-editor-toolbar{display:none}.col-editor-body.markdown .col-editor-msg{z-index:1001}.col-editor-body.markdown .col-editor-msg .msg-inner{top:30px;line-height:48px}.col-editor-body.markdown.fixed-toolbar .col-editor-msg .msg-inner{top:0;width:100%;line-height:30px;background-color:#fff;text-align:center}.pg-editor.v2{position:absolute;left:0;top:65px;bottom:0;width:100%;overflow:auto}.pg-editor.v2 .col-editor-body{margin-top:25px}.col-editor-toolbar{overflow:hidden;margin-bottom:20px;color:#999}.col-editor-toolbar .editor-switch{float:left;color:inherit}.col-editor-toolbar .editor-switch:after{content:'';display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-left:5px;width:13px;height:10px;background-image:url(sprite/Column-20199161611.svg);;background-position:98.25% 45.45%;background-size:1861.5384615384617% 2190%;;background-repeat:no-repeat}.col-editor-toolbar .editor-switch:hover{color:#00a4ff}.col-editor-toolbar .editor-switch:hover:after{background-image:url(sprite/Column-20199161611.svg);;background-position:98.25% 39.71%;background-size:1861.5384615384617% 2190%;;background-repeat:no-repeat}.col-editor-toolbar .editor-msg{float:right}.pg-editor.preview{width:50%}.pg-editor.preview .col-editor-body{box-sizing:border-box;padding-left:30px;padding-right:30px;width:100%;max-width:none}.pg-editor.preview .col-editor-body.fixed-toolbar .qa-r-editor-toolbar{right:50%;width:50%;padding:0 30px;box-sizing:border-box}.pg-editor.preview .col-article{box-sizing:border-box;position:fixed;left:50%;top:65px;bottom:0;width:50%;padding:66px 30px 30px;background-color:#F7F8FA;overflow:auto}.pg-editor.preview .col-article-title{padding:5px 0;line-height:40px}.pg-editor.preview .col-article-preview{position:absolute;left:0;top:50%;width:100%;transform:translateY(-50%);font-size:24px;color:#999;text-align:center}.qa-r-editor-container{border-top:2px solid #e5e5e5}.qa-r-editor-btns{white-space:nowrap;overflow:hidden}.pg-editor-translate .col-article{box-sizing:border-box;position:fixed;left:0;top:65px;bottom:0;width:50%;min-width:500px;padding:45px 30px 30px;background-color:#F7F8FA;overflow:auto}.pg-editor-translate .col-article-source{margin-top:-20px;margin-bottom:20px}.pg-editor-translate .col-editor-body{box-sizing:border-box;padding-left:30px;margin-left:50%;padding-right:30px;width:50%}.pg-editor-translate .col-editor-body.fixed-toolbar .col-editor-msg,.pg-editor-translate .col-editor-body.fixed-toolbar .qa-r-editor-toolbar{left:50%;width:50%;min-width:500px;padding:0 30px;box-sizing:border-box}.pg-editor-translate .col-editor-body.fixed-toolbar .col-editor-msg .msg-inner{right:30px}.pg-editor-translate .col-editor-switch{top:-20px}.pg-article{position:relative;margin-top:60px;width:720px}.col-article-author{position:relative;margin-bottom:30px;color:#999;line-height:32px}.col-article-author .author-avatar{display:inline-block;vertical-align:middle;margin-left:0;margin-right:10px;width:32px;height:32px;border-radius:50%;overflow:hidden;border:2px solid #e5e5e5}.col-article-author .author-avatar img{display:block;width:100%;height:100%;border-radius:50%}.col-article-author .author-name,.col-article-author .column-name{display:inline-block;vertical-align:middle;max-width:8em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-article-author>a,.col-article-author>span{margin:0 5px}.col-article-author .com-emblem-list,.col-article-author .com-verification{margin-left:0;margin-right:5px}.col-article-author a{color:#666}.col-article-author a:hover{color:#00a4ff}.col-article-author span{vertical-align:middle}.col-article-author .column-wrap{position:relative;top:-1px}.col-article-author .column-wrap .c-btn{opacity:0;margin-left:10px;transition:opacity .3s}.col-article-author .column-wrap.hover .c-btn,.col-article-author .column-wrap:hover .c-btn{opacity:1}.col-article-author .extra-part{position:absolute;right:0;top:0;line-height:32px}.col-article-author .com-operations{margin-top:0}.col-article-adpanel{margin-top:-10px;margin-bottom:20px;text-align:center}.col-article-adpanel img{max-width:100%}.col-article-title+.col-article-author{margin-top:-15px}.col-article-title{margin-bottom:30px;font-size:30px;color:#000}.col-article-title .com-article-tag-bubble{margin-right:10px;font-weight:400;top:-2px}.col-article-title .com-article-tag{font-size:14px;line-height:22px}.col-article-infos{margin-bottom:20px;font-size:0;color:#999;word-wrap:break-word;line-height:1.8}.col-article-infos+.col-article-infos{margin-top:-20px}.col-article-infos>li{display:inline-block;vertical-align:middle;max-width:100%;margin-right:20px;font-size:14px}.col-article-infos>li:last-child{margin-right:0}.col-article-blockquote{margin:0 0 20px;padding:0 15px;color:#999;border-left:4px solid #ddd}.col-article-source{margin-top:20px;color:#999;word-wrap:break-word}.col-article-source .weixin-mp{color:#000}.col-article-time{margin-top:10px;color:#999}.col-article-extra-opts{margin-top:-10px;margin-bottom:20px;font-size:0}.col-article-extra-opts .c-btn{margin-right:10px}.col-article-operations{margin-top:40px;text-align:center}.col-article-operations .col-opt-link{margin:0 10px}.col-article-operations .link-like{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;margin:0 auto 20px;width:68px;height:68px;border-radius:50%;font-size:24px;line-height:68px;white-space:nowrap;text-align:center;background-color:#00A4FF;color:#fff}.col-article-operations .link-like:hover{background-color:#0092ee}.col-article-operations .link-like .com-i-like{position:relative;top:-5px;margin-right:0;width:30px;height:30px;background-size:806.6666666666666% 730%;;background-position:46.7% 39.15%;background-image:url(sprite/Column-20199161611.svg);;background-repeat:no-repeat}.col-article-operations .link-like:hover .com-i-like{background-size:806.6666666666666% 730%;;background-position:46.7% 39.15%;background-image:url(sprite/Column-20199161611.svg);;background-repeat:no-repeat}.col-article-operations .link-like .text{position:absolute;left:100%;top:0;margin-left:8px;color:#00A4FF}.col-article-operations .link-like.actived{border:1px solid #00a4ff;background-color:#fff;line-height:66px}.col-article-operations .link-like.actived:hover{border-color:#0092ee}.col-article-operations .link-like.actived .com-i-like{background-image:url(sprite/Column-20199161611.svg);;background-position:16.509999999999998% 39.15%;background-size:806.6666666666666% 730%;;background-repeat:no-repeat}.col-article-operations .link-like.actived:hover .com-i-like{background-image:url(sprite/Column-20199161611.svg);;background-position:31.6% 39.15%;background-size:806.6666666666666% 730%;;background-repeat:no-repeat}.col-article-operations .com-split{margin:0 20px}.col-article-operations .link-share{margin-right:0}.col-article-operations .com-share-options{margin-left:0}.col-article-operations .com-share-options>li{margin-right:0;margin-left:10px}.col-weixin-mp{margin:15px 0;padding:20px 0;font-size:14px;color:#000;text-align:center;background:url(src/projects/Column/cssComponents/img/mp-bgc0295b601d238d185d568404156a6c49.svg) center bottom no-repeat}.col-weixin-mp .mp-qrcode{display:block;margin:10px auto;width:100px}.col-article-tags{position:relative;margin-top:30px;padding-right:150px;min-height:30px}.col-article-tags .col-tags{margin-top:0}.col-article-tags .extra-part{position:absolute;right:0;top:4px}.col-article-tags .com-operations{margin-top:0}.col-article-tags .com-operations .com-opt-link:last-child{margin-right:0}.col-column-shortcut{position:relative;margin:50px 0;padding:30px 160px 30px 30px;border:1px solid #e5e5e5;border-top:4px solid #00A4FF}.col-column-shortcut .column-title{margin-bottom:5px;font-size:18px}.col-column-shortcut .column-desc{color:#666}.col-column-shortcut .c-btn{position:absolute;right:30px;top:50%;margin-top:-17px;min-width:110px}.pg-article .group-comments .col-group-hd{padding-bottom:0;border-bottom:none}.pg-articles{max-width:1200px}.pg-articles .col-main{padding-right:50px;width:72.08333333%}.pg-articles .col-aside{width:27.91666667%}.pg-articles .col-aside-inner{padding:0 20px;border:1px solid #e5e5e5;background-color:rgba(215,216,217,.1)}.pg-articles .col-aside-inner .col-filter-bar{margin-bottom:0;padding:17px 0}.pg-articles .col-aside-inner [class*=' c-g-']:last-child,.pg-articles .col-aside-inner [class^=c-g-]:last-child{margin-bottom:19px}.col-markdown-nav{border-left:2px solid #e6e6e6;margin-bottom:24px;max-height:300px;overflow-y:auto;-webkit-overflow-scrolling:touch}.col-markdown-nav .nav-title{display:none;margin:0;padding-left:12px;padding-bottom:5px;font-size:14px;font-weight:400;line-height:2}.col-markdown-nav ul,.col-markdown-nav ul ul,.col-markdown-nav ul ul ul{padding-left:0;list-style:none;margin-bottom:0}.col-markdown-nav-list a{display:inline-block;padding-left:12px;font-size:14px;line-height:26px;color:#00a4ff}.col-markdown-nav-list ul a{padding-left:26px;font-size:12px}.col-markdown-nav-list ul ul a{padding-left:40px}.col-markdown-nav.absolute{position:absolute;left:100%;top:204px;margin-bottom:0;margin-left:20px;border-left:none;width:180px;max-height:none}.col-markdown-nav.absolute .nav-title{display:block;border-left:2px solid #e6e6e6}.col-markdown-nav.absolute .col-markdown-nav-list{border-left:2px solid #e6e6e6}.col-markdown-nav.absolute .col-markdown-nav-list a{display:block;position:relative;padding-top:6px;padding-bottom:6px;line-height:1.5;color:#999;word-wrap:break-word}.col-markdown-nav.absolute .col-markdown-nav-list a.active,.col-markdown-nav.absolute .col-markdown-nav-list a:hover{color:#00a4ff;text-decoration:none}.col-markdown-nav.absolute .col-markdown-nav-list a.active:before{content:'';position:absolute;left:-2px;top:6px;bottom:6px;border-left:2px solid #00a4ff}.col-markdown-nav.absolute .col-markdown-nav-list ul a{padding-top:4px;padding-bottom:4px}.col-markdown-nav.absolute .col-markdown-nav-list ul a.active:before{top:4px;bottom:4px}.pg-article .c-markdown p{min-height:0}.col-slibing-articles{margin:50px 0}.col-slibing-articles>li+li{margin-top:5px}.col-slibing-articles a{color:#00a4ff;word-wrap:break-word}.col-slibing-articles a:hover{text-decoration:underline}.col-column-intro{min-height:300px;background:url(src/projects/Column/cssComponents/img/banner-bg@2x2a65c04787b357ea563d917fd5983647.jpg) center no-repeat #1F2531;background-size:cover;color:#fff}.col-column-intro .column-inner{box-sizing:border-box;position:relative;margin:0 auto;padding:97px 10px 40px 140px;max-width:830px}.col-column-intro .column-avatar{box-sizing:border-box;position:absolute;left:10px;top:98px;width:110px;height:110px;border:2px solid #fff;background-color:#444}.col-column-intro .column-avatar .avatar-text{height:56px;font-size:12px;line-height:56px;opacity:0;transition:opactiy .3s linear}.col-column-intro .column-avatar.hover .avatar-text,.col-column-intro .column-avatar:hover .avatar-text{opacity:1}.col-column-intro .column-title{margin-top:-7px;margin-bottom:3px;font-size:30px;font-weight:400;line-height:1.5}.col-column-intro .column-desc{margin-bottom:17px;font-size:16px;color:rgba(255,255,255,.8);word-wrap:break-word}.col-column-intro .com-bubble-warning-wrap{position:relative;top:-2px;margin-left:5px}.col-column-intro .c-input-text:disabled,.col-column-intro .c-input-text:disabled:hover,.col-column-intro .c-textarea:disabled,.col-column-intro .c-textarea:disabled:hover{background-color:#f7f8fa;cursor:not-allowed}.col-column-intro .column-datas{margin-bottom:15px;font-size:0}.col-column-intro .column-data{display:inline-block;vertical-align:middle;font-size:14px;color:rgba(255,255,255,.5)}.col-column-intro .column-data-split{display:inline-block;vertical-align:middle;margin:0 10px;width:2px;height:2px;border-radius:50%;background-color:rgba(255,255,255,.5)}.col-column-intro .column-btns{font-size:0}.col-column-intro .c-btn{margin-right:20px;min-width:114px;height:28px;line-height:26px;font-size:12px;border-radius:0;vertical-align:middle}.col-column-intro .c-btn-weak{background-color:#fff;border-radius:0}.col-column-intro .c-btn-hole{border-color:#DCDEE6;color:#fff}.col-column-intro .c-btn-hole:hover{border-color:#fff;background-color:#fff;color:#000}.col-column-intro .invite-bubble .c-bubble{margin-left:13px}.col-column-intro .invite-bubble>.c-btn{margin-right:0}.col-column-intro .invite-bubble-inner{position:relative;padding-right:20px}.col-column-intro .invite-title{margin-bottom:5px;font-size:16px;font-weight:400;color:#000}.col-column-intro .invite-close{position:absolute;right:0;top:0;width:16px;height:16px;font-size:0}.col-column-intro .invite-close:after{content:'';position:absolute;left:50%;top:50%;margin:-6px 0 0 -6px;width:12px;height:12px;background-image:url(sprite/Column-20199161611.svg);;background-position:97.83% 51.690000000000005%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.col-column-intro .invite-close:hover:after{background-image:url(sprite/Column-20199161611.svg);;background-position:97.83% 58.45%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.col-column-intro .column-opts{position:absolute;right:0;top:94px;z-index:2;margin-top:0}.col-column-intro .column-opts .col-opt-link{font-size:14px}.col-column-intro .c-bubble-trigger-btn{color:#999}.col-column-intro .c-bubble-trigger-btn:after{background-position:0.44% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-image:url(sprite/Column-20199161611.svg);;background-repeat:no-repeat}.col-column-intro .column-opts .c-bubble-top{width:150px}.col-column-intro.creator .column-title{margin-right:70px;word-wrap:break-word}.col-column-intro-form{position:relative;max-width:630px}.col-column-intro.editing .column-btns{max-width:630px;white-space:nowrap;text-align:center}.col-column-intro.editing .c-btn{min-width:0}.col-column-intro.editing .c-btn-weak{border-color:#DCDEE6;color:#fff;background-color:transparent}.col-column-intro.editing .c-btn-weak:hover{border-color:#fff;background-color:#fff;color:#000}.col-column-members{margin-bottom:15px;font-size:0}.col-column-member{position:relative;display:inline-block;vertical-align:middle;margin-right:10px;-webkit-box-sizing:border-box;box-sizing:border-box}.col-column-member .col-avatar{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:24px;height:24px}.col-column-member img{display:block;width:100%;height:100%}.col-column-member .c-bubble{left:50%;bottom:100%;margin-left:-100px;margin-bottom:10px;width:200px}.col-column-member .c-bubble a{color:#00a4ff}.col-column-member .c-bubble a:hover{text-decoration:underline}.col-column-member.creator:before{content:'';position:absolute;right:-2px;bottom:-2px;z-index:2;width:10px;height:10px;border:2px solid #262936;background-image:url(sprite/Column-20199161611.svg);;border-radius:50%;background-position:0.43% 99.52%;background-size:2420% 2190%;;background-repeat:no-repeat}.col-column-member.creator .col-avatar{position:relative;margin-top:-1px;width:26px;height:26px}.col-column-member.add .col-avatar,.col-column-member.more .col-avatar{position:relative;border:1px solid #fff;text-align:center;line-height:22px;overflow:hidden}.col-column-member.add:hover .col-avatar,.col-column-member.more:hover .col-avatar{border-color:#00a4ff}.col-column-member.more .col-avatar:before{content:'';display:inline-block;vertical-align:middle;width:22px;height:22px;background-image:url(sprite/Column-20199161611.svg);;background-position:37.730000000000004% 54.82%;background-size:1100% 995.4545454545455%;;background-repeat:no-repeat}.col-column-member.more:hover .col-avatar:before{background-image:url(sprite/Column-20199161611.svg);;background-position:48.64% 54.82%;background-size:1100% 995.4545454545455%;;background-repeat:no-repeat}.col-column-member.add .col-avatar:after,.col-column-member.add .col-avatar:before{content:'';position:absolute;left:50%;top:50%;margin:-6px 0 0 -1px;width:2px;height:12px;background-color:#999}.col-column-member.add .col-avatar:after{margin:-1px 0 0 -6px;width:12px;height:2px}.col-column-member.add:hover .col-avatar:after,.col-column-member.add:hover .col-avatar:before{background-color:#00a4ff}.col-column-article-list{margin-top:26px}.col-column-article-list .col-group-hd{margin-bottom:23px}.col-search{position:relative;border-bottom:1px solid #e5e5e5}.col-search input{padding:5px 20px 5px 35px;border:none;background-color:transparent;line-height:25px;font-size:14px}.col-search button{position:absolute;left:0;top:0;width:30px;height:100%;background-color:transparent;text-align:center;line-height:35px;font-size:0}.col-search button:after{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/Column-20199161611.svg);;background-position:56.19% 93.60000000000001%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.col-search-dropdown{padding-top:10px;height:250px}.col-search-dropdown ::-webkit-scrollbar{width:16px;height:16px}.col-search-dropdown ::-webkit-scrollbar-corner{background-color:transparent}.col-search-dropdown ::-webkit-scrollbar-track{border-radius:8px}.col-search-dropdown ::-webkit-scrollbar-thumb{height:7px;border-radius:8px;border:5px solid transparent;background-color:#ddd;background-clip:padding-box}.col-search-members{overflow-x:hidden;overflow-y:auto;max-height:100%}.col-search-member{position:relative;padding:7px 50px 7px 42px;font-size:0;line-height:32px}.col-search-member .col-avatar{position:absolute;left:0;top:7px}.col-search-member .name{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.col-search-member .name:hover{color:#00a4ff}.col-search-member .extra-link{position:absolute;right:0;top:7px;padding:0 10px;font-size:14px;color:#00a4ff;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.col-search-member .extra-link:hover{color:#0092ee}.col-search-member.hover .extra-link,.col-search-member:hover .extra-link{opacity:1}.col-search-member.hover,.col-search-member:hover{background-color:#f7f8fa}.modal-title{padding-top:45px;margin-bottom:10px;font-size:18px;font-weight:600;color:#000;text-align:center}.modal-invite .col-search input{width:100%}.modal-invite .invite-panel{position:relative;margin:0 -25px;padding:20px 0;text-align:center;color:#666;font-weight:500;overflow:hidden;background-color:#f7f8fa;box-shadow:0 -2px 6px rgba(0,0,0,.15)}.modal-invite .invite-primary-txt{margin-bottom:10px;font-size:16px;color:#333}.modal-invite .invite-url{display:inline-block;vertical-align:middle;margin-right:10px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-invite .invite-bubble{color:#333}.modal-invite .invite-bubble .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:5px;width:16px;height:16px;background-image:url(sprite/Column-20199161611.svg);;background-position:99.56% 0.49%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-modal-join-column .slogan{margin-bottom:20px;color:#000}.com-modal-join-column .join-form-item{line-height:26px}.com-modal-join-column .join-form-item-title{display:inline}.com-modal-join-column .join-form-item-cnt{display:inline;color:#333}.com-modal-join-column .join-desc{margin-top:20px}.com-modal-join-column .join-desc .join-form-item-title{display:block;margin-bottom:10px;color:#333}.com-modal-join-column .join-desc .join-form-item-cnt{display:block}.pg-index{margin:0;padding:0;max-width:none}.com-hero-bar{background-image:url(src/projects/Column/cssComponents/img/bannerbb74fb8c8facd2fe8440b28035fecd73.jpg)}.pg-index .c-tab-cross:before{display:none}.pg-index .c-tab-btns a{border-bottom:none}.pg-index .col-group{margin-bottom:20px}.col-layout .col-main{width:73.3333%;padding-right:40px}.col-layout .col-aside{width:26.6667%}.com-carousel{position:relative}.com-carousel-main{height:500px;overflow:hidden;background-color:#020B25}.com-carousel-item,.com-carousel-list{height:100%}.com-carousel-ctrl{position:absolute;left:50%;bottom:90px;z-index:3;text-align:center;font-size:0;white-space:nowrap;transform:translateX(-50%)}.com-carousel-ctrl-item{display:inline-block;vertical-align:middle;margin:0 3px;padding:10px 0;cursor:pointer}.com-carousel-ctrl-item.actived{cursor:default}.com-carousel-ctrl-item i{display:block;width:30px;height:3px;background:rgba(255,255,255,.3)}.com-carousel-ctrl-item:hover i{background:rgba(255,255,255,.5)}.com-carousel-ctrl-item.actived i{background-color:#fff}.com-carousel-pages{opacity:0;transition:opacity .2s}.com-carousel:hover .com-carousel-pages{opacity:1;filter:alpha(opacity=100)}.com-carousel-page{position:absolute;top:55%;font-size:0;width:60px;height:400px;line-height:400px;margin-top:-200px}.com-carousel-page.prev{left:20px;text-align:left}.com-carousel-page.next{right:20px;text-align:right}.com-carousel-page:before{content:'';display:inline-block;width:22px;height:41px;overflow:hidden;line-height:99;vertical-align:middle}.com-carousel-page.prev:before{background-image:url(sprite/Column-20199161611.png);background-position:0px 0px}.com-carousel-page.next:before{background-image:url(sprite/Column-20199161611.png);background-position:-24px 0px}.com-2-salon-panels{font-size:0}.com-2-salon-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;margin-bottom:20px;width:calc((100% - 20px - 1px)/ 2)}.com-2-salon-panels>.panel-cell:nth-child(2n){margin-right:0}.com-2-salon-panel{box-sizing:border-box;position:relative;padding:20px;height:140px;background-color:#f7f8fa;transition:box-shadow .3s linear}.com-2-salon-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-salon-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-2-salon-panel-img{position:absolute;left:0;top:0;width:100%;height:100%;background-size:auto 100%;background-position:center right;background-repeat:no-repeat;background-image:url(src/components/SalonPanels2/css/img/bg-demoacdb255332e6059f2371149d291e9ef8.jpg)}.com-2-salon-panel-main{position:relative}.com-2-salon-panel-title{height:52px;font-size:18px;line-height:26px;font-weight:400;color:#000;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-2-salon-panel-infos{position:relative;margin-top:20px;padding-right:110px;line-height:26px}.com-2-salon-panel-infos .panel-btn{position:absolute;right:0;bottom:0}.com-2-salon-panel-loading{height:130px}.com-salon-specialist{width:440px;height:440px}.com-salon-specialist .com-carousel-main{height:100%;background-color:#E2E2E2}.com-salon-specialist-item{position:relative;height:100%}.com-salon-specialist-img{display:block;width:100%;height:100%;background-position:right center;background-size:cover;font-size:0}.com-salon-specialist-ft{box-sizing:border-box;position:absolute;left:0;bottom:0;padding:20px 20px 22px;width:100%}.com-salon-specialist-name{font-size:30px;line-height:42px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-salon-specialist-identity{font-size:14px;line-height:20px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-salon-specialist .com-carousel-ctrl{box-sizing:border-box;left:auto;right:20px;bottom:10px;transform:translateX(0)}.com-salon-specialist .com-carousel-ctrl-item i{box-sizing:border-box;width:8px;height:8px;background-color:#fff;border:1px solid #00a4ff;border-radius:50%}.com-salon-specialist .com-carousel-ctrl-item.actived i{background-color:#00a4ff}.com-salon-primary-specialist-img{width:100%;height:435px;background-color:#E2E2E2;background-size:auto 100%;background-position:right center}.com-salon-primary-specialist-text{width:100%;height:100%;background-size:auto 100%;background-position:left center}.com-salon-primary{box-sizing:border-box;position:relative;margin-bottom:20px;padding:20px;display:table;table-layout:fixed;width:100%;background-color:#fff;box-shadow:0 -1px 16px 0 rgba(0,0,0,.13)}.com-salon-primary-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-salon-primary-specialist{display:table-cell;vertical-align:top}.com-salon-primary-specialist .com-salon-specialist{position:relative;width:100%;height:435px}.com-salon-primary-mark.com-mark-skew{position:absolute;left:100%;top:-3px;z-index:2;padding-left:0;margin-left:20px;min-width:72px;white-space:nowrap}.com-salon-primary-mark.com-mark-skew .mark-bg{margin-left:0;width:calc(100% - 18px)}.com-salon-primary-mark.com-mark-skew .mark-bg:before,.com-salon-primary-mark.com-mark-skew .mark-cnt:before{display:none}.com-salon-primary-main{position:relative;display:table-cell;vertical-align:top;width:287px;padding-left:35px;padding-top:20px}.com-salon-primary-bd{margin-bottom:10px;min-height:215px}.com-salon-primary-desc,.com-salon-primary-pretitle,.com-salon-primary-title{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-salon-primary-pretitle{font-size:18px;line-height:25px;color:#999;max-height:50px}.com-salon-primary-title{margin-top:7px;font-size:30px;line-height:36px;color:#000;font-weight:400;max-height:72px}.com-salon-primary-desc{margin-top:20px;font-size:14px;line-height:24px;color:#999;-webkit-line-clamp:4;max-height:96px}.com-salon-primary-avatars.com-2-avatars-group{padding-bottom:25px;margin-bottom:20px;border-bottom:1px solid #D8D8D8}.com-salon-primary-avatars.com-2-avatars-group .group-text{color:#333}.com-salon-primary-ft{position:absolute;left:0;right:0;bottom:0;padding-left:35px;padding-bottom:20px}.com-salon-primary-datas .com-icon-data{display:block;margin-right:0;margin-bottom:10px}.com-salon-primary-datas .com-icon-data:last-child{margin-bottom:0}.com-salon-primary-btn.com-arrow-btn{margin-top:20px;width:100%;position:relative;z-index:2;padding-right:48px;height:36px;font-size:16px;line-height:34px}.com-salon-primary-btn .com-arrow-btn-text:after{border-width:17px 6px}.com-salon-primary-btn .com-arrow-btn-caret{width:36px;padding-left:12px}.com-salon-primary-btn .com-arrow-btn-caret:after{margin-left:-5px;width:10px;height:10px}.com-salon-primary.loading .com-loading-placeholder{height:437px;background-color:transparent}.com-salon-group{position:relative;z-index:100;margin-top:-90px}.com-salon-group.tile{margin-top:0}.com-salon-group.tile .com-salon-group-primary{display:block;font-size:0;padding:0;box-shadow:none;background-color:#F7F8FA;margin-bottom:10px;transition:box-shadow .3s linear}.com-salon-group.tile .com-salon-group-primary:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-salon-group.tile .com-salon-primary-specialist{display:inline-block;vertical-align:top;width:calc((100% - 10px - 1px)/ 2)}.com-salon-group.tile .com-salon-primary-specialist-img,.com-salon-group.tile .com-salon-specialist{height:320px}.com-salon-group.tile .com-salon-specialist-img{background-position:right top}.com-salon-group.tile .com-salon-primary-main{display:inline-block;vertical-align:top;padding:20px 30px;box-sizing:border-box;width:calc((100% - 10px - 1px)/ 2 + 10px);height:320px}.com-salon-group.tile .com-salon-primary-mark{display:none}.com-salon-group.tile .com-salon-primary-bd{min-height:120px}.com-salon-group.tile .com-salon-primary-pretitle{font-size:14px;line-height:20px;display:block;white-space:nowrap}.com-salon-group.tile .com-salon-primary-title{margin-top:5px;font-size:24px;line-height:36px;display:block;white-space:nowrap}.com-salon-group.tile .com-salon-primary-desc{margin-top:10px;-webkit-line-clamp:3;max-height:72px}.com-salon-group.tile .com-salon-primary-avatars.com-2-avatars-group{border-bottom:none;padding-bottom:0;margin-bottom:20px}.com-salon-group.tile .com-2-avatars-group .group-text{font-size:12px;color:#999}.com-salon-group.tile .com-salon-primary-datas .com-icon-data{font-size:12px;margin-bottom:0}.com-salon-group.tile .com-salon-primary-datas .com-icon-data>div{display:block;display:-webkit-box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;max-height:48px}.com-salon-group.tile .com-icon-data [class*=com-i-],.com-salon-group.tile .com-icon-data [class^=com-i-]{width:14px;height:14px}.com-salon-group.tile .com-salon-primary-btn.com-arrow-btn{margin-top:10px;width:auto;padding-right:42px;height:32px;font-size:14px;line-height:30px;min-width:190px}.com-salon-group.tile .com-salon-primary-btn .com-arrow-btn-text:after{border-width:15px 5px}.com-salon-group.tile .com-salon-primary-btn .com-arrow-btn-caret{width:32px;padding-left:10px}.com-salon-group.tile .com-salon-primary-btn .com-arrow-btn-caret:after{margin-left:-5px;width:10px;height:10px}.com-salon-group.tile .com-2-salon-panels>.panel-cell{margin-right:10px;width:calc((100% - 10px - 1px)/ 2)}.com-salon-group.tile .com-2-salon-panels>.panel-cell:last-child{margin-right:0}.com-salon-group.tile .com-2-salon-panel{height:130px}.com-salon-group.tile .com-salon-primary.loading{background-color:#F3F5F9}.com-salon-group.tile .com-salon-primary.loading .com-loading-placeholder{height:320px}.com-salon-group.tile .com-salon-primary-ft{padding-bottom:20px;padding-left:30px;padding-right:30px}.com-2-activity-panels{font-size:0}.com-2-activity-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;margin-bottom:25px}.com-2-activity-panels.list2>.panel-cell{width:calc((100% - 20px - 1px)/ 2)}.com-2-activity-panels.list2>.panel-cell:nth-child(2n){margin-right:0}.com-2-activity-panels.list3>.panel-cell{width:calc((100% - 20px * 2 - 1px)/ 3)}.com-2-activity-panels.list3>.panel-cell:nth-child(3n){margin-right:0}.com-2-activity-panels.list4>.panel-cell{width:calc((100% - 20px * 3 - 1px)/ 4)}.com-2-activity-panels.list4>.panel-cell:nth-child(4n){margin-right:0}.com-2-activity-panel{display:block;background-color:#fff;box-shadow:0 1px 3px 0 #E1E3E9;transition:box-shadow .3s linear}.com-2-activity-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-activity-panel-object{position:relative;padding-top:52.1052631579%;border-bottom:1px solid #eee;overflow:hidden}.com-2-activity-panel-img{position:absolute;left:0;top:0;width:100%;height:100%;background-position:center;background-size:cover}.com-2-activity-panel-time{position:absolute;right:10px;bottom:10px;padding:0 8px;height:24px;background-color:rgba(0,0,0,.8);color:#fff;font-size:14px;line-height:24px}.com-2-activity-panel-main{box-sizing:border-box;padding:20px}.com-2-activity-panel-bd{min-height:82px}.com-2-activity-panel-pretitle{margin-bottom:10px;font-size:14px;line-height:24px;color:#666}.com-2-activity-panel-title{height:48px;font-size:18px;line-height:24px;color:#000;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-2-activity-panel-pretitle em,.com-2-activity-panel-title em{color:#ff7200}.com-2-activity-panel-ft{position:relative;margin-top:20px;padding-right:110px}.com-2-activity-panel-ft .panel-btn{position:absolute;right:0;top:0}.com-2-activity-panel.topic .com-2-activity-panel-bd{min-height:0;height:60px}.com-2-activity-panel.topic .com-2-activity-panel-pretitle{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:65px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-activity-panel.topic .com-2-activity-panel-pretitle.without-order{padding-right:0}.com-2-activity-panel.topic .pretitle-order{position:absolute;left:100%;top:0;margin-left:-60px}.com-2-activity-panel.topic .com-2-activity-panel-title{height:24px;white-space:nowrap;display:block}.com-2-activity-panel.activity{box-shadow:none;background-color:transparent}.com-2-activity-panel.activity:hover{box-shadow:none}.com-2-activity-panel.activity .com-2-activity-panel-object{border:1px solid #E5E8ED;transition:box-shadow .3s linear}.com-2-activity-panel.activity:hover .com-2-activity-panel-object{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-activity-panel.activity .com-2-activity-panel-main{padding:15px 0 0}.com-2-activity-panel.activity .com-2-activity-panel-bd{min-height:0}.com-2-activity-panel.activity .com-2-activity-panel-pretitle{margin-bottom:0;color:#999}.com-2-activity-panel.activity .com-2-activity-panel-title{display:block;height:auto}.com-2-activity-panel-infos{margin-top:10px;font-size:0}.com-2-activity-panel-info{font-size:12px;line-height:18px;color:#999}.com-2-activity-panel-info:before{content:'';display:inline-block;vertical-align:middle;margin:0 5px;width:2px;height:2px;border-radius:2px;background-color:#666}.com-2-activity-panel-info:first-child:before{display:none}.com-teacher-panels{font-size:0;margin-bottom:-40px}.com-teacher-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:40px;margin-bottom:40px}.com-teacher-panels.list2>.panel-cell{width:calc((100% - 40px - 1px)/ 2)}.com-teacher-panels.list2>.panel-cell:nth-child(2n){margin-right:0}.com-teacher-panel{display:table;table-layout:fixed;width:100%}.com-teacher-panel-object{display:table-cell;vertical-align:top;padding-right:30px;width:190px}.com-teacher-panel-img{display:block;padding-top:137.5%;width:100%;background-size:cover;background-position:center}.com-teacher-panel-main{position:relative;box-sizing:border-box;display:table-cell;vertical-align:top}.com-teacher-panel-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:22px;line-height:32px;color:#000;font-weight:400}.com-teacher-panel-name.with-verify{padding-right:20px}.com-teacher-panel-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-teacher-panel-name .com-verification{position:absolute;right:0;top:8px;margin-right:0}.com-teacher-panel-identity{font-size:14px;line-height:24px;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-teacher-panel-desc{margin-top:10px;font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:4;max-height:96px}.com-teacher-panel-links{position:absolute;left:0;bottom:0;width:100%}.com-teacher-panel-links .com-icon-disorder{padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #E1E3E9}.com-teacher-panel-links .com-icon-disorder:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.com-icon-disorder-link{box-sizing:border-box;display:inline-block;vertical-align:middle;position:relative;max-width:100%;padding-left:24px;font-size:14px;line-height:24px;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-icon-disorder-link:hover{color:#00a4ff}.com-icon-disorder-icon{position:absolute;left:0;top:4px;width:16px;height:16px}.com-icon-disorder-icon.article{background-image:url(sprite/Column-20199161611.svg);;background-position:17.26% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-icon-disorder-icon.video{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 9.36%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-icon-disorder-link:hover .com-icon-disorder-icon.article{background-image:url(sprite/Column-20199161611.svg);;background-position:33.19% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-icon-disorder-link:hover .com-icon-disorder-icon.video{background-image:url(sprite/Column-20199161611.svg);;background-position:64.16% 75.86%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-tags-bar{margin-bottom:60px;background-color:#f7f8fa;padding:20px 10px}.com-tags-bar>.com-inner{position:relative;padding-left:50px;min-height:24px}.com-tags-bar-title{position:absolute;left:10px;top:0;width:30px;height:24px;border-right:1px solid #E1E3E9;font-size:0;line-height:24px}.com-tags-bar-title:before{content:'';display:inline-block;vertical-align:middle;width:20px;height:20px;background-image:url(sprite/Column-20199161611.svg);;background-position:67.12% 22.61%;background-size:1210% 1095%;;background-repeat:no-repeat}.com-tags-bar-main{font-size:0;white-space:nowrap;overflow:hidden}.com-tags-bar-item{display:inline-block;vertical-align:middle;margin-right:30px;font-size:14px;line-height:24px;color:#666}.com-tags-bar-item:hover{color:#00a4ff}.com-tags-bar-item:before{content:'#';margin-right:5px;color:#999}.com-activity-gallery{margin-bottom:20px;overflow:hidden}.com-activity-gallery-list{display:inline-block;vertical-align:middle;font-size:0;white-space:nowrap}.com-activity-gallery-list>li{display:inline-block;vertical-align:top;margin-right:20px}.com-activity-gallery-img{width:380px;height:194px;background-size:cover;background-position:center}.com-activity-gallery-title{margin-top:10px;font-size:14px;line-height:20px;font-weight:400;color:#666}.com-detail-timebar-item{position:relative;margin-left:70px;padding-bottom:40px;padding-left:35px;border-left:1px dashed #E1E3E9}.com-detail-timebar-item:first-child:before{content:'';position:absolute;left:-1px;top:0;width:1px;height:8px;background-color:#fff}.com-detail-timebar-item:last-child{padding-bottom:0}.com-detail-timebar-item:last-child:before{content:'';position:absolute;left:-1px;top:23px;bottom:0;width:1px;background-color:#fff}.com-detail-timebar-dot{box-sizing:border-box;position:absolute;left:-7px;top:8px;width:15px;height:15px;border:1px solid #00a4ff;border-radius:50%;background-color:#fff}.com-detail-timebar-time{position:absolute;right:100%;top:0;width:78px;font-size:24px;line-height:32px;color:#333;white-space:nowrap;font-weight:300}.com-detail-timebar-main{box-sizing:border-box;display:table;width:100%}.com-detail-timebar-hd{display:table-cell;padding-right:20px;width:240px;vertical-align:top}.com-detail-timebar-bd{display:table-cell;vertical-align:top;transition:all .3s ease-in-out}.com-detail-timebar-author{position:relative}.com-detail-timebar-author .com-2-avatar{position:absolute;left:0;top:0;width:42px;height:42px;transition:all .3s linear}.com-detail-timebar-author .author-main{margin-left:54px;transition:all .3s linear}.com-detail-timebar-author .author-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:18px;line-height:24px;color:#000;font-weight:400}.com-detail-timebar-author .author-name.with-verify{padding-right:17px}.com-detail-timebar-author .author-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-detail-timebar-author .com-verification{position:absolute;right:0;top:6px;margin-right:0}.com-detail-timebar-author .author-identity{margin-top:5px;font-size:14px;line-height:18px;color:#999}.com-detail-timebar-author-detail{box-sizing:border-box;position:absolute;left:295px;right:0;top:0;padding:20px;min-height:144px;background-color:#F3F5F9;border-radius:0 16px 16px;-ms-transform:scale(0);transform:scale(0);-ms-transform-origin:left top;transform-origin:left top;opacity:0;-ms-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.com-detail-timebar-author-detail-inner{display:table;table-layout:fixed;width:100%}.com-detail-timebar-author-detail .detail-desc-cnt{display:table-cell;vertical-align:top;padding-right:50px}.com-detail-timebar-author-detail .detail-desc{font-size:14px;line-height:24px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-detail-timebar-author-detail .detail-skills-cnt{display:table-cell;vertical-align:top;width:200px}.com-detail-timebar-author-detail .detail-skills-title{margin-bottom:10px;font-size:12px;line-height:18px;color:#999;font-weight:400}.com-detail-timebar-item.author-detail .com-detail-timebar-author .com-2-avatar{width:90px;height:90px}.com-detail-timebar-item.author-detail .com-detail-timebar-author .author-main{margin-left:0;padding-top:100px}.com-detail-timebar-item.author-detail .com-detail-timebar-author-detail{-ms-transform:scale(1);transform:scale(1);opacity:1;transition-delay:50ms}.com-detail-timebar-item.author-detail .com-detail-timebar-bd{opacity:0;transition-delay:50ms}.com-topic-resources-hd{margin-bottom:14px}.com-topic-resources-title{font-size:14px;line-height:24px;color:#000;font-weight:400}.com-topic-resource{margin-bottom:13px;background-color:#f3f5f9;transition:box-shadow .3s linear}.com-topic-resource:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-topic-resource:last-child{margin-bottom:0}.com-topic-resource-video{box-sizing:border-box;display:table;width:100%}.com-topic-resource-video-object{display:table-cell;width:122px;height:66px;position:relative}.com-topic-resource-video-img{position:relative;display:block;width:100%;height:100%;background-size:cover;background-position:center}.com-topic-resource-video-img:before{content:'';position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.com-topic-resource-video-icon{box-sizing:border-box;position:absolute;left:50%;top:50%;margin:-13px 0 0 -13px;width:26px;height:26px;border-radius:50%;border:1px solid #fff}.com-topic-resource-video-icon:before{content:'';position:absolute;left:50%;top:50%;margin:-5px 0 0 -3px;width:0;height:0;border-style:solid;border-color:transparent #fff;border-width:5px 0 5px 9px}.com-topic-resource-video-main{display:table-cell;vertical-align:middle;padding:0 20px}.com-topic-resource-video-title{font-size:14px;line-height:14px;color:#333;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-topic-resource-video-desc{margin-top:8px;font-size:12px;line-height:18px;color:#999}.com-topic-resource-art{display:block;padding:15px 20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;line-height:18px;color:#333}.com-topic-resource-art-icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:10px;width:16px;height:16px;background-image:url(sprite/Column-20199161611.svg);;background-position:25.22% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-organizer{box-sizing:border-box;display:table;width:100%}.com-organizer-cell{display:table-cell;vertical-align:middle}.com-organizer-cell.avatar{padding-right:20px;width:120px}.com-organizer-cell.identity{padding-right:10px;width:140px}.com-organizer .com-2-avatar{width:120px;height:50px}.com-organizer .com-2-avatar-inner{background-size:contain;background-color:transparent;border-color:transparent;border-radius:0}.com-organizer-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:12em;font-size:20px;line-height:24px;color:#000;font-weight:400;word-wrap:break-word}.com-organizer-name.with-verify{padding-right:17px}.com-organizer-name-inner{display:block;color:inherit}a.com-organizer-name-inner:hover{color:#00a4ff}.com-organizer-name .com-verification{position:absolute;right:0;top:6px;margin-right:0}.com-organizer-identity{margin-top:7px;font-size:14px;line-height:20px;color:#999}.com-organizer-desc{font-size:14px;line-height:28px;color:#666}.com-organizer.small{position:relative;display:block;padding-left:130px;min-height:45px}.com-organizer.small .com-organizer-cell{display:block;width:auto;padding-right:0}.com-organizer.small .com-organizer-cell.avatar{position:absolute;left:0;top:0}.com-organizer.small .com-organizer-identity{display:none}.com-organizer.small .com-organizer-name{max-width:100%}.com-organizer.small .com-organizer-name-inner{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-organizer.small .com-organizer-desc{line-height:24px;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-organizer.person .com-organizer-cell.avatar{width:90px}.com-organizer.person .com-2-avatar{width:90px;height:90px}.com-organizer.person .com-2-avatar-inner{background-size:cover;background-color:#fff;border-color:#EFEFEF;border-radius:50% 50% 50% 0}.com-organizers{font-size:0}.com-organizers>.panel-cell{margin-bottom:20px;font-size:14px}.com-organizers[class*=list]>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px}.com-organizers.list3>.panel-cell{width:calc((100% - 20px * 2 -1px)/ 3)}.com-organizers.list3>.panel-cell:nth-child(3n){margin-right:0}.com-video-player{position:relative;height:528px;background-color:#000}.com-video-player-img{height:100%;background-size:cover;background-position:center;margin:0 auto}.com-video-player-mask{position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.59)}.com-video-player-cnt{position:absolute;left:0;top:50%;transform:translateY(-50%);width:100%;text-align:center}.com-video-player-cnt.counting{color:#fff;font-size:16px;line-height:32px;text-align:center}.com-video-player-cnt.counting em{margin:0 5px;color:#F5A623}.com-video-player-play{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;width:60px;height:60px;border-radius:50%;border:1px solid #fff;text-align:center;line-height:58px;cursor:pointer}.com-video-player-play:before{content:'';display:inline-block;vertical-align:middle;margin-left:5px;width:0;height:0;border-style:solid;border-width:15px 0 15px 24px;border-color:transparent #fff}.com-video-player-play.loading{animation:playLoading 2s linear infinite}.com-video-player-play.loading:before{position:absolute;left:-5px;top:50%;margin-top:-5px;margin-left:0;width:10px;height:10px;border:none;border-radius:50%;background-color:#fff}@keyframes playLoading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.com-video-player-state{display:inline-block;vertical-align:middle;margin-top:15px;color:#fff;font-size:14px}.com-ani-playing{position:relative;top:-2px;display:inline-block;vertical-align:middle;font-size:0;margin-right:8px;height:16px}.com-ani-playing span{display:inline-block;vertical-align:bottom;width:2px;height:16px;background-color:#fff;-webkit-animation:playing 1.5s linear infinite;animation:playing 1.5s linear infinite;-webkit-transform-origin:center bottom;-webkit-transform:scaleY(.125);transform-origin:center bottom;transform:scaleY(.125)}.com-ani-playing span:nth-child(2){-webkit-animation-delay:.5s;-webkit-transform:scaleY(1);animation-delay:.5s;transform:scaleY(1)}.com-ani-playing span:nth-child(3){-webkit-animation-delay:1s;-webkit-transform:scaleY(.675);animation-delay:1s;transform:scaleY(.675)}.com-ani-playing span:nth-child(4){-webkit-animation-delay:1.5s;-webkit-transform:scaleY(.8);animation-delay:1.5s;transform:scaleY(.8)}.com-ani-playing span+span{margin-left:2px}@keyframes -webkit-playing{0%,100%{-webkit-transform:scaleY(1)}50%{-webkit-transform:scaleY(.125)}}@keyframes playing{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.125)}}.com-video-player-tip{box-sizing:border-box;position:absolute;left:0;top:50%;width:100%;color:#fff;font-size:16px;line-height:32px;text-align:center;margin-top:-16px}.com-video-player-tip.counting em{margin:0 5px;color:#F5A623}.com-video-tab{position:relative;height:100%}.com-video-tab-hd{height:60px;border-bottom:1px solid #E1E3E9}.com-video-tab-ctrl{font-size:0;height:100%}.com-video-tab-item{position:relative;display:inline-block;vertical-align:middle;width:50%;height:100%;color:#000}.com-video-tab-item:before{content:'';position:absolute;left:0;top:50%;margin-top:-15px;width:1px;height:30px;background-color:#E1E3E9}.com-video-tab-item:first-child:before{display:none}.com-video-tab-item a{display:block;font-size:14px;line-height:60px;text-align:center;color:inherit}.com-video-tab-item a:hover{color:#00a4ff}.com-video-tab-item.actived a,.com-video-tab-item.actived a:hover{color:#00a4ff;cursor:default}.com-video-tab-bd{position:absolute;left:0;top:61px;bottom:0;width:100%}.com-video-tab-panel{height:100%}.com-video-tab-ctrl.one-tab .com-video-tab-item{width:100%}.com-video-tab-ctrl.one-tab .com-video-tab-item a{padding:0 20px;text-align:left}.com-video-tab-ctrl.one-tab .com-video-tab-item.actived a,.com-video-tab-ctrl.one-tab .com-video-tab-item.actived a:hover{color:#000}.com-video-comments{position:relative;height:100%}.com-video-comments-list{position:absolute;left:0;top:0;bottom:137px;width:100%;box-sizing:border-box;overflow-x:hidden;overflow-y:auto;padding:20px}.com-video-comment+.com-video-comment{margin-top:20px}.com-video-comment-cnt{font-size:14px;line-height:22px;color:#333;word-wrap:break-word}.com-video-comment-ft{position:relative;padding-right:70px;margin-top:3px;font-size:12px;line-height:18px;color:#999}.com-video-comment-user{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-video-comment-time{position:absolute;right:0;top:0}.com-video-comments-edit{box-sizing:border-box;position:absolute;left:0;bottom:0;width:100%;padding:20px}.com-video-comments-edit textarea{box-sizing:border-box;width:100%;height:55px;padding:10px;border:1px solid transparent;background-color:#F3F5F9;font-size:14px;line-height:22px;resize:none}.com-video-comments-edit textarea:focus{background-color:#fff;border-color:#00a4ff}.com-video-comments-edit textarea:disabled,.com-video-comments-edit textarea:disabled:focus{background-color:#F3F5F9;border-color:transparent}.com-video-comments-edit .edit-btns{margin-top:10px;text-align:right}.com-video-comments-edit .c-btn{height:28px;font-size:12px;line-height:26px}.com-video-nav{position:relative;height:100%}.com-video-nav .com-video-nav-list{box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:61px;padding:10px 0;overflow-x:hidden;overflow-y:auto}.com-video-nav-item{box-sizing:border-box;display:table;table-layout:fixed;width:100%;padding:10px 20px}.com-video-nav-item .item-object{display:table-cell;vertical-align:top;width:134px;height:74px;position:relative}.com-video-nav-item .item-img{position:relative;display:block;width:100%;height:100%;background-size:cover;background-position:center}.com-video-nav-item .item-img:before{content:'';display:block;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.com-video-nav-item .item-icon{display:none;box-sizing:border-box;position:absolute;left:50%;top:50%;margin:-12px 0 0 -12px;width:24px;height:24px;border:1px solid #fff;border-radius:50%}.com-video-nav-item .item-icon:before{content:'';position:absolute;left:50%;top:50%;margin:-5px 0 0 -4px;width:0;height:0;border-style:solid;border-color:transparent #fff;border-width:5px 0 5px 9px}.com-video-nav-item .item-status{position:absolute;right:8px;bottom:8px;width:12px;height:12px;background-image:url(sprite/Column-20199161611.svg);;background-position:97.83% 65.22%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.com-video-nav-item .com-ani-playing{position:absolute;right:8px;bottom:8px;top:auto}.com-video-nav-item .item-main{display:table-cell;vertical-align:top;padding-left:10px}.com-video-nav-item .item-title{font-size:12px;line-height:22px;color:#000;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2}.com-video-nav-item .item-time{display:block;margin-top:13px;font-size:12px;line-height:18px;color:#999;text-align:right}.com-video-nav-item:hover .item-img:before{display:none}.com-video-nav-item:hover .item-title{color:#00a4ff}.com-video-nav-item.actived{cursor:default}.com-video-nav-item.actived .item-img:before{display:block}.com-video-nav-item.actived .item-title{color:#00a4ff}.com-video-nav-ft{box-sizing:border-box;position:absolute;left:0;right:0;bottom:0;border-top:1px solid #E1E3E9;height:60px;padding:10px 20px}.com-video-nav-link{display:block;font-size:14px;line-height:40px;color:#000}.com-video-nav-link:hover{color:#00a4ff}.com-video-section{position:relative;height:470px;background-color:#fff;overflow:hidden}.com-video-section-main{margin-right:330px;height:100%;transition:all .3s ease-in-out}.com-video-section-side{position:absolute;right:0;top:0;z-index:10;width:330px;height:100%;transition:all .3s ease-in-out}.com-video-section-toggle{position:absolute;right:100%;top:56px;width:18px;height:32px;background-color:#000;font-size:0}.com-video-section-toggle:before{content:'';position:absolute;left:50%;top:50%;margin:-5px 0 0 -4px;width:9px;height:11px;background-image:url(sprite/Column-20199161611.svg);;transition:all .3s ease-in-out;background-position:56.220000000000006% 44.230000000000004%;background-size:2688.888888888889% 1990.909090909091%;;background-repeat:no-repeat}.com-video-section .com-video-player{height:100%}.com-video-section.hide .com-video-section-main{margin-right:0}.com-video-section.hide .com-video-section-side{transform:translateX(100%)}.com-video-section.hide .com-video-section-toggle:before{transform:rotate(180deg)}.com-topic-panel-hd{position:relative;padding-right:100px;line-height:32px}.com-topic-panel-title{font-size:18px;line-height:32px;color:#000;font-weight:400}.com-topic-panel-extra{position:absolute;right:0;top:0}.com-topic-panel-desc{margin-top:10px;font-size:14px;line-height:24px;color:#999;word-wrap:break-word}.com-topic-panel-desc p+p{margin-top:10px}.com-topic-panel .com-topic-resources{margin-top:15px}.com-2-user-panels{font-size:0}.com-2-user-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:60px;margin-bottom:40px}.com-2-user-panels.list2>.panel-cell{width:calc((100% - 60px - 1px)/ 2)}.com-2-user-panels.list2>.panel-cell:nth-child(2n){margin-right:0}.com-2-user-panel{display:table;table-layout:fixed;box-sizing:border-box;width:100%}.com-2-user-panel-side{display:table-cell;vertical-align:top;padding-right:20px;width:110px}.com-2-user-panel-main{display:table-cell;vertical-align:top}.com-2-user-panel .com-2-avatar{margin-bottom:7px;width:90px;height:90px}.com-2-user-panel-name{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:18px;line-height:24px;color:#000;font-weight:400}.com-2-user-panel-name.with-verify{padding-right:17px}.com-2-user-panel-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-2-user-panel-name .com-verification{position:absolute;right:0;top:6px;margin-right:0}.com-2-user-panel-identity{margin-top:3px;font-size:12px;line-height:18px;color:#999}.com-2-user-panel-desc{box-sizing:border-box;margin-bottom:20px;padding:20px;background-color:#F3F5F9;border-radius:0 16px 16px;font-size:14px;line-height:24px;color:#666;height:144px}.com-2-user-panel-desc p{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:4;max-height:96px}.com-2-user-panel-skills-title{margin-bottom:10px;font-size:12px;line-height:18px;color:#999}.com-partners-wrap{margin:60px 0;text-align:center;font-size:0}.com-partners{position:relative;display:inline-block;vertical-align:middle;max-width:100%;box-sizing:border-box;padding-left:140px}.com-partners dt{position:absolute;left:0;top:0;padding-right:30px;font-size:16px;line-height:40px;color:#666}.com-partners dt:after{content:'';position:absolute;right:0;top:50%;margin-top:-13px;width:1px;height:26px;background-color:#DFE4EE}.com-partners dd{padding-top:6px;text-align:left}.com-partner{vertical-align:middle;height:30px;margin-left:35px;margin-bottom:20px}.com-2-article-panel{position:relative;box-sizing:border-box;padding:35px 25px 38px;background-color:#F3F5F9;height:250px;transition:box-shadow .3s linear}.com-2-article-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-article-panel>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-2-article-panel-author{position:relative;z-index:2;margin-bottom:11px;font-size:0}.com-2-article-panel-author .author-link{color:#333}.com-2-article-panel-author .author-name{display:inline-block;vertical-align:middle;margin-left:7px;max-width:20em;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.com-2-article-panel-author .author-link:hover{color:#00a4ff}.com-2-article-panel-author .com-verification{margin:0 0 0 5px}.com-2-article-panel-title{margin-bottom:10px;font-size:18px;line-height:27px;font-weight:400;color:#333;display:block;display:-webkit-box;display:block;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:54px;white-space:nowrap}.com-2-article-panel-cnt{margin-bottom:0}.com-2-article-panel-cnt .com-media-object{padding-right:0;padding-left:15px;width:106px;vertical-align:top;padding-top:6px}.com-2-article-panel-cnt .com-thumbnail{width:106px;height:80px}.com-2-article-panel-desc{font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-2-article-panel-opts{position:static;margin-top:13px}.com-2-article-panel.large{padding-left:293px}.com-2-article-panel.large.without-img{padding-left:25px}.com-2-article-panel.large .com-2-article-panel-title{display:block;white-space:nowrap}.com-2-article-panel.large .com-2-article-panel-cnt{display:block}.com-2-article-panel.large .com-2-article-panel-cnt .com-media-body{padding:0}.com-2-article-panel.large .com-2-article-panel-desc{-webkit-line-clamp:3;max-height:72px}.com-2-article-panel.large .com-2-article-panel-cnt .com-media-object{position:absolute;left:30px;top:35px;display:block;padding-left:0}.com-2-article-panel.large .com-thumbnail{width:236px;height:177px}.com-2-article-panels{font-size:0;margin-bottom:-15px}.com-2-article-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:15px;margin-bottom:15px;width:calc((100% - 15px * 2)/ 3)}.com-2-article-panels>.panel-cell:first-child{width:calc(100% - 15px - (100% - 15px * 2)/ 3)}.com-2-article-panels>.panel-cell:nth-child(3n+2){margin-right:0;width:calc((100% - 15px * 2)/ 3 - 1px)\9}.com-loading-placeholder.com-2-article-panel-loading{height:250px}.com-sub-section{margin-bottom:30px}.com-sub-section-hd{position:relative;padding-bottom:6px;border-bottom:1px solid #000}.com-sub-section-hd:before{content:'';position:absolute;left:0;bottom:-1px;width:80px;height:1px;background-color:#00a4ff}.com-sub-section-title{font-size:14px;line-height:20px;color:#666;font-weight:400}.com-sub-section-bd{padding:15px}.com-sub-section.bg-color .com-sub-section-bd{background-color:#F3F5F9}.com-timebar{margin:10px 20px 20px}.com-timebar-item{position:relative;padding:0 20px 15px 22px;border-left:1px solid #E1E3E9}.com-timebar-item:last-child{padding-bottom:0}.com-timebar-dot{position:absolute;left:-5px;top:6px;box-sizing:border-box;width:9px;height:9px;border-radius:50%;border:1px solid #999;background-color:#EFEFEF}.com-timebar-item:hover .com-timebar-dot{left:-6px;top:5px;width:11px;height:11px;border:1px solid #00a4ff;background-color:#fff}.com-timebar-item:hover .com-timebar-dot:before{content:'';position:absolute;left:2px;top:2px;width:5px;height:5px;border-radius:50%;background-color:#00a4ff}.com-timebar-infos{font-size:0;font-size:12px;line-height:23px;color:#999}.com-timebar-info:before{content:'';display:inline-block;vertical-align:middle;margin:0 5px;width:2px;height:2px;border-radius:2px;background-color:#666}.com-timebar-info:first-child:before{display:none}.com-timebar-title{margin-top:4px;font-size:14px;line-height:26px;color:#333;font-weight:400}.com-timebar-item:hover .com-timebar-title{color:#00a4ff}.com-loading-placeholder.com-timebar-loading.small{height:440px}.com-scroll{position:relative;overflow:hidden;height:440px;padding-top:10px}.com-scroll:after{content:'';position:absolute;left:0;bottom:0;width:100%;height:65px;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));pointer-events:none}.com-scroll.hide-mask:after{display:none}.com-scroll-cnt{margin-right:-18px;height:100%;overflow-x:hidden;overflow-y:scroll}.com-4-article-panels{font-size:0;margin-bottom:-10px}.com-4-article-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;width:calc((100% - 10px * 2 - 1px)/ 3)}.com-4-article-panels>.panel-cell:first-child{width:calc(66.6666% - 3px)}.com-4-article-panels>.panel-cell:nth-child(3n+2){margin-right:0}.com-loading-placeholder.com-4-article-panel-loading{height:162px}.com-4-article-panel{position:relative;box-sizing:border-box;padding:26px 20px;background-color:#F7F8FA;height:164px;transition:box-shadow .3s linear}.com-4-article-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-4-article-panel>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-4-article-panel-title{margin-bottom:10px;font-size:18px;line-height:26px;font-weight:400;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-4-article-panel-cnt{margin-bottom:0}.com-4-article-panel-cnt .com-media-object{padding-right:0;padding-left:15px;width:83px;vertical-align:top;padding-top:5px}.com-4-article-panel-cnt .com-thumbnail{width:83px;height:63px}.com-4-article-panel-desc{font-size:14px;line-height:22px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-4-article-panel-infos{margin-top:10px;font-size:0;line-height:20px}.com-4-article-panel-info{display:inline-block;vertical-align:middle;font-size:12px;color:#999}.com-4-article-panel-info em{margin-right:5px}.com-4-article-panel-author{position:relative;z-index:2;display:inline-block;vertical-align:middle;margin-right:20px}.com-4-article-panel-author .author-link{color:#999}.com-4-article-panel-author .com-2-avatar{width:20px;height:20px}.com-4-article-panel-author .author-name{display:inline-block;vertical-align:middle;margin-left:10px;max-width:5em;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.panel-cell:nth-child(n+3) .com-4-article-panel-author .author-name{max-width:12em}.com-4-article-panel-author .author-link:hover{color:#00a4ff}.com-4-article-panel-author .com-verification{margin:0 0 0 5px}.com-4-article-panel.large{padding-left:190px}.com-4-article-panel.large.without-img{padding-left:20px}.com-4-article-panel.large .com-4-article-panel-title{margin-bottom:5px}.com-4-article-panel.large .com-4-article-panel-cnt{display:block}.com-4-article-panel.large .com-4-article-panel-cnt .com-media-body{padding:0}.com-4-article-panel.large .com-4-article-panel-cnt .com-media-object{position:absolute;left:20px;top:26px;display:block;padding-left:0;padding-top:0;width:auto}.com-4-article-panel.large .com-thumbnail{width:146px;height:109px}.com-4-article-panel.large .com-4-article-panel-infos{margin-top:12px}.com-4-article-panel.large .com-4-article-panel-author .author-name{max-width:15em}.com-salon-panel{position:relative;box-sizing:border-box;padding:56px 0 31px;height:230px;background-color:#F3F5F9;transition:box-shadow .3s linear}.com-salon-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-salon-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-salon-panel-hd{box-sizing:border-box;position:absolute;left:0;top:0;padding:15px 25px 0;width:100%;height:56px;overflow:hidden;background-position:right -40px;background-repeat:no-repeat;background-size:220px auto}.com-salon-panel-city{font-size:40px;line-height:44px;font-weight:400;color:#E1E3E9;font-style:italic}.com-salon-panel-bd{box-sizing:border-box;height:100%;position:relative;background-color:#fff;padding:20px 25px;border:1px solid #F4F4F5}.com-salon-panel-title{position:relative;font-size:18px;line-height:27px;color:#333;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:54px}.com-salon-panel-infos{margin-top:12px;font-size:0}.com-salon-panel-infos .com-icon-datas{display:inline-block;vertical-align:middle;margin-right:20px}.com-salon-panel-btns{margin-top:20px}.com-salon-panel-btns .panel-btn{position:absolute;right:25px;bottom:-13px}.com-salon-panel-btns .com-2-avatar:nth-child(n+4){display:none}.com-salon-panel.large{padding:28px 25px 25px;height:194px;overflow:hidden}.com-salon-panel.large .com-salon-panel-hd{display:none}.com-salon-panel.large .com-salon-panel-img{position:absolute;right:0;top:0;width:100%;height:100%;background-position:right bottom;background-repeat:no-repeat;background-size:auto 100%}.com-salon-panel.large .com-salon-panel-bd{position:static;padding:0;background-color:transparent;border:none}.com-salon-panel.large .com-salon-panel-title{max-width:270px}.com-salon-panel.large .com-mark-skew{position:absolute;right:25px;top:0}.com-salon-panel.large .com-salon-panel-btns{position:absolute;left:25px;right:25px;bottom:25px}.com-salon-panel.large .panel-btn{position:relative;left:0;top:0;margin-right:15px}.com-salon-panel.large .com-2-avatars-group{display:inline-block;vertical-align:middle}.com-salon-panel.large .com-2-avatars{display:none}.com-salon-panels{font-size:0;margin-bottom:-15px}.com-salon-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:15px;margin-bottom:15px;width:calc((100% - 15px * 2)/ 3)}.com-salon-panels>.panel-cell:nth-child(1),.com-salon-panels>.panel-cell:nth-child(2){width:calc((100% - 15px)/ 2)}.com-salon-panels>.panel-cell:nth-child(3n+2){margin-right:0}.com-salon-panels>.panel-cell:nth-child(3n+5){width:calc((100% - 15px * 2)/ 3 - 1px)\9}.com-loading-placeholder.com-salon-panel-loading{height:230px}.com-loading-placeholder.com-salon-panel-loading.large{height:194px}.com-user-panel{position:relative;box-sizing:border-box;height:275px}.com-user-panel-summary{opacity:1;transition:all .3s linear;transition-delay:.2s}.com-user-panel:hover .com-user-panel-summary{opacity:0}.com-user-panel-hd{box-sizing:border-box;padding:0 20px;height:175px;border-bottom:1px solid #EEEEEF}.com-user-panel-hd .com-2-avatar{display:block;width:90px;height:90px}.com-user-panel-title{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;max-width:100%;margin-top:16px;font-weight:400}.com-user-panel-title.with-verify{padding-right:17px}.com-user-panel-title-inner{font-size:18px;line-height:25px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-user-panel-title .com-verification{position:absolute;right:0;top:7px;margin-right:0;white-space:normal}.com-user-panel-title .com-verification .c-bubble-left,.com-user-panel-title .com-verification .c-bubble-right{width:160px}.com-user-panel-identity{position:relative;box-sizing:border-box;margin-top:8px;font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-user-panel-bd{padding:20px 20px 0}.com-user-panel-skills{margin-top:17px}.com-user-panel-skills>dt{font-size:12px;line-height:18px;color:#999}.com-user-panel-skills>dd{margin-top:8px}.com-user-panel-skills .com-tag-v2{margin-bottom:8px}.com-user-panel-detail{position:absolute;left:0;top:0;box-sizing:border-box;width:100%;height:100%;background-color:#fff;opacity:0;-ms-transform:translateY(10px);-webkit-transform:translateY(10px);transform:translateY(10px);transition:all .3s linear;transition-delay:.2s;border:1px solid #E1E3E9}.com-user-panel:hover .com-user-panel-detail{opacity:1;-ms-transform:translateY(0);-webkit-transform:translateY(0);transform:translateY(0);will-change:transform,opacity;z-index:900}.com-user-panel-detail>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-user-panel-detail .com-user-panel-hd{position:relative;padding-top:20px;padding-left:82px;height:110px;background-color:#F3F5F9}.com-user-panel-detail .com-2-avatar{position:absolute;left:25px;top:26px;width:45px;height:45px}.com-user-panel-detail .com-user-panel-title{margin-top:0}.com-user-panel-detail:hover .com-user-panel-title-inner{color:#00a4ff}.com-user-panel-detail:hover .com-verification{z-index:900}.com-user-panel-detail .com-user-panel-identity{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:36px;white-space:normal}.com-user-panel-detail .com-user-panel-bd{position:absolute;left:0;top:110px;right:0;bottom:0;box-sizing:border-box;background-color:#fff;padding:20px}.com-user-panel-detail .com-user-panel-desc{font-size:12px;line-height:21px;color:#000;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:4;max-height:84px}.com-user-panel-detail .com-user-panel-skills{margin-top:10px}.com-user-panel-btns{position:absolute;left:0;right:0;bottom:17px;z-index:2;text-align:center}.com-user-panel-btns .c-btn{padding:0 12px;min-width:80px;height:26px;font-size:12px;line-height:26px}.com-user-panel-btns .c-btn-hole{line-height:24px}.com-user-panels-wrap{position:relative;padding-left:40px;padding-right:40px}.com-user-panels-cnt{overflow:hidden}.com-user-panels{font-size:0;white-space:nowrap;text-align:center}.com-user-panels>.panel-cell{display:inline-block;vertical-align:top;margin-left:18px;margin-right:18px;width:213px;white-space:normal;text-align:left}.com-user-panels>.panel-cell:first-child{margin-left:0}.com-user-panels-pages .com-page-btn{position:absolute;top:50%;margin:-12px 0 0}.com-user-panels-pages .com-page-btn.prev{left:0}.com-user-panels-pages .com-page-btn.next{right:0}.com-loading-placeholder.com-user-panel-loading{height:275px}.com-special-list-wrap{position:relative;box-sizing:border-box;height:410px;padding:0 15px 0 30px;border:1px solid #E1E3E9}.com-special-thumbnail{position:absolute;right:15px;top:15px;width:382px;height:378px;background-size:cover;background-position:center;transition:background-image .2s linear}.com-special-list{margin-right:440px}.com-special{box-sizing:border-box;position:relative;display:block;padding:25px 0;height:72px;overflow:hidden;transition:height .5s}.com-special-title{font-size:16px;line-height:22px;font-weight:400;color:#666;cursor:pointer}.com-special-title-inner{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-special-title.with-mark .com-special-title-inner{padding-right:60px}.com-special-title .com-mark-rec{position:absolute;right:0;top:0;font-weight:400}.com-special-detail{box-sizing:border-box;position:absolute;left:0;top:0;padding:25px 0;width:100%;height:100%;opacity:0;visibility:hidden}.com-special-detail .com-special-title{font-size:22px;line-height:30px;font-weight:400;color:#333;cursor:text}.com-special-detail .com-special-desc{margin-top:14px;font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-special-detail .com-arrow-btn{margin-top:15px}.com-special-process{position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#E1E3E9}.com-special-process .process-bar{position:absolute;left:0;bottom:0;height:1px;width:100%;background-color:#00a4ff;display:none;transform:scaleX(0);transform-origin:left}.com-special-list.ani .process-bar{animation:width 10s linear}.com-special.actived{height:193px}.com-special.actived .com-special-summary{opacity:0}.com-special.actived .com-special-detail{opacity:1;visibility:visible}.com-special.actived .com-special-process .process-bar{display:block}.com-loading-placeholder.com-special-list-loading{height:406px}.com-team-panel{position:relative;box-sizing:border-box;height:550px;border:1px solid #E1E3E9;background-color:#fff}.com-team-panel .com-mark-triangle{position:absolute;left:0;top:0}.com-team-panel-hd{padding:30px 0 20px;text-align:center}.com-team-panel-title{font-size:18px;line-height:24px;color:#333;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-team-panel .com-2-avatars{margin-top:15px}.com-team-panel .com-vertical-datas{margin-top:20px}.com-team-panel .com-vertical-data{width:33.3333%}.com-team-panel .com-vertical-data:last-child{text-align:center}.com-team-panel-bd{padding:0 15px}.com-team-panel-subtitle{position:relative;margin-bottom:20px;font-size:12px;line-height:18px;color:#00a4ff;font-weight:400}.com-team-panel-subtitle:before{content:'';position:absolute;left:0;top:50%;width:100%;height:1px;background-color:#00A4FF;background:linear-gradient(to left,rgba(0,209,255,0) 0,rgba(0,164,255,1) 72%)}.com-team-panel-subtitle .text{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:17px;background-color:#fff}.com-team-panel-articles>li{margin-bottom:10px}.com-team-panel-article{margin-bottom:15px}.com-team-panel-article-cat{font-size:12px;line-height:18px;color:#999}.com-team-panel-article-cat .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;width:16px;height:16px;margin-right:5px}.com-team-panel-article-cat .icon.article{background-image:url(sprite/Column-20199161611.svg);;background-position:41.15% 67%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-team-panel-article-cat .icon.ask{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 18.23%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-team-panel-article-cat .icon.action{background-image:url(sprite/Column-20199161611.svg);;background-position:75.66000000000001% 44.83%;background-size:1512.5% 1368.75%;;background-repeat:no-repeat}.com-team-panel-article-title{margin-top:8px;font-size:14px;line-height:24px;color:#333;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-team-panel-article:hover .com-team-panel-article-title{color:#00a4ff}.com-team-panel-article .com-media-object{padding-right:0;padding-left:15px;width:106px}.com-team-panel-article .com-thumbnail{width:106px;height:80px}.com-team-panel-ft{position:absolute;left:0;bottom:0;width:100%;background-color:#F3F5F9;font-size:0}.com-team-panel-ft .ft-btn{display:inline-block;vertical-align:middle;width:100%;font-size:14px;line-height:46px;height:46px;text-align:center;color:#333}.com-team-panel-ft .ft-btn:hover{background-color:#00a4ff;color:#fff}.com-team-panels{font-size:0}.com-team-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;width:calc((100% - 1px - 20px * 2)/ 3)}.com-team-panels>.panel-cell:last-child{margin-right:0}.com-loading-placeholder.com-team-panel-loading{height:550px}.com-2-ask-panel{position:relative;margin-top:20px;padding:30px 30px 17px;border:1px solid #E1E3E9}.com-2-ask-panel:before{content:'';position:absolute;left:20px;top:-1px;width:47px;height:1px;background-color:#fff}.com-2-ask-panel:after{content:'';position:absolute;left:29px;top:-11px;width:28px;height:26px;background-image:url(sprite/Column-20199161611.svg);;background-position:0.47000000000000003% 55.96%;background-size:864.2857142857142% 842.3076923076924%;;background-repeat:no-repeat}.com-2-ask-panel-hd{position:relative;padding-right:200px}.com-2-ask-panel-title{font-size:18px;line-height:21px;font-weight:400;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-ask-panel-title a{color:inherit}.com-2-ask-panel-title a:hover{color:#00a4ff}.com-2-ask-panel-hd-extra{position:absolute;right:0;top:0;font-size:12px;line-height:21px;color:#999}.com-2-ask-panel-bd{position:relative;margin-top:17px;padding-left:160px;min-height:150px}.com-2-ask-panel-author{position:absolute;left:0;top:0;width:150px}.com-2-ask-panel-author .com-2-avatar{display:block;width:90px;height:90px}.com-2-ask-panel-author-name{position:relative;display:inline-block;vertical-align:middle;max-width:100%;box-sizing:border-box;margin-top:14px;font-size:18px;line-height:25px;color:#333;font-weight:500}.com-2-ask-panel-author-name.with-verify{padding-right:20px}.com-2-ask-panel-author:hover .com-2-ask-panel-author-name{color:#00a4ff}.com-2-ask-panel-author-name .name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-ask-panel-author-name .com-verification{position:absolute;right:0;top:7px}.com-2-ask-panel-identity{margin-top:3px;font-size:13px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-ask-panel-answer{box-sizing:border-box;background-color:#F3F5F9;border-radius:0 18px 18px;padding:22px 19px;margin-bottom:0;border:1px solid transparent}.com-2-ask-panel-answer:hover{border-color:#D2D9E7}.com-2-ask-panel-answer .com-media-body{height:106px}.com-2-ask-panel-answer-cnt{margin-top:-5px;font-size:14px;line-height:24px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-2-ask-panel-answer-opts{margin-top:16px}.com-2-ask-panel-answer .com-media-object{padding-right:0;padding-left:40px;width:192px}.com-2-ask-panel-answer .com-thumbnail{width:192px;height:106px}.com-loading-placeholder.com-2-ask-panel-loading{margin-top:20px;height:239px}.com-2-ask-panels>.panel-cell+.panel-cell{margin-top:30px}.com-2-doc-panel{display:table;table-layout:fixed;width:100%;height:90px;background-color:#f7f8fa;transition:box-shadow .2s}.com-2-doc-panel:hover{box-shadow:0 0 6px rgba(0,0,0,.1),0 4px 6px rgba(0,0,0,.1)}.com-2-doc-panel-hd{position:relative;display:table-cell;vertical-align:middle;width:90px;height:90px;text-align:center;overflow:hidden}.com-2-doc-panel .com-mark-triangle{position:absolute;left:0;top:0;z-index:1;width:36px;height:36px}.com-2-doc-panel .com-mark-triangle:before{border-width:18px}.com-2-doc-panel .com-mark-triangle .mark-cnt{margin-top:-15px;margin-left:-7px;-webkit-transform:rotate(-45deg) scale(.8333);-ms-transform:rotate(-45deg) scale(.8333);transform:rotate(-45deg) scale(.8333)}.com-2-doc-panel-img{position:relative;top:-1px;vertical-align:middle;width:90px;height:90px}.com-2-doc-panel-bd{display:table-cell;vertical-align:middle;padding:15px}.com-2-doc-panel-title{font-size:16px;line-height:22px;font-weight:500;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-doc-panel-desc{font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-doc-panel.large{display:block;height:307px}.com-2-doc-panel.large .com-2-doc-panel-hd{display:block;line-height:90px;width:auto}.com-2-doc-panel.large .com-2-doc-panel-bd{display:block;padding:15px 30px}.com-2-doc-panel-outline{margin-top:10px;font-size:14px;line-height:24px;color:#333}.com-2-doc-panel-outline li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-doc-panel-outline li:last-child{margin-top:-4px}.com-2-doc-panels-wrap{font-size:0}.com-2-doc-panels-wrap>.wrap-cell{display:inline-block;vertical-align:top;box-sizing:border-box;margin-right:16px;width:calc((100% - 16px)/ 2)}.com-2-doc-panels-wrap>.wrap-cell:last-child{margin-right:0}.com-2-doc-panels-wrap .com-2-avatars-group{display:none;margin-top:13px}.com-2-doc-panels{margin-bottom:-18px}.com-2-doc-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:12px;margin-bottom:18px;width:calc((100% - 12px)/ 2)}.com-2-doc-panels>.panel-cell:nth-child(2n){margin-right:0}.com-2-doc-panels.large{margin-bottom:0}.com-2-doc-panels.large>.panel-cell{margin-bottom:0;margin-right:16px;width:calc((100% - 16px)/ 2)}.com-2-doc-panels.large>.panel-cell:nth-child(2n){margin-right:0}.com-2-doc-panels.cols-3>.panel-cell{margin-right:20px;margin-bottom:20px;width:calc((100% - 20px * 2)/ 3)}.com-2-doc-panels.cols-3>.panel-cell:nth-child(2n){margin-right:20px}.com-2-doc-panels.cols-3>.panel-cell:nth-child(3n){margin-right:0}.com-loading-placeholder.com-2-doc-panel-loading{height:90px}.com-loading-placeholder.com-2-doc-panel-loading.large{height:307px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel{background-color:#f7f8fa;height:80px}.com-2-doc-panels-wrap.v2 .com-loading-placeholder.com-2-doc-panel-loading{height:80px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel-hd{width:80px;height:80px;background-color:#eef1f5}.com-2-doc-panels-wrap.v2 .com-2-doc-panel-img{width:80px;height:80px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel-bd{padding:10px 20px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel.large{height:260px}.com-2-doc-panels-wrap.v2 .com-2-doc-panel.large .com-2-doc-panel-hd{width:auto}.com-2-doc-panels-wrap.v2 .com-loading-placeholder.com-2-doc-panel-loading.large{height:260px}.com-2-doc-panels-wrap.v2>.wrap-cell{margin-right:10px;width:calc((100% - 10px - 1px)/ 2)}.com-2-doc-panels-wrap.v2>.wrap-cell:last-child{margin-right:0}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell{margin-right:10px;margin-bottom:10px}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell:nth-child(2n){margin-right:0;width:calc((100% - 10px - 1px)/ 2)}.com-2-doc-panels-wrap.v2 .com-2-doc-panels.large>.panel-cell{margin-right:10px;width:calc((100% - 10px - 1px)/ 2)}.com-2-doc-panels-wrap.v2 .com-2-doc-panels.large>.panel-cell:last-child{margin-right:0}.com-owner-panel{margin-bottom:40px;padding-top:48px;width:330px;height:175px}.com-owner-panel-inner{position:relative;box-sizing:border-box;padding:12px 20px 0;width:100%;height:100%;background-color:#fff;border:1px solid #e5e5e5}.com-owner-panel .com-2-avatar{position:absolute;left:20px;top:-48px}.com-owner-panel-hd{padding-left:131px;min-height:66px}.com-owner-panel-title{font-size:18px;line-height:25px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-owner-panel-title a{color:inherit}.com-owner-panel-title a:hover{color:#00a4ff}.com-owner-panel-identity{font-size:14px;line-height:20px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:40px}.com-owner-panel .com-emblem-list{margin-top:5px}.com-owner-panel .com-emblem-list>li{margin-left:0;margin-right:5px}.com-owner-panel-level-title{display:inline-block;vertical-align:middle;font-size:12px;line-height:18px;color:#00a4ff}.com-owner-panel-level-infos{margin-top:10px}.com-owner-panel-process{display:inline-block;vertical-align:middle;margin-right:10px;width:220px}.com-owner-panel-datas{margin-top:20px;display:table;width:100%;padding:0 2px}.com-owner-panel-datas>li{display:table-cell;vertical-align:top;width:50%;text-align:left}.com-owner-panel-data{display:inline-block;vertical-align:top;text-align:center;white-space:nowrap;font-size:13px;line-height:18px;color:#333}.com-owner-panel-data:hover{color:#00a4ff}.com-owner-panel-data .icon{display:inline-block;vertical-align:middle;margin-right:10px;width:24px;height:24px}.com-owner-panel-data .icon.follow{background-image:url(sprite/Column-20199161611.svg);;background-position:47.25% 24.099999999999998%;background-size:1008.3333333333334% 912.5%;;background-repeat:no-repeat}.com-owner-panel-data .icon.column{background-image:url(sprite/Column-20199161611.svg);;background-position:26.150000000000002% 55.379999999999995%;background-size:1008.3333333333334% 912.5%;;background-repeat:no-repeat}.com-owner-panel-data .icon.activities{background-image:url(sprite/Column-20199161611.svg);;background-position:14.219999999999999% 55.379999999999995%;background-size:1008.3333333333334% 912.5%;;background-repeat:no-repeat}.com-owner-panel-data .title{display:inline-block;vertical-align:middle;font-weight:400}.com-owner-panel-data.has-msg .title{position:relative}.com-owner-panel-data.has-msg .title:after{content:'';position:absolute;left:100%;top:50%;margin-top:-3px;margin-left:5px;width:6px;height:6px;border-radius:50%;background-color:#FF7800}.com-login-panel{box-sizing:border-box;margin-top:48px;margin-bottom:40px;padding:20px;width:330px;height:175px;background-color:#fff;border:1px solid #D2D9E7;font-size:18px;line-height:24px;color:#999;text-align:center}.com-login-panel .login-tip{margin-bottom:20px}.com-login-panel .c-btn{min-width:205px;height:40px;line-height:40px}.com-login-panel .c-btn-hole{margin-top:10px;line-height:38px}.com-hero-event{display:block;box-sizing:border-box;padding:10px 20px;margin-left:-1px;margin-right:-1px;height:134px;text-align:center;background-color:#fff;transition:box-shadow .3s linear}.com-hero-event-img{display:block;margin:0 auto;width:44px;height:44px}.com-hero-event-title{display:inline-block;vertical-align:middle;padding-bottom:2px;max-width:100%;margin-top:10px;font-size:18px;line-height:28px;font-weight:400;color:#333;border-bottom:1px solid #00a4ff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-hero-event-title em{color:#00a4ff;font-weight:500}.com-hero-event-title .tag{position:relative;top:-2px;display:inline-block;vertical-align:middle;box-sizing:border-box;margin-right:5px;padding:0 8px;height:20px;border-radius:2px;border:1px solid #FF7200;font-size:12px;line-height:18px;color:#FF7200}.com-hero-event-desc{margin-top:6px;font-size:12px;line-height:21px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-hero-event:hover{position:relative;z-index:2;box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-hero-events{margin-bottom:40px;display:table;table-layout:fixed;width:100%}.com-hero-events>.event-cell{position:relative;display:table-cell;vertical-align:top}.com-hero-events>.event-cell:first-child{padding-left:0}.com-hero-events>.event-cell:last-child{padding-right:0}.com-hero-events>.event-cell:before{content:'';position:absolute;left:0;top:50%;margin-top:-40px;width:1px;height:80px;background-color:#E1E3E9}.com-hero-events>.event-cell:first-child:before{display:none}.com-v2-multi-selector{position:relative;display:inline-block}.com-v2-multi-selector.block{display:block}.com-v2-dropdown-link{display:block;box-sizing:border-box;width:100%;height:44px;padding:0 40px 0 15px;background-color:#fff;border:1px solid #e5e5e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.65,.05,.36,1);font-size:14px;line-height:42px;color:#000}.com-v2-dropdown-link .caret{position:absolute;right:15px;top:50%;margin-top:-4px;width:15px;height:8px;background-image:url(sprite/Column-20199161611.svg);;transition:all .2s linear;background-position:99.11999999999999% 34.599999999999994%;background-size:1613.3333333333333% 2737.5%;;background-repeat:no-repeat}.com-v2-multi-selector.opened .com-v2-dropdown-link .caret{transform:rotate(180deg)}.com-v2-dropdown-menu{width:100%;min-width:470px;border:1px solid #e5e5e5;background-color:#fff;position:absolute;top:100%;left:0;z-index:1;margin-top:5px;box-sizing:border-box}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd .tab-btn{color:#444;height:52px;line-height:52px;padding:0 30px;border-right:1px solid #e5e5e5;display:inline-block;font-size:14px}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd .tab-btn.cur{border-bottom:1px solid #fff}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd{font-size:0;margin-bottom:-1px}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd .tab-btn:hover{text-decoration:none}.com-v2-dropdown-menu .com-v2-dropdown-tab-hd+.com-v2-dropdown-tab-bd{border-top:1px solid #e5e5e5}.com-v2-dropdown-menu .com-v2-dropdown-tab-bd{padding:5px 15px;max-height:320px;overflow-x:hidden;overflow-y:auto}.com-v2-dropdown-menu .area-list{font-size:0}.com-v2-dropdown-menu .area-list li{display:inline-block;padding-right:10px;width:50%;font-size:12px;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.com-v2-dropdown-menu .area-list li a{height:44px;line-height:44px;box-sizing:border-box;display:block;padding:0 13px;color:#000}.com-v2-dropdown-menu .area-list+.area-list{border-top:1px solid #e5e5e5;padding-top:5px}.com-v2-dropdown-menu .area-list li a:hover{background-color:#F2F2F2;text-decoration:none}.com-v2-dropdown-menu .area-list li.cur a{color:#fff;background-color:#00a4ff}.com-full-layout{box-sizing:border-box;position:relative;min-width:1000px;background-color:#F3F5F9}.com-full-layout:before{content:'';position:absolute;left:50%;right:0;top:0;bottom:0;background-color:#fff}.com-full-layout>.layout-inner{box-sizing:border-box;position:relative;margin:0 auto;max-width:1200px;height:100%}.com-full-layout-aside{box-sizing:border-box;position:fixed;top:96px;bottom:0;z-index:300;padding:30px 10px;width:200px;background-color:#F3F5F9;overflow:auto}.com-full-layout-main{box-sizing:border-box;position:relative;margin-left:200px;min-height:100%;background-color:#fff;padding:20px 10px 20px 30px}.com-full-layout-hd{margin-bottom:20px}.com-full-layout-title{font-size:22px;line-height:45px;color:#000;font-weight:400}.com-full-layout-desc{margin-top:5px;font-size:14px;line-height:24px;color:#666}.com-crumb.com-full-layout-crumb{margin-top:0;margin-bottom:10px}.com-full-layout-crumb .com-inner{padding:0 0 0 20px}.com-full-layout-nav>li{position:relative;padding:20px;border-bottom:1px solid #D2D9E7}.com-full-layout-nav>li:last-child{border-bottom:none}.com-full-layout-nav .nav-item{display:block;font-size:14px;line-height:24px;color:#333;text-decoration:none}.com-full-layout-nav a.nav-item:hover{color:#00a4ff}.com-full-layout-nav>.actived:after{content:'';position:absolute;left:0;bottom:-1px;width:80px;height:1px;background-color:#00a4ff}.com-full-layout-nav>.actived .nav-item{color:#00a4ff;cursor:default}.com-full-layout-nav .nav-tags{margin-top:15px;margin-right:-30px;padding-right:30px;overflow-x:hidden;overflow-y:auto}.com-full-layout-nav .nav-tags>li{display:block;margin-bottom:15px}.com-full-layout-nav .nav-tags .com-tag-v2{display:inline-block;vertical-align:middle;max-width:100%;margin:0}.com-full-layout-nav .nav-tags-more{margin-top:10px}.com-full-layout-nav .nav-tags-more a{color:#999}.com-full-layout-nav .nav-tags-more a:hover{color:#00a4ff}.com-full-layout-search{margin-bottom:18px}.com-2-hero{padding-top:10px;margin-bottom:30px}.com-2-hero-inner{margin:0 auto}.com-2-hero-list{font-size:0}.com-2-hero-list>.hero-cell{box-sizing:border-box;display:inline-block;vertical-align:middle;width:33.33%}.com-2-hero-list>.hero-cell:nth-child(2){padding:0 10px}.com-2-hero-item{position:relative;box-sizing:border-box;display:block;height:280px;background-color:#79a8ff;background-position:center right;background-repeat:no-repeat;background-size:auto 100%;color:#fff;overflow:hidden}.com-2-hero-item-img{position:absolute;left:0;right:0;top:0;height:100%;background-position:center right;background-repeat:no-repeat;background-size:auto 100%;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.com-2-hero-item:hover .com-2-hero-item-img{-webkit-transform:scale(1.025);transform:scale(1.025)}.com-2-hero-item-mark-wrap{margin-bottom:20px;min-height:20px}.com-2-hero-item-mark{display:inline-block;vertical-align:middle;padding:0 5px;height:20px;font-size:12px;line-height:20px;background-color:#00A4FF;border-radius:2px;color:#fff}.com-2-hero-item-mark.white{background-color:#fff;color:#00a4ff}.com-2-hero-item-cnt{position:relative;padding:60px 45px 0;height:187px}.com-2-hero-item-title{margin-bottom:20px;font-size:28px;line-height:36px;font-weight:400;max-width:350px;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:72px}.com-2-hero-item-desc{margin-top:4px;font-size:14px;line-height:24px;max-width:350px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-hero-item-btns{display:none;position:absolute;left:45px;bottom:0;margin-top:20px}.com-2-hero-item.black{background-color:#e6e9ee;color:#000}.com-3-user-panel{position:relative;box-sizing:border-box;height:210px;text-align:center;padding:20px 10px}.com-3-user-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-3-user-panel .com-2-avatar{display:block;margin:0 auto;width:80px;height:80px;transition:all .3s ease-in-out}.com-3-user-panel-title{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;max-width:100%;margin-top:10px;font-weight:400}.com-3-user-panel-title.with-verify{padding-right:17px}.com-3-user-panel-title-inner{font-size:18px;line-height:25px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-user-panel-title .com-verification{position:absolute;right:0;top:7px;margin-right:0;white-space:normal}.com-3-user-panel:hover .com-verification{z-index:900}.com-3-user-panel-title .com-verification .c-bubble{width:160px;margin-left:-80px}.com-3-user-panel-identity{position:relative;box-sizing:border-box;margin-top:5px;font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-user-panel-skills{font-size:12px;line-height:18px;color:#999;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;height:0;transition:all .3s ease-in-out}.com-3-user-panel-btns{position:absolute;left:0;bottom:15px;z-index:2;width:100%}.com-3-user-panel-btns .c-btn{padding:0 12px;min-width:80px;height:28px;font-size:12px;line-height:26px}.com-3-user-panel:hover{padding-top:15px;background-color:#F7F8FA}.com-3-user-panel:hover .com-2-avatar{width:50px;height:50px}.com-3-user-panel:hover .com-3-user-panel-skills{height:36px}.com-3-user-panels-wrap{position:relative;padding-left:40px;padding-right:40px}.com-3-user-panels-cnt{height:210px;overflow:hidden}.com-3-user-panels{font-size:0}.com-3-user-panels>.panel-cell{display:inline-block;vertical-align:top;box-sizing:border-box;white-space:normal;text-align:left;margin-left:20px;width:calc((100% - 20px * 4 - 1px)/ 5)}.com-3-user-panels>.panel-cell:first-child{margin-left:0}.com-3-user-panels-pages .com-page-btn{position:absolute;top:50%;margin:-21px 0 0;width:42px;height:42px;text-align:center;line-height:42px}.com-3-user-panels-pages .com-page-btn .btn-icon{display:inline-block;vertical-align:middle;width:24px;height:24px}.com-3-user-panels-pages .com-page-btn.prev{left:0}.com-3-user-panels-pages .com-page-btn.next{right:0}.com-loading-placeholder.com-3-user-panel-loading{height:210px}.com-2-special-list-wrap{position:relative;box-sizing:border-box;height:294px;background-color:#F7F8FA}.com-2-special-thumbnail{position:absolute;left:0;top:0;width:280px;height:100%;background-size:cover;background-position:center;transition:background-image .2s linear}.com-2-special-list{margin-right:25px;margin-left:300px;padding-top:10px}.com-2-special{box-sizing:border-box;position:relative;display:block;padding:10px 0;height:41px;overflow:hidden;transition:height .5s}.com-2-special-title{font-size:14px;line-height:20px;font-weight:400;color:#666;cursor:pointer}.com-2-special-title-inner{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-special-title.with-mark .com-2-special-title-inner{padding-right:60px}.com-2-special-title .com-mark-rec{position:absolute;right:0;top:-2px;font-weight:400}.com-2-special-detail{box-sizing:border-box;position:absolute;left:0;top:0;padding:10px 0 20px;width:100%;height:100%;opacity:0;visibility:hidden}.com-2-special-detail .com-2-special-title{font-size:24px;line-height:34px;font-weight:500;color:#000;cursor:text}.com-2-special-detail .com-mark-rec{top:5px}.com-2-special-detail .com-2-special-desc{margin-top:10px;font-size:12px;line-height:22px;color:#333;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-2-special-detail .com-arrow-btn{margin-top:10px}.com-2-special-process{position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#E1E3E9}.special-cell:last-child .com-2-special-process{background-color:transparent}.com-2-special-process .process-bar{position:absolute;left:0;bottom:0;height:1px;width:100%;background-color:#00a4ff;display:none;transform:scaleX(0);transform-origin:left}.com-2-special-list.ani .process-bar{animation:width 10s linear}@keyframes width{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}.com-2-special.actived{height:154px}.com-2-special.actived .com-2-special-summary{opacity:0}.com-2-special.actived .com-2-special-detail{opacity:1;visibility:visible}.com-2-special.actived .com-2-special-process .process-bar{display:block}.com-loading-placeholder.com-2-special-list-loading{height:294px}.com-2-team-panel{position:relative;box-sizing:border-box;height:345px;background-color:#f7f8fa}.com-2-team-panel .com-mark-triangle{position:absolute;left:0;top:0}.com-2-team-panel-hd{padding:30px 20px 20px;text-align:center}.com-2-team-panel-title{font-size:18px;line-height:24px;color:#333;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-team-panel .com-2-avatars{margin-top:15px}.com-2-team-panel .com-2-avatar{width:32px;height:32px}.com-2-team-panel .com-datas{margin-top:20px}.com-2-team-panel-bd{padding:0 20px}.com-2-team-panel-subtitle{position:relative;margin-bottom:10px;font-size:12px;line-height:18px;color:#999;font-weight:400}.com-2-team-panel-subtitle:before{content:'';position:absolute;left:0;top:50%;width:100%;height:1px;background-color:#00A4FF;background:linear-gradient(to left,rgba(0,209,255,0) 0,rgba(0,164,255,1) 72%)}.com-2-team-panel-subtitle .text{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:17px;background-color:#f7f8fa}.com-2-team-panel-articles>li{margin-bottom:10px}.com-2-team-panel-article{display:inline-block;vertical-align:middle;max-width:100%;font-size:12px;line-height:24px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-team-panel-article .split{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin:0 6px;width:2px;height:2px;background-color:#666;border-radius:50%}.com-2-team-panel-article:hover{color:#00a4ff}.com-2-team-panel-article:hover .split{background-color:#00a4ff}.com-2-team-panel-ft{position:absolute;left:0;bottom:0;width:100%;font-size:0;padding-bottom:20px;text-align:center}.com-2-team-panel:hover,.com-2-team-panel:hover .com-2-team-panel-subtitle .text{background-color:#eef1f5}.com-2-team-panel:hover .com-arrow-btn{background-color:#fff;color:#fff}.com-2-team-panel:hover .com-arrow-btn-text{background-color:#00a4ff}.com-2-team-panel:hover .com-arrow-btn-text:after{border-color:#00a4ff transparent transparent #00a4ff}.com-2-team-panel:hover .com-arrow-btn.actived,.com-2-team-panel:hover .com-arrow-btn:hover{box-shadow:0 4px 9px 0 rgba(0,164,255,.22)}.com-2-team-panels{font-size:0}.com-2-team-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;width:calc((100% - 1px - 20px * 2)/ 3)}.com-2-team-panels>.panel-cell:last-child{margin-right:0}.com-loading-placeholder.com-2-team-panel-loading{height:343px}.com-simple-ask{position:relative;padding:10px 20px 10px 76px;box-sizing:border-box;height:70px}.com-simple-ask:hover{background-color:#F7F8FA}.com-simple-ask .panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-simple-ask-answer{position:absolute;left:10px;top:10px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 5px 0;width:46px;height:46px;border-radius:2px;background-color:#E1EEFA;line-height:1.2;color:#00a4ff;text-align:center;cursor:pointer}.com-simple-ask-answer .num{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px}.com-simple-ask-answer .name{font-size:12px}.com-simple-ask-answer.none-answer{background-color:#F3F4F5;color:#444}.com-simple-ask-title{font-size:16px;line-height:28px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-simple-ask-tags{position:relative;z-index:2;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-simple-asks{font-size:0;margin-bottom:-10px}.com-simple-asks>.panel-cell{display:inline-block;vertical-align:top;width:100%}.com-simple-asks.list-2>.panel-cell{margin-right:20px;width:calc((100% - 20px - 1px)/ 2)}.com-simple-asks.list-2>.panel-cell:nth-child(2n){margin-right:0}.com-simple-ask-loading{height:60px;margin-bottom:10px}.com-2-login-panel{margin-bottom:20px;box-sizing:border-box;height:148px;padding-top:20px;text-align:center;background:url(src/components/LoginPanel2/css/img/bg8ef57356e417423d49700e1964c9d3c3.jpg) right top no-repeat #F7F8FA;background-size:auto 148px}.com-2-login-panel .login-tip{margin-bottom:20px;font-size:14px;line-height:24px;color:#999}.com-2-login-panel .login-tip-primary{font-size:18px}.com-2-login-panel .login-tip-primary em{color:#00a4ff}.com-2-login-panel .c-btn{margin:0 6px;width:110px;min-width:0}.com-2-login-panel .c-btn-hole{background-color:#fff}.com-2-login-panel .c-btn-hole:hover{background-color:#e8f1fb}.com-2-owner-panel{margin-bottom:20px;box-sizing:border-box;height:148px;padding:10px;background:url(src/components/LoginPanel2/css/img/bg8ef57356e417423d49700e1964c9d3c3.jpg) right top no-repeat #F7F8FA;background-size:auto 148px}.com-2-owner-panel-hd{position:relative;margin-bottom:18px;padding-left:100px}.com-2-owner-panel-hd .com-2-avatar{position:absolute;left:0;top:0;width:80px;height:80px}.com-2-owner-panel-main{min-height:61px}.com-2-owner-panel-title{font-size:16px;line-height:22px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-owner-panel-title a{color:inherit}.com-2-owner-panel-title a:hover{color:#00a4ff}.com-2-owner-panel-identity{margin-bottom:5px;font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-owner-panel .com-emblem-list{margin-top:0;margin-bottom:5px}.com-2-owner-panel .com-emblem{margin-left:0}.com-2-owner-panel .com-emblem:last-child{margin-right:0}.com-2-owner-panel-level-infos{position:relative;padding-right:55px}.com-2-owner-panel-level-title{position:absolute;left:100%;top:0;margin-left:-50px;font-size:12px;line-height:16px;color:#00a4ff;white-space:nowrap}.com-2-owner-panel-datas{font-size:0}.com-2-owner-panel-datas>li{display:inline-block;vertical-align:top;width:33.33%;box-sizing:border-box;padding-right:2px}.com-2-owner-panel-datas>li:last-child{padding-right:0}.com-2-owner-panel-data{display:block;height:20px;font-size:12px;line-height:20px;color:#666;text-align:center;background-color:#fff}.com-2-owner-panel-data:hover{color:#00a4ff}.com-2-owner-panel-data.has-msg:after{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-left:4px;width:6px;height:6px;border-radius:50%;background-color:#FF7800}.com-2-organizer{box-sizing:border-box;display:table;table-layout:fixed;padding:20px;width:100%;border:1px solid #E5E8ED;background-color:#fff;transition:box-shadow .3s linear}a.com-2-organizer:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-organizer-img{display:table-cell;width:120px;vertical-align:middle}.com-2-organizer-img img{display:block;width:100%;max-height:50px}.com-2-organizer-bd{display:table-cell;vertical-align:middle;padding-left:20px;word-wrap:break-word;height:70px}.com-2-organizer-title{font-size:18px;line-height:24px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-organizer-desc{margin-top:2px;font-size:14px;line-height:22px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-2-organizer.small{display:block;text-align:center}.com-2-organizer.small .com-2-organizer-img{display:block;width:120px;height:50px;margin:0 auto}.com-2-organizer.small .com-2-organizer-bd{display:block;margin-top:20px;padding:0}.com-2-organizer.small .com-2-organizer-desc{margin-top:10px}.com-2-organizers{font-size:0}.com-2-organizers>.panel-cell{margin-bottom:20px;font-size:14px}.com-2-organizers[class*=list]>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px}.com-2-organizers.list2>.panel-cell{width:calc((100% - 20px -1px)/ 2)}.com-2-organizers.list2>.panel-cell:nth-child(2n){margin-right:0}.com-2-organizers.list3>.panel-cell{width:calc((100% - 20px * 2 -1px)/ 3)}.com-2-organizers.list3>.panel-cell:nth-child(3n){margin-right:0}.com-2-organizers.list4>.panel-cell{width:calc((100% - 20px * 3 -1px)/ 4)}.com-2-organizers.list4>.panel-cell:nth-child(4n){margin-right:0}.com-action-panel{padding-top:30px;border-bottom:1px solid #E5E8ED}.com-action-panel-hd{position:relative;z-index:1;height:20px}.com-action-panel-action{font-size:14px;line-height:20px;color:#666}.com-action-panel-action-icon{display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-right:5px;width:20px;height:20px}.com-action-panel-action-icon.answer,.com-action-panel-action-icon.ask{background-image:url(sprite/Column-20199161611.svg);;background-position:67.12% 44.72%;background-size:1210% 1095%;;background-repeat:no-repeat}.com-action-panel-action-icon.follow{top:-2px;background-image:url(sprite/Column-20199161611.svg);;background-position:67.12% 33.67%;background-size:1210% 1095%;;background-repeat:no-repeat}.com-action-panel-action-icon.join{background-image:url(sprite/Column-20199161611.svg);;background-position:67.12% 11.559999999999999%;background-size:1210% 1095%;;background-repeat:no-repeat}.com-action-panel-action-icon.like{background-image:url(sprite/Column-20199161611.svg);;background-position:67.12% 55.779999999999994%;background-size:1210% 1095%;;background-repeat:no-repeat}.com-action-panel-action-icon.publish{background-image:url(sprite/Column-20199161611.svg);;background-position:67.12% 0.5%;background-size:1210% 1095%;;background-repeat:no-repeat}.com-action-panel-time{position:absolute;right:0;top:0;font-size:14px;line-height:20px;color:#999}.com-action-panel .com-3-article-panel,.com-action-panel .com-3-salon-panel,.com-action-panel .com-3-tag-panel,.com-action-panel .com-column-panel,.com-action-panel .coml-2-user-panel{margin-top:-50px;padding-top:70px;padding-bottom:30px;border-bottom:none}.com-action-panel .com-ask-panel{margin-top:24px;margin-bottom:0;padding-bottom:30px;border-bottom:none}.com-ask-action{padding-top:30px}.com-ask-action-hd{position:relative;z-index:1;height:16px}.com-ask-action-action{font-size:14px;line-height:16px;color:#666}.com-ask-action .com-ask-panel{margin-top:24px;margin-bottom:0;padding-bottom:30px}.com-2-tab-subctrl{margin-bottom:20px;font-size:0}.com-2-tab-subctrl-nav{display:inline-block;vertical-align:middle;font-size:0}.com-2-tab-subctrl-nav-item{display:inline-block;vertical-align:middle;margin-right:45px;font-size:16px;line-height:22px;color:#666}.com-2-tab-subctrl-nav-item a{color:inherit}.com-2-tab-subctrl-nav-item a:hover{color:#00a4ff}.com-2-tab-subctrl-nav-item.actived{font-weight:500;color:#000}.com-2-tab-subctrl-nav-item.actived a{cursor:default}.com-2-tab-subctrl-nav-item.actived a:hover{color:inherit}.com-2-tab-subctrl-drop .com-bubble-menu a{padding:0 15px;height:40px;line-height:40px}.com-2-tab-subctrl-drop .c-bubble-trigger-btn{font-size:16px;line-height:22px;height:22px}.com-2-tab-subctrl-drop.actived .c-bubble-trigger-btn{font-weight:500;color:#000}.com-2-tab-subctrl-drop.actived:hover .c-bubble-trigger-btn{color:#00a4ff}.com-2-tab-subctrl-drop:hover .c-bubble{pointer-events:auto;margin-top:0;padding-top:10px;width:120px}.com-weak-section{margin-bottom:25px}.com-weak-section-title{font-size:16px;line-height:22px;color:#000;font-weight:400}.com-rec-section-hd{position:relative;text-align:center}.com-rec-section-hd:before{content:'';position:absolute;left:0;top:50%;width:100%;height:1px;background-color:#D8D8D8}.com-rec-section-title{position:relative;z-index:1;top:-2px;display:inline-block;vertical-align:middle;padding:0 10px;font-size:16px;line-height:22px;color:#999;font-weight:400;background-color:#fff}.com-rec-section-bd{padding-top:35px}.com-rec-section-ft{margin-top:20px;text-align:center}.com-rec-section-ft .c-btn{min-width:130px;height:32px;line-height:32px;font-size:14px}.com-rec-section-ft .c-btn-hole,.com-rec-section-ft .c-btn-weak{line-height:30px}.com-dialog-level{box-sizing:border-box;min-height:460px;padding:20px 0;text-align:center}.com-dialog-level-bd{box-sizing:border-box;min-height:340px;padding-top:1px}.com-dialog-level-title{margin-bottom:15px;font-size:24px;line-height:36px;font-weight:400;color:#000}.com-dialog-level-title em{color:#FF7800}.com-dialog-level-desc{font-size:18px;line-height:26px;color:#666}.com-dialog-level-ft{margin-top:20px;font-size:14px;line-height:26px;color:#999}.com-dialog-level-now{position:relative;box-sizing:border-box;padding-top:130px;height:230px;width:330px;margin:50px auto 17px;background-image:url(src/components/DLevel/css/img/slice/icon-nowe3def2c9508bbebaa2c39b54b1987ba2.jpg);background-size:100% auto}.com-dialog-level-now .now-content{margin:0 auto;width:110px;height:48px;font-size:32px;line-height:48px;text-align:center;color:#fff;font-weight:700}.com-dialog-level-goal{box-sizing:border-box;margin:77px auto 20px;padding-top:13px;width:220px;height:160px;text-align:center;background-size:100% auto;background-image:url(src/components/DLevel/css/img/slice/icon-goal8d7f10701e337690af4bf724ae9844de.jpg)}.com-dialog-level-goal .goal-content{margin:0 auto;width:122px;height:140px;font-size:60px;line-height:140px;color:#fff;text-shadow:0 4px 4px #FCB53B;font-weight:500}.com-dialog-level-goal .goal-action{position:relative;top:-5px;margin-right:3px}.com-dialog-level-gift{margin:88px auto 10px;box-sizing:border-box;padding-top:42px;width:330px;height:160px;background-size:100% auto;background-image:url(src/components/DLevel/css/img/slice/icon-gift3d5b3dbf3180de3ff8ca462f608d8e28.jpg)}.com-dialog-level-gift .gift-content{margin:0 auto;width:160px;height:82px;box-sizing:border-box;text-align:center;color:#fff;padding-top:10px;text-shadow:0 4px 4px #FCB53B;font-weight:500}.com-dialog-level-gift .gift-price{font-size:30px;line-height:42px}.com-dialog-level-gift .gift-name{font-size:14px;line-height:20px}.com-narrow-layout{margin:0 auto;padding:25px 0 50px;width:800px}.com-narrow-layout-pages{margin-bottom:25px}.com-narrow-layout-prev{font-size:12px;line-height:18px;color:#000}.com-narrow-layout-prev:before{content:'';display:inline-block;vertical-align:middle;width:7px;height:11px;background-image:url(sprite/Column-20199161611.svg);;margin-right:10px;position:relative;top:-1px;background-position:39.57% 19.71%;background-size:3457.142857142857% 1990.909090909091%;;background-repeat:no-repeat}.com-narrow-layout-prev:hover{color:#00a4ff}.com-narrow-layout-prev:hover:before{background-image:url(sprite/Column-20199161611.svg);;background-position:39.57% 13.459999999999999%;background-size:3457.142857142857% 1990.909090909091%;;background-repeat:no-repeat}.com-third-section{padding-bottom:25px;margin-bottom:25px;border-bottom:1px solid #eee}.com-third-section.without-border{padding-bottom:0;border-bottom:none}.com-third-section-hd{margin-bottom:20px}.com-third-section-title{font-size:18px;line-height:18px;color:#000;font-weight:400}.com-layout-panel{padding:30px;background-color:#fff;border:1px solid #E5E8ED;box-shadow:0 2px 4px 0 rgba(3,27,78,.06)}.com-layout-panel-subtab{margin-bottom:30px}.com-btn-group{display:inline-block;vertical-align:middle;font-size:0}.com-btn-group .c-btn{vertical-align:middle;box-sizing:border-box;min-width:96px;height:44px;padding:0 15px;border:1px solid #E7EAED;background-color:transparent;font-size:14px;line-height:42px;color:#000;text-align:center}.com-btn-group .c-btn+.c-btn{margin-left:-1px}.com-btn-group .c-btn:hover{position:relative;z-index:2;border-color:#00a4ff;color:#00a4ff}.com-btn-group .c-btn.actived,.com-btn-group .c-btn.actived:hover{position:relative;z-index:1;background-color:rgba(0,154,255,.1);border-color:#00a4ff;color:#00a4ff;cursor:default}.com-form-lattice{font-size:0}.com-form-lattice>.com-form-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px}.com-form-lattice.com-form-lattice-cols-1>.com-form-lattice-cell{width:100%}.com-form-lattice.com-form-lattice-cols-2>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (2 - 1))/ 2)}.com-form-lattice.com-form-lattice-cols-2>.com-form-lattice-cell:nth-child(2n){margin-right:0}.com-form-lattice.com-form-lattice-cols-2>.com-form-lattice-cell:nth-child(2n):after{display:none}.com-form-lattice.com-form-lattice-cols-3>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (3 - 1))/ 3)}.com-form-lattice.com-form-lattice-cols-3>.com-form-lattice-cell:nth-child(3n){margin-right:0}.com-form-lattice.com-form-lattice-cols-3>.com-form-lattice-cell:nth-child(3n):after{display:none}.com-form-lattice.com-form-lattice-cols-4>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (4 - 1))/ 4)}.com-form-lattice.com-form-lattice-cols-4>.com-form-lattice-cell:nth-child(4n){margin-right:0}.com-form-lattice.com-form-lattice-cols-4>.com-form-lattice-cell:nth-child(4n):after{display:none}.com-form-lattice.com-form-lattice-cols-5>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (5 - 1))/ 5)}.com-form-lattice.com-form-lattice-cols-5>.com-form-lattice-cell:nth-child(5n){margin-right:0}.com-form-lattice.com-form-lattice-cols-5>.com-form-lattice-cell:nth-child(5n):after{display:none}.com-form-lattice.com-form-lattice-cols-6>.com-form-lattice-cell{margin-right:10px;width:calc((100% - 10px * (6 - 1))/ 6)}.com-form-lattice.com-form-lattice-cols-6>.com-form-lattice-cell:nth-child(6n){margin-right:0}.com-form-lattice.com-form-lattice-cols-6>.com-form-lattice-cell:nth-child(6n):after{display:none}.com-3-sub-section{margin-bottom:20px}.com-3-sub-section-hd{position:relative;margin-bottom:30px;line-height:24px}.com-3-sub-section-title{font-size:24px;line-height:24px;font-weight:400;color:#000}.com-3-sub-section-extra{position:absolute;right:0;top:0}.com-event-panel{margin-bottom:20px}.com-event-panel-inner{box-sizing:border-box;display:table;width:100%;table-layout:fixed}.com-event-panel-object{display:table-cell;width:220px;vertical-align:middle;position:relative}.com-event-panel-img{display:block;width:220px;height:118px}.com-event-panel-body{position:relative;display:table-cell;vertical-align:middle;border-width:1px 0;border-style:solid;border-color:#ddd transparent;padding:0 140px 0 15px}.com-event-panel-body:after{position:absolute;content:"";right:0;top:-1px;bottom:-1px;width:5px;background:#00A1FF}.com-event-panel-act{position:absolute;right:30px;top:50%;z-index:2;transform:translateY(-50%)}.com-event-panel-act .c-btn{min-width:auto}.com-event-panel-desc,.com-event-panel-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-event-panel-title{font-size:18px;font-weight:700;color:#333}.com-event-panel-desc{font-size:14px;color:#666;margin:10px 0 0}.com-event-panel-sign-wrap{position:absolute;right:4px;top:10px;font-size:0}.com-event-panel-sign{display:inline-block;vertical-align:middle;padding:0 6px;height:20px;box-sizing:border-box;border:1px solid #fff;font-size:12px;line-height:18px;color:#fff;opacity:.5}.com-event-panel-close{display:inline-block;vertical-align:middle;margin-left:5px;width:20px;height:20px;text-align:center;line-height:20px}.com-event-panel-close:before{content:'';display:inline-block;vertical-align:middle;width:12px;height:12px;background-image:url(sprite/Column-20199161611.svg);;background-position:97.83% 71.98%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.com-event-panel-s .com-event-panel-object{display:block;width:auto}.com-event-panel-s .com-event-panel-img{width:46px;height:160px}.com-event-panel-s .com-event-panel-sign-wrap{display:none}.com-event-panel-l .com-event-panel-object{display:block;width:auto}.com-event-panel-l .com-event-panel-img{width:330px;height:160px}.com-event-panel-xl .com-event-panel-object{display:block;width:auto}.com-event-panel-xl .com-event-panel-img{width:700px;height:118px}.com-course-card-list>.card-item{margin-bottom:20px}.com-media-motion{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.1);-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:transform .3s;-moz-transition:transform .3s;-ms-transition:transform .3s;-o-transition:transform .3s;transition:transform .3s}.com-media-motion:hover{-webkit-transform:translate3d(0,-3px,0);transform:translate3d(0,-3px,0)}.com-course-card .com-course-card-title{font-size:14px;color:#333;line-height:24px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.com-course-card .com-course-card-desc{font-size:14px;color:#666;line-height:24px;height:48px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;word-break:break-all;word-wrap:break-word;overflow:hidden;margin-top:10px}.com-course-card .com-course-card-money{font-size:16px;line-height:25px;color:#ff7200}.com-course-card .com-course-card-unit{color:#ff7200;font-size:14px;margin-left:5px}.com-course-card{position:relative;background-color:#fff;display:block}.com-course-card .com-course-card-free{font-size:16px;color:#0abf5b;line-height:25px}.com-course-card .col-star-rating .star-text-lt,.com-course-card .col-star-rating .star-text-rt{font-size:14px}.com-course-card .com-course-card-bd{padding:10px}.com-course-card .com-course-card-title{height:42px;line-height:21px;font-size:14px;color:#333;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.com-course-card .com-course-card-detail{margin-top:6px}.com-course-card .com-course-card-detail-inner{display:table;width:100%;height:22px;box-sizing:border-box}.com-course-card .col-star-rating,.com-course-card .com-course-card-price{display:table-cell;vertical-align:middle}.com-course-card .com-course-card-price{right:10px;bottom:20px;position:static;line-height:22px}.com-course-card .com-course-card-price .com-course-card-free{line-height:22px;font-size:16px;color:#0abf5b}.com-course-card .com-course-card-price .com-course-card-load{line-height:22px;font-size:14px;color:#999}.com-course-card .com-course-card-price .com-course-card-money,.com-course-card .com-course-card-price .com-course-card-unit{line-height:1;font-size:16px;color:#ff7200}.com-course-card .com-course-card-price .com-course-card-unit{position:relative;top:-1px;font-size:14px}.com-course-card .com-course-card-price .com-course-card-origin{position:relative;top:-1px;margin-left:10px;font-size:14px;color:#999}.com-course-card .com-price{display:table-cell;vertical-align:middle;font-size:16px}.com-course-card .com-price-unit{margin-left:5px;font-size:14px}.com-course-card .com-price-origin{margin-left:10px;font-size:14px}.com-course-card .col-star-rating{margin-top:0;text-align:right}.com-course-card .col-star-rating .star-list{margin-left:0}.com-course-card .star-text-rt{margin-left:5px}.com-course-img{padding-top:50%;background-size:cover;background-position:center;position:relative;color:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-align:center;background-color:#00a4ff}.com-course-img .com-course-img-title{font-size:24px;color:#fff;line-height:48px;padding:0 50px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;word-break:break-all;word-wrap:break-word;overflow:hidden;text-align:left}.com-course-img.course-img-s .com-course-img-title{padding:0 20px}.com-course-img .com-course-img-desc{padding:0 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;color:#fff;line-height:22px}.com-course-img::after{content:'';position:absolute;left:0;top:0;width:100%;height:100%;opacity:.9}.com-course-img.color1::after{background:linear-gradient(to right ,#0092ff ,#65c3ff)}.com-course-img.color2::after{background:linear-gradient(to right ,#00B7D6 ,#6ce7f3)}.com-course-img.color3::after{background:linear-gradient(to right ,#2059bf ,#4ba5ff)}.com-course-img .com-course-img-divider{width:220px;height:1px;background:#fff;margin:2px auto 5px}.com-course-img .com-course-img-con{left:0;top:50%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);transform:translate(0,-50%);width:100%;z-index:1}.com-course-img.course-img-s .com-course-img-con{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;top:45px;left:0}.com-course-img.course-img-s{padding-top:42.8571%}.com-course-img.course-img-s .com-course-img-title{line-height:30px;font-size:18px;text-align:left}.com-course-img.course-img-s .com-course-img-desc{font-size:12px;line-height:17px}.com-course-img.course-img-s .com-course-img-divider{width:141px;opacity:.6}.com-course-img .com-bar-tag{background-color:#fff;height:20px;border:none;line-height:20px;font-size:12px;margin-left:0}.com-course-img .com-course-img-tag-lt{position:absolute;top:0;z-index:2}.com-course-img .com-bar-tag.hot{color:#fff;background:#fd7822}.com-course-img .com-bar-tag.cur{background-color:#00a4ff;color:#fff;vertical-align:text-bottom}.com-course-img .com-bar-tag.done,.com-course-img .com-bar-tag.free,.com-course-img .com-bar-tag.live{color:#fff;background-color:rgba(0,0,0,.25)}.com-course-img .com-bar-tag.living,.com-course-img .com-bar-tag.new,.com-course-img .com-bar-tag.recommend,.com-course-img .com-bar-tag.update,.com-course-img .com-bar-tag.updating{color:#fff;background-color:#e1504a}.com-course-img .com-bar-tag.living .icon-live{background-image:url(sprite/Column-20199161611.svg);;background-position:91.59% 52.15%;background-size:1512.5% 2190%;;background-repeat:no-repeat}.com-course-img .com-course-img-con,.com-course-img.course-img-s .com-course-img-con{position:absolute;top:50%;margin-top:-30px;width:100%;height:60px;max-height:60px;overflow:hidden;box-sizing:border-box;transform:none;-ms-transform:none;-moz-transform:none;-webkit-transform:none;-o-transform:none}.com-course-img .com-course-img-con .com-course-img-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.com-course-img .com-bar-tag{padding:0 5px;height:18px;line-height:18px;font-size:0}.com-course-img .com-bar-tag+.com-bar-tag{margin-left:5px}.com-course-img .com-course-img-tag{position:absolute;font-size:0;z-index:2}.com-course-img .com-course-img-tag-lt{left:0;top:0}.com-course-img .com-course-img-tag-lb{left:0;bottom:0}.com-course-img .com-course-img-tag-rt{position:absolute;bottom:0;z-index:2;font-size:0;right:0;top:0}.com-course-img .com-course-img-tag-rb{right:0;bottom:0}.com-course-img .com-course-img-tag .com-bar-tag{vertical-align:top}.com-star-rating .star-text-lt,.com-star-rating .star-text-rt{font-size:14px;color:#666;line-height:22px;vertical-align:middle}.com-star-rating .star-text-rt{vertical-align:middle}.com-star-rating .star-list{font-size:0;display:inline-block;vertical-align:middle;margin-left:4px;line-height:1}.com-star-rating .star{width:12px;height:12px;background-image:url(sprite/Column-20199161611.svg);;display:inline-block;margin:0 2px;background-position:97.83% 78.74%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.com-star-rating .star.full{background-image:url(sprite/Column-20199161611.svg);;background-position:90% 84.54%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.com-star-rating .star.part{background-image:url(sprite/Column-20199161611.svg);;background-position:97.83% 89.86%;background-size:2016.6666666666667% 1825%;;background-repeat:no-repeat}.com-star-rating .error-tip{color:red}.com-price{line-height:1;font-size:30px;color:#ff7200}.com-price.free{color:#0abf5b}.com-price.loading,.com-price.paid{color:#999}.com-price .com-price-unit{position:relative;top:-1px;margin-left:14px;font-size:18px}.com-price .com-price-origin{position:relative;top:-1px;margin-left:22px;font-size:18px;color:#999}.com-bar-tag{font-size:0}.com-bar-tag.color-og{color:#fd7822;border-color:#fd7822}.com-bar-tag.color-rd{color:#e1504a;border-color:#e1504a}.com-bar-tag.fill{line-height:18px;color:#fff;background-color:rgba(0,0,0,.25);border:none}.com-bar-tag.fill.color-og{background-color:#fd7822}.com-bar-tag.fill.color-rd{background-color:#e1504a}.com-bar-tag i{display:inline-block;vertical-align:middle}.com-bar-tag span{font-size:12px;vertical-align:middle}.rno-grid-layout{overflow:hidden}.rno-grid-row{display:block;margin-right:0;margin-left:0;font-size:0;-webkit-box-sizing:border-box;box-sizing:border-box}.rno-grid-row-split-line .rno-grid-col{position:relative}.rno-grid-row-split-line .rno-grid-col::before{content:"";position:absolute;top:0;bottom:0;left:0;display:block;width:1px;background-color:#e8e8e8}.rno-grid-row-mlr0{margin-left:0 !important;margin-right:0 !important}.rno-grid-col{display:inline-block;vertical-align:top;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:14px}[class*=rno-grid-col-pull-],[class*=rno-grid-col-push-]{position:relative}.rno-grid-col-0{display:none}.rno-grid-col-offset-0{margin-left:0}.rno-grid-col-pull-0{right:auto}.rno-grid-col-push-0{left:auto}.rno-grid-col-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.rno-grid-col-1{display:inline-block;width:4.1666666667%}.rno-grid-col-offset-1{margin-left:4.1666666667%}.rno-grid-col-pull-1{right:4.1666666667%}.rno-grid-col-push-1{left:4.1666666667%}.rno-grid-col-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.rno-grid-col-2{display:inline-block;width:8.3333333333%}.rno-grid-col-offset-2{margin-left:8.3333333333%}.rno-grid-col-pull-2{right:8.3333333333%}.rno-grid-col-push-2{left:8.3333333333%}.rno-grid-col-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.rno-grid-col-3{display:inline-block;width:12.5%}.rno-grid-col-offset-3{margin-left:12.5%}.rno-grid-col-pull-3{right:12.5%}.rno-grid-col-push-3{left:12.5%}.rno-grid-col-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.rno-grid-col-4{display:inline-block;width:16.6666666667%}.rno-grid-col-offset-4{margin-left:16.6666666667%}.rno-grid-col-pull-4{right:16.6666666667%}.rno-grid-col-push-4{left:16.6666666667%}.rno-grid-col-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.rno-grid-col-5{display:inline-block;width:20%}.rno-grid-col-offset-5{margin-left:20%}.rno-grid-col-pull-5{right:20%}.rno-grid-col-push-5{left:20%}.rno-grid-col-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.rno-grid-col-6{display:inline-block;width:25%}.rno-grid-col-offset-6{margin-left:25%}.rno-grid-col-pull-6{right:25%}.rno-grid-col-push-6{left:25%}.rno-grid-col-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.rno-grid-col-7{display:inline-block;width:29.1666666667%}.rno-grid-col-offset-7{margin-left:29.1666666667%}.rno-grid-col-pull-7{right:29.1666666667%}.rno-grid-col-push-7{left:29.1666666667%}.rno-grid-col-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.rno-grid-col-8{display:inline-block;width:33.3333333333%}.rno-grid-col-offset-8{margin-left:33.3333333333%}.rno-grid-col-pull-8{right:33.3333333333%}.rno-grid-col-push-8{left:33.3333333333%}.rno-grid-col-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.rno-grid-col-9{display:inline-block;width:37.5%}.rno-grid-col-offset-9{margin-left:37.5%}.rno-grid-col-pull-9{right:37.5%}.rno-grid-col-push-9{left:37.5%}.rno-grid-col-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.rno-grid-col-10{display:inline-block;width:41.6666666667%}.rno-grid-col-offset-10{margin-left:41.6666666667%}.rno-grid-col-pull-10{right:41.6666666667%}.rno-grid-col-push-10{left:41.6666666667%}.rno-grid-col-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.rno-grid-col-11{display:inline-block;width:45.8333333333%}.rno-grid-col-offset-11{margin-left:45.8333333333%}.rno-grid-col-pull-11{right:45.8333333333%}.rno-grid-col-push-11{left:45.8333333333%}.rno-grid-col-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.rno-grid-col-12{display:inline-block;width:50%}.rno-grid-col-offset-12{margin-left:50%}.rno-grid-col-pull-12{right:50%}.rno-grid-col-push-12{left:50%}.rno-grid-col-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.rno-grid-col-13{display:inline-block;width:54.1666666667%}.rno-grid-col-offset-13{margin-left:54.1666666667%}.rno-grid-col-pull-13{right:54.1666666667%}.rno-grid-col-push-13{left:54.1666666667%}.rno-grid-col-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.rno-grid-col-14{display:inline-block;width:58.3333333333%}.rno-grid-col-offset-14{margin-left:58.3333333333%}.rno-grid-col-pull-14{right:58.3333333333%}.rno-grid-col-push-14{left:58.3333333333%}.rno-grid-col-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.rno-grid-col-15{display:inline-block;width:62.5%}.rno-grid-col-offset-15{margin-left:62.5%}.rno-grid-col-pull-15{right:62.5%}.rno-grid-col-push-15{left:62.5%}.rno-grid-col-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.rno-grid-col-16{display:inline-block;width:66.6666666667%}.rno-grid-col-offset-16{margin-left:66.6666666667%}.rno-grid-col-pull-16{right:66.6666666667%}.rno-grid-col-push-16{left:66.6666666667%}.rno-grid-col-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.rno-grid-col-17{display:inline-block;width:70.8333333333%}.rno-grid-col-offset-17{margin-left:70.8333333333%}.rno-grid-col-pull-17{right:70.8333333333%}.rno-grid-col-push-17{left:70.8333333333%}.rno-grid-col-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.rno-grid-col-18{display:inline-block;width:75%}.rno-grid-col-offset-18{margin-left:75%}.rno-grid-col-pull-18{right:75%}.rno-grid-col-push-18{left:75%}.rno-grid-col-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.rno-grid-col-19{display:inline-block;width:79.1666666667%}.rno-grid-col-offset-19{margin-left:79.1666666667%}.rno-grid-col-pull-19{right:79.1666666667%}.rno-grid-col-push-19{left:79.1666666667%}.rno-grid-col-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.rno-grid-col-20{display:inline-block;width:83.3333333333%}.rno-grid-col-offset-20{margin-left:83.3333333333%}.rno-grid-col-pull-20{right:83.3333333333%}.rno-grid-col-push-20{left:83.3333333333%}.rno-grid-col-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.rno-grid-col-21{display:inline-block;width:87.5%}.rno-grid-col-offset-21{margin-left:87.5%}.rno-grid-col-pull-21{right:87.5%}.rno-grid-col-push-21{left:87.5%}.rno-grid-col-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.rno-grid-col-22{display:inline-block;width:91.6666666667%}.rno-grid-col-offset-22{margin-left:91.6666666667%}.rno-grid-col-pull-22{right:91.6666666667%}.rno-grid-col-push-22{left:91.6666666667%}.rno-grid-col-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.rno-grid-col-23{display:inline-block;width:95.8333333333%}.rno-grid-col-offset-23{margin-left:95.8333333333%}.rno-grid-col-pull-23{right:95.8333333333%}.rno-grid-col-push-23{left:95.8333333333%}.rno-grid-col-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.rno-grid-col-24{display:inline-block;width:100%}.rno-grid-col-offset-24{margin-left:100%}.rno-grid-col-pull-24{right:100%}.rno-grid-col-push-24{left:100%}.rno-grid-col-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.col-user-panels{padding:20px 0;font-size:0;border-bottom:1px solid #E1E3E9}.col-user-panels>.panel-cell{display:inline-block;vertical-align:top;width:100%}.col-user-panels.col-4>.panel-cell{margin-right:20px;width:calc((100% - 1px - 20px * 3)/ 4)}.col-user-panels.col-4>.panel-cell:nth-child(4n){margin-right:0}.col-user-panel{position:relative;text-align:center;padding:20px 10px;transition:box-shadow .3s linear}.col-user-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.col-user-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.col-user-panel-avatar{display:block;margin:0 auto 12px;width:90px;height:90px}.col-user-panel-name{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;font-size:18px;line-height:26px;color:#000;font-weight:400}.col-user-panel-name.with-verify{padding-right:20px}.col-user-panel-name .com-verification{position:absolute;right:0;top:8px}.col-user-panel-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.col-user-panel-identity{margin-top:6px;font-size:14px;line-height:20px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-user-panel-btns{position:relative;z-index:2;margin-top:20px}.col-user-panel-btn{padding:0 10px;min-width:0;width:80px;height:28px;line-height:26px;font-size:12px}.col-column-panels{padding:20px 0;font-size:0;border-bottom:1px solid #E1E3E9}.col-column-panels>.panel-cell{display:inline-block;vertical-align:top;width:100%}.col-column-panels.col-4>.panel-cell{margin-right:20px;width:calc((100% - 1px - 20px * 3)/ 4)}.col-column-panels.col-4>.panel-cell:nth-child(4n){margin-right:0}.col-column-panel{position:relative;text-align:center;padding:20px 10px;transition:box-shadow .3s linear}.col-column-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.col-column-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.col-column-panel-avatar{display:block;margin:0 auto 12px;width:90px;height:90px}.col-column-panel-title{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;font-size:18px;line-height:26px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-column-panel-datas{margin-top:6px;font-size:0}.col-column-panel-data{display:inline-block;vertical-align:middle;font-size:14px;line-height:20px;color:#999}.col-column-panel-data:before{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;margin:0 10px;width:2px;height:2px;background-color:#999;border-radius:50%}.col-column-panel-data:first-child:before{display:none}.col-column-panel-btns{position:relative;z-index:2;margin-top:20px}.col-column-panel-btn{padding:0 10px;min-width:0;width:80px;height:28px;line-height:26px;font-size:12px}.col-side-mine{margin-bottom:40px}.col-side-mine-list{margin-bottom:20px;border:1px solid #EAEAEA;font-size:0}.col-side-mine-list>.item{position:relative;display:inline-block;vertical-align:middle;width:50%;height:110px}.col-side-mine-list>.item:before{content:'';position:absolute;left:0;top:50%;margin-top:-33px;width:1px;height:66px;background-color:#EAEAEA}.col-side-mine-list>.item:first-child:before{display:none}.col-side-mine-list a{display:block;box-sizing:border-box;padding-top:25px;height:100%;text-align:center;font-size:14px;line-height:20px;color:#333}.col-side-mine-list a:hover{background-color:#F3F5F9}.col-side-mine-list h4{margin-top:7px;font-weight:400}.col-side-mine-list .icon{display:inline-block;vertical-align:middle;width:44px;height:44px}.col-side-mine-list .icon.column{background-image:url(sprite/Column-20199161611.svg);;background-position:52.019999999999996% 0.5700000000000001%;background-size:550% 497.72727272727275%;;background-repeat:no-repeat}.col-side-mine-list .icon.followed-column{background-image:url(sprite/Column-20199161611.svg);;background-position:23.74% 16%;background-size:550% 497.72727272727275%;;background-repeat:no-repeat}.col-side-mine-list .icon.draft{background-image:url(sprite/Column-20199161611.svg);;background-position:0.51% 16%;background-size:550% 497.72727272727275%;;background-repeat:no-repeat}.col-side-mine .com-ico-btn{width:100%;min-width:0;height:36px;line-height:34px}.col-index-header .com-sticky-header-extra{width:352px}.col-index-header .header-btn{margin-left:0;min-width:80px;font-size:14px;height:36px;line-height:34px}.col-index-header .header-search-box{display:inline-block;vertical-align:middle;margin-right:10px;position:relative;text-align:left}.col-index-header .header-search-btn{background-color:#F3F5F9;display:block;font-size:14px;color:#999;position:relative;cursor:pointer;width:260px}.col-index-header .header-search-btn .search-input{border-color:transparent;box-shadow:none;background:0 0;font-size:12px;height:36px;padding-top:8px;padding-bottom:8px;cursor:pointer}.col-index-header .header-search-btn input::-webkit-input-placeholder{color:#999}.col-index-header .header-search-btn input:-ms-input-placeholder{color:#999}.col-index-header .header-search-btn input::placeholder{color:#999}.col-index-header .com-3-nav-search-wrap{margin-top:-3px}.col-index-header .com-tab-hd{border-bottom:none}.col-index-header .com-tab.dropdown .com-tab-item a{padding-bottom:0;height:36px;line-height:36px}.col-index-header .com-tab.dropdown .com-tab-item a:after{display:none}.col-index-header .com-tab-dropdown-trigger{line-height:36px}.col-multi-articles{margin-top:-20px}.col-multi-articles .last-article-panels>li:last-child .com-3-article-panel{border-bottom:none}.col-sticky-header>.com-inner{max-width:1116px}.col-sticky-header .com-sticky-header-main{padding-left:200px}.pg-article .article-event-panel{margin-top:20px}.col-editor-tagsinput .com-tab-panel{max-height:200px}.col-editor-tagsinput .com-tag-v2-list{margin-bottom:0}@media screen and (max-width:1200px){.col-body-main{padding-left:20px;padding-right:20px}.pg-column .col-body-main,.pg-tag-articles .col-body-main,.pg-tag-articles .com-inner{padding-left:10px;padding-right:10px}}@media screen and (max-width:800px){.pg-editor.preview .col-editor-toolbar .editor-switch{float:none}.pg-editor.preview .col-editor-toolbar .editor-msg{float:none;display:block;margin-top:5px}}@media screen and (max-width:1240px){.pg-editor-translate .col-editor-msg .msg-inner{top:116px;left:0;background-color:#fff;text-align:center}.pg-editor-translate .col-editor-body.fixed-toolbar .col-editor-msg{top:111px;text-align:center}}@media screen and (max-width:1000px){.pg-editor-translate .col-editor-body.fixed-toolbar .col-editor-msg,.pg-editor-translate .col-editor-body.fixed-toolbar .qa-r-editor-toolbar{left:500px}}@media screen and (max-width:1200px){.pg-articles .col-aside{display:none}.pg-articles .col-layout .col-main{width:100%;padding-right:10px}}@media screen\0{.qa-ico-strike,.qa-r-editor-btn.disabled .qa-ico-strike,.qa-r-editor-btn.disabled:hover .qa-ico-strike{background-size:auto auto;background-position:-18px 0px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-r-editor-btn.actived .qa-ico-strike,.qa-r-editor-btn:hover .qa-ico-strike{background-size:auto auto;background-position:-36px -18px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-ico-table,.qa-r-editor-btn.disabled .qa-ico-table,.qa-r-editor-btn.disabled:hover .qa-ico-table{background-size:auto auto;background-position:0px -18px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-r-editor-btn.actived .qa-ico-table,.qa-r-editor-btn:hover .qa-ico-table{background-size:auto auto;background-position:-18px -18px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-ico-ol,.qa-r-editor-btn.disabled .qa-ico-ol,.qa-r-editor-btn.disabled:hover .qa-ico-ol{background-size:auto auto;background-position:-36px 0px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-r-editor-btn.actived .qa-ico-ol,.qa-r-editor-btn:hover .qa-ico-ol{background-size:auto auto;background-position:0px 0px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-ico-ul,.qa-r-editor-btn.disabled .qa-ico-ul,.qa-r-editor-btn.disabled:hover .qa-ico-ul{background-size:auto auto;background-position:0px -36px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-r-editor-btn.actived .qa-ico-ul,.qa-r-editor-btn:hover .qa-ico-ul{background-size:auto auto;background-position:-18px -36px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-ico-pic,.qa-r-editor-btn.disabled .qa-ico-pic,.qa-r-editor-btn.disabled:hover .qa-ico-pic{background-size:auto auto;background-position:-36px -36px;background-image:url(sprite/Column-media6-20199161611.png)}.qa-r-editor-btn.actived .qa-ico-pic,.qa-r-editor-btn:hover .qa-ico-pic{background-size:auto auto;background-position:-54px 0px;background-image:url(sprite/Column-media6-20199161611.png)}.col-search button:after{background-size:auto auto;background-position:-54px -18px;background-image:url(sprite/Column-media6-20199161611.png)}}@media screen and (max-width:1200px){.com-salon-specialist-identity{display:none}}@media screen and (max-width:1440px){.com-2-article-panel{padding:30px 20px}.com-2-article-panel-author{margin-bottom:8px}.com-2-article-panel-title{display:block;display:-webkit-box;white-space:normal;height:54px}.com-2-article-panel .com-media-body{height:69px}.com-2-article-panel-cnt{position:relative}.com-2-article-panel-cnt .com-media-object{padding-left:20px;width:80px;height:63px}.com-2-article-panel-cnt .com-thumbnail{width:80px;height:60px}.com-2-article-panel-desc{line-height:21px;-webkit-line-clamp:3;max-height:63px}.com-2-article-panel-opts{position:absolute;left:0;bottom:-30px;width:100%}.com-2-article-panel.large{padding-left:250px}.com-2-article-panel.large.without-img{padding-left:20px}.com-2-article-panel.large .com-2-article-panel-title{white-space:normal}.com-2-article-panel.large .com-2-article-panel-cnt{position:static}.com-2-article-panel.large .com-2-article-panel-desc{line-height:24px}.com-2-article-panel.large .com-2-article-panel-cnt .com-media-object{left:20px;top:30px}.com-2-article-panel.large .com-thumbnail{width:200px;height:190px}.com-2-article-panel.large .com-2-article-panel-opts{position:static}.com-2-article-panels{margin-bottom:-20px}.com-2-article-panels>.panel-cell{margin-right:20px;margin-bottom:20px;width:calc((100% - 20px * 2)/ 3)}.com-2-article-panels>.panel-cell:first-child{width:calc(100% - 20px - (100% - 20px * 2)/ 3)}.com-2-article-panels>.panel-cell:nth-child(3n+2){margin-right:0;width:calc((100% - 20px * 2)/ 3 - 1px)}}@media screen and (max-width:1440px){.com-4-article-panels>.panel-cell,.com-4-article-panels>.panel-cell:first-child{width:calc((100% - 10px - 1px)/ 2)}.com-4-article-panels>.panel-cell:nth-child(2n){margin-right:0}.com-4-article-panels>.panel-cell:nth-child(n+5){display:none}.com-4-article-panel.large{padding-left:20px}.com-4-article-panel.large .com-4-article-panel-title{margin-bottom:10px}.com-4-article-panel.large .com-4-article-panel-cnt{display:table}.com-4-article-panel.large .com-4-article-panel-infos{margin-top:10px}.com-4-article-panel.large .com-4-article-panel-cnt .com-media-object{position:static;display:table-cell;width:83px;padding-top:5px}.com-4-article-panel.large .com-thumbnail{width:83px;height:63px}.com-4-article-panel-author .author-name,.com-4-article-panel.large .com-4-article-panel-author .author-name{max-width:8em}.panel-cell:nth-child(n+3) .com-4-article-panel-author .author-name{max-width:16em}}@media screen and (max-width:1440px){.com-salon-panel-hd{padding-left:20px;padding-right:20px}.com-salon-panel-bd{padding:20px}.com-salon-panel.large{padding:30px 20px 20px}.com-salon-panel.large .com-salon-panel-img{background-size:auto 70%}.com-salon-panel.large .com-salon-panel-title{max-width:250px}.com-salon-panel.large .com-salon-panel-infos{margin-top:9px}.com-salon-panel.large .com-salon-panel-btns{left:20px;bottom:20px}.com-salon-panel.large .panel-btn{position:relative;left:0;top:0;margin-right:0}.com-salon-panels{margin-bottom:-20px}.com-salon-panels>.panel-cell,.com-salon-panels>.panel-cell:nth-child(1),.com-salon-panels>.panel-cell:nth-child(2){margin-right:20px;margin-bottom:20px;width:calc((100% - 1px - 20px)/ 2)}.com-salon-panels>.panel-cell:nth-child(2n){margin-right:0}.com-salon-panels>.panel-cell:nth-child(n+5){display:none}}@media screen and (max-width:1440px){.com-user-panels>.panel-cell{width:202px}}@media screen and (max-width:1440px){.com-special-list-wrap{padding:0 20px}.com-special-thumbnail{right:20px;top:20px;width:366px;height:366px}.com-special-list{margin-right:386px}}@media screen and (max-width:1440px){.com-team-panel-bd{padding:0 20px}.com-team-panels>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;width:calc((100% - 1px - 20px)/ 2)}.com-team-panels>.panel-cell:nth-child(2){margin-right:0}.com-team-panels>.panel-cell:nth-child(n+3){display:none}}@media screen and (max-width:1440px){.com-2-ask-panel{padding-left:20px;padding-right:20px}.com-2-ask-panel-bd{min-height:143px}.com-2-ask-panel-author-name{margin-top:7px}.com-2-ask-panel-answer{padding-top:20px;padding-bottom:20px}.com-2-ask-panel-answer .com-media-body{height:100px}.com-2-ask-panel-answer-opts{margin-top:11px}.com-2-ask-panel-answer .com-media-object{padding-left:20px;width:150px}.com-2-ask-panel-answer .com-thumbnail{width:150px;height:100px}}@media screen and (max-width:1440px){.com-2-doc-panels-wrap>.wrap-cell:first-child{width:calc((100% - 20px * 2)/ 3 * 2 + 20px)}.com-2-doc-panels-wrap>.wrap-cell:last-child{width:calc((100% - 20px * 2)/ 3)}.com-2-doc-panels>.panel-cell{margin-right:0;width:100%}.com-2-doc-panels>.panel-cell:nth-child(n+4){display:none}.com-2-doc-panels.large>.panel-cell{margin-right:20px;width:calc((100% - 1px - 20px)/ 2)}}@media screen and (max-width:1440px){.com-2-doc-panels-wrap.v2>.wrap-cell:first-child{width:calc((100% - 10px * 2)/ 3 * 2 + 10px)}.com-2-doc-panels-wrap.v2>.wrap-cell:last-child{width:calc((100% - 10px * 2)/ 3)}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell,.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell:nth-child(2n){margin-right:0;width:100%}.com-2-doc-panels-wrap.v2 .com-2-doc-panels>.panel-cell:nth-child(n+4){display:none}.com-2-doc-panels-wrap.v2 .com-2-doc-panels.large>.panel-cell{margin-right:10px;width:calc((100% - 1px - 10px)/ 2)}}@media screen and (max-width:1440px){.com-hero-events>.event-cell:nth-child(n+5){display:none}}@media (max-width:1200px){.com-full-layout-main{padding:20px}}@media screen and (max-width:1920px){.com-2-hero-item-img{right:-60px}.com-2-hero-item-cnt{padding-left:30px;padding-right:30px}.com-2-hero-item-btns{left:30px}}@media screen and (max-width:1440px){.com-2-hero-item-cnt{padding-left:20px;padding-right:20px;height:195px}.com-2-hero-item-btns{left:20px}.com-2-hero-item-title{font-size:22px;line-height:32px;max-height:64px}.com-2-hero-item-desc{font-size:12px;line-height:20px;white-space:normal;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;height:40px}.com-2-hero-item .com-2-hero-item-desc,.com-2-hero-item .com-2-hero-item-title{max-width:260px}}@media screen and (max-width:1440px){.com-3-user-panels>.panel-cell{width:calc((100% - 20px * 3 - 1px)/ 4)}.com-3-user-panels>.panel-cell:nth-child(n+5){display:none}}@media screen and (max-width:1440px){.com-2-team-panels>.panel-cell{width:calc((100% - 1px - 20px)/ 2)}.com-2-team-panels>.panel-cell:nth-child(2n){margin-right:0}.com-2-team-panels>.panel-cell:last-child{display:none}}@media (max-width:768px){.com-course-img.course-img-s{padding-top:23.188%}.com-course-img.course-img-s .com-course-img-con{top:50%;-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);transform:translate(0,-50%)}}@media screen and (max-width:768px){.com-course-img .com-course-img-con{display:none}}@media screen and (max-width:600px){.com-star-rating .star-text-lt{vertical-align:2px}.com-star-rating .star-list,.com-star-rating .star-text-rt{vertical-align:1px}}@media screen and (max-width:1200px){.col-column-panel-data{font-size:12px}.col-column-panel-data:before{margin:0 5px}}@media screen and (max-width:1136px){.col-sticky-header>.com-inner{max-width:1000px}.col-sticky-header .com-sticky-header-main{padding-left:120px}.col-sticky-header .com-sticky-header-extra{text-align:left;width:100px}} +#MAXIM{content:"weu2019916161146"} \ No newline at end of file diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/MathJax.js.下载 b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/MathJax.js.下载 new file mode 100644 index 0000000..792f7e4 --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/MathJax.js.下载 @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2017 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.2";MathJax.fileversion="2.7.2";MathJax.cdnVersion="2.7.2";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/analytics.js.下载 b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/analytics.js.下载 new file mode 100644 index 0000000..7f246ca --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/analytics.js.下载 @@ -0,0 +1,42 @@ +(function(){var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c){var d=O.XMLHttpRequest;if(!d)return!1;var e=new d;if(!("withCredentials"in e))return!1; +e.open("POST",a,!0);e.withCredentials=!0;e.setRequestHeader("Content-Type","text/plain");e.onreadystatechange=function(){4==e.readyState&&(c(),e=null)};e.send(b);return!0},x=function(a,b,c){return O.navigator.sendBeacon?O.navigator.sendBeacon(a,b)?(c(),!0):!1:!1},ge=function(a,b,c){1<=100*Math.random()||Aa("?")||(a=["t=error","_e="+a,"_v=j39","sr=1"],b&&a.push("_f="+b),c&&a.push("_m="+K(c.substring(0,100))),a.push("aip=1"),a.push("z="+fe()),wc(oc()+"/collect",a.join("&"),ua))};var Ha=function(){this.M=[]};Ha.prototype.add=function(a){this.M.push(a)};Ha.prototype.D=function(a){try{for(var b=0;b=100*R(a,Ka))throw"abort";}function Ma(a){if(Aa(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} +function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(b){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var c=[];Qa.map(function(b,e){if(e.F){var g=a.get(b);void 0!=g&&g!=e.defaultValue&&("boolean"==typeof g&&(g*=1),c.push(e.F+"="+K(""+g)))}});c.push("z="+Bd());a.set(Ra,c.join("&"),!0)} +function Sa(a){var b=P(a,gd)||oc()+"/collect",c=P(a,fa);!c&&a.get(Vd)&&(c="beacon");if(c){var d=P(a,Ra),e=a.get(Ia),e=e||ua;"image"==c?wc(b,d,e):"xhr"==c&&wd(b,d,e)||"beacon"==c&&x(b,d,e)||ba(b,d,e)}else ba(b,P(a,Ra),a.get(Ia));a.set(Ia,ua,!0)}function Hc(a){var b=O.gaData;b&&(b.expId&&a.set(Nc,b.expId),b.expVar&&a.set(Oc,b.expVar))}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";}function yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set("&did",b.join(","),!0)} +function vb(a){if(!a.get(Na))throw"abort";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}},fe=hd;function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){var c=R(a,Wa),d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee},Qa=new ee,Za=[];Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){var c=a.get(b);return void 0==c?"":""+c},R=function(a,b){var c=a.get(b);return void 0==c||""===c?0:1*c};Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)}; +var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)},bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=Qa.get(a);if(!b)for(var c=0;c=b)){var c=(new Date).getHours(),d=[Bd(),Bd(),Bd()].join(".");a=(3==b||5==b?"https:":"http:")+"//www.google-analytics.com/collect?z=br.";a+=[b,"A",c,d].join(".");var e=1!=b%3?"https:":"http:",e=e+"//www.google-analytics.com/collect?z=br.",e=e+[b,"B",c,d].join(".");7==b&&(e=e.replace("//www.","//ssl."));c=function(){4<=b&&6>=b?O.navigator.sendBeacon(e,""):ta(e)};Bd()%2?(ta(a),c()):(c(),ta(a))}}};function fc(){var a,b,c;if((c=(c=O.navigator)?c.plugins:null)&&c.length)for(var d=0;d=c)&&(c={},Ec(c)||Fc(c))){var d=c[Eb];void 0==d||Infinity==d||isNaN(d)||(0c)a[b]=void 0},Fd=function(a){return function(b){"pageview"!=b.get(Va)||a.I||(a.I=!0,gc(b,function(b){a.send("timing",b)}))}};var hc=!1,mc=function(a){if("cookie"==P(a,ac)){var b=P(a,U),c=nd(a),d=kc(P(a,Yb)),e=lc(P(a,W)),g=1E3*R(a,Zb),ca=P(a,Na);if("auto"!=e)zc(b,c,d,e,ca,g)&&(hc=!0);else{J(32);var l;a:{c=[];e=xa().split(".");if(4==e.length&&(l=e[e.length-1],parseInt(l,10)==l)){l=["none"];break a}for(l=e.length-2;0<=l;l--)c.push(e.slice(l).join("."));c.push("none");l=c}for(var k=0;k=a&&d.push({hash:ca[0],R:e[g],O:ca})}return 0==d.length?void 0:1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){var c,d;null==a?c=d=1:(c=La(a),d=La(D(a,".")?a.substring(1):"."+a));for(var e=0;ed.length)){c=[];for(var e=0;e=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb, +(b&&(b.language||b.browserLanguage)||"").toLowerCase());if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;carguments.length)){var b,c;"string"===typeof arguments[0]?(b=arguments[0],c=[].slice.call(arguments,1)):(b=arguments[0]&&arguments[0][Va],c=arguments);b&&(c=za(qc[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={},je(this.b))}};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0};var td=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=td.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||"t0",this.K=b[2]||"",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A="create"==this.C,this.i="require"==this.C,this.g="provide"==this.C,this.ba="remove"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort"; +if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.c)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.c)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d;Yd=new ee;$d=new ee;Zd={ec:45,ecommerce:46,linkid:47}; +var ae=function(a){function b(a){var b=(a.hostname||"").split(":")[0].toLowerCase(),c=(a.protocol||"").toLowerCase(),c=1*a.port||("http:"==c?80:"https:"==c?443:"");a=a.pathname||"";D(a,"/")||(a="/"+a);return[b,""+c,a]}var c=M.createElement("a");c.href=M.location.href;var d=(c.protocol||"").toLowerCase(),e=b(c),g=c.search||"",ca=d+"//"+e[0]+(e[1]?":"+e[1]:"");D(a,"//")?a=d+a:D(a,"/")?a=ca+a:!a||D(a,"?")?a=ca+e[2]+(a||g):0>a.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+ +"/"+a);c.href=a;d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],G:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments),b=Z.f.concat(b);for(Z.f=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf("https://www.google-analytics.com/analytics")){J(33);b=!0;break a}}b= +!1}b&&(Ba=!0)}Ud()||Ba||!Ed(new Od)||(J(36),Ba=!0);(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;Yd.set("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);Yd.set("displayfeatures",fd);Yd.set("adfeatures",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b>21:b;return b};})(window); +/* |xGv00|ef935f82729173a4fe6ff3177be1e6cc */ \ No newline at end of file diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/api.js.下载 b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/api.js.下载 new file mode 100644 index 0000000..c95b7d3 --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/api.js.下载 @@ -0,0 +1,19 @@ +var QCLogin=function(t){function e(n){if(i[n])return i[n].exports;var o=i[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="//<%=CSS_DOMAIN%>/qcloud/main/scripts/",e(0)}({0:function(t,e,i){"use strict";t.exports=i("YIfu")},"+dHT":function(t,e,i){"use strict";var n=i("WPtr"),o=n.get("language")||"zh";"zh"!=o&&(o="en");var s="https://ssl.captcha.qq.com/TCaptcha.js",r=function(t){if(window.TencentCaptcha)return t();var e=document.createElement("script"),i=!1,n=function(e){var n=setInterval(function(){if(window.TencentCaptcha){if(clearInterval(n),i)return;i=!0,t(e)}},50)};e.addEventListener?e.addEventListener("load",function(){n()},!1):e.attachEvent&&e.attachEvent("onreadystatechange",function(){4!=e.readyState&&"complete"!=e.readyState&&"loaded"!=e.readyState||n()}),e.src=s,document.head.appendChild(e),setTimeout(function(){i||(i=!0,n({ret:9999}))},8e3)};t.exports={getAppid:function(){return location.host.indexOf("qcloud.com")>-1?"en"==o?"2067090065":"2042382584":location.host.indexOf("cloud.tencent.com")>-1?"en"==o?"2009899766":"2006043797":void 0},verify:function(t){var e=$.Deferred(),i=this.getAppid(),n={};"zh"!=o&&""!=o&&(n={needFeedBack:!1,forceLang:"en"});var s=function(t){if(t&&0==t.ret){var n={ticket:t.ticket,captchaAppId:i,randstr:t.randstr};e.resolve(n)}else e.reject(t)},a=function(){t?(n.type="embed",new TencentCaptcha(t,i,s,n).show()):new TencentCaptcha(i,s,n).show()};return window.TencentCaptcha?a(e):r(function(t){t?e.resolve(t):a(e)}),e.promise()}}},WPtr:function(t,e,i){var n,o;"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};!function(s){n=s,o="function"==typeof n?n.call(e,i,e,t):n,!(void 0!==o&&(t.exports=o))}(function(){function t(){for(var t=0,e={};t1){if(s=t({path:"/"},n.defaults,s),"number"==typeof s.expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*s.expires),s.expires=a}try{r=JSON.stringify(o),/^[\{\[]/.test(r)&&(o=r)}catch(t){}return o=i.write?i.write(o,e):encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),e=e.replace(/[\(\)]/g,escape),document.cookie=[e,"=",o,s.expires&&"; expires="+s.expires.toUTCString(),s.path&&"; path="+s.path,s.domain&&"; domain="+s.domain,s.secure?"; secure":""].join("")}e||(r={});for(var c=document.cookie?document.cookie.split("; "):[],h=/(%[0-9A-Z]{2})+/g,l=0;linternational<%}%> <% if(isThirdParty) {%>outside<%}%>">\n\t<% if (!hide_close_icon) { %>\n\t\n\t<% } %>\n\t
\n\t\t\n\n\t\t\n\n\t\t\n\n\t\t
\n\t\t\t<% if (!isIntl) { %>\n\t\t\t
<%=__("\u5176\u4ed6\u767b\u5f55\u65b9\u5f0f")%>
\n\t\t\t\n\t\t\t<%}%>\n\t\t\t
style="text-align: center"<%}%>>\n\t\t\t\t<% if (!hide_register) { %>\n\t\t\t\t\n\t\t\t\t<%}%>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<% if (!isThirdParty && !hideQQ && !hideMP) {%>\n\t\t\t\t\n\t\t\t\t<%}%>\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
<%=__("\u5df2\u767b\u5f55\u8d26\u53f7")%>
\n\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\n\t
\n\n\n\n\n'},sdDX:function(t,e,i){"use strict";var n=i("WPtr"),o=i("HbSM"),s=i("rCGI"),r=i("h97R"),a=i("4G7m"),c=i("M34W"),h=i("5zD2"),l=new h(navigator.userAgent).getResult(),u=new o;u.setPublicKey(a.encryptPublicKey);var d=n.get("language"),p={loadCss:function(){var t=this,e=$.Deferred();return t.cssLoaded?e.resolve():r(a.login_css,function(){t.cssLoaded=!0,e.resolve()}),e},showInputErrorTip:function(t,e,i){t=$(t),this.hideInputErrorTip(),this.hidePromptTip(t),i=i||{},$(".J-loginTip").html(this.__(e)).show(),t.addClass("error").focus(),this.notifyResize()},hideInputErrorTip:function(t){t?$(t).removeClass("error").parent().find(".J-errorTip").hide():$(".J-errorTip").hide().parent().find("input").removeClass("error"),this.notifyResize()},showPromptTip:function(t,e,i){t=$(t),this.hidePromptTip();var n=t.closest(".clg-form-input");if(!n.find(".J-errorTip:visible").length){var o=n.find(".J-promptTip");i=i||{},o.length||(o=n.append('
\t
\t
').find(".J-promptTip")),o.show().find(".clg-bubble-inner").html(this.__(e)),this.notifyResize()}},hidePromptTip:function(t){t?$(t).parent().find(".J-promptTip").hide():$(".J-promptTip").hide(),this.notifyResize()},checkLoginForm:function(){var t=$(".J-commonLoginContent"),e=t.find(".J-username"),i=$.trim(e.val()),n=t.find(".J-password"),o=$.trim(n.val()),s=t.find(".J-vcodeArea"),r=t.find(".J-vcodeInput"),c=$.trim(r.val()),h={},l=this;if(""==i)return l.showInputErrorTip(e,"\u8bf7\u8f93\u5165\u90ae\u7bb1"),!1;if(i.indexOf("@")==-1)return l.showInputErrorTip(e,"\u90ae\u7bb1\u683c\u5f0f\u6709\u8bef\uff0c\u8bf7\u4fee\u6539"),!1;if(h.username=i,""==o)return l.showInputErrorTip(n,"\u8bf7\u8f93\u5165\u5bc6\u7801"),!1;if(h.password=a.encrypt?u.encrypt(o):o,s.is(":visible")){if(""==c)return l.showInputErrorTip(r,"\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801"),!1;h.vcode=c}return h},query:function(t){return t=String(t).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),location.search.slice(1).match(RegExp("(?:^|&)"+t+"(?:=([^&#]*)?|[&#]|$)"))?String(RegExp.$1||"").replace(/\+/g," "):void 0},__:function(t,e){var e=e||d;return e&&"en"==e&&s&&s[t]?s[t]:t},getTranslator:function(t){var e=this;return function(i){return e.__(i,t)}},capslock:function(t){if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))return!1;var e=t.keyCode||t.which,i=t.shiftKey||16==e||!1;return e>=65&&e<=90&&!i||e>=97&&e<=122&&i},tmpl:function(){var t={},e=function(t){return 0==t?t:(t=(t||"").toString(),t.replace(/&(?!\w+;)/g,"&").replace(//g,">").replace(/\"/g,"""))},i=function(t,e){if(e)for(var i in e){var n=new RegExp("<%#\\s?"+i+"%>","g");t=t.replace(n,e[i])}return t};return function n(o,s,r){var a=!/\W/.test(o);!a&&(o=i(o,r));var c=a?t[o]=t[o]||n(i(document.getElementById(o).innerHTML,r)):new Function("obj","_escape","var _p='';with(obj){_p+='"+o.replace(/[\r\t\n]/g," ").split("\\'").join("\\\\'").split("'").join("\\'").split("<%").join("\t").replace(/\t-(.*?)%>/g,"'+$1+'").replace(/\t=(.*?)%>/g,"'+_escape($1)+'").split("\t").join("';").split("%>").join("_p+='")+"';} return _p;"),h=function(t){return c(t,e)};return s?h(s):h}}(),loadProxyFrame:function(t){var e=this;if(e.loadProxyFrameDfd)return e.loadProxyFrameDfd;e.loadProxyFrameDfd=$.Deferred();var i=document.createElement("iframe");return i.style.display="none",i.src=t,i.onload=function(){e.loadProxyFrameDfd.resolve(i),i.onload=null},document.body.appendChild(i),e.loadProxyFrameDfd},proxyPost:function(t,e){var i=this,n="callback"+Math.floor(1e7*Math.random());window[n]=function(t){e(t);try{delete window[n]}catch(t){window[n]=null}};var o=function e(o){try{o.contentWindow.postSend(t.url,t.data,n)}catch(s){"TypeError"!==s.name||o.contentWindow?o.contentWindow.postMessage(JSON.stringify({url:t.url,data:t.data,requestType:n}),"*"):(i.loadProxyFrameDfd=null,i.loadProxyFrame(a.qcloud_post_proxy).done(e))}};i.loadProxyFrame(a.qcloud_post_proxy).done(o)},isMobile:function(){var t=(navigator.userAgent||"").toLowerCase(),e=["android","iphone","windows phone","ipad"];if(a.isThirdParty)return!1;for(var i=0;i-1},getWechatLoginUrl:function(){return this.isMobile()?a.mWechatLoginUrl:a.wechatLoginUrl},saveLoginTypeInLocal:function(t){var e=180;n.set("lastLoginType",t,{domain:c.getCookieDomain(),path:"/",expires:e})},getLastLoginType:function(){return n.get("lastLoginType")||""},notifyResize:function(){top.postMessage(JSON.stringify({action:"resize",width:$(".J-loginMainContent").width()+80,height:$(".J-loginMainContent").height()+100}),"*")},isSupportWxLoginInMobile:function(){var t=l&&l.browser&&l.browser.name?l.browser.name:"",e=l&&l.os&&l.os.name?l.os.name:"";t=t.toLowerCase(),e=e.toLowerCase();var i=this.isMobile()&&("ucbrowser"==t||"qqbrowser"==t||"mobile safari"==t&&"ios"==e);return this.isInWeapp()||this.isWechat()||i},isInMQQ:function(){var t=navigator.userAgent,e=this.isMobile()&&/qqbrowser/i.test(t)&&/\bQQ\/[\d\.]+/i.test(t);return e},isInWeapp:function(){return this.isMobile()&&"miniprogram"===window.__wxjs_environment},isPad:function(){var t=window.screen.width||0;return this.isMobile()&&t>=601},isInConsole:function(){var t=location.hostname;return"console.cloud.tencent.com"==t||"console.qcloud.com"==t},requireSeajsModule:function(t){if(window.seajs){var e=window.seajs.Module.get(window.seajs.Module.resolve(t));return e.exports||e.exec()}},htmlEncode:function(t){var e="";return null==t||"undefined"==typeof t||0==t.length?"":(e=t.replace(/&/g,"&"),e=e.replace(//g,">"),e=e.replace(/ /g," "),e=e.replace(/\'/g,"'"),e=e.replace(/\"/g,"""),e=e.replace(/\n/g,"
"))},detectWxDomain:function(){if(!this.wxDomainDetected&&window.$){this.wxDomainDetected=!0;var t=!1,e="https://long.open.weixin.qq.com/connect/l/qrconnect?uuid=0213Kqcw8dy8ul5L&_t="+(new Date).getTime();$.getScript(e,function(){t=!0}),setTimeout(function(){t||$.getScript("https://"+c.getRealHostname()+"/services/ajax/empty_return/wxDomainNotResponse5?t="+(new Date).getTime())},5e3),setTimeout(function(){t||$.getScript("https://"+c.getRealHostname()+"/services/ajax/empty_return/wxDomainNotResponse10?t="+(new Date).getTime())},1e4)}}};t.exports=p},HbSM:function(t,e){"use strict";function i(t,e,i){null!=t&&("number"==typeof t?this.fromNumber(t,e,i):null==e&&"string"!=typeof t?this.fromString(t,256):this.fromString(t,e))}function n(){return new i(null)}function o(t,e,i,n,o,s){for(;--s>=0;){var r=e*this[t++]+i[n]+o;o=Math.floor(r/67108864),i[n++]=67108863&r}return o}function s(t,e,i,n,o,s){for(var r=32767&e,a=e>>15;--s>=0;){var c=32767&this[t],h=this[t++]>>15,l=a*c+h*r;c=r*c+((32767&l)<<15)+i[n]+(1073741823&o),o=(c>>>30)+(l>>>15)+a*h+(o>>>30),i[n++]=1073741823&c}return o}function r(t,e,i,n,o,s){for(var r=16383&e,a=e>>14;--s>=0;){var c=16383&this[t],h=this[t++]>>14,l=a*c+h*r;c=r*c+((16383&l)<<14)+i[n]+o,o=(c>>28)+(l>>14)+a*h,i[n++]=268435455&c}return o}function a(t){return Ce.charAt(t)}function c(t,e){var i=De[t.charCodeAt(e)];return null==i?-1:i}function h(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s}function l(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0}function u(t){var e=n();return e.fromInt(t),e}function d(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var o=t.length,s=!1,r=0;--o>=0;){var a=8==n?255&t[o]:c(t,o);a<0?"-"==t.charAt(o)&&(s=!0):(s=!1,0==r?this[this.t++]=a:r+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-r):this[this.t-1]|=a<=this.DB&&(r-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,r>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t}function f(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var i,n=(1<0)for(c>c)>0&&(o=!0,s=a(i));r>=0;)c>(c+=this.DB-e)):(i=this[r]>>(c-=e)&n,c<=0&&(c+=this.DB,--r)),i>0&&(o=!0),o&&(s+=a(i));return o?s:"0"}function g(){var t=n();return i.ZERO.subTo(this,t),t}function m(){return this.s<0?this.negate():this}function w(t){var e=this.s-t.s;if(0!=e)return e;var i=this.t;if(e=i-t.t,0!=e)return this.s<0?-e:e;for(;--i>=0;)if(0!=(e=this[i]-t[i]))return e;return 0}function b(t){var e,i=1;return 0!=(e=t>>>16)&&(t=e,i+=16),0!=(e=t>>8)&&(t=e,i+=8),0!=(e=t>>4)&&(t=e,i+=4),0!=(e=t>>2)&&(t=e,i+=2),0!=(e=t>>1)&&(t=e,i+=1),i}function y(){return this.t<=0?0:this.DB*(this.t-1)+b(this[this.t-1]^this.s&this.DM)}function x(t,e){var i;for(i=this.t-1;i>=0;--i)e[i+t]=this[i];for(i=t-1;i>=0;--i)e[i]=0;e.t=this.t+t,e.s=this.s}function T(t,e){for(var i=t;i=0;--i)e[i+r+1]=this[i]>>o|a,a=(this[i]&s)<=0;--i)e[i]=0;e[r]=a,e.t=this.t+r+1,e.s=this.s,e.clamp()}function _(t,e){e.s=this.s;var i=Math.floor(t/this.DB);if(i>=this.t)return void(e.t=0);var n=t%this.DB,o=this.DB-n,s=(1<>n;for(var r=i+1;r>n;n>0&&(e[this.t-i-1]|=(this.s&s)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;i>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[i++]=this.DV+n:n>0&&(e[i++]=n),e.t=i,e.clamp()}function R(t,e){var n=this.abs(),o=t.abs(),s=n.t;for(e.t=s+o.t;--s>=0;)e[s]=0;for(s=0;s=0;)t[i]=0;for(i=0;i=e.DV&&(t[i+e.t]-=e.DV,t[i+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(i,e[i],t,2*i,0,1)),t.s=0,t.clamp()}function L(t,e,o){var s=t.abs();if(!(s.t<=0)){var r=this.abs();if(r.t0?(s.lShiftTo(l,a),r.lShiftTo(l,o)):(s.copyTo(a),r.copyTo(o));var u=a.t,d=a[u-1];if(0!=d){var p=d*(1<1?a[u-2]>>this.F2:0),f=this.FV/p,g=(1<=0&&(o[o.t++]=1,o.subTo(y,o)),i.ONE.dlShiftTo(u,y),y.subTo(a,a);a.t=0;){var x=o[--v]==d?this.DM:Math.floor(o[v]*f+(o[v-1]+m)*g);if((o[v]+=a.am(0,x,o,w,0,u))0&&o.rShiftTo(l,o),c<0&&i.ZERO.subTo(o,o)}}}function C(t){var e=n();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(i.ZERO)>0&&t.subTo(e,e),e}function D(t){this.m=t}function J(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function I(t){return t}function A(t){t.divRemTo(this.m,null,t)}function U(t,e,i){t.multiplyTo(e,i),this.reduce(i)}function B(t,e){t.squareTo(e),this.reduce(e)}function O(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%this.DV)%this.DV,e>0?this.DV-e:-e}function M(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}function P(t){var e=n();return t.copyTo(e),this.reduce(e),e}function $(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(i=e+this.m.t,t[i]+=this.m.am(0,n,t,e,0,this.m.t);t[i]>=t.DV;)t[i]-=t.DV,t[++i]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function N(t,e){t.squareTo(e),this.reduce(e)}function K(t,e,i){t.multiplyTo(e,i),this.reduce(i)}function V(){return 0==(this.t>0?1&this[0]:this.s)}function j(t,e){if(t>4294967295||t<1)return i.ONE;var o=n(),s=n(),r=e.convert(this),a=b(t)-1;for(r.copyTo(o);--a>=0;)if(e.sqrTo(o,s),(t&1<0)e.mulTo(s,r,o);else{var c=o;o=s,s=c}return e.revert(o)}function Q(t,e){var i;return i=t<256||e.isEven()?new D(e):new M(e),this.exp(t,i)}function W(){var t=n();return this.copyTo(t),t}function F(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24}function z(){return 0==this.t?this.s:this[0]<<16>>16}function G(t){return Math.floor(Math.LN2*this.DB/Math.log(t))}function X(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function Y(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return"0";var e=this.chunkSize(t),i=Math.pow(t,e),o=u(i),s=n(),r=n(),a="";for(this.divRemTo(o,s,r);s.signum()>0;)a=(i+r.intValue()).toString(t).substr(1)+a,s.divRemTo(o,s,r);return r.intValue().toString(t)+a}function Z(t,e){this.fromInt(0),null==e&&(e=10);for(var n=this.chunkSize(e),o=Math.pow(e,n),s=!1,r=0,a=0,h=0;h=n&&(this.dMultiply(o),this.dAddOffset(a,0),r=0,a=0))}r>0&&(this.dMultiply(Math.pow(e,r)),this.dAddOffset(a,0)),s&&i.ZERO.subTo(this,this)}function tt(t,e,n){if("number"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t,n),this.testBit(t-1)||this.bitwiseTo(i.ONE.shiftLeft(t-1),ct,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(i.ONE.shiftLeft(t-1),this);else{var o=new Array,s=7&t; +o.length=(t>>3)+1,e.nextBytes(o),s>0?o[0]&=(1<0)for(n>n)!=(this.s&this.DM)>>n&&(e[o++]=i|this.s<=0;)n<8?(i=(this[t]&(1<>(n+=this.DB-8)):(i=this[t]>>(n-=8)&255,n<=0&&(n+=this.DB,--t)),0!=(128&i)&&(i|=-256),0==o&&(128&this.s)!=(128&i)&&++o,(o>0||i!=this.s)&&(e[o++]=i);return e}function it(t){return 0==this.compareTo(t)}function nt(t){return this.compareTo(t)<0?this:t}function ot(t){return this.compareTo(t)>0?this:t}function st(t,e,i){var n,o,s=Math.min(t.t,this.t);for(n=0;n>=16,e+=16),0==(255&t)&&(t>>=8,e+=8),0==(15&t)&&(t>>=4,e+=4),0==(3&t)&&(t>>=2,e+=2),0==(1&t)&&++e,e}function wt(){for(var t=0;t=this.t?0!=this.s:0!=(this[e]&1<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;i>=this.DB;n+=t.s}e.s=n<0?-1:0,n>0?e[i++]=n:n<-1&&(e[i++]=this.DV+n),e.t=i,e.clamp()}function kt(t){var e=n();return this.addTo(t,e),e}function Lt(t){var e=n();return this.subTo(t,e),e}function Ct(t){var e=n();return this.multiplyTo(t,e),e}function Dt(){var t=n();return this.squareTo(t),t}function Jt(t){var e=n();return this.divRemTo(t,e,null),e}function It(t){var e=n();return this.divRemTo(t,null,e),e}function At(t){var e=n(),i=n();return this.divRemTo(t,e,i),new Array(e,i)}function Ut(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()}function Bt(t,e){if(0!=t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}}function Ot(){}function Mt(t){return t}function qt(t,e,i){t.multiplyTo(e,i)}function Pt(t,e){t.squareTo(e)}function $t(t){return this.exp(t,new Ot)}function Nt(t,e,i){var n=Math.min(this.t+t.t,e);for(i.s=0,i.t=n;n>0;)i[--n]=0;var o;for(o=i.t-this.t;n=0;)i[n]=0;for(n=Math.max(e-this.t,0);n2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=n();return t.copyTo(e),this.reduce(e),e}function Qt(t){return t}function Wt(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)}function Ft(t,e){t.squareTo(e),this.reduce(e)}function Ht(t,e,i){t.multiplyTo(e,i),this.reduce(i)}function zt(t,e){var i,o,s=t.bitLength(),r=u(1);if(s<=0)return r;i=s<18?1:s<48?3:s<144?4:s<768?5:6,o=s<8?new D(e):e.isEven()?new Vt(e):new M(e);var a=new Array,c=3,h=i-1,l=(1<1){var d=n();for(o.sqrTo(a[1],d);c<=l;)a[c]=n(),o.mulTo(d,a[c-2],a[c]),c+=2}var p,f,g=t.t-1,m=!0,v=n();for(s=b(t[g])-1;g>=0;){for(s>=h?p=t[g]>>s-h&l:(p=(t[g]&(1<0&&(p|=t[g-1]>>this.DB+s-h)),c=i;0==(1&p);)p>>=1,--c;if((s-=c)<0&&(s+=this.DB,--g),m)a[p].copyTo(r),m=!1;else{for(;c>1;)o.sqrTo(r,v),o.sqrTo(v,r),c-=2;c>0?o.sqrTo(r,v):(f=r,r=v,v=f),o.mulTo(v,a[p],r)}for(;g>=0&&0==(t[g]&1<0&&(e.rShiftTo(s,e),i.rShiftTo(s,i));e.signum()>0;)(o=e.getLowestSetBit())>0&&e.rShiftTo(o,e),(o=i.getLowestSetBit())>0&&i.rShiftTo(o,i),e.compareTo(i)>=0?(e.subTo(i,e),e.rShiftTo(1,e)):(i.subTo(e,i),i.rShiftTo(1,i));return s>0&&i.lShiftTo(s,i),i}function Xt(t){if(t<=0)return 0;var e=this.DV%t,i=this.s<0?t-1:0;if(this.t>0)if(0==e)i=this[0]%t;else for(var n=this.t-1;n>=0;--n)i=(e*i+this[n])%t;return i}function Yt(t){var e=t.isEven();if(this.isEven()&&e||0==t.signum())return i.ZERO;for(var n=t.clone(),o=this.clone(),s=u(1),r=u(0),a=u(0),c=u(1);0!=n.signum();){for(;n.isEven();)n.rShiftTo(1,n),e?(s.isEven()&&r.isEven()||(s.addTo(this,s),r.subTo(t,r)),s.rShiftTo(1,s)):r.isEven()||r.subTo(t,r),r.rShiftTo(1,r);for(;o.isEven();)o.rShiftTo(1,o),e?(a.isEven()&&c.isEven()||(a.addTo(this,a),c.subTo(t,c)),a.rShiftTo(1,a)):c.isEven()||c.subTo(t,c),c.rShiftTo(1,c);n.compareTo(o)>=0?(n.subTo(o,n),e&&s.subTo(a,s),r.subTo(c,r)):(o.subTo(n,o),e&&a.subTo(s,a),c.subTo(r,c))}return 0!=o.compareTo(i.ONE)?i.ZERO:c.compareTo(t)>=0?c.subtract(t):c.signum()<0?(c.addTo(t,c),c.signum()<0?c.add(t):c):c}function Zt(t){var e,i=this.abs();if(1==i.t&&i[0]<=Je[Je.length-1]){for(e=0;e>1,t>Je.length&&(t=Je.length);for(var r=n(),a=0;a=0&&e>0;){var s=t.charCodeAt(o--);s<128?n[--e]=s:s>127&&s<2048?(n[--e]=63&s|128,n[--e]=s>>6|192):(n[--e]=63&s|128,n[--e]=s>>6&63|128,n[--e]=s>>12|224)}n[--e]=0;for(var r=new ae,a=new Array;e>2;){for(a[0]=0;0==a[0];)r.nextBytes(a);n[--e]=a[0]}return n[--e]=2,n[--e]=0,new i(n)}function le(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function ue(t,e){null!=t&&null!=e&&t.length>0&&e.length>0?(this.n=ce(t,16),this.e=parseInt(e,16)):console.error("Invalid RSA public key")}function de(t){return t.modPowInt(this.e,this.n)}function pe(t){var e=he(t,this.n.bitLength()+7>>3);if(null==e)return null;var i=this.doPublic(e);if(null==i)return null;var n=i.toString(16);return 0==(1&n.length)?n:"0"+n}function fe(t,e){for(var i=t.toByteArray(),n=0;n=i.length)return null;for(var o="";++n191&&s<224?(o+=String.fromCharCode((31&s)<<6|63&i[n+1]),++n):(o+=String.fromCharCode((15&s)<<12|(63&i[n+1])<<6|63&i[n+2]),n+=2)}return o}function ge(t,e,i){null!=t&&null!=e&&t.length>0&&e.length>0?(this.n=ce(t,16),this.e=parseInt(e,16),this.d=ce(i,16)):console.error("Invalid RSA private key")}function me(t,e,i,n,o,s,r,a){null!=t&&null!=e&&t.length>0&&e.length>0?(this.n=ce(t,16),this.e=parseInt(e,16),this.d=ce(i,16),this.p=ce(n,16),this.q=ce(o,16),this.dmp1=ce(s,16),this.dmq1=ce(r,16),this.coeff=ce(a,16)):console.error("Invalid RSA private key")}function ve(t,e){var n=new ae,o=t>>1;this.e=parseInt(e,16);for(var s=new i(e,16);;){for(;this.p=new i(t-o,1,n),0!=this.p.subtract(i.ONE).gcd(s).compareTo(i.ONE)||!this.p.isProbablePrime(10););for(;this.q=new i(o,1,n),0!=this.q.subtract(i.ONE).gcd(s).compareTo(i.ONE)||!this.q.isProbablePrime(10););if(this.p.compareTo(this.q)<=0){var r=this.p;this.p=this.q,this.q=r}var a=this.p.subtract(i.ONE),c=this.q.subtract(i.ONE),h=a.multiply(c);if(0==h.gcd(s).compareTo(i.ONE)){this.n=this.p.multiply(this.q),this.d=s.modInverse(h),this.dmp1=this.d.mod(a),this.dmq1=this.d.mod(c),this.coeff=this.q.modInverse(this.p);break}}}function we(t){if(null==this.p||null==this.q)return t.modPow(this.d,this.n);for(var e=t.mod(this.p).modPow(this.dmp1,this.p),i=t.mod(this.q).modPow(this.dmq1,this.q);e.compareTo(i)<0;)e=e.add(this.p);return e.subtract(i).multiply(this.coeff).mod(this.p).multiply(this.q).add(i)}function be(t){var e=ce(t,16),i=this.doPrivate(e);return null==i?null:fe(i,this.n.bitLength()+7>>3)}function ye(t){var e,i,n="";for(e=0;e+3<=t.length;e+=3)i=parseInt(t.substring(e,e+3),16),n+=$e.charAt(i>>6)+$e.charAt(63&i);for(e+1==t.length?(i=parseInt(t.substring(e,e+1),16),n+=$e.charAt(i<<2)):e+2==t.length&&(i=parseInt(t.substring(e,e+2),16),n+=$e.charAt(i>>2)+$e.charAt((3&i)<<4));(3&n.length)>0;)n+=Ne;return n}function xe(t){var e,i,n="",o=0;for(e=0;e>2),i=3&v,o=1):1==o?(n+=a(i<<2|v>>4),i=15&v,o=2):2==o?(n+=a(i),n+=a(v>>2),i=3&v,o=3):(n+=a(i<<2|v>>4),n+=a(15&v),o=0));return 1==o&&(n+=a(i<<2)),n}var Te,Se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_e=0xdeadbeefcafe,Ee=15715070==(16777215&_e);Ee&&"Microsoft Internet Explorer"==navigator.appName?(i.prototype.am=s,Te=30):Ee&&"Netscape"!=navigator.appName?(i.prototype.am=o,Te=26):(i.prototype.am=r,Te=28),i.prototype.DB=Te,i.prototype.DM=(1<=256||Be>=Oe)return void(window.removeEventListener?window.removeEventListener("mousemove",t,!1):window.detachEvent&&window.detachEvent("onmousemove",t));try{var i=e.x+e.y;Ue[Be++]=255&i,this.count+=1}catch(t){}};window.addEventListener?window.addEventListener("mousemove",Pe,!1):window.attachEvent&&window.attachEvent("onmousemove",Pe)}ae.prototype.nextBytes=re,le.prototype.doPublic=de,le.prototype.setPublic=ue,le.prototype.encrypt=pe,le.prototype.doPrivate=we,le.prototype.setPrivate=ge,le.prototype.setPrivateEx=me,le.prototype.generate=ve,le.prototype.decrypt=be,function(){var t=function(t,e,o){var s=new ae,r=t>>1;this.e=parseInt(e,16);var a=new i(e,16),c=this,h=function e(){var h=function(){if(c.p.compareTo(c.q)<=0){var t=c.p;c.p=c.q,c.q=t}var n=c.p.subtract(i.ONE),s=c.q.subtract(i.ONE),r=n.multiply(s);0==r.gcd(a).compareTo(i.ONE)?(c.n=c.p.multiply(c.q),c.d=a.modInverse(r),c.dmp1=c.d.mod(n),c.dmq1=c.d.mod(s),c.coeff=c.q.modInverse(c.p),setTimeout(function(){o()},0)):setTimeout(e,0)},l=function t(){c.q=n(),c.q.fromNumberAsync(r,1,s,function(){c.q.subtract(i.ONE).gcda(a,function(e){0==e.compareTo(i.ONE)&&c.q.isProbablePrime(10)?setTimeout(h,0):setTimeout(t,0)})})},u=function e(){c.p=n(),c.p.fromNumberAsync(t-r,1,s,function(){c.p.subtract(i.ONE).gcda(a,function(t){0==t.compareTo(i.ONE)&&c.p.isProbablePrime(10)?setTimeout(l,0):setTimeout(e,0)})})};setTimeout(u,0)};setTimeout(h,0)};le.prototype.generateAsync=t;var e=function(t,e){var i=this.s<0?this.negate():this.clone(),n=t.s<0?t.negate():t.clone();if(i.compareTo(n)<0){var o=i;i=n,n=o}var s=i.getLowestSetBit(),r=n.getLowestSetBit();if(r<0)return void e(i);s0&&(i.rShiftTo(r,i),n.rShiftTo(r,n));var a=function t(){(s=i.getLowestSetBit())>0&&i.rShiftTo(s,i),(s=n.getLowestSetBit())>0&&n.rShiftTo(s,n),i.compareTo(n)>=0?(i.subTo(n,i),i.rShiftTo(1,i)):(n.subTo(i,n),n.rShiftTo(1,n)),i.signum()>0?setTimeout(t,0):(r>0&&n.lShiftTo(r,n),setTimeout(function(){e(n)},0))};setTimeout(a,10)};i.prototype.gcda=e;var o=function(t,e,n,o){if("number"==typeof e)if(t<2)this.fromInt(1);else{this.fromNumber(t,n),this.testBit(t-1)||this.bitwiseTo(i.ONE.shiftLeft(t-1),ct,this),this.isEven()&&this.dAddOffset(1,0);var s=this,r=function n(){s.dAddOffset(2,0),s.bitLength()>t&&s.subTo(i.ONE.shiftLeft(t-1),s),s.isProbablePrime(e)?setTimeout(function(){o()},0):setTimeout(n,0)};setTimeout(r,0)}else{var a=new Array,c=7&t;a.length=(t>>3)+1,e.nextBytes(a),c>0?a[0]&=(1<MIT License + */ +"undefined"!=typeof KJUR&&window.KJUR||(window.KJUR={}),"undefined"!=typeof KJUR.asn1&&KJUR.asn1||(KJUR.asn1={}),KJUR.asn1.ASN1Util=new function(){this.integerToByteHex=function(t){var e=t.toString(16);return e.length%2==1&&(e="0"+e),e},this.bigIntToMinTwosComplementsHex=function(t){var e=t.toString(16);if("-"!=e.substr(0,1))e.length%2==1?e="0"+e:e.match(/^[0-7]/)||(e="00"+e);else{var n=e.substr(1),o=n.length;o%2==1?o+=1:e.match(/^[0-7]/)||(o+=2);for(var s="",r=0;r15)throw"ASN.1 length too long to represent by 8x: n = "+e.toString(16);var o=128+n;return o.toString(16)+i},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}},KJUR.asn1.DERAbstractString=function(t){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=stohex(this.s)},this.setStringHex=function(t){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=t},this.getFreshValueHex=function(){return this.hV},"undefined"!=typeof t&&("undefined"!=typeof t.str?this.setString(t.str):"undefined"!=typeof t.hex&&this.setStringHex(t.hex))},Ke.extend(KJUR.asn1.DERAbstractString,KJUR.asn1.ASN1Object),KJUR.asn1.DERAbstractTime=function(t){KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);this.localDateToUTC=function(t){utc=t.getTime()+6e4*t.getTimezoneOffset();var e=new Date(utc);return e},this.formatDate=function(t,e){var i=this.zeroPadding,n=this.localDateToUTC(t),o=String(n.getFullYear());"utc"==e&&(o=o.substr(2,2));var s=i(String(n.getMonth()+1),2),r=i(String(n.getDate()),2),a=i(String(n.getHours()),2),c=i(String(n.getMinutes()),2),h=i(String(n.getSeconds()),2);return o+s+r+a+c+h+"Z"},this.zeroPadding=function(t,e){return t.length>=e?t:new Array(e-t.length+1).join("0")+t},this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=stohex(this.s)},this.setByDateValue=function(t,e,i,n,o,s){var r=new Date(Date.UTC(t,e-1,i,n,o,s,0));this.setByDate(r)},this.getFreshValueHex=function(){return this.hV}},Ke.extend(KJUR.asn1.DERAbstractTime,KJUR.asn1.ASN1Object),KJUR.asn1.DERAbstractStructured=function(t){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);this.setByASN1ObjectArray=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array=t},this.appendASN1Object=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array.push(t)},this.asn1Array=new Array,"undefined"!=typeof t&&"undefined"!=typeof t.array&&(this.asn1Array=t.array)},Ke.extend(KJUR.asn1.DERAbstractStructured,KJUR.asn1.ASN1Object),KJUR.asn1.DERBoolean=function(){KJUR.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"},Ke.extend(KJUR.asn1.DERBoolean,KJUR.asn1.ASN1Object),KJUR.asn1.DERInteger=function(t){KJUR.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(t){this.hTLV=null,this.isModified=!0,this.hV=KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)},this.setByInteger=function(t){var e=new i(String(t),10);this.setByBigInteger(e)},this.setValueHex=function(t){this.hV=t},this.getFreshValueHex=function(){return this.hV},"undefined"!=typeof t&&("undefined"!=typeof t.bigint?this.setByBigInteger(t.bigint):"undefined"!=typeof t.int?this.setByInteger(t.int):"undefined"!=typeof t.hex&&this.setValueHex(t.hex))},Ke.extend(KJUR.asn1.DERInteger,KJUR.asn1.ASN1Object),KJUR.asn1.DERBitString=function(t){KJUR.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(t){this.hTLV=null,this.isModified=!0,this.hV=t},this.setUnusedBitsAndHexValue=function(t,e){if(t<0||7=2?(r[r.length]=a,a=0,c=0):a<<=4}}if(c)throw"Hex encoding incomplete: 4 bits missing";return r},window.Hex=i}(),function(t){var e,i={};i.decode=function(i){var n;if(e===t){var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s="= \f\n\r\t\xa0\u2028\u2029";for(e=[],n=0;n<64;++n)e[o.charAt(n)]=n;for(n=0;n=4?(r[r.length]=a>>16,r[r.length]=a>>8&255,r[r.length]=255&a,a=0,c=0):a<<=6}}switch(c){case 1:throw"Base64 encoding incomplete: at least 2 bits missing";case 2:r[r.length]=a>>10;break;case 3:r[r.length]=a>>16,r[r.length]=a>>8&255}return r},i.re=/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,i.unarmor=function(t){var e=i.re.exec(t);if(e)if(e[1])t=e[1];else{if(!e[2])throw"RegExp out of sync";t=e[2]}return i.decode(t)},window.Base64=i}(),function(t){function e(t,i){t instanceof e?(this.enc=t.enc,this.pos=t.pos):(this.enc=t,this.pos=i)}function i(t,e,i,n,o){this.stream=t,this.header=e,this.length=i,this.tag=n,this.sub=o}var n=100,o="\u2026",s={tag:function(t,e){var i=document.createElement(t);return i.className=e,i},text:function(t){return document.createTextNode(t)}};e.prototype.get=function(e){if(e===t&&(e=this.pos++),e>=this.enc.length)throw"Requesting byte offset "+e+" on a stream of length "+this.enc.length;return this.enc[e]},e.prototype.hexDigits="0123456789ABCDEF",e.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},e.prototype.hexDump=function(t,e,i){for(var n="",o=t;o191&&o<224?String.fromCharCode((31&o)<<6|63&this.get(n++)):String.fromCharCode((15&o)<<12|(63&this.get(n++))<<6|63&this.get(n++))}return i},e.prototype.parseStringBMP=function(t,e){for(var i="",n=t;n4){i<<=3;var n=this.get(t);if(0===n)i-=8;else for(;n<128;)n<<=1,--i;return"("+i+" bit)"}for(var o=0,s=t;st;--r){for(var a=this.get(r),c=s;c<8;++c)o+=a>>c&1?"1":"0";s=0}}return o},e.prototype.parseOctetString=function(t,e){var i=e-t,s="("+i+" byte) ";i>n&&(e=t+n);for(var r=t;rn&&(s+=o),s},e.prototype.parseOID=function(t,e){for(var i="",n=0,o=0,s=t;s=31?"bigint":n);n=o=0}}return i},i.prototype.typeName=function(){if(this.tag===t)return"unknown";var e=this.tag>>6,i=(this.tag>>5&1,31&this.tag);switch(e){case 0:switch(i){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+i.toString(16)}case 1:return"Application_"+i.toString(16);case 2:return"["+i+"]";case 3:return"Private_"+i.toString(16)}},i.prototype.reSeemsASCII=/^[ -~]+$/,i.prototype.content=function(){if(this.tag===t)return null;var e=this.tag>>6,i=31&this.tag,s=this.posContent(),r=Math.abs(this.length);if(0!==e){if(null!==this.sub)return"("+this.sub.length+" elem)";var a=this.stream.parseStringISO(s,s+Math.min(r,n));return this.reSeemsASCII.test(a)?a.substring(0,2*n)+(a.length>2*n?o:""):this.stream.parseOctetString(s,s+r)}switch(i){case 1:return 0===this.stream.get(s)?"false":"true";case 2:return this.stream.parseInteger(s,s+r);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(s,s+r);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(s,s+r);case 6:return this.stream.parseOID(s,s+r);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(s,s+r);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(s,s+r);case 30:return this.stream.parseStringBMP(s,s+r);case 23:case 24:return this.stream.parseTime(s,s+r)}return null},i.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null===this.sub?"null":this.sub.length)+"]"},i.prototype.print=function(e){if(e===t&&(e=""),document.writeln(e+this),null!==this.sub){e+=" ";for(var i=0,n=this.sub.length;i=0&&(i+="+"),i+=this.length,32&this.tag?i+=" (constructed)":3!=this.tag&&4!=this.tag||null===this.sub||(i+=" (encapsulates)"),i+="\n",null!==this.sub){e+=" ";for(var n=0,o=this.sub.length;n",i+="Length: "+this.header+"+",i+=this.length>=0?this.length:-this.length+" (undefined)",32&this.tag?i+="
(constructed)":3!=this.tag&&4!=this.tag||null===this.sub||(i+="
(encapsulates)"),null!==n&&(i+="
Value:
"+n+"","object"===("undefined"==typeof oids?"undefined":Se(oids))&&6==this.tag)){var a=oids[n];a&&(a.d&&(i+="
"+a.d),a.c&&(i+="
"+a.c),a.w&&(i+="
(warning!)"))}r.innerHTML=i,t.appendChild(r);var c=s.tag("div","sub");if(null!==this.sub)for(var h=0,l=this.sub.length;h=o)){var r=s.tag("span",e);r.appendChild(s.text(i.hexDump(n,o))),t.appendChild(r)}},i.prototype.toHexDOM=function(e){var i=s.tag("span","hex");if(e===t&&(e=i),this.head.hexNode=i,this.head.onmouseover=function(){this.hexNode.className="hexCurrent"},this.head.onmouseout=function(){this.hexNode.className="hex"},i.asn1=this,i.onmouseover=function(){var t=!e.selected;t&&(e.selected=this.asn1,this.className="hexCurrent"),this.asn1.fakeHover(t)},i.onmouseout=function(){var t=e.selected==this.asn1;this.asn1.fakeOut(t),t&&(e.selected=null,this.className="hex")},this.toHexDOM_sub(i,"tag",this.stream,this.posStart(),this.posStart()+1),this.toHexDOM_sub(i,this.length>=0?"dlen":"ulen",this.stream,this.posStart()+1,this.posContent()),null===this.sub)i.appendChild(s.text(this.stream.hexDump(this.posContent(),this.posEnd())));else if(this.sub.length>0){var n=this.sub[0],o=this.sub[this.sub.length-1];this.toHexDOM_sub(i,"intro",this.stream,this.posContent(),n.posStart());for(var r=0,a=this.sub.length;r3)throw"Length over 24 bits not supported at position "+(t.pos-1);if(0===i)return-1;e=0;for(var n=0;n4)return!1;var s=new e(o);3==t&&s.get();var r=s.get();if(r>>6&1)return!1;try{var a=i.decodeLength(s);return s.pos-o.pos+a==n}catch(t){return!1}},i.decode=function(t){t instanceof e||(t=new e(t,0));var n=new e(t),o=t.get(),s=i.decodeLength(t),r=t.pos-n.pos,a=null;if(i.hasContent(o,s,t)){var c=t.pos;if(3==o&&t.get(),a=[],s>=0){for(var h=c+s;t.pos\u8054\u7cfb\u6211\u4eec'):void(t.captchaAppId&&o.sendLoginRequest(t))})},loginReturnHandle:function(t){var e=this;switch(t=t||{},0!=t.code&&e.$loginbox.find(".J-loginBtn").show().next("a").hide(),+t.code){case 0:e._redirect(e.opts.login_forward_url+"?s_url="+encodeURIComponent(e.opts.s_url)+"&fwd_flag="+encodeURIComponent(this.opts.fwd_flag));break;case 70002:a.showInputErrorTip(e.$loginbox.find(".J-username"),"\u53c2\u6570\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165");break;case 70006:case 70008:a.showInputErrorTip(e.$loginbox.find(".J-password"),"\u8d26\u53f7\u4e0d\u5b58\u5728\u6216\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165");break;case 70007:e.$loginbox.find(".J-password").val(""),a.showInputErrorTip(e.$loginbox.find(".J-password"),"\u8d26\u53f7\u4e0d\u5b58\u5728\u6216\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165");break;case 70010:a.showInputErrorTip(null,f('\u8d26\u53f7\u5bc6\u7801\u9519\u8bef\u6b21\u6570\u8d85\u8fc7\u5f53\u65e5\u6700\u5927\u6b21\u6570\uff0c\u5efa\u8bae\u60a8\u901a\u8fc7 \u5fd8\u8bb0\u5bc6\u7801 \u6216 \u5fd8\u8bb0\u8d26\u53f7 \u627e\u56de\u8d26\u53f7\u5bc6\u7801\uff0c\u6b21\u65e5\u518d\u5c1d\u8bd5\u767b\u5f55'));break;case 310001:e.showCaptcha();break;case 310002:a.showInputErrorTip(null,"\u9a8c\u8bc1\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165");break;case 70024:e.opts.isIntl?a.showInputErrorTip(null,'Your account is for Tencent Cloud China\uff0cLog in now'):a.showInputErrorTip(null,f("\u8be5\u8d26\u53f7\u5c5e\u4e8e\u56fd\u9645\u7ad9\u8d26\u53f7\uff0c")+''+f("\u524d\u5f80\u767b\u5f55")+"");break;case 30301:a.isInWeapp()?a.showInputErrorTip(e.$loginbox.find(".J-password"),"\u8d26\u53f7\u4e0d\u5b58\u5728\u6216\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165"):a.showInputErrorTip(null,f('\u8be5\u8d26\u53f7\u53ef\u80fd\u662f\u901a\u8fc7QQ\u5feb\u6377\u6ce8\u518c\uff0c\u8bf7\u5207\u6362\u81f3QQ\u767b\u5f55'));break;case 20003:e.showMailActivationTip();break;case 30007:a.showInputErrorTip(null,f('\u8d26\u53f7\u5bc6\u7801\u8f93\u5165\u5f53\u65e5\u4ec5\u52691\u6b21\u673a\u4f1a\uff0c\u662f\u5426 \u5fd8\u8bb0\u5bc6\u7801 \u6216 \u5fd8\u8bb0\u8d26\u53f7'));break;default:a.showInputErrorTip(e.$loginbox.find(".J-username"),"\u767b\u5f55\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5")}},showMailActivationTip:function(){var t=this,e={"qq.com":"qq.com","163.com":"163.com","sina.com":"sina.com","gmail.com":"google.com","126.com":"126.com","hotmail.com":"live.com","21cn.com":"21cn.com","yahoo.com":"yahoo.com","yahoo.com.cn":"yahoo.com.cn","live.com":"live.com","sohu.com":"sohu.com","sina.com.cn":"sina.com.cn","tencent.com":"tencent.com","msn.com":"msn.com","tom.com":"tom.com"},i=t.$loginbox.find(".J-username"),n=$.trim(i.val()),o=n.split("@")[1];e[o]?(a.showInputErrorTip(i,'\u6b64\u90ae\u7bb1\u5730\u5740\u5c1a\u672a\u6fc0\u6d3b\uff0c\u8bf7\u67e5\u770b\u6fc0\u6d3b\u90ae\u4ef6\uff0c\u5b8c\u6210\u6fc0\u6d3b\u540e\u91cd\u65b0\u767b\u5f55\u3002'),$(".J-loginTip a").attr("href","http://mail."+e[o])):a.showInputErrorTip(i,"\u6b64\u90ae\u7bb1\u5730\u5740\u5c1a\u672a\u6fc0\u6d3b\uff0c\u8bf7\u67e5\u770b\u6fc0\u6d3b\u90ae\u4ef6\uff0c\u5b8c\u6210\u6fc0\u6d3b\u540e\u91cd\u65b0\u767b\u5f55\u3002")},switchLoginType:function(t,e){var i=this;switch(t){default:case"email":$("#loginAbout").hide(),i._currentLoginType=t,i._enterEmailMod(),a.saveLoginTypeInLocal("email");break;case"qq":a.saveLoginTypeInLocal("qq"),i.redirectToQQConnect();break;case"wx":$("#loginAbout").show(),i.opts.enableIframeWechatLogin?(i._currentLoginType=t,i._leaveEmailMod(),i.$loginbox.find("#wxFrame").attr("src")||(i.$loginbox.find("#wxFrame").hide().attr("src",i._getWXQrcodeUrl()),setTimeout(function(){i.$loginbox.find("#wxFrame").show()},400)),a.saveLoginTypeInLocal(t)):i._redirect(i._getWXLoginUrl());break;case"wework":i._leaveEmailMod(),i.$loginbox.find("#weworkFrame").hide().attr("src",i._getWeworkLoginUrl()),setTimeout(function(){i.$loginbox.find("#weworkFrame").show()},400);break;case"wework-m":a.saveLoginTypeInLocal("wework"),i.redirectToWeworkSubaccount();break;case"wxmp":window.wxmpBreak?window.wxmpBreak(function(){i._redirect(i._getWXMPLoginUrl())}):i._redirect(i._getWXMPLoginUrl())}a.notifyResize()},isDialogScene:function(){return this.opts&&!this.opts.container},isIframeScene:function(){try{return window.top!=window.self}catch(t){return!0}},hideLoginBox:function(){this.$loginbox&&this.$loginbox.empty().hide(),this.$loginmask&&this.$loginmask.hide(),this.isDialogScene()&&$('[data-name="loginApiCss"]').attr("disabled",!0).prop("disabled",!0)},logout:function(){this._clearLoginState()},_getLoginBox:function(){var t=$("#"+this._loginboxId);return t.length||(t=$("
").css({position:"fixed",left:0,top:0,width:"460px",height:"534px","background-color":"transparent","z-index":9001,"border-radius":"4px"}).attr("id",this._loginboxId).appendTo("body")),this.$loginbox=t},_getLoginMask:function(){var t=$("#"+this._loginmaskId);return t.length||(t=$("
").css({position:"fixed",left:0,top:0,right:0,bottom:0,background:"#000",opacity:".75","z-index":9e3}).attr("id",this._loginmaskId).appendTo("body")),this.$loginmask=t},_getPtloginUrl:function(t){var e=this.opts.qqLoginUrl,i={};return i.s_url=this.opts.s_url,"undefined"!=typeof this.opts.fwd_flag&&(i.fwd_flag=this.opts.fwd_flag),e+$.param(i)},_getWXLoginUrl:function(t){var e=this.opts.wechatLoginUrl+"s_url="+encodeURIComponent(this.opts.s_url);return t&&(e+="&theme=simple"),e+="&t="+(new Date).getTime(),"undefined"!=typeof this.opts.fwd_flag&&(e+="&fwd_flag="+encodeURIComponent(this.opts.fwd_flag)),e},_getWXQrcodeUrl:function(){var t=s.wechatLoginUrl;return this.opts.skipRegisterCompletion||(t+="action=associate&"),t+="s_url="+encodeURIComponent(this.opts.s_url),t+="&theme=simple&t="+(new Date).getTime(),"undefined"!=typeof this.opts.fwd_flag&&(t+="&fwd_flag="+encodeURIComponent(this.opts.fwd_flag)),t},_getWXMPLoginUrl:function(){var t=this.opts.mpLoginUrl+"s_url="+encodeURIComponent(this.opts.s_url);return"undefined"!=this.opts.fwd_flag&&(t+="&fwd_flag="+encodeURIComponent(this.opts.fwd_flag)),t},_getWeworkLoginUrl:function(){var t=s.weworkLoginUrl+"?s_url="+encodeURIComponent(this.opts.s_url);"undefined"!=this.opts.fwd_flag&&(t+="&fwd_flag="+encodeURIComponent(this.opts.fwd_flag));var e=s.weworkQrcodeUrl+"?s_url="+encodeURIComponent(t);return e},_getForwardDirectiveFlag:function(t){var e=1,i=2,n=4,o=0;return t.shallowLogin||t.skipRegisterCompletion||(o+=e),t.shallowLogin||t.skipLoginProtect||(o+=i),t.shallowLogin||t.skipOwnerSelection||(o+=n),o},_getLanguage:function(t){return(t||{}).language||n.get("language")||""},_getVCodeUrl:function(){return this.opts.vcode_url+"?t="+(new Date).getTime()},_setVCodeImgUrl:function(){this.$loginbox.find(".J-vcodeImg").attr("src",this._getVCodeUrl()),a.notifyResize()},_clearLoginState:function(){var t={domain:h.getCookieDomain(),path:"/"};n.remove("uin",t),n.remove("skey",t),n.remove("p_skey",t),n.remove("nick",t),n.remove("tinyid",t),this.updateCsrfCode()},_messageCallback:function(t){var e=this,i={},n=t.origin||t.originalEvent.origin;if(n&&(n=n.replace(/(:\d+)/g,"")),/\.(tencent\.com|qcloud\.com|qq\.com|dnspod\.cn|dnspod\.com)$/i.test(n)){try{i=JSON.parse(t.data||"")}catch(t){}switch(i.action){case"redirect":i&&i.url&&!/^http/i.test(i.url)&&(i.url=""),e._redirect(i.url||top.location.href);break;case"loginReturnHandle":e.loginReturnHandle(i.resp);break;case"loginCompletion":e._loginCompletionCallback()}}},_redirect:function(t){this.stopCheckLogin=!0,window.LOGIN_API_COMPLETE=!0;try{var e=top.location.href;t.indexOf("#")!=-1&&e.split("#")[0]==t.split("#")[0]?top.location.reload():top.location.href=t}catch(e){top.postMessage(JSON.stringify({action:"redirect",url:t}),"*")}},_loginCompletionCallback:function(){this.hideLoginBox(),this.opts.completionCallback&&this.opts.completionCallback()},_getLoginPage:function(){var t="https://"+l+"/login";t+="?s_url="+encodeURIComponent(this.opts.s_url),this.opts.skipRegisterCompletion&&(t+="&rc=0"),this.opts.skipLoginProtect&&(t+="&vf=0"),this.opts.skipOwnerSelection&&(t+="&sc=0"),"undefined"!=typeof this.opts.fwd_flag&&(t+="&fwd_flag="+this.opts.fwd_flag),this._clearLoginState(),location.href=t},_enterEmailMod:function(){var t=this;t.$loginbox.find(".J-loginContentBox").hide(),t.opts.isIntl?(t.$loginbox.find(".J-backToMainMod").hide(),t.$loginbox.find(".J-switchLoginTypeArea").show()):(t.$loginbox.find(".J-backToMainMod").show(),t.$loginbox.find(".J-switchLoginTypeArea").hide(),t.$loginbox.find(".J-footerLinkArea").hide());var e=t.$loginbox.find(".J-qcloginBox"),i=e.find(".J-username"),n=e.find(".J-password");e.show(),$.trim(i.val())?n.focus():i.focus()},_leaveEmailMod:function(){var t=this;t.$loginbox.find(".J-loginContentBox").hide(),t.$loginbox.find(".J-switchLoginTypeArea").show(),t.$loginbox.find(".J-mainloginBox").show(),t.$loginbox.find(".J-backToMainMod").hide(),t.$loginbox.find(".J-footerLinkArea").show()}};window.addEventListener&&window.addEventListener("message",function(t){g._messageCallback(t)},!1),t.exports=g.init()},h97R:function(t,e){"use strict";function i(t,e,i){var o=h.test(t),l=r.createElement(o?"link":"script");if(i){var u=isFunction(i)?i(t):i;u&&(l.charset=u)}n(l,e,o,t),o?(l.rel="stylesheet",l.href=t,l.setAttribute("data-role","global"),l.setAttribute("data-name","loginApiCss")):(l.async=!0,l.src=t),s=l,c?a.insertBefore(l,c):a.appendChild(l),s=null}function n(t,e,i,n){function s(){t.onload=t.onerror=t.onreadystatechange=null,t=null,e()}var r="onload"in t;return!i||!l&&r?void(r?(t.onload=s,t.onerror=function(){s()}):t.onreadystatechange=function(){/loaded|complete/.test(t.readyState)&&s()}):void setTimeout(function(){o(t,e)},1)}function o(t,e){var i,n=t.sheet;if(l)n&&(i=!0);else if(n)try{n.cssRules&&(i=!0)}catch(t){"NS_ERROR_DOM_SECURITY_ERR"===t.name&&(i=!0)}setTimeout(function(){i?e():o(t,e)},20)}var s,r=document,a=r.head||r.getElementsByTagName("head")[0]||r.documentElement,c=a.getElementsByTagName("base")[0],h=/\.css(?:\?|$)/i,l=+navigator.userAgent.replace(/.*(?:AppleWebKit|AndroidWebKit)\/(\d+).*/,"$1")<536;t.exports=i},"5zD2":function(t,e,i){var n;(function(t){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};/*! + * UAParser.js v0.7.19 + * Lightweight JavaScript-based User-Agent string parser + * https://github.com/faisalman/ua-parser-js + * + * Copyright © 2012-2016 Faisal Salman + * Dual licensed under GPLv2 or MIT + */ +!function(s,r){var a="0.7.19",c="",h="?",l="function",u="undefined",d="object",p="string",f="major",g="model",m="name",v="type",w="vendor",b="version",y="architecture",x="console",T="mobile",S="tablet",_="smarttv",E="wearable",R="embedded",k={extend:function(t,e){var i={};for(var n in t)e[n]&&e[n].length%2===0?i[n]=e[n].concat(t[n]):i[n]=t[n];return i},has:function(t,e){return"string"==typeof t&&e.toLowerCase().indexOf(t.toLowerCase())!==-1},lowerize:function(t){return t.toLowerCase()},major:function(t){return("undefined"==typeof t?"undefined":o(t))===p?t.replace(/[^\d\.]/g,"").split(".")[0]:r},trim:function(t){return t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}},L={rgx:function(t,e){for(var i,n,s,a,c,h,u=0;u0?2==a.length?o(a[1])==l?this[a[0]]=a[1].call(this,h):this[a[0]]=a[1]:3==a.length?o(a[1])!==l||a[1].exec&&a[1].test?this[a[0]]=h?h.replace(a[1],a[2]):r:this[a[0]]=h?a[1].call(this,h,a[2]):r:4==a.length&&(this[a[0]]=h?a[3].call(this,h.replace(a[1],a[2])):r):this[a]=h?h:r;u+=2}},str:function(t,e){for(var i in e)if(o(e[i])===d&&e[i].length>0){for(var n=0;n2)return void this.hideSuggest();var i=this.suggestSuffix.slice();if(1==e.length)return void this.hideSuggest();if(!this.canSuggest(e[1])||""==e[0])return void this.hideSuggest();if(t=e[0]+"@",""!=e[1])for(var n=i.length-1;n>=0;n--)0==!i[n].indexOf(e[1])&&i.splice(n,1);for(var o=[],n=0;n'+this.htmlEncode(t)+i[n]+"");this.suggestList.html(o.join("")),this.showSuggest()},showSuggest:function(){this.suggestList.show()},hideSuggest:function(){this.suggestList.hide()},switchSuggestList:function(t){if(this.suggestList.is(":visible")){var e=this.suggestList.find("li.tip-hover").index()||0,i=this.suggestList.find("li").length;"down"==t?e==i-1?e=0:e++:"up"==t&&(0==e?e=i-1:e--),this.suggestList.find("li").eq(e).addClass("tip-hover").siblings().removeClass("tip-hover"),this.inputElem.val(this.suggestList.find("li").eq(e).text())}},suggestEnterHandle:function(){var t=this.suggestList.find("li.tip-hover");t.length&&this.inputElem.val(t.text()),this.hideSuggest()},suggestClickHandle:function(t){var e=$(t.target);this.inputElem.val(e.text()),this.hideSuggest()},htmlEncode:function(t){var e="";return null==t||"undefined"==typeof t||0==t.length?"":(e=t.replace(/&/g,"&"),e=e.replace(//g,">"),e=e.replace(/ /g," "),e=e.replace(/\'/g,"'"),e=e.replace(/\"/g,"""),e=e.replace(/\n/g,"
"))},bindEvent:function(){var t=this;this.inputElem.off("keyup.loginInput focus.loginInput keydown.loginInput blur.loginInput").on("keyup.loginInput focus.loginInput",function(e){var i=e.which||e.keyCode;switch(i){case 38:return!1;case 40:return}var n=t.getInputVal();t.htmlEncode(n)!=n?t.hideSuggest():n.length>0&&n.length<30&&n.split("@").length<=2?t.updateSuggestList():t.hideSuggest()}).on("keydown.loginInput",function(e){var i=e.which||e.keyCode;switch(i){case 27:return void t.hideSuggest();case 38:return t.switchSuggestList("up"),!1;case 40:return void t.switchSuggestList("down");case 13:return void t.suggestEnterHandle()}}).on("blur.loginInput",function(){t.hideSuggest()}),this.suggestList.off().on("mousedown","li",function(e){t.suggestClickHandle(e)})}},t.exports=i},N7Fw:function(t,e,i){var n,o;!function(s,r){"use strict";n=r,o="function"==typeof n?n.call(e,i,e,t):n,!(void 0!==o&&(t.exports=o))}(void 0,function(){var t=14603328e5,e=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],i=62,n=function(t,e){return(t+e).slice(-t.length)},o=function(t){this._opt=t||{}};return o.prototype={_toBase:function(t,i){var n=this._opt,o=n.symbols||e,s="";if(i>o.length||i<=1)return!1;for(;t>=1;)s=o[t-i*Math.floor(t/i)]+s,t=Math.floor(t/i);return i<11?parseInt(s):s},_salts:function(){for(var t=this,e=t._opt,o=e.salts||2,s="",r=0;r0?Math.floor(((new Date).getTime()-s)/o):0,a=e._salts();return 0===r?a:e._toBase(r,i)+a}},{inst:function(t){return new o(t)},gen:function(t){return new o(t).gen()},uuid:function(){return new o({salts:4}).gen()}}})},wohU:function(t,e,i){"use strict";var n=i("sdDX"),o=(i("M34W"),i("3but").getCDNDomain()),s={config:function(t){this.options=t||{}},inited:!1,init:function(){return this.inited?this:(this.inited=!0,this.$guideWrapper=$(".J-deviceNotSupportGuide"),this.$guideWrapper.length?(this.$title=this.$guideWrapper.find(".J-title"),this.$detail=this.$guideWrapper.find(".J-detail"),this.$copyUrlContent=this.$guideWrapper.find(".J-copyUrlContent"),this.$copyUrlBtn=this.$guideWrapper.find(".J-copyUrlBtn"),this.$qqBtn=this.$guideWrapper.find(".J-qqBtn"),this.$wxBtn=this.$guideWrapper.find(".J-wxBtn"),this.$emailBtn=this.$guideWrapper.find(".J-emailBtn"),this.$copyTip=this.$guideWrapper.find(".J-copyTip"),this.bindEvents(),this.bindCopyEvent(),this.$copyUrlContent.html(n.htmlEncode(location.href)),this):void 0)},bindEvents:function(){var t=this;this.$qqBtn.off("click").on("click",function(){t.hide(),t.options.switchToQQ()}),this.$wxBtn.off("click").on("click",function(){t.hide(),t.options.switchToWX()}),this.$emailBtn.off("click").on("click",function(){t.hide(),t.options.switchToEmail()})},isIpad:function(){var t=navigator.userAgent||"";return/ipad/i.test(t)},isSupportWxOauth:function(){return null==window.G_isSupportWxOauth||window.G_isSupportWxOauth},isSupportQQOauth:function(){return null==window.G_isSupportQQOauth||window.G_isSupportQQOauth},showWxNotSupportGuide:function(){return this.init(),this.$guideWrapper.length?(this.$wxBtn.hide(),this.$copyTip.hide(),this.isSupportQQOauth()?this.$qqBtn.show():this.$qqBtn.hide(),this.$title.html("\u5fae\u4fe1\u5feb\u901f\u767b\u5f55\u5931\u8d25"),this.isIpad()?this.$detail.html("\u5f53\u524d\u5e94\u7528\u4e0d\u652f\u6301\u5fae\u4fe1\u5feb\u901f\u767b\u5f55\uff0c\u8bf7\u4f7f\u7528Safari\u3001UC\u6216\u5728\u5fae\u4fe1\u5185\u6253\u5f00\u9875\u9762\u6216\u4f7f\u7528\u5176\u4ed6\u65b9\u5f0f\u8fdb\u884c\u767b\u5f55\u3002"):this.$detail.html("\u5f53\u524d\u5e94\u7528\u4e0d\u652f\u6301\u5fae\u4fe1\u5feb\u901f\u767b\u5f55\uff0c\u8bf7\u4f7f\u7528Safari\u3001UC\u3001QQ\u6d4f\u89c8\u5668\u6216\u5728\u5fae\u4fe1\u5185\u6253\u5f00\u9875\u9762\u6216\u4f7f\u7528\u5176\u4ed6\u65b9\u5f0f\u8fdb\u884c\u767b\u5f55\u3002"),void this.$guideWrapper.show()):this.options.switchToWX()},showQQNotSupportGuide:function(){return this.init(),this.$guideWrapper.length?(this.$qqBtn.hide(),this.$copyTip.hide(),this.isSupportWxOauth()?this.$wxBtn.show():this.$wxBtn.hide(),this.$title.html("QQ\u5feb\u901f\u767b\u5f55\u5931\u8d25"),this.$detail.html("\u5f53\u524d\u5e94\u7528\u4e0d\u652f\u6301QQ\u5feb\u901f\u767b\u5f55\uff0c\u8bf7\u4f7f\u7528Safari\u3001Chrome\u3001QQ\u6d4f\u89c8\u5668\u6216\u5728QQ\u5185\u6253\u5f00\u9875\u9762\u6216\u4f7f\u7528\u5176\u4ed6\u65b9\u5f0f\u8fdb\u884c\u767b\u5f55\u3002"),void this.$guideWrapper.show()):this.options.switchToQQ()},hide:function(){this.$guideWrapper&&this.$guideWrapper.hide()},bindCopyEvent:function(){var t=this,e=function(t){$.getScript("https://"+o+"/qcloud/main/scripts/release/common/vendors/clipboard.min.js",function(){setTimeout(function(){t()},200)})};e(function(){if(window.Clipboard)try{var e=new Clipboard(t.$copyUrlBtn[0],{text:function(){return location.href}});e.on("success",function(e){t.$copyTip.html(' \u590d\u5236\u6210\u529f').fadeIn(),setTimeout(function(){t.$copyTip.fadeOut()},3e3)}),e.on("error",function(e){t.$copyTip.html(' \u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u4e00\u952e\u590d\u5236\uff0c\u8bf7\u957f\u6309\u590d\u5236\u5185\u5bb9\uff1a'+n.htmlEncode(location.href)+"").fadeIn()})}catch(t){}})}};t.exports=s},rCGI:function(t,e){"use strict";t.exports={"\u767b\u5f55":"Sign In","\u90ae\u7bb1":"Email","\u90ae\u7bb1\u767b\u5f55":"Sign In with Email","\u90ae\u7bb1\u624b\u673a\u767b\u5f55":"Email/Phone","QQ\u767b\u5f55":"Sign In with QQ","\u5fae\u4fe1\u767b\u5f55":"Sign In with WeChat","\u90ae\u7bb1\u5730\u5740":"Email address","\u90ae\u7bb1\u5730\u5740/\u624b\u673a\u53f7\u7801":"Email address or Phone number","\u90ae\u7bb1\u5730\u5740/DNSPod\u8d26\u53f7":"Email address or DNSPod account","\u5bc6\u7801":"Password","\u9a8c\u8bc1\u7801":"Verifiy Code","\u5fd8\u8bb0\u5bc6\u7801":"Forgot password","\u5fd8\u8bb0\u5bc6\u7801\uff1f":"Forgot password?","\u767b \u5f55":"Sign In","\u8fd8\u6ca1\u6709\u8d26\u53f7\uff1f":"No account ?","\u7acb\u5373\u6ce8\u518c":"Sign up now","\u53c2\u6570\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165":"Param error,Please enter again","\u8d26\u53f7\u4e0d\u5b58\u5728\u6216\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165":"Account does not exist or password error , please re-enter","\u9a8c\u8bc1\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165":"Verification code error. Please enter again","\u767b\u5f55\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5":"Login failed. Please enter again","\u8bf7\u8f93\u5165\u90ae\u7bb1":"Please enter email","\u8bf7\u8f93\u5165\u90ae\u7bb1\u6216\u8005\u624b\u673a\u53f7\u7801":"Please enter email or phone number","\u8bf7\u8f93\u5165\u5bc6\u7801":"Please enter your password","\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801":"Please enter the verification code","\u8d26\u53f7\u5bc6\u7801\u9519\u8bef\u6b21\u6570\u8fbe\u5230\u4e0a\u9650\uff0c\u5f53\u65e5\u4e0d\u53ef\u767b\u5f55":"Too many password errors today , to ensure account security , please try tomorrow","\u5fae\u4fe1\u516c\u4f17\u53f7":"WeChat OA","\u5fae\u4fe1\u8d26\u53f7":"WeChat","QQ\u8d26\u53f7":"QQ","\u90ae\u7bb1\u8d26\u53f7":"Email","\u767b\u5f55\u817e\u8baf\u4e91":"Sign in Tencent Cloud","\u5176\u4ed6\u767b\u5f55\u65b9\u5f0f":"More","\u4f7f\u7528\u90ae\u7bb1\u8d26\u53f7\u767b\u5f55":"Sign in using your email account","\u8bf7\u4f7f\u7528\u5fae\u4fe1\u626b\u63cf\u4e8c\u7ef4\u7801\u767b\u5f55":"Scan QR-code in WeChat to login","\u201c\u817e\u8baf\u4e91\u201d":'"Tencent Cloud"',"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u90ae\u7bb1":"Please enter a correct email","\u90ae\u7bb1\u683c\u5f0f\u6709\u8bef\uff0c\u8bf7\u4fee\u6539":"Email format error , please re-edit","\u8be5\u8d26\u53f7\u5c5e\u4e8e\u56fd\u9645\u7ad9\u8d26\u53f7\uff0c":"Your account is for Tencent Cloud International\uff0c","\u524d\u5f80\u767b\u5f55":"Log in now","\u952e\u76d8\u5927\u5199\u9501\u5b9a\u5df2\u6253\u5f00\uff0c\u8bf7\u6ce8\u610f":"CapsLock On","\u5feb\u6377\u767b\u5f55":"More","\u5fd8\u8bb0\u8d26\u53f7\u6216\u5bc6\u7801\uff1f":"Forgot account or password?",'\u8be5\u8d26\u53f7\u53ef\u80fd\u662f\u901a\u8fc7QQ\u5feb\u6377\u6ce8\u518c\uff0c\u8bf7\u5207\u6362\u81f3QQ\u767b\u5f55':'Your account was signed in with QQ , please switch to QQ login window',"\u8fd8\u6ca1\u6709\u6ce8\u518c\u817e\u8baf\u4e91\u8d26\u53f7\uff1f":"No account ?","\u5fd8\u8bb0\u8d26\u53f7":"Forgot account","\u8fd4\u56de\u817e\u8baf\u4e91\u767b\u5f55":"Back to Tencent Cloud login","\u6b64\u90ae\u7bb1\u5730\u5740\u5c1a\u672a\u6fc0\u6d3b\uff0c\u8bf7\u67e5\u770b\u6fc0\u6d3b\u90ae\u4ef6\uff0c\u5b8c\u6210\u6fc0\u6d3b\u540e\u91cd\u65b0\u767b\u5f55\u3002":"This email account has not been activated on Tencent Cloud. Please check your email to activate it and log in again.",'\u6b64\u90ae\u7bb1\u5730\u5740\u5c1a\u672a\u6fc0\u6d3b\uff0c\u8bf7\u67e5\u770b\u6fc0\u6d3b\u90ae\u4ef6\uff0c\u5b8c\u6210\u6fc0\u6d3b\u540e\u91cd\u65b0\u767b\u5f55\u3002':'This email account has not been activated on Tencent Cloud. Please check your email to activate it and log in again.',"\u5207\u6362\u5176\u4ed6\u767b\u5f55\u65b9\u5f0f":"Log in via other methods","\u5fae\u4fe1\u626b\u7801\u767b\u5f55":"Sign In with WeChat","\u53bb\u5fae\u4fe1\u6388\u6743":"Authorize on WeChat","\u4f7f\u7528\u5fae\u4fe1\u767b\u5f55":"Sign In with WeChat","\u5b50\u7528\u6237\u767b\u5f55":"CAM user sign in","\u5df2\u767b\u5f55\u8d26\u53f7":"Signed in account","\u5feb\u901f\u767b\u5f55":"Quick Login","\u767b\u5f55\u5176\u4ed6\u8d26\u53f7":"Log in to another account","\u8d26\u53f7":"The account","\u5df2\u767b\u5f55\uff0c\u53ef\u4ee5\u9009\u62e9\u76f4\u63a5\u767b\u5f55\u7ee7\u7eed\u4f7f\u7528\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55":"is logged in. You can choose to log in directly to continue using it, or you can log in with another account.",'\u8d26\u53f7\u5bc6\u7801\u8f93\u5165\u5f53\u65e5\u4ec5\u52691\u6b21\u673a\u4f1a\uff0c\u662f\u5426 \u5fd8\u8bb0\u5bc6\u7801 \u6216 \u5fd8\u8bb0\u8d26\u53f7':'Only 1 chance left to input account and password today. Forget password or forget account?','\u8d26\u53f7\u5bc6\u7801\u9519\u8bef\u6b21\u6570\u8d85\u8fc7\u5f53\u65e5\u6700\u5927\u6b21\u6570\uff0c\u5efa\u8bae\u60a8\u901a\u8fc7 \u5fd8\u8bb0\u5bc6\u7801 \u6216 \u5fd8\u8bb0\u8d26\u53f7 \u627e\u56de\u8d26\u53f7\u5bc6\u7801\uff0c\u6b21\u65e5\u518d\u5c1d\u8bd5\u767b\u5f55':'Account and password errors exceed the maximum number today. Forget password or forget account?',"\u8bf7\u4f7f\u7528\u5fae\u4fe1\u626b\u4e00\u626b\u767b\u5f55":"Scan code with WeChat to log in","\u5237\u65b0":"Refresh"}}}); \ No newline at end of file diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/article-detail.74aef85e22.js.下载 b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/article-detail.74aef85e22.js.下载 new file mode 100644 index 0000000..8e48933 --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/article-detail.74aef85e22.js.下载 @@ -0,0 +1 @@ +!function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=n,o.c=r,o.i=function(e){return e},o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="//imgcache.qq.com/qcloud/developer/scripts/",o(o.s=12)}({"+AS+":function(e,t,n){"use strict"},"+kzo":function(e,t,n){"use strict"},"+moQ":function(e,t,n){"use strict";var r;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i="book",a="peripheral",u="keyboard",c="mystery";o(r={},"voucher",{label:function(e){var t=e.amount,n=void 0===t?0:t,r=e.count,o=void 0===r?1:r;return n/100+" \u5143\u4ee3\u91d1\u5238"+(1'+n/100+" \u5143

\u817e\u8baf\u4e91\u4ee3\u91d1\u5238"+(1Date.now();return F.a.createElement(U.Fragment,null,m&&O===B.ArticleState.REJECTED&&F.a.createElement(q.Alert,{type:"danger"},"\u4f60\u7684\u6587\u7ae0\u88ab\u5c0f\u7f16\u9a73\u56de\u4e86\uff0c\u8bf7\u4fee\u6539\u540e\u518d\u91cd\u65b0\u53d1\u5e03\u5427\uff01"),m&&r&&r.status===B.ArticleState.REJECTED&&F.a.createElement(q.Alert,{type:"danger"},"\u4f60\u63d0\u4ea4\u7684\u6587\u7ae0\u4fee\u6539\u5185\u5bb9\u88ab\u5c0f\u7f16\u9a73\u56de\u4e86\uff0c\u8bf7\u4fee\u6539\u540e\u518d\u91cd\u65b0\u53d1\u5e03\u5427\uff01"),m&&O===B.ArticleState.PENDING_APPROVAL&&F.a.createElement(q.Alert,{type:"warning"},"\u5c0f\u7f16\u5728\u6293\u7d27\u5ba1\u6838\u4e2d\uff0c\u7a0d\u5b89\u52ff\u8e81\u3002"),m&&r&&r.status===B.ArticleState.PENDING_APPROVAL&&F.a.createElement(q.Alert,{type:"warning"},"\u5c0f\u7f16\u6b63\u5728\u6293\u7d27\u5ba1\u6838\u4f60\u63d0\u4ea4\u7684\u6587\u7ae0\u4fee\u6539\u5185\u5bb9\uff0c\u7a0d\u5b89\u52ff\u8e81\u3002"),F.a.createElement("h1",{className:"col-article-title J-articleTitle"},m&&O===B.ArticleState.PENDING_APPROVAL&&F.a.createElement(q.SimpleBubble,{className:"com-article-tag-bubble",content:"\u6587\u7ae0\u6b63\u5728\u5ba1\u6838\u4e2d\uff0c\u5ba1\u6838\u901a\u8fc7\u540e\u5c06\u5f00\u653e\u9605\u8bfb"},F.a.createElement("span",{className:"com-article-tag"},"\u5ba1\u6838\u4e2d")),m&&r&&r.status===B.ArticleState.PENDING_APPROVAL&&F.a.createElement(q.SimpleBubble,{className:"com-article-tag-bubble",content:"\u6587\u7ae0\u5df2\u88ab\u4fee\u6539\uff0c\u6b63\u5728\u5ba1\u6838\u4e2d\uff0c\u5185\u5bb9\u5c06\u5728\u5ba1\u6838\u540e\u66f4\u65b0"},F.a.createElement("span",{className:"com-article-tag"},"\u5ba1\u6838\u4e2d")),O===B.ArticleState.REJECTED&&(m||i)&&F.a.createElement(q.SimpleBubble,{className:"com-article-tag-bubble",content:"\u6587\u7ae0\u5df2\u88ab\u9a73\u56de"},F.a.createElement("span",{className:"com-article-tag"},"\u5df2\u9a73\u56de")),m&&r&&r.status===B.ArticleState.REJECTED&&F.a.createElement(q.SimpleBubble,{className:"com-article-tag-bubble",content:"\u4f60\u63d0\u4ea4\u7684\u6587\u7ae0\u4fee\u6539\u5185\u5bb9\u5df2\u88ab\u9a73\u56de"},F.a.createElement("span",{className:"com-article-tag"},"\u5df2\u9a73\u56de")),y),F.a.createElement("div",{className:"col-article-author"},Boolean(h)&&F.a.createElement(U.Fragment,null,F.a.createElement(q.UserCard,{userId:h.id,showFollowUserButton:!0},F.a.createElement(q.Link,{to:"/user/"+h.id,className:"col-avatar author-avatar",style:{backgroundImage:"url("+D.i(z.getThumbnailUrl)(h.avatar,36)+")"}})),F.a.createElement(q.Link,{to:"/user/"+h.id,className:"author-name"},h.name),F.a.createElement(q.ProfessionVerifiedBadge,{user:h}),F.a.createElement(q.UserBadges,{badge:h.badgeInfo,inline:!0})),Boolean(k)&&F.a.createElement(U.Fragment,null,F.a.createElement("span",null,"\u53d1\u8868\u4e8e"),F.a.createElement("span",{className:"column-wrap"},F.a.createElement(q.Link,{to:"/column/"+k.id,className:"column-name"},k.name),F.a.createElement(q.FollowColumnButton,{columnId:k.id,unfollowClassName:"c-btn c-btn-hole smaller",followClassName:"c-btn c-btn-hole smaller",tinyLoading:!0}))),F.a.createElement("div",{className:"extra-part"},F.a.createElement("div",{className:"com-operations"},F.a.createElement("span",{className:"com-opt-link dark",title:"\u6d4f\u89c8\u6b21\u6570"},F.a.createElement("i",{className:"com-i-view"}),F.a.createElement("span",{className:"text"},D.i(z.abbrNum)(w))),I&&F.a.createElement(q.ArticleEditButton,{article:n,className:"link-edit"},F.a.createElement("i",{className:"com-i-edit"}),"\u7f16\u8f91"),j&&F.a.createElement(q.ArticleDeleteButton,{className:"link-delete",article:n,onDeleted:this.onArticleDeleted},F.a.createElement("i",{className:"com-i-delete"}),"\u5220\u9664"),Boolean(m&&O===B.ArticleState.NORMAL&&!a&&!R)&&F.a.createElement(U.Fragment,null,[B.ArticleSelfRecommendStatus.NOT_APPLY,B.ArticleSelfRecommendStatus.REJECT].includes(s)&&!f&&L&&F.a.createElement(q.Link,{className:"com-opt-link actived",onClick:this.handleSelfRecommendArticle},F.a.createElement("i",{className:"com-i-recommend"}),"\u81ea\u8350\u672c\u6587\u4e0a\u9996\u9875"),f&&F.a.createElement(q.LoadingBar,{tiny:!0,style:{display:"inline-block"}}),s===B.ArticleSelfRecommendStatus.APPLYING&&!f&&F.a.createElement("span",{className:"com-opt-text"},"\u81ea\u8350\u5ba1\u6838\u4e2d"))))),Boolean(S)&&F.a.createElement("div",{className:"col-article-adpanel"},F.a.createElement(q.Link,{to:S.spreadUrl,target:"_blank",title:S.desc,hotrep:"community.column.article-detail.adpanel"},F.a.createElement("img",{src:S.imageUrl,alt:""}))),Boolean(T&&!M.a.isEmpty(T)&&T.spreadUrl)&&F.a.createElement(q.DeveloperSpreadBanner,{item:T}),O===B.ArticleState.PENDING_APPROVAL&&i&&F.a.createElement("div",{style:{textAlign:"right",marginTop:"-15px"}},F.a.createElement(q.ArticleAuditButton,{action:"pass",article:n,onSuccess:function(){return window.location.reload()}}),F.a.createElement("span",{style:{margin:"0 3px"}}),F.a.createElement(q.ArticleAuditButton,{action:"reject",article:n,onSuccess:function(){return window.location.reload()}})),O===B.ArticleState.NORMAL&&a&&F.a.createElement("div",{style:{textAlign:"right",marginTop:"-15px"}},F.a.createElement(q.ArticleRecommendButton,{article:n,onRecommendArticle:this.handleRecommendArticle})),F.a.createElement("section",{className:"col-article"},F.a.createElement(G.a,{raw:D.i(z.unpackRawContent)(g),contentSelector:".J-articleContent"}),F.a.createElement(q.RichContent,{className:"J-articleContent",content:l||g,findScrollParent:function(){return null},from:d,source:"article-detail"}),F.a.createElement(K.a,{article:n,hasUpdateWeChatRight:u}),F.a.createElement("div",{className:"col-article-time"},A===C&&F.a.createElement("span",null,"\u53d1\u8868\u4e8e ",F.a.createElement(q.TimeAgo,{time:C})),A!==C&&F.a.createElement("span",null,"\u7f16\u8f91\u4e8e ",F.a.createElement(q.TimeAgo,{time:A}))),F.a.createElement("div",{className:"col-article-tags"},F.a.createElement(V.a,{tags:b}),F.a.createElement("div",{className:"extra-part"},F.a.createElement("div",{className:"com-operations"},P&&F.a.createElement(q.ArticleReportButton,{article:n,className:"link-warn"},F.a.createElement("i",{className:"com-i-warn"}),"\u4e3e\u62a5")))),F.a.createElement(q.WidgetOperationBar,null,F.a.createElement("div",{className:"main-cnt"},F.a.createElement(q.ArticleLikeButton,{className:"link-like",articleId:v,likeCount:_||0}),O===B.ArticleState.NORMAL&&F.a.createElement(q.ArticleFavorButton,{className:"link-bookmark",articleId:v,favorCount:E||0})),F.a.createElement("div",{className:"extra-cnt"},F.a.createElement("span",{className:"com-opt-text share-text"},"\u5206\u4eab"),F.a.createElement(q.ArticleSharing,{shareTitle:n.title,shareSummary:encodeURIComponent(n.summary||""),shareUrl:D.i(z.getAbsoluteRouteUrl)("/article/"+n.id+(m?"?s=original-sharing":"")),qrCodeSize:100,containerSelector:".extra-cnt",bubblePlacement:"left"}),F.a.createElement(W.a,{className:"com-widget-qr",bubblePlacement:"left"})))),k&&F.a.createElement(H.a,{column:k,sameColumnArticles:o}))}},{key:"componentDidMount",value:function(){this.setupTextLinks(),this.reportArticleFrom()}},{key:"reportArticleFrom",value:function(){var e=this.props.article,t=e.author,n=e.articleId;if((t&&t.fromInfo||{}).from)try{D.i(a.reportFrom)({articleId:n,event:i.a.VIEW}),c()(".J-articleContent").on("click","[data-from]",function(e){D.i(a.reportFrom)({articleId:n,event:i.a.CLICK})})}catch(e){}}},{key:"setupTextLinks",value:(t=h(regeneratorRuntime.mark(function e(){var t,n,r,o,i,a,u=this;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if((t=this.props.article).textLinks.length){e.next=3;break}return e.abrupt("return");case 3:return n=D.i(l.a)(D.i(z.unpackRawContent)(t.content),t.textLinks),r=f(n,2),o=r[0],i=r[1],e.next=6,new Promise(function(e){return u.setState({articleRaw:o},e)});case 6:0<(a=i.map(function(e){return e.mark})).length&&(D.i(s.reportTextLinksView)({marks:a}),c()(".J-articleContent").on("click","[data-text-link]",function(e){var t=c()(e.currentTarget);D.i(s.reportTextLinksClick)({marks:[t.data("text-link")]})}));case 8:case"end":return e.stop()}},e,this)})),function(){return t.apply(this,arguments)})}]),n}())||n},"2h0h":function(e,t,n){"use strict";var r=n("nPs6");n.d(t,"a",function(){return r.a})},"2xpJ":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("31QT");n.d(t,"updateUserProfile",function(){return r.b}),n.d(t,"getUserProfile",function(){return r.c}),n.d(t,"batchFetchUserDetailInfo",function(){return r.d}),n.d(t,"fetchDeliveryAddress",function(){return r.e}),n.d(t,"updateDeliveryAddress",function(){return r.f}),n.d(t,"fetchUserProfessonVerifyInfo",function(){return r.g}),n.d(t,"submitUserProfessionVerifyInfo",function(){return r.h}),n.d(t,"fetchUploadWorkCardCredentials",function(){return r.i}),n.d(t,"searchUsers",function(){return r.a}),n.d(t,"handleFollow",function(){return r.j}),n.d(t,"setNotifyType",function(){return r.k}),n.d(t,"getUserInfo",function(){return r.l}),n.d(t,"getQcloudUserInfo",function(){return r.m}),n.d(t,"fetchProfessionVerifyJobTitles",function(){return r.n})},"2xrq":function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return o}),n.d(t,"c",function(){return i}),n.d(t,"d",function(){return a});var r={RECOMMEND:1,CANCEL:2},o=121,i=1e9,a={NOT_APPLY:1,APPLYING:0,PASS:2,REJECT:3}},"2z2P":function(e,t,n){"use strict"},3:function(e,t){e.exports=Commons.helpers},"31QT":function(e,t,n){"use strict";t.b=function(e){var t=e.name,n=e.label,r=e.avatar,o=e.province,i=e.city,a=e.company,u=e.title,c=e.school,l=e.major,s=e.homePage,f=e.specialityIds,p=e.jobType,h=e.graduationDate,m=e.region,d=e.education,v={name:t,label:n,avatar:r,province:o,city:i,company:a,title:u,school:c,major:l,homePage:s,specialityIds:f,jobType:p,graduationDate:h,region:m,education:d};return y.call("UpdateUserProfile",v)},t.c=function(e){var t={uid:e.uid};return y.cache("GetUserProfile",t)},t.d=function(e){var t={uids:e.uids};return y.call("BatchFetchUserDetailInfo",t)},t.e=function(){return y.call("FetchDeliveryAddress")},t.f=function(e){var t=e.name,n=e.provinceId,r=e.cityId,o=e.addressDetail,i={name:t,provinceId:n,cityId:r,addressDetail:o};return y.call("UpdateDeliveryAddress",i)},t.g=function(){return y.call("FetchUserProfessonVerifyInfo")},t.h=function(e){var t=e.verifyType,n=e.realname,r=e.company,o=e.title,i=e.province,a=e.city,u=e.cardUrl,c={verifyType:t,realname:n,company:r,title:o,province:i,city:a,cardUrl:u};return y.call("SubmitUserProfessionVerifyInfo",c)},t.i=function(){return y.call("FetchUploadWorkCardCredentials")},t.a=function(e){var t=e.pageNumber,n=e.pageSize,r=e.keyword;return y.call("SearchUsers",{pageNumber:t,pageSize:n,keyword:r})},t.j=function(e){var t=e.uid,n=e.action;return y.call("HandleFollow",{followedUid:t,action:n})},t.k=function(e){var t=e.notifyType,n=e.notifyAction;return y.call("SetNotifyType",{notifyType:t,notifyAction:n})},t.l=function(){return y.call("GetUserInfo")},t.m=function(){return y.call("GetQcloudUserInfo")},t.n=function(){return y.call("FetchProfessionVerifyJobTitles")};var r=n(0),y=(n.n(r),new r.Service("user"))},"3IRH":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},4:function(e,t){e.exports=ReduxSaga},"4Dyh":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("w0uY");n.d(t,"fetchArticleList",function(){return r.a}),n.d(t,"applyOriginalSharing",function(){return r.b}),n.d(t,"applyAward",function(){return r.c}),n.d(t,"markOriginalRead",function(){return r.d}),n.d(t,"fetchFeatureArticles",function(){return r.e}),n.d(t,"quickVerifyProfession",function(){return r.f}),n.d(t,"reportFrom",function(){return r.g})},"4GeK":function(e,t,n){"use strict"},"4g09":function(e,t,n){"use strict";n("5idK"),n("iimR"),n("v413"),n("r+5c"),n("vAnb")},"4jRL":function(e,t,n){"use strict";var r,o,i,l=n(1),s=n.n(l),a=n(6),u=(n.n(a),n("KSGD")),c=n.n(u),f=n("HW6M"),p=n.n(f),h=n("nfin"),m=function(){function r(e,t){for(var n=0;nt.bottom)return!1;if(e===A){if(_.bottom>k||_.top<0)return!1;if(_.left>O||_.right<0)return!1}return!0}))return[];return m.map(function(e){var t=e.getBoundingClientRect(),n=getComputedStyle(e),r=parseInt(n.borderLeftWidth,10),o=parseInt(n.borderTopWidth,10),i=parseInt(n.borderRightWidth,10),a=parseInt(n.borderBottomWidth,10),u=0,c=0;if("start"===b)if(E||(E=_.top),A===e)u=T+E;else{var l=Math.min(E-t.top,e.scrollHeight-e.clientHeight-e.scrollTop);u=e.scrollTop+l-o}if("center"===b)if(E||(E=_.top+_.height/2),A===e)u=T+E-k/2;else{var s=0-Math.min(t.top+t.height/2-E,e.scrollTop);u=e.scrollTop+s}if("end"===b)if(E||(E=_.bottom),A===e)u=T+E-k;else{var f=0-Math.min(t.bottom-E,e.scrollTop);u=e.scrollTop+f+a}if("nearest"===b)if(E||(E=_.top),A===e){var p=N(T,T+k,k,o,a,T+E,T+E+_.height,_.height);u=T+p}else{var h=N(t.top,t.bottom,t.height,o,a,E,E+_.height,_.height);u=e.scrollTop+h}if("start"===w)if(C||(C=_.left),A===e)c=S+C;else{var m=Math.min(C-t.left,e.scrollHeight-e.clientLeft-e.scrollLeft);c=e.scrollLeft+m-r}if("center"===w)if(C||(C=_.left+_.width/2),A===e)c=S+C-O/2;else{var d=0-Math.min(t.left+t.width/2-C,e.scrollLeft);c=e.scrollLeft+d}if("end"===w)if(C||(C=_.right),A===e)c=S+C-O;else{var v=0-Math.min(t.right-C,e.scrollLeft);c=e.scrollLeft+v+i}if("nearest"===w)if(C||(C=_.left),A===e){var y=N(S,S+O,O,r,i,S+C,S+C+_.width,_.width);c=S+y}else{var g=N(t.left,t.right,t.width,r,i,C,C+_.width,_.width);c=e.scrollLeft+g}return E+=e.scrollTop-u,C+=e.scrollLeft-c,{el:e,top:u,left:c}})}},"9uWT":function(e,t,n){"use strict";var r;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i="default",a="created";r={},o(r,i,{id:i,name:"\u70ed\u95e8\u6392\u5e8f"}),o(r,a,{id:a,name:"\u65f6\u95f4\u6392\u5e8f"})},"9zzJ":function(e,t,n){"use strict";n("sefv")},A4of:function(e,t,n){"use strict";e.exports=function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}},AixO:function(e,t,n){"use strict";t.a=function(e){var t=e.page,n=e.pageSize,r={pageNumber:t,pageSize:n};return o.call("FetchCategory",r)},t.b=function(e){var t=e.pageNumber,n=e.pageSize,r={pageNumber:t,pageSize:n};return o.call("FetchCategoiesWithMap",r)};var r=n(0),o=(n.n(r),new r.Service("column/category"))},AoEa:function(e,t,l){"use strict";(function(r){l.d(t,"a",function(){return e});var o=l(7),i=(l.n(o),l(3)),a=(l.n(i),l("27+6")),u=l("glze"),c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(e){var t=l.i(i.createDevTools)({actionsBlacklist:[]}),n=l.i(o.createStore)(a.a,e,l.i(o.compose)(l.i(o.applyMiddleware)(u.a),t));return l.i(u.b)(),"object"===c(r)&&r.hot&&r.hot.accept("./articleDetailReducer",function(){return n.replaceReducer(a.a)}),n}}).call(t,l("f1Eh")(e))},AuSE:function(e,t,n){"use strict"},B0y3:function(e,t,n){"use strict";var r=n(0);n.n(r),n("u8nw");var i=new r.Service("team/post");var o,a;o=regeneratorRuntime.mark(function e(t){var n,r,o=t.postId;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n={postIds:o},e.next=4,i.accumulate("BatchCheckPostsLike",n);case 4:return r=e.sent,e.abrupt("return",r.includes(o));case 8:return e.prev=8,e.t0=e.catch(0),e.abrupt("return",!1);case 11:case"end":return e.stop()}},e,this,[[0,8]])}),a=function(){var u=o.apply(this,arguments);return new Promise(function(i,a){return function t(e,n){try{var r=u[e](n),o=r.value}catch(e){return void a(e)}if(!r.done)return Promise.resolve(o).then(function(e){t("next",e)},function(e){t("throw",e)});i(o)}("next")})}},BO10:function(e,l,s){"use strict";(function(e){s.d(l,"a",function(){return c});var t=s(1),n=s.n(t),r=s(3),o=(s.n(r),s("AoEa")),i=s("kYCk"),a=s("rGbO"),u=(s.n(a),"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e}),c=s.i(r.createEntry)({component:function(){return n.a.createElement(a.AppContainer,{warnings:!1},n.a.createElement(i.a,null))},createStore:o.a});"object"===u(e)&&e.hot&&e.hot.accept("./ArticleDetailPage",function(){return c.render()})}).call(l,s("f1Eh")(e))},Cwth:function(e,t,n){"use strict"},DHb2:function(e,t,n){"use strict";var r=n(0);n.n(r),new r.Service("inbox")},DOvb:function(e,t,T){"use strict";t.a=function(e,t){var n=e.blocks,a=e.entityMap,r=Object.keys(a).length,o=function(){return r++},i=function(o,i,e){return e.some(function(e){var t=e.key,n=e.offset,r=e.length;return"LINK"===a[t].type&&!(n+r<=o||i<=n)})},u=function(o,i,e){return e.some(function(e){var t=e.style,n=e.offset,r=e.length;return"CODE"===t&&!(n+r<=o||i<=n)})};t=t.slice(0);var c=[],l=!0,s=!1,f=void 0;try{for(var p,h=n[Symbol.iterator]();!(l=(p=h.next()).done);l=!0){var m=p.value;if(!t.length)break;if(["unstyled","paragraph","header-two","header-three","header-four","header-five","header-six","unordered-list-item","ordered-list-item","blockquote"].includes(m.type))for(var d=String(m.text),v=0,y=null;v>16&255,i[u++]=r>>8&255,i[u++]=255&r;2===o?(r=l[e.charCodeAt(t)]<<2|l[e.charCodeAt(t+1)]>>4,i[u++]=255&r):1===o&&(r=l[e.charCodeAt(t)]<<10|l[e.charCodeAt(t+1)]<<4|l[e.charCodeAt(t+2)]>>2,i[u++]=r>>8&255,i[u++]=255&r);return i},t.fromByteArray=function(e){for(var t,n=e.length,r=n%3,o="",i=[],a=0,u=n-r;a>2],o+=c[t<<4&63],o+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],o+=c[t>>10],o+=c[t>>4&63],o+=c[t<<2&63],o+="=");return i.push(o),i.join("")};for(var c=[],l=[],s="undefined"!=typeof Uint8Array?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,i=r.length;o>18&63]+c[o>>12&63]+c[o>>6&63]+c[63&o]);return i.join("")}l["-".charCodeAt(0)]=62,l["_".charCodeAt(0)]=63},EQLI:function(e,t,n){"use strict";var r;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=0,a=1,u=2,c=3;o(r={},i,{id:i,title:"\u5168\u90e8"}),o(r,a,{id:a,title:"\u4e13\u680f"}),o(r,u,{id:u,title:"\u95ee\u7b54"}),o(r,c,{id:c,title:"\u5f00\u53d1\u8005\u624b\u518c"})},EaKe:function(e,t,r){"use strict";t.a=function(e){var t=o.d+"/services/ajax/ask/people?"+r.i(a.a)({action:"UploadAvatar",uin:u.a.getUin(),csrfCode:u.a.getCsrfCode()});return r.i(i.a)(t,e,"avatar")},t.b=function(e){var t=o.d+"/services/ajax/image?"+r.i(a.a)({action:"UploadImage",uin:u.a.getUin(),csrfCode:u.a.getCsrfCode()});return r.i(i.a)(t,e,"image")},t.c=function(e,t){var n=o.d+"/services/ajax/image?"+r.i(a.a)({action:"UploadAttachment",uin:u.a.getUin(),csrfCode:u.a.getCsrfCode()});return r.i(i.a)(n,e,"attachment",t)},t.d=function(e){return c.call("SaveHttpImage",{url:e})};var o=r("nfin"),i=r("gv2m"),a=r("bA4d"),n=r(0),u=(r.n(n),r("QNU9")),c=new n.Service("image")},EuP9:function(e,U,t){"use strict";(function(e){var r=t("EKta"),i=t("ujcs"),a=t("sOR5");function n(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function u(e,t){if(n()=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|e}function h(e,t){if(f.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return L(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return D(e).length;default:if(r)return L(e).length;t=(""+t).toLowerCase(),r=!0}}function m(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function d(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):2147483647=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=f.from(t,r)),f.isBuffer(t))return 0===t.length?-1:v(e,t,n,r,o);if("number"==typeof t)return t&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):v(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function v(e,t,n,r,o){var i,a=1,u=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;u/=a=2,c/=2,n/=2}function l(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var s=-1;for(i=n;i>>10&1023|55296),s=56320|1023&s),r.push(s),o+=f}return function(e){var t=e.length;if(t<=_)return String.fromCharCode.apply(String,e);var n="",r=0;for(;rthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return A(this,t,n);case"utf8":case"utf-8":return w(this,t,n);case"ascii":return E(this,t,n);case"latin1":case"binary":return C(this,t,n);case"base64":return b(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}.apply(this,arguments)},f.prototype.equals=function(e){if(!f.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===f.compare(this,e)},f.prototype.inspect=function(){var e="",t=U.INSPECT_MAX_BYTES;return 0t&&(e+=" ... ")),""},f.prototype.compare=function(e,t,n,r,o){if(!f.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(o<=r&&n<=t)return 0;if(o<=r)return-1;if(n<=t)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),u=Math.min(i,a),c=this.slice(r,o),l=e.slice(t,n),s=0;sthis.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i,a,u,c,l,s,f,p,h,m=!1;;)switch(r){case"hex":return y(this,e,t,n);case"utf8":case"utf-8":return p=t,h=n,M(L(e,(f=this).length-p),f,p,h);case"ascii":return g(this,e,t,n);case"latin1":case"binary":return g(this,e,t,n);case"base64":return c=this,l=t,s=n,M(D(e),c,l,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return a=t,u=n,M(function(e,t){for(var n,r,o,i=[],a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(e,(i=this).length-a),i,a,u);default:if(m)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),m=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var _=4096;function E(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;oe.length)throw new RangeError("Index out of range")}function T(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function R(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function N(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function x(e,t,n,r,o){return o||N(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function I(e,t,n,r,o){return o||N(e,0,n,8),i.write(e,t,n,r,52,8),n+8}f.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):r>>8):T(this,e,t,!0),t+2},f.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},f.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):R(this,e,t,!0),t+4},f.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):R(this,e,t,!1),t+4},f.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);S(this,e,t,n,o-1,-o)}var i=0,a=1,u=0;for(this[t]=255&e;++i>0)-u&255;return t+n},f.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);S(this,e,t,n,o-1,-o)}var i=n-1,a=1,u=0;for(this[t+i]=255&e;0<=--i&&(a*=256);)e<0&&0===u&&0!==this[t+i+1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},f.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,1,127,-128),f.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},f.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},f.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},f.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):R(this,e,t,!0),t+4},f.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||S(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):R(this,e,t,!1),t+4},f.prototype.writeFloatLE=function(e,t,n){return x(this,e,t,!0,n)},f.prototype.writeFloatBE=function(e,t,n){return x(this,e,t,!1,n)},f.prototype.writeDoubleLE=function(e,t,n){return I(this,e,t,!0,n)},f.prototype.writeDoubleBE=function(e,t,n){return I(this,e,t,!1,n)},f.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),0=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function D(e){return r.toByteArray(function(e){var t;if((e=(t=e,t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")).replace(j,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function M(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(U,t("DuR2"))},"F+6q":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={ALL:{id:0,name:"\u5168\u90e8"},SUBSCRIPTIONS:{id:"subscriptions",name:"\u8ba2\u9605"},QUALITY:{id:"top",name:"\u63a8\u8350"}}},F7Wl:function(e,t,n){"use strict";n.d(t,"a",function(){return m});var r,o,i=n(1),a=n.n(i),u=n("KSGD"),c=n.n(u),l=n("HW6M"),s=n.n(l),f=n(2),p=(n.n(f),function(){function r(e,t){for(var n=0;n"']/g,qa=RegExp(Ba.source),Wa=RegExp(za.source),Ga=/<%-([\s\S]+?)%>/g,Va=/<%([\s\S]+?)%>/g,Ka=/<%=([\s\S]+?)%>/g,Ha=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ya=/^\w*$/,Ja=/^\./,Qa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$a=/[\\^$.*+?()[\]{}|]/g,Xa=RegExp($a.source),Za=/^\s+|\s+$/g,eu=/^\s+/,tu=/\s+$/,nu=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ru=/\{\n\/\* \[wrapped with (.+)\] \*/,ou=/,? & /,iu=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,au=/\\(\\)?/g,uu=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,cu=/\w*$/,lu=/^[-+]0x[0-9a-f]+$/i,su=/^0b[01]+$/i,fu=/^\[object .+?Constructor\]$/,pu=/^0o[0-7]+$/i,hu=/^(?:0|[1-9]\d*)$/,mu=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,du=/($^)/,vu=/['\n\r\u2028\u2029\\]/g,e="\\ud800-\\udfff",t="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",n="\\u2700-\\u27bf",r="a-z\\xdf-\\xf6\\xf8-\\xff",o="A-Z\\xc0-\\xd6\\xd8-\\xde",i="\\ufe0e\\ufe0f",a="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",u="['\u2019]",c="["+e+"]",l="["+a+"]",s="["+t+"]",f="\\d+",p="["+n+"]",h="["+r+"]",m="[^"+e+a+f+n+r+o+"]",d="\\ud83c[\\udffb-\\udfff]",v="[^"+e+"]",y="(?:\\ud83c[\\udde6-\\uddff]){2}",g="[\\ud800-\\udbff][\\udc00-\\udfff]",b="["+o+"]",w="\\u200d",_="(?:"+h+"|"+m+")",E="(?:"+b+"|"+m+")",C="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",A="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",O="(?:"+s+"|"+d+")"+"?",k="["+i+"]?",S=k+O+("(?:"+w+"(?:"+[v,y,g].join("|")+")"+k+O+")*"),T="(?:"+[p,y,g].join("|")+")"+S,R="(?:"+[v+s+"?",s,y,g,c].join("|")+")",yu=RegExp(u,"g"),gu=RegExp(s,"g"),N=RegExp(d+"(?="+d+")|"+R+S,"g"),bu=RegExp([b+"?"+h+"+"+C+"(?="+[l,b,"$"].join("|")+")",E+"+"+A+"(?="+[l,b+_,"$"].join("|")+")",b+"?"+_+"+"+C,b+"+"+A,"\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)",f,T].join("|"),"g"),x=RegExp("["+w+e+t+i+"]"),wu=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,_u=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Eu=-1,Cu={};Cu[Ta]=Cu[Ra]=Cu[Na]=Cu[xa]=Cu[Ia]=Cu[ja]=Cu[Pa]=Cu[La]=Cu[Da]=!0,Cu[sa]=Cu[fa]=Cu[ka]=Cu[pa]=Cu[Sa]=Cu[ha]=Cu[ma]=Cu[da]=Cu[ya]=Cu[ga]=Cu[ba]=Cu[_a]=Cu[Ea]=Cu[Ca]=Cu[Oa]=!1;var Au={};Au[sa]=Au[fa]=Au[ka]=Au[Sa]=Au[pa]=Au[ha]=Au[Ta]=Au[Ra]=Au[Na]=Au[xa]=Au[Ia]=Au[ya]=Au[ga]=Au[ba]=Au[_a]=Au[Ea]=Au[Ca]=Au[Aa]=Au[ja]=Au[Pa]=Au[La]=Au[Da]=!0,Au[ma]=Au[da]=Au[Oa]=!1;var I={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ou=parseFloat,ku=parseInt,j="object"==typeof z&&z&&z.Object===Object&&z,P="object"==typeof self&&self&&self.Object===Object&&self,Su=j||P||Function("return this")(),L="object"==typeof G&&G&&!G.nodeType&&G,D=L&&"object"==typeof q&&q&&!q.nodeType&&q,Tu=D&&D.exports===L,M=Tu&&j.process,U=function(){try{return M&&M.binding&&M.binding("util")}catch(e){}}(),Ru=U&&U.isArrayBuffer,Nu=U&&U.isDate,xu=U&&U.isMap,Iu=U&&U.isRegExp,ju=U&&U.isSet,Pu=U&&U.isTypedArray;function Lu(e,t){return e.set(t[0],t[1]),e}function Du(e,t){return e.add(t),e}function Mu(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Uu(e,t,n,r){for(var o=-1,i=null==e?0:e.length;++o":">",'"':""","'":"'"});function hc(e){return"\\"+I[e]}function mc(e){return x.test(e)}function dc(e){var n=-1,r=Array(e.size);return e.forEach(function(e,t){r[++n]=[t,e]}),r}function vc(t,n){return function(e){return t(n(e))}}function yc(e,t){for(var n=-1,r=e.length,o=0,i=[];++n",""":'"',"'":"'"});var Ec=function e(t){var n,T=(t=null==t?Su:Ec.defaults(Su.Object(),t,Ec.pick(Su,_u))).Array,r=t.Date,o=t.Error,v=t.Function,i=t.Math,A=t.Object,y=t.RegExp,s=t.String,R=t.TypeError,a=T.prototype,u=v.prototype,c=A.prototype,l=t["__core-js_shared__"],f=u.toString,O=c.hasOwnProperty,p=0,h=(n=/[^.]+$/.exec(l&&l.keys&&l.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",m=c.toString,d=f.call(A),g=Su._,b=y("^"+f.call(O).replace($a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),w=Tu?t.Buffer:ta,_=t.Symbol,E=t.Uint8Array,C=w?w.allocUnsafe:ta,k=vc(A.getPrototypeOf,A),S=A.create,N=c.propertyIsEnumerable,x=a.splice,I=_?_.isConcatSpreadable:ta,j=_?_.iterator:ta,P=_?_.toStringTag:ta,L=function(){try{var e=Bn(A,"defineProperty");return e({},"",{}),e}catch(e){}}(),D=t.clearTimeout!==Su.clearTimeout&&t.clearTimeout,M=r&&r.now!==Su.Date.now&&r.now,U=t.setTimeout!==Su.setTimeout&&t.setTimeout,F=i.ceil,B=i.floor,z=A.getOwnPropertySymbols,q=w?w.isBuffer:ta,W=t.isFinite,G=a.join,V=vc(A.keys,A),K=i.max,H=i.min,Y=r.now,J=t.parseInt,Q=i.random,$=a.reverse,X=Bn(t,"DataView"),Z=Bn(t,"Map"),ee=Bn(t,"Promise"),te=Bn(t,"Set"),ne=Bn(t,"WeakMap"),re=Bn(A,"create"),oe=ne&&new ne,ie={},ae=hr(X),ue=hr(Z),ce=hr(ee),le=hr(te),se=hr(ne),fe=_?_.prototype:ta,pe=fe?fe.valueOf:ta,he=fe?fe.toString:ta;function me(e){if(xo(e)&&!wo(e)&&!(e instanceof ge)){if(e instanceof ye)return e;if(O.call(e,"__wrapped__"))return mr(e)}return new ye(e)}var de=function(){function n(){}return function(e){if(!No(e))return{};if(S)return S(e);n.prototype=e;var t=new n;return n.prototype=ta,t}}();function ve(){}function ye(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=ta}function ge(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=ca,this.__views__=[]}function be(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t>>0,t>>>=0;for(var i=T(o);++r>>1,a=e[i];null!==a&&!Uo(a)&&(n?a<=t:a>>0)?(e=Yo(e))&&("string"==typeof t||null!=t&&!Lo(t))&&!(t=Mt(t))&&mc(e)?Jt(wc(e),0,n):e.split(t,n):[]},me.spread=function(r,o){if("function"!=typeof r)throw new R(na);return o=null==o?0:K(Go(o),0),At(function(e){var t=e[o],n=Jt(e,0,o);return t&&Ku(n,t),Mu(r,this,n)})},me.tail=function(e){var t=null==e?0:e.length;return t?xt(e,1,t):[]},me.take=function(e,t,n){return e&&e.length?xt(e,0,(t=n||t===ta?1:Go(t))<0?0:t):[]},me.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?xt(e,(t=r-(t=n||t===ta?1:Go(t)))<0?0:t,r):[]},me.takeRightWhile=function(e,t){return e&&e.length?zt(e,Mn(t,3),!1,!0):[]},me.takeWhile=function(e,t){return e&&e.length?zt(e,Mn(t,3)):[]},me.tap=function(e,t){return t(e),e},me.throttle=function(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new R(na);return No(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),ao(e,t,{leading:r,maxWait:t,trailing:o})},me.thru=qr,me.toArray=qo,me.toPairs=mi,me.toPairsIn=di,me.toPath=function(e){return wo(e)?Vu(e,pr):Uo(e)?[e]:rn(fr(Yo(e)))},me.toPlainObject=Ho,me.transform=function(e,r,o){var t=wo(e),n=t||Ao(e)||Fo(e);if(r=Mn(r,4),null==o){var i=e&&e.constructor;o=n?t?new i:[]:No(e)&&So(i)?de(k(e)):{}}return(n?Fu:Ye)(e,function(e,t,n){return r(o,e,t,n)}),o},me.unary=function(e){return no(e,1)},me.union=Nr,me.unionBy=xr,me.unionWith=Ir,me.uniq=function(e){return e&&e.length?Ut(e):[]},me.uniqBy=function(e,t){return e&&e.length?Ut(e,Mn(t,2)):[]},me.uniqWith=function(e,t){return t="function"==typeof t?t:ta,e&&e.length?Ut(e,ta,t):[]},me.unset=function(e,t){return null==e||Ft(e,t)},me.unzip=jr,me.unzipWith=Pr,me.update=function(e,t,n){return null==e?e:Bt(e,t,Kt(n))},me.updateWith=function(e,t,n,r){return r="function"==typeof r?r:ta,null==e?e:Bt(e,t,Kt(n),r)},me.values=vi,me.valuesIn=function(e){return null==e?[]:uc(e,ci(e))},me.without=Lr,me.words=Si,me.wrap=function(e,t){return po(Kt(t),e)},me.xor=Dr,me.xorBy=Mr,me.xorWith=Ur,me.zip=Fr,me.zipObject=function(e,t){return Gt(e||[],t||[],Re)},me.zipObjectDeep=function(e,t){return Gt(e||[],t||[],St)},me.zipWith=Br,me.entries=mi,me.entriesIn=di,me.extend=Qo,me.extendWith=$o,Mi(me,me),me.add=Hi,me.attempt=Ti,me.camelCase=yi,me.capitalize=gi,me.ceil=Yi,me.clamp=function(e,t,n){return n===ta&&(n=t,t=ta),n!==ta&&(n=(n=Ko(n))==n?n:0),t!==ta&&(t=(t=Ko(t))==t?t:0),Le(Ko(e),t,n)},me.clone=function(e){return De(e,4)},me.cloneDeep=function(e){return De(e,5)},me.cloneDeepWith=function(e,t){return De(e,5,t="function"==typeof t?t:ta)},me.cloneWith=function(e,t){return De(e,4,t="function"==typeof t?t:ta)},me.conformsTo=function(e,t){return null==t||Me(e,t,ui(t))},me.deburr=bi,me.defaultTo=function(e,t){return null==e||e!=e?t:e},me.divide=Ji,me.endsWith=function(e,t,n){e=Yo(e),t=Mt(t);var r=e.length,o=n=n===ta?r:Le(Go(n),0,r);return 0<=(n-=t.length)&&e.slice(n,o)==t},me.eq=vo,me.escape=function(e){return(e=Yo(e))&&Wa.test(e)?e.replace(za,pc):e},me.escapeRegExp=function(e){return(e=Yo(e))&&Xa.test(e)?e.replace($a,"\\$&"):e},me.every=function(e,t,n){var r=wo(e)?zu:qe;return n&&Yn(e,t,n)&&(t=ta),r(e,Mn(t,3))},me.find=Vr,me.findIndex=gr,me.findKey=function(e,t){return Qu(e,Mn(t,3),Ye)},me.findLast=Kr,me.findLastIndex=br,me.findLastKey=function(e,t){return Qu(e,Mn(t,3),Je)},me.floor=Qi,me.forEach=Hr,me.forEachRight=Yr,me.forIn=function(e,t){return null==e?e:Ke(e,Mn(t,3),ci)},me.forInRight=function(e,t){return null==e?e:He(e,Mn(t,3),ci)},me.forOwn=function(e,t){return e&&Ye(e,Mn(t,3))},me.forOwnRight=function(e,t){return e&&Je(e,Mn(t,3))},me.get=ni,me.gt=yo,me.gte=go,me.has=function(e,t){return null!=e&&Gn(e,t,tt)},me.hasIn=ri,me.head=_r,me.identity=ji,me.includes=function(e,t,n,r){e=Eo(e)?e:vi(e),n=n&&!r?Go(n):0;var o=e.length;return n<0&&(n=K(o+n,0)),Mo(e)?n<=o&&-1=H(o=t,i=n)&&r=this.__values__.length;return{done:e,value:e?ta:this.__values__[this.__index__++]}},me.prototype.plant=function(e){for(var t,n=this;n instanceof ve;){var r=mr(n);r.__index__=0,r.__values__=ta,t?o.__wrapped__=r:t=r;var o=r;n=n.__wrapped__}return o.__wrapped__=e,t},me.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof ge){var t=e;return this.__actions__.length&&(t=new ge(this)),(t=t.reverse()).__actions__.push({func:qr,args:[Rr],thisArg:ta}),new ye(t,this.__chain__)}return this.thru(Rr)},me.prototype.toJSON=me.prototype.valueOf=me.prototype.value=function(){return qt(this.__wrapped__,this.__actions__)},me.prototype.first=me.prototype.head,j&&(me.prototype[j]=function(){return this}),me}();Su._=Ec,(W=function(){return Ec}.call(G,V,G,q))===ta||(q.exports=W)}).call(this)}).call(G,V("DuR2"),V("3IRH")(e))},MCil:function(e,t,n){"use strict";n("Mn5R");var r=n("vn+0"),o=(n("hV2o"),n("4g09"),n("xrIa")),i=(n("LuWy"),n("JT/b"),n("4Dyh")),a=(n("NrQd"),n("utCt"),n("zhX3"),n("kcTp"),n("GOkv"),n("ojaj"),n("wa6R"),n("/1wQ"),n("9zzJ"),n("2xpJ"));n.d(t,"a",function(){return r}),n.d(t,"b",function(){return o}),n.d(t,"c",function(){return i}),n.d(t,"d",function(){return a})},MiDW:function(e,t,n){"use strict";var r=n("PyKb");n.d(t,"a",function(){return r.a}),n.d(t,"b",function(){return r.b});n("e/rV");var o=n("h9oW");n.d(t,"c",function(){return o.a})},Mn5R:function(e,t,n){"use strict";n("s7MI"),n("dWZv"),n("nHvv"),n("N9S7"),n("jBnt"),n("Sa9u"),n("DjDL"),n("WmqB"),n("vUpg"),n("/fND")},N9S7:function(e,t,n){"use strict";var r=n(0);n.n(r),new r.Service("ask/invitation")},NrQd:function(e,t,n){"use strict";var r=n("imFM");n.d(t,"a",function(){return r.a})},Otc0:function(e,t,n){"use strict";var r;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=1,a=2,u=3,c=4,l=5;o(r={},i,{iconClass:"translate",desc:"\u4e91+\u793e\u533a\u7ffb\u8bd1\u793e\u52cb\u7ae0",link:"/translation"}),o(r,a,{iconClass:"propagandist",desc:"\u4e91+\u793e\u533a\u5ba3\u4f20\u5458\u4e13\u5c5e\u52cb\u7ae0",link:"/support-plan-invitation"}),o(r,u,{iconClass:"microapp",desc:"\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u8fbe\u4eba\u52cb\u7ae0",link:"/article/1149965"}),o(r,c,{iconClass:"medal-1",desc:"\u539f\u521b\u5206\u4eab\u4f5c\u8005\u52cb\u7ae0",link:"/original-sharing"}),o(r,l,{iconClass:"tvp",desc:"\u817e\u8baf\u4e91 TVP \u6210\u5458",link:"~/tvp"})},PNCo:function(e,t,n){"use strict";t.a=function(e){var t=e.articleId,n=e.pageNumber,r=e.pageSize,o={articleId:t,pageNumber:n,pageSize:r};return i.call("FetchArticleComments",o)},t.b=function(e){var t=e.articleId,n=e.pageNumber,r=e.pageSize,o={articleId:t,pageNumber:n,pageSize:r};return i.call("FetchMobileArticleComments",o)},t.c=function(e){var t=e.articleId,n=e.parentCommentId,r=e.content,o={articleId:t,parentCommentId:n,content:r};return i.call("AddComment",o)},t.d=function(e){var t={commentId:e.commentId};return i.call("DeleteComment",t)};var r=n(0),i=(n.n(r),new r.Service("column/comment"))},PyKb:function(e,t,n){"use strict";var r;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",function(){return f}),n.d(t,"b",function(){return p});var i="product",a="service",u="tech",c="activity",l="solution",s="other",f=[i,l,a,u],p=(o(r={},i,{id:1,name:"\u4e91\u4ea7\u54c1"}),o(r,a,{id:2,name:"\u5e73\u53f0\u670d\u52a1"}),o(r,u,{id:3,name:"\u901a\u7528\u6280\u672f"}),o(r,c,{id:4,name:"\u6d3b\u52a8\u6807\u7b7e"}),o(r,l,{id:5,name:"\u89e3\u51b3\u65b9\u6848"}),o(r,s,{id:99,name:"\u5176\u4ed6"}),r)},Q4WQ:function(e,t,n){"use strict";var r=n("e6+Q"),a=n("cxPT"),u=n("gt/O");e.exports=function(){function e(e,t,n,r,o,i){i!==u&&a(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}var n={array:e.isRequired=e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=r,n.PropTypes=n}},QGLn:function(e,t,n){"use strict";var r=n(1),o=n.n(r),i=function(){function r(e,t){for(var n=0;n":">",'"':""","'":"'","`":"`"},P=m.invert(j),L=function(t){var n=function(e){return t[e]},e="(?:"+m.keys(t).join("|")+")",r=RegExp(e),o=RegExp(e,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,n):e}};m.escape=L(j),m.unescape=L(P),m.result=function(e,t,n){var r=null==e?void 0:e[t];return void 0===r&&(r=n),m.isFunction(r)?r.call(e):r};var D=0;m.uniqueId=function(e){var t=++D+"";return e?e+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var M=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},F=/\\|'|\r|\n|\u2028|\u2029/g,B=function(e){return"\\"+U[e]};m.template=function(i,e,t){!e&&t&&(e=t),e=m.defaults({},e,m.templateSettings);var n=RegExp([(e.escape||M).source,(e.interpolate||M).source,(e.evaluate||M).source].join("|")+"|$","g"),a=0,u="__p+='";i.replace(n,function(e,t,n,r,o){return u+=i.slice(a,o).replace(F,B),a=o+e.length,t?u+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":n?u+="'+\n((__t=("+n+"))==null?'':__t)+\n'":r&&(u+="';\n"+r+"\n__p+='"),e}),u+="';\n",e.variable||(u="with(obj||{}){\n"+u+"}\n"),u="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+u+"return __p;\n";try{var r=new Function(e.variable||"obj","_",u)}catch(e){throw e.source=u,e}var o=function(e){return r.call(this,e,m)},c=e.variable||"obj";return o.source="function("+c+"){\n"+u+"}",o},m.chain=function(e){var t=m(e);return t._chain=!0,t};var z=function(e,t){return e._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(e){var t=m[e]=n[e];m.prototype[e]=function(){var e=[this._wrapped];return o.apply(e,arguments),z(this,t.apply(m,e))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var n=r[t];m.prototype[t]=function(){var e=this._wrapped;return n.apply(e,arguments),"shift"!==t&&"splice"!==t||0!==e.length||delete e[0],z(this,e)}}),m.each(["concat","join","slice"],function(e){var t=r[e];m.prototype[e]=function(){return z(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},void 0===(G=function(){return m}.apply(W,[]))||(q.exports=G)}).call(this)},s7MI:function(e,t,n){"use strict";n("euci"),n("u8nw");var r=n(0);n.n(r);function o(e){return function(){var u=e.apply(this,arguments);return new Promise(function(i,a){return function t(e,n){try{var r=u[e](n),o=r.value}catch(e){return void a(e)}if(!r.done)return Promise.resolve(o).then(function(e){t("next",e)},function(e){t("throw",e)});i(o)}("next")})}}var i=new r.Service("ask/answer");var a;a=o(regeneratorRuntime.mark(function e(t){var n,r=t.answerId;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.accumulate("CheckAnswerVote",{answerIds:r});case 3:return n=e.sent,e.abrupt("return",-1>1,s=-7,f=n?o-1:0,p=n?-1:1,h=e[t+f];for(f+=p,i=h&(1<<-s)-1,h>>=-s,s+=u;0>=-s,s+=r;0>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:i-1,m=r?1:-1,d=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,a=s):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),2<=(t+=1<=a+f?p/c:p*Math.pow(2,1-f))*c&&(a++,c/=2),s<=a+f?(u=0,a=s):1<=a+f?(u=(t*c-1)*Math.pow(2,o),a+=f):(u=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));8<=o;e[n+h]=255&u,h+=m,u/=256,o-=8);for(a=a<div{background-color:#00a4ff}.c-loading-tip .c-loading-inner>div{background-color:#888}.c-loading-tip .loading-more{display:block;border:1px solid #e5e5e5;background-color:#f7f8fa;color:#333}.c-loading-tip .loading-more:hover{color:#00a4ff;text-decoration:none}.c-margin-b20-grid+.c-loading{margin-top:20px}.col-group{margin:50px auto}.col-group.no-mt{margin-top:0}.com-section .section-inner{-webkit-box-sizing:border-box;box-sizing:border-box;margin:50px auto;padding:0 10px;max-width:1200px}.col-group-hd,.com-section .section-hd{position:relative;margin-bottom:40px;line-height:1.2}.com-section .section-title{font-size:30px;font-weight:400;color:#000}.col-group-title{height:36px;font-size:30px;line-height:36px;font-weight:400;color:#000}.col-group-extra,.com-section .section-extra{position:absolute;right:0;bottom:0}.col-group-extra .extra-link,.com-section .section-extra-link{color:#666}.com-section .section-extra-split{position:relative;display:inline-block;vertical-align:middle;margin:0 10px;width:1px;height:18px;background-color:#d9d9d9}.col-group-extra .extra-link:after,.com-section .section-extra-link:after{background-size:7200% 3784.6153846153848%;;background-position:0.2% 99.79%;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat}.col-group-extra .extra-link:hover,.com-section .section-extra-link:hover{color:#00a4ff}.col-group-extra .extra-link:hover:after,.com-section .section-extra-link:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:69.42% 34.449999999999996%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.col-group-title.small{height:auto;line-height:1.2;font-size:16px;color:#999}.com-section.with-bg{background-color:#f7f8fa}.com-section.with-bg .section-inner{margin-top:0;margin-bottom:0;padding-top:50px;padding-bottom:50px}.com-section.only-extra .section-hd{margin-bottom:30px;padding:0 15px 20px;border-bottom:1px solid #e5e5e5}.com-section.only-extra .section-hd:after{content:'';display:table;clear:both;height:0;overflow:hidden;visibility:hidden}.com-section.only-extra .section-extra{position:static;float:right}.com-sub-section{margin-bottom:30px}.com-sub-section-hd .section-title{margin-bottom:17px;font-size:14px;font-weight:400}.com-avatar{vertical-align:middle;width:32px;height:32px;border-radius:50%;background-size:cover;background-position:center}.com-disorder-list{line-height:2;color:#666}.com-disorder-list li{position:relative;padding-left:10px}.com-disorder-list li:before{content:'';position:absolute;left:2px;top:13px;width:2px;height:2px;border-radius:50%;background-color:#666}.com-disorder-list a{color:inherit}.com-disorder-list a:hover{color:#00a4ff}.com-disorder-list.large{line-height:24px;color:#333}.com-disorder-list.large li{margin-bottom:8px;padding-left:15px}.com-disorder-list.large li:last-child{margin-bottom:0}.com-disorder-list.large li:before{left:0;top:10px;width:4px;height:4px;background-color:#888}.com-disorder-list.large a{display:block}.com-members{margin-bottom:-10px;font-size:0}.com-member{position:relative;display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;-webkit-box-sizing:border-box;box-sizing:border-box}.com-member .com-avatar{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:24px;height:24px}.com-member img{display:block;width:100%;height:100%}.com-member.creator:before{content:'';position:absolute;right:-2px;bottom:-2px;z-index:2;width:10px;height:10px;border:2px solid #fff;background-image:url(sprite/base-201911131148.svg);;border-radius:50%;background-position:66.19% 52.28%;background-size:5040% 4920%;;background-repeat:no-repeat}.com-member.creator .com-avatar{position:relative;margin-top:-1px;width:26px;height:26px}.com-member.add .com-avatar,.com-member.more .com-avatar{position:relative;border:1px solid #bbb;text-align:center;line-height:22px;overflow:hidden}.com-member.add:hover .com-avatar,.com-member.more:hover .com-avatar{border-color:#00a4ff}.com-member.more .com-avatar:before{content:'';display:inline-block;vertical-align:middle;width:22px;height:22px;background-image:url(sprite/base-201911131148.svg);;background-position:87.76% 10.43%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.com-member.more:hover .com-avatar:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.76% 15.53%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.com-member.add .com-avatar:after,.com-member.add .com-avatar:before{content:'';position:absolute;left:50%;top:50%;margin:-6px 0 0 -1px;width:2px;height:12px;background-color:#999}.com-member.add .com-avatar:after{margin:-1px 0 0 -6px;width:12px;height:2px}.com-member.add:hover .com-avatar:after,.com-member.add:hover .com-avatar:before{background-color:#00a4ff}.com-sidebar-panel{margin-bottom:20px;padding:20px;border:1px solid #e5e5e5}.com-sidebar-panel:last-child{margin-bottom:0}.com-sidebar-panel .panel-hd{margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #e5e5e5;overflow:hidden}.com-sidebar-panel .panel-title{float:left;font-size:14px;color:#444;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-sidebar-panel .panel-extra{float:right}.com-sidebar-panel .panel-extra-link{color:#999}.com-sidebar-panel .panel-extra-link:active,.com-sidebar-panel .panel-extra-link:hover{color:#00a4ff}.com-sidebar-wechat .qr-img{display:table-cell;vertical-align:middle;width:60px}.com-sidebar-wechat .qr-img img{display:block;width:100%}.com-sidebar-wechat .qr-cnt{display:table-cell;vertical-align:middle;padding-left:10px}.com-sidebar-wechat .qr-title{margin-bottom:5px;font-weight:700;color:#333}.com-sidebar-wechat .qr-desc{color:#666}.com-wechat-panel{padding:20px;border:1px solid #e5e5e5}.com-wechat-panel .qr-img{display:table-cell;vertical-align:middle;width:76px}.com-wechat-panel .qr-img img{display:block;width:100%}.com-wechat-panel .qr-cnt{display:table-cell;vertical-align:middle;padding-left:10px;font-size:14px;line-height:24px}.com-wechat-panel .qr-title{font-weight:700;color:#333}.com-wechat-panel .qr-desc{color:#666}.com-wechat-panel .qr-img-full{display:none}.c-media-shadow{-webkit-font-smoothing:antialiased}.com-share-options{display:inline-block;vertical-align:middle;position:relative;top:-1px;font-size:0}.com-share-options>li{position:relative;display:inline-block;vertical-align:middle;margin-right:10px}.com-share-options .opt-item{position:relative;display:block;z-index:900}.com-share-options .c-bubble-trigger:hover .opt-item{position:relative;z-index:901}.com-share-options .opt-icon{position:relative;display:block;width:20px;height:20px}.com-share-options .opt-icon:after{content:'';position:absolute;left:2px;right:2px;top:2px;bottom:2px;border-radius:50%;background-color:#fff}.com-share-options .opt-icon:before{content:'';position:absolute;left:0;top:0;z-index:1;width:100%;height:100%;-webkit-background-size:100% auto;background-size:100% auto}.com-share-options .opt-icon.wechat:before{background-image:url(sprite/base-201911131148.svg);;background-position:13.84% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options>li:hover .opt-icon.wechat:before{background-image:url(sprite/base-201911131148.svg);;background-position:9.3% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options .opt-icon.qq:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 37.71%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options>li:hover .opt-icon.qq:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 33.050000000000004%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options .opt-icon.qzone:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 28.389999999999997%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options>li:hover .opt-icon.qzone:before{background-image:url(sprite/base-201911131148.svg);;background-position:18.39% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options .opt-icon.weibo:before{background-image:url(sprite/base-201911131148.svg);;background-position:4.75% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options>li:hover .opt-icon.weibo:before{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 74.15%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options>li:hover .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 50.849999999999994%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.light .opt-icon.copy:after{display:none}.com-share-options.light .opt-icon.copy:before,.com-share-options.light>li:hover .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 42.370000000000005%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options .c-bubble-inner{font-size:12px}.com-share-options .qr-img img{margin-top:5px;width:100px;height:100px}.com-share-options.blue .opt-icon.wechat:before{background-image:url(sprite/base-201911131148.svg);;background-position:86.57000000000001% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue>li:hover .opt-icon.wechat:before{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 0.21%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue .opt-icon.qq:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 55.510000000000005%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue>li:hover .opt-icon.qq:before{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 69.49%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue .opt-icon.weibo:before{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 14.19%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue>li:hover .opt-icon.weibo:before{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 18.86%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:77.48% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-options.blue>li:hover .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.02000000000001% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}[class*=com-i-],[class^=com-i-]{display:inline-block;vertical-align:middle;width:16px;height:16px;-webkit-background-size:100% auto;background-size:100% auto}.com-i-share{background-image:url(sprite/base-201911131148.svg);;background-position:85.04% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-warn{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 15.340000000000002%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-warn-circle{background-image:url(sprite/base-201911131148.svg);;background-position:14.96% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-like{background-image:url(sprite/base-201911131148.svg);;background-position:3.8899999999999997% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-edit{background-image:url(sprite/base-201911131148.svg);;background-position:40.78% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-edit-2{background-image:url(sprite/base-201911131148.svg);;background-position:33.4% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-dialog{background-image:url(sprite/base-201911131148.svg);;background-position:48.16% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-delete{background-image:url(sprite/base-201911131148.svg);;background-position:59.21999999999999% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-close{background-image:url(sprite/base-201911131148.svg);;background-position:81.35% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-view{background-image:url(sprite/base-201911131148.svg);;background-position:18.65% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-report{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 15.340000000000002%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-recommend{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 75.84%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-add{width:20px;height:20px;background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 83.47%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-i-bookmark{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-loading{height:16px;width:16px;background-image:url(sprite/base-201911131148.svg);;-moz-animation:spin .6s infinite linear;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear;background-position:0.2% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.com-i-adopt{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 30.459999999999997%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-arrow-circle{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 15.340000000000002%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-arrow-circle-gray{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 7.7700000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-refresh{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 68.28%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-time{background-image:url(sprite/base-201911131148.svg);;background-position:62.91% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-address{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 34.239999999999995%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-i-qq{width:20px;height:20px;background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 60.17%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-i-wechat{width:20px;height:20px;background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 78.81%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-i-weibo{width:20px;height:20px;background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 4.87%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-i-link{width:20px;height:20px;background-image:url(sprite/base-201911131148.svg);;background-position:68.39% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.c-bubble{color:#444;z-index:900}.c-bubble-inner{border:none;border:1px solid #E7E8F1;border-radius:0;-webkit-box-shadow:0 10px 20px rgba(3,27,78,.1);box-shadow:0 10px 20px rgba(3,27,78,.1)}.c-bubble-top .c-bubble-inner:before{border-top-width:0;border-bottom-width:11px;border-bottom-color:#E7E8F1}.c-bubble-bottom .c-bubble-inner:before{border-top-width:11px;border-bottom-width:0;border-top-color:#E7E8F1}.c-bubble-top .c-bubble-inner:after{border-top-width:0;border-bottom-width:9px}.c-bubble-bottom .c-bubble-inner:after{border-top-width:9px;border-bottom-width:0}.c-bubble-left .c-bubble-inner:before{border-left-width:0;border-right-width:11px;border-right-color:#E7E8F1}.c-bubble-right .c-bubble-inner:before{border-left-width:11px;border-right-width:0;border-left-color:#E7E8F1}.c-bubble-left .c-bubble-inner:after{border-left-width:0;border-right-width:9px}.c-bubble-right .c-bubble-inner:after{border-left-width:9px;border-right-width:0}.c-bubble-trigger{font-size:0;position:relative;display:inline-block;vertical-align:middle}.c-bubble-trigger-icon{display:inline-block;width:16px;height:16px;vertical-align:middle}.c-bubble-trigger-text{font-size:12px;cursor:pointer}.c-bubble-trigger-btn{position:relative;display:block;padding:0 20px 0 10px;height:21px;font-size:14px;line-height:21px;color:#444}.c-bubble-trigger-btn:after{content:'';position:absolute;right:0;top:3px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;background-position:99.8% 19.12%;background-size:3150% 3075%;;background-repeat:no-repeat}.c-bubble-trigger.hover .c-bubble-trigger-btn,.c-bubble-trigger.show-bubble .c-bubble-trigger-btn,.c-bubble-trigger:hover .c-bubble-trigger-btn{color:#00a4ff;text-decoration:none}.c-bubble-trigger.disable-hover.show-bubble:hover .c-bubble-trigger-btn:after,.c-bubble-trigger.hover .c-bubble-trigger-btn:after,.c-bubble-trigger.show-bubble .c-bubble-trigger-btn:after,.c-bubble-trigger:hover .c-bubble-trigger-btn:after{background-image:url(sprite/base-201911131148.svg);;-webkit-transform:rotate3d(0,0,1,-180deg);transform:rotate3d(0,0,1,-180deg);background-position:99.8% 22.900000000000002%;background-size:3150% 3075%;;background-repeat:no-repeat}.c-bubble-trigger.disable-hover:hover .c-bubble-trigger-btn:after{-webkit-transform:rotate3d(0,0,1,0);transform:rotate3d(0,0,1,0)}.c-bubble-trigger .c-bubble{visibility:hidden;width:300px;-webkit-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0s;transition-delay:0s;text-align:center;pointer-events:none;opacity:0}.c-bubble-trigger.hover .c-bubble,.c-bubble-trigger.show-bubble .c-bubble,.c-bubble-trigger:hover .c-bubble{visibility:visible;-webkit-transition-delay:.1s;transition-delay:.1s;opacity:1}.c-bubble-trigger .c-bubble .c-bubble-inner{display:inline-block;overflow-y:auto;max-width:100%;max-height:100%;text-align:left;vertical-align:middle;pointer-events:auto}.c-bubble-trigger .c-bubble-bottom,.c-bubble-trigger .c-bubble-top{left:50%;margin-left:-150px}.c-bubble-trigger .c-bubble-top{top:100%;margin-top:11px;-webkit-transform:translateY(-11px);transform:translateY(-11px)}.c-bubble-trigger .c-bubble-bottom{bottom:100%;margin-bottom:11px;-webkit-transform:translateY(11px);transform:translateY(11px)}.c-bubble-trigger.hover .c-bubble-bottom,.c-bubble-trigger.hover .c-bubble-top,.c-bubble-trigger.show-bubble .c-bubble-bottom,.c-bubble-trigger.show-bubble .c-bubble-top,.c-bubble-trigger:hover .c-bubble-bottom,.c-bubble-trigger:hover .c-bubble-top{-webkit-transform:translateY(0);transform:translateY(0)}.c-bubble-trigger .c-bubble-left,.c-bubble-trigger .c-bubble-right{top:50%;height:300px;margin-top:-150px}.c-bubble-trigger .c-bubble-left:before,.c-bubble-trigger .c-bubble-right:before{font-size:0;display:inline-block;width:0;height:100%;content:'';vertical-align:middle}.c-bubble-trigger .c-bubble-left{text-align:left;left:100%;margin-left:11px;-webkit-transform:translateX(-11px);transform:translateX(-11px)}.c-bubble-trigger .c-bubble-right{text-align:right;right:100%;margin-right:11px;-webkit-transform:translateX(11px);transform:translateX(11px)}.c-bubble-trigger.hover .c-bubble-left,.c-bubble-trigger.hover .c-bubble-right,.c-bubble-trigger.show-bubble .c-bubble-left,.c-bubble-trigger.show-bubble .c-bubble-right,.c-bubble-trigger:hover .c-bubble-left,.c-bubble-trigger:hover .c-bubble-right{-webkit-transform:translateX(0);transform:translateX(0)}.c-bubble-trigger.c-triangle-align-start .c-bubble.c-bubble-bottom,.c-bubble-trigger.c-triangle-align-start .c-bubble.c-bubble-top{text-align:left;margin-left:-32px}.c-triangle-align-start .c-bubble-bottom .c-bubble-inner,.c-triangle-align-start .c-bubble-top .c-bubble-inner{left:32px}.c-triangle-align-start .c-bubble-left,.c-triangle-align-start .c-bubble-right{margin-top:-18px}.c-triangle-align-start .c-bubble-left .c-bubble-inner,.c-triangle-align-start .c-bubble-right .c-bubble-inner{top:18px;vertical-align:top}.c-triangle-align-end .c-bubble-bottom,.c-triangle-align-end .c-bubble-top{text-align:right;left:auto;right:0;margin-right:-24px}.c-triangle-align-end .c-bubble-bottom .c-bubble-inner,.c-triangle-align-end .c-bubble-top .c-bubble-inner{left:auto;right:24px}.c-triangle-align-end .c-bubble-bottom .c-bubble-inner:after,.c-triangle-align-end .c-bubble-top .c-bubble-inner:after{margin-right:1px}.c-triangle-align-end .c-bubble-left,.c-triangle-align-end .c-bubble-right{top:auto;bottom:-24px;margin-top:0}.c-triangle-align-end .c-bubble-left .c-bubble-inner,.c-triangle-align-end .c-bubble-right .c-bubble-inner{vertical-align:bottom;top:auto;bottom:24px}.c-triangle-align-end .c-bubble-left .c-bubble-inner:after,.c-triangle-align-end .c-bubble-right .c-bubble-inner:after{margin-bottom:1px}.c-bubble-trigger.disable-hover .c-bubble-bottom,.c-bubble-trigger.disable-hover .c-bubble-top{-webkit-transform:translateY(0);transform:translateY(0)}.c-bubble-trigger.disable-hover .c-bubble-left,.c-bubble-trigger.disable-hover .c-bubble-right{-webkit-transform:translateX(0);transform:translateX(0)}.c-bubble-trigger.disable-hover:hover .c-bubble{visibility:hidden;opacity:0}.c-bubble-trigger.show-bubble .c-bubble,.c-bubble-trigger.show-bubble:hover .c-bubble{z-index:900;visibility:visible;opacity:1}.c-bubble-trigger-icon.what{background-image:url(sprite/base-201911131148.svg);;cursor:pointer;background-position:91.60000000000001% 54.83%;background-size:3150% 3075%;;background-repeat:no-repeat}.c-bubble-trigger-icon.info{background-image:url(sprite/base-201911131148.png);cursor:pointer;background-position:-68px 0px}.com-bubble-confirm{min-width:170px;max-width:300px}.com-bubble-confirm .c-bubble-inner{padding:18px 20px}.com-bubble-confirm .confirm-title{font-size:14px;color:#000;font-weight:400}.com-bubble-confirm .confirm-btns{margin-top:14px}.com-bubble-confirm .confirm-btn{min-width:60px;border:none;background-color:transparent;color:#00a4ff;text-align:center;cursor:pointer;font-size:14px}.com-bubble-confirm .confirm-btn:hover{color:#0092ee}.com-bubble-confirm .confirm-btn.weak{color:#000}.com-bubble-confirm .confirm-btn.weak:hover{color:#00a4ff;text-decoration:none}.com-bubble-confirm.align-right .confirm-btns{text-align:right}.com-bubble-operations .c-bubble-trigger-btn{color:#666}.com-bubble-operations .c-bubble{left:auto;right:0;margin-left:0;margin-top:3px;text-align:right}.com-bubble-operations .c-bubble-inner{min-width:80px}.com-bubble-operations .c-bubble-inner:after,.com-bubble-operations .c-bubble-inner:before{display:none}.com-bubble-operations .com-bubble-menu a{font-size:14px;text-align:center}.c-bubble-trigger.has-menu .c-bubble-inner{padding:0}.c-bubble-trigger.has-menu .com-bubble-menu{margin:0}.c-bubble-inner>.com-bubble-menu{margin:-8px -10px}.com-bubble-menu a{display:block;padding:0 10px;font-size:12px;line-height:32px;text-align:left;color:#333}.com-bubble-menu a:hover{color:#00a4ff;background-color:#F2F2F2}.com-bubble-menu li.actived a,.com-bubble-menu li.actived a:hover{color:#00a4ff;background-color:transparent;cursor:default}.c-bubble-msg{color:#333}.c-bubble-msg .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:5px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:73.98% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-bubble-warning-txt{font-size:12px;color:#ff7800;border-bottom:1px dashed #ff7800}.com-comment-edit{position:relative;margin-bottom:20px}.com-comment-edit .edit-body{position:relative;padding-left:34px;padding-right:110px}.com-comment-edit .com-avatar{position:absolute;left:0;top:5px;width:24px;height:24px;box-sizing:border-box;border:1px solid #e5e5e5}.com-comment-edit .edit-tip{position:absolute;left:34px;right:0;top:0;bottom:0;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e5e5e5;border-radius:2px;background-color:#f7f8fa;text-align:center;font-size:14px;line-height:35px;color:#888}.com-comment-edit .edit-textarea{-webkit-box-sizing:border-box;box-sizing:border-box;padding:6px 8px;width:100%;height:36px;border:1px solid #e5e5e5;border-radius:2px;background:#fff;font-size:14px;line-height:22px;resize:none;vertical-align:top;-webkit-appearance:none}.com-comment-edit .edit-textarea:hover{border-color:#00a4ff}.com-comment-edit .edit-textarea:focus{border-color:#00a4ff;background-color:#fff}.com-comment-edit .edit-btns{text-align:right;text-align:right;position:absolute;right:0;top:0}.com-comment-edit .edit-btns .c-btn{height:36px;line-height:34px;min-width:100px}.com-comment-edit .edit-btns .c-btn-link{min-width:0}.com-comment-edit .edit-text a{margin-right:5px}.com-comment-edit.hide-avatar .com-avatar{display:none}.com-comment-edit.hide-avatar .edit-body{padding-left:0}.com-comment-panel{padding:20px 0 20px 34px;border-bottom:1px solid #eee;position:relative}.com-comment-panel:first-child{padding-top:0}.com-comment-panel:first-child .com-comment-panel-author{top:0}.com-comment-panel-author{margin-bottom:10px;position:absolute;left:0;top:20px}.com-comment-panel-author.com-media{width:auto}.com-comment-panel-author .com-media-object{padding-right:10px;width:24px}.com-comment-panel-author .com-media-img{width:24px;height:24px;box-sizing:border-box;border:1px solid #e5e5e5}.com-comment-panel-author .com-media-body{width:auto}.com-comment-panel-author .com-media-title{margin-bottom:0;line-height:24px;color:#666}.com-comment-panel-author .com-media-title .weak-text{display:inline-block;vertical-align:middle;margin:0 5px;color:#999}.com-comment-panel-author .com-media-title .split{margin:0 10px}.com-comment-panel-author .com-media-title .split+.weak-text{margin-left:0}.com-comment-panel-author .com-media-title .split:before{content:'·'}.com-comment-panel-author .name{display:inline-block;vertical-align:middle;max-width:12em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.com-comment-panel .com-comment-panel-markdown{margin-top:0;line-height:24px;word-wrap:break-word;color:#333}.com-comment-panel .com-comment-panel-markdown p,.com-comment-panel .com-comment-panel-markdown.style-small p{margin-top:0}.com-comment-panel .com-comment-panel-markdown p:last-child,.com-comment-panel .com-comment-panel-markdown.style-small p:last-child{margin-bottom:0}.com-comment-panel-deleted-text{color:#999}.com-comment-panel-bd{position:relative}.com-comment-panel-time{position:absolute;right:0;top:0;font-size:12px;line-height:24px;color:#999}.com-comment-panel-operations{margin-top:15px}.com-comment-panel .com-opt-link{font-size:12px}.com-comment-panel .link-hidden{opacity:0;visibility:hidden;-webkit-transition:all .3s;transition:all .3s}.com-comment-panel-bd:hover .link-hidden,.com-comment-panel.editting>.com-comment-panel-bd .link-hidden{opacity:1;visibility:visible}.com-comment-panel .com-comment-edit{margin-bottom:0;margin-top:20px}.com-comment-panel-replies{margin-top:15px;padding:15px;background-color:#F7F8FA}.com-comment-panel.is-reply{margin-bottom:15px;padding:0 0 15px}.com-comment-panel.is-reply:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.com-comment-panel.is-reply .com-comment-panel-markdown{color:#666}.com-comment-popup .c-pages-wrap{margin-top:15px}.com-comment-popup .com-none{margin:20px auto}.com-comment-popup .com-none.with-bg{margin-bottom:0}.com-comment-popup .popup-hd{position:relative;margin-bottom:20px;margin-top:-30px;border-bottom:1px solid #e5e5e5;line-height:52px}.com-comment-popup .popup-title{font-size:16px;font-weight:400}.com-comment-popup .popup-extra{position:absolute;right:0;top:0;font-size:0}.com-comment-popup .popup-opt{display:inline-block;vertical-align:middle;color:#666;font-size:14px}.com-comment-popup .popup-opt .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:5px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:69.88% 55.669999999999995%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-comment-popup .popup-opt:hover{color:#00a4ff}.com-comment-popup .popup-hd:hover .icon{background-image:url(sprite/base-201911131148.svg);;background-position:3.8899999999999997% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-comment-panel-names .name{color:#00a4ff}.com-comment-panel-names .name:hover{text-decoration:underline}.com-comment-panel-names .weak-text{margin:0 5px}.com-comment-popup .popup-ft{text-align:center}.com-comment-popup .popup-ft a{display:inline-block;vertical-align:middle;line-height:52px;color:#333}.com-comment-popup .popup-ft a:hover{color:#00a4ff}.com-answer-panel .com-comment-popup{padding:30px}.com-answer-panel .com-comment-popup .popup-ft{margin-bottom:-20px}.com-comment-single-edit{margin:60px 0 44px}.com-comment-single-edit .edit-hd{position:relative;margin-bottom:10px;line-height:30px}.com-comment-single-edit .edit-title{font-size:20px;color:#999;font-weight:400}.com-comment-single-edit .edit-icon{display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-right:10px;width:22px;height:22px;background-image:url(sprite/base-201911131148.svg);;background-position:75.31% 83.62%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.com-comment-single-edit .edit-count{position:absolute;right:0;top:0;font-size:20px;color:#000}.com-comment-single-edit .edit-count-num{color:#00a4ff}.com-comment-single-edit .edit-body{position:relative}.com-comment-single-edit .edit-textarea{box-sizing:border-box;padding:10px;width:100%;height:90px;border:1px solid #e5e5e5;background-color:#fff;resize:vertical;font-size:14px;line-height:1.5}.com-comment-single-edit .edit-textarea:focus{border-color:#00a4ff}.com-comment-single-edit .edit-tip{position:absolute;left:0;top:0;box-sizing:border-box;width:100%;height:100%;border:1px solid rgba(157,157,157,.18);background-color:#f7f8fa;font-size:16px;line-height:22px;text-align:center;color:#999}.com-comment-single-edit .edit-tip:before{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.com-comment-single-edit .edit-tip a{color:#00a4ff;font-weight:600}.com-comment-single-edit .edit-btns{text-align:right;margin-top:13px}.c-msg.com-comment-msg{margin-bottom:40px;margin-top:-10px}.com-avatar{display:inline-block;vertical-align:middle;width:32px;height:32px;border-radius:50%;background-size:cover;background-position:center;overflow:hidden}.com-avatar .avatar-text{position:absolute;left:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.6);font-size:14px;line-height:32px;color:#fff;text-align:center}.com-avatar .avatar-file{position:absolute;left:0;top:0;width:100%;height:100%;cursor:pointer;opacity:0}.com-media{margin-bottom:20px;display:table;table-layout:fixed;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.com-media-object{display:table-cell;vertical-align:top;padding-right:20px;-webkit-box-sizing:content-box;box-sizing:content-box;width:40px}.com-media-img{display:block;width:40px;height:40px;border-radius:50%}span.com-media-img{background-size:cover;background-position:center center}.com-media-body{display:table-cell;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.com-media-title{font-size:14px;font-weight:400;line-height:18px;color:#000;margin-bottom:2px}.com-media-title a{color:inherit}.com-media-title a:hover{color:#00a4ff;text-decoration:none}.com-media-desc{font-size:12px;line-height:20px;color:#888}.com-media-desc-item{margin-right:25px;color:inherit}a.com-media-desc-item:hover{color:#00a4ff;text-decoration:none}.com-article-media{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;height:255px;border:1px solid #e5e5e5;overflow:hidden}.com-article-media-object{padding:0;height:auto;width:170px}.com-article-media-object .com-media-img{width:100%;height:253px;border-radius:0}.com-article-media-body{position:relative;padding:25px 30px}.com-article-media-body>.com-media-title{margin-bottom:10px;font-size:18px;line-height:1.5;color:#000}.com-article-media-body>.com-media-title a{display:block;display:-webkit-box;max-height:54px;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:inherit}.com-article-media-body>.com-media-title a:hover{color:#00a4ff}.com-article-media-body>.com-media-desc{font-size:14px;line-height:24px;color:#666}.com-article-media-body>.com-media-desc,.com-article-media-body>.com-media-desc a{display:block;display:-webkit-box;max-height:72px;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical;color:inherit}.com-article-media-body>.com-media-desc a:hover{color:#00a4ff}.com-article-media-source{position:absolute;left:20px;right:20px;bottom:20px;font-size:0}.com-article-media-source .com-avatar{margin-right:15px}.com-article-media-source .source-content{display:inline-block;vertical-align:middle;color:#999;line-height:20px;white-space:nowrap}.com-article-media-source .source-content a{display:inline-block;vertical-align:middle;color:#666}.com-article-media-source .source-content a:hover{color:#00a4ff}.com-article-media-source .source-content p{margin-top:2px}.com-article-media-source .author-name{max-width:12em;overflow:hidden;text-overflow:ellipsis;cursor:pointer;font-size:14px}.com-article-media-source .author-name:hover{color:#00a4ff}.com-article-media-source .com-verification{top:-1px;margin-left:5px;margin-right:0}.com-article-media-source .com-emblem-list{margin-left:5px}.com-article-media-source p{font-size:14px}.com-article-media-source .column-name{position:relative;top:-1px;max-width:14em;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.com-article-media-source .column-name:hover{color:#00a4ff}.com-article-media-source .com-operations{position:absolute;right:0;bottom:0;white-space:nowrap}.com-article-media-source .com-opt-link{margin-right:0;margin-left:20px}.com-article-media.without-object{height:215px}.com-article-media.without-object .com-media-body{padding:20px}.com-article-media.without-object .com-opt-link{color:#666}.com-article-media.without-object .com-i-view{background-image:url(sprite/base-201911131148.svg);;background-position:26.02% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-article-media.without-object .column-name{color:#00a4ff}.com-article-media.without-object .column-name:hover{-webkit-box-shadow:inset 0 -1px #00a4ff;box-shadow:inset 0 -1px #00a4ff}.com-column-media{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:17px 30px 0 84px;height:88px;border:1px solid #e5e5e5;background-color:rgba(215,216,217,.1);-webkit-transition:-webkit-box-shadow .2s ease,-webkit-transform .2s ease;transition:-webkit-box-shadow .2s ease,-webkit-transform .2s ease;transition:box-shadow .2s ease,transform .2s ease;transition:box-shadow .2s ease,transform .2s ease,-webkit-box-shadow .2s ease,-webkit-transform .2s ease}.com-column-media:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 0 6px 0 rgba(0,0,0,.08),0 4px 6px 0 rgba(0,0,0,.1);box-shadow:0 0 6px 0 rgba(0,0,0,.08),0 4px 6px 0 rgba(0,0,0,.1)}.com-column-media .com-avatar{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;left:20px;top:50%;margin-top:-24px;width:48px;height:48px}.com-column-media-title{margin-bottom:4px;font-size:18px;font-weight:400;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-column-media-desc{font-size:0;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-column-media-desc .data{display:inline-block;vertical-align:middle;font-size:14px}.com-column-media-tag{position:absolute;right:0;top:0;z-index:2;width:54px;height:54px;font-size:0;background-image:url(sprite/base-201911131148.svg);;background-position:67.33% 0.22999999999999998%;background-size:933.3333333333334% 911.1111111111111%;;background-repeat:no-repeat}.com-column-media2{position:relative;padding-bottom:30px;margin-bottom:30px;border-bottom:1px solid #e5e5e5}.com-column-media2 .com-media-object{vertical-align:middle;width:48px;padding-right:15px}.com-column-media2 .com-media-img{width:48px;height:48px}.com-column-media2 .com-media-body{position:relative;padding-right:180px;vertical-align:middle}.com-column-media2 .com-column-media-title{margin-bottom:2px}.com-column-media2 .com-column-media-title a{display:block;color:inherit;overflow:hidden;text-overflow:ellipsis}.com-column-media2 .com-column-media-title em{font-weight:400;color:#ff7200}.com-column-media2 .com-column-media-title a:hover{color:#00a4ff}.com-column-media2 .com-column-media-desc{font-size:0}.com-column-media2 .com-column-media-desc .data{display:inline-block;vertical-align:middle;font-size:14px}.com-column-media2 .btn-follow,.com-column-media2 .c-dropdown-link{padding:0 10px;min-width:80px;height:28px;line-height:26px;font-size:12px;vertical-align:middle}.com-column-media2 .c-dropdown{margin-left:5px}.com-column-media2 .c-dropdown-link{min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box}.com-column-media2 .c-dropdown-link .caret{top:50%;margin-top:-8px}.com-column-media2 .com-column-media-opt{position:absolute;right:0;top:50%;margin-top:-18px}.com-column-media2.without-opts .com-media-body{padding-right:0}.com-q-a-list{margin-bottom:-15px}.com-q-a-media{display:block;position:relative;margin-bottom:15px;padding-left:60px;color:#333}.com-q-a-media .media-type{position:absolute;left:0;top:0;width:45px;height:30px;background-color:#EDEFF2;border-radius:2px;text-align:center;line-height:30px;font-size:12px;color:#666}.com-q-a-media .media-type.answer{background-color:rgba(0,164,255,.15);color:#00a4ff}.com-q-a-media .media-title{font-size:18px;line-height:30px;font-weight:400;color:#000}.com-q-a-media .media-title-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.com-q-a-media:hover .media-title{color:#00a4ff}.com-article-panel{-webkit-box-sizing:border-box;box-sizing:border-box;display:table;table-layout:fixed;width:100%;border-bottom:1px solid #e5e5e5;padding-bottom:20px;margin-bottom:20px}.com-article-panel.first{padding-top:0}.com-article-panel-body{position:relative;display:table-cell;vertical-align:middle}.com-article-panel-object{display:table-cell;vertical-align:middle;padding-left:30px;width:160px}.com-article-panel-object .com-media-img{display:block;width:160px;height:120px;border-radius:0;background-size:cover;background-position:center}.com-article-panel-author{margin-bottom:10px;color:#999;font-size:0}.com-article-panel-author .column-name,.com-article-panel-author>a{display:inline-block;vertical-align:middle;margin:0 5px;color:inherit;font-size:14px}.com-article-panel-author>span{display:inline-block;vertical-align:middle;font-size:14px}.com-article-panel-author>a:first-child{margin-left:0}.com-article-panel-author a:hover{color:#00a4ff}.com-article-panel-author .com-verification{margin-left:-2px;margin-right:5px;font-size:14px}.com-article-panel-author .column-wrap{font-size:0}.com-article-panel-author .author-name,.com-article-panel-author .column-name{max-width:16em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-article-panel-author .subscibe-btn{margin:0 5px;vertical-align:middle;transition:opacity .3s;opacity:0}.column-wrap.hover .subscibe-btn,.column-wrap:hover .subscibe-btn{opacity:1}.com-article-panel-time{position:absolute;right:0;top:0;color:#999}.com-article-panel-title{margin-bottom:10px;font-size:18px;line-height:27px;color:#000;font-weight:400}.com-article-panel-title a{display:block;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-article-panel-desc em,.com-article-panel-title em{font-weight:inherit;color:#ff7200}.com-article-panel-title a:hover{color:#00a4ff}.com-article-panel-title.with-tag{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;padding-left:60px}.com-article-panel-title.with-tag .com-article-tag-bubble{position:absolute;left:0;top:1px}.com-article-tag{display:inline-block;vertical-align:middle;padding:0 5px;font-size:12px;line-height:16px;border:1px solid #00a4ff;border-radius:2px;color:#00a4ff}.com-article-panel-desc{line-height:24px;color:#666;word-wrap:break-word}.com-article-panel-desc a{color:inherit}.com-article-panel-desc a:hover{color:#00a4ff}.com-article-panel-operations{margin-top:10px}.com-article-panel-operations .extra-part{display:none}.com-article-panel:hover .com-article-panel-operations .extra-part{display:block}.com-article-panel-extra-opts{display:table-cell;width:0;position:relative}.com-article-panel-extra-opts .opt-inner{position:absolute;left:0;top:0}.com-article-panel-extra-opts .c-btn{margin-bottom:10px;margin-left:20px}.com-article-panel-infos{margin-top:20px;font-size:0}.com-article-panel-info{display:inline-block;vertical-align:middle;font-size:14px;line-height:1.1;color:#999}.com-article-panel-info:before{content:'';display:inline-block;vertical-align:middle;position:relative;top:-1px;margin:0 10px;width:3px;height:3px;border-radius:50%;background-color:#999}.com-article-panel-info:first-child:before{display:none}.com-article-panel-order{position:relative;display:table-cell;padding-top:3px;width:100px}.com-ranking-order{display:inline-block;vertical-align:middle;width:64px;height:64px;font-size:0}.com-ranking-order.order-1{background-image:url(sprite/base-201911131148.svg);;background-position:15.229999999999999% 46.5%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-2{background-image:url(sprite/base-201911131148.svg);;background-position:53.86% 31.069999999999997%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-3{background-image:url(sprite/base-201911131148.svg);;background-position:53.86% 15.65%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-4{background-image:url(sprite/base-201911131148.svg);;background-position:53.86% 0.22999999999999998%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-5{background-image:url(sprite/base-201911131148.svg);;background-position:0.22999999999999998% 31.069999999999997%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-6{background-image:url(sprite/base-201911131148.svg);;background-position:38.86% 0.22999999999999998%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-7{background-image:url(sprite/base-201911131148.svg);;background-position:15.229999999999999% 15.65%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-8{background-image:url(sprite/base-201911131148.svg);;background-position:0.22999999999999998% 15.65%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-9{background-image:url(sprite/base-201911131148.svg);;background-position:15.229999999999999% 31.069999999999997%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-ranking-order.order-10{background-image:url(sprite/base-201911131148.svg);;background-position:0.22999999999999998% 46.5%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-tag-media{position:relative;padding-bottom:30px;margin-bottom:30px;border-bottom:1px solid #e5e5e5}.com-tag-media .com-media-object{padding-right:10px;width:48px}.com-tag-media .com-media-img{width:48px;height:48px}.com-tag-media .com-media-title{margin-bottom:2px;font-size:18px;line-height:25px}.com-tag-media .com-media-title a{display:block}.com-tag-media .com-media-body{position:relative}.com-tag-media .com-media-desc{font-size:14px}.com-tag-media .com-tag-media-opt{position:absolute;right:0;top:50%;margin-top:-18px}.com-tag-media .c-btn{padding:0 10px;min-width:90px;height:30px;line-height:30px;font-size:12px}.com-tag-media .c-btn-hole,.com-tag-media .c-btn-weak{line-height:28px}.com-lab-gallery{display:block;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;height:278px;min-width:240px;font-size:14px;color:#444;line-height:24px}.com-lab-gallery .inner{position:absolute;width:100%;background:#fff;border-radius:4px;height:278px;-webkit-box-shadow:0 1px 3px rgba(0,0 ,0,.1),0 2px 2px rgba(0,0 ,0,.2);box-shadow:0 1px 3px rgba(0,0 ,0,.1),0 2px 2px rgba(0,0 ,0,.2)}.com-lab-gallery:hover{text-decoration:none;-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}.com-lab-gallery:hover .inner{-webkit-box-shadow:0 3px 6px rgba(0,0 ,0,.2);box-shadow:0 3px 6px rgba(0,0 ,0,.2)}.com-lab-gallery-summary{-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;overflow:hidden;position:relative}.com-lab-gallery-summary .logo-bg{position:absolute;width:100%;height:144px;background:url(cssComponents/img/card-bg.png) no-repeat;background-size:cover;border-radius:4px 4px 0 0}.com-lab-gallery-summary .logo-mask{position:absolute;height:144px;width:100%;top:0;border-radius:4px 4px 0 0}.com-lab-gallery-summary .logo-container{position:absolute;height:144px;width:100%;top:0}.com-lab-gallery-summary .logo-container .logo{width:56%;height:80px;margin:32px 22%;text-align:center;background-repeat:no-repeat;background-size:contain;background-position:center}.com-lab-gallery-summary .logo-container img{height:80px;width:auto;max-width:56%}.com-lab-gallery-summary .info-container{margin-top:144px;padding:18px;height:100px;line-height:26px}.com-lab-gallery-summary .hint{width:100%;height:24px;background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.8)),to(rgba(0,0,0,0)));background-image:linear-gradient(90deg,rgba(0,0,0,.8),rgba(0,0,0,0));position:absolute;top:120px;color:#fff;padding:0 20px;font-size:12px;line-height:24px}.com-lab-gallery-summary .title{font-size:16px;font-weight:500;line-height:22px}.com-lab-gallery-summary .owner{color:rgba(0,0,0,.54)}.com-lab-gallery-summary .desc{position:absolute;bottom:18px;line-height:16px;color:rgba(0,0,0,.54);overflow:hidden;white-space:nowrap}.com-lab-gallery-summary .desc-item{display:inline-block;padding-right:14px;color:rgba(0,0,0,.54)}.com-lab-gallery-summary .desc-item span{margin-left:20px;line-height:16px}.com-lab-gallery-summary .desc-item i{display:inline-block;position:absolute;line-height:16px;width:16px;height:16px}.com-lab-gallery,.com-lab-gallery .inner,.com-lab-gallery-summary{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}.com-lab-i-level{background-image:url(sprite/base-201911131148.svg);;background-position:18.65% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-lab-i-duration{background-image:url(sprite/base-201911131148.svg);;background-position:66.60000000000001% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-lab-i-user{background-image:url(sprite/base-201911131148.svg);;background-position:40.78% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-datas{color:#999;font-size:0}.com-data{display:inline-block;vertical-align:middle;font-size:12px}.com-user-media{padding-bottom:30px;margin-bottom:30px;border-bottom:1px solid #e5e5e5}.com-user-media .com-media-object{padding-right:15px;width:48px;vertical-align:middle}.com-user-media .com-media-img{width:48px;height:48px}.com-user-media .com-media-title{position:relative;box-sizing:border-box;display:inline-block;vertical-align:middle;padding-right:20px;margin-bottom:3px;max-width:100%;font-size:18px;line-height:1.5}.com-user-media .com-media-title>a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-user-media .com-media-title .com-verification{position:absolute;right:0;top:50%;margin-top:-9px;margin-right:0}.com-user-media .com-media-title em{font-weight:inherit;color:#ff7200}.com-user-media .com-media-desc{margin-bottom:4px;color:#666;font-size:14px;word-wrap:break-word;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:3em}.com-user-media .com-media-body{position:relative;padding-right:180px}.com-user-media-opts{position:absolute;right:0;top:50%;margin-top:-17px;font-size:0}.com-user-media-opts .c-btn{padding:0 10px;margin-left:10px;min-width:80px;height:28px;line-height:26px;font-size:12px}.com-lab-media{margin-bottom:0;padding:20px;background-color:#f7f8fa}.com-lab-media .com-media-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-lab-honor{background:#f7f8fa}.com-lab-honor .com-media-object{padding-right:0;width:40px;height:40px;background-color:grey;vertical-align:middle}.com-lab-honor .com-media-img{width:auto;height:auto;max-width:100%;max-height:100%}.com-lab-honor .com-media-body{padding:0 10px;vertical-align:middle}.com-lab-honor .com-media-title{font-size:14px;color:#333;margin-bottom:0}.com-lab-with-status{-webkit-box-sizing:border-box;box-sizing:border-box;display:table;table-layout:fixed;width:100%;padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid #e5e5e5}.com-lab-with-status .lab-cell{display:table-cell;vertical-align:middle;padding-left:20px}.com-lab-with-status .lab-cell:first-child{padding-left:0}.com-lab-with-status .lab-cell.img{width:48px}.com-lab-with-status .lab-img{width:48px;height:48px;background-size:contain;background-position:center}.com-lab-with-status .lab-title{font-size:18px;font-weight:400;color:#000;word-wrap:break-word}.com-lab-with-status .lab-cell.process{width:180px}.com-lab-with-status .lab-cell.operation{width:80px}.com-lab-with-status a{color:#00A4FF}.com-lab-with-status a:hover{border-bottom:1px solid #00A4FF}.com-process{position:relative;height:18px;background-color:#9B9B9B;border-radius:9px}.com-process .process-bar{display:block;background-color:#00A4FF;border-radius:9px;height:100%}.com-process .process-text{position:absolute;left:0;top:0;width:100%;font-size:12px;line-height:18px;color:#fff;text-align:center}.com-level-details>li{position:relative;padding:0 140px 0 60px;line-height:30px}.com-level-details>li+li{margin-top:15px}.com-level-details .detail-score{position:absolute;left:0;top:50%;margin-top:-15px;width:45px;height:30px;border-radius:2px;background-color:rgba(0,164,255,.15);font-size:14px;font-weight:700;text-align:center;color:#00a4ff}.com-level-details .detail-score.deduct{background-color:#fcecec;color:#b43537}.com-level-details .detail-action{padding:3px 0;color:#999;line-height:24px}.com-level-details .detail-action-target{margin:0 5px;color:#000}.com-level-details .detail-action-target:hover{color:#00a4ff}.com-level-details .detail-action .ellipsis{position:relative;top:-1px;display:inline-block;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:12em}.com-level-details .detail-action .ellipsis.post{max-width:22em}.com-level-details .detail-action .ellipsis.post-recom{max-width:14em}.com-level-details .detail-action .ellipsis.post-original{max-width:12em}.com-level-details .detail-action .ellipsis.post-delete{max-width:19em}.com-level-details .detail-action .ellipsis.post-admin-delete,.com-level-details .detail-action .ellipsis.post-reject{max-width:16em}.com-level-details .detail-action .ellipsis.post-pass{max-width:18em}.com-level-details .detail-action .ellipsis.translate-accept{max-width:17em}.com-level-details .detail-time{position:absolute;right:0;top:50%;margin-top:-15px;color:#999}.com-adpanel.small{height:60px;font-size:16px}.com-adpanel.in-sidebar{margin-bottom:15px;height:auto;padding-top:35.48387097%}.com-adpanel.in-sidebar .text,.com-adpanel.in-sidebar:before{display:none}.com-author-panel{-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px;height:242px;border:1px solid #e5e5e5;text-align:center}.com-author-panel .com-avatar{display:block;margin:0 auto 15px;width:80px;height:80px}.com-author-panel .author-name{margin-bottom:6px;font-size:18px;font-weight:400}.com-author-panel .author-name a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#333}.com-author-panel .author-name a:hover{color:#00a4ff}.com-author-panel .author-desc{margin-bottom:17px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-author-panel .follow-btn{display:block;margin:0 auto;padding:0 10px;min-width:90px;height:30px;line-height:28px;border:1px solid #e5e5e5;color:#333;background-color:transparent}.com-author-panel .follow-btn .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:9px;width:10px;height:10px;background-image:url(sprite/base-201911131148.svg);;background-position:61.339999999999996% 52.28%;background-size:5040% 4920%;;background-repeat:no-repeat}.com-author-panel .follow-btn:hover{background-color:#00a4ff;color:#fff;border-color:#00a4ff}.com-author-panel .follow-btn:hover .icon{background-image:url(sprite/base-201911131148.svg);;background-position:63.77% 52.28%;background-size:5040% 4920%;;background-repeat:no-repeat}.com-author-panel .follow-btn.c-btn-disabled,.com-author-panel .follow-btn.c-btn-disabled:hover{border-color:#d5d7de;background-color:#d5d7de;color:#fff}.com-author-panel .follow-btn.c-btn-disabled .icon,.com-author-panel .follow-btn.c-btn-disabled:hover .icon{background-image:url(sprite/base-201911131148.svg);;background-position:63.77% 52.28%;background-size:5040% 4920%;;background-repeat:no-repeat}[class*=' c-media-bg'],[class^=c-media-bg]{display:block;background-repeat:no-repeat;background-position:center;background-size:contain}.c-media-bg32{height:32px}.c-media-bg48{height:48px}.c-media-bg64{height:64px}.c-media-bg144{height:144px}.c-media-topicon-alignleft [class*=' c-media-bg'],.c-media-topicon-alignleft [class^=c-media-bg]{background-position:left center}.c-media-extra-infos{margin-bottom:-20px;border-top:1px solid #e5e5e5;font-size:0;height:54px;line-height:54px}.c-media-extra-info{display:inline-block;margin-left:20px;color:#666;font-size:14px}.c-media-extra-info:first-child{margin-left:0}.c-media-extra-info .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:8px;width:16px;height:16px}.c-media-extra-info .icon.step{background-size:3150% 3075%;;background-position:77.66% 92.86%;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat}.c-media-extra-info .icon.time{background-size:3150% 3075%;;background-position:66.60000000000001% 92.86%;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat}.c-media-extra-info .icon.video{background-size:3150% 3075%;;background-position:44.47% 92.86%;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat}.c-media-extra-info .icon.level{background-size:3150% 3075%;;background-position:18.65% 96.64%;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat}.c-media-extra-info .icon.view{background-size:3150% 3075%;;background-position:40.78% 92.86%;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat}.c-media-skin-lab{padding:25px}.c-media-skin-lab .c-media-body{height:118px}.c-media-skin-lab .c-media-heading,.c-media-skin-lab .c-media-info{word-wrap:break-word;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:3em}.c-media-skin-lab:hover .c-media-heading{color:#333}.c-media-skin-lab .c-media-extra-infos{margin-bottom:-25px}.c-media-skin-lab .c-media-extra-info{margin-left:15px}.c-media-skin-lab .c-media-extra-info:first-child{margin-left:0}.com-media-ask{-webkit-box-sizing:border-box;box-sizing:border-box;padding:30px;height:230px;border:1px solid #e5e5e5}.com-media-ask-title{margin-bottom:30px;font-size:18px;line-height:1.5;font-weight:400;color:#000}.com-media-ask-title a{display:block;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-media-ask-title a:hover{color:#00a4ff}.com-media-ask-author{margin-bottom:15px}.com-media-ask-author .com-media-object{padding-right:13px;width:32px}.com-media-ask-author .com-media-img{width:32px;height:32px}.com-media-ask-author .com-media-body{vertical-align:middle}.com-media-ask-author .com-media-title{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;padding-right:15px;max-width:100%;margin-bottom:0}.com-media-ask-author .com-verification{position:absolute;right:0;top:3px;margin-right:0}.com-media-ask-author .com-media-title a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-media-ask-desc{margin-bottom:10px;font-size:14px;line-height:24px;color:#666;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;height:48px;word-wrap:break-word}.com-media-ask-desc a{color:inherit}.com-media-ask-desc a:hover{color:#00a4ff}.com-doc-panels{margin-bottom:-10px;margin-left:-5px;margin-right:-5px}.com-doc-panels [class*=c-g-]{margin-bottom:10px;padding-left:5px;padding-right:5px}.com-doc-panel{display:block;position:relative;box-sizing:border-box;padding:15px;height:80px;border:1px solid #e5e5e5;font-size:0}.com-doc-panel:after{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.com-doc-panel .panel-title{box-sizing:border-box;padding-left:75px;display:inline-block;vertical-align:middle;max-width:98%;font-size:16px;line-height:22px;color:#000;word-wrap:break-word}.com-doc-panel em{color:#ff7200}.com-doc-panel .panel-title .ellipsis{display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:44px}.com-doc-panel .icon{position:absolute;left:15px;top:50%;margin-top:-15px;width:60px;height:30px;background-position:center;background-size:contain;background-repeat:no-repeat}li:last-child>.com-related-doc{margin-bottom:0;padding-bottom:0;border-bottom:none}.com-related-doc{margin-bottom:20px;padding-bottom:20px;border-bottom:1px solid #e5e5e5;word-wrap:break-word}.com-doc-crumb{margin-bottom:15px;font-size:0}.com-doc-crumb .crumb-icon{display:inline-block;vertical-align:middle;margin-right:10px;width:16px;height:16px;background-size:contain;background-position:center center;background-repeat:no-repeat}.com-doc-crumb .crumb-item{display:inline-block;vertical-align:middle;color:#999;font-size:12px}.com-doc-crumb a.crumb-item:hover{color:#00a4ff}.com-doc-crumb .crumb-split{display:inline-block;vertical-align:middle;margin:0 10px;width:0;height:0;border-style:solid;border-color:transparent #999;border-width:3px 0 3px 4px}.com-related-doc .doc-title{margin-bottom:10px;font-size:18px;font-weight:400;color:#000}.com-related-doc .doc-desc a,.com-related-doc .doc-title a{color:inherit}.com-related-doc .doc-desc a:hover,.com-related-doc .doc-title a:hover{color:#00a4ff}.com-related-doc .doc-desc{font-size:14px}.com-related-doc em{color:#ff7200}.com-activity-panel{-webkit-box-sizing:border-box;box-sizing:border-box;display:table;table-layout:fixed;width:100%;border-bottom:1px solid #e5e5e5;padding-bottom:20px;margin-bottom:20px}.com-activity-panel-body{position:relative;display:table-cell;vertical-align:top}.com-activity-panel-object{display:table-cell;vertical-align:top;padding-left:30px;width:160px}.com-activity-panel-object .com-media-img{display:block;width:160px;height:120px;border-radius:0;background-size:cover;background-position:center}.com-activity-panel-title{font-size:18px;line-height:1.5;color:#000;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;height:54px}.com-activity-panel-title a{display:block;color:inherit}.com-activity-panel-title em{font-weight:inherit;color:#00a4ff}.com-activity-panel-title a:hover{color:#00a4ff}.com-activity-panel-infos{margin-top:15px;color:#666;word-wrap:break-word}.com-activity-panel-infos li+li{margin-top:5px}.com-activity-panel.simple .com-activity-panel-title{height:auto;max-height:54px}.com-intro-infos{margin-top:15px}.com-intro-infos .intro-info{margin-bottom:10px}.com-intro-infos .intro-info-inner{position:relative;padding-left:21px}.com-intro-infos .intro-info-icon{position:absolute;left:0;top:1px;width:16px;height:16px}.com-intro-infos .intro-info-icon.address{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 62.39%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-intro-infos .intro-info-icon.job{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 73.74000000000001%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-intro-infos .intro-info-icon.education{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 69.96%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-intro-infos .intro-info-icon.blog{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 66.18%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-intro-infos .intro-info-icon.skill{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 77.52%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-intro-infos .intro-info-text{display:block;font-size:12px;vertical-align:middle;word-wrap:break-word;color:#888}.com-intro-infos .com-verification{top:-2px;margin:0 0 0 5px}.com-ranking-group{position:relative;margin-bottom:60px;padding:30px 0;font-size:0;background-color:#fff}.com-ranking-group-hd{box-sizing:border-box;display:inline-block;vertical-align:top;padding:0 30px;width:28%;text-align:center}.com-ranking-group-bd{box-sizing:border-box;display:inline-block;vertical-align:top;padding-right:30px;width:72%}.com-ranking-group .com-ranking-order{position:absolute;left:0;top:0}.com-ranking-owner{text-align:center}.com-ranking-owner .com-avatar{box-sizing:border-box;display:block;margin:0 auto 25px;width:80px;height:80px;border:2px solid #e5e5e5}.com-ranking-owner .owner-name{margin-bottom:25px;font-size:18px;color:#000;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-ranking-owner .owner-name a{color:inherit}.com-ranking-owner .owner-name a:hover{color:#00a4ff;text-decoration:none}.com-ranking-owner .owner-infos{margin-bottom:15px;font-size:0}.com-ranking-owner .owner-infos>li{display:inline-block;vertical-align:middle;font-size:14px;line-height:1.1;color:#4a4a4a}.com-ranking-owner .owner-infos>li:before{content:'';display:inline-block;vertical-align:middle;position:relative;top:-1px;margin:0 5px;width:3px;height:3px;border-radius:50%;background-color:#4A4A4A}.com-ranking-owner .owner-infos>li:first-child:before{display:none}.com-ranking-owner .com-tag-links{display:inline-block;vertical-align:middle;margin-bottom:12px;min-height:36px}.com-ranking-owner .c-btn{display:block;margin:0 auto;width:100%;max-width:200px}.com-ranking-owner .c-btn+.c-btn{margin-top:15px}.com-ranking-owner.author .com-avatar{position:relative;overflow:visible;margin-bottom:30px}.com-ranking-owner.author .author-level{position:absolute;left:50%;bottom:-5px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 8px;height:16px;background-color:#FC3;border-radius:8px;text-align:center;line-height:16px;font-size:12px;font-weight:700;color:#99661F;-ms-transform:translateX(-50%);transform:translateX(-50%)}.com-ranking-owner.author .owner-name{margin-bottom:10px}.com-ranking-owner.author .owner-infos{margin-bottom:30px}.com-ranking-owner.author .owner-infos>li{line-height:24px}.com-ranking-owner.author .com-intro-infos{margin-bottom:10px;min-height:73px}.com-ranking-owner.author .com-intro-infos .intro-info-inner{display:inline-block;vertical-align:middle}.com-ranking-owner.author .com-intro-infos .intro-info-text{text-align:left}.com-ranking-article-media{display:block;box-sizing:border-box;height:326px;border:1px solid #e5e5e5;background-color:#fff;overflow:hidden}.com-ranking-article-media .media-img{display:block;height:130px;background-repeat:no-repeat;background-position:center;background-size:cover}.com-ranking-article-media .media-body{padding:30px}.com-ranking-article-media .media-title{margin-bottom:10px;font-size:16px;line-height:27px;color:#000;font-weight:500;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:54px}.com-ranking-article-media:hover .media-title{color:#00a4ff}.com-ranking-article-media .media-desc{font-size:14px;line-height:24px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;max-height:72px}.com-tag-list{margin-right:-10px;margin-bottom:-10px;font-size:0}.com-tag{display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;padding:0 10px;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;height:30px;border-radius:15px;font-size:12px;line-height:28px;color:#444;border:1px solid #e5e5e5;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}a.com-tag:hover{text-decoration:none;color:#00a4ff;border-color:#00a4ff}.com-tag-group{margin-bottom:50px}.com-tag-group-hd{position:relative;padding-bottom:15px;border-bottom:1px solid #e5e5e5}.com-tag-group-icon{position:absolute;left:0;top:0;width:32px;height:32px}.com-tag-group-title{font-size:18px;line-height:1.5;font-weight:400;color:#000;word-wrap:break-word}.com-tag-group-icon~.com-tag-group-title{margin-bottom:5px;padding-left:42px;line-height:32px}.com-tag-group-bd{padding-top:20px}.com-grid-table{box-sizing:border-box;font-size:0}.com-grid-table-cell{display:inline-block;vertical-align:top;margin-right:50px;width:calc((100% - 101px)/ 3)}.com-grid-table-cell:last-child{margin-right:0}.com-media-service .c-media-body{margin-top:0}.com-media-service .c-media-heading{text-align:left}.com-media-service .c-media-info{height:3em}.com-media-service:hover{text-decoration:none}.com-media-service:hover .c-media-heading{color:#00a4ff}.com-none{margin:50px 0;text-align:center;color:#999}.com-none a{color:#00A4FF}.com-none a:hover{border-bottom:1px solid #00A4FF}.com-none [class*=com-i-],.com-none [class^=com-i-]{position:relative;top:-1px;margin-right:5px}.com-none.with-bg{padding:30px;background-color:#f7f8fa}.com-none.page{margin:100px auto;width:700px;background-color:transparent;text-align:center;color:#999}.com-none.page .none-icon{display:block;margin:0 auto 20px;width:64px;height:64px;background-image:url(sprite/base-201911131148.svg);;background-position:30.23% 31.069999999999997%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-none.page .primary-text{margin-bottom:10px;font-size:18px;color:#333}.com-none.page a{margin:0 5px;color:#00a4ff}.com-tag-links{position:relative;margin-bottom:17px;padding-left:20px;font-size:12px;color:#888}.com-tag-links .tag-icon{position:absolute;left:0;top:2px}.com-tag-links .com-i-tag{width:12px;height:12px;background-image:url(sprite/base-201911131148.svg);;background-position:11.59% 99.58%;background-size:4200% 4100%;;background-repeat:no-repeat}.com-tag-links a{color:#999}.com-tag-links a:hover{color:#00a4ff;text-decoration:none}.com-edit-operations{position:absolute;right:0;top:0;font-size:0;-webkit-transition:all .3s;transition:all .3s}.com-edit-operations .com-opt-link{font-size:12px}.com-edit-operations .ope-btn{display:inline-block;vertical-align:middle;border:none;background-color:transparent;margin-left:20px;font-size:14px;line-height:24px;color:#000;cursor:pointer}.com-edit-operations .ope-btn:hover{text-decoration:none;color:#00a4ff}.com-answer-panel{position:relative;padding-top:5px;padding-bottom:27px;margin-bottom:25px;border-bottom:1px solid #e5e5e5}.com-answer-panel.without-border{padding-bottom:0;border-bottom:none}.c-markdown-trigger{margin-top:20px;margin-bottom:17px}.c-markdown-trigger a:after{content:'';display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-left:3px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 3.9899999999999998%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-answer-panel-top-ope,.com-answer-panel-top-ope.com-operations{position:absolute;right:0;top:0;margin-top:0}.com-answer-panel-top-ope .com-opt-link{margin-right:0;margin-left:20px}.com-answer-panel-top-ope .c-bubble-trigger.com-operations-dropdown{position:relative}.c-markdown.com-answer-panel-markdown{color:#666}.com-answer-panel-operations{margin-top:15px;line-height:20px}.com-answer-panel-operations .link-trigger{font-size:14px;color:#00a4ff}.com-answer-panel-operations .link-trigger:hover{text-decoration:underline}.com-answer-panel-operations .link-trigger:after{content:'';display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-left:3px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 3.9899999999999998%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-answer-panel-operations .com-opt-link{font-size:12px}.com-answer-panel .com-answer-edit{margin-top:0}.com-answer-panel .com-comment-popup{margin-top:16px;padding:20px;border:1px solid #e5e5e5;background-color:#fff;border-radius:4px}.com-answer-panel-author,.com-answer-panel-author:last-child{float:left;width:auto;margin-bottom:10px}.com-answer-panel-author .com-media-object{padding-right:10px;width:24px}.com-answer-panel-author .com-media-img{width:24px;height:24px}.com-answer-panel-author .com-media-body{vertical-align:middle;font-size:0}.com-answer-panel-author .author-info{display:inline-block;vertical-align:middle;font-size:12px;color:#444}.com-answer-panel-author .author-info:before{content:'·';margin:0 3px}.com-answer-panel-author a.author-info:hover{text-decoration:none;color:#00a4ff}.com-answer-panel-author .author-info.name{max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-answer-panel-author .author-info.identity{max-width:302px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-answer-panel-author .author-info.time{color:#888}.com-answer-panel-author .author-info:first-child:before{display:none}.com-answer-panel .answer-tag{display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:1px;padding:0 4px;margin-left:10px;height:18px;font-size:12px;line-height:16px;border:1px solid #FF7200;border-radius:2px;color:#FF7200}.com-answer-panel .answer-tag.adopt{border-color:#00a4ff;color:#00a4ff}.com-answer-panel .answer-tag+.answer-tag{margin-left:5px}.com-answer-panel.with-bg{padding:15px;background-color:#f7f8fa;border-bottom:none;margin-bottom:0;margin-top:20px}.com-answer-panel.with-bg .com-media-summary .com-media-object{padding-right:0}.com-answer-panel.with-bg .rich-editor-toolbar{background-color:#fff}.com-answer-panel.with-bg .com-answer-edit .edit-btns{background-color:#f7f8fa}.com-answer-panel.with-bg .com-answer-panel-top-ope{right:20px;top:20px}.com-answer-panel.with-bg .com-answer-panel-top-ope .c-btn{font-size:12px;line-height:28px;height:30px;min-width:0}.com-answer-panel.with-bg .com-comment-panel-replies{background:0 0;padding:15px 0 0;border-top:1px solid #eee}.com-ask-panel{margin-bottom:25px;padding-bottom:25px;border-bottom:1px solid #f1f1ff}.com-ask-panel-hd{position:relative}.com-ask-panel-hd .ask-title{font-size:20px;color:#333;line-height:26px;font-weight:500}.com-ask-panel-hd .ask-title a{display:block;display:-webkit-box;color:inherit;max-height:54px;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.com-ask-panel-hd .ask-title em{font-weight:inherit;color:#ff7200}.com-ask-panel-hd .ask-title a:hover,.com-ask-panel-hd .ask-title a:hover .com-text-highlight{color:#00a4ff;text-decoration:none}.com-ask-panel-infos{position:relative;margin-top:5px}.com-ask-panel-infos.with-extra{padding-right:280px}.com-ask-panel-infos .com-tag-links{margin-bottom:0}.com-ask-panel-infos .extra-part{position:absolute;right:0;top:0;font-size:0}.com-ask-panel-infos .com-text-info{display:inline-block;vertical-align:middle;font-size:12px}.com-ask-panel-infos .ask-author{display:inline-block;vertical-align:middle;max-width:130px;color:#000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.com-ask-panel-infos .ask-author:hover{text-decoration:none;color:#00a4ff}.com-ask-panel-infos .ask-split{display:inline-block;vertical-align:middle;margin:0 10px;width:4px;height:4px;background-color:#888;border-radius:50%}.c-markdown.com-ask-panel-markdown{margin-top:10px;margin-bottom:0}.com-ask-panel-operations{margin-top:10px}.com-ask-panel-follow{position:absolute;right:0;top:10px}.com-ask-panel-follow .c-btn{padding:0 10px;min-width:90px}.com-ask-panel.has-follow .com-ask-panel-hd{padding-right:100px}.com-ask-panel-hd .forbidden-tip{font-size:14px;color:#666;font-weight:400}.com-ask-panel-update{display:inline-block;vertical-align:0;font-size:14px;line-height:20px;color:#00a4ff;font-weight:500}.com-ask-panel-update:before{content:'';display:inline-block;vertical-align:1px;margin:0 10px;width:6px;height:6px;background-color:#00a4ff;border-radius:50%}.com-ask-panel-hd{padding-left:61px;min-height:46px}.com-ask-panel-hd .ask-operations{display:block;position:absolute;left:0;top:3px}.com-ask-panel-hd .answer-btn{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 5px 0;width:46px;height:46px;border-radius:2px;background-color:#E1EEFA;line-height:1.2;color:#00a4ff;text-align:center;cursor:pointer}.com-ask-panel-hd .answer-btn:hover{text-decoration:none}.com-ask-panel-hd .answer-btn .num{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px}.com-ask-panel-hd .answer-btn .name{font-size:12px}.com-ask-panel-hd .answer-btn.none-answer{background-color:#F3F4F5;color:#444}.com-ask-panel-hd.without-panel-infos .ask-title{display:table-cell;vertical-align:middle;height:54px}.com-ask-panel-hd.without-panel-infos+.com-answer-panel.with-bg{margin-top:15px}.com-ask-panel.without-operations .com-ask-panel-hd{padding-left:0;min-height:0}.com-ask-panel.without-operations .com-ask-panel-hd .ask-title{display:block;height:auto}.com-ask-panel-author{margin-top:10px;margin-bottom:0}.com-ask-panel-author .com-media-object{padding-right:10px;width:24px}.com-ask-panel-author .com-media-img{width:24px;height:24px}.com-ask-panel-author .com-media-body{vertical-align:middle;font-size:0}.com-ask-panel-author .author-info{display:inline-block;vertical-align:middle;font-size:12px;color:#444}.com-ask-panel-author .author-info:before{content:'·';margin:0 3px}.com-ask-panel-author a.author-info:hover{text-decoration:none;color:#00a4ff}.com-ask-panel-author .author-info.name{max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-ask-panel-author .author-info.identity{max-width:302px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-ask-panel-author .author-info.time{color:#888}.com-ask-panel-author .author-info:first-child:before{display:none}.com-log-panel-hd{margin-bottom:15px;color:#888}.com-log-panel-hd:after{content:'';display:table;clear:both}.com-log-panel-hd .log-detail{float:left;width:70%}.com-log-panel-hd .log-time{float:right;max-width:30%}.com-log-panel-hd .log-time.fl{float:left}.com-forbidden{margin:0 auto;padding:20px;background-color:#f7f8fa;text-align:center}.com-forbidden-cnt{position:relative;display:inline-block;vertical-align:middle;padding-left:34px;max-width:100%;text-align:left}.com-forbidden .forbidden-icon{position:absolute;top:-1px;left:0;width:24px;height:24px;background-image:url(sprite/base-201911131148.svg);;background-position:56.04% 83.97%;background-size:2100% 2050%;;background-repeat:no-repeat}.com-forbidden a{margin:0 5px;color:#00a4ff}.com-forbidden.page{margin:100px auto;width:700px;background-color:transparent}.com-forbidden.page .com-forbidden-cnt{text-align:center;color:#999}.com-forbidden.page .forbidden-icon{position:static;display:block;margin:0 auto 20px;width:64px;height:64px;background-image:url(sprite/base-201911131148.svg);;background-position:38.86% 15.65%;background-size:787.5% 768.75%;;background-repeat:no-repeat}.com-forbidden.page .primary-text{margin-bottom:10px;font-size:18px;color:#333}.c-bubble-trigger.com-operations-dropdown{position:absolute}.c-bubble-trigger.com-operations-dropdown .c-bubble-trigger-btn{-webkit-box-sizing:border-box;box-sizing:border-box;width:60px;font-size:0;color:#fff}.c-bubble-trigger.com-operations-dropdown .c-bubble-trigger-btn:after{right:0}.c-bubble-trigger.com-operations-dropdown .c-bubble{left:auto;right:0;margin-left:0;margin-top:3px;text-align:right}.c-bubble-trigger.com-operations-dropdown .c-bubble-inner{min-width:80px}.c-bubble-trigger.com-operations-dropdown .c-bubble-inner:after,.c-bubble-trigger.com-operations-dropdown .c-bubble-inner:before{display:none}.c-bubble-trigger.com-operations-dropdown .com-bubble-menu a,.c-bubble-trigger.com-operations-dropdown .menu-link{text-align:center}.com-tag-panel{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;margin-bottom:20px;padding:20px;height:127px;border:1px solid #eee}.com-tag-panel .tag-hd{padding-right:40px;margin-bottom:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-tag-panel .tag-icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;width:32px;height:32px;margin-right:10px}.com-tag-panel i.tag-icon{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 37.169999999999995%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-tag-panel .tag-title{display:inline;font-size:18px;font-weight:400;line-height:32px;color:#444}.com-tag-panel a:hover{text-decoration:none}.com-tag-panel a:hover .tag-title{color:#00a4ff}.com-tag-panel .desc{max-height:42px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.com-tag-panel .desc a{display:block;color:inherit}.com-tag-panel .desc a:hover{color:#00a4ff}.com-tag-panel .btn{position:absolute;right:20px;top:20px;-webkit-box-sizing:border-box;box-sizing:border-box;width:32px;height:32px;border-radius:2px;border:1px solid transparent;background-color:#00a4ff;text-align:center;line-height:30px;font-size:0}.com-tag-panel .btn:after{content:'';position:absolute;left:50%;top:50%;margin:-1px 0 0 -7px;width:14px;height:2px;background-color:#fff}.com-tag-panel .btn:before{content:'';position:absolute;left:50%;top:50%;margin:-7px 0 0 -1px;width:2px;height:14px;background-color:#fff}.com-tag-panel.checked{background-color:#f7f8fa}.com-tag-panel.checked .btn{border-color:#e5e5e5;background-color:#fff}.com-tag-panel.checked .btn:after{-webkit-box-sizing:border-box;box-sizing:border-box;margin:-3px 0 0;position:static;display:inline-block;vertical-align:middle;width:8px;height:14px;border-right:2px solid #00a4ff;border-bottom:2px solid #00a4ff;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);background:0 0}.com-tag-panel.checked .btn:before{display:none}.com-line-loading{position:relative;margin:30px 0}.com-line-loading .loading-avatar{display:block;margin-bottom:20px;width:40px;height:40px;border-radius:50%;background-color:#eeeef0}.com-line-loading .loading-line{margin-bottom:10px;height:12px;background:#edeef0;background:linear-gradient(to right,#edefef,#f7f8fa)}.com-line-loading .loading-line:last-child{margin-bottom:0}.com-line-loading .loading-line:nth-child(2){position:absolute;left:56px;top:4px;width:43.53846154%}.com-line-loading .loading-line:nth-child(3){position:absolute;left:56px;top:24px;width:26.15384615%}.com-author-bubble{width:290px}.com-author-bubble>.c-bubble-inner{padding:20px;min-height:180px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.com-author-bubble.c-bubble-top .c-bubble-inner:before{border-bottom-color:#e5e5e5}.com-author-bubble-hd{position:relative;margin-bottom:10px;padding-bottom:20px;padding-left:80px;border-bottom:1px solid #eee;min-height:64px}.com-author-bubble .author-avatar{position:absolute;left:0;top:0;box-sizing:border-box;width:64px;height:64px;border-radius:50%;border:2px solid #e5e5e5}.com-author-bubble .author-avatar .img,.com-author-bubble .author-avatar img{display:block;width:100%;height:100%;border-radius:50%;overflow:hidden}.com-author-bubble .author-avatar .img{background-size:cover;background-position:center}.com-author-bubble .author-level{position:absolute;left:50%;bottom:-6px;padding:0 3px;background-color:#F5A623;font-size:12px;line-height:14px;white-space:nowrap;color:#fff;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.com-author-bubble .author-name{position:relative;display:inline-block;vertical-align:middle;margin-bottom:5px;max-width:100%;font-size:16px;line-height:21px;color:#000}.com-author-bubble .author-name .text{display:block;padding-right:20px;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;color:inherit;overflow:hidden}.com-author-bubble .author-name .text:hover{color:#00a4ff;text-decoration:none}.com-author-bubble .com-verification{position:absolute;right:0;top:3px}.com-author-bubble .author-identity{line-height:20px;color:#888}.com-author-bubble .com-emblem-list{margin-top:5px;margin-bottom:-5px}.com-author-bubble .com-emblem-list>li:first-child{margin-left:0}.com-author-bubble .c-bubble-inner .c-bubble-bottom .c-bubble-inner:after,.com-author-bubble .c-bubble-inner .c-bubble-bottom .c-bubble-inner:before{border-bottom-color:transparent}.com-author-bubble .author-times-list{font-size:0}.com-author-bubble .author-times-list>li{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;vertical-align:middle;width:33.33%;text-align:center;font-size:14px;line-height:18px;white-space:nowrap}.com-author-bubble .author-times-list>li:first-child{padding-left:10px;text-align:left}.com-author-bubble .author-times-list>li:last-child{padding-right:10px;text-align:right}.com-author-bubble .author-times-list a{display:block;color:inherit}.com-author-bubble .author-times-list span{display:inline-block;vertical-align:middle;width:40px;text-align:center}.com-author-bubble .author-times-list .num{color:#00a4ff;font-size:18px;line-height:21px}.com-author-bubble .author-times-list .title{font-weight:400}.com-author-bubble .author-times-list a:hover,.com-author-bubble .author-times-list a:hover .num{text-decoration:none}.com-author-bubble-ft{margin-top:20px}.com-author-bubble-ft .c-btn{width:100%;min-width:0}.com-author-bubble-ft .split{margin:5px 0;border:none}.com-author-bubble-ft .c-btn-hole{border-color:#00a4ff;color:#00a4ff}.com-author-bubble-ft .c-btn-hole:hover{background-color:#00a4ff;color:#fff}.com-author-bubble-ft .c-btn-link{border:none;background-color:transparent;color:#333}.com-author-bubble-ft .c-btn-link:hover{color:#00a4ff}.com-author-bubble .com-line-loading{margin:0}.com-author-bubble .com-line-loading .loading-avatar{margin-bottom:30px;width:64px;height:64px}.com-author-bubble .com-line-loading .loading-line{height:14px}.com-author-bubble .com-line-loading .loading-line:nth-child(2){left:80px;width:90px;height:20px}.com-author-bubble .com-line-loading .loading-line:nth-child(3){left:80px;right:0;top:40px;width:auto}.com-author-bubble .com-line-loading .loading-line:nth-child(4){position:absolute;left:80px;right:0;top:62px;width:auto}.com-author-bubble .com-line-loading .loading-line:nth-child(5){margin-bottom:15px}.com-verification{position:relative;top:-1px;display:inline-block;width:12px;height:12px;font-size:0;margin:-1px 3px 0;vertical-align:middle;line-height:12px}.com-verification.large{width:16px;height:16px;line-height:16px}.com-verification.person-center{margin-left:7px}.com-verification.vertical-baseline{vertical-align:baseline}.com-verification.person-center .verified{background-image:url(sprite/base-201911131148.svg);;background-position:48.16% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-verification>a:hover{position:relative;z-index:901}.com-verification .verified{display:inline-block;width:100%;height:100%;background-image:url(sprite/base-201911131148.svg);;background-position:20.119999999999997% 99.58%;background-size:4200% 4100%;;background-repeat:no-repeat}.com-verification.large .verified{background-image:url(sprite/base-201911131148.svg);;background-position:51.839999999999996% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-verification.large.disabled .verified{background-image:url(sprite/base-201911131148.svg);;background-position:59.21999999999999% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-verification .popup{display:none;position:absolute;left:0;top:20px;padding:2px 5px;line-height:20px;font-size:12px;font-weight:400;color:#444;background-color:#fefbd2;white-space:nowrap}.com-verification:hover .popup{display:block}.com-author-bubble.v2{width:410px}.com-author-bubble.v2>.c-bubble-content>.c-bubble-inner,.com-author-bubble.v2>.c-bubble-inner{padding:0;width:100%;max-height:none;box-shadow:0 2px 3px rgba(0,0,0,.08);border-color:#c9cbce;font-size:14px;line-height:1.5;overflow:visible;border-radius:0}.com-author-bubble.v2>.c-bubble-inner:before{border-bottom-color:#c9cbce}.com-author-bubble.v2>.c-bubble-inner:after{border-bottom-color:#f7f8fa}.com-author-bubble.v2 .com-author-bubble-hd{display:table;table-layout:fixed;width:100%;box-sizing:border-box;margin-bottom:0;padding:25px 0;background-color:#f7f8fa}.com-author-bubble.v2 .author-avatar-cell{display:table-cell;vertical-align:middle;width:110px}.com-author-bubble.v2 .author-avatar{display:block;margin:0 auto;position:relative;left:auto;top:auto}.com-author-bubble.v2 .author-main-cell{display:table-cell;vertical-align:middle}.com-author-bubble.v2 .author-name{margin-bottom:3px;color:#333}.com-author-bubble.v2 .author-name .text{padding-right:0}.com-author-bubble.v2 .com-verification{position:relative;right:auto;top:auto;margin-left:5px}.com-author-bubble.v2 .author-identity{color:#666}.com-author-bubble.v2 .com-emblem-list{margin-top:7px}.com-author-bubble.v2 .author-btns{display:table-cell;vertical-align:middle;width:100px;padding-right:30px;text-align:right;-webkit-box-sizing:content-box;box-sizing:content-box}.com-author-bubble.v2 .author-btn{padding:0 10px;min-width:0;width:80px;height:30px;line-height:30px}.com-author-bubble.v2 .author-btn .c-loading-inner>div{width:8px;height:8px;margin-left:1px;margin-right:1px}.com-author-bubble.v2 .com-author-bubble-bd{padding-top:22px;padding-bottom:22px}.com-author-bubble.v2 .author-intro{margin:0 30px 30px;line-height:24px;color:#666;display:block;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;max-height:48px}.com-author-bubble.v2 .author-times-list>li{position:relative;font-size:14px;line-height:1.5;color:#333}.com-author-bubble.v2 .author-times-list>li:before{content:'';position:absolute;left:0;top:50%;margin-top:-8px;width:1px;height:16px;background-color:#ccc}.com-author-bubble.v2 .author-times-list>li:first-child:before{display:none}.com-author-bubble.v2 .author-times-list>li:first-child,.com-author-bubble.v2 .author-times-list>li:last-child{padding-left:0;padding-right:0;text-align:center}.com-author-bubble.v2 .author-times-list span{width:auto}.com-author-bubble.v2 .author-times-list .num{margin-left:5px;font-size:inherit;line-height:inherit;color:inherit}.com-author-bubble.v2 .author-times-list a:hover{color:#00a4ff}.com-author-bubble.v2 .com-load-more{margin:20px}.com-author-bubble.v2 .com-tooltip-inner{padding:0;width:100%;max-height:none;box-shadow:0 2px 3px rgba(0,0,0,.08);border-color:#c9cbce;font-size:14px;line-height:1.5;overflow:visible;border-radius:0}.com-author-bubble.v2 .com-tooltip-inner:before{border-bottom-color:#c9cbce}.com-author-bubble.v2 .com-tooltip-inner:after{border-bottom-color:#f7f8fa}.com-author-bubble.com-tooltip-placement-bottom .com-tooltip-inner:before,.com-author-bubble.com-tooltip-placement-bottomLeft .com-tooltip-inner:before,.com-author-bubble.com-tooltip-placement-bottomRight .com-tooltip-inner:before{border-bottom-color:#c9cbce}.com-author-bubble.com-tooltip-placement-bottom .com-tooltip-inner:after,.com-author-bubble.com-tooltip-placement-bottomLeft .com-tooltip-inner:after,.com-author-bubble.com-tooltip-placement-bottomRight .com-tooltip-inner:after{border-bottom-color:#f7f8fa}.c-msg{border-style:solid;border-width:1px}.c-msg-error{color:#e54545;background-color:#fcecec;border-color:#f6b5b5}.c-msg-error .c-msg-info{position:relative;padding-left:30px}.c-msg-error .c-msg-info:before{content:'';position:absolute;left:8px;top:13px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 51.05%;background-size:3150% 3075%;;background-repeat:no-repeat}.c-msg-success{color:#007E3B;background-color:#E6F8EE;border-color:#9CE4BC}.c-msg.inline-block{box-sizing:border-box;display:inline-block;vertical-align:middle;max-width:100%}.c-msg-fixed-wrap{position:fixed;left:0;top:70px;z-index:9100;width:100%;text-align:center;pointer-events:none}.c-msg-fixed-wrap .c-msg{display:inline-block;vertical-align:middle;max-width:80%;text-align:left;pointer-events:auto;border-radius:4px}.c-msg-fixed-wrap .c-msg-error .c-msg-info{padding-left:20px}.c-msg-fixed-wrap .c-msg-error .c-msg-info:before{display:none}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}input::-moz-placeholder,textarea::-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}.c-input-text{-webkit-box-sizing:border-box;box-sizing:border-box;height:36px;width:280px;line-height:24px}.c-input-text:focus,.c-input-text:hover{border-color:#00a4ff}.c-input-text.err-style,.c-input-text.error{border-color:#E54545;color:#e54545}.c-input-text[disabled],.c-input-text[disabled]:hover,.c-textarea[disabled],.c-textarea[disabled]:hover{cursor:default;background-color:#f0f1f2;border-color:#d5d5d5;color:#a2a2a2}.c-input-text.small{-webkit-box-sizing:border-box;box-sizing:border-box;height:30px;width:180px;line-height:18px;font-size:12px}.c-textarea.small{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:auto;font-size:12px;line-height:18px}.c-input-text.large{-webkit-box-sizing:border-box;box-sizing:border-box;height:44px;width:280px;line-height:32px;font-size:14px}.c-input-text.full{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.c-textarea.large{-webkit-box-sizing:border-box;box-sizing:border-box;width:472px;line-height:32px;font-size:14px}.c-textarea.full{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.c-select:hover{border-color:#00a4ff}.c-select.small{padding-top:5px;padding-bottom:5px;height:30px;width:180px;font-size:12px;line-height:18px}.c-select[disabled]:hover{border-color:#d5d5d5}.c-select.large{padding-top:5px;padding-bottom:5px;padding-left:10px;height:44px;width:280px;font-size:14px;line-height:32px}.c-select.full{width:100%}.c-dropdown-btn-style .c-dropdown-link{padding-right:30px}.c-dropdown.width-auto{width:auto}.com-check-list>li{margin-bottom:10px}.com-check-item{display:inline-block;vertical-align:middle;position:relative;margin-right:10px;padding-left:25px;cursor:pointer;word-wrap:break-word;line-height:21px}.com-check-item.disabled{cursor:default;color:#999}.com-check-item.block{margin-right:0;display:block}.com-check-item span{vertical-align:middle}.com-check-item .weak-text{color:#999}.com-check-cnt .weak-text.email,.com-check-item .weak-text.email{word-break:break-all}.com-check-item .c-checkbox,.com-check-item .c-radio{position:absolute;left:0;top:3px}.com-check-item+a{vertical-align:middle}.com-check-list .com-code-form{margin-top:10px}.com-check-cnt{display:inline-block;vertical-align:middle}.com-check-cnt.block{display:block;margin-top:5px;padding-left:25px}.com-check-cnt .weak-text{color:#999}.com-check-cnt .com-link{margin-left:10px}.c-form-ctrl-label{cursor:pointer;min-width:0}.com-check-list .com-qr-code{margin-top:10px;padding:10px;background-color:#f5f6f7}.com-check-list .com-2-wechat-panel{margin-top:10px;padding:10px;max-width:310px}.com-check-list .com-2-wechat-panel .qr-img{width:102px}.com-check-list .com-2-wechat-panel .qr-cnt{max-width:calc(100% - 10px * 2 - 102px)}.com-check-list.cols-2{font-size:0}.com-check-list.cols-2>li{font-size:14px;display:inline-block;vertical-align:top;width:50%;box-sizing:border-box;padding-right:10px}.com-check-add{display:block;color:#999}.com-check-add .icon-add{position:relative;top:-2px;display:inline-block;vertical-align:middle;margin-right:6px;margin-left:3px;width:11px;height:11px}.com-check-add .icon-add:after,.com-check-add .icon-add:before{content:'';position:absolute;left:0;top:5px;width:100%;height:1px;background-color:#979797}.com-check-add .icon-add:after{left:5px;top:0;width:1px;height:100%}.com-check-add:hover{color:#00a4ff}.com-check-add:hover .icon-add:after,.com-check-add:hover .icon-add:before{background-color:#00a4ff}.com-check-create .com-check-item{position:relative;padding-left:21px;margin-right:0;display:block}.com-check-create .c-radio{position:absolute;left:0;top:7px}.com-check-btns{margin-top:20px;text-align:right;font-size:0}.com-check-btn{margin-left:15px;color:#666;font-size:14px;background-color:transparent}.com-check-btn.primary,.com-check-btn:hover{color:#00a4ff}.com-check-btn.primary:hover{color:#0092ee}.com-check-list.side{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-check-list.side>li{margin-bottom:0;padding:10px 0}.com-code-form .c-input-text{margin-right:10px;width:150px}.com-code-form .c-input-text.code{width:90px}.com-code-form .c-btn{margin-right:10px;padding:0 20px;min-width:0}.com-f-list-vertical{padding:0}.com-f-list-vertical .f-list-item{margin:25px 0 0;padding:25px 0 0;border-top:1px solid #e5e5e5}.com-f-list-vertical .f-list-btns,.com-f-list-vertical .f-list-item:first-child{margin-top:0;padding-top:0;border-top:none}.com-f-list-vertical .f-list-btns{margin-top:45px}.com-f-list-vertical .c-f-list-tit{position:static;display:block;margin-bottom:10px;width:auto;color:#666;z-index:auto}.com-f-list-vertical .c-f-list-con{padding-left:0;z-index:auto}.c-f-list-con .c-f-tip-word.err-style,.c-f-list-con .c-f-tip-word.error{color:#e54545}.com-step-process{position:relative;padding-top:40px}.com-step-process .process-steps{display:table;table-layout:fixed;width:100%}.com-step-process .process-step{display:table-cell;border-left:1px solid #fff;height:16px;background-color:#EDEFF2}.com-step-process .process-step:first-child{border-left:none;border-top-left-radius:8px;border-bottom-left-radius:8px}.com-step-process .process-step:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px}.com-step-process .process-step.finished{background-color:#00a4ff}.com-step-process .process-tips{position:absolute;bottom:0;height:16px}.com-step-process .process-dot{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;left:-8px;top:0;width:16px;height:16px;border:2px solid #00a4ff;background-color:#fff;border-radius:50%;text-align:center;line-height:12px}.com-step-process .process-dot:after{content:'';-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;left:50%;top:50%;margin:-6px 0 0 -6px;width:12px;height:12px;background-image:url(sprite/base-201911131148.svg);;background-position:14.430000000000001% 99.58%;background-size:4200% 4100%;;background-repeat:no-repeat}.com-step-process .process-bubble{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;left:-27px;bottom:100%;margin-bottom:9px;width:54px;height:32px;border:1px solid #e5e5e5;border-radius:2px;background-color:#fff;font-size:12px;line-height:30px;text-align:center;color:#00a4ff}.com-step-process .process-bubble-inner{position:static !important;left:50%}.com-step-process .process-bubble-inner:after,.com-step-process .process-bubble-inner:before{content:'';position:absolute;left:inherit;top:100%;margin-left:-4px;width:0;height:0;border-style:solid;border-color:#fff transparent;border-width:4px 4px 0}.com-step-process .process-bubble-inner:before{margin-top:1px;border-color:#e5e5e5 transparent}.com-level-wrap{margin-bottom:20px;padding-top:1px;padding-bottom:1px;position:relative}.com-level-wrap .level-tip{margin-bottom:17px;font-size:16px}.com-level-wrap .level-tip em{margin:0 5px;color:#00a4ff}.com-level-wrap .level-tip .weak-text{margin-top:5px;font-size:14px;color:#999}.com-level-bar{position:relative;padding-top:180px;padding-bottom:20px}.com-level-bar .level-process{position:absolute;left:0;bottom:20px;z-index:1;width:100%;height:16px;background-color:#00a4ff;border-radius:8px;transition:width .3s ease}.com-level-bar .level-items{display:table;table-layout:fixed;width:100%}.com-level-bar .level-item{position:relative;display:table-cell;height:16px;background-color:#EDEFF2}.com-level-bar .level-item:first-child{width:20px;border-top-left-radius:8px;border-bottom-left-radius:8px}.com-level-bar .level-item:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px}.com-level-bar .level-dot{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;right:-8px;top:0;z-index:2;width:16px;height:16px;border-radius:50%;border:2px solid #EDEFF2;background-color:#fff;cursor:pointer}.com-level-bar .level-item:first-child .level-dot{right:auto;left:0}.com-level-bar .level-item:last-child .level-dot{right:0}.com-level-bar .level-dot:after{content:'';-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;left:0;top:0;width:12px;height:12px;background-image:url(sprite/base-201911131148.svg);;opacity:0;background-position:14.430000000000001% 99.58%;background-size:4200% 4100%;;background-repeat:no-repeat}.com-level-bar .level-text{position:absolute;right:0;top:0;margin-top:16px;font-size:14px;white-space:nowrap;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%)}.com-level-bar .level-item:first-child .level-text{right:auto;left:8px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.com-level-bar .level-item:last-child .level-text{right:8px}.com-level-bubble{visibility:hidden;-webkit-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0s;transition-delay:0s;pointer-events:none;opacity:0;right:-70px;bottom:0;margin-bottom:26px;width:140px;text-align:center}.com-level-bar .level-item:first-child .com-level-bubble{right:auto;left:-70px;margin-left:8px}.com-level-bar .level-item:last-child .com-level-bubble{margin-right:8px}.com-level-bar .show-bubble .com-level-bubble{visibility:visible;-webkit-transition-delay:.1s;transition-delay:.1s;opacity:1;pointer-events:auto}.com-level-bubble .c-bubble-inner{display:inline-block;vertical-align:middle;padding-top:10px;padding-bottom:10px;min-width:120px;-webkit-box-shadow:none;box-shadow:none;background-color:#F7F8FA;color:#999;font-size:12px}.com-level-bubble .c-bubble-inner:after{border-top-color:#F7F8FA}.com-level-bubble .level-title{margin-bottom:2px;font-size:14px}.com-level-bubble .weak-text{margin:10px 0 13px;color:#999}.com-level-bubble .award-img{position:relative;margin:0 auto;padding:0 10px;height:68px;border-radius:2px;background-color:#EDEFF2;color:#999;overflow:hidden;text-align:center}.com-level-bubble .award-img:before{content:'';position:absolute;right:-10px;bottom:-8px;width:66px;height:60px;background-image:url(sprite/base-201911131148.svg);;background-position:23.52% 0.22999999999999998%;background-size:763.6363636363636% 819.9999999999999%;;background-repeat:no-repeat}.com-level-bubble .award-img:after{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.com-level-bubble .award-img-inner{position:relative;display:inline-block;vertical-align:middle;max-width:98%;font-size:12px}.com-level-bubble .award-img .price{margin-bottom:3px}.com-level-bubble .award-img .num{margin-right:2px;font-size:20px;line-height:24px;font-weight:700}.com-level-bar .level-item.actived .level-dot{border-color:#00a4ff}.com-level-bar .level-item.actived .level-dot:after{opacity:1}.com-level-bubble.actived .c-bubble-inner{background-color:#fff;cursor:pointer;color:#333}.com-level-bubble.actived .c-bubble-inner:after{border-top-color:#fff}.com-level-bubble.actived .award-img{background-color:#F7F8FA;color:#666;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.24),0 1px 3px rgba(0,0,0,.16);box-shadow:0 1px 3px rgba(0,0,0,.24),0 1px 3px rgba(0,0,0,.16)}.com-level-bubble.actived .award-img .price{color:#00a4ff}.com-form{display:table;table-layout:fixed;width:100%}.com-form-item{display:table-row}.com-form-title{display:table-cell;vertical-align:top;padding:5px 10px 15px 0;width:70px;font-size:12px;line-height:20px;color:#666}.com-form-title em{color:#E54545}.com-form-cnt{display:table-cell;vertical-align:top;padding-bottom:15px;font-size:12px;color:#333}.com-form-text{line-height:20px}.com-form-btns{display:table-row;font-size:0}.com-form-btns .com-form-cnt{padding-top:5px}.com-form-btns .c-btn{margin-right:10px}.com-form-btns.center .com-form-cnt{text-align:center}.com-form-validate{margin-top:5px;color:#999}span.com-form-validate{margin-left:5px}.com-form-validate.error{color:#E54545}.com-form-validate.success{color:#00c8dc}.com-form-item.pure-text .com-form-title{padding-top:0;padding-bottom:10px}.com-form-item.pure-text .com-form-cnt{padding-bottom:10px}.com-form-item.pure-text+.com-form-btns .com-form-cnt{padding-top:15px}.com-form-item.address-row .c-select{display:inline-block;vertical-align:middle;margin-left:10px}.com-form-item.address-row .c-select:first-child{margin-left:0}.com-form-vertical{display:block;box-sizing:border-box}.com-form-vertical .com-form-item{display:block;margin-bottom:20px}.com-form-vertical .com-form-title{display:block;padding:0;margin-bottom:5px;width:auto;line-height:18px;color:#000}.com-form-vertical .com-form-item.pure-text .com-form-title{padding-bottom:0}.com-form-vertical .com-form-item.pure-text .com-form-cnt{margin-bottom:10px;padding-bottom:0}.com-form-vertical .com-form-cnt{display:block;padding-bottom:0}.com-form-vertical .com-form-btns{display:block;margin-top:50px}.com-form-vertical .com-form-btns .com-form-title{display:none}.com-form-vertical .com-form-btns .com-form-cnt,.com-form-vertical .com-form-item.pure-text+.com-form-btns .com-form-cnt{padding-top:0}.c-dialog-form-control .col-lables{margin-bottom:-10px}.col-lables .c-form-ctrl-label{margin-right:10px;margin-bottom:10px}.c-modal-mask{position:fixed;left:0;top:0;z-index:9000;width:100%;height:100%;background-color:#000;background-color:rgba(0,0,0,.7)}.c-modal{z-index:9000;font-size:0;text-align:center;overflow:auto}.c-modal-visible{display:block}.c-modal:before{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.c-modal-inner{display:inline-block;vertical-align:middle;max-width:99%;font-size:14px}.c-dialog{max-width:900px}.c-dialog-hd-title{font-size:16px}.c-dialog-hd-close{top:12px;margin-top:0}.c-dialog-hd-close:only-child{top:12px}.c-dialog-hd-close:before{width:25px;height:25px;background-image:url(sprite/base-201911131148.svg);;background-size:2016% 1968%;;background-position:46.35% 42.61%;background-repeat:no-repeat}.c-dialog-hd-close:hover:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.05% 78.36999999999999%;background-size:2016% 1968%;;background-repeat:no-repeat}.c-dialog-bd{max-height:none;overflow:visible}.c-dialog-ft .c-btn{margin:0 5px;min-width:100px}.c-dialog-ft-validate{margin-top:10px;margin-bottom:-15px;color:#e54545}.com-modal-tip{padding-top:55px;text-align:center;min-height:42px;min-width:200px;font-size:14px;line-height:24px}.com-modal-bg-set .bg-item{position:relative;display:block;margin-bottom:10px;height:100px;background-color:#666;background-size:cover;opacity:1;border:2px solid transparent}.com-modal-bg-set .bg-item.actived,.com-modal-bg-set .bg-item:hover{border-color:#00a4ff}.com-modal-bg-set .bg-item.actived:before{content:'';position:absolute;right:0;bottom:0;width:0;height:0;border-style:solid;border-width:8px;border-color:transparent #00a4ff #00a4ff transparent}.com-modal-bg-set .bg-item.actived:after{content:'';position:absolute;right:2px;bottom:2px;width:7px;height:5px;background-image:url(sprite/base-201911131148.svg);;background-position:68.41000000000001% 42.92%;background-size:7200% 9840%;;background-repeat:no-repeat}.com-gift-intro .intro-item{margin-bottom:10px;font-size:14px;line-height:1.5;color:#333}.com-gift-intro .intro-img{margin-bottom:14px;text-align:center;height:120px}.com-gift-intro .com-award-img,.com-gift-intro .intro-img img{position:relative;top:50%;vertical-align:middle;max-width:100%;max-height:100%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.com-gift-intro .intro-item-title{color:#666}.com-gift-intro .intro-item-highlight{color:#00a4ff;font-weight:700}.com-gift-intro .gift-list .intro-img{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;margin:0 auto;width:82px;height:120px;background-color:#d8d8d8;border:1px solid #d8d8d8;cursor:pointer}.com-gift-intro .gift-list .intro-img.actived{border-color:#00a4ff}.com-gift-intro .gift-list .intro-img.actived:before{content:'';position:absolute;right:0;bottom:0;width:0;height:0;border-style:solid;border-width:8px;border-color:transparent #00a4ff #00a4ff transparent}.com-gift-intro .gift-list .intro-img.actived:after{content:'';position:absolute;right:2px;bottom:2px;width:7px;height:5px;background-image:url(sprite/base-201911131148.svg);;background-position:68.41000000000001% 42.92%;background-size:7200% 9840%;;background-repeat:no-repeat}.com-award-img{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;padding:0 10px;min-width:98px;height:68px;border-radius:2px;background-color:#F7F8FA;color:#666;overflow:hidden;text-align:center;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.24),0 1px 3px rgba(0,0,0,.16);box-shadow:0 1px 3px rgba(0,0,0,.24),0 1px 3px rgba(0,0,0,.16)}.com-award-img:before{content:'';position:absolute;right:-10px;bottom:-8px;width:66px;height:60px;background-image:url(sprite/base-201911131148.svg);;background-position:23.52% 0.22999999999999998%;background-size:763.6363636363636% 819.9999999999999%;;background-repeat:no-repeat}.com-award-img:after{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.com-award-img .award-img-inner{position:relative;display:inline-block;vertical-align:middle;max-width:98%;font-size:12px}.com-award-img .price{margin-bottom:3px;color:#00a4ff}.com-award-img .num{margin-right:2px;font-size:20px;line-height:24px;font-weight:700}.com-modal-invite{text-align:center}.com-modal-invite .invite-author{display:inline-table;width:auto;max-width:100%}.com-modal-invite .invite-author .com-media-object{padding-right:10px;width:32px}.com-modal-invite .invite-author .com-media-img{width:32px;height:32px}.com-modal-invite .invite-author .com-media-body{vertical-align:middle}.com-modal-invite .invite-author .com-media-title{margin-bottom:0}.com-modal-column-members{padding-bottom:20px;height:330px;overflow-x:hidden;overflow-y:auto}.com-modal-column-members .com-user-media{padding-bottom:0;margin-bottom:20px;border-bottom:none}.com-modal-column-members .com-media-object{width:40px}.com-modal-column-members .com-media-img{width:40px;height:40px}.com-modal-column-members .com-media-title{font-size:14px;padding-right:15px}.com-modal-column-members .com-media-desc{margin-bottom:0}.com-modal-column-members .com-media-title .com-verification{margin-top:-8px}.c-modal-gift-form .address-row .c-select{display:inline-block;vertical-align:middle;margin-left:10px;width:160px}.c-modal-gift-form .address-row .c-select:first-child{margin-left:0}.c-modal-gift-form .address-row .c-select+.c-select{margin-top:0}.c-modal-gift-form .address-row .c-textarea{margin-top:10px;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:12px}.com-modal-choose-cover .c-mini-step{margin-left:-25px;margin-right:-25px;padding-left:25px;padding-right:25px}.com-modal-choose-cover .gallery-tip{margin-bottom:15px;color:#999}.com-modal-choose-cover .com-gallery{margin-left:-25px;margin-right:-25px;padding-left:20px;padding-right:13px}.com-modal-choose-cover .c-mini-step+.com-tab{margin-top:-15px}.com-doc-members{min-height:200px;max-height:300px;overflow:auto}.com-doc-user{margin-bottom:10px}.com-doc-user .com-media-object{width:32px;padding-right:10px}.com-doc-user .com-media-img{width:32px;height:32px}.com-doc-user .com-media-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-modal-update-log{margin-bottom:20px;min-height:200px;max-height:300px;line-height:1.7;color:#333;overflow:auto;word-wrap:break-word}.com-modal-update-log .log-item{margin-bottom:10px}.com-modal-update-log .log-time{font-size:12px;color:#666}.com-modal-avatar-setting{border-top:1px solid #D2D9E7;border-bottom:1px solid #D2D9E7;margin-left:-25px;margin-right:-25px;margin-bottom:10px}.com-modal-avatar-setting .com-tab-ctrl{background-color:#F3F5F9;text-align:center;border-bottom:0 none}.com-modal-avatar-setting .com-tab-item{margin-right:50px}.com-modal-avatar-setting .com-tab-item a{height:50px;line-height:50px;font-size:14px;color:#4A4A4A;padding-left:30px;padding-right:30px}.com-modal-avatar-setting .com-tab-item.disabled a,.com-modal-avatar-setting .com-tab-item.disabled a:hover{color:#4a4a4a;cursor:not-allowed}.com-modal-avatar-setting .com-tab-item.actived a,.com-modal-avatar-setting .com-tab-item.actived a:hover{color:#00A4FF}.com-modal-avatar-setting .com-tab-item.actived a:after{height:3px}.com-avatar-setting{margin-top:10px;margin-bottom:20px;padding-left:30px;padding-right:30px;text-align:center}.com-avatar-setting .setting-tip{font-size:14px;color:#4A4A4A;line-height:20px;margin-bottom:20px}.com-avatar-setting .setting-img{display:block;margin-left:auto;margin-right:auto;width:266px;height:266px;overflow:hidden;border:1px solid #D2D9E7;box-sizing:border-box;position:relative}.com-avatar-setting .setting-img:before{content:"";position:absolute;width:200px;height:200px;background-color:#F3F5F9;top:50%;left:50%;margin-left:-100px;margin-top:-100px;border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%}.com-avatar-setting .setting-img .figure{position:relative;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat}.com-avatar-setting .setting-img .figure-img{position:relative}.com-avatar-setting .setting-img-txt{position:absolute;left:0;top:0;display:table;width:100%;height:100%;font-size:12px;color:#4A4A4A;line-height:18px;text-align:center}.com-avatar-setting .setting-img-txt-inner{display:table-cell;vertical-align:middle}.com-avatar-setting .setting-icon-loading{width:30px;height:30px;display:inline-block;vertical-align:top;background-image:url(sprite/base-201911131148.svg);;-webkit-animation:galleryLoading 1.2s linear infinite;animation:galleryLoading 1.2s linear infinite;background-position:75.74% 59.089999999999996%;background-size:1680% 1639.9999999999998%;;background-repeat:no-repeat}.com-avatar-setting .setting-icon-img{width:48px;height:48px;display:inline-block;vertical-align:top;background-image:url(sprite/base-201911131148.svg);;background-position:66.45% 12.839999999999998%;background-size:1050% 1025%;;background-repeat:no-repeat}.com-avatar-setting .setting-img-txt p{margin-top:10px}.com-avatar-setting .setting-img-mask{position:absolute;left:50%;top:50%;z-index:2;pointer-events:none;box-sizing:border-box;margin-left:-266px;margin-top:-266px;width:532px;height:532px;border:1px solid rgba(0,0,0,.5);border-width:166px;border-radius:50% 50% 50% 0}.com-avatar-setting .setting-img.random .figure-img{position:absolute;left:50%;top:50%;margin:-100px 0 0 -100px;width:200px;height:200px;border-radius:50% 50% 50% 0}.com-avatar-setting .setting-img.random .setting-img-mask{display:none}.com-avatar-setting .setting-gender{margin:20px auto 0;width:265px;font-size:0}.com-avatar-setting .setting-gender .com-check-item{margin-right:30px;font-size:14px}.com-avatar-setting .setting-gender .com-check-item:last-child{margin-right:0}.com-avatar-setting .setting-toolbar{width:265px;margin-left:auto;margin-right:auto;margin-top:20px}.com-avatar-setting .toolbar-btn{display:inline-block;vertical-align:middle;cursor:pointer}.com-avatar-setting .toolbar-btn+.toolbar-btn{margin-left:35px}.com-avatar-setting [class*=toolbar-icon],.com-avatar-setting [class^=toolbar-icon]{vertical-align:top;vertical-align:middle;width:20px;height:20px;display:inline-block}.com-avatar-setting .toolbar-btn.disabled{cursor:default}.com-avatar-setting .toolbar-btn.disabled .c-bubble{display:none}.com-avatar-setting .toolbar-icon-reset{background-image:url(sprite/base-201911131148.svg);;background-position:27.48% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn:hover .toolbar-icon-reset{background-image:url(sprite/base-201911131148.svg);;background-position:36.57% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn.disabled .toolbar-icon-reset,.com-avatar-setting .toolbar-btn.disabled:hover .toolbar-icon-reset{background-image:url(sprite/base-201911131148.svg);;background-position:32.019999999999996% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-icon-zoomin{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 28.18%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn:hover .toolbar-icon-zoomin{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 37.5%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn.disabled .toolbar-icon-zoomin,.com-avatar-setting .toolbar-btn.disabled:hover .toolbar-icon-zoomin{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 32.84%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-icon-zoomout{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 42.16%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn:hover .toolbar-icon-zoomout{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 23.52%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn.disabled .toolbar-icon-zoomout,.com-avatar-setting .toolbar-btn.disabled:hover .toolbar-icon-zoomout{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 46.82%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-icon-rotate-right{background-image:url(sprite/base-201911131148.svg);;background-position:54.75% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn:hover .toolbar-icon-rotate-right{background-image:url(sprite/base-201911131148.svg);;background-position:63.839999999999996% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn.disabled .toolbar-icon-rotate-right,.com-avatar-setting .toolbar-btn.disabled:hover .toolbar-icon-rotate-right{background-image:url(sprite/base-201911131148.svg);;background-position:59.3% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-icon-rotate-left{background-image:url(sprite/base-201911131148.svg);;background-position:41.120000000000005% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn:hover .toolbar-icon-rotate-left{background-image:url(sprite/base-201911131148.svg);;background-position:50.21% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .toolbar-btn.disabled .toolbar-icon-rotate-left,.com-avatar-setting .toolbar-btn.disabled:hover .toolbar-icon-rotate-left{background-image:url(sprite/base-201911131148.svg);;background-position:45.660000000000004% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-avatar-setting .setting-btn{display:block;margin-left:auto;margin-right:auto;width:265px;height:40px;line-height:38px;margin-top:20px;position:relative;overflow:hidden}.com-avatar-setting .setting-btn .upload-file{position:absolute;right:0;top:0;font-size:300px;cursor:pointer}.com-avatar-setting .c-msg{margin-bottom:0;margin-top:20px}.com-2-nav{display:block;position:relative;min-width:1000px}.c-nav-mod-pc{display:block}.c-nav-bottom{transition:background-color .4s cubic-bezier(.67,0,.33,1)}.c-nav-mod.c-nav-white .c-nav-bm-right{background-color:transparent}.c-nav-mod .c-nav-bottom .c-nav-project-logo{padding-top:16px}.c-nav-mod .c-nav-bottom .c-nav-project-logo .c-nav-project-bg-logo{display:inline-block;vertical-align:middle;width:53px;height:18px;font-size:0;background:url(components/Header2/css/img/c-nav-logo-icon-white.svg) no-repeat;background-size:100% auto}.c-nav-mod.c-nav-white .c-nav-bottom .c-nav-project-logo .c-nav-project-bg-logo{background-image:url(components/Header2/css/img/c-nav-logo-icon.svg)}.com-2-nav .dropdown-mini-inner .dropdown-mini-list{padding-top:10px;padding-bottom:10px}.com-2-nav .dropdown-mini-inner .dropdown-mini-item{line-height:32px}.com-2-nav .dropdown-mini-inner .dropdown-mini-item a{color:#333}.com-2-nav .dropdown-mini-inner .dropdown-mini-item a:hover{color:#00a4ff}.com-2-nav .nav-dropdown-btn-txt{vertical-align:middle}.com-2-nav .c-nav-bm-categories .split-item{margin:0 10px;height:54px;line-height:54px}.com-2-nav .c-nav-bm-categories .split-item:before{content:'';display:inline-block;vertical-align:middle;height:16px;width:1px;background:rgba(255,255,255,.2)}.c-nav-mod.c-nav-white .c-nav-bm-categories .split-item:before{background:#ddd}.com-2-nav .c-nav-img-user{box-sizing:border-box;border:1px solid #EFEFEF;background-repeat:no-repeat}.c-nav-mod.c-nav-white .c-nav-img-user{border-color:#EFEFEF}.com-2-nav .c-nav-dropdown-btn .c-bubble{right:0}.com-2-nav .nav-user-bubble{width:auto}.com-2-nav .nav-user-bubble .dropdown-mini-item a{white-space:nowrap;min-width:0}.com-2-nav .nav-user-bubble .dropdown-mini-list{padding:0}.com-2-nav .nav-user-bubble .nav-drop-action{padding-top:10px;padding-bottom:10px}.com-2-nav .nav-user-bubble.c-bubble .c-bubble-inner{right:10px}.com-2-nav .c-nav-dropdown-btn .c-bubble-inner{border:1px solid #E7E8F1;-webkit-box-shadow:0 10px 20px rgba(3,27,78,.1);box-shadow:0 10px 20px rgba(3,27,78,.1);left:auto;right:22px}.com-2-nav .c-nav-dropdown-btn .c-bubble.c-bubble-top .c-bubble-inner:before{border-width:0 8px 11px;border-bottom-color:#E7E8F1}.com-2-nav .c-nav-dropdown-btn .c-bubble.c-bubble-top .c-bubble-inner:after{border-width:0 7px 9px;margin-bottom:-1px;margin-right:1px;border-bottom-color:#fff}.com-2-nav .nav-dropdown-msg{margin-right:10px}.com-2-nav .nav-dropdown-msg .c-nav-dropdown-btn-inner{display:block;padding:0 10px;line-height:54px}.com-2-nav .c-nav-icon-msg{display:inline-block;vertical-align:middle;width:18px;height:22px;background-image:url(sprite/base-201911131148.svg);;background-position:69.34% 46.379999999999995%;background-size:2800% 2236.3636363636365%;;background-repeat:no-repeat}.c-nav-mod.c-nav-white .c-nav-icon-msg{background-image:url(sprite/base-201911131148.svg);;background-position:70.58% 83.62%;background-size:2800% 2236.3636363636365%;;background-repeat:no-repeat}.com-2-nav .c-nav-dropdown-btn.actived .c-nav-icon-msg,.com-2-nav .c-nav-dropdown-btn:hover .c-nav-icon-msg{background-image:url(sprite/base-201911131148.svg);;background-position:87.03999999999999% 5.319999999999999%;background-size:2800% 2236.3636363636365%;;background-repeat:no-repeat}.com-2-nav .badge{position:absolute;left:50%;top:12px;z-index:2;box-sizing:border-box;padding:0 5px;min-width:16px;height:16px;border-radius:8px;font-size:12px;line-height:16px;text-align:center;color:#fff;background-color:#00a4ff;font-weight:500;font-family:Helvetica Neue}.com-2-nav .com-msg-popup{right:-20px;background-color:#fff;box-shadow:0 10px 20px rgba(3,27,78,.1);border:1px solid #E7E8F1;white-space:normal}.com-2-nav .com-msg-popup:after,.com-2-nav .com-msg-popup:before{content:'';position:absolute;right:30px;bottom:100%;border-style:solid;border-width:0 8px 11px;border-color:#E7E8F1 transparent}.com-2-nav .com-msg-popup:after{margin-right:1px;margin-bottom:-1px;border-width:0 7px 9px;border-color:#fff transparent}.com-2-nav .searchbar-show .com-search-dropdown{display:block}.com-2-nav .com-search-dropdown{margin-top:10px;text-align:left}.com-2-nav.fixed .c-nav-bottom{position:fixed;left:0;top:0;z-index:1000;box-sizing:border-box;width:100%;min-width:1000px}.com-2-nav.fixed .c-nav-dark .c-nav-bottom{border-top-color:transparent}.c-nav-mod .c-nav-bm-search.search-icon-rt>input{width:260px}.com-msg-popup{position:absolute;right:-45px;top:100%;z-index:9001;width:300px;background:#F7F8FA;border-radius:2px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.3);box-shadow:0 2px 4px rgba(0,0,0,.3);font-size:14px;color:#333}.com-msg-popup:before{content:'';position:absolute;right:60px;bottom:100%;border-style:solid;border-width:0 6px 6px;border-color:#F7F8FA transparent}.com-msg-popup-hd{-webkit-box-sizing:border-box;box-sizing:border-box;height:38px;border-bottom:1px solid #e5e5e5;font-size:0}.com-msg-popup-ctrl li{position:relative;display:inline-block;vertical-align:middle;width:50%}.com-msg-popup-ctrl a{display:block;padding:0 10px;font-size:12px;line-height:38px;color:#333;text-align:center}.com-msg-popup-ctrl a:hover{color:#00a4ff;text-decoration:none}.com-msg-popup-ctrl .actived a{color:#00a4ff;text-decoration:none;font-weight:700}.com-msg-popup-ctrl .text{position:relative;display:inline-block;vertical-align:middle}.com-msg-popup-ctrl .text:after{content:'';position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:transparent}.com-msg-popup-ctrl .actived .text:after{background-color:#00a4ff}.com-msg-popup-ctrl .num{position:relative;top:-1px;display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:5px;padding:0 5px;min-width:18px;height:16px;border-radius:8px;background-color:#e54545;font-size:12px;line-height:16px;color:#fff;text-align:center}.com-msg-popup-bd{padding:10px 0;max-height:380px;overflow:auto;-webkit-overflow-scrolling:touch}.com-msg-popup-item{position:relative;padding:13px 20px;font-size:14px;line-height:24px;-webkit-transition:all .2s;transition:all .2s;color:#999;word-wrap:break-word}.com-msg-popup-item:after{content:'';position:absolute;left:20px;right:20px;bottom:0;height:1px;background-color:#e5e5e5}.com-msg-popup-item:last-child:after{display:none}.com-msg-popup-item .unread-icon{position:absolute;left:0;top:16px;-webkit-box-sizing:border-box;box-sizing:border-box;width:20px;height:18px;background-color:transparent;border:none;font-size:0}.com-msg-popup-item .unread-icon:before{content:'';display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background-color:#00a4ff}.com-msg-popup-item a{color:#333}.com-msg-popup-item a:hover{color:#00a4ff}.com-msg-popup-item .btns{margin-top:5px}.com-msg-popup-item .c-btn{vertical-align:middle}.com-msg-popup-item .c-btn-hole:hover{color:#00a4ff}.com-msg-popup .com-msg-popup-item .c-loading{margin:0}.com-msg-popup-ft{border-top:1px solid #e5e5e5;height:38px;line-height:38px}.com-msg-popup-ft .link-more{display:block;padding:0 10px;color:#00a4ff;text-align:center;font-size:12px}.com-msg-popup-ft .link-more:hover{color:#0092ee}.com-msg-popup-none{height:100px;text-align:center;font-size:0}.com-msg-popup-none:after{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.com-msg-popup-none p{display:inline-block;vertical-align:middle;max-width:98%;font-size:14px;color:#888}.com-msg-popup-none [class*=com-i-],.com-msg-popup-none [class^=com-i-]{position:relative;top:-1px;margin-right:5px}.com-msg-popup-letter{position:relative;display:block;padding:7px 20px 7px 30px;-webkit-transition:all .2s;transition:all .2s;font-size:12px}.com-msg-popup-letter .com-media{margin-bottom:0}.com-msg-popup-letter .com-media-object{padding-right:15px;width:32px}.com-msg-popup-letter .com-media-img{width:32px;height:32px}.com-msg-popup-letter .com-media-body{padding-top:2px}.com-msg-popup-letter .com-media-title{position:relative;margin-bottom:5px;padding-right:60px;font-size:12px;line-height:1;font-weight:700;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.com-msg-popup-letter .letter-time{position:absolute;right:0;top:0;color:#999;line-height:1}.com-msg-popup-letter .com-media-desc{color:#666;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.com-msg-popup-letter .unread-icon{position:absolute;left:0;top:13px;-webkit-box-sizing:border-box;box-sizing:border-box;width:30px;height:20px;line-height:20px;background-color:transparent;border:none;font-size:0}.com-msg-popup-letter .unread-icon:before{content:'';display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background-color:#00a4ff}.com-msg-popup .c-loading{margin:10px 0}.com-msg-tab-ctrl .msg-num{position:relative;top:-2px;display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:5px;padding:0 5px;min-width:18px;height:16px;border-radius:8px;background-color:#e54545;font-size:12px;line-height:16px;color:#fff;text-align:center}.com-search-bar{position:relative;display:inline-block;vertical-align:middle;width:300px}.com-search-bar.focus,.com-search-bar.show{z-index:1002}.com-search{position:relative;display:block}.com-search .search-input{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 36px 5px 10px;width:100%;height:30px;border:none;border-radius:2px;font-size:14px;line-height:20px;color:#000;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.com-search input::-webkit-input-placeholder{color:#75787d}.com-search input:-ms-input-placeholder{color:#75787d}.com-search input::placeholder{color:#999}.com-search .search-btn,.com-search .search-clear{position:absolute;right:0;top:0;width:26px;height:100%;border:none;background-color:transparent;line-height:30px;font-size:0;text-align:left}.com-search .search-clear{right:30px;width:16px}.com-search .search-btn:after,.com-search .search-clear:after{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 7.7700000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search .com-search-bar.focus .search-btn:after,.com-search .search-input:focus+.search-btn:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 7.7700000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search .com-search-bar.focus .search-btn:hover:after,.com-search .search-btn:hover:after,.com-search .search-input:focus+.search-btn:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 11.55%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search .search-clear:after{background-image:url(sprite/base-201911131148.svg);;background-color:#fff;border-radius:50%;background-position:85.04% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search .search-clear:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:88.73% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search .close-btn{display:none}.com-search-bar.in-header{position:absolute;right:340px;top:18px;margin:0;-webkit-transition:all .2s;transition:all .2s}.com-search-bar.in-header .search-input{-webkit-box-shadow:none;box-shadow:none;background:#373E4D;color:#fff}.com-search-bar.in-header .search-input:focus,.com-search-bar.in-header.focus .search-input{background:#f7f8fa;color:#333}.com-search-bar.in-header.hidden{opacity:0;visibility:hidden;pointer-events:none}.com-nav-search-wrap{display:inline-block}.com-nav-search-wrap.align-center{position:absolute;left:328px;right:0;top:0;z-index:-1;height:65px;background-color:#2a303c;opacity:0}.com-nav-search-wrap.align-center .com-search-bar{position:relative;left:-165px;right:auto;top:18px;display:block;margin:0 auto;max-width:620px;width:auto}.com-nav-search-wrap.align-center .com-search .search-input{position:relative;left:200px;opacity:0;padding-left:30px;background-color:transparent;color:#fff;transition:all .4s cubic-bezier(.11393,.8644,.14684,1)}.com-nav-search-wrap.align-center .com-search .search-input:focus{color:#fff}.com-nav-search-wrap.align-center .com-search .search-btn{left:0;right:auto}.com-nav-search-wrap.align-center .com-search .search-btn:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 3.9899999999999998%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-nav-search-wrap.align-center .com-search .close-btn{display:block;position:absolute;right:0;top:0;width:26px;height:100%;border:none;background-color:transparent;line-height:30px;font-size:0;text-align:right}.com-nav-search-wrap.align-center .com-search .close-btn:after{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:15.78% 9.66%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-nav-search-wrap.align-center .com-search .close-btn:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 81.3%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-nav-search-wrap.align-center .com-search-dropdown{margin-top:18px}.com-nav-search-wrap.align-center.show-search{z-index:1000;opacity:1;transition:all .4s cubic-bezier(.67,0,.33,1)}.com-nav-search-wrap.align-center.show-search .search-input{left:0;opacity:1}.com-nav-search-wrap.align-center .com-search-dropdown-bd{padding:20px 30px}.com-nav-search-wrap.align-center .com-search-dropdown-group .link,.com-nav-search-wrap.align-center .com-search-dropdown-keywords a{margin-left:-30px;margin-right:-30px;padding-left:30px;padding-right:30px}.com-nav-search-wrap.align-center .com-search-dropdown-group .link.with-img{margin:0 5px 10px;padding-left:0;padding-right:0}.com-nav-search-wrap.align-center .com-search-dropdown-history .link{padding-right:56px}.com-nav-search-wrap.align-center .com-search-dropdown-history .link-btn{right:30px}.com-nav-search-wrap.align-center .com-search-dropdown.only-one-group .com-search-dropdown-history dd{margin-left:-30px;margin-right:-30px}.com-2-nav-search-wrap{background-color:#2b303b;position:absolute;top:0;left:0;width:100%;padding:10px 0;z-index:-1;opacity:0;overflow:hidden;transition:all .4s;border-top:solid 1px rgba(255,255,255,.08)}.c-nav-white .com-2-nav-search-wrap{background-color:#fff}.com-2-nav-search-wrap.show-search{overflow:visible;z-index:1000;opacity:1;transition:all .4s cubic-bezier(.67,0,.33,1)}.com-2-nav-search-wrap .com-search-bar{display:block;margin:0 auto;max-width:620px;width:auto}.com-2-nav-search-wrap .com-search .search-input{position:relative;left:200px;opacity:0;padding-left:30px;background-color:transparent;box-shadow:none;transition:all .4s cubic-bezier(.11393,.8644,.14684,1);height:34px;line-height:24px;color:#fff}.c-nav-white .com-2-nav-search-wrap .com-search .search-input{color:#000}.com-2-nav-search-wrap.show-search .search-input{left:0;opacity:1}.com-2-nav-search-wrap .com-search .search-btn{left:0;right:auto}.com-2-nav-search-wrap .com-search .search-btn:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 7.7700000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-nav-search-wrap .com-search .close-btn{display:block;position:absolute;right:0;top:0;width:26px;height:100%;border:none;background-color:transparent;line-height:30px;font-size:0;text-align:right}.com-2-nav-search-wrap .com-search .close-btn:after{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 85.08%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-nav-search-wrap .com-search .close-btn:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 81.3%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-nav-search-wrap .com-search-dropdown{margin-top:10px}.com-3-nav-search-wrap{position:absolute;top:0;right:0;width:580px;margin-top:7px;z-index:-1;opacity:0;overflow:hidden;visibility:hidden}.com-3-nav-search-wrap .com-search-bar{padding:3px 0;background-color:#fff;border-top:solid 1px rgba(255,255,255,.08)}.com-3-nav-search-wrap.show-search{overflow:visible;z-index:1003;opacity:1;visibility:visible}.com-3-nav-search-wrap .com-search-bar:after{content:"";position:absolute;left:10px;bottom:0;width:calc(100% - 20px);background-color:rgba(124,132,142,.3);height:1px}.com-3-nav-search-wrap .com-search-bar{display:block;margin:0 auto;max-width:620px;width:auto}.com-3-nav-search-wrap .com-search .search-input{display:inline-block;vertical-align:middle;position:relative;left:200px;opacity:0;padding-left:20px;padding-right:5px;width:calc(100% - 69px);background-color:transparent;box-shadow:none;transition:all .4s cubic-bezier(.11393,.8644,.14684,1);height:34px;line-height:24px;color:#000}.com-3-nav-search-wrap.show-search .search-input{left:0;opacity:1}.com-3-nav-search-wrap .com-search .search-clear{display:none}.com-3-nav-search-wrap .com-search .search-btn{display:inline-block;vertical-align:middle;position:static;left:0;right:auto;width:34px;text-align:center}.com-3-nav-search-wrap .com-search .search-btn:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 7.7700000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-3-nav-search-wrap .com-search .search-btn:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 11.55%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-3-nav-search-wrap .com-search .close-btn{display:inline-block;vertical-align:middle;position:relative;width:34px;height:100%;border:none;background-color:transparent;line-height:30px;font-size:0;text-align:center}.com-3-nav-search-wrap .com-search .close-btn:before{content:'';position:absolute;right:100%;top:8px;width:1px;height:14px;background-color:#E5E5E5}.com-3-nav-search-wrap .com-search .close-btn:after{content:'';display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 85.08%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-3-nav-search-wrap .com-search .close-btn:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 81.3%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-3-nav-search-wrap .com-search-dropdown{margin-top:0;box-shadow:none;border:none}.com-search-bar.normal .search-input{box-shadow:none;border:1px solid #D2D9E7;font-size:12px}.com-search-bar.normal .search-input:focus,.com-search-bar.normal.focus .search-input{border-color:#00a4ff}.com-search-bar.normal .search-btn:after,.com-search-bar.normal .search-clear:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 7.7700000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-bar.normal .search-btn:hover:after,.com-search-bar.normal .search-input:focus+.search-btn:hover:after,.com-search-bar.normal.focus .search-btn:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 11.55%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-bar.normal .search-clear:after{background-image:url(sprite/base-201911131148.svg);;background-position:85.04% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-bar.normal .search-clear:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:88.73% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-mask{background-color:rgba(0,0,0,.4);position:fixed;top:0;left:0;right:0;bottom:0;z-index:1001;display:none}.com-search-mask.show{display:block}.com-search-dropdown{display:none;position:absolute;right:0;top:100%;z-index:900;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:5px;width:100%;background-color:#fff;box-shadow:0 10px 20px rgba(3,27,78,.1);border:1px solid #E7E8F1}.com-search-bar.show .com-search-dropdown{display:block}.com-search-dropdown-bd{overflow-x:hidden;overflow-y:auto;max-height:400px;padding:15px 20px}.com-search-dropdown-group{margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #D2D9E7}.com-search-dropdown-group:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.com-search-dropdown-group dt{font-size:14px;line-height:30px;color:#999}.com-search-dropdown-group .link{display:block;margin:0 -20px;padding:0 20px 0 40px;font-size:14px;line-height:30px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.com-search-dropdown-group .link.hover,.com-search-dropdown-group .link:hover{color:#00a4ff;text-decoration:none;background-color:#F3F5F9}.com-search-dropdown-group .link.with-img{display:inline-block;vertical-align:middle;margin:0 5px 10px;padding:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;width:100px}.com-search-dropdown-group .link.with-img:hover{background-color:transparent}.com-search-dropdown-group .link.with-img .link-text{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-search-dropdown-group .link .avatar,.com-search-dropdown-group .link img{display:block;margin:0 auto 5px;width:32px;height:32px;border-radius:50%}.com-search-dropdown-group .link .avatar{background-size:cover;background-position:center}.com-search-dropdown-group .tag-icon{display:block;margin:0 auto 5px;width:32px;height:32px;background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 22.39%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-search-dropdown-group.dir-horizontal dd{font-size:0}.com-search-dropdown-group.dir-horizontal .link{display:inline-block;vertical-align:middle;margin:0 5px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;width:50px}.com-search-dropdown-group.dir-horizontal .link .avatar{display:block;margin:0 auto 5px}.com-search-dropdown-keywords{font-size:0}.com-search-dropdown-keywords a{display:block;margin:0 -20px;padding:0 20px 0 40px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;line-height:30px;color:#333}.com-search-dropdown-keywords a:hover{color:#00a4ff;text-decoration:none;background-color:#F3F5F9}.com-search-dropdown-history dt{position:relative}.com-search-dropdown-history .link-clear{position:absolute;right:-5px;top:0;padding:0 5px}.com-search-dropdown-history .link-clear .com-i-delete{background-image:url(sprite/base-201911131148.svg);;background-position:62.91% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-dropdown-history .link-clear:hover .com-i-delete{background-image:url(sprite/base-201911131148.svg);;background-position:70.28999999999999% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-dropdown-history .link{position:relative;padding-right:40px}.com-search-dropdown-history .link-btn{position:absolute;right:15px;top:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px;height:100%;background-color:transparent;border:none;opacity:0;visibility:hidden;-webkit-transition:all .2s;transition:all .2s;cursor:pointer}.com-search-dropdown-history .link-btn .com-i-close{position:relative;top:-2px;background-image:url(sprite/base-201911131148.svg);;background-position:73.98% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-dropdown-history .link-btn:hover .com-i-close{background-image:url(sprite/base-201911131148.svg);;background-position:77.66% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-dropdown-history .link.hover .link-btn,.com-search-dropdown-history .link:hover .link-btn{opacity:1;visibility:visible}.com-search-dropdown-ft{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 20px;height:37px;border-top:1px solid #D2D9E7;line-height:36px;font-size:12px}.com-search-dropdown-ft .link-more{display:block;margin:0 -20px;color:#00a4ff;text-align:center}.com-search-dropdown-ft .link-more:hover{color:#00a4ff;text-decoration:none;background-color:#F3F5F9}.com-search-dropdown-ft .link-clear{float:right;margin-right:30px}.com-search-dropdown.only-one-group .com-search-dropdown-bd{max-height:none}.com-search-dropdown.only-one-group .com-search-dropdown-history dt{background-color:transparent}.com-search-dropdown.only-one-group .com-search-dropdown-history dd{margin:0 -20px;max-height:300px;overflow-x:hidden;overflow-y:auto}.com-search-dropdown.only-one-group .com-search-dropdown-history .link{margin:0}.com-search-keywords{margin:10px auto -5px;width:650px}.com-search-keywords:after{content:'';display:table;clear:both}.com-search-keywords a{float:left;margin-right:10px;font-size:14px;line-height:24px;color:#fff}.com-search-result-item{display:block;margin:0 -20px;padding:0 20px;font-size:14px;line-height:34px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.com-search-result-item.hover,.com-search-result-item:hover{color:#00a4ff;text-decoration:none;background-color:#F3F5F9}.com-search-result-icon{display:inline-block;vertical-align:middle;width:16px;height:16px;margin-right:5px}.com-search-result-icon.article{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 45.59%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-result-icon.column{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 53.15%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-result-icon.ask{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 49.370000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-result-icon.salon{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 60.709999999999994%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-result-icon.devdoc{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 56.93%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-result-icon.user{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 64.5%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-search-result-type{margin-right:5px;color:#999;font-size:12px;vertical-align:middle}.com-search-result-text{vertical-align:middle}.com-search-result-item em{color:#ff7200}.com-search-result-item.hover em,.com-search-result-item:hover em{color:#00a4ff}.com-search-panel{padding:40px 0 10px;background-color:#f7f8fa}.com-search-panel .com-search-bar{width:840px}.com-search-panel .com-search .search-input{padding-right:90px;height:46px;font-size:16px;line-height:34px;box-shadow:none;border:1px solid #ddd;border-radius:0}.com-search-panel .com-search .search-input:focus,.com-search-panel .com-search-bar.focus .search-input{border-color:#00a4ff}.com-search-panel .com-search .search-btn{width:80px;background-color:#00a4ff;text-align:center}.com-search-panel .com-search .search-btn:hover{background-color:#0092ee}.com-search-panel .com-search .com-search-bar.focus .search-btn:after,.com-search-panel .com-search .search-btn:after,.com-search-panel .com-search .search-input:focus+.search-btn:after{width:24px;height:24px;background-image:url(sprite/base-201911131148.svg);;background-position:45.21% 83.97%;background-size:2100% 2050%;;background-repeat:no-repeat}.com-search-panel .com-search .search-clear{right:90px}.com-search-panel .com-search-dropdown{margin-top:0;border:1px solid #e5e5e5;background-color:#fff}.com-search-panel-keywords{margin-top:10px;font-size:0}.com-search-panel-keywords a{margin-right:15px;font-size:14px;color:#666;word-wrap:break-word}.com-search-panel-keywords a:hover{color:#00a4ff;text-decoration:none}.qc-footer{min-width:1000px}.qc-footer-service .fs-list{-webkit-box-sizing:border-box;box-sizing:border-box;display:table;table-layout:fixed;width:100%}.qc-footer-service .fs-ct{display:table-cell;width:auto}.qc-footer-service .fs-ct.item-last{width:120px;white-space:nowrap;text-align:right}.qc-footer-service .fs-ct .item:hover{color:#00a4ff}.qc-footer-service .fs-ct .item.disabled{opacity:.5;cursor:default}.qc-footer-service .fs-ct .item.disabled [class*=icon-],.qc-footer-service .fs-ct .item.disabled [class^=icon-]{opacity:.5}.qc-footer-service .fs-ct .item.disabled:hover{color:#fff}.qc-footer-service .fs-ct .item .icon{background-repeat:no-repeat}.qc-footer-service .fs-ct .item .icon-disclaimer,.qc-footer-service .fs-ct .item.disabled .icon-disclaimer,.qc-footer-service .fs-ct .item.disabled:hover .icon-disclaimer{background-image:url(sprite/base-201911131148.svg);;background-position:65.03999999999999% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item:hover .icon-disclaimer{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 0.22%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item .icon-standard,.qc-footer-service .fs-ct .item.disabled .icon-standard,.qc-footer-service .fs-ct .item.disabled:hover .icon-standard{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item:hover .icon-standard{background-image:url(sprite/base-201911131148.svg);;background-position:65.03999999999999% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item .icon-support,.qc-footer-service .fs-ct .item.disabled .icon-support,.qc-footer-service .fs-ct .item.disabled:hover .icon-support{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item:hover .icon-support{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 7.61%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item .icon-contact,.qc-footer-service .fs-ct .item.disabled .icon-contact,.qc-footer-service .fs-ct .item.disabled:hover .icon-contact{background-image:url(sprite/base-201911131148.svg);;background-position:50.63999999999999% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item:hover .icon-contact{background-image:url(sprite/base-201911131148.svg);;background-position:57.84% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item .icon-translate,.qc-footer-service .fs-ct .item.disabled .icon-translate,.qc-footer-service .fs-ct .item.disabled:hover .icon-translate{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 15%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-service .fs-ct .item:hover .icon-translate{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 44.57%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.qc-footer-blogroll{background:#2e3033;text-align:left;padding-top:25px;padding-bottom:35px}.qc-footer-blogroll .blogroll-inner{margin:0 auto;max-width:1180px;position:relative;padding-left:10px;padding-right:10px}.qc-footer-blogroll .link-set{display:inline-block}.qc-footer-blogroll .department{line-height:32px}.qc-footer-blogroll .slide{color:#bbb;font-size:12px;margin-right:10px;word-wrap:break-word}.qc-footer-blogroll a.slide:hover{color:#00a4ff}.qc-footer-blogroll .department .icon-tc{display:inline-block;width:91px;height:16px;background-size:553.8461538461538% 3075%;;background-position:0.24% 5.88%;background-image:url(sprite/base-201911131148.svg);;margin-right:20px;background-repeat:no-repeat}.qc-footer-blogroll .links{line-height:20px}.qc-footer-blogroll .locale{position:absolute;bottom:0;right:10px}.qc-footer-blogroll .locale .locale-link{color:#ccc;font-size:12px}.qc-footer-blogroll .locale .locale-link.selected,.qc-footer-blogroll .locale .locale-link:hover{color:#00a4ff}.qc-footer-blogroll .locale .stick{color:#ccc;font-size:10px;vertical-align:middle;margin-left:5px;margin-right:5px}.c-footer-service-list{table-layout:fixed}.c-footer-service-list>li{width:auto}.c-footer-service-list>li:last-child{width:120px;white-space:nowrap;text-align:right}.c-footer-service-item.disabled{opacity:.5;cursor:default}.c-footer-service-item.disabled [class*=icon-],.c-footer-service-item.disabled [class^=icon-]{opacity:.5}.c-footer-service-item.disabled:hover{color:#fff}.c-footer-service-item .icon{background-repeat:no-repeat}.c-footer-service-item .icon-disclaimer,.c-footer-service-item.disabled .icon-disclaimer,.c-footer-service-item.disabled:hover .icon-disclaimer{background-image:url(sprite/base-201911131148.svg);;background-position:65.03999999999999% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item:hover .icon-disclaimer{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 0.22%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item .icon-standard,.c-footer-service-item.disabled .icon-standard,.c-footer-service-item.disabled:hover .icon-standard{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item:hover .icon-standard{background-image:url(sprite/base-201911131148.svg);;background-position:65.03999999999999% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item .icon-support,.c-footer-service-item.disabled .icon-support,.c-footer-service-item.disabled:hover .icon-support{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item:hover .icon-support{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 7.61%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item .icon-contact,.c-footer-service-item.disabled .icon-contact,.c-footer-service-item.disabled:hover .icon-contact{background-image:url(sprite/base-201911131148.svg);;background-position:50.63999999999999% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item:hover .icon-contact{background-image:url(sprite/base-201911131148.svg);;background-position:57.84% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item .icon-translate,.c-footer-service-item.disabled .icon-translate,.c-footer-service-item.disabled:hover .icon-translate{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 15%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-service-item:hover .icon-translate{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 44.57%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.c-footer-blogroll-extra{width:auto;font-size:0}.c-footer-blogroll-extra .c-footer-select{display:inline-block;vertical-align:middle;width:190px}.c-footer .wechat-bubble{margin-right:20px}.c-footer .wechat-bubble-btn{box-sizing:border-box;width:35px;height:35px;border:1px solid rgba(255,255,255,.3);background-color:transparent;border-radius:2px;text-align:center;line-height:33px;cursor:pointer}.c-footer .wechat-bubble-btn .icon{position:relative;top:-2px;display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-size:3150% 3075%;;background-position:7.580000000000001% 92.86%;background-repeat:no-repeat}.c-footer .wechat-bubble .c-bubble-inner{width:130px;text-align:center}.c-footer .wechat-bubble .qr-img{width:100%}.c-footer .wechat-bubble .qr-txt{margin-top:5px}.com-simple-footer{width:100%;text-align:center;padding-bottom:50px;margin-top:45px}.com-simple-footer .copyright,.com-simple-footer a{color:#999}.com-simple-footer a{color:#00a4ff}.c-tab-cross:before{background-color:#D9D9D9}.c-tab-cross .c-tab-hd{padding:0;text-align:left}.c-tab-cross .c-tab-simple,.c-tab-cross.scrolling .c-tab-simple{margin-left:0;margin-right:20px}.c-tab-cross .c-tab-simple:last-child{margin-right:0}.c-tab-btns a:after{width:7px;height:13px;border:none}.c-tab-btns .prev:after{margin-right:0;-webkit-transform:rotate3d(0,0,1,0);transform:rotate3d(0,0,1,0);background-image:url(sprite/base-201911131148.svg);;background-position:2.01% 99.79%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.c-tab-btns .next:after{margin-right:0;-webkit-transform:rotate3d(0,0,1,0);transform:rotate3d(0,0,1,0);background-image:url(sprite/base-201911131148.svg);;background-position:6.84% 99.79%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.c-tab-simple a:hover{text-decoration:none}.c-tab-cross.with-bg,.c-tab-cross.with-bg .c-tab-btns a{background-color:#F7F8FA}.c-tab-cross.h-p .c-tab-simple a{padding:0;height:41px;line-height:40px;font-size:14px}.c-tab-cross.h-p .c-tab-simple .c-tab-tit{padding:0 15px}.c-tab-cross-wrap.fixed{height:41px}.c-tab-cross-wrap.fixed .c-tab-cross{position:fixed;top:54px;z-index:1000;background-color:#fff;box-shadow:rgba(0,0,0,.22) 0 5px 10px -5px}.com-tab-hd{position:relative;border-bottom:1px solid #e5e5e5}.com-tab-hd .com-tab-ctrl{border-bottom:none}.com-tab-hd-extra{position:absolute;right:0;top:0}.com-tab-ctrl{border-bottom:1px solid #e5e5e5;font-size:0}.com-tab-item{display:inline-block;vertical-align:middle;margin-right:10px}.com-tab-item:last-child{margin-right:0}.com-tab-item a{position:relative;display:block;padding:0 20px;height:32px;color:#000;font-size:12px;line-height:32px}.com-tab-item a:hover{color:#00a4ff}.com-tab-item.actived a,.com-tab-item.actived a:hover{color:#333;cursor:default;font-weight:700}.com-tab-item.actived a:after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background-color:#00a4ff}.com-tab-panel{padding-top:20px}.com-tab-hd.large .com-tab-ctrl{border-bottom-color:#E5E8ED}.com-tab-hd.large .com-tab-item{margin-right:60px}.com-tab-hd.large .com-tab-item a{padding:0 0 16px;font-size:16px;line-height:22px;height:auto}.com-tab-hd.large .com-tab-item.actived a,.com-tab-hd.large .com-tab-item.actived a:hover{font-weight:500;color:#00a4ff}.com-tab-hd.large .com-tab-item.actived a:after{height:3px}.com-tab-hd.large .com-tab-item .num{margin-left:5px;font-size:12px}.com-tab-hd.large .com-tab-subctrl{padding-top:9px}.com-tab.large .com-tab-panel{padding-top:30px}.com-tab-hd.side .com-tab-ctrl{background-color:#F3F5F9;border-bottom-color:#D2D9E7}.com-tab-hd.side .com-tab-item{margin-right:0;width:33.3333%}.com-tab-hd.side .com-tab-item a{padding:0 10px;height:60px;font-size:14px;line-height:60px;text-align:center}.com-tab-hd.side .com-tab-item.actived a,.com-tab-hd.side .com-tab-item.actived a:hover{font-weight:400;color:#00a4ff}.com-tab-hd.side .com-tab-item.actived a:after{display:none}.com-tab-hd.side .com-tab-item .num{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-left:5px;padding:0 5px;height:16px;font-size:12px;line-height:16px;border-radius:8px;color:#fff;background-color:#FF7800}.com-tab.side .com-tab-panel{padding-top:0}.com-tab.dropdown .com-tab-ctrl{margin-bottom:-1px;padding-bottom:1px;margin-right:60px;white-space:nowrap;overflow:hidden}.com-tab.dropdown .com-tab-item{margin-right:40px}.com-tab.dropdown .com-tab-item a{height:22px;padding-left:0;padding-right:0;padding-bottom:18px;line-height:22px;font-size:16px;color:#333}.com-tab.dropdown .com-tab-item a:hover,.com-tab.dropdown .com-tab-item.actived a{color:#00a4ff}.com-tab.dropdown .com-tab-item.actived a:after{height:3px}.com-tab-dropdown-wrap{position:relative;display:inline-block;vertical-align:middle}.com-tab-dropdown-trigger{display:block;font-size:16px;line-height:22px;color:#333}.com-tab-dropdown-trigger:after{content:'';display:inline-block;vertical-align:middle;position:relative;top:-1px;width:0;height:0;margin-left:5px;border-style:solid;border-width:6px 5px 0;border-color:#333 transparent;-ms-transition:transform .3s;-webkit-transition:transform .3s;transition:transform .3s}.com-tab-dropdown-wrap.show .com-tab-dropdown-trigger:after{-ms-transform:rotate(-180deg);-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.com-tab-dropdown{display:none;position:absolute;right:0;top:100%;z-index:300;margin-top:10px;border:1px solid #E7E8F1;box-shadow:0 10px 20px rgba(3,27,78,.1);background-color:#fff;min-width:80px;max-height:300px;overflow-x:hidden;overflow-y:auto}.com-tab-dropdown-wrap.show .com-tab-dropdown{display:block}.com-tab-dropdown a{display:block;padding:0 10px;font-size:14px;line-height:32px;text-align:left;text-align:center;color:#333;white-space:nowrap}.com-tab-dropdown a:hover{color:#00a4ff;background-color:#F2F2F2}.com-tab-dropdown li.actived a,.com-tab-dropdown li.actived a:hover{color:#00a4ff;background-color:transparent;cursor:default}.com-tab-subctrl{font-size:0}.com-tab-subctrl li{display:inline-block;vertical-align:middle}.com-tab-subctrl li:before{content:'';display:inline-block;vertical-align:middle;margin:0 15px;width:1px;height:18px;background:#D9D9D9}.com-tab-subctrl li:first-child:before{display:none}.com-tab-subctrl a{display:inline-block;vertical-align:middle;font-size:14px;line-height:24px;color:#333;text-align:center}.com-tab-subctrl a:hover{color:#00a4ff;text-decoration:none}.com-tab-subctrl .actived a{color:#00a4ff;font-weight:700;cursor:default}.com-order-list{line-height:24px;color:#333;counter-reset:order}.com-order-list li{position:relative;margin-bottom:8px;padding-left:24px}.com-order-list li:last-child{margin-bottom:0}.com-order-list li:before{position:absolute;left:0;top:4px;counter-increment:order;content:counter(order);width:16px;height:16px;font-size:0}.com-order-list li:nth-child(n+4):before{font-size:12px;line-height:16px;font-weight:700;text-align:center;color:#999}.com-order-list li:nth-child(1):before{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 94.75%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-order-list li:nth-child(2):before{background-image:url(sprite/base-201911131148.svg);;background-position:11.27% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-order-list li:nth-child(3):before{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 58.60999999999999%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-order-list a{display:block;color:inherit}.com-order-list a:hover{text-decoration:none;color:#00a4ff}.com-order-medias{counter-reset:order}.com-order-medias .com-media{margin-bottom:0}.com-order-medias>li{margin-bottom:15px}.com-order-medias>li:last-child{margin-bottom:0}.com-order-medias .com-media-object{padding-right:10px;width:32px}.com-order-medias .com-media-img{position:relative;width:32px;height:32px}.com-order-medias .com-media-img:before{counter-increment:order;content:counter(order);position:absolute;right:-5px;bottom:-5px;width:16px;height:16px;border:2px solid #fff;border-radius:50%;font-size:0}.com-order-medias>li:nth-child(n+4) .com-media-img:before{display:none}.com-order-medias>li:nth-child(1) .com-media-img:before{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 94.75%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-order-medias>li:nth-child(2) .com-media-img:before{background-image:url(sprite/base-201911131148.svg);;background-position:11.27% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-order-medias>li:nth-child(3) .com-media-img:before{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 58.60999999999999%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-order-medias .com-media-body{vertical-align:middle}.com-order-medias .com-media-title{margin-bottom:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-order-medias .com-media:hover .com-media-title{color:#00a4ff}.com-vh-box{position:fixed;left:-1px;top:-1px;width:1px;height:1px;overflow:hidden;visibility:hidden}.com-v-box{position:fixed;left:0;top:-1px;width:1px;height:1px;overflow:hidden}.c-mini-step{box-sizing:border-box;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #e5e5e5;color:#999;-webkit-user-select:none;counter-reset:step;font-size:0}.c-mini-step li{position:relative;display:inline-block;vertical-align:middle;color:#999;line-height:22px;font-size:0}.c-mini-step-num{box-sizing:border-box;display:inline-block;vertical-align:middle;margin-top:-1px;width:22px;height:22px;line-height:18px;border:2px solid #d4d5d7;border-radius:50%;margin-right:10px;text-align:center;color:#999;font-size:16px;font-weight:500}.c-mini-step-num:before{counter-increment:step;content:counter(step)}.c-mini-step-name{display:inline-block;vertical-align:middle;font-size:16px}.c-mini-step-arrow{height:16px;width:16px;display:inline-block;vertical-align:middle;margin-left:25px;margin-right:25px;background-image:url(sprite/base-201911131148.svg);;background-position:55.53% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.c-mini-step li:first-child .c-mini-step-arrow{display:none}.c-mini-step li.actived{color:#333}.c-mini-step li.actived .c-mini-step-num{color:#fff;background-color:#00a4ff;border-color:#00a4ff}.c-mini-step li.actived .c-mini-step-arrow{background-image:url(sprite/base-201911131148.svg);;background-position:22.34% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.c-mini-step li.finished{color:#666}.c-mini-step li.finished .c-mini-step-num{border-width:0;font-size:0}.c-mini-step li.finished .c-mini-step-num:after{content:'';display:inline-block;vertical-align:middle;width:22px;height:22px;background-image:url(sprite/base-201911131148.svg);;background-position:66.18% 83.62%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.c-mini-step li.finished .c-mini-step-arrow{background-image:url(sprite/base-201911131148.svg);;background-position:22.34% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-gallery{margin:0 -5px;height:410px;overflow:auto;font-size:0}.com-gallery>li{display:inline-block;vertical-align:middle;padding-left:5px;padding-right:5px;margin-bottom:10px}.com-gallery::-webkit-scrollbar{width:16px;height:16px}.com-gallery::-webkit-scrollbar-corner{background-color:transparent}.com-gallery::-webkit-scrollbar-track{border-radius:8px}.com-gallery::-webkit-scrollbar-thumb{height:7px;border-radius:8px;border:5px solid transparent;background-color:#ddd;background-clip:padding-box}.com-gallery-item{position:relative;display:block;box-sizing:border-box;width:160px;height:160px;border:1px solid #e5e5e5}.com-gallery-img{display:block;width:100%;height:100%;background-size:cover;background-position:center center;background-color:#f2f2f2}.com-gallery-mask{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.6;filter:alpha(opacity=60)}.com-gallery-icon{position:absolute;left:50%;top:50%;margin:-12px 0 0 -12px;width:24px;height:24px}.com-gallery-item.loading .com-gallery-icon{background-image:url(sprite/base-201911131148.png);-webkit-animation:galleryLoading 1.2s linear infinite;animation:galleryLoading 1.2s linear infinite;background-position:-42px 0px}@-webkit-keyframes galleryLoading{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes galleryLoading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.com-gallery-item.success .com-gallery-icon{background-image:url(sprite/base-201911131148.png);background-position:0px -42px}.com-gallery-item.success .com-gallery-mask{display:none}.com-gallery-item.error .com-gallery-icon{background-image:url(sprite/base-201911131148.png);background-position:-26px -42px}.com-gallery-item.error .com-gallery-mask{display:none}.com-gallery-item.checked{border:2px solid #00a4ff}.com-gallery-item.checked:after{content:'';position:absolute;right:-2px;bottom:-2px;width:40px;height:40px;background-image:url(sprite/base-201911131148.png);background-position:0px 0px}.com-gallery.clickable .com-gallery-item{cursor:pointer}.com-gallery.clickable .com-gallery-item:hover{border:2px solid #00a4ff}.com-gallery-item.upload,.com-gallery-item.upload:hover,.com-gallery.clickable .com-gallery-item.upload:hover{border:none}.com-gallery-item.upload .com-gallery-mask{display:none}.com-gallery-item.upload.loading .com-gallery-mask{display:block}.com-gallery-upload-area{position:relative;display:block;width:100%;height:100%;background-color:#f2f2f2;overflow:hidden}.com-gallery-upload-area .upload-area-img{display:block;width:100%;height:100%;background-size:cover;background-position:center}.com-gallery-upload-area .upload-area-txt{position:absolute;left:0;top:50%;width:100%;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:14px;color:#666;transition:all .3s ease-in-out}.com-gallery-upload-area .upload-area-icon{display:block;margin:0 auto 7px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:69.67% 40.129999999999995%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-gallery-upload-area .upload-file{position:absolute;right:0;top:0;font-size:300px;cursor:pointer}.com-gallery-upload-area:hover .upload-area-txt{color:#00a4ff}.com-gallery-upload-area:hover .upload-area-icon{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 88.87%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-upload-box{overflow:hidden}.com-upload-box .upload-img{float:left;margin-right:20px;width:200px;height:130px;border:1px solid #e5e5e5;line-height:130px;text-align:center}.com-upload-box img{max-width:100%;max-height:100%;vertical-align:middle}.com-upload-box .upload-tip{padding-left:240px}.com-upload-box .c-btn{margin-top:10px;vertical-align:middle}.com-upload-box .c-btn+.com-form-validate{margin-top:10px;display:inline-block;vertical-align:middle}.com-upload-file{margin:50px 0;text-align:center}.com-upload-file .upload-area{position:relative;display:block;margin:0 auto 15px;width:260px;height:260px;background-color:#f2f2f2;overflow:hidden}.com-upload-file .upload-area-img{display:block;width:100%;height:100%;background-size:cover;background-position:center}.com-upload-file .upload-area-txt{position:absolute;left:0;top:50%;width:100%;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:14px;color:#666}.com-upload-file .upload-area-icon{display:block;margin:0 auto 7px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:69.67% 40.129999999999995%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-upload-file .upload-file{position:absolute;right:0;top:0;font-size:300px;cursor:pointer}.com-upload-file .upload-link{position:relative;display:inline-block;vertical-align:middle;color:#00a4ff;overflow:hidden}.com-upload-file .upload-link:hover{text-decoration:underline}.com-upload-file .upload-area:hover .upload-area-txt{color:#00a4ff}.com-upload-file .upload-area:hover .upload-area-icon{background-image:url(sprite/base-201911131148.svg);;background-position:91.60000000000001% 88.87%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-upload-file .c-msg{margin-bottom:0;margin-top:5px}.com-qr-code{text-align:center;width:140px;font-size:12px}.com-qr-code .code-img{box-sizing:border-box;width:100%}.com-ranking-list{counter-reset:ranking}.com-ranking-list>li{position:relative;margin-bottom:15px;padding-left:28px;counter-increment:ranking}.com-ranking-list>li:last-child{margin-bottom:0}.com-ranking-list>li:before{content:counter(ranking);position:absolute;left:0;top:1px;width:18px;height:18px;text-align:center;font-size:16px;line-height:18px;color:#ccc;font-weight:700;border-radius:2px}.com-ranking-list>li:nth-child(1):before,.com-ranking-list>li:nth-child(2):before,.com-ranking-list>li:nth-child(3):before{background:#FFE28C;background:-webkit-gradient(linear,0 0,0 100%,from(#FA0),to(#FFE28C));background:-moz-linear-gradient(to bottom,#FA0,#FFE28C);background:-ms-linear-gradient(to bottom,#FA0,#FFE28C);background:-o-linear-gradient(to bottom,#FA0,#FFE28C);background:linear-gradient(to bottom,#FA0,#FFE28C);color:#fff;font-size:14px}.com-ranking-list a{display:block;color:#333}.com-ranking-list a:hover{color:#00a4ff}.com-widget-qr .scan-btn{box-sizing:border-box;border:1px solid #D2D9E7;background:#F3F5F9;cursor:pointer;font-size:0;width:46px;height:44px;line-height:44px;text-align:center}.com-widget-qr .scan-btn:after{content:'';display:inline-block;vertical-align:middle;width:21px;height:21px;background-image:url(sprite/base-201911131148.svg);;background-position:87.58% 23.57%;background-size:2400% 2342.8571428571427%;;background-repeat:no-repeat}.com-widget-qr .com-wechat-panel{border:none;padding:0}.com-widget-qr .c-bubble{width:150px}.com-widget-qr .c-bubble-inner{padding:12px 10px 10px}.com-widget-qr .qr-img{display:block;margin:0 auto;width:108px;height:auto}.com-widget-qr .qr-img img{display:block;width:100%;height:auto}.com-widget-qr .qr-txt{margin-top:10px;text-align:center;font-size:14px;color:#666}.com-article-panel-v2-list{margin-bottom:40px}.com-article-panel-v2{position:relative;display:block;padding:25px 20px;text-align:left;border-bottom:1px solid #eee;cursor:pointer}.com-article-panel-v2-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-article-panel-v2:hover{background-color:#f7f8fa}.com-article-panel-v2-title{font-size:18px;line-height:28px;font-weight:500;color:#000}.com-article-panel-v2-title a{color:#000}.com-article-panel-v2-title a:hover{color:#00a4ff}.com-article-panel-v2-tags.com-tag-v2-list{position:relative;z-index:2;margin-top:10px;margin-bottom:-15px}.com-article-panel-v2-bd{margin-top:20px;display:table;table-layout:fixed;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.com-article-panel-v2-object{display:table-cell;vertical-align:middle;padding-right:22px;width:200px}.com-article-panel-v2-object a{display:block}.com-article-panel-v2-object img{display:block;width:100%;height:auto}.com-article-panel-v2-object .com-article-panel-v2-img{display:block;width:200px;height:110px;border-radius:0;background-repeat:no-repeat;background-size:contain;background-position:center}.com-article-panel-v2-cnt{display:table-cell;vertical-align:middle}.com-article-panel-v2-des{font-size:14px;color:#666;line-height:24px;max-height:48px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.com-article-panel-v2-des a{color:#000}.com-article-panel-v2-des a:hover{color:#00a4ff}.com-article-panel-v2-opt{z-index:2;margin-top:20px;line-height:20px}.com-article-panel-v2:hover .com-article-panel-v2-opt{z-index:900}.com-article-panel-v2-opt .com-opt-link,.com-article-panel-v2-opt .com-opt-text{margin-right:16px;font-size:12px}.com-article-panel-v2-opt .com-opt-link .name{margin-right:0}.com-article-panel-v2.dot-list{padding-left:0;padding-right:0}.com-article-panel-v2.dot-list .com-article-panel-v2-title{position:relative;padding:0 20px}.com-article-panel-v2.dot-list .com-article-panel-v2-title:after{content:"";position:absolute;top:10px;left:7px;display:block;width:5px;height:5px;background-color:#00a4ff;border-radius:50%}.com-article-panel-v2.dot-list .com-article-panel-v2-bd{padding:0 20px}.com-article-panel-v2-user-wrap{position:relative;min-height:18px;z-index:2;margin-bottom:10px}.com-article-panel-v2:hover .com-article-panel-v2-user-wrap{z-index:900}.com-article-panel-v2-user-wrap .com-user-infos{font:none;margin-top:0;margin-bottom:0}.com-article-panel-v2-user-wrap .com-user-infos .com-media-object{width:24px}.com-article-panel-v2-user-wrap .com-user-infos .com-media-img{width:24px;height:24px}.com-article-panel-v2-user-wrap .com-tag-v2-list{position:absolute;right:0;white-space:nowrap;top:6px}.com-article-panel-v2-user-wrap .com-tag-v2{max-width:8em}.com-article-panel-v2.higher .com-article-panel-v2-object{vertical-align:top}.com-article-panel-v2.higher .com-article-panel-v2-opt{margin-top:10px}.com-article-panel-v2.higher .com-article-panel-v2-opt .com-opt-link,.com-article-panel-v2.higher .com-article-panel-v2-opt .com-opt-text{margin-right:20px}.com-user-infos{margin-top:10px}.com-user-infos .com-media-object{width:30px;padding-right:10px}.com-user-infos .com-media-img{box-sizing:border-box;width:30px;height:30px;border:1px solid #e5e5e5}.com-user-infos .com-media-body{vertical-align:middle;font-size:0}.com-user-infos .author-info{display:inline-block;vertical-align:middle;font-size:14px;line-height:20px;color:#999}.com-user-infos .author-info:before{content:'\B7';margin:0 5px}.com-user-infos a.author-info:hover{text-decoration:none;color:#00a4ff}.com-user-infos .author-info.name{max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-user-infos .author-info:first-child:before{display:none}.com-header{box-sizing:border-box;padding:0 15px;min-width:320px;height:56px;line-height:56px;background-color:#fff;text-align:center;position:absolute;left:0;top:0;right:0;z-index:auto;border-bottom:0;box-shadow:inset 0 -1px 0 0 rgba(210,217,231,.71)}.com-header .header-title{color:#000;vertical-align:middle;font-weight:600;font-weight:400;font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 40px}.com-header .header-title .com-2-avatar{margin:0 5px 0 0}.com-header .logo{color:#000;font-size:16px;display:inline-block}.com-special-header .logo{width:100px;height:25px;position:absolute;left:15px;top:50%;transform:translate(0,-50%);background-image:url(sprite/base-201911131148.svg);;background-position:0.25% 0.21%;background-size:504% 1968%;;background-repeat:no-repeat}.com-header .logo .header-title{color:#000;display:inline-block;text-overflow:initial;white-space:initial;margin:0;font-weight:400}.com-special-header .logo .header-title{display:none}.com-header .logo-icon{display:none;display:none;width:21px;height:14.9px;vertical-align:middle;background-color:#212121}.com-header .header-extra{position:absolute;right:15px;top:0}.com-header .header-extra a{display:inline-block;vertical-align:middle;color:#333;font-size:14px}.com-header .header-extra a:active{color:#00a4ff}.com-header .header-back{display:inline-block;text-align:center;padding:0 15px;position:absolute;left:0;top:0;font-size:0}.com-header .header-back-icon{width:9px;height:14px;display:inline-block;vertical-align:middle;background-image:url(sprite/base-201911131148.svg);;background-repeat:no-repeat;background-size:5600% 3514.2857142857147%;;background-position:69.69999999999999% 25.94%}.com-header .header-home-icon{width:25px;height:25px;display:inline-block;vertical-align:middle;background-image:url(sprite/base-201911131148.svg);;background-position:82.05% 72.59%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-header .header-extra-icon{display:inline-block;width:25px;height:25px;vertical-align:middle}.com-header .header-extra-icon+.header-extra-icon{margin-left:20px}.com-header .header-extra-icon.ask{width:24px;height:24px;background-image:url(sprite/base-201911131148.svg);;background-position:50.62% 83.97%;background-size:2100% 2050%;;background-repeat:no-repeat}.com-header .search-entry{position:relative;top:-1px;background-image:url(sprite/base-201911131148.svg);;background-position:5.8500000000000005% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-header .com-dropdown-menu .menu-link{color:#444}.com-special-header{text-align:left}.com-special-header .header-back{display:none}.com-header .header-extra-back{position:absolute;left:20px;top:0}.com-header .header-extra-back a{color:#333;font-size:14px}.com-header .header-extra-back a:active{color:#00a4ff}.header-logo-wrap{display:inline-block;vertical-align:middle;font-size:0}.header-logo-wrap .header-logo{display:inline-block;vertical-align:middle;position:relative;top:-1px}.header-logo-wrap .header-logo .header-title{display:none}.header-logo-wrap .header-logo .logo-icon{background:0 0}.header-logo-wrap .header-logo .logo-index{display:block;width:35px;height:25px;background-image:url(sprite/base-201911131148.svg);;background-position:64.61% 40.9%;background-size:1440% 1968%;;background-repeat:no-repeat}.header-logo-wrap .split{display:inline-block;vertical-align:middle;margin:0 5px;width:4px;height:4px;background:#000;border-radius:50%}.header-logo-wrap .header-logo .logo-community{display:block;width:60px;height:25px;background-image:url(sprite/base-201911131148.svg);;background-position:29.95% 42.61%;background-size:840% 1968%;;background-repeat:no-repeat}.com-header .header-main{position:absolute;left:15px;top:0;text-align:left;font-size:0}.com-header .header-menu-trigger{display:inline-block;vertical-align:middle;margin-right:10px}.com-header .header-menu-trigger:before{content:'';display:inline-block;vertical-align:middle;width:20px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 46.64%;background-size:2520% 3075%;;background-repeat:no-repeat}.com-header .header-main-title{display:inline-block;vertical-align:middle;font-size:16px;color:#333;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:6em}.com-header .header-extra a+a{margin-left:10px}.com-header .header-extra .header-msg{position:relative;padding:0 5px;font-size:0}.com-header .header-i-msg{display:inline-block;vertical-align:middle;width:22px;height:22px;background-image:url(sprite/base-201911131148.svg);;background-position:61.199999999999996% 83.62%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.com-header .header-msg .header-badge{position:absolute;left:100%;top:16px;padding:0 3px;margin-left:-15px;min-width:10px;height:14px;font-size:12px;line-height:14px;text-align:center;background-color:#00a4ff;color:#fff;border-radius:7px}.com-header .header-extra .c-bubble-trigger{margin-left:13px}.com-header .header-user{position:relative;margin-right:-5px;padding:0 5px}.com-header .header-btn{height:28px;line-height:28px}.com-header .header-btn .btn-text{font-size:12px;display:block;color:#fff}.com-header .header-btn.c-btn-weak .btn-text{color:#999}.com-header .header-extra .header-user-name{display:none}.com-header .header-user-avatar{display:inline-block;vertical-align:middle;box-sizing:border-box;margin-top:-3px;width:26px;height:26px;border:2px solid #e5e5e5;background-size:cover;background-position:center;border-radius:50%}.com-m-side-mask{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1000;background-color:#000;opacity:.7;transition:all .3s ease-in-out}.com-m-side-mask.hidden{opacity:0;visibility:hidden}.com-m-side{position:absolute;left:0;top:0;z-index:1001;width:300px;height:100%;background-color:#fff;box-shadow:4px 2px 4px 0 rgba(0,0,0,.2);transition:all .3s ease}.com-m-side.hidden{left:-330px}.com-m-side-hd{position:relative;padding:0 15px;height:56px;border-bottom:1px solid #e5e5e5;line-height:56px}.com-m-side-hd .header-logo-wrap{position:relative;top:-1px}.com-m-side-hd-extra{position:absolute;right:10px;top:0;font-size:0}.com-m-side-link{display:inline-block;vertical-align:middle;padding:0 5px;font-size:14px;color:#999}.com-m-side-link [class*=icon-],.com-m-side-link [class^=icon-]{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-left:5px;width:16px;height:16px}.com-m-side-link .icon-back{width:9px;height:15px;background-image:url(sprite/base-201911131148.svg);;background-position:69.69999999999999% 22.43%;background-size:5600% 3279.9999999999995%;;background-repeat:no-repeat}.com-m-side-link .icon-logout{top:-2px;width:13px;height:13px;background-image:url(sprite/base-201911131148.svg);;background-position:3.8699999999999997% 99.79%;background-size:3876.9230769230767% 3784.6153846153848%;;background-repeat:no-repeat}.com-m-side-link [class*=icon-]:only-child,.com-m-side-link [class^=icon-]:only-child{margin-right:5px}.com-m-side-bd{position:absolute;left:0;top:57px;right:0;bottom:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.com-m-side-ft{position:absolute;left:0;right:0;bottom:0;padding:0 15px 15px}.com-m-side-ft .com-m-side-link{line-height:36px}.com-m-side-nav{padding:8px 0}.com-m-side-nav-item.split{margin:5px 20px;border-top:1px solid #e5e5e5}.com-m-side-nav-link{display:block;position:relative;padding-left:62px;padding-right:20px;font-size:15px;line-height:48px;height:48px;color:#333}.com-m-side-nav-link [class*=icon-],.com-m-side-nav-link [class^=icon-]{position:absolute;left:15px;top:8px;width:32px;height:32px}.com-m-side-nav-link .icon-home{background-image:url(sprite/base-201911131148.svg);;background-position:56.989999999999995% 49.13%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-home{background-image:url(sprite/base-201911131148.svg);;background-position:49.79% 49.13%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-column{background-image:url(sprite/base-201911131148.svg);;background-position:21.82% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-column{background-image:url(sprite/base-201911131148.svg);;background-position:14.62% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-ask{background-image:url(sprite/base-201911131148.svg);;background-position:50.63999999999999% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-ask{background-image:url(sprite/base-201911131148.svg);;background-position:43.43% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-more{background-image:url(sprite/base-201911131148.svg);;background-position:28.18% 49.13%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-more{background-image:url(sprite/base-201911131148.svg);;background-position:42.16% 28.910000000000004%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-me{background-image:url(sprite/base-201911131148.svg);;background-position:42.58% 49.13%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-me{background-image:url(sprite/base-201911131148.svg);;background-position:35.38% 49.13%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-salon{background-image:url(sprite/base-201911131148.svg);;background-position:29.03% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-salon{background-image:url(sprite/base-201911131148.svg);;background-position:21.82% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-nonstop{background-image:url(sprite/base-201911131148.svg);;background-position:43.43% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-nonstop{background-image:url(sprite/base-201911131148.svg);;background-position:36.230000000000004% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-news{background-image:url(sprite/base-201911131148.svg);;background-position:28.18% 14.57%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-news{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 29.78%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-devdoc{background-image:url(sprite/base-201911131148.svg);;background-position:7.42% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-devdoc{background-image:url(sprite/base-201911131148.svg);;background-position:76.06% 51.959999999999994%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-college{background-image:url(sprite/base-201911131148.svg);;background-position:36.230000000000004% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-college{background-image:url(sprite/base-201911131148.svg);;background-position:29.03% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-tvp{background-image:url(sprite/base-201911131148.svg);;background-position:57.84% 57.60999999999999%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-tvp{background-image:url(sprite/base-201911131148.svg);;background-position:64.19% 47.39%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-link .icon-ai{background-image:url(sprite/base-201911131148.svg);;background-position:14.62% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link .icon-ai{background-image:url(sprite/base-201911131148.svg);;background-position:7.42% 65%;background-size:1575% 1537.5%;;background-repeat:no-repeat}.has-subnav>.com-m-side-nav-link:after{content:'';position:absolute;right:15px;top:50%;margin-top:-3px;width:14px;height:8px;background-image:url(sprite/base-201911131148.svg);;transition:all .3s linear;background-position:68.78% 50%;background-size:3600% 6150%;;background-repeat:no-repeat}.com-m-side-nav-item.actived>.com-m-side-nav-link{background-color:#EBEBEB;color:#00a4ff}.com-m-side-nav-item.opened>.com-m-side-nav-link:after{transform:rotate3d(0,0,1,180deg)}.com-m-side-nav-second{display:none}.com-m-side-nav-item.opened>.com-m-side-nav-second{display:block}.com-m-side-nav-second .com-m-side-nav-link:after,.com-m-side-nav-second>li:first-child>.com-m-side-nav-link:before{content:'';position:absolute;left:62px;right:0;bottom:0;height:1px;background-color:#e5e5e5}.com-m-side-nav-second>li:first-child>.com-m-side-nav-link:before{top:0;bottom:auto}.com-2-header-common{font-size:0;text-align:left;overflow:hidden}.com-2-header-search{display:none;opacity:0;visibility:hidden}.com-2-header-search-link{display:block;padding:0 7px;height:33px;line-height:33px;font-size:0;background-color:#f4f5f9;box-sizing:border-box}.com-2-header-search-link .com-2-header-search-text{margin-left:7px;vertical-align:middle;font-size:14px;color:#666}.com-2-m-side .com-m-side-bd{display:-webkit-box;display:flex;flex-flow:column nowrap;-webkit-box-orient:vertical;overflow-x:hidden;overflow-y:auto}.com-2-m-side .com-m-side-nav{flex:1;-webkit-box-flex:1;box-sizing:border-box}.com-2-m-side .com-m-side-idx-link-wrap{padding:20px;width:100%;box-sizing:border-box}.com-2-m-side .com-m-side-idx-link{line-height:30px;font-size:14px;color:#9b9b9b}.com-2-header .com-2-tab{padding:0 20px;background:0 0}.com-2-header .com-2-tab .com-2-tab-ctrl-item,.com-2-header .com-2-tab .com-2-tab-ctrl-item a,.com-2-header .com-2-tab .com-2-tab-hd{height:56px}.com-2-header .com-2-tab .com-2-tab-hd{padding:0}.com-2-header .com-2-tab .com-2-tab-hd:before{display:none}.com-2-header .com-2-tab .com-2-tab-ctrl-item{padding:0 5px}.com-2-header .com-2-tab .com-2-tab-ctrl{height:68px}.com-2-header .com-2-tab .com-2-tab-ctrl-item a{line-height:56px;padding:0;font-size:16px;color:#999}.com-2-header .com-2-tab .com-2-tab-ctrl-item.actived a{color:#00a4ff}.com-2-header .com-2-tab .com-2-tab-ctrl-item.actived a:before{display:none}.com-2-header .logo{display:inline-block;vertical-align:top;padding:0 20px;max-width:100%;font-size:0;box-sizing:border-box}.com-2-header .logo .header-title{max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:16px;color:#333}.com-header.subsite .header-logo{top:-2px}.com-header-air{background:0 0;z-index:1;box-shadow:none;color:#fff}.com-header-air .header-extra a,.com-header-air .header-title{color:#fff}.com-header-air .header-back-icon{background-image:url(sprite/base-201911131148.svg);;background-position:69.69999999999999% 31.169999999999998%;background-size:5600% 3514.2857142857147%;;background-repeat:no-repeat}.com-header-air .header-i-msg{display:inline-block;vertical-align:middle;width:22px;height:22px;background-image:url(sprite/base-201911131148.svg);;background-position:80.28999999999999% 83.62%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.com-header-air .c-bubble-trigger.com-operations-dropdown .c-bubble-trigger-btn:after{background-image:url(sprite/base-201911131148.svg);;background-position:87.76% 0.21%;background-size:2290.909090909091% 2236.3636363636365%;;background-repeat:no-repeat}.com-m-footer{box-sizing:border-box;position:absolute;z-index:6;left:0;bottom:0;right:0;width:100%;height:50px;border-top:1px solid #eee;background-color:#fff}.com-m-footer .nav-inner{display:-webkit-box;display:-ms-flexbox;display:flex}.com-m-footer .nav-dropdown-wrap,.com-m-footer .nav-item{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;padding-top:4px;height:49px;color:#000;text-align:center}.com-m-footer .nav-item.actived{color:#00a4ff}.com-m-footer .nav-inner .icon{display:inline-block;vertical-align:middle;width:25px;height:25px}.com-m-footer .nav-inner .home{background-image:url(sprite/base-201911131148.svg);;background-position:40.71% 42.61%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .column{background-image:url(sprite/base-201911131148.svg);;background-position:82.05% 61.029999999999994%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .ask{background-image:url(sprite/base-201911131148.svg);;background-position:17.119999999999997% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .lab{background-image:url(sprite/base-201911131148.svg);;background-position:57.620000000000005% 42.61%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .me{background-image:url(sprite/base-201911131148.svg);;background-position:22.759999999999998% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .more{background-image:url(sprite/base-201911131148.svg);;background-position:28.389999999999997% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .actived .home{background-image:url(sprite/base-201911131148.svg);;background-position:51.980000000000004% 42.61%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .actived .column{background-image:url(sprite/base-201911131148.svg);;background-position:82.05% 66.81%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .actived .ask{background-image:url(sprite/base-201911131148.svg);;background-position:39.67% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .actived .lab{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .actived .me{background-image:url(sprite/base-201911131148.svg);;background-position:34.03% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .actived .more{background-image:url(sprite/base-201911131148.svg);;background-position:11.48% 84.15%;background-size:2016% 1968%;;background-repeat:no-repeat}.com-m-footer .nav-inner .title{margin:-2px 0 0;font-weight:400;font-size:12px;-webkit-transform:scale(.83,.83);transform:scale(.83,.83)}.com-m-footer .nav-inner .actived .title{color:#00a4ff}.com-m-footer .nav-dropdown-wrap{position:relative;white-space:nowrap}.com-m-footer .nav-dropdown-wrap .nav-item{display:block;padding-top:0}.com-m-footer .nav-dropdown-wrap .c-bubble{left:50%;bottom:100%;margin-left:-73px;margin-bottom:2px}.com-m-footer-menu li{border-bottom:1px solid #e5e5e5}.com-m-footer-menu li:last-child{border-bottom:none}.com-m-footer-menu .menu-link{display:block;margin:0 -20px;padding:0 30px;height:44px;font-size:14px;line-height:44px;color:#444;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.com-m-footer-menu .menu-link.actived,.com-m-footer-menu .menu-link:active{color:#00a4ff;text-decoration:none}.c-bubble .com-m-footer-menu{margin:-8px -10px;padding:0 20px}.com-2-m-footer{margin-top:20px;padding:30px 15px;text-align:center;background-color:#2e3033}.com-2-m-footer .footer-qr{margin-bottom:14px}.com-2-m-footer .footer-qr-object{display:inline-block;vertical-align:top;padding:8px;background-color:#fff;width:108px;height:108px}.com-2-m-footer .footer-qr-image{display:block;width:100%;height:100%}.com-2-m-footer .footer-qr-info{margin-top:6px}.com-2-m-footer .footer-qr-text{display:block;line-height:20px;font-size:14px;color:#999}.com-2-m-footer .footer-copyright-text{line-height:18px;font-size:12px;color:#999}.com-2-m-footer .footer-copyright-text+.footer-copyright-text{margin-left:10px}.com-2-m-footer.only-copyright{text-align:left}.com-2-m-footer.only-copyright .footer-copyright-text{display:inline}.com-2-m-footer,.com-header,.com-m-footer{display:none}.com-nav-Links{font-size:0}.com-nav-Links>li{display:inline-block;vertical-align:middle}.com-nav-Links>li:before{content:'';display:inline-block;vertical-align:middle;margin:0 10px;width:2px;height:2px;border-radius:50%;background-color:#333}.com-nav-Links>li:first-child:before{display:none}.com-nav-Link{display:inline-block;vertical-align:middle;font-size:14px;line-height:30px;color:#333;white-space:nowrap}.com-nav-Link.highlight{color:#FF7800;font-weight:600}.com-nav-Link:hover{color:#00a4ff}.com-page-btns{text-align:center;font-size:0}.com-page-btn{position:relative;display:inline-block;vertical-align:middle;margin:0 15px;width:24px;height:24px}.com-page-btn .btn-icon{display:block;box-sizing:border-box;width:100%;height:100%;border:1px solid #D2D9E7;border-radius:50%;text-align:center;line-height:22px}.com-page-btn:hover .btn-icon{border-color:#00a4ff}.com-page-btn .btn-icon:before{content:'';position:relative;display:inline-block;vertical-align:middle;width:11px;height:11px}.com-page-btn.prev .btn-icon:before{background:url(components/PageBtns/css/img/slice/left.svg) no-repeat}.com-page-btn.prev:hover .btn-icon:before{background:url(components/PageBtns/css/img/slice/left-hover.svg) no-repeat}.com-page-btn.next .btn-icon:before{background:url(components/PageBtns/css/img/slice/right.svg) no-repeat}.com-page-btn.next:hover .btn-icon:before{background:url(components/PageBtns/css/img/slice/right-hover.svg) no-repeat}.com-page-btn.disabled{cursor:default}.com-page-btn.disabled:hover .btn-icon{border-color:#D2D9E7}.com-page-btn.prev.disabled:hover .btn-icon:before{background:url(components/PageBtns/css/img/slice/left.svg) no-repeat}.com-page-btn.next.disabled:hover .btn-icon:before{background:url(components/PageBtns/css/img/slice/right.svg) no-repeat}.com-page-btn .btn-timer-wrap{position:absolute;left:-1px;right:-1px;top:-1px;bottom:-1px}.com-page-btn .btn-timer{width:100%;height:100%}.com-page-btn .btn-timer-path{fill:none;stroke:#00a4ff;stroke-width:2px;opacity:0;transition:opacity 10ms linear 10ms}.com-arrow-btn{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;min-width:102px;padding-right:38px;height:28px;border:1px solid #00a4ff;text-align:center;font-size:12px;line-height:26px;color:#00a4ff;overflow:hidden;background-color:#fff}.com-arrow-btn-text{position:relative;display:block;padding:0 10px}.com-arrow-btn-text:after{content:'';position:absolute;left:100%;top:0;width:0;height:0;border-style:solid;border-width:13px 5px;border-color:transparent}.com-arrow-btn-caret{position:absolute;right:0;top:0;width:28px;padding-left:10px;height:100%;text-align:center}.com-arrow-btn-caret:before{content:'';position:absolute;right:100%;bottom:0;width:1px;height:150%;background-color:#00a4ff;-ms-transform:skewX(-20deg);-webkit-transform:skewX(-20deg);transform:skewX(-20deg);-ms-transform-origin:left bottom;-webkit-transform-origin:left bottom;transform-origin:left bottom}.com-arrow-btn-caret:after{content:'';display:inline-block;vertical-align:middle;position:relative;box-sizing:border-box;width:8px;height:8px;border-top:1px solid #00a4ff;border-right:1px solid #00a4ff;-ms-transform:rotate(45deg);transform:rotate(45deg);margin-left:-4px}.com-arrow-btn.actived .com-arrow-btn-text,.com-arrow-btn:hover .com-arrow-btn-text{background-color:rgba(0,146,238,.15)}.com-arrow-btn.actived .com-arrow-btn-text:after,.com-arrow-btn:hover .com-arrow-btn-text:after{border-color:rgba(0,146,238,.15) transparent transparent rgba(0,146,238,.15)}.com-arrow-btn.disabled,.com-arrow-btn.disabled:hover{border-color:#ddd;color:#999;cursor:default}.com-arrow-btn.disabled .com-arrow-btn-caret:before,.com-arrow-btn.disabled .com-arrow-btn-text,.com-arrow-btn.disabled:hover .com-arrow-btn-caret:before,.com-arrow-btn.disabled:hover .com-arrow-btn-text{background-color:#ddd}.com-arrow-btn.disabled .com-arrow-btn-text:after,.com-arrow-btn.disabled:hover .com-arrow-btn-text:after{border-color:#ddd transparent transparent #ddd}.com-arrow-btn.disabled .com-arrow-btn-caret:after,.com-arrow-btn.disabled:hover .com-arrow-btn-caret:after{border-top-color:#ddd;border-right-color:#ddd}.com-arrow-btn.white-hole{background-color:transparent;border-color:#fff;color:#fff}.com-arrow-btn.white-hole .com-arrow-btn-caret:before{background-color:#fff}.com-arrow-btn.white-hole .com-arrow-btn-caret:after{border-color:#fff}.com-arrow-btn.white-hole.actived,.com-arrow-btn.white-hole:hover{color:#000}.com-arrow-btn.white-hole.actived .com-arrow-btn-text,.com-arrow-btn.white-hole:hover .com-arrow-btn-text{background-color:#fff}.com-arrow-btn.white-hole.actived .com-arrow-btn-text:after,.com-arrow-btn.white-hole:hover .com-arrow-btn-text:after{border-color:#fff transparent transparent #fff}.com-arrow-btn.white-hole.disabled,.com-arrow-btn.white-hole.disabled:hover{border-color:#ddd;color:#999}.com-arrow-btn.white-hole.disabled .com-arrow-btn-caret:before,.com-arrow-btn.white-hole.disabled .com-arrow-btn-text,.com-arrow-btn.white-hole.disabled:hover .com-arrow-btn-caret:before,.com-arrow-btn.white-hole.disabled:hover .com-arrow-btn-text{background-color:#ddd}.com-arrow-btn.white-hole.disabled .com-arrow-btn-text:after,.com-arrow-btn.white-hole.disabled:hover .com-arrow-btn-text:after{border-color:#ddd transparent transparent #ddd}.com-arrow-btn.white-hole.disabled .com-arrow-btn-caret:after,.com-arrow-btn.white-hole.disabled:hover .com-arrow-btn-caret:after{border-top-color:#ddd;border-right-color:#ddd}.com-arrow-btn.primary{background-color:#fff;color:#fff}.com-arrow-btn.primary .com-arrow-btn-text{background-color:#00a4ff}.com-arrow-btn.primary .com-arrow-btn-text:after{border-color:#00a4ff transparent transparent #00a4ff}.com-arrow-btn.primary.actived,.com-arrow-btn.primary:hover{border-color:#0092EE}.com-arrow-btn.primary.actived .com-arrow-btn-text,.com-arrow-btn.primary:hover .com-arrow-btn-text{background-color:#0092EE}.com-arrow-btn.primary.actived .com-arrow-btn-text:after,.com-arrow-btn.primary:hover .com-arrow-btn-text:after{border-color:#0092EE transparent transparent #0092EE}.com-arrow-btn.primary.actived .com-arrow-btn-caret:after,.com-arrow-btn.primary:hover .com-arrow-btn-caret:after{border-top-color:#0092EE;border-right-color:#0092EE}.com-arrow-btn.primary.disabled,.com-arrow-btn.primary.disabled:hover{border-color:#ddd;color:#999;cursor:default}.com-arrow-btn.primary.disabled .com-arrow-btn-caret:before,.com-arrow-btn.primary.disabled .com-arrow-btn-text,.com-arrow-btn.primary.disabled:hover .com-arrow-btn-caret:before,.com-arrow-btn.primary.disabled:hover .com-arrow-btn-text{background-color:#ddd}.com-arrow-btn.primary.disabled .com-arrow-btn-text:after,.com-arrow-btn.primary.disabled:hover .com-arrow-btn-text:after{border-color:#ddd transparent transparent #ddd}.com-arrow-btn.primary.disabled .com-arrow-btn-caret:after,.com-arrow-btn.primary.disabled:hover .com-arrow-btn-caret:after{border-top-color:#ddd;border-right-color:#ddd}.com-arrow-btn.blue-hole{background-color:transparent}.com-arrow-btn.l{padding-right:42px;height:32px;font-size:14px;line-height:30px;min-width:190px}.com-arrow-btn.l .com-arrow-btn-text{padding:0 20px}.com-arrow-btn.l .com-arrow-btn-text:after{border-width:15px 5px}.com-arrow-btn.l .com-arrow-btn-caret{width:32px}.com-arrow-btn.l .com-arrow-btn-caret:after{width:10px;height:10px;margin-left:-5px}.com-arrow-btn.xl{padding-right:48px;height:36px;font-size:16px;line-height:34px;min-width:280px}.com-arrow-btn.xl .com-arrow-btn-text{padding:0 30px}.com-arrow-btn.xl .com-arrow-btn-text:after{border-width:17px 6px}.com-arrow-btn.xl .com-arrow-btn-caret{width:36px;padding-left:12px}.com-arrow-btn.xl .com-arrow-btn-caret:after{width:10px;height:10px;margin-left:-5px}.com-2-arrow-link{font-size:14px;color:#00a4ff;text-decoration:none}.com-2-arrow-link:hover{color:#00a4ff}.com-2-arrow-link [class*=com-i-],.com-2-arrow-link [class^=com-i-]{position:relative;top:-1px;margin-left:5px}.com-2-arrow-link.gray{color:#999}.com-2-arrow-link.gray:hover{color:#00a4ff}.com-2-arrow-link.gray:hover .com-i-arrow-circle-gray{background-image:url(sprite/base-201911131148.svg);;background-position:69.59% 59.209999999999994%;background-size:3600% 3514.2857142857147%;;background-repeat:no-repeat}.com-icon-link{font-size:14px;color:#999;text-decoration:none}.com-icon-link:hover{text-decoration:none;color:#00a4ff}.com-icon-link [class*=com-i-],.com-icon-link [class^=com-i-]{position:relative;top:-1px;margin-right:5px}.com-icon-link [class*=com-i-]:last-child,.com-icon-link [class^=com-i-]:last-child{margin-left:10px;margin-right:0}.com-icon-link.refreshing [class*=com-i-],.com-icon-link.refreshing [class^=com-i-]{-moz-animation:spin .6s infinite linear;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear}.com-icon-link:hover .com-i-edit-2{background-image:url(sprite/base-201911131148.svg);;background-position:37.09% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link,.com-opt-text{display:inline-block;vertical-align:middle;color:#999;font-size:12px}.com-opt-link .name,.com-opt-text .name{margin-right:5px}.com-opt-link [class*=com-i-],.com-opt-link [class^=com-i-],.com-opt-text [class*=com-i-],.com-opt-text [class^=com-i-]{position:relative;top:-1px;margin-right:5px}.com-opt-link .com-i-share:last-child,.com-opt-text .com-i-share:last-child{margin-right:0}.com-opt-text.actived,a.com-opt-link.actived,a.com-opt-link:hover{color:#00a4ff;text-decoration:none}.com-split{display:inline-block;vertical-align:middle;margin:0 15px;width:1px;height:18px;background-color:#d9d9d9;overflow:hidden}.com-split.dot{margin:0 8px;width:2px;height:2px;border-radius:50%;background:#999}.com-h-split{display:block;margin:20px auto;height:1px;border:none;background-color:#e5e5e5}a.com-opt-link:hover .com-i-share{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 0.21%;background-size:3150% 3075%;;background-repeat:no-repeat}a.com-opt-link:hover .com-i-warn{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 30.459999999999997%;background-size:3150% 3075%;;background-repeat:no-repeat}a.com-opt-link:hover .com-i-dialog{background-image:url(sprite/base-201911131148.svg);;background-position:55.53% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.actived .com-i-edit,a.com-opt-link:hover .com-i-edit{background-image:url(sprite/base-201911131148.svg);;background-position:44.47% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}a.com-opt-link:hover .com-i-delete{background-image:url(sprite/base-201911131148.svg);;background-position:66.60000000000001% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link .com-i-like,.com-opt-text .com-i-like{top:-2px}a.com-opt-link:hover .com-i-like{background-image:url(sprite/base-201911131148.svg);;background-position:14.96% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.actived .com-i-like,.com-opt-link.actived:hover .com-i-like,.com-opt-text.actived .com-i-like{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 90.97%;background-size:3150% 3075%;;background-repeat:no-repeat}a.com-opt-link:hover .com-i-view{background-image:url(sprite/base-201911131148.svg);;background-position:37.09% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}a.com-opt-link:hover .com-i-report{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 30.459999999999997%;background-size:3150% 3075%;;background-repeat:no-repeat}a.com-opt-link:hover .com-i-bookmark{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 0.21%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.actived .com-i-bookmark,.com-opt-link.actived:hover .com-i-bookmark,.com-opt-link.text .com-i-bookmark{background-image:url(sprite/base-201911131148.svg);;background-position:92.42% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-text.actived .com-i-adopt,a.com-opt-link.actived .com-i-adopt,a.com-opt-link.actived:hover .com-i-adopt,a.com-opt-link:hover .com-i-adopt{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 26.68%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-text.actived .com-i-recommend,a.com-opt-link.actived .com-i-recommend,a.com-opt-link:hover .com-i-recommend{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 79.62%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.dark,.com-opt-text.dark{color:#666}.com-opt-link.dark .com-i-view,.com-opt-text.dark .com-i-view{background-image:url(sprite/base-201911131148.svg);;background-position:29.709999999999997% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.dark .com-i-report,.com-opt-text.dark .com-i-report{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 19.12%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.darker,.com-opt-text.darker{color:#333}.com-opt-link.darker .com-i-view,.com-opt-text.darker .com-i-view{background-image:url(sprite/base-201911131148.svg);;background-position:33.4% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.darker .com-i-like,.com-opt-text.darker .com-i-like{background-image:url(sprite/base-201911131148.svg);;background-position:7.580000000000001% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.darker.actived .com-i-like,.com-opt-link.darker.actived:hover .com-i-like,.com-opt-text.darker.actived .com-i-like{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 90.97%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.darker .com-i-dialog,.com-opt-text.darker .com-i-dialog{background-image:url(sprite/base-201911131148.svg);;background-position:51.839999999999996% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.darker .com-i-share,.com-opt-text.darker .com-i-share{background-image:url(sprite/base-201911131148.svg);;background-position:88.73% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.darker .com-i-report,.com-opt-link.darker .com-i-warn,.com-opt-text.darker .com-i-report,.com-opt-text.darker .com-i-warn{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 22.900000000000002%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-opt-link.white{color:#fff}.com-opt-link.white .com-i-share{background-image:url(sprite/base-201911131148.svg);;background-position:81.35% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-operations{position:relative;font-size:0;margin-top:15px}.com-operations .com-opt-link,.com-operations .com-opt-text{margin-right:20px}.com-operations .com-opt-link:last-child,.com-operations .com-opt-text:last-child{margin-right:0}.com-operations .extra-part{position:absolute;right:0;top:0}.com-operations .extra-part .com-opt-link,.com-operations .extra-part .com-opt-text{margin-right:0;margin-left:20px}.com-operations .com-share-options{margin-left:-10px}.com-mark-text.apply{color:#FF7800}.com-mark-text.starting{color:#00C8DC}.com-mark-text.end{color:#666}.com-mark-skew{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;padding:0 18px;height:26px;min-width:90px;font-size:12px;line-height:26px;font-weight:500;text-align:center;color:#fff}.com-mark-skew .mark-cnt{display:block;position:relative}.com-mark-skew .mark-bg{position:absolute;left:2px;top:3px;margin-left:18px;width:calc(100% - 18px * 2);height:100%;opacity:.4}.com-mark-skew .mark-bg:after,.com-mark-skew .mark-bg:before,.com-mark-skew .mark-cnt:after,.com-mark-skew .mark-cnt:before{content:'';position:absolute;top:0;width:0;height:0;border-style:solid;border-width:13px 9px}.com-mark-skew .mark-bg:before,.com-mark-skew .mark-cnt:before{right:100%}.com-mark-skew .mark-bg:after,.com-mark-skew .mark-cnt:after{left:100%}.com-mark-skew.small{padding:0 14px;min-width:70px;height:22px;line-height:22px}.com-mark-skew.small .mark-bg{margin-left:14px;width:calc(100% - 14px * 2)}.com-mark-skew.small .mark-bg:after,.com-mark-skew.small .mark-bg:before,.com-mark-skew.small .mark-cnt:after,.com-mark-skew.small .mark-cnt:before{border-width:11px 7px}.com-mark-skew.apply .mark-bg,.com-mark-skew.apply .mark-cnt{background-color:#FF7800}.com-mark-skew.apply .mark-bg:before,.com-mark-skew.apply .mark-cnt:before{border-color:transparent #FF7800 #FF7800 transparent}.com-mark-skew.apply .mark-bg:after,.com-mark-skew.apply .mark-cnt:after{border-color:#FF7800 transparent transparent #FF7800}.com-mark-skew.starting .mark-bg,.com-mark-skew.starting .mark-cnt{background-color:#00C8DC}.com-mark-skew.starting .mark-bg:before,.com-mark-skew.starting .mark-cnt:before{border-color:transparent #00C8DC #00C8DC transparent}.com-mark-skew.starting .mark-bg:after,.com-mark-skew.starting .mark-cnt:after{border-color:#00C8DC transparent transparent #00C8DC}.com-mark-skew.end{color:#666}.com-mark-skew.end .mark-bg,.com-mark-skew.end .mark-cnt{background-color:#E1E3E9}.com-mark-skew.end .mark-bg:before,.com-mark-skew.end .mark-cnt:before{border-color:transparent #E1E3E9 #E1E3E9 transparent}.com-mark-skew.end .mark-bg:after,.com-mark-skew.end .mark-cnt:after{border-color:#E1E3E9 transparent transparent #E1E3E9}.com-mark-rec{display:inline-block;vertical-align:middle;padding:0 10px;height:24px;font-size:12px;line-height:24px;text-align:center;color:#fff;background-color:#FF7800}.com-mark-triangle{display:inline-block;vertical-align:middle;position:relative;width:46px;height:46px;font-size:12px;line-height:18px;color:#fff}.com-mark-triangle:before{content:'';position:absolute;left:0;top:0;width:0;height:0;border-style:solid;border-color:transparent;border-width:20px}.com-mark-triangle.hot:before{border-color:#FF7800 transparent transparent #FF7800}.com-mark-triangle.new:before{border-color:#00a4ff transparent transparent #00a4ff}.com-mark-triangle .mark-cnt{position:absolute;left:0;top:50%;z-index:2;margin-top:-17px;margin-left:-10px;width:100%;text-align:center;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.com-tag-v2-list{font-size:0;margin-bottom:-10px}.com-tag-v2{box-sizing:border-box;display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;max-width:calc(100% - 10px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 5px;height:18px;font-size:12px;line-height:16px;border-radius:2px;border:1px solid #ddd;color:#666;background-color:#fff}a.com-tag-v2:hover{border-color:#FE7902;background-color:#FAECE0;color:#FE7902}.com-tag-v2-list.highlight .com-tag-v2{border-color:transparent;background-color:#FAECE0;color:#FE7902}.com-tag-v2-list.highlight a.com-tag-v2:hover{border-color:#FE7902;background-color:#FAECE0;color:#FE7902}.com-tag-v2-list.gray .com-tag-v2{border-color:transparent;background-color:#F3F5F9;color:#333}.com-tag-v2-list.gray a.com-tag-v2:hover{border-color:transparent;background-color:#d2d9e7}.com-tag-v2-list.gray .com-tag-v2.disabled,.com-tag-v2-list.gray .com-tag-v2.disabled:hover{color:#999;background-color:#F3F5F9;cursor:not-allowed}.com-tag-v2-list.gray .com-tag-v2.actived,.com-tag-v2-list.gray .com-tag-v2.actived:hover{background-color:#00a4ff;color:#fff}.com-tag-v2.hole{background-color:transparent}.com-tag-v2-list.large>li{display:inline-block;vertical-align:middle;max-width:100%}.com-tag-v2-list.large .com-tag-v2{padding:0 10px;height:26px;font-size:12px;line-height:24px;max-width:none;display:block}.com-tag-v2-list.large .com-tag-v2-icon{position:relative;top:-1px;vertical-align:middle;width:16px;height:16px;margin-right:10px;margin-left:-6px}.com-tag-v2-list.large.in-side{margin-bottom:0;padding:15px 0 5px;border-bottom:1px solid #E1E3E9}.com-thumbnail{display:block;width:236px;height:177px;background-size:cover;background-repeat:no-repeat;background-position:center}.com-2-avatar{display:inline-block;vertical-align:middle;position:relative;width:28px;height:28px}.com-2-avatar-inner{box-sizing:border-box;display:block;width:100%;height:100%;border-radius:50% 50% 50% 0;border:1px solid #e5e8ed;background-color:#E5EEF8;background-position:center;background-size:cover;background-repeat:no-repeat;text-align:center;font-size:14px;line-height:26px;overflow:hidden}.com-2-avatar .com-2-level-bubble-trigger{position:absolute;right:0;bottom:0}.com-2-avatar.large{width:42px;height:42px}.com-2-avatar.large .com-2-avatar-inner{font-size:20px;line-height:40px}.com-2-avatar.xlarge{width:90px;height:90px}.com-2-avatar.xlarge .com-2-avatar-inner{font-size:44px;line-height:88px}.com-2-avatar.xxlarge{width:120px;height:120px}.com-2-avatar.xxlarge .com-2-avatar-inner{font-size:58px;line-height:118px}.com-2-avatar.font-color .com-2-avatar-inner{border-color:#E1E3E9;background-color:#F0F5FF}.com-2-avatar.bg-color .com-2-avatar-inner{border-color:transparent;color:#fff}.com-2-avatars{font-size:0}.com-2-avatars .com-2-avatar{margin-right:5px}.com-2-avatars .com-2-avatar:last-child{margin-right:0}.com-2-avatars-group{font-size:0}.com-2-avatars-group .com-2-avatars{display:inline-block;vertical-align:middle}.com-2-avatars-group .com-2-avatar{margin-right:2px}.com-2-avatars-group .group-text{display:inline-block;vertical-align:middle;margin-left:10px;font-size:14px;line-height:28px;color:#999}.com-2-avatars-group .group-text em{font-weight:400}.com-2-level{display:inline-block;vertical-align:middle;box-sizing:border-box;width:30px;height:30px;border:2px solid #fff;border-radius:50%;background-color:#FF7800;font-size:12px;text-align:center;line-height:26px;color:#fff;font-family:Helvetica,Arial,sans-serif;font-style:oblique;font-weight:700}.com-2-level .text{position:relative;top:1px;display:block;-ms-transform:scale(.8);-webkit-transform:scale(.8);transform:scale(.8)}.com-2-level.skin-2{width:auto;height:18px;border:none;border-radius:9px;padding:0 5px;font-size:14px;line-height:18px;font-weight:700;font-style:normal}.com-2-level.skin-2 .text{top:0;-ms-transform:none;-webkit-transform:none;transform:none}.com-2-level-bubble .c-bubble-inner{padding:0;width:342px}.com-2-level-bubble.c-bubble-top .c-bubble-inner:after{border-bottom-color:#F3F5F9}.com-2-level-bubble-hd{padding:18px 30px 16px;background-color:#F3F5F9;font-size:14px;line-height:28px}.com-2-level-bubble-hd .user-level{float:left;margin-bottom:10px;color:#333}.com-2-level-bubble-hd .com-2-level{position:relative;top:-1px;margin-left:5px}.com-2-level-bubble-hd .user-extra{float:right;color:#999}.com-2-level-bubble-hd .user-extra strong{margin:0 5px;color:#00a4ff;font-weight:500}.com-2-level-bubble-hd .com-2-process{clear:both}.com-2-level-bubble-bd{padding:20px 30px;font-size:14px;line-height:20px;color:#000}.com-2-level-bubble-disorder{margin-top:15px;font-size:14px;line-height:26px;color:#666}.com-2-level-bubble-disorder a{position:relative;display:inline-block;vertical-align:middle;padding-left:13px;color:inherit}.com-2-level-bubble-disorder a:hover{color:#00a4ff}.com-2-level-bubble-disorder a:before{content:'';position:absolute;left:0;top:11px;width:4px;height:4px;background-color:#666;border-radius:50%}.com-2-level-bubble-disorder a:hover:before{background-color:#00a4ff}.com-2-level-bubble-ft{padding:0 30px 18px;text-align:center}.com-2-level-bubble-trigger>.c-bubble-bottom,.com-2-level-bubble-trigger>.c-bubble-top{left:-75px;margin-left:0}.com-2-process{position:relative;display:block;box-sizing:border-box;height:16px;border-radius:8px;border:1px solid #00a4ff;font-size:12px;line-height:14px;font-family:Helvetica,Arial,sans-serif;color:#00a4ff}.com-2-process .process-bar{display:block;position:relative;background-color:#00a4ff;height:100%;border-radius:14px;min-width:15px}.com-2-process .process-bar-icon{position:absolute;right:2px;top:1px;width:12px;height:12px;background-color:#fff;border-radius:50%;text-align:center;line-height:12px}.com-2-process .process-bar-icon:before{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;box-sizing:border-box;height:7px;width:5px;border-right:2px solid #00a4ff;border-bottom:2px solid #00a4ff;transform:rotate(45deg)}.com-2-process .process-text{position:absolute;right:3px;top:0}.com-2-process.left .process-text{left:5px;right:auto;color:#fff}.com-2-process.ant .process-bar,.com-2-process.ant .process-text{transition:all .3s ease-in-out}.com-datas>.com-split{display:none}.com-data:before{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;overflow:hidden;margin:0 8px;width:2px;height:2px;border-radius:50%;background:#999}.com-data:first-child:before{display:none}.com-datas.dark{color:#333}.com-datas.dark .com-data:before{background-color:#333}.com-icon-datas{font-size:0}.com-icon-data{display:inline-block;vertical-align:middle;margin-right:15px;font-size:14px;line-height:24px;color:#333}.com-icon-data:last-child{margin-right:0}.com-icon-data [class*=com-i-],.com-icon-data [class^=com-i-]{position:relative;top:-1px;margin-right:5px}.com-icon-data a{display:inline-block;color:inherit}.com-icon-data a:hover{color:#00a4ff}.com-icon-datas.vertical .com-icon-data{position:relative;display:block;margin-right:0;margin-bottom:10px;padding-left:24px}.com-icon-datas.vertical .com-icon-data:last-child{margin-bottom:0}.com-icon-datas.vertical [class*=com-i-],.com-icon-datas.vertical [class^=com-i-]{position:absolute;left:0;top:4px}.com-icon-datas.dark .com-i-time{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 83.39999999999999%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-icon-datas.dark .com-i-address{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 26.68%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-vertical-datas{display:table;width:100%}.com-vertical-data{display:table-cell;vertical-align:top;width:50%;white-space:nowrap;color:#999}.com-vertical-data:last-child{width:1px}.com-vertical-data .data-inner{display:inline-block;vertical-align:middle;max-width:100%;text-align:center;color:inherit;text-decoration:none}.com-vertical-data a.data-inner:hover{color:inherit;text-decoration:none}.com-vertical-data .data-name{font-size:12px;line-height:18px;font-weight:400}.com-vertical-data .data-num{font-size:18px;line-height:26px;height:26px;font-weight:400}.com-emblem-list{margin-top:20px;font-size:0}.com-emblem-list>li{display:inline-block;vertical-align:middle;margin:0 5px;line-height:16px}.com-emblem .c-bubble a{color:#00a4ff}.com-emblem .c-bubble a:hover{text-decoration:underline}.com-emblem-list.inline{margin-top:0;display:inline-block;vertical-align:middle}.com-emblem-list.inline>li{margin-left:0;margin-right:5px}.com-emblem-list.inline>li:last-child{margin-right:0}.com-emblem-list .c-bubble-trigger:hover>a{position:relative;z-index:901}.com-emblem-icon{display:inline-block;vertical-align:middle;width:20px;height:20px;background-size:100% auto}.com-emblem-icon.translate{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 56.93%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.article{background-image:url(sprite/base-201911131148.svg);;background-position:22.34% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.column{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 41.81%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.propagandist{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 64.5%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.evangelist{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 53.15%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.microapp{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 72.06%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.authorship{background-image:url(sprite/base-201911131148.svg);;background-position:26.02% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.medal-gold{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 83.39999999999999%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.medal-silver{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 79.62%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.medal-bronze{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 87.18%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem-icon.tvp{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 49.370000000000005%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.translate{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 60.709999999999994%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.article{background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 87.18%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.column{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 38.03%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.propagandist{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 68.28%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.evangelist{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 45.59%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.microapp{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 75.84%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.authorship{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 11.55%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-emblem.disabled .com-emblem-icon.medal-bronze,.com-emblem.disabled .com-emblem-icon.medal-gold,.com-emblem.disabled .com-emblem-icon.medal-silver{background-image:url(sprite/base-201911131148.svg);;background-position:99.8% 90.97%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-tag-panel{position:relative;box-sizing:border-box;height:93px;padding:20px 15px;border:1px solid #E1E3E9;background-color:#fff}.com-2-tag-panel .panel-link{position:absolute;left:0;top:0;width:100%;height:100%}.com-2-tag-panel-title{max-width:100%;position:relative;font-weight:400}.com-2-tag-panel-title .title-cnt{display:block;font-size:16px;line-height:22px;color:#000;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-tag-panel-title .title-icon{position:relative;top:-1px;vertical-align:middle;width:22px;height:22px;margin-right:10px}.com-2-tag-panel-infos{margin-top:12px}.com-2-tag-panel-infos .com-data:before{margin:0 6px}.com-2-tag-panel .com-tag-bubble.c-bubble{left:0;margin-left:0}.com-2-tag-panels{font-size:0}.com-2-tag-panels>.panel-cell{display:inline-block;vertical-align:middle;margin-right:15px;margin-bottom:15px;width:calc((100% - 15px * 2)/ 3)}.com-2-tag-panels>.panel-cell:nth-child(3n){margin-right:0}.com-tag-bubble.c-bubble-top .c-bubble-inner,.com-tag-bubble.c-bubble-top .com-tooltip-inner{left:30px}.com-tag-bubble .c-bubble-inner,.com-tag-bubble .com-tooltip-inner{width:330px;padding:30px 25px}.com-tag-bubble-title{font-size:16px;line-height:22px;color:#000;font-weight:500}.com-tag-bubble-desc{margin-top:15px;font-size:14px;line-height:24px;color:#999}.com-tag-bubble .com-datas{margin-top:15px}.com-tag-bubble-btns{margin-top:22px;font-size:0}.com-tag-bubble-btns .c-btn{padding:0 10px;min-width:70px;font-size:12px;line-height:26px;height:28px}.com-tag-bubble-btns .followed-num{margin-left:20px;font-size:14px;line-height:20px;color:#999}.com-2-section+.com-2-section{margin-top:40px}.com-2-section-hd{position:relative;padding-bottom:10px;border-bottom:1px solid #e5e8ed;font-size:0;line-height:30px}.com-2-section-hd:before{content:'';position:absolute;left:0;bottom:-1px;width:80px;height:1px;background-color:#00a4ff}.com-2-section-title{position:relative;display:inline-block;vertical-align:middle;padding-left:38px;height:28px;font-size:20px;line-height:28px;font-weight:400;color:#333;-webkit-font-smoothing:antialiased}.com-2-section-title.without-icon{padding-left:0}.com-2-section-title-icon{position:absolute;left:0;top:0;width:28px;height:28px}.com-2-section-title-icon.article{background-image:url(sprite/base-201911131148.svg);;background-position:69.54% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.column{background-image:url(sprite/base-201911131148.svg);;background-position:75.84% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.salon{background-image:url(sprite/base-201911131148.svg);;background-position:82.56% 6.68%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.calendar{background-image:url(sprite/base-201911131148.svg);;background-position:6.510000000000001% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.specialist{background-image:url(sprite/base-201911131148.svg);;background-position:63.239999999999995% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.activities{background-image:url(sprite/base-201911131148.svg);;background-position:75.84% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.special{background-image:url(sprite/base-201911131148.svg);;background-position:44.330000000000005% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.news{background-image:url(sprite/base-201911131148.svg);;background-position:50.629999999999995% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.team{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.team-article{background-image:url(sprite/base-201911131148.svg);;background-position:56.93% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.ask{background-image:url(sprite/base-201911131148.svg);;background-position:56.93% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.ask-team{background-image:url(sprite/base-201911131148.svg);;background-position:12.82% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.dev{background-image:url(sprite/base-201911131148.svg);;background-position:25.419999999999998% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.contributor{background-image:url(sprite/base-201911131148.svg);;background-position:38.03% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-title-icon.product{background-image:url(sprite/base-201911131148.svg);;background-position:6.510000000000001% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-2-section-hd-extra{position:absolute;right:0;top:0}.com-2-section-hd .com-2-arrow-link{display:inline-block;margin-left:20px;line-height:30px;vertical-align:middle}.com-2-section-hd .com-icon-link{margin-left:20px;line-height:30px;vertical-align:middle}.com-2-section-tab{position:absolute;left:0;bottom:-1px;width:100%;text-align:center;font-size:0}.com-2-section-tab-item{display:inline-block;vertical-align:middle;margin:0 15px}.com-2-section-tab-item a{display:block;box-sizing:border-box;padding:0 30px 1px;font-size:16px;line-height:38px;color:#999;border-bottom:2px solid transparent}.com-2-section-tab-item a:hover{color:#00a4ff}.com-2-section-tab-item.actived a{color:#00a4ff;border-bottom-color:#00a4ff;cursor:default}.com-2-section.without-border .com-2-section-hd{border-bottom:none}.com-2-section.without-border .com-2-section-hd:before{display:none}.com-2-section-hd .com-nav-Links{position:relative;display:inline-block;vertical-align:middle;margin-left:20px;padding-left:20px}.com-2-section-hd .com-nav-Links:before{content:'';position:absolute;left:0;top:50%;margin-top:-8px;width:1px;height:16px;background-color:#D2D9E7}.com-2-section-hd.control-bar{cursor:pointer}.com-2-section-hd.control-bar:after{content:'';position:absolute;right:0;top:11px;width:12px;height:7px;background-image:url(sprite/base-201911131148.svg);;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate3d(0,0,1,-180deg);transform:rotate3d(0,0,1,-180deg);background-position:70.12% 28.87%;background-size:4200% 7028.571428571429%;;background-repeat:no-repeat}.com-2-section-hd.control-bar:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:95.33% 92.99%;background-size:4200% 7028.571428571429%;;background-repeat:no-repeat}.com-2-section-hd.hide:after{-webkit-transform:rotate3d(0,0,1,0);transform:rotate3d(0,0,1,0)}.com-2-section-hd.hide+.com-2-section-bd{display:none}.com-2-section.pt .com-2-section-bd{padding-top:30px}.comp-section-user .com-2-section-bd{padding-top:20px}.comp-section-ask .com-2-section-hd{padding-bottom:10px}.com-2-layout{display:table;table-layout:fixed;margin-bottom:60px;box-sizing:border-box;width:100%}.com-2-layout>.layout-main{display:table-cell;vertical-align:top;padding-left:50px}.com-2-layout>.layout-main:first-child{padding-right:50px;padding-left:0}.com-2-layout>.layout-side{display:table-cell;vertical-align:top;width:330px}.com-widget-global{position:fixed;right:40px;bottom:60px;z-index:300;width:46px;padding-bottom:50px}.com-widget-global .widget-btn{box-sizing:border-box;margin-top:-1px;width:46px;height:44px;border:1px solid #D2D9E7;text-align:center;background-color:#fff;font-size:12px;line-height:42px;color:#999}.com-widget-global .widget-btn:hover{color:#999;background-color:#F3F5F9}.com-widget-global .widget-btn:first-child{margin-top:0}.com-widget-global .widget-btn.actived,.com-widget-global .widget-btn.actived:hover{background-color:#F3F5F9;color:#00a4ff;cursor:default}.com-widget-global .com-widget-qr{margin-top:-1px}.com-widget-global .widget-back2top{position:absolute;left:0;bottom:0;font-size:0;border-color:transparent;background-color:#F3F5F9;transition:all .2s ease-in-out}.com-widget-global .widget-back2top:hover{background-color:#e1eefa}.com-widget-global .widget-back2top:before{content:'';display:inline-block;vertical-align:middle;width:22px;height:12px;background-image:url(sprite/base-201911131148.svg);;background-position:87.76% 20.21%;background-size:2290.909090909091% 4100%;;background-repeat:no-repeat}.com-widget-global .com-widget-qr .c-bubble-inner{margin-top:-15px}.com-widget-global .widget-navs-wrap{position:relative;background-color:#fff}.com-widget-global .widget-navs-wrap .widget-navs{position:absolute;left:0;bottom:0;width:100%}.com-widget-global .widget-navs{position:relative;z-index:1;transition:opacity .3s linear;transition-delay:.1s}.com-widget-global .widget-btn.collapse-btn{margin-top:0;opacity:0;transition:opacity .3s linear;transition-delay:.1s}.com-widget-global .widget-btn.collapse-btn .btn-text{position:relative;top:2px;display:inline-block;vertical-align:middle;line-height:24px}.com-widget-global .widget-btn.collapse-btn .btn-text:before{content:'';display:block;margin:0 auto;width:0;height:0;border-style:solid;border-width:0 4px 5px;border-color:#999 transparent}.widget-navs-wrap.collapsed{overflow:hidden}.widget-navs-wrap.collapsed .widget-navs{opacity:0}.widget-navs-wrap.collapsed .widget-btn.collapse-btn{opacity:1}.widget-navs-wrap.collapsed:hover{overflow:visible}.widget-navs-wrap.collapsed:hover .widget-navs{opacity:1}.widget-navs-wrap.collapsed:hover .widget-btn.collapse-btn{opacity:0}.com-widget-global.has-share .com-widget-qr{margin-top:4px}.com-widget-global.has-share .com-widget-qr .scan-btn{border-color:transparent}.com-widget-global .com-widget-shares{position:relative;background-color:#fff}.com-widget-global .com-widget-shares .shares-wrap{position:absolute;left:0;bottom:0;width:100%}.com-widget-global .shares-wrap{position:relative;z-index:1;transition:opacity .3s linear;transition-delay:.1s}.com-widget-shares.collapsed{overflow:hidden}.com-widget-shares.collapsed .shares-wrap{opacity:0}.com-widget-shares.collapsed .widget-btn.collapse-btn{opacity:1}.com-widget-shares.collapsed:hover{overflow:visible}.com-widget-shares.collapsed:hover .shares-wrap{opacity:1}.com-widget-shares.collapsed:hover .widget-btn.collapse-btn{opacity:0}.com-mark-hero{display:inline-block;vertical-align:middle;padding:0 5px;height:20px;font-size:12px;line-height:20px;background-color:#00A4FF;border-radius:2px;color:#fff}.com-2-footer{background:#2e3033;box-sizing:border-box}.com-2-footer-inner{box-sizing:border-box;margin:0 auto;max-width:1200px;padding:0 10px;-webkit-font-smoothing:antialiased}.com-2-footer.large-width .com-2-footer-inner{max-width:1440px}.com-2-footer-main{padding:40px 0 32px}.com-2-footer-main-ctn{position:relative}.com-2-footer-main-inner{display:table;width:100%;table-layout:fixed;box-sizing:border-box}.com-2-footer-website{display:table-cell;vertical-align:top;margin-right:0}.com-2-footer-website-group{font-size:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.com-2-footer-website-group .com-2-footer-website-column{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:14px;vertical-align:top;width:25%;padding-left:0;padding-right:20px}.com-2-footer-website-title{margin-bottom:22px;font-weight:400;line-height:22px;font-size:16px;color:#fff}.com-2-footer-website-title a{display:inline-block;vertical-align:top;max-width:100%;color:#fff}.com-2-footer-website-list{margin-top:15px}.com-2-footer-website-item a{display:inline-block;vertical-align:top;max-width:100%;padding:5px 0;font-size:12px;line-height:18px;color:#999}.com-2-footer-website-item a:hover{color:#00a4ff}.com-2-footer-copyright{display:table-cell;vertical-align:top;width:120px;box-sizing:border-box}.com-2-footer-copyright-title{font-size:16px;line-height:22px;color:#fff;font-weight:400;margin-bottom:28px}.com-2-footer-copyright-text{margin-top:10px;line-height:20px;font-size:12px;color:#ccc}.com-2-footer-copyright-text a{color:inherit}.com-2-footer-copyright-text a:hover{color:#00a4ff}.com-2-footer-copyright-text span{display:block}.com-2-footer-logo{margin-bottom:20px}.com-2-footer-logo .com-2-footer-logo-icon{display:block;width:74px;height:19px;background-image:url(sprite/base-201911131148.svg);;background-position:0.22999999999999998% 9.73%;background-size:681.081081081081% 2589.4736842105262%;;background-repeat:no-repeat}.com-2-footer-qr-object{margin-bottom:10px;width:90px;height:90px;box-sizing:border-box;border:7px solid #fff}.com-2-footer .com-2-footer-qr-image{display:block;width:100%;height:100%}.com-2-footer-qr-info{white-space:nowrap}.com-2-footer-qr-text{line-height:18px;font-size:12px;color:#fff}.com-2-footer-copyright-cnt{padding:0 20px;font-size:12px;line-height:20px;color:#999;text-align:center}.com-2-footer-copyright-cnt .com-2-footer-inner{border-top:1px solid #45484c;padding:20px 0;max-width:1180px}.com-2-footer-copyright-cnt a{color:inherit}.com-2-footer-copyright-cnt a:hover{color:#00a4ff}.com-2-footer-recommend{background:#2e3033}.com-2-footer-recommend-rows{padding:30px 0;border-top:1px solid #45484c}.com-2-footer-recommend-cell{position:relative;padding-left:100px;min-height:14px}.com-2-footer-recommend-cell+.com-2-footer-recommend-cell{margin-top:15px}.com-2-footer-recommend-tit{position:absolute;left:0;top:0;width:100px;line-height:14px;font-size:14px;color:#FFF;font-weight:400;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.com-2-footer-recommend-list-wrap{padding-left:20px;overflow:hidden}.com-2-footer-recommend-list{margin-left:-10px;margin-right:-10px;margin-bottom:-15px;font-size:0}.com-2-footer-recommend-item{display:inline-block;vertical-align:top;margin-bottom:15px;padding:0 10px;width:100px}.com-2-footer-recommend-link{line-height:14px;font-size:12px;color:#999}.com-2-footer-recommend-link:hover{color:#00a4ff}.com-loading-placeholder{display:block;position:relative;height:300px;background-color:#F3F5F9;font-size:0;line-height:30px;text-align:center;color:#999}.com-loading-placeholder .placeholder-text{position:absolute;left:0;top:50%;width:100%;margin-top:-22px;opacity:.5}.com-loading-placeholder .placeholder-text:before{content:'';display:inline-block;vertical-align:middle;width:60px;height:44px;background-image:url(sprite/base-201911131148.svg);;background-size:1680% 2236.3636363636365%;;background-position:75.74% 64.89%;background-repeat:no-repeat}.com-loading-placeholder.small{height:88px;background-color:transparent;border-bottom:1px solid #eee}.com-loading-placeholder.small .placeholder-text{margin-top:-11px}.com-loading-placeholder.small .placeholder-text:before{width:30px;height:22px}.com-growup-mod{padding-top:55px;min-width:430px}.com-growup-mod-tit{font-size:20px;line-height:23px;color:#000;text-align:center}.com-growup-mod-con{text-align:center;margin-top:20px}.com-growup-mod-lv{display:inline-block;font-size:16px;line-height:22px;color:#00a4ff;vertical-align:middle;width:30px}.com-growup-data-list{border-top:#e5e5e5 1px solid;border-bottom:#e5e5e5 1px solid;max-width:320px;margin:30px auto 0;padding:5px 0 15px}.com-growup-data-item{position:relative;padding-left:15px;margin-top:10px}.com-growup-data-item:after{content:'';position:absolute;width:4px;height:4px;border-radius:3px;background:#00a4ff;left:0;top:7px}.com-growup-data-item-txt{color:#666}.com-growup-data-item-em{position:absolute;right:0;top:0;color:#ff7800}.com-growup-data-after{padding:20px 0;text-align:center}.com-growup-data-after a{color:#9c9c9c}.com-growup-data-after a:hover{color:#00a4ff}.com-growup-mod-bar{display:inline-block;vertical-align:middle;margin:0 10px;background-color:#e6e6e6;width:240px;height:16px;border-radius:8px;position:relative}.com-growup-mod-bar-inner{position:absolute;height:100%;background-color:#00a4ff;border-radius:8px;left:0;top:0}.com-growup-mod-num{color:#fff;background-color:#57C2FA;position:absolute;right:-10px;animation:com-growup-mod-num-up 3s ease-in;animation-fill-mode:forwards;animation-delay:.2s;top:0;opacity:0;box-sizing:border-box;padding:2px 10px}.com-growup-mod-num:after{content:'';width:0;height:0;border:8px solid transparent;border-top:#57C2FA 8px solid;position:absolute;bottom:-12px;left:50%;margin-left:-6px}@keyframes com-growup-mod-num-up{10%,50%{top:-30px;opacity:1}100%{top:-30px;opacity:0}}.com-growup-mod-animate{height:100%;width:0;position:absolute;left:0;top:0;background:linear-gradient(to right,#00a4ff,#0ee1eb);animation:com-growup-mod-animate-bar .2s ease-out;animation-fill-mode:forwards;animation-delay:0s;border-radius:8px}@keyframes com-growup-mod-animate-bar{to{width:100%}}.com-crumb{margin-top:30px;margin-bottom:30px;font-size:0}.com-crumb .crumb-item{display:inline-block;vertical-align:middle;font-size:14px;color:#333}.com-crumb .crumb-item:hover{color:#00a4ff}.com-crumb .crumb-item.current,.com-crumb .crumb-item.current:hover{color:#999}.com-crumb .crumb-split{display:inline-block;vertical-align:middle;margin:0 5px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:70.28999999999999% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-crumb.no-pb .com-inner,.com-crumb.no-pd .com-inner{padding-left:0;padding-right:0}.com-2-simple-footer{box-sizing:border-box;min-width:1000px;background-color:#F7F8FA;font-size:12px;line-height:22px;color:#999;padding:0 10px}.com-2-simple-footer-inner{position:relative;box-sizing:border-box;margin:0 auto;padding:15px 10px;max-width:1200px}.com-2-simple-footer .footer-link{color:#999;text-decoration:none}.com-2-simple-footer .footer-link:hover{color:#00a4ff}.com-2-simple-footer .footer-link+.footer-link{margin-left:10px}.com-2-simple-footer-extra{position:absolute;right:10px;top:50%;margin-top:-18px}.com-2-simple-footer-select{position:relative;display:inline-block;vertical-align:middle}.com-2-simple-footer-select-trigger{box-sizing:border-box;display:block;padding:0 30px 0 9px;width:190px;height:36px;border-radius:2px;border:1px solid #E5E5E5;background-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px;line-height:34px;color:#999;cursor:pointer}.com-2-simple-footer-select-trigger:after{content:'';position:absolute;right:10px;top:50%;margin-top:-2px;width:0;height:0;border-style:solid;border-width:4px 4px 0;border-color:#999 transparent;-webkit-transition:transform .2s ease,-webkit-transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.com-2-simple-footer-select-trigger .icon{position:relative;top:-1px;display:inline-block;vertical-align:middle;margin-right:5px;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 38.03%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-simple-footer-select .com-2-simple-footer-dropdown{display:none}.com-2-simple-footer-select.hover .com-2-simple-footer-dropdown,.com-2-simple-footer-select:hover .com-2-simple-footer-dropdown{display:block}.com-2-simple-footer-select.hover .com-2-simple-footer-select-trigger:after,.com-2-simple-footer-select:hover .com-2-simple-footer-select-trigger:after{transform:rotate(180deg)}.com-2-simple-footer-dropdown{box-sizing:border-box;position:absolute;left:0;bottom:100%;z-index:999;padding-bottom:4px;width:100%}.com-2-simple-footer-dropdown-menu{background-color:#fff;border-radius:2px;padding:5px 0;border:1px solid #e5e5e5}.com-2-simple-footer-dropdown-menu a{display:block;padding:0 10px;height:30px;font-size:14px;line-height:30px;color:#999}.com-2-simple-footer-dropdown-menu a:hover{color:#00a4ff}.com-2-simple-footer-dropdown-menu .actived a,.com-2-simple-footer-dropdown-menu .actived a:hover{color:#00a4ff;cursor:default}.com-2-simple-footer.layout{position:relative;background-color:#F3F5F9;padding:0}.com-2-simple-footer.layout:before{content:'';position:absolute;left:50%;right:0;top:0;height:100%;background-color:#F7F8FA}.com-2-simple-footer.layout .com-2-simple-footer-inner{padding-left:30px;background-color:#F7F8FA}.com-2-simple-footer.layout .com-2-simple-footer-copyright{margin-left:200px}.com-none-panel{text-align:center}.com-none-panel+.com-none-panel{margin-top:50px;padding-top:50px;border-top:1px solid #d8d8d8}.com-none-panel-icon{display:inline-block;vertical-align:middle;margin-bottom:10px;width:169px;height:94px;background-image:url(components/NonePanel/css/img/tag-img.svg);background-repeat:no-repeat;background-size:100% auto}.com-none-panel-icon.error{width:248px;height:180px;background-image:url(components/NonePanel/css/img/icon-error.svg)}.com-none-panel-icon.search{width:220px;height:220px;background-image:url(components/NonePanel/css/img/icon-search.svg)}.com-none-panel-icon.column{width:220px;height:220px;background-image:url(components/NonePanel/css/img/icon-column.svg)}.com-none-panel-icon.network{width:220px;height:220px;background-image:url(components/NonePanel/css/img/icon-network.svg)}.com-none-panel-title{margin-bottom:8px;font-size:16px;line-height:22px;font-weight:400;color:#000}.com-none-panel-desc{font-size:14px;line-height:24px;color:#999}.com-none-panel-btns{margin-top:30px}.com-none-panel-btns .c-btn{margin:0 5px;min-width:160px;height:36px;line-height:34px;vertical-align:middle;font-size:14px}.com-none-panel-btns .com-arrow-btn{margin:0 5px;min-width:160px;padding-right:48px;height:36px;font-size:16px;line-height:34px}.com-none-panel-btns .com-arrow-btn .com-arrow-btn-text{padding:0 30px}.com-none-panel-btns .com-arrow-btn .com-arrow-btn-text:after{border-width:17px 6px}.com-none-panel-btns .com-arrow-btn .com-arrow-btn-caret{width:36px;padding-left:12px}.com-none-panel-btns .com-arrow-btn .com-arrow-btn-caret:after{width:10px;height:10px;margin-left:-5px}.com-none-panel-link{margin:0 5px;color:#00a4ff}.com-none-panel-link:after{content:'';display:inline-block;vertical-align:-2px;margin-left:5px;width:7px;height:13px;overflow:hidden;background-image:url(sprite/base-201911131148.svg);;-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;background-position:68.61% 66.18%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.com-none-panel-pre{border-top:1px dashed #e5e5e5;margin-top:30px;padding-top:15px;text-align:left;color:#666;word-break:break-all;white-space:pre-wrap;overflow:auto}.com-none-panel.page{margin:0 auto;padding:120px 0;max-width:730px}.com-none-panel.page+.com-none-panel.page{border-top:1px solid #D8D8D8}.com-none-panel.page .com-none-panel-icon{margin-bottom:20px}.com-none-panel-icon[class*=error-],.com-none-panel-icon[class^=error-]{width:560px;height:250px}.com-none-panel-icon.error-404{background-image:url(components/NonePanel/css/img/icon-404.svg)}.com-none-panel-icon.error-503{background-image:url(components/NonePanel/css/img/icon-503.svg)}.com-none-panel-icon.error-504{background-image:url(components/NonePanel/css/img/icon-504.svg)}.com-none-panel-icon.error-403{background-image:url(components/NonePanel/css/img/icon-403.svg)}.com-none-panel-icon.error-500{background-image:url(components/NonePanel/css/img/icon-500.svg)}.com-none-panel.page .com-none-panel-title{margin-bottom:20px}.com-none-panel.page .com-none-panel-btns{margin-top:40px}.com-widget-operations{position:fixed;top:154px;margin-left:-97px;text-align:center;width:46px;z-index:300}.com-widget-operations .main-cnt{margin-bottom:30px}.com-widget-operations .link-bookmark,.com-widget-operations .link-like{position:relative;display:block;box-sizing:border-box;margin:0 auto 14px;width:40px;height:40px;border:1px solid #00a4ff;line-height:38px;text-align:center;border-radius:50%}.com-widget-operations .link-bookmark{border:none;line-height:40px}.com-widget-operations .link-like .com-i-like,.com-widget-operations .link-like:hover .com-i-like{margin-right:0;width:18px;height:18px;background-image:url(sprite/base-201911131148.svg);;background-position:11.27% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-widget-operations .link-like.actived .com-i-like,.com-widget-operations .link-like.actived:hover .com-i-like{background-image:url(sprite/base-201911131148.svg);;background-position:0.2% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-widget-operations .link-bookmark .text,.com-widget-operations .link-like .text{position:absolute;left:24px;top:-3px;padding:0 5px;height:16px;border-radius:8px;background-color:#00a4ff;font-size:12px;line-height:16px;text-align:center;color:#fff;font-weight:600}.com-widget-operations .link-bookmark .com-i-bookmark,.com-widget-operations .link-bookmark:hover .com-i-bookmark{margin-right:0;width:40px;height:40px;background-image:url(sprite/base-201911131148.svg);;background-position:65.3% 23.669999999999998%;background-size:1260% 1230%;;background-repeat:no-repeat}.com-widget-operations .link-bookmark.actived .com-i-bookmark,.com-widget-operations .link-bookmark.actived:hover .com-i-bookmark{background-image:url(sprite/base-201911131148.svg);;background-position:65.3% 32.96%;background-size:1260% 1230%;;background-repeat:no-repeat}.com-widget-operations .com-widget-qr{margin-top:8px}.com-widget-operations .com-widget-qr .scan-btn{border-color:transparent}.com-widget-shares{text-align:center}.com-widget-operations .com-opt-text,.com-widget-shares .com-opt-text{margin-bottom:10px;font-size:14px;line-height:20px}.com-widget-operations .com-share-options>li,.com-widget-shares .com-share-options>li{margin-right:0;margin-bottom:2px}.com-widget-operations .com-share-options .opt-item,.com-widget-shares .com-share-options .opt-item{width:46px;height:44px;text-align:center;line-height:44px}.com-widget-operations .com-share-options .opt-icon,.com-widget-shares .com-share-options .opt-icon{width:100%;height:100%;background-color:#F3F5F9}.com-widget-operations .com-share-options .opt-icon:before,.com-widget-shares .com-share-options .opt-icon:before{position:static;display:inline-block;vertical-align:middle;width:26px;height:26px}.com-widget-operations .com-share-options .opt-icon:after,.com-widget-shares .com-share-options .opt-icon:after{display:none}.com-widget-operations .com-share-options .opt-icon.wechat:before,.com-widget-shares .com-share-options .opt-icon.wechat:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 55.15%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options>li:hover .opt-icon.wechat,.com-widget-shares .com-share-options>li:hover .opt-icon.wechat{background-color:#30CC04}.com-widget-operations .com-share-options>li:hover .opt-icon.wechat:before,.com-widget-shares .com-share-options>li:hover .opt-icon.wechat:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 31.119999999999997%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options .opt-icon.qq:before,.com-widget-shares .com-share-options .opt-icon.qq:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 49.14%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options>li:hover .opt-icon.qq,.com-widget-shares .com-share-options>li:hover .opt-icon.qq{background-color:#00a4ff}.com-widget-operations .com-share-options>li:hover .opt-icon.qq:before,.com-widget-shares .com-share-options>li:hover .opt-icon.qq:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 13.089999999999998%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options .opt-icon.weibo:before,.com-widget-shares .com-share-options .opt-icon.weibo:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 25.11%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options>li:hover .opt-icon.weibo,.com-widget-shares .com-share-options>li:hover .opt-icon.weibo{background-color:#F43B51}.com-widget-operations .com-share-options>li:hover .opt-icon.weibo:before,.com-widget-shares .com-share-options>li:hover .opt-icon.weibo:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 19.1%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options .opt-icon.copy:before,.com-widget-shares .com-share-options .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 43.13%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options>li:hover .opt-icon.copy,.com-widget-shares .com-share-options>li:hover .opt-icon.copy{background-color:#5F5D5D}.com-widget-operations .com-share-options>li:hover .opt-icon.copy:before,.com-widget-shares .com-share-options>li:hover .opt-icon.copy:before{background-image:url(sprite/base-201911131148.svg);;background-position:82.22% 37.12%;background-size:1938.4615384615383% 1892.3076923076924%;;background-repeat:no-repeat}.com-widget-operations .com-share-options .com-widget-qr,.com-widget-shares .com-share-options .com-widget-qr{margin-top:0}.com-widget-operations .com-event-panel{margin-top:8px}.com-side-articles{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-article{display:block;position:relative;padding:10px 15px 0}.com-side-article.actived{background-color:#f7f8fa}.com-side-article:before{content:'';position:absolute;left:6px;top:20px;width:4px;height:4px;border-radius:50%;background-color:#00a4ff}.com-side-article-title{margin-bottom:10px;font-size:14px;line-height:24px;font-weight:400;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-article-bd{box-sizing:border-box;padding-bottom:15px}.com-side-article-bd .com-media{margin-bottom:0}.com-side-article-bd .com-media-object{padding-right:15px;width:82px}.com-side-article-bd .com-thumbnail{width:82px;height:62px}.com-side-article-desc{font-size:12px;line-height:21px;color:#666;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:42px}.com-side-article-source{display:inline-block;vertical-align:middle;position:relative;margin-top:8px;padding-right:20px;font-size:12px;line-height:18px;color:#999}.com-side-article-source .source-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-article-source .com-verification{position:absolute;right:0;top:3px}.com-side-article.ani .com-side-article-title{white-space:normal;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-side-article.ani .com-side-article-bd{overflow:hidden;height:0;transition:height .2s ease-in-out;padding-bottom:0}.com-side-article.ani.actived .com-side-article-bd{height:77px}.com-side-article.ani .com-side-article-time{display:block;margin-top:8px;font-size:12px;line-height:18px;color:#999}.com-loading-placeholder.com-side-article-loading.small{height:138px}.com-loading-placeholder.com-side-article-loading.ani.small{height:68px}.com-loading-placeholder.com-side-article-loading.ani.actived{height:145px}li:last-child>.com-loading-placeholder.com-side-article-loading.ani.small{border-bottom:none}.com-side-activities{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-activity{margin-bottom:0;padding:10px 0}.com-side-activity:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-activity .com-media-object{padding-right:20px;width:100px}.com-side-activity .com-thumbnail{width:100px;height:76px}.com-side-activity-title{font-size:14px;line-height:25px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-activity-desc{font-size:12px;line-height:18px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-activity .com-arrow-btn{margin-top:4px}.com-side-activity.special .com-media-body{vertical-align:middle}.com-side-activity.special .com-side-activity-title{font-size:16px;line-height:22px;white-space:nowrap}.com-side-activity-title-main{display:block;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;max-height:44px;font-weight:500}.com-side-activity-title-special{margin-top:4px;font-size:14px;line-height:20px;color:#999;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-activity.special .com-side-activity-title-main{white-space:normal}.com-side-activity.salon .com-thumbnail{height:105px}.com-side-activity-title-series{font-size:12px;line-height:22px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}.com-side-activity.salon .com-side-activity-title{line-height:22px}.com-side-activity.salon .com-side-activity-title-main{padding-right:0}.com-side-activity-datas{margin-top:2px;font-size:0}.com-side-activity-data{display:inline-block;vertical-align:middle;font-size:12px;line-height:22px;color:#999}.com-side-activity-data:before{content:'';display:inline-block;vertical-align:middle;margin:0 5px;width:2px;height:2px;border-radius:50%;background-color:#999}.com-side-activity-data:first-child:before{display:none}.com-loading-placeholder.com-side-activity-loading.small{height:96px}li:last-child>.com-side-activity-loading.small{border-bottom:none}.com-side-user-panels{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-user-panel{position:relative;padding:10px 0}.com-side-user-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-user-panel>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-side-user-panel-main{margin-bottom:0}.com-side-user-panel-main .com-media-object{padding-right:20px;width:38px}.com-side-user-panel-main .com-2-avatar{width:38px;height:38px}.com-side-user-panel-title{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:100%;font-size:16px;line-height:22px;color:#000;font-weight:400}.com-side-user-panel-title.with-verify{padding-right:20px}.com-side-user-panel-title-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-user-panel-title .com-verification{position:absolute;right:0;top:6px;z-index:2}.com-side-user-panel-title .com-verification:hover{z-index:900}.com-side-user-panel-identity{margin-top:3px;font-size:14px;line-height:20px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-user-panel-datas{margin-top:4px}.com-side-user-panel-skills{position:relative;margin-top:15px;padding-left:68px}.com-side-user-panel-skills>dt{position:absolute;left:0;top:0;font-size:12px;line-height:18px;color:#999}.com-side-user-panel-skills>dd{position:relative;z-index:2}.com-side-user-panel.has-skills .com-side-user-panel-datas{margin-top:3px}.com-side-user-panel.has-btns .com-media-body{position:relative}.com-side-user-panel.has-btns .com-side-user-panel-hd,.com-side-user-panel.has-btns .com-side-user-panel-identity{margin-right:80px}.com-side-user-panel-btns{position:absolute;right:0;top:0;z-index:2}.com-side-user-panel-btns .c-btn{padding:0 10px;min-width:56px;width:70px;height:28px;font-size:12px;line-height:26px}.com-side-user-panel-btns .ask-btn{width:auto}.com-loading-placeholder.com-side-user-panel-loading.small{height:64px}li:last-child>.com-loading-placeholder.com-side-user-panel-loading.small{border-bottom:none}.com-side-contributors{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-user-panel.contributor .com-side-user-panel-hd{position:relative}.com-side-user-panel-info{margin-top:4px;font-size:12px;line-height:18px;color:#999}.com-side-user-panel-info em{margin:0 5px}.com-side-user-ranks{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-user-panel.rank{padding:10px 0;border-bottom:none}.com-side-user-panel-rank{display:table-cell;vertical-align:middle;width:35px}.com-side-user-panel-order{display:inline-block;vertical-align:middle;min-width:24px;text-align:center;font-size:14px;color:#999;line-height:20px}.com-side-user-ranks>li:nth-child(1) .com-side-user-panel-order,.com-side-user-ranks>li:nth-child(2) .com-side-user-panel-order,.com-side-user-ranks>li:nth-child(3) .com-side-user-panel-order{color:#EE7F31}.com-side-user-panel.rank .com-side-user-panel-datas{margin-top:3px}.com-side-user-panel.intro{padding-top:20px;padding-bottom:20px;border-bottom:1px solid #E1E3E9}.com-side-user-panel.intro .com-media-body{padding-right:80px}.com-side-user-panel.intro .com-side-user-panel-btns{top:20px}.com-side-user-panel.intro .com-side-user-panel-datas{position:relative;z-index:2;margin-top:20px}.com-side-user-panel.intro .com-side-user-panel-datas .com-data{width:33.33%;color:#999;font-size:14px;line-height:20px}.com-side-user-panel.intro .com-side-user-panel-datas .com-data:before{display:none}.com-side-user-panel.intro .com-side-user-panel-datas .com-data em,.com-side-user-panel.intro .com-side-user-panel-datas .com-data:hover{color:#00a4ff}.com-side-column-panels{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-column-panel{margin-bottom:0;padding:10px 0}.com-side-column-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-column-panel .com-media-object{padding-right:20px;width:38px}.com-side-column-panel .com-2-avatar{width:38px;height:38px}.com-side-column-panel-title{font-size:16px;line-height:22px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-column-panel-infos{position:relative;margin-top:4px}.com-side-column-panel-author{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;max-width:110px;font-size:14px;line-height:20px;color:#999}.com-side-column-panel-author.with-verify{padding-right:17px}.com-side-column-panel-author .name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-column-panel-author .com-verification{position:absolute;right:0;top:4px}.com-side-column-panel .com-datas{margin-top:4px}.com-side-column-panel.has-btns .com-media-body{position:relative}.com-side-column-panel.has-btns .com-side-column-panel-title{margin-right:80px}.com-side-column-panel-btns{position:absolute;right:0;top:-2px;z-index:2}.com-side-column-panel-btns .c-btn{padding:0 10px;min-width:0;width:70px;height:28px;font-size:12px;line-height:26px}.com-side-column-panel.with-author .com-media-body{position:relative}.com-side-column-panel.with-author .com-side-column-panel-infos{margin-top:3px;line-height:18px}.com-side-column-panel.with-author .com-side-column-panel-author{font-size:12px;line-height:18px}.com-side-column-panel.with-author .com-datas{position:absolute;right:0;bottom:0;margin-top:0}.com-side-column-panel-loading.com-loading-placeholder{height:64px}.panel-cell:last-child .com-side-column-panel-loading{border-bottom:none}.com-side-column-panels-wrap .com-page-btns{margin-top:15px}.com-side-column-ranks{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-column-panel.rank{padding:10px 0;border-bottom:none}.com-side-column-panel-rank{display:table-cell;vertical-align:middle;width:35px}.com-side-column-panel-order{display:inline-block;vertical-align:middle;min-width:24px;text-align:center;font-size:14px;color:#999;line-height:20px}.com-side-column-ranks>li:nth-child(1) .com-side-column-panel-order,.com-side-column-ranks>li:nth-child(2) .com-side-column-panel-order,.com-side-column-ranks>li:nth-child(3) .com-side-column-panel-order{color:#EE7F31}.com-side-column-panel.rank .com-side-column-panel-datas{margin-top:3px}.com-2-wechat-panel{display:table;table-layout:fixed;width:100%}.com-2-section+.com-2-wechat-panel{margin-top:30px}.com-2-wechat-panel .qr-img{display:table-cell;padding:5px;width:90px;height:90px;border:1px solid #ddd}.com-2-wechat-panel .qr-img img{display:block;width:100%}.com-2-wechat-panel .qr-cnt{box-sizing:border-box;display:table-cell;vertical-align:middle;padding-left:15px;font-size:14px;line-height:24px;text-align:left}.com-2-wechat-panel .qr-title{font-size:16px;color:#333;font-weight:500;line-height:22px}.com-2-wechat-panel .qr-desc{margin-top:6px;font-size:14px;line-height:20px;color:#999}.com-2-wechat-panel .qr-img-full{display:none}.com-2-wechat-panel.without-cnt{width:90px}.com-tooltip{position:absolute;color:#444;z-index:900}.com-tooltip-hidden{display:none}.com-tooltip-content{position:relative}.com-tooltip-inner{font-size:12px;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px 10px;border:1px solid #e7e8f1;background-color:#fff;line-height:18px;-webkit-box-shadow:0 10px 20px rgba(3,27,78,.1);box-shadow:0 10px 20px rgba(3,27,78,.1);position:static !important}.com-tooltip-inner:after,.com-tooltip-inner:before{font-size:0;position:absolute;width:0;height:0;content:'';border:8px dashed transparent}.com-tooltip-inner:after{border:7px dashed transparent}.com-tooltip-placement-top,.com-tooltip-placement-topLeft,.com-tooltip-placement-topRight{padding-bottom:8px}.com-tooltip-placement-top .com-tooltip-inner{left:50%}.com-tooltip-placement-topLeft .com-tooltip-inner{left:15px}.com-tooltip-placement-topRight .com-tooltip-inner{right:15px}.com-tooltip-placement-top .com-tooltip-inner:after,.com-tooltip-placement-top .com-tooltip-inner:before,.com-tooltip-placement-topLeft .com-tooltip-inner:after,.com-tooltip-placement-topLeft .com-tooltip-inner:before,.com-tooltip-placement-topRight .com-tooltip-inner:after,.com-tooltip-placement-topRight .com-tooltip-inner:before{top:100%;left:inherit;right:inherit;margin-top:-1px;border-top-style:solid}.com-tooltip-placement-top .com-tooltip-inner:before,.com-tooltip-placement-topLeft .com-tooltip-inner:before,.com-tooltip-placement-topRight .com-tooltip-inner:before{margin-left:-8px;border-top-width:11px;border-bottom-width:0;border-top-color:#e7e8f1}.com-tooltip-placement-topRight .com-tooltip-inner:before{margin-right:-8px}.com-tooltip-placement-top .com-tooltip-inner:after,.com-tooltip-placement-topLeft .com-tooltip-inner:after,.com-tooltip-placement-topRight .com-tooltip-inner:after{margin-left:-7px;border-top-color:#fff;border-top-width:9px;border-bottom-width:0}.com-tooltip-placement-topRight .com-tooltip-inner:after{margin-right:-7px}.com-tooltip-placement-bottom,.com-tooltip-placement-bottomLeft,.com-tooltip-placement-bottomRight{padding-top:8px}.com-tooltip-placement-bottom .com-tooltip-inner{left:50%}.com-tooltip-placement-bottomLeft .com-tooltip-inner{left:15px}.com-tooltip-placement-bottomRight .com-tooltip-inner{right:15px}.com-tooltip-placement-bottom .com-tooltip-inner:after,.com-tooltip-placement-bottom .com-tooltip-inner:before,.com-tooltip-placement-bottomLeft .com-tooltip-inner:after,.com-tooltip-placement-bottomLeft .com-tooltip-inner:before,.com-tooltip-placement-bottomRight .com-tooltip-inner:after,.com-tooltip-placement-bottomRight .com-tooltip-inner:before{bottom:100%;left:inherit;right:inherit;margin-bottom:-1px;border-bottom-style:solid}.com-tooltip-placement-bottom .com-tooltip-inner:before,.com-tooltip-placement-bottomLeft .com-tooltip-inner:before,.com-tooltip-placement-bottomRight .com-tooltip-inner:before{margin-left:-8px;border-top-width:0;border-bottom-width:11px;border-bottom-color:#e7e8f1}.com-tooltip-placement-bottomRight .com-tooltip-inner:before{margin-right:-8px}.com-tooltip-placement-bottom .com-tooltip-inner:after,.com-tooltip-placement-bottomLeft .com-tooltip-inner:after,.com-tooltip-placement-bottomRight .com-tooltip-inner:after{margin-left:-7px;border-bottom-color:#fff;border-top-width:0;border-bottom-width:9px}.com-tooltip-placement-bottomRight .com-tooltip-inner:after{margin-right:-7px}.com-tooltip-placement-left,.com-tooltip-placement-leftBottom,.com-tooltip-placement-leftTop{padding-right:8px}.com-tooltip-placement-left .com-tooltip-inner{top:50%}.com-tooltip-placement-leftTop .com-tooltip-inner{top:15px}.com-tooltip-placement-leftBottom .com-tooltip-inner{bottom:15px}.com-tooltip-placement-left .com-tooltip-inner:after,.com-tooltip-placement-left .com-tooltip-inner:before,.com-tooltip-placement-leftBottom .com-tooltip-inner:after,.com-tooltip-placement-leftBottom .com-tooltip-inner:before,.com-tooltip-placement-leftTop .com-tooltip-inner:after,.com-tooltip-placement-leftTop .com-tooltip-inner:before{top:inherit;bottom:inherit;left:100%;margin-left:-1px;border-left-style:solid}.com-tooltip-placement-left .com-tooltip-inner:before,.com-tooltip-placement-leftBottom .com-tooltip-inner:before,.com-tooltip-placement-leftTop .com-tooltip-inner:before{margin-top:-8px;border-left-width:11px;border-right-width:0;border-left-color:#e7e8f1}.com-tooltip-placement-leftBottom .com-tooltip-inner:before{margin-bottom:-8px}.com-tooltip-placement-left .com-tooltip-inner:after,.com-tooltip-placement-leftBottom .com-tooltip-inner:after,.com-tooltip-placement-leftTop .com-tooltip-inner:after{margin-top:-7px;border-left-color:#fff;border-left-width:9px;border-right-width:0}.com-tooltip-placement-leftBottom .com-tooltip-inner:after{margin-bottom:-7px}.com-tooltip-placement-right,.com-tooltip-placement-rightBottom,.com-tooltip-placement-rightTop{padding-left:8px}.com-tooltip-placement-right .com-tooltip-inner{top:50%}.com-tooltip-placement-rightTop .com-tooltip-inner{top:15px}.com-tooltip-placement-rightBottom .com-tooltip-inner{bottom:15px}.com-tooltip-placement-right .com-tooltip-inner:after,.com-tooltip-placement-right .com-tooltip-inner:before,.com-tooltip-placement-rightBottom .com-tooltip-inner:after,.com-tooltip-placement-rightBottom .com-tooltip-inner:before,.com-tooltip-placement-rightTop .com-tooltip-inner:after,.com-tooltip-placement-rightTop .com-tooltip-inner:before{top:inherit;bottom:inherit;right:100%;margin-right:-1px;border-right-style:solid}.com-tooltip-placement-right .com-tooltip-inner:before,.com-tooltip-placement-rightBottom .com-tooltip-inner:before,.com-tooltip-placement-rightTop .com-tooltip-inner:before{margin-top:-8px;border-left-width:0;border-right-width:11px;border-right-color:#e7e8f1}.com-tooltip-placement-rightBottom .com-tooltip-inner:before{margin-bottom:-8px}.com-tooltip-placement-right .com-tooltip-inner:after,.com-tooltip-placement-rightBottom .com-tooltip-inner:after,.com-tooltip-placement-rightTop .com-tooltip-inner:after{margin-top:-7px;border-right-color:#fff;border-left-width:0;border-right-width:9px}.com-tooltip-placement-rightBottom .com-tooltip-inner:after{margin-bottom:-7px}.com-tooltip-warning span{vertical-align:middle;margin-left:5px;color:#e29e35}.com-tooltip-warning.com-tooltip-placement-bottom .com-tooltip-inner:before{border-bottom-color:#ffc533}.com-tooltip-warning.com-tooltip-placement-bottom .com-tooltip-inner:after{border-bottom-color:#fff5db}.com-tooltip-warning.com-tooltip-placement-left .com-tooltip-inner:before{border-left-color:#ffc533}.com-tooltip-warning.com-tooltip-placement-left .com-tooltip-inner:after{border-left-color:#fff5db}.com-tooltip-warning.com-tooltip-placement-top .com-tooltip-inner:before{border-top-color:#ffc533}.com-tooltip-warning.com-tooltip-placement-top .com-tooltip-inner:after{border-top-color:#fff5db}.com-tooltip-warning.com-tooltip-placement-right .com-tooltip-inner:before{border-right-color:#ffc533}.com-tooltip-warning.com-tooltip-placement-right .com-tooltip-inner:after{border-right-color:#fff5db}.com-tooltip-warning .com-tooltip-inner{border:1px solid #ffc533;background-color:#fff5db;color:#e29e35}.com-tooltip-warning .com-tooltip-inner em{color:#b27700;font-weight:700}.com-tooltip-warning.m .com-tooltip-inner{padding:4px 10px}.com-tooltip-err span{vertical-align:middle;margin-left:5px;color:red}.com-tooltip-err.com-tooltip-placement-bottom .com-tooltip-inner:before{border-bottom-color:#e7736e}.com-tooltip-err.com-tooltip-placement-bottom .com-tooltip-inner:after{border-bottom-color:#f9dcdb}.com-tooltip-err.com-tooltip-placement-left .com-tooltip-inner:before{border-left-color:#e7736e}.com-tooltip-err.com-tooltip-placement-left .com-tooltip-inner:after{border-left-color:#f9dcdb}.com-tooltip-err.com-tooltip-placement-top .com-tooltip-inner:before{border-top-color:#e7736e}.com-tooltip-err.com-tooltip-placement-top .com-tooltip-inner:after{border-top-color:#f9dcdb}.com-tooltip-err.com-tooltip-placement-right .com-tooltip-inner:before{border-right-color:#e7736e}.com-tooltip-err.com-tooltip-placement-right .com-tooltip-inner:after{border-right-color:#f9dcdb}.com-tooltip-err .com-tooltip-inner{border:1px solid #e7736e;background-color:#f9dcdb;color:#e1504a}.com-tooltip-confirm{min-width:170px;max-width:300px}.com-tooltip-confirm .com-tooltip-inner{padding:18px 20px}.com-tooltip-confirm .confirm-title{font-size:14px;color:#000;font-weight:400}.com-tooltip-confirm .confirm-btns{margin-top:14px;text-align:right}.com-tooltip-confirm .confirm-btn{min-width:60px;border:none;background-color:transparent;color:#00a4ff;text-align:center;cursor:pointer;font-size:14px}.com-tooltip-confirm .confirm-btn:hover{color:#0092ee}.com-tooltip-confirm .confirm-btn.weak{color:#000}.com-tooltip-confirm .confirm-btn.weak:hover{color:#00a4ff;text-decoration:none}.com-side-products{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-product{box-sizing:border-box;position:relative;padding:8px 0}.com-side-product:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-product>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-side-product-hd{position:relative;padding-left:42px}.com-side-product-object{position:absolute;left:0;top:0}.com-side-product-object img{display:block;width:32px;height:32px}.com-side-product-title{box-sizing:border-box;font-size:16px;line-height:32px;font-weight:400;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-side-product-desc{margin-top:5px;font-size:12px;line-height:18px;color:#999;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:36px}.com-side-products.col3{font-size:0;padding:0;border-bottom:none}.com-side-products.col3>.panel-cell{display:inline-block;vertical-align:top;margin-right:20px;margin-bottom:20px;width:calc((100% - 20px * 2 - 1px)/ 3)}.com-side-products.col3 .com-side-product{border-bottom:none;padding:0}.com-side-products.col3 .com-side-product:hover{background:0 0}.com-side-products.col3 .com-side-product:hover .com-side-product-title{color:#00a4ff}.com-side-products.col3>.panel-cell:nth-child(3n){margin-right:0}.c-hero-bar{-webkit-font-smoothing:auto}.c-hero-bar-tit{font-weight:400;-webkit-font-smoothing:antialiased}.c-hero-bar-desc{-webkit-font-smoothing:antialiased}.c-hero-bar.air .c-hero-bar-inner{padding-top:45px;height:300px}.c-hero-bar.air .c-hero-bar-tit{margin-bottom:10px;font-size:40px;line-height:60px}.c-hero-bar.air .c-hero-bar-desc{line-height:1.7}.c-hero-section.air .c-hero-section-tit{font-weight:400;-webkit-font-smoothing:antialiased}.c-hero-section.air .c-hero-section-btn .c-btn,.c-hero-section.air .c-hero-section-des{-webkit-font-smoothing:antialiased}.com-hero-bar{background-color:#1F2531;background-position:center center;background-repeat:no-repeat;background-size:cover;color:#fff}.com-hero-bar-inner{display:table;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 auto;width:100%;max-width:1200px}.com-hero-bar-ct{display:table-cell;vertical-align:middle;padding:0 20px;height:255px}.com-hero-bar-tit{font-size:40px;line-height:60px;font-weight:400;-webkit-font-smoothing:antialiased}.com-hero-bar-desc{margin-top:6px;font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased}.com-hero-bar-btns{margin-top:26px}.com-hero-bar .c-btn{padding:0 10px;min-width:90px;height:28px;line-height:28px;font-size:12px}.com-hero-bar .c-btn-hole{border-color:#fff;color:#fff}.com-hero-bar .c-btn-hole:hover{border-color:#00a4ff;color:#00a4ff;background-color:transparent}.com-hero-share{margin-top:15px}.com-hero-bar.align-center{text-align:center}.com-hero-bar.air .com-hero-bar-ct{box-sizing:border-box;padding-top:45px;height:300px}.com-side-article-ranks{padding:10px 0;border-bottom:1px solid #D2D9E7}.com-side-article-rank-item{display:block;position:relative;padding:10px 0 10px 30px;color:#333}.com-side-article-rank-item:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-article-rank-order{position:absolute;top:10px;left:0;display:block;min-width:24px;text-align:center;font-size:14px;color:#999;line-height:20px}.com-side-article-rank-tit{font-size:14px;line-height:20px;font-weight:400;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:40px}.com-side-article-rank-extra{margin-top:5px;line-height:14px;font-size:12px;color:#999}.com-side-article-ranks>li:nth-child(1) .com-side-article-rank-order,.com-side-article-ranks>li:nth-child(2) .com-side-article-rank-order,.com-side-article-ranks>li:nth-child(3) .com-side-article-rank-order{color:#EE7F31}.com-side-disorder-list{padding:15px 0;border-bottom:1px solid #E1E3E9}.com-side-disorder-list li{position:relative}.com-side-disorder-list li:before{content:'';position:absolute;left:6px;top:14px;width:4px;height:4px;border-radius:50%;background-color:#00a4ff}.com-side-disorder-list a{display:block;padding:5px 15px;font-size:14px;line-height:22px;color:#333;word-wrap:break-word}.com-side-disorder-text{display:block}.com-side-disorder-list a:hover{text-decoration:none;background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-disorder-list.loading{height:270px}.com-side-disorder-list.loading .com-loading-placeholder{height:100%;background-color:transparent}.com-side-doc-panels{padding:10px 0;border-bottom:1px solid #E1E3E9}.com-side-doc-panel{position:relative;padding:10px 0}.com-side-doc-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-side-doc-panel>.panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-side-doc-panel-main{margin-bottom:0}.com-side-doc-panel-main .com-media-object{padding-right:20px;width:42px}.com-side-doc-panel-img{display:block;width:42px;height:42px}.com-side-doc-panel-title{position:relative;box-sizing:border-box;font-size:16px;line-height:22px;color:#000;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.com-side-doc-panel-datas{margin-top:3px}.com-loading-placeholder.com-side-doc-panel-loading.small{height:103px}.com-2-tag-cont{padding:11px 5px 1px 15px;position:relative;z-index:1;min-height:45px;box-sizing:border-box;font-size:0;border-radius:2px}.com-2-tag-cont .com-2-tag-txt,.com-2-tagsinput-list dd a{display:inline-block;font-size:12px;line-height:22px;background-color:#F3F5F9;padding:0 8px;color:#333;margin-right:10px;margin-bottom:10px}.com-2-tag-cont .com-2-tag-txt span{display:inline-block;vertical-align:middle;max-width:10em;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-tagsinput-list dd a:hover{border-color:#00a4ff}.com-2-tag-cont .com-2-tag-input{width:auto;max-width:10em;border:0;background:0 0;outline:0;line-height:22px;height:22px;font-size:12px;color:#333;margin-bottom:10px}.com-2-tag-cont .com-2-text{box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:0;z-index:-1;border:1px solid #e5e5e5;border-radius:2px;padding:0 15px;font-size:14px;line-height:42px;color:#999;background-color:#fff}.com-2-tag-cont .com-2-text:hover,.com-2-tag-input:focus+.com-2-text,.com-2-tag-input:hover,.com-2-tag-input:hover+.com-2-text{border-color:#00a4ff}.com-2-tag-txt{cursor:default}.com-2-tag-txt .com-2-btn-close{cursor:pointer;display:inline-block;vertical-align:middle;width:16px;height:16px;background-image:url(sprite/base-201911131148.svg);;margin-right:-5px;margin-left:8px;background-position:96.11% 41.81%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-tagsinput-list{font-size:12px;padding-left:60px;margin-top:10px}.com-2-tagsinput-list dt{float:left;margin-left:-60px;color:#999;line-height:21px}.com-2-tagsinput-list dd{display:inline-block;vertical-align:middle}.com-2-tagsinput-list dd a{display:block;margin-right:10px;margin-bottom:5px;max-width:8em;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none}.com-2-tagsinput-list dd a.disabled{background-color:#e5e5e5;color:#999;cursor:default}.com-2-tagsinput-bar{position:relative}.com-2-tagsinput-dropdown{display:none;position:absolute;top:100%;left:0;z-index:900;margin-top:5px;padding:15px;width:100%;font-size:12px;background:#fff;border:1px solid #e5e5e5;border-radius:2px;box-sizing:border-box}.com-2-tagsinput-dropdown.show{display:block}.com-2-tagsinput-dropdown-tit{font-size:12px;color:#999}.com-2-tagsinput-dropdown-tit em{padding:0 6px;color:#333}.com-2-tagsinput-dropdown-menu{height:180px;overflow-y:auto;overflow-x:hidden;box-sizing:border-box;margin:15px -15px 0}.com-2-tagsinput-dropdown-menu li{padding:6px 15px;cursor:pointer;font-size:12px;line-height:18px;color:#333}.com-2-tagsinput-dropdown-menu li.hover,.com-2-tagsinput-dropdown-menu li:hover{color:#00a4ff;background-color:#F3F5F9}.com-2-tagsinput-dropdown-loading{display:none;position:relative;color:#999}.com-2-tagsinput-dropdown-menu+.com-2-tagsinput-dropdown-loading{margin-top:5px}.com-2-tagsinput-dropdown-loading .icon-loading{margin-right:10px}.com-2-tagsinput-dropdown-loading .icon-loading:before{content:'';width:16px;height:16px;display:inline-block;background-image:url(sprite/base-201911131148.svg);;-moz-animation:spin .6s infinite linear;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear;vertical-align:-3px;background-position:69.88% 62.82%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-tagsinput-dropdown.is-loading .com-2-tagsinput-dropdown-loading{display:block}.com-2-tagsinput-dropdown-tip{display:none;color:#999}.com-2-tagsinput-dropdown-tip a{color:#00a4ff}.com-2-tagsinput-dropdown-tip a:hover{text-decoration:underline}.com-2-tagsinput-dropdown.is-err .com-2-tagsinput-dropdown-tip{display:block}.com-2-tagsinput-tab{margin:0 5px 5px}.com-2-tagsinput-tab .com-tab-item{margin-right:20px}.com-2-tagsinput-tab .com-tab-item a{padding:0 5px;color:#666}.com-2-tagsinput-tab .com-tab-item a:hover{color:#00a4ff}.com-2-tagsinput-tab .com-tab-item.actived a,.com-2-tagsinput-tab .com-tab-item.actived a:hover{color:#00a4ff;font-weight:400}.com-2-tagsinput-tab .com-tab-panel{padding-top:10px;max-height:170px;overflow:auto}.com-2-tagsinput-tab .com-tag-v2-list.large .com-tag-v2{font-size:12px}.com-2-tagsinput-recommends{margin-top:10px}.com-2-tagsinput-recommends>.recommend-title{margin-bottom:10px;font-size:12px;color:#666}.c-btn{height:32px;min-width:88px;padding:0 16px;background-color:#00a4ff;border:1px solid transparent;color:#fff;font-size:14px;line-height:30px;text-align:center;display:inline-block;cursor:pointer;outline:0;box-sizing:border-box}.c-btn:hover{text-decoration:none;background-color:#0092ee}.c-btn-pay{background-color:#ff7200}.c-btn-pay:hover{background-color:#f06c00}.c-btn-hole{border:1px solid #00a4ff;background-color:transparent;color:#00a4ff;line-height:30px}.c-btn-hole:hover{background-color:rgba(0,164,255,.15);border:1px solid #00a4ff;color:#00a4ff}.c-btn-hole-white{border:1px solid #DCDEE6;background:0 0;color:#fff;line-height:30px}.c-btn-hole-white:hover{background-color:#fff;color:#000}.c-btn-weak{background:0 0;border:1px solid #DCDEE6;color:#666;line-height:30px}.c-btn-weak:hover{background:0 0;border:1px solid #999;color:#000}.c-btn-link{min-width:0;border:none;background-color:transparent;color:#333}.c-btn-link:hover{color:#00a4ff;border:none;background-color:transparent}.c-btn-disabled,.c-btn-disabled:hover{background-color:#ddd;border-color:#ddd;color:#999;cursor:default}.c-btn.xl{height:40px;line-height:38px;font-size:16px}.c-btn.l{height:36px;line-height:34px}.c-btn-small,.c-btn.s,.c-btn.small{height:28px;line-height:26px;min-width:80px;padding:0 10px;font-size:12px}.c-btn-smaller,.c-btn.smaller,.c-btn.xs{padding:0 10px;min-width:0;height:24px;font-size:12px;line-height:22px}.c-btn.block,.c-btn.full-width{min-width:0;display:block;width:100%}.c-btn.auto-width{min-width:0}.c-btn .c-loading{display:none}.c-btn.loading{cursor:default}.c-btn.loading .text{display:none}.c-btn.loading .c-loading{display:block}.c-btn .c-loading-inner>div{background-color:#fff;vertical-align:middle}.c-btn.loading:hover{background-color:#00a4ff}.c-btn-pay.loading:hover{background-color:#ff7200}.c-btn-hole .c-loading-inner>div{background-color:#00a4ff}.c-btn-hole.loading:hover{background-color:#fff}.c-btn-hole-white.loading:hover{background-color:transparent}.c-btn-weak .c-loading-inner>div{background-color:#ddd}.c-btn-weak.loading:hover{background-color:#fff;border-color:#ddd}.c-btn-link .c-loading-inner>div{background-color:#ddd}.c-btn-link.loading:hover{background-color:transparent;border-color:#ddd}.c-btn-disabled .c-loading-inner>div{background-color:#fff}.c-btn-disabled.loading:hover{background-color:#d5d7de}.c-btn.btn-upload{position:relative;overflow:hidden}.c-btn.btn-upload input[type=file]{position:absolute;right:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:200px}.com-ico-btn .icon{position:relative;top:-1px;margin-right:6px;display:inline-block;vertical-align:middle;width:16px;height:16px}.com-ico-btn .icon.write{top:-2px;background-image:url(sprite/base-201911131148.svg);;background-position:29.709999999999997% 96.64%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-ico-btn .icon.follow{top:-2px;width:12px;height:12px;background-image:url(sprite/base-201911131148.svg);;background-position:17.28% 99.58%;background-size:4200% 4100%;;background-repeat:no-repeat}.com-ico-btn.c-btn-weak .icon.refresh{top:-2px;background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 72.06%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-ico-btn.c-btn-weak:hover .icon.refresh{top:-2px;background-image:url(sprite/base-201911131148.svg);;background-position:96.11% 34.239999999999995%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-comment-section .com-comment-single-edit{margin-top:0;margin-bottom:20px}.com-ani-hero{position:relative;overflow:hidden;padding:0 10px}.com-ani-hero-inner{box-sizing:border-box;position:relative;z-index:2;max-width:1200px;height:280px;margin:0 auto;padding:55px 10px 0;font-size:0}.com-ani-hero-inner:before{content:'';display:inline-block;vertical-align:middle;width:0;height:100%}.com-ani-hero-cnt{display:inline-block;vertical-align:middle;color:#fff}.com-ani-hero-title{margin-top:-20px;font-size:44px;line-height:70px;font-weight:400}.com-ani-hero-desc{margin-top:5px;font-size:18px;line-height:25px;opacity:.8}.com-ani-hero-imgs{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.com-ani-hero-bg{height:100%;background-position:center;background-repeat:no-repeat}.com-ani-hero-breath,.com-ani-hero-canvas,.com-ani-hero-foreground{position:absolute;left:0;top:0;width:100%;height:100%}.com-ani-hero-breath{-webkit-animation:aniHeroBreath 3s ease-in-out infinite;animation:aniHeroBreath 3s ease-in-out infinite}@-webkit-keyframes aniHeroBreath{0%,100%{opacity:0}50%{opacity:1}}@keyframes aniHeroBreath{0%,100%{opacity:0}50%{opacity:1}}.com-ani-hero-breath-img{height:100%;background-position:center;background-repeat:no-repeat}.com-ani-hero-canvas canvas{position:absolute;top:0;left:50%}.com-ani-hero-foreground,.com-ani-hero-foreground-breath{background-position:center;background-repeat:no-repeat}.com-share-bubble .com-tooltip-inner{padding:20px}.com-share-bubble-opts>li{margin-bottom:15px}.com-share-bubble-opts>li:last-child{margin-bottom:0}.com-share-bubble-link,.com-share-bubble-text{display:block;color:#333;font-size:12px}.com-share-bubble-link:hover{color:#00a4ff;text-decoration:none}.com-share-bubble-icon{position:relative;top:-1px;margin-right:5px;display:inline-block;vertical-align:middle;width:20px;height:20px}.com-share-bubble-icon.qq{background-image:url(sprite/base-201911131148.svg);;background-position:87.4% 64.83%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-bubble-icon.wechat{background-image:url(sprite/base-201911131148.svg);;background-position:72.92999999999999% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-bubble-icon.weibo{background-image:url(sprite/base-201911131148.svg);;background-position:92.36% 9.53%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-bubble-icon.link{background-image:url(sprite/base-201911131148.svg);;background-position:22.93% 88.98%;background-size:2520% 2460%;;background-repeat:no-repeat}.com-share-bubble-code{margin-top:10px;width:110px;height:110px}.com-share-bubble-code img{display:block;width:100%}.com-share-bubble .c-bubble-trigger{display:block}.com-share-bubble-trigger{color:#00a4ff;font-size:14px}.com-share-bubble-trigger .com-i-share{background-image:url(sprite/base-201911131148.svg);;background-position:92.42% 92.86%;background-size:3150% 3075%;;background-repeat:no-repeat}.com-2-sub-section{margin-bottom:30px}.com-2-sub-section-hd{margin-bottom:20px}.com-2-sub-section-title{font-size:18px;line-height:26px;color:#999;font-weight:400}.com-radio-blocks{font-size:0}.com-radio-block{box-sizing:border-box;padding:0 10px;min-width:80px;height:30px;line-height:28px;border:1px solid #ddd;font-size:14px;color:#333;text-align:center;position:relative;display:inline-block;margin-right:10px;margin-bottom:10px;cursor:pointer;background-color:#fff}.com-radio-block img{position:relative;top:-1px;vertical-align:middle;margin-right:5px;width:16px;height:16px}.com-radio-block:hover{background-color:#f7f8fa;border:1px solid #b3b3b3}.com-radio-block.actived,.com-radio-block.actived:hover{background-color:#eff9ff;border:1px solid #00a4ff;color:#00a4ff;cursor:default}.com-form-ctrl{position:relative;padding-right:50px;overflow:hidden;transition:max-height .3s ease-in-out}.com-form-ctrl.fold{max-height:40px}.com-form-ctrl-btn{position:absolute;right:10px;top:5px;font-size:14px;text-align:left;cursor:pointer;color:#00a4ff}.com-form-ctrl-icon{width:10px;height:9px;display:inline-block;vertical-align:middle;background-image:url(sprite/base-201911131148.svg);;transform:rotate(180deg);background-position:69.84% 37.269999999999996%;background-size:5040% 5466.666666666666%;;background-repeat:no-repeat}.com-form-ctrl-btn.fold .com-form-ctrl-icon{transform:rotate(0)}.com-filter-form{padding:30px 10px 10px;background-color:#F3F5F9}.com-filter-form .com-form-title{font-size:14px;color:#666}.com-filter-form .com-form-cnt{padding-bottom:10px}.com-3-article-panel{position:relative;padding:25px 0;border-bottom:1px solid #E1E3E9;cursor:pointer}.com-3-article-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-3-article-panel>.panel-link{position:absolute;left:0;top:0;width:100%;height:100%}.com-3-article-panel-media{display:table;table-layout:fixed;width:100%}.com-3-article-panel-body{display:table-cell;vertical-align:top}.com-3-article-panel-object{display:table-cell;vertical-align:top;padding-left:30px;width:150px}.com-3-article-panel-title{font-size:20px;line-height:26px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-article-panel-desc{margin-top:10px;font-size:14px;line-height:24px;color:#666;word-wrap:break-word;display:block;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;max-height:48px}.com-3-article-panel-infos{position:relative;z-index:2;margin-top:10px;font-size:0}.com-3-article-panel-mark{display:inline-block;vertical-align:middle;box-sizing:border-box;margin-top:5px;margin-right:15px;padding:0 5px;height:18px;border:1px solid #ddd;background-color:#fff;color:#666;font-size:12px;line-height:16px}.com-3-article-panel-mark.sticky{position:relative;top:-2px;margin-top:0;border-color:#FFC693;color:#FF7800;background-color:#FDF7F2}.com-3-article-panel-source{display:inline-block;vertical-align:middle;margin-top:5px;margin-right:15px;font-size:12px;line-height:18px;color:#999}.com-3-article-panel-source .item{display:inline-block;vertical-align:middle;vertical-align:middle;color:inherit}.com-3-article-panel-source .author{max-width:16em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-article-panel-source .item:before{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;margin:0 5px;width:2px;height:2px;background-color:#999;border-radius:50%}.com-3-article-panel-source .item:first-child:before{display:none}.com-3-article-panel-source a.item:hover{color:#00a4ff}.com-3-article-panel-tags{display:inline;vertical-align:middle;position:relative;top:3px}.com-3-article-panel-thumbnail{width:150px;height:112px}.com-3-article-panel.special .com-3-article-panel-object{width:200px;padding-left:0;padding-right:24px}.com-3-article-panel.special .com-3-article-panel-thumbnail{position:relative;width:200px;height:150px}.com-3-article-panel-special{position:absolute;right:0;top:0;padding:0 8px;height:28px;background-color:#FF7800;font-size:14px;line-height:28px;font-weight:500;color:#fff}.com-side-ranks .rank-more{padding-bottom:20px;border-bottom:1px solid #eee;text-align:center}.com-side-ranks .com-side-article-ranks,.com-side-ranks .com-side-column-ranks,.com-side-ranks .com-side-user-ranks{border-bottom:none}.com-modal-set-name .set-form{margin-top:20px}.com-modal-set-name .com-form-title{font-size:14px;width:60px}.com-modal-set-name .c-input-text{width:100%}.com-modal-set-name .c-textarea{box-sizing:border-box;width:100%}.com-modal-set-name .set-tip{margin-top:10px;color:#999}.com-sticky-header{position:fixed;left:0;top:0;z-index:1001;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%;min-width:1000px;background:#fff;-webkit-box-shadow:0 2px 2px 0 rgba(207,216,221,.7);box-shadow:0 2px 2px 0 rgba(207,216,221,.7);-webkit-transition:-webkit-transform .3s,opacity .3s,visibility .3s;transition:transform .3s,opacity .3s,visibility .3s}.com-sticky-header.hidden{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden;opacity:0;pointer-events:none}.com-sticky-header>.com-inner{position:relative;padding-top:10px;padding-bottom:10px;display:table;table-layout:fixed;width:100%}.com-sticky-header-main{display:table-cell;vertical-align:middle}.com-sticky-header-title{font-size:16px;line-height:36px;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-sticky-header-extra{display:table-cell;vertical-align:middle;padding-left:20px;width:200px;text-align:right;line-height:36px}.com-sticky-header .c-btn{vertical-align:middle;margin-left:10px;min-width:80px}.com-text-collapse{overflow:hidden;font-size:14px;line-height:26px;text-align:left}.com-text-collapse-inner{box-sizing:border-box;margin-left:-60px;width:calc(100% + 60px);overflow:hidden;max-height:156px}.com-text-collapse-cnt{position:relative;float:right;box-sizing:border-box;padding-left:60px;margin-left:calc(60px - 100%);width:100%}.com-text-collapse-cnt-all-text{color:transparent}.com-text-collapse-cnt-begin-text{position:absolute;left:60px;right:0;top:0;max-height:130px;overflow:hidden}.com-text-collapse-cnt-last-line{position:absolute;left:60px;right:60px;top:130px;overflow:hidden}.com-text-collapse-cnt-last-line>.last-line-inner{margin-top:-130px;width:calc(100% + 60px)}.com-text-collapse-cnt-last-line:after{content:'';position:absolute;right:0;top:0;width:15px;height:100%;background:linear-gradient(to right,rgba(255,255,255,0),rgba(255,255,255,1))}.com-text-collapse-placeholder{float:right;width:calc(100% - 60px);max-height:156px;overflow:hidden;color:transparent}.com-text-collapse-ctrl{position:relative;float:right;height:auto;background-color:transparent;width:60px}.com-text-collapse-ctrl a{position:absolute;left:100%;bottom:0;text-align:right;width:60px;color:#00a4ff;text-decoration:none;line-height:26px}.com-text-collapse-ctrl a:after{position:relative;content:'';display:inline-block;vertical-align:middle;top:-1px;margin-left:5px;width:13px;height:7px;background-image:url(sprite/base-201911131148.svg);;transition:transform .2s ease-in-out;background-position:99.19% 96.7%;background-size:3876.9230769230767% 7028.571428571429%;;background-repeat:no-repeat}.com-text-collapse.show .com-text-collapse-inner{max-height:none}.com-text-collapse.show .com-text-collapse-ctrl{float:none;clear:both;height:26px;width:auto}.com-text-collapse.show .com-text-collapse-cnt-all-text{color:inherit}.com-text-collapse.show .com-text-collapse-cnt-begin-text,.com-text-collapse.show .com-text-collapse-cnt-last-line{display:none}.com-text-collapse.show .com-text-collapse-ctrl a{left:auto;right:0;background:0 0}.com-text-collapse.show .com-text-collapse-ctrl a:after{transform:rotate3d(0,0,1,180deg)}.com-column-panel{position:relative;padding:30px 0;border-bottom:1px solid #E5E8ED;cursor:pointer}.com-column-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-column-panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-column-panel-inner{box-sizing:border-box;display:table;width:100%;table-layout:fixed}.com-column-panel-object{display:table-cell;width:90px;padding-right:15px;vertical-align:middle}.com-column-panel-avatar{width:90px;height:90px}.com-column-panel-avatar .com-2-avatar-inner{border-radius:50%}.com-column-panel-body{display:table-cell;vertical-align:top;padding-top:4px}.com-column-panel-title{font-size:20px;line-height:26px;color:#333;font-weight:500;position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;padding-right:80px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.com-column-panel-mark{position:absolute;right:0;top:3px;box-sizing:border-box;display:inline-block;vertical-align:3px;margin-left:10px;height:20px;padding:0 10px;font-size:12px;line-height:20px;color:#666;border-radius:10px;background-color:#EFEFEF;font-weight:400}.com-column-panel-update{display:inline-block;vertical-align:2px;font-size:14px;line-height:20px;color:#00a4ff;font-weight:500}.com-column-panel-update:before{content:'';display:inline-block;vertical-align:2px;margin:0 10px;width:6px;height:6px;background-color:#00a4ff;border-radius:50%}.com-column-panel-desc{margin-top:7px;font-size:14px;line-height:20px;color:#666;word-wrap:break-word}.com-column-panel-infos{margin-top:9px}.com-column-panel-infos .com-data{font-size:14px;line-height:20px}.com-column-panel.has-btns .com-column-panel-body{position:relative;padding-right:100px}.com-column-panel-btns{position:absolute;right:0;top:50%;z-index:2;margin-top:-16px}.com-column-panel-btns .c-btn{padding:0 10px}.coml-2-user-panel{position:relative;padding:30px 0;border-bottom:1px solid #E5E8ED;cursor:pointer}.coml-2-user-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.coml-2-user-panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.coml-2-user-panel-inner{box-sizing:border-box;display:table;width:100%;table-layout:fixed}.coml-2-user-panel-object{display:table-cell;width:90px;padding-right:15px;vertical-align:middle}.coml-2-user-panel-avatar{width:90px;height:90px}.coml-2-user-panel-body{display:table-cell;vertical-align:top;padding-top:4px}.coml-2-user-panel-title{position:relative;display:inline-block;vertical-align:middle;font-size:20px;line-height:26px;color:#333;font-weight:500;box-sizing:border-box;padding-right:20px;max-width:100%}.coml-2-user-panel-title .name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.coml-2-user-panel-title .com-verification{position:absolute;right:0;top:7px;z-index:2}.coml-2-user-panel-desc{margin-top:7px;font-size:14px;line-height:20px;color:#666;word-wrap:break-word}.coml-2-user-panel-infos{margin-top:9px}.coml-2-user-panel-infos .com-data{font-size:14px;line-height:20px}.coml-2-user-panel.has-btns .coml-2-user-panel-body{position:relative;padding-right:100px}.coml-2-user-panel-btns{position:absolute;right:0;top:50%;z-index:2;margin-top:-16px}.coml-2-user-panel-btns .c-btn{padding:0 10px}.com-3-salon-panel{position:relative;padding:30px 0;border-bottom:1px solid #E5E8ED;cursor:pointer}.com-3-salon-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-3-salon-panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-3-salon-panel-inner{box-sizing:border-box;display:table;width:100%;table-layout:fixed}.com-3-salon-panel-object{display:table-cell;width:150px;padding-right:20px;vertical-align:middle}.com-3-salon-panel-img{box-sizing:border-box;width:150px;height:112px;border:1px solid #E5E8ED;background-color:#D8D8D8;background-position:right -66px center;background-repeat:no-repeat;background-size:cover}.com-3-salon-panel-body{display:table-cell;vertical-align:middle}.com-3-salon-panel-title{font-size:20px;line-height:32px;color:#333;font-weight:500;word-wrap:break-word}.com-3-salon-panel-infos{margin-top:8px;font-size:0}.com-3-salon-panel-info{font-size:14px;line-height:24px;color:#999}.com-3-salon-panel-info:before{content:'';display:inline-block;vertical-align:3px;margin:0 8px;width:2px;height:2px;background-color:#999;border-radius:50%}.com-3-salon-panel-info:first-child:before{display:none}.com-3-salon-panel-info.end{color:#999}.com-3-team-panel{position:relative;padding:30px 0;border-bottom:1px solid #E5E8ED;cursor:pointer}.com-3-team-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-3-team-panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-3-team-panel-inner{box-sizing:border-box;display:table;width:100%;table-layout:fixed}.com-3-team-panel-object{display:table-cell;width:80px;padding-right:15px;vertical-align:middle}.com-3-team-panel-members{box-sizing:border-box;width:82px;height:82px;border:1px solid #DDD;background-color:#ddd;border-radius:2px;overflow:hidden}.com-3-team-panel-members-inner{overflow:hidden;zoom:1}.com-3-team-panel-member{float:left;box-sizing:border-box;width:40px;height:40px;border:1px solid #DDD;background-size:cover;background-position:center;background-repeat:no-repeat}.com-3-team-panel-body{display:table-cell;vertical-align:middle}.com-3-team-panel-title{font-size:22px;line-height:30px;color:#000;font-weight:400;position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;padding-right:70px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.com-3-team-panel-update{position:absolute;right:0;top:5px;display:inline-block;vertical-align:3px;font-size:14px;line-height:20px;color:#00a4ff;font-weight:500}.com-3-team-panel-update:before{content:'';display:inline-block;vertical-align:1px;margin:0 10px;width:6px;height:6px;background-color:#00a4ff;border-radius:50%}.com-3-team-panel-desc{margin-top:7px;font-size:14px;line-height:20px;color:#666;word-wrap:break-word}.com-3-team-panel-infos{margin-top:9px}.com-3-team-panel-infos .com-data{font-size:14px;line-height:20px}.com-3-team-panel.has-btns .com-3-team-panel-body{position:relative;padding-right:100px}.com-3-team-panel-btns{position:absolute;right:0;top:50%;z-index:2;margin-top:-16px}.com-3-team-panel-btns .c-btn{padding:0 10px}.com-3-tag-panel{position:relative;padding:30px 0;border-bottom:1px solid #E5E8ED;cursor:pointer}.com-3-tag-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-3-tag-panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-3-tag-panel-inner{box-sizing:border-box}.com-3-tag-panel-title{font-size:20px;line-height:26px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-3-tag-panel-img{display:inline-block;vertical-align:middle;margin-right:5px;position:relative;top:-1px;width:20px;height:20px;background-size:100% auto;background-repeat:no-repeat}.com-3-tag-panel-desc{margin-top:7px;font-size:14px;line-height:20px;color:#666;word-wrap:break-word}.com-3-tag-panel-infos{margin-top:9px}.com-3-tag-panel.has-btns .com-3-tag-panel-inner{position:relative;padding-right:100px}.com-3-tag-panel-btns{position:absolute;right:0;top:50%;z-index:2;margin-top:-16px}.com-3-tag-panel-btns .c-btn{padding:0 10px}.com-team-card{position:relative;box-sizing:border-box;height:220px;padding:30px 20px 0;cursor:pointer;transition:box-shadow .3s linear;border:1px solid #E5E8ED;text-align:center}.com-team-card:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-team-card-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-team-card-title{font-size:16px;line-height:22px;color:#333;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-team-card-infos,.com-team-card-members{margin-top:20px}.com-team-card-btns{position:relative;z-index:2;text-align:center;margin-top:20px;pointer-events:none}.com-team-card-btns .c-btn{pointer-events:auto;padding:0 10px;min-width:0;width:80px;height:28px;line-height:26px;font-size:12px}.com-lattice{font-size:0}.com-lattice>.com-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px;text-align:left;margin-bottom:40px}.com-lattice.com-lattice-cols-1>.com-lattice-cell{width:100%}.com-lattice.com-lattice-cols-2>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (2 - 1) - 1px)/ 2)}.com-lattice.com-lattice-cols-2>.com-lattice-cell:nth-child(2n){margin-right:0}.com-lattice.com-lattice-cols-2>.com-lattice-cell:nth-child(2n):after{display:none}.com-lattice.com-lattice-cols-3>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (3 - 1) - 1px)/ 3)}.com-lattice.com-lattice-cols-3>.com-lattice-cell:nth-child(3n){margin-right:0}.com-lattice.com-lattice-cols-3>.com-lattice-cell:nth-child(3n):after{display:none}.com-lattice.com-lattice-cols-4>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (4 - 1) - 1px)/ 4)}.com-lattice.com-lattice-cols-4>.com-lattice-cell:nth-child(4n){margin-right:0}.com-lattice.com-lattice-cols-4>.com-lattice-cell:nth-child(4n):after{display:none}.com-lattice.com-lattice-cols-5>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (5 - 1) - 1px)/ 5)}.com-lattice.com-lattice-cols-5>.com-lattice-cell:nth-child(5n){margin-right:0}.com-lattice.com-lattice-cols-5>.com-lattice-cell:nth-child(5n):after{display:none}.com-lattice.com-lattice-cols-6>.com-lattice-cell{margin-right:60px;width:calc((100% - 60px * (6 - 1) - 1px)/ 6)}.com-lattice.com-lattice-cols-6>.com-lattice-cell:nth-child(6n){margin-right:0}.com-lattice.com-lattice-cols-6>.com-lattice-cell:nth-child(6n):after{display:none}.com-lattice.com-lattice-without-margin{margin-bottom:-40px}.com-lattice-line{font-size:0}.com-lattice-line>.com-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px;text-align:left;margin-bottom:20px;position:relative}.com-lattice-line.com-lattice-cols-1>.com-lattice-cell{width:100%}.com-lattice-line.com-lattice-cols-2>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (2 - 1) - 1px)/ 2)}.com-lattice-line.com-lattice-cols-2>.com-lattice-cell:nth-child(2n){margin-right:0}.com-lattice-line.com-lattice-cols-2>.com-lattice-cell:nth-child(2n):after{display:none}.com-lattice-line.com-lattice-cols-3>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (3 - 1) - 1px)/ 3)}.com-lattice-line.com-lattice-cols-3>.com-lattice-cell:nth-child(3n){margin-right:0}.com-lattice-line.com-lattice-cols-3>.com-lattice-cell:nth-child(3n):after{display:none}.com-lattice-line.com-lattice-cols-4>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (4 - 1) - 1px)/ 4)}.com-lattice-line.com-lattice-cols-4>.com-lattice-cell:nth-child(4n){margin-right:0}.com-lattice-line.com-lattice-cols-4>.com-lattice-cell:nth-child(4n):after{display:none}.com-lattice-line.com-lattice-cols-5>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (5 - 1) - 1px)/ 5)}.com-lattice-line.com-lattice-cols-5>.com-lattice-cell:nth-child(5n){margin-right:0}.com-lattice-line.com-lattice-cols-5>.com-lattice-cell:nth-child(5n):after{display:none}.com-lattice-line.com-lattice-cols-6>.com-lattice-cell{margin-right:80px;width:calc((100% - 80px * (6 - 1) - 1px)/ 6)}.com-lattice-line.com-lattice-cols-6>.com-lattice-cell:nth-child(6n){margin-right:0}.com-lattice-line.com-lattice-cols-6>.com-lattice-cell:nth-child(6n):after{display:none}.com-lattice-line.com-lattice-without-margin{margin-bottom:-20px}.com-lattice-line>.com-lattice-cell:after{content:'';position:absolute;right:-40px;top:50%;margin-top:-70px;width:1px;height:140px;background-color:#e5e5e5}.com-lattice-line.com-lattice-cols-1>.com-lattice-cell:after,.com-lattice-line>.com-lattice-cell:last-child:after{display:none}.com-lattice-card{font-size:0}.com-lattice-card>.com-lattice-cell{display:inline-block;vertical-align:top;width:100%;font-size:14px;text-align:left;margin-bottom:20px}.com-lattice-card.com-lattice-cols-1>.com-lattice-cell{width:100%}.com-lattice-card.com-lattice-cols-2>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (2 - 1) - 1px)/ 2)}.com-lattice-card.com-lattice-cols-2>.com-lattice-cell:nth-child(2n){margin-right:0}.com-lattice-card.com-lattice-cols-2>.com-lattice-cell:nth-child(2n):after{display:none}.com-lattice-card.com-lattice-cols-3>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (3 - 1) - 1px)/ 3)}.com-lattice-card.com-lattice-cols-3>.com-lattice-cell:nth-child(3n){margin-right:0}.com-lattice-card.com-lattice-cols-3>.com-lattice-cell:nth-child(3n):after{display:none}.com-lattice-card.com-lattice-cols-4>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (4 - 1) - 1px)/ 4)}.com-lattice-card.com-lattice-cols-4>.com-lattice-cell:nth-child(4n){margin-right:0}.com-lattice-card.com-lattice-cols-4>.com-lattice-cell:nth-child(4n):after{display:none}.com-lattice-card.com-lattice-cols-5>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (5 - 1) - 1px)/ 5)}.com-lattice-card.com-lattice-cols-5>.com-lattice-cell:nth-child(5n){margin-right:0}.com-lattice-card.com-lattice-cols-5>.com-lattice-cell:nth-child(5n):after{display:none}.com-lattice-card.com-lattice-cols-6>.com-lattice-cell{margin-right:20px;width:calc((100% - 20px * (6 - 1) - 1px)/ 6)}.com-lattice-card.com-lattice-cols-6>.com-lattice-cell:nth-child(6n){margin-right:0}.com-lattice-card.com-lattice-cols-6>.com-lattice-cell:nth-child(6n):after{display:none}.com-lattice-card.com-lattice-without-margin{margin-bottom:-20px}.com-lattice-center{text-align:center}.com-tag-card{position:relative;box-sizing:border-box;height:210px;padding:20px 20px 0;cursor:pointer;transition:box-shadow .3s linear;border:1px solid #E5E8ED}.com-tag-card:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-tag-card-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-tag-card-title{font-size:16px;line-height:32px;color:#333;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-tag-card-img{display:inline-block;vertical-align:middle;position:relative;top:-1px;margin-right:10px;width:32px;height:32px;background-repeat:no-repeat}.com-tag-card-desc{margin-top:10px;font-size:14px;line-height:20px;color:#666;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;max-height:40px}.com-tag-card-infos{margin-top:10px;text-align:center}.com-tag-card-btns{position:relative;z-index:2;text-align:center;text-align:center;margin-top:17px;pointer-events:none}.com-tag-card-btns .c-btn{pointer-events:auto;padding:0 10px;min-width:0;width:80px;height:28px;line-height:26px;font-size:12px}.com-3-ask-panel{position:relative;box-sizing:border-box;padding:30px 0;border-bottom:1px solid #E5E8ED;cursor:pointer}.com-3-ask-panel-inner{position:relative}.com-3-ask-panel:hover{background:linear-gradient(to right,rgba(243,245,249,0),rgba(243,245,249,100) 15%,rgba(243,245,249,100) 85%,rgba(243,245,249,0))}.com-3-ask-panel-link{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1}.com-3-ask-panel-title{font-size:20px;line-height:28px;color:#333;font-weight:700}.com-3-ask-panel-tags{position:relative;z-index:2;margin-top:5px;margin-bottom:0}.com-3-ask-panel.has-num .com-3-ask-panel-inner{padding-left:66px;min-height:46px}.com-3-ask-panel-answer{position:absolute;left:0;top:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 5px 0;width:46px;height:46px;border-radius:2px;background-color:#E1EEFA;line-height:1.2;color:#00a4ff;text-align:center;cursor:pointer}.com-3-ask-panel-answer .num{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px}.com-3-ask-panel-answer .name{font-size:12px}.com-3-ask-panel-answer.none-answer{background-color:#F3F4F5;color:#444}.com-3-ask-panel.has-num .com-3-ask-panel-inner{padding-right:100px}.com-3-ask-panel-btns{position:absolute;right:0;top:50%;z-index:2;margin-top:-16px}.com-3-ask-panel-btns .c-btn{padding:0 10px}.com-4-user-panel{position:relative;text-align:center;padding:20px 10px;transition:box-shadow .3s linear}.com-4-user-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-4-user-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-4-user-panel-avatar{display:block;margin:0 auto 12px;width:90px;height:90px}.com-4-user-panel-name{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;font-size:18px;line-height:26px;color:#000;font-weight:400}.com-4-user-panel-name.with-verify{padding-right:20px}.com-4-user-panel-name .com-verification{position:absolute;right:0;top:8px;z-index:2}.com-4-user-panel-name-inner{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.com-4-user-panel-identity{margin-top:6px;font-size:14px;line-height:20px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-4-user-panel-btns{position:relative;z-index:2;margin-top:20px;pointer-events:none}.com-4-user-panel-btn{padding:0 10px;min-width:0;width:80px;height:28px;line-height:26px;font-size:12px;pointer-events:auto}.com-2-column-panel{position:relative;text-align:center;padding:20px 10px;transition:box-shadow .3s linear}.com-2-column-panel:hover{box-shadow:0 0 6px rgba(207,216,221,.63),0 4px 6px rgba(207,216,221,.63)}.com-2-column-panel .panel-link{position:absolute;left:0;top:0;z-index:1;width:100%;height:100%}.com-2-column-panel-avatar{display:block;margin:0 auto 12px;width:90px;height:90px}.com-2-column-panel-avatar .com-2-avatar-inner{border-radius:50%}.com-2-column-panel-title{box-sizing:border-box;position:relative;display:inline-block;vertical-align:middle;max-width:100%;font-size:18px;line-height:26px;color:#000;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.com-2-column-panel-infos{margin-top:6px;font-size:0}.com-2-column-panel-info{display:inline-block;vertical-align:middle;font-size:14px;line-height:20px;color:#999}.com-2-column-panel-info:before{content:'';position:relative;top:-1px;display:inline-block;vertical-align:middle;margin:0 10px;width:2px;height:2px;background-color:#999;border-radius:50%}.com-2-column-panel-info:first-child:before{display:none}.com-2-column-panel-btns{position:relative;z-index:2;margin-top:20px;pointer-events:none}.com-2-column-panel-btn{padding:0 10px;min-width:0;width:80px;height:28px;line-height:26px;font-size:12px;pointer-events:auto}.com-arrow-link{color:#00a4ff}.com-arrow-link:after{content:'';display:inline-block;vertical-align:-2px;margin-left:5px;width:7px;height:13px;overflow:hidden;background-image:url(sprite/base-201911131148.svg);;-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;background-position:82.69999999999999% 82.05%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.com-arrow-link:hover:after{-webkit-transform:translateX(8px);transform:translateX(8px)}.com-arrow-link.gray{color:#666}.com-arrow-link.gray:hover{color:#00a4ff}.com-arrow-link.gray:after{background-image:url(sprite/base-201911131148.svg);;background-position:70.42% 66.18%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.com-arrow-link.gray:hover:after{background-image:url(sprite/base-201911131148.svg);;background-position:18.91% 5.8500000000000005%;background-size:7200% 3784.6153846153848%;;background-repeat:no-repeat}.com-adpanel{display:block;height:100px;font-size:0;background:url(components/Adpanel/css/img/adbg1@2x.jpg) center no-repeat;background-size:cover;text-align:center;color:#fff;-webkit-transition:-webkit-box-shadow .2s ease,-webkit-transform .2s ease;transition:-webkit-box-shadow .2s ease,-webkit-transform .2s ease;transition:box-shadow .2s ease,transform .2s ease;transition:box-shadow .2s ease,transform .2s ease,-webkit-box-shadow .2s ease,-webkit-transform .2s ease;-webkit-font-smoothing:antialiased}.com-adpanel:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px)}.com-adpanel:before{content:'';width:0;height:100%;display:inline-block;vertical-align:middle}.com-adpanel .text{display:inline-block;vertical-align:middle;max-width:99%;font-size:18px}.com-switch{position:relative;display:inline-block;vertical-align:middle;width:35px;height:20px}.com-switch-input{position:absolute;top:0;left:0;opacity:0}.com-switch-toggle{position:absolute;top:0;left:0;display:inline-block;width:100%;height:100%;border-radius:26px;overflow:hidden;background-color:#999;padding:0;transition-duration:.4s;transition-property:background-color;font-size:0;cursor:pointer}.com-switch-toggle:before{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:100%;background-color:#fff;pointer-events:none;transition-timing-function:cubic-bezier(.54,1.85,.5,1);transition-duration:.4s;transition-property:left;box-shadow:0 2px 4px rgba(0,0,0,.3)}.com-switch:hover .com-switch-toggle:before{background-color:#f2f2f2}.com-switch-toggle:after{position:absolute;top:4px;left:20px;display:none;content:"";width:12px;height:12px;background-image:url(sprite/base-201911131148.svg);;-moz-animation:spin .6s infinite linear;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear;background-position:8.74% 99.58%;background-size:4200% 4100%;;background-repeat:no-repeat}.com-switch-loading .com-switch-input:disabled+.com-switch-toggle:after{display:block}.com-switch-loading .com-switch-input:checked:disabled+.com-switch-toggle:after{left:4px}.com-switch-loading:hover .com-switch-toggle:before{background-color:#fff}.com-switch-checked .com-switch-toggle:before,.com-switch-input:checked+.com-switch-toggle:before{left:17px}.com-switch-checked .com-switch-toggle,.com-switch-input:checked+.com-switch-toggle{background-color:#00a4ff}.com-switch-disabled .com-switch-toggle,.com-switch-input:disabled+.com-switch-toggle{background-color:#e5e5e5;cursor:not-allowed}.com-switch-checked.com-switch-disabled .com-switch-toggle,.com-switch-input:checked:disabled+.com-switch-toggle{background-color:#79b0f9;cursor:not-allowed}.com-switch-disabled:hover .com-switch-toggle:before{background-color:#fff}.com-switch-wrap{display:inline-block;vertical-align:middle;font-size:0}.com-switch-text{margin-left:10px;font-size:12px;color:#000;line-height:20px;display:inline-block;vertical-align:middle}.com-3-section-mb{margin-bottom:50px}.com-3-section-hd{position:relative;margin-bottom:24px;font-size:0;line-height:36px}.com-3-section-title{position:relative;display:inline-block;vertical-align:middle;padding-left:38px;height:36px;font-size:24px;line-height:36px;font-weight:500;color:#000;-webkit-font-smoothing:antialiased}.com-3-section-title-icon{position:absolute;left:0;top:50%;margin-top:-14px;width:28px;height:28px}.com-3-section-title-icon.article{background-image:url(sprite/base-201911131148.svg);;background-position:63.239999999999995% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.column{background-image:url(sprite/base-201911131148.svg);;background-position:69.54% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.salon{background-image:url(sprite/base-201911131148.svg);;background-position:50.629999999999995% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.calendar{background-image:url(sprite/base-201911131148.svg);;background-position:0.21% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.specialist{background-image:url(sprite/base-201911131148.svg);;background-position:31.72% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.activities{background-image:url(sprite/base-201911131148.svg);;background-position:82.56% 0.22%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.special{background-image:url(sprite/base-201911131148.svg);;background-position:38.03% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.news{background-image:url(sprite/base-201911131148.svg);;background-position:19.12% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.team{background-image:url(sprite/base-201911131148.svg);;background-position:12.82% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.team-article{background-image:url(sprite/base-201911131148.svg);;background-position:41.81% 35.99%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.ask{background-image:url(sprite/base-201911131148.svg);;background-position:25.419999999999998% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.ask-team{background-image:url(sprite/base-201911131148.svg);;background-position:19.12% 78.23%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.dev{background-image:url(sprite/base-201911131148.svg);;background-position:31.72% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.contributor{background-image:url(sprite/base-201911131148.svg);;background-position:44.330000000000005% 71.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-title-icon.product{background-image:url(sprite/base-201911131148.svg);;background-position:27.939999999999998% 21.77%;background-size:1800% 1757.1428571428573%;;background-repeat:no-repeat}.com-3-section-hd-extra{position:absolute;right:0;top:0}.com-3-section-hd-extra .com-arrow-link{font-size:14px;line-height:36px}.rno-grid-layout{overflow:hidden}.rno-grid-row{display:block;margin-right:0;margin-left:0;font-size:0;-webkit-box-sizing:border-box;box-sizing:border-box}.rno-grid-row-split-line .rno-grid-col{position:relative}.rno-grid-row-split-line .rno-grid-col::before{content:"";position:absolute;top:0;bottom:0;left:0;display:block;width:1px;background-color:#e8e8e8}.rno-grid-row-mlr0{margin-left:0 !important;margin-right:0 !important}.rno-grid-col{display:inline-block;vertical-align:top;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:14px}[class*=rno-grid-col-pull-],[class*=rno-grid-col-push-]{position:relative}.rno-grid-col-0{display:none}.rno-grid-col-offset-0{margin-left:0}.rno-grid-col-pull-0{right:auto}.rno-grid-col-push-0{left:auto}.rno-grid-col-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.rno-grid-col-1{display:inline-block;width:4.1666666667%}.rno-grid-col-offset-1{margin-left:4.1666666667%}.rno-grid-col-pull-1{right:4.1666666667%}.rno-grid-col-push-1{left:4.1666666667%}.rno-grid-col-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.rno-grid-col-2{display:inline-block;width:8.3333333333%}.rno-grid-col-offset-2{margin-left:8.3333333333%}.rno-grid-col-pull-2{right:8.3333333333%}.rno-grid-col-push-2{left:8.3333333333%}.rno-grid-col-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.rno-grid-col-3{display:inline-block;width:12.5%}.rno-grid-col-offset-3{margin-left:12.5%}.rno-grid-col-pull-3{right:12.5%}.rno-grid-col-push-3{left:12.5%}.rno-grid-col-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.rno-grid-col-4{display:inline-block;width:16.6666666667%}.rno-grid-col-offset-4{margin-left:16.6666666667%}.rno-grid-col-pull-4{right:16.6666666667%}.rno-grid-col-push-4{left:16.6666666667%}.rno-grid-col-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.rno-grid-col-5{display:inline-block;width:20%}.rno-grid-col-offset-5{margin-left:20%}.rno-grid-col-pull-5{right:20%}.rno-grid-col-push-5{left:20%}.rno-grid-col-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.rno-grid-col-6{display:inline-block;width:25%}.rno-grid-col-offset-6{margin-left:25%}.rno-grid-col-pull-6{right:25%}.rno-grid-col-push-6{left:25%}.rno-grid-col-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.rno-grid-col-7{display:inline-block;width:29.1666666667%}.rno-grid-col-offset-7{margin-left:29.1666666667%}.rno-grid-col-pull-7{right:29.1666666667%}.rno-grid-col-push-7{left:29.1666666667%}.rno-grid-col-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.rno-grid-col-8{display:inline-block;width:33.3333333333%}.rno-grid-col-offset-8{margin-left:33.3333333333%}.rno-grid-col-pull-8{right:33.3333333333%}.rno-grid-col-push-8{left:33.3333333333%}.rno-grid-col-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.rno-grid-col-9{display:inline-block;width:37.5%}.rno-grid-col-offset-9{margin-left:37.5%}.rno-grid-col-pull-9{right:37.5%}.rno-grid-col-push-9{left:37.5%}.rno-grid-col-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.rno-grid-col-10{display:inline-block;width:41.6666666667%}.rno-grid-col-offset-10{margin-left:41.6666666667%}.rno-grid-col-pull-10{right:41.6666666667%}.rno-grid-col-push-10{left:41.6666666667%}.rno-grid-col-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.rno-grid-col-11{display:inline-block;width:45.8333333333%}.rno-grid-col-offset-11{margin-left:45.8333333333%}.rno-grid-col-pull-11{right:45.8333333333%}.rno-grid-col-push-11{left:45.8333333333%}.rno-grid-col-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.rno-grid-col-12{display:inline-block;width:50%}.rno-grid-col-offset-12{margin-left:50%}.rno-grid-col-pull-12{right:50%}.rno-grid-col-push-12{left:50%}.rno-grid-col-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.rno-grid-col-13{display:inline-block;width:54.1666666667%}.rno-grid-col-offset-13{margin-left:54.1666666667%}.rno-grid-col-pull-13{right:54.1666666667%}.rno-grid-col-push-13{left:54.1666666667%}.rno-grid-col-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.rno-grid-col-14{display:inline-block;width:58.3333333333%}.rno-grid-col-offset-14{margin-left:58.3333333333%}.rno-grid-col-pull-14{right:58.3333333333%}.rno-grid-col-push-14{left:58.3333333333%}.rno-grid-col-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.rno-grid-col-15{display:inline-block;width:62.5%}.rno-grid-col-offset-15{margin-left:62.5%}.rno-grid-col-pull-15{right:62.5%}.rno-grid-col-push-15{left:62.5%}.rno-grid-col-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.rno-grid-col-16{display:inline-block;width:66.6666666667%}.rno-grid-col-offset-16{margin-left:66.6666666667%}.rno-grid-col-pull-16{right:66.6666666667%}.rno-grid-col-push-16{left:66.6666666667%}.rno-grid-col-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.rno-grid-col-17{display:inline-block;width:70.8333333333%}.rno-grid-col-offset-17{margin-left:70.8333333333%}.rno-grid-col-pull-17{right:70.8333333333%}.rno-grid-col-push-17{left:70.8333333333%}.rno-grid-col-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.rno-grid-col-18{display:inline-block;width:75%}.rno-grid-col-offset-18{margin-left:75%}.rno-grid-col-pull-18{right:75%}.rno-grid-col-push-18{left:75%}.rno-grid-col-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.rno-grid-col-19{display:inline-block;width:79.1666666667%}.rno-grid-col-offset-19{margin-left:79.1666666667%}.rno-grid-col-pull-19{right:79.1666666667%}.rno-grid-col-push-19{left:79.1666666667%}.rno-grid-col-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.rno-grid-col-20{display:inline-block;width:83.3333333333%}.rno-grid-col-offset-20{margin-left:83.3333333333%}.rno-grid-col-pull-20{right:83.3333333333%}.rno-grid-col-push-20{left:83.3333333333%}.rno-grid-col-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.rno-grid-col-21{display:inline-block;width:87.5%}.rno-grid-col-offset-21{margin-left:87.5%}.rno-grid-col-pull-21{right:87.5%}.rno-grid-col-push-21{left:87.5%}.rno-grid-col-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.rno-grid-col-22{display:inline-block;width:91.6666666667%}.rno-grid-col-offset-22{margin-left:91.6666666667%}.rno-grid-col-pull-22{right:91.6666666667%}.rno-grid-col-push-22{left:91.6666666667%}.rno-grid-col-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.rno-grid-col-23{display:inline-block;width:95.8333333333%}.rno-grid-col-offset-23{margin-left:95.8333333333%}.rno-grid-col-pull-23{right:95.8333333333%}.rno-grid-col-push-23{left:95.8333333333%}.rno-grid-col-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.rno-grid-col-24{display:inline-block;width:100%}.rno-grid-col-offset-24{margin-left:100%}.rno-grid-col-pull-24{right:100%}.rno-grid-col-push-24{left:100%}.rno-grid-col-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.com-modal-mp-edit{padding-top:65px}.com-modal-mp-edit .com-form-title{font-size:14px;width:120px}.com-modal-salon-apply{margin-bottom:20px}.com-modal-salon-apply .apply-checkbox-list{margin-top:20px}.com-modal-salon-apply .com-check-item{margin-right:20px}@media screen and (max-width:1200px){.com-body-main,.com-body.max-width,.com-inner{padding-left:20px;padding-right:20px}}@media screen and (max-width:1200px){.com-section .section-inner{padding-left:20px;padding-right:20px}}@media screen and (max-width:768px){.s-4{width:16.6667%}}@media (max-width:600px){.c-g-12{width:50%}.xs-4{width:16.6667%}}@media (max-width:768px){.com-wechat-panel .qr-img{display:block;overflow:hidden;width:auto}.com-wechat-panel .qr-img>img{display:none}.com-wechat-panel .qr-img-full{display:block}.com-wechat-panel .qr-img-full img{display:block;width:414px}.com-wechat-panel .qr-cnt{display:none}}@media screen and (max-width:1200px){.com-article-media-source .column-name{max-width:8em}}@media screen and (max-width:1200px){.c-media-skin-lab{padding:20px}.c-media-skin-lab .c-media-extra-infos{margin-bottom:-20px}.c-media-skin-lab .c-media-extra-info{margin-left:10px;font-size:12px}.c-media-extra-info .icon{margin-right:5px}.c-media-skin-lab .c-media-extra-info:first-child{margin-left:0}}@media screen and (max-width:768px){.nav-dropdown-btn-txt{padding:0}}@media screen and (max-width:1280px){.com-nav-search-wrap.align-center .com-search-bar{max-width:350px;transition:all .4s}}@media screen and (max-width:1000px){.com-2-nav-search-wrap .com-search-bar{max-width:450px;transition:all .4s}}@media screen and (max-width:1200px){.com-3-nav-search-wrap{width:460px}}@media screen and (min-width:1001px){.com-search-dropdown.col2{font-size:0}.com-search-dropdown.col2 .com-search-dropdown-bd{padding-left:0;padding-right:0}.com-search-dropdown.col2 .com-search-dropdown-group{display:inline-block;vertical-align:top;margin-bottom:0;padding-bottom:0;border-bottom:none;width:50%}.com-search-dropdown.col2 .com-search-dropdown-group dt{padding-left:20px;padding-right:20px}.com-search-dropdown.col2 .com-search-dropdown-history .link-clear{right:15px}.com-search-dropdown.col2 .com-search-dropdown-group .link,.com-search-dropdown.col2 .com-search-dropdown-keywords a{margin:0}}@media screen and (max-width:1200px){.qc-footer-blogroll .blogroll-inner,.qc-footer-service .fs-ct{text-align:left}.c-footer-inner{margin-left:20px;margin-right:20px}}@media screen and (max-width:768px){.com-simple-footer .copyright{margin-left:20px;margin-right:20px;line-height:1.8;font-size:12px}.com-simple-footer .copyright span{display:inline-block}.c-tab-cross .c-tab-ctrl{display:block}}@media screen and (max-width:1200px){.c-tab-cross .c-tab-scroll{padding-left:10px;padding-right:10px}}@media screen\0{.com-check-item .c-checkbox,.com-check-item .c-radio{position:absolute;left:0;top:6px}.c-footer-blogroll-links .icon-tc{background-size:auto auto;background-position:0px 0px;background-image:url(sprite/base-media16-201911131148.png)}.c-logo-icon{background-size:102.17391304347827% 108%;;background-position:50% 50%;background-image:url(sprite/base-media16-201911131148.svg);;background-repeat:no-repeat}}@media screen and (min-width:601px){.com-header .header-main-title{max-width:12em}}@media screen and (max-width:320px){.com-header .header-main-title{max-width:5em}}@media screen and (max-width:768px){.com-2-m-footer .footer-copyright-text{display:block}.com-2-m-footer .footer-copyright-text+.footer-copyright-text{margin:0}}@media screen and (max-width:1000px){.com-responsive .c-nav .com-search-bar{display:none}.com-responsive .c-nav,.com-responsive .com-2-nav.fixed .c-nav-bottom,.com-responsive .qc-footer{min-width:320px}.com-responsive .com-2-nav .com-search-bar{display:block}}@media screen and (min-width:769px){.com-m-side,.com-m-side-mask{display:none}.com-responsive .c-nav-mod-pc,.com-responsive .c-nav-wrap{display:block}}@media screen and (max-width:768px){.com-responsive .c-nav,.com-responsive .com-2-footer,.com-responsive .qc-footer{display:none}.com-responsive .com-2-m-footer,.com-responsive .com-header,.com-responsive .com-m-footer{display:block}::-webkit-scrollbar{width:4px;height:0}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{height:4px;background-color:#bfbfbf;border-radius:4px}::-webkit-scrollbar-button{background-color:transparent}::-webkit-scrollbar-corner{background-color:transparent}.com-mobile-layout{position:absolute;left:0;top:0;min-width:320px;width:100%;height:100%;background-color:#f2f2f2;overflow:hidden;z-index:1}.com-mobile-body{position:absolute;left:0;right:0;top:56px;bottom:0;min-width:320px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.com-mobile-body.without-ft{bottom:0}.com-mobile-body.bg-white{background-color:#fff}.miniprogram .com-header{display:none}.miniprogram .com-mobile-body{top:0}}@media (max-width:1440px){.com-widget-global{right:10px}}@media (max-width:768px){.com-widget-global{display:none !important}}@media screen and (max-width:1200px){.com-2-footer-inner{padding:0 20px}}@media screen and (max-width:1440px){.com-2-footer.large-width .com-2-footer-inner{max-width:1180px}}@media screen and (max-width:768px){.com-2-footer-recommend{display:none}}@media (max-width:1200px){.com-2-simple-footer.layout .com-2-simple-footer-inner{padding-left:20px;padding-right:20px}}@media (min-width:769px){.com-none-panel-link:hover:after{-webkit-transform:translateX(8px);transform:translateX(8px)}}@media (min-width:601px){.com-none-panel.horizontal{margin:0 auto;max-width:770px}.com-none-panel.horizontal .com-none-panel-object{display:table-cell;vertical-align:middle;padding-right:60px;width:220px}.com-none-panel.horizontal .com-none-panel-main{display:table-cell;vertical-align:middle;text-align:left}.com-none-panel.horizontal .com-none-panel-btns{margin-top:20px;margin-left:-5px}}@media (max-width:768px){.com-none-panel{padding:50px 15px}.com-none-panel-icon.error{margin-bottom:20px;width:156px;height:99px}.com-none-panel-icon.column,.com-none-panel-icon.network,.com-none-panel-icon.search{width:180px;height:180px}.com-none-panel-title{margin-bottom:10px;font-size:18px;line-height:26px}.com-none-panel-btns{margin:30px -5px 0}.com-none-panel-btns .c-btn{height:40px;line-height:38px;font-size:16px}.com-none-panel-link:active:after{-webkit-transform:translateX(8px);transform:translateX(8px)}.com-none-panel-btns .c-btn-hole,.com-none-panel-btns .c-btn-hole:hover{color:#00a4ff;border-color:#00a4ff;background-color:transparent}.com-none-panel.page{padding:50px 15px;background-color:#fff}.com-none-panel.page+.com-none-panel.page{margin-top:10px;border-top:none}.com-none-panel-icon[class*=error-],.com-none-panel-icon[class^=error-]{width:300px;height:130px}}@media (max-width:600px){.com-none-panel-btns{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.com-none-panel-btns .c-btn{-webkit-box-flex:1;flex:1;min-width:0}.com-none-panel-link{-webkit-box-flex:1;flex:1}}@media (max-width:768px){.com-2-wechat-panel{background-color:transparent}.com-2-wechat-panel .qr-img{display:block;overflow:hidden;width:auto;height:auto;border:none;padding:0}.com-2-wechat-panel .qr-img>img{display:none}.com-2-wechat-panel .qr-img-full{display:block}.com-2-wechat-panel .qr-img-full img{display:block;width:414px}.com-2-wechat-panel .qr-cnt{display:none}}@media screen and (max-width:768px){.c-hero-bar.air .c-hero-bar-inner{padding:40px 15px;height:auto}.c-hero-bar.air .c-hero-bar-tit{font-size:24px;line-height:36px}.c-hero-bar.air .c-hero-bar-desc{font-size:14px;line-height:24px}}@media screen and (min-width:1367px) and (min-height:769px){.c-hero-section.air{height:460px}.c-hero-section.air .c-hero-section-inner{padding-top:135px}.c-hero-section.air .c-hero-section-tit{font-size:46px;line-height:65px}.c-hero-section.air .c-hero-section-des{margin-top:16px}}@media screen and (max-width:768px){.com-hero-bar.responsive .com-hero-bar-ct{padding:20px;height:160px}.com-hero-bar.responsive .com-hero-bar-tit{font-size:24px}.com-hero-bar.responsive .com-hero-bar-desc{font-size:14px}.com-hero-share{display:none}}@media screen and (max-width:1280px){.com-ani-hero-inner{padding-left:9%}}@media screen and (max-width:1200px){.com-2-column-panel-info{font-size:12px}.com-2-column-panel-info:before{margin:0 5px}} +#MAXIM{content:"weu20191113114906"} \ No newline at end of file diff --git a/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/base.18719486f5.js.下载 b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/base.18719486f5.js.下载 new file mode 100644 index 0000000..b1a3ff4 --- /dev/null +++ b/直播工具包/FFmpeg时间戳详解 - 云+社区 - 腾讯云_files/base.18719486f5.js.下载 @@ -0,0 +1 @@ +!function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=n,o.c=r,o.i=function(e){return e},o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="//imgcache.qq.com/qcloud/developer/scripts/",o(o.s=0)}({"+2+s":function(e,t,n){"use strict";var r=n("Ds5P"),o=n("49qz")(!0);r(r.P,"String",{at:function(e){return o(this,e)}})},"+CM9":function(e,t,n){"use strict";var r=n("Ds5P"),o=n("ot5s")(!1),i=[].indexOf,a=!!i&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(a||!n("NNrz")(i)),"Array",{indexOf:function(e){return a?i.apply(this,arguments)||0:o(this,e,arguments[1])}})},"+Mt+":function(e,t,n){"use strict";var r=n("Ds5P"),o=n("7gX0"),i=n("OzIq"),a=n("7O1s"),u=n("nphH");r(r.P+r.R,"Promise",{finally:function(t){var n=a(this,o.Promise||i.Promise),e="function"==typeof t;return this.then(e?function(e){return u(n,t()).then(function(){return e})}:t,e?function(e){return u(n,t()).then(function(){throw e})}:t)}})},"+vXH":function(e,t,n){n("77Ug")("Float64",8,function(r){return function(e,t,n){return r(this,e,t,n)}})},"+yjc":function(e,t,n){var r=n("UKM+");n("3i66")("isSealed",function(t){return function(e){return!r(e)||!!t&&t(e)}})},"/OLF":function(e,t,n){"use strict";var o=n("cxPT"),i=n("GiK3"),r=n("czSA"),s=n("BEQ0"),l=n("e6+Q"),M=n("9U7y"),u=n("sgb3"),L=n("2B9T"),d=n("TJez");function U(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r

FFmpeg时间戳详解

1. I帧/P帧/B帧

I帧:I帧(Intra-coded picture, 帧内编码帧,常称为关键帧)包含一幅完整的图像信息,属于帧内编码图像,不含运动矢量,在解码时不需要参考其他帧图像。因此在I帧图像处可以切换频道,而不会导致图像丢失或无法解码。I帧图像用于阻止误差的累积和扩散。在闭合式GOP中,每个GOP的第一个帧一定是I帧,且当前GOP的数据不会参考前后GOP的数据。

P帧:P帧(Predictive-coded picture, 预测编码图像帧)是帧间编码帧,利用之前的I帧或P帧进行预测编码。

B帧:B帧(Bi-directionally predicted picture, 双向预测编码图像帧)是帧间编码帧,利用之前和(或)之后的I帧或P帧进行双向预测编码。B帧不可以作为参考帧。 + B帧具有更高的压缩率,但需要更多的缓冲时间以及更高的CPU占用率,因此B帧适合本地存储以及视频点播,而不适用对实时性要求较高的直播系统。

2. DTS和PTS

DTS(Decoding Time Stamp, 解码时间戳),表示压缩帧的解码时间。 + PTS(Presentation Time Stamp, 显示时间戳),表示将压缩帧解码后得到的原始帧的显示时间。 + 音频中DTS和PTS是相同的。视频中由于B帧需要双向预测,B帧依赖于其前和其后的帧,因此含B帧的视频解码顺序与显示顺序不同,即DTS与PTS不同。当然,不含B帧的视频,其DTS和PTS是相同的。下图以一个开放式GOP示意图为例,说明视频流的解码顺序和显示顺序 +

+ 采集顺序指图像传感器采集原始信号得到图像帧的顺序。 + 编码顺序指编码器编码后图像帧的顺序。存储到磁盘的本地视频文件中图像帧的顺序与编码顺序相同。 + 传输顺序指编码后的流在网络中传输过程中图像帧的顺序。 + 解码顺序指解码器解码图像帧的顺序。 + 显示顺序指图像帧在显示器上显示的顺序。 + 采集顺序与显示顺序相同。编码顺序、传输顺序和解码顺序相同。 + 以图中“B[1]”帧为例进行说明,“B[1]”帧解码时需要参考“I[0]”帧和“P[3]”帧,因此“P[3]”帧必须比“B[1]”帧先解码。这就导致了解码顺序和显示顺序的不一致,后显示的帧需要先解码。

3. FFmpeg中的时间基与时间戳

3.1 时间基与时间戳的概念

在FFmpeg中,时间基(time_base)是时间戳(timestamp)的单位,时间戳值乘以时间基,可以得到实际的时刻值(以秒等为单位)。例如,如果一个视频帧的dts是40,pts是160,其time_base是1/1000,那么可以计算出此视频帧的解码时刻是40毫秒(40/1000),显示时刻是160毫秒(160/1000)。FFmpeg中时间戳(pts/dts)的类型是int64_t类型,把一个time_base看作一个时钟脉冲,则可把dts/pts看作时钟脉冲的计数。

3.2 三种时间基tbr、tbn和tbc

不同的封装格式具有不同的时间基。在FFmpeg处理音视频过程中的不同阶段,也会采用不同的时间基。 + FFmepg中有三种时间基,命令行中tbr、tbn和tbc的打印值就是这三种时间基的倒数: + tbn:对应容器中的时间基。值是AVStream.time_base的倒数 + tbc:对应编解码器中的时间基。值是AVCodecContext.time_base的倒数 + tbr:从视频流中猜算得到,可能是帧率或场率(帧率的2倍)

测试文件下载:tnmil3.flv + 使用ffprobe探测媒体文件格式,如下:

think@opensuse> ffprobe tnmil3.flv 
+ffprobe version 4.1 Copyright (c) 2007-2018 the FFmpeg developers
+Input #0, flv, from 'tnmil3.flv':
+  Metadata:
+    encoder         : Lavf58.20.100
+  Duration: 00:00:03.60, start: 0.017000, bitrate: 513 kb/s
+    Stream #0:0: Video: h264 (High), yuv420p(progressive), 784x480, 25 fps, 25 tbr, 1k tbn, 50 tbc
+    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s

关于tbr、tbn和tbc的说明,原文如下,来自FFmpeg邮件列表:

There are three different time bases for time stamps in FFmpeg. The + values printed are actually reciprocals of these, i.e. 1/tbr, 1/tbn and + 1/tbc. + tbn is the time base in AVStream that has come from the container, I + think. It is used for all AVStream time stamps. + tbc is the time base in AVCodecContext for the codec used for a + particular stream. It is used for all AVCodecContext and related time + stamps. + tbr is guessed from the video stream and is the value users want to see + when they look for the video frame rate, except sometimes it is twice + what one would expect because of field rate versus frame rate. +

3.3 内部时间基AV_TIME_BASE

除以上三种时间基外,FFmpeg还有一个内部时间基AV_TIME_BASE(以及分数形式的AV_TIME_BASE_Q)

// Internal time base represented as integer
+#define AV_TIME_BASE            1000000
+
+// Internal time base represented as fractional value
+#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}

AV_TIME_BASE及AV_TIME_BASE_Q用于FFmpeg内部函数处理,使用此时间基计算得到时间值表示的是微秒。

3.4 时间值形式转换

av_q2d()将时间从AVRational形式转换为double形式。AVRational是分数类型,double是双精度浮点数类型,转换的结果单位是秒。转换前后的值基于同一时间基,仅仅是数值的表现形式不同而已。

qv_q2d()实现如下:

/**
+ * Convert an AVRational to a `double`.
+ * @param a AVRational to convert
+ * @return `a` in floating-point form
+ * @see av_d2q()
+ */
+static inline double av_q2d(AVRational a){
+    return a.num / (double) a.den;
+}

qv_q2d()使用方法如下:

时刻值:timestamp(单位秒) = pts × av_q2d(stream->time_base);
+时长值:duration(单位秒) = stream->duration × av_q2d(stream->time_base);

3.5 时间基转换函数

av_rescale_q()用于不同时间基的转换,用于将时间值从一种时间基转换为另一种时间基。

/**
+ * Rescale a 64-bit integer by 2 rational numbers.
+ *
+ * The operation is mathematically equivalent to `a × bq / cq`.
+ *
+ * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF.
+ *
+ * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd()
+ */
+int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;

av_packet_rescale_ts()用于将AVPacket中各种时间值从一种时间基转换为另一种时间基。

/**
+ * Convert valid timing fields (timestamps / durations) in a packet from one
+ * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
+ * ignored.
+ *
+ * @param pkt packet on which the conversion will be performed
+ * @param tb_src source timebase, in which the timing fields in pkt are
+ *               expressed
+ * @param tb_dst destination timebase, to which the timing fields will be
+ *               converted
+ */
+void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

3.6 转封装过程中的时间基转换

容器中的时间基(AVStream.time_base,3.2节中的tbn)定义如下:

typedef struct AVStream {
+    ......
+    /**
+     * This is the fundamental unit of time (in seconds) in terms
+     * of which frame timestamps are represented.
+     *
+     * decoding: set by libavformat
+     * encoding: May be set by the caller before avformat_write_header() to
+     *           provide a hint to the muxer about the desired timebase. In
+     *           avformat_write_header(), the muxer will overwrite this field
+     *           with the timebase that will actually be used for the timestamps
+     *           written into the file (which may or may not be related to the
+     *           user-provided one, depending on the format).
+     */
+    AVRational time_base;
+    ......
+}

AVStream.time_base是AVPacket中pts和dts的时间单位,输入流与输出流中time_base按如下方式确定: + 对于输入流:打开输入文件后,调用avformat_find_stream_info()可获取到每个流中的time_base + 对于输出流:打开输出文件后,调用avformat_write_header()可根据输出文件封装格式确定每个流的time_base并写入输出文件中

不同封装格式具有不同的时间基,在转封装(将一种封装格式转换为另一种封装格式)过程中,时间基转换相关代码如下:

av_read_frame(ifmt_ctx, &pkt);
+pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);

下面的代码具有和上面代码相同的效果:

// 从输入文件中读取packet
+av_read_frame(ifmt_ctx, &pkt);
+// 将packet中的各时间值从输入流封装格式时间基转换到输出流封装格式时间基
+av_packet_rescale_ts(&pkt, in_stream->time_base, out_stream->time_base);

这里流里的时间基in_stream->time_baseout_stream->time_base,是容器中的时间基,就是3.2节中的tbn。

例如,flv封装格式的time_base为{1,1000},ts封装格式的time_base为{1,90000} + 我们编写程序将flv封装格式转换为ts封装格式,抓取原文件(flv)的前四帧显示时间戳:

think@opensuse> ffprobe -show_frames -select_streams v tnmil3.flv | grep pkt_pts  
+ffprobe version 4.1 Copyright (c) 2007-2018 the FFmpeg developers
+Input #0, flv, from 'tnmil3.flv':
+  Metadata:
+    encoder         : Lavf58.20.100
+  Duration: 00:00:03.60, start: 0.017000, bitrate: 513 kb/s
+    Stream #0:0: Video: h264 (High), yuv420p(progressive), 784x480, 25 fps, 25 tbr, 1k tbn, 50 tbc
+    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
+pkt_pts=80
+pkt_pts_time=0.080000
+pkt_pts=120
+pkt_pts_time=0.120000
+pkt_pts=160
+pkt_pts_time=0.160000
+pkt_pts=200
+pkt_pts_time=0.200000

再抓取转换的文件(ts)的前四帧显示时间戳:

think@opensuse> ffprobe -show_frames -select_streams v tnmil3.ts | grep pkt_pts  
+ffprobe version 4.1 Copyright (c) 2007-2018 the FFmpeg developers
+Input #0, mpegts, from 'tnmil3.ts':
+  Duration: 00:00:03.58, start: 0.017000, bitrate: 619 kb/s
+  Program 1 
+    Metadata:
+      service_name    : Service01
+      service_provider: FFmpeg
+    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 784x480, 25 fps, 25 tbr, 90k tbn, 50 tbc
+    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 127 kb/s
+pkt_pts=7200
+pkt_pts_time=0.080000
+pkt_pts=10800
+pkt_pts_time=0.120000
+pkt_pts=14400
+pkt_pts_time=0.160000
+pkt_pts=18000
+pkt_pts_time=0.200000

可以发现,对于同一个视频帧,它们时间基(tbn)不同因此时间戳(pkt_pts)也不同,但是计算出来的时刻值(pkt_pts_time)是相同的。 + 看第一帧的时间戳,计算关系:80×{1,1000} == 7200×{1,90000} == 0.080000

3.7 转码过程中的时间基转换

编解码器中的时间基(AVCodecContext.time_base,3.2节中的tbc)定义如下:

typedef struct AVCodecContext {
+    ......
+    
+    /**
+     * This is the fundamental unit of time (in seconds) in terms
+     * of which frame timestamps are represented. For fixed-fps content,
+     * timebase should be 1/framerate and timestamp increments should be
+     * identically 1.
+     * This often, but not always is the inverse of the frame rate or field rate
+     * for video. 1/time_base is not the average frame rate if the frame rate is not
+     * constant.
+     *
+     * Like containers, elementary streams also can store timestamps, 1/time_base
+     * is the unit in which these timestamps are specified.
+     * As example of such codec time base see ISO/IEC 14496-2:2001(E)
+     * vop_time_increment_resolution and fixed_vop_rate
+     * (fixed_vop_rate == 0 implies that it is different from the framerate)
+     *
+     * - encoding: MUST be set by user.
+     * - decoding: the use of this field for decoding is deprecated.
+     *             Use framerate instead.
+     */
+    AVRational time_base;
+    
+    ......
+}

上述注释指出,AVCodecContext.time_base是帧率(视频帧)的倒数,每帧时间戳递增1,那么tbc就等于帧率。编码过程中,应由用户设置好此参数。解码过程中,此参数已过时,建议直接使用帧率倒数用作时间基。 + 这里有一个问题:按照此处注释说明,帧率为25的视频流,tbc理应为25,但实际值却为50,不知作何解释?是否tbc已经过时,不具参考意义?

根据注释中的建议,实际使用时,在视频解码过程中,我们不使用AVCodecContext.time_base,而用帧率倒数作时间基,在视频编码过程中,我们将AVCodecContext.time_base设置为帧率的倒数。

3.7.1 视频流

视频按帧播放,所以解码后的原始视频帧时间基为 1/framerate。 + 视频解码过程中的时间基转换处理:

AVFormatContext *ifmt_ctx;
+AVStream *in_stream;
+AVCodecContext *dec_ctx;
+AVPacket packet;
+AVFrame *frame;
+
+// 从输入文件中读取编码帧
+av_read_frame(ifmt_ctx, &packet);
+
+// 时间基转换
+int raw_video_time_base = av_inv_q(dec_ctx->framerate);
+av_packet_rescale_ts(packet, in_stream->time_base, raw_video_time_base);
+
+// 解码
+avcodec_send_packet(dec_ctx, packet)
+avcodec_receive_frame(dec_ctx, frame);

视频编码过程中的时间基转换处理:

AVFormatContext *ofmt_ctx;
+AVStream *out_stream;
+AVCodecContext *dec_ctx;
+AVCodecContext *enc_ctx;
+AVPacket packet;
+AVFrame *frame;
+
+// 编码
+avcodec_send_frame(enc_ctx, frame);
+avcodec_receive_packet(enc_ctx, packet);
+
+// 时间基转换
+packet.stream_index = out_stream_idx;
+enc_ctx->time_base = av_inv_q(dec_ctx->framerate);
+av_packet_rescale_ts(&opacket, enc_ctx->time_base, out_stream->time_base);
+
+// 将编码帧写入输出媒体文件
+av_interleaved_write_frame(o_fmt_ctx, &packet);

3.7.2 音频流

音频按采样点播放,所以解码后的原始音频帧时间基为 1/sample_rate + 音频解码过程中的时间基转换处理:

AVFormatContext *ifmt_ctx;
+AVStream *in_stream;
+AVCodecContext *dec_ctx;
+AVPacket packet;
+AVFrame *frame;
+
+// 从输入文件中读取编码帧
+av_read_frame(ifmt_ctx, &packet);
+
+// 时间基转换
+int raw_audio_time_base = av_inv_q(dec_ctx->sample_rate);
+av_packet_rescale_ts(packet, in_stream->time_base, raw_audio_time_base);
+
+// 解码
+avcodec_send_packet(dec_ctx, packet)
+avcodec_receive_frame(dec_ctx, frame);

音频编码过程中的时间基转换处理:

AVFormatContext *ofmt_ctx;
+AVStream *out_stream;
+AVCodecContext *dec_ctx;
+AVCodecContext *enc_ctx;
+AVPacket packet;
+AVFrame *frame;
+
+// 编码
+avcodec_send_frame(enc_ctx, frame);
+avcodec_receive_packet(enc_ctx, packet);
+
+// 时间基转换
+packet.stream_index = out_stream_idx;
+enc_ctx->time_base = av_inv_q(dec_ctx->sample_rate);
+av_packet_rescale_ts(&opacket, enc_ctx->time_base, out_stream->time_base);
+
+// 将编码帧写入输出媒体文件
+av_interleaved_write_frame(o_fmt_ctx, &packet);

4. 参考资料

[1]. What does the output of ffmpeg mean? tbr tbn tbc etc? + [2]. 视频编解码基础概念, https://www.cnblogs.com/leisure_chn/p/10285829.html + [3]. 对ffmpeg的时间戳的理解笔记, https://blog.csdn.net/topsluo/article/details/76239136 + [4]. ffmpeg中的时间戳与时间基, http://www.imooc.com/article/91381 + [5]. ffmpeg编解码中涉及到的pts详解, http://www.52ffmpeg.com/article/353.html + [6]. 音视频录入的pts和dts问题, https://blog.csdn.net/zhouyongku/article/details/38510747

5. 修改记录

2019-03-16 V1.0 初稿 + 2019-03-23 V1.1 增加3.7节

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1ea9bosv4dy7r

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

扫码关注云+社区

领取腾讯云代金券

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券