diff --git a/package/ctcgfw/luci-app-openclash/Makefile b/package/ctcgfw/luci-app-openclash/Makefile index 99f26fa2c1..630e9c9338 100644 --- a/package/ctcgfw/luci-app-openclash/Makefile +++ b/package/ctcgfw/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.41.14 +PKG_VERSION:=0.42.01 PKG_RELEASE:=beta PKG_MAINTAINER:=vernesong diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index 57b333c31f..da17f7f20e 100644 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -144,10 +144,21 @@ o:value("debug", translate("Debug Mode")) o:value("silent", translate("Silent Mode")) o.default = "silent" +o = s:taboption("settings", Value, "log_size", translate("Log Size (KB)")) +o.description = translate("Set Log File Size (KB)") +o.default=1024 + o = s:taboption("settings", Flag, "intranet_allowed", translate("Only intranet allowed")) o.description = translate("When Enabled, The Control Panel And The Connection Broker Port Will Not Be Accessible From The Public Network") o.default=0 +o = s:taboption("settings", Value, "dns_port") +o.title = translate("DNS Port") +o.default = 7874 +o.datatype = "port" +o.rmempty = false +o.description = translate("Please Make Sure Ports Available") + o = s:taboption("settings", Value, "proxy_port") o.title = translate("Redir Port") o.default = 7892 diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm index c6cbe2ef5b..e7bf865f8e 100644 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm +++ b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm @@ -3,14 +3,17 @@
- - - +
+ + - + + + +
@@ -30,6 +33,22 @@ function start_refresh() { return } +function createAndDownloadFile(fileName, content) { + var aTag = document.createElement('a'); + var blob = new Blob([content]); + aTag.download = fileName; + aTag.href = URL.createObjectURL(blob); + aTag.click(); + URL.revokeObjectURL(blob); +} +function download_log(){ + var lv = document.getElementById('cbid.openclash.config.clog'); + var dt = new Date(); + var timestamp = dt.getFullYear()+"-"+(dt.getMonth()+1)+"-"+dt.getDate()+"-"+dt.getHours()+"-"+dt.getMinutes()+"-"+dt.getSeconds(); + createAndDownloadFile("OpenClash-"+timestamp+".log",lv.innerHTML) + return +} + function del_log() { XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "del_log")%>',null,function(x, data){ var lv = document.getElementById('cbid.openclash.config.clog'); diff --git a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index 02a7727ecd..919d189f2d 100644 --- a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -1438,4 +1438,16 @@ msgid "Restart Time (Every Week)" msgstr "重启时间(每周)" msgid "Restart time (every day)" -msgstr "重启时间(每天)" \ No newline at end of file +msgstr "重启时间(每天)" + +msgid "DNS Port" +msgstr "DNS监听端口" + +msgid "Log Size (KB)" +msgstr "日志大小(KB)" + +msgid "Set Log File Size (KB)" +msgstr "设置日志文件大小(KB)" + +msgid "Download Log" +msgstr "下载日志" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/config/openclash b/package/ctcgfw/luci-app-openclash/root/etc/config/openclash index 51a8233e35..7379596711 100644 --- a/package/ctcgfw/luci-app-openclash/root/etc/config/openclash +++ b/package/ctcgfw/luci-app-openclash/root/etc/config/openclash @@ -4,6 +4,7 @@ config openclash 'config' option mixed_port '7893' option socks_port '7891' option http_port '7890' + option dns_port '7874' option enable '0' option update '0' option en_mode '0' @@ -34,6 +35,7 @@ config openclash 'config' option small_flash_memory '0' option interface_name '0' option common_ports '0' + option log_size '1024' option geo_custom_url 'http://www.ideame.top/mmdb/Country.mmdb' option chnr_custom_url 'https://ispip.clang.cn/all_cn.txt' diff --git a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash index d2b9544ba2..e121dd3cd7 100755 --- a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash +++ b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash @@ -24,13 +24,13 @@ PROXY_FWMARK="0x162" PROXY_ROUTE_TABLE="0x162" set_lock() { - exec 888>"$LOCK_FILE" 2>/dev/null - flock -x 888 2>/dev/null + exec 888>"$LOCK_FILE" 2>/dev/null + flock -x 888 2>/dev/null } del_lock() { - flock -u 888 2>/dev/null - rm -rf "$LOCK_FILE" 2>/dev/null + flock -u 888 2>/dev/null + rm -rf "$LOCK_FILE" 2>/dev/null } add_cron() @@ -139,27 +139,9 @@ start_fail() exit 0 } -yml_check() -{ - - #创建原始备份 - if [ ! -f "$2" ]; then - cp "$1" "$2" - fi - - dns_port="$(ruby_read "$1" "['dns']['listen'].split(':')[1]")" - if [ -z "$dns_port" ] || [ "$dns_port" -eq 53 ]; then - dns_port=7874 - fi - - #保存DNS端口方便后续调用 - uci set openclash.config.dns_port="$dns_port" && uci commit openclash - -} - yml_dns_check() { - #检查DNS服务 + #检查DNS服务 if [ -z "$(ruby_read "$1" "['dns']['nameserver']")" ]; then echo "检测到DNS选项下的Nameserver未设置服务器,开始补全..." >$START_LOG echo " nameserver:" > "$DNS_FILE" 2>/dev/null @@ -946,17 +928,22 @@ do_run_file() sleep 5 start_fail fi + + #创建原始备份 + if [ ! -f "$2" ]; then + cp "$1" "$2" + fi } #绑定interface防止回环 check_interface_name() { - if [ -n "$interface_name" ] && [ "$interface_name" != "0" ]; then - ruby_edit "$CONFIG_FILE" "['interface-name']='$interface_name'" - else - sed -i "/^interface-name:/d" "$CONFIG_FILE" 2>/dev/null - fi + if [ -n "$interface_name" ] && [ "$interface_name" != "0" ]; then + ruby_edit "$CONFIG_FILE" "['interface-name']='$interface_name'" + else + sed -i "/^interface-name:/d" "$CONFIG_FILE" 2>/dev/null + fi } start_run_core() @@ -1341,7 +1328,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --on-ip 0.0.0.0 --tproxy-mark "$PROXY_FWMARK" + iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK" iptables -t mangle -A PREROUTING -p udp -j openclash fi fi @@ -1605,6 +1592,8 @@ get_config() mixed_port=$(uci get openclash.config.mixed_port 2>/dev/null) interface_name=$(uci get openclash.config.interface_name 2>/dev/null) common_ports=$(uci get openclash.config.common_ports 2>/dev/null) + dns_port=$(uci get openclash.config.dns_port 2>/dev/null) + [ -z "$dns_port" ] && dns_port=7874 && uci set openclash.config.dns_port=7874 2>/dev/null uci set openclash.config.restricted_mode=0 && uci commit openclash } @@ -1622,11 +1611,9 @@ start() echo "第一步: 获取配置..." >$START_LOG get_config + echo "第二步: 组件运行前检查..." >$START_LOG #检查文件是否存在 - do_run_file - - echo "第二步: 配置文件检查..." >$START_LOG - yml_check "$CONFIG_FILE" "$BACKUP_FILE" + do_run_file "$CONFIG_FILE" "$BACKUP_FILE" echo "第三步: 修改配置文件..." >$START_LOG config_load "openclash" @@ -1746,7 +1733,7 @@ restart() [ -f "$LOCK_FILE" ] && echo "${LOGTIME} Warning: Multiple Restart Scripts Running, Exit..." >> $LOG_FILE && exit 0 mkdir -p /tmp/lock touch $LOCK_FILE - set_lock + set_lock stop start del_lock diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/asset-manifest.json b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/asset-manifest.json deleted file mode 100644 index 6288003fd6..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/asset-manifest.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "files": { - "main.css": "./static/css/main.a3812757.chunk.css", - "main.js": "./static/js/main.8e23a89d.chunk.js", - "runtime-main.js": "./static/js/runtime-main.b905e4f3.js", - "static/js/2.d14c2fca.chunk.js": "./static/js/2.d14c2fca.chunk.js", - "index.html": "./index.html", - "static/js/2.d14c2fca.chunk.js.LICENSE.txt": "./static/js/2.d14c2fca.chunk.js.LICENSE.txt", - "static/media/logo.45983944.png": "./static/media/logo.45983944.png" - }, - "entrypoints": [ - "static/js/runtime-main.b905e4f3.js", - "static/js/2.d14c2fca.chunk.js", - "static/css/main.a3812757.chunk.css", - "static/js/main.8e23a89d.chunk.js" - ] -} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.236bee55.js b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.236bee55.js new file mode 100644 index 0000000000..b86c64db24 --- /dev/null +++ b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.236bee55.js @@ -0,0 +1 @@ +var e=Object.assign;import{e as t,u as n,r as a,c as s,R as o,a as r,b as l,d as c,f as i,g as u,h as m,i as d,j as p,k as f,l as h,A as g,F as y,m as E,N as v,n as w,o as b,p as x,q as N,s as C,t as k,H as P}from"./vendor.b176d855.js";function S(){return"ClashX Runtime"===navigator.userAgent}!function(e=".",t="__import__"){try{self[t]=new Function("u","return import(u)")}catch(n){const a=new URL(e,location),s=e=>{URL.revokeObjectURL(e.src),e.remove()};self[t]=e=>new Promise(((n,o)=>{const r=new URL(e,a);if(self[t].moduleMap[r])return n(self[t].moduleMap[r]);const l=new Blob([`import * as m from '${r}';`,`${t}.moduleMap['${r}']=m;`],{type:"text/javascript"}),c=Object.assign(document.createElement("script"),{type:"module",src:URL.createObjectURL(l),onerror(){o(new Error(`Failed to import: ${e}`)),s(c)},onload(){n(self[t].moduleMap[r]),s(c)}});document.head.appendChild(c)})),self[t].moduleMap={}}}("assets/");let T=null;class L{constructor(e){this.instance=null,window.WebViewJavascriptBridge&&(this.instance=window.WebViewJavascriptBridge),this.initBridge((t=>{this.instance=t,e()}))}initBridge(e){if(!S())return null==e?void 0:e(null);if(window.WebViewJavascriptBridge)return e(window.WebViewJavascriptBridge);if(window.WVJBCallbacks)return window.WVJBCallbacks.push(e);window.WVJBCallbacks=[e];const t=document.createElement("iframe");t.style.display="none",t.src="https://__bridge_loaded__",document.documentElement.appendChild(t),setTimeout((()=>document.documentElement.removeChild(t)),0)}callHandler(e,t){return new Promise((n=>{var a;null==(a=this.instance)||a.callHandler(e,t,n)}))}ping(){return this.callHandler("ping")}readConfigString(){return this.callHandler("readConfigString")}getPasteboard(){return this.callHandler("getPasteboard")}getAPIInfo(){return this.callHandler("apiInfo")}setPasteboard(e){return this.callHandler("setPasteboard",e)}writeConfigWithString(e){return this.callHandler("writeConfigWithString",e)}setSystemProxy(e){return this.callHandler("setSystemProxy",e)}getStartAtLogin(){return this.callHandler("getStartAtLogin")}getProxyDelay(e){return this.callHandler("speedTest",e)}setStartAtLogin(e){return this.callHandler("setStartAtLogin",e)}isSystemProxySet(){return this.callHandler("isSystemProxySet")}}var $;($||($={})).SPEED_NOTIFY="speed-notify";var R=new class{constructor(){this.EE=new t}notifySpeedTest(){this.EE.emit($.SPEED_NOTIFY)}subscribe(e,t){this.EE.addListener(e,t)}unsubscribe(e,t){this.EE.removeListener(e,t)}};function D(e,t=""){return window.localStorage.getItem(e)||t}function I(e,t){return window.localStorage.setItem(e,t)}function A(){}async function B(e){try{return[await e,null]}catch(t){return[null,t]}}function M(e){const[t,s]=n(e);return[t,a.useMemo((()=>function(e,t){"string"==typeof e?s((n=>{const a=t;n[e]=a})):"function"==typeof e?s(e):"object"==typeof e&&s((t=>{const n=e;for(const e of Object.keys(n)){const a=e;t[a]=n[a]}}))}),[s])]}function H(e=!1){const[t,n]=a.useState(e);return{visible:t,hide:function(){n(!1)},show:function(){n(!0)}}}function U(e){const{title:t,children:n,className:o,style:r}=e;return a.createElement("header",{className:s("header",o),style:r},a.createElement("h1",null,t),a.createElement("div",{className:"operations"},n))}function O(t){const{type:n,size:o=14,className:r,style:l}=t,c=s("clash-iconfont",`icon-${n}`,r),i=e({fontSize:o},l),u=e(e({},t),{className:c,style:i});return a.createElement("i",e({},u))}function F(e){const{className:t,checked:n=!1,disabled:o=!1,onChange:r=A}=e,l=s("switch",{checked:n,disabled:o},t);return a.createElement("div",{className:l,onClick:function(){o||r(!n)}},a.createElement(O,{className:"switch-icon",type:"check",size:20,style:{fontWeight:"bold"}}))}function z(e){const{className:t,style:n,children:o}=e;return a.createElement("div",{className:s("card",t),style:n},o)}function W(e){const{gutter:t=24,align:n="top",justify:o="start",className:r,style:l,children:c}=e;return a.createElement("div",{className:s("row",`row-gutter-${t}`,`row-align-${n}`,`row-justify-${o}`,r),style:l},c)}function _(e){const{offset:t=0,order:n=0,span:o=1,className:r,style:l,children:c}=e,i=Object.assign({},{order:n},l);return a.createElement("div",{className:s("column",`column-offset-${t}`,`column-span-${o}`,r),style:i},c)}function j(e){const{options:t,value:n,onSelect:o}=e;return a.createElement("div",{className:"button-select"},t.map((e=>a.createElement("button",{value:e.value,key:e.value,className:s("button-select-options",{actived:n===e.value}),onClick:()=>null==o?void 0:o(e.value)},e.label))))}const G={en_US:{SideBar:{Proxies:"Proxies",Overview:"Overview",Logs:"Logs",Rules:"Rules",Settings:"Setting",Connections:"Connections",Version:"Version"},Settings:{title:"Settings",labels:{startAtLogin:"Start at login",language:"language",setAsSystemProxy:"Set as system proxy",allowConnectFromLan:"Allow connect from Lan",proxyMode:"Mode",socks5ProxyPort:"Socks5 proxy port",httpProxyPort:"HTTP proxy port",mixedProxyPort:"Mixed proxy port",externalController:"External controller"},values:{cn:"中文",en:"English",global:"Global",rules:"Rules",direct:"Direct",script:"Script"},versionString:"Current ClashX is the latest version:{{version}}",checkUpdate:"Check Update",externalControllerSetting:{title:"External Controller",note:"Please note that modifying this configuration will only configure Dashboard. Will not modify your Clash configuration file. Please make sure that the external controller address matches the address in the Clash configuration file, otherwise, Dashboard will not be able to connect to Clash.",host:"Host",port:"Port",secret:"Secret"}},Logs:{title:"Logs"},Rules:{title:"Rules",providerTitle:"Providers",providerUpdateTime:"Last updated at",ruleCount:"Rule count"},Connections:{title:"Connections",keepClosed:"Keep closed connections",total:{text:"total",upload:"upload",download:"download"},closeAll:{title:"Warning",content:"This would close all connections"},filter:{all:"All"},columns:{host:"Host",network:"Network",type:"Type",chains:"Chains",rule:"Rule",time:"Time",speed:"Speed",upload:"Upload",download:"Download",sourceIP:"Source IP"}},Proxies:{title:"Proxies",editDialog:{title:"Edit Proxy",color:"Color",name:"Name",type:"Type",server:"Server",port:"Port",password:"Password",cipher:"Cipher",obfs:"Obfs","obfs-host":"Obfs-host",uuid:"UUID",alterId:"AlterId",tls:"TLS"},groupTitle:"Policy Group",providerTitle:"Providers",providerUpdateTime:"Last updated at",expandText:"Expand",collapseText:"Collapse",speedTestText:"Speed Test",breakConnectionsText:"Close connections which include the group"},Modal:{ok:"Ok",cancel:"Cancel"}},zh_CN:{SideBar:{Proxies:"代理",Overview:"总览",Logs:"日志",Rules:"规则",Settings:"设置",Connections:"连接",Version:"版本"},Settings:{title:"设置",labels:{startAtLogin:"开机时启动",language:"语言",setAsSystemProxy:"设置为系统代理",allowConnectFromLan:"允许来自局域网的连接",proxyMode:"代理模式",socks5ProxyPort:"Socks5 代理端口",httpProxyPort:"HTTP 代理端口",mixedProxyPort:"混合代理端口",externalController:"外部控制设置"},values:{cn:"中文",en:"English",global:"全局",rules:"规则",direct:"直连",script:"脚本"},versionString:"当前 ClashX 已是最新版本:{{version}}",checkUpdate:"检查更新",externalControllerSetting:{title:"编辑外部控制设置",note:"请注意,修改该配置项并不会修改你的 Clash 配置文件,请确认修改后的外部控制地址和 Clash 配置文件内的地址一致,否则会导致 Dashboard 无法连接。",host:"Host",port:"端口",secret:"密钥"}},Logs:{title:"日志"},Rules:{title:"规则",providerTitle:"规则集",providerUpdateTime:"最后更新于",ruleCount:"规则条数"},Connections:{title:"连接",keepClosed:"保留关闭连接",total:{text:"总量",upload:"上传",download:"下载"},closeAll:{title:"警告",content:"将会关闭所有连接"},filter:{all:"全部"},columns:{host:"域名",network:"网络",type:"类型",chains:"节点链",rule:"规则",time:"连接时间",speed:"速率",upload:"上传",download:"下载",sourceIP:"来源 IP"}},Proxies:{title:"代理",editDialog:{title:"编辑代理",color:"颜色",name:"名字",type:"类型",server:"服务器",port:"端口",password:"密码",cipher:"加密方式",obfs:"Obfs","obfs-host":"Obfs-host",uuid:"UUID",alterId:"AlterId",tls:"TLS"},groupTitle:"策略组",providerTitle:"代理集",providerUpdateTime:"最后更新于",expandText:"展开",collapseText:"收起",speedTestText:"测速",breakConnectionsText:"切换时打断包含策略组的连接"},Modal:{ok:"确 定",cancel:"取 消"}}},V=Object.keys(G);function X(e){const[t,n]=o(e);return[t,a.useMemo((()=>function(e,t){if("string"==typeof e)n((n=>r(n,(n=>{const a=t;n[e]=a}))));else if("function"==typeof e){const t=e;n((e=>r(e,t)))}else"object"==typeof e&&n((t=>r(t,(t=>{const n=e;for(const e of Object.keys(n)){const a=e;t[a]=n[a]}}))))}),[n])]}function J(e){let t=null;return async function(){return t||(t=e(),t.catch((e=>{throw t=null,e})))}}class Y{constructor(e){this.EE=new t,this.innerBuffer=[],this.isClose=!1,this.config=Object.assign({bufferLength:0,retryInterval:5e3,headers:{}},e),this.config.useWebsocket?this.websocketLoop():this.loop()}websocketLoop(){var e;const t=new URL(this.config.url);t.protocol="http:"===t.protocol?"ws:":"wss:",t.searchParams.set("token",null!=(e=this.config.token)?e:"");const n=new WebSocket(t.toString());n.addEventListener("message",(e=>{const t=JSON.parse(e.data);this.EE.emit("data",[t]),this.config.bufferLength>0&&(this.innerBuffer.push(t),this.innerBuffer.length>this.config.bufferLength&&this.innerBuffer.splice(0,this.innerBuffer.length-this.config.bufferLength))})),n.addEventListener("close",(()=>setTimeout(this.websocketLoop,this.config.retryInterval))),n.addEventListener("error",(e=>{this.EE.emit("error",e),setTimeout(this.websocketLoop,this.config.retryInterval)}))}async loop(){const[e,t]=await B(fetch(this.config.url,{mode:"cors",headers:this.config.token?{Authorization:`Bearer ${this.config.token}`}:{}}));if(t||!e.body)return void this.retry(t);const n=e.body.getReader(),a=new TextDecoder;for(;!this.isClose;){const[{value:e},t]=await B(null==n?void 0:n.read());if(t){this.retry(t);break}const s=a.decode(e).trim().split("\n").map((e=>JSON.parse(e)));this.EE.emit("data",s),this.config.bufferLength>0&&(this.innerBuffer.push(...s),this.innerBuffer.length>this.config.bufferLength&&this.innerBuffer.splice(0,this.innerBuffer.length-this.config.bufferLength))}}retry(e){this.isClose||(this.EE.emit("error",e),window.setTimeout(this.loop,this.config.retryInterval))}subscribe(e,t){this.EE.addListener(e,t)}unsubscribe(e,t){this.EE.removeListener(e,t)}buffer(){return this.innerBuffer.slice()}destory(){this.EE.removeAllListeners(),this.isClose=!0}}async function K(){if(S()){const e=await T.getAPIInfo();return{hostname:e.host,port:e.port,secret:e.secret,protocol:"http:"}}const e=D("externalControllerAddr","127.0.0.1"),t=D("externalControllerPort","9090"),n=D("secret",""),a="127.0.0.1"===e?"http:":window.location.protocol;if(!e||!t)throw new Error("can't get hostname or port");return{hostname:e,port:t,secret:n,protocol:a}}const q=J((async()=>{const{hostname:e,port:t,secret:n,protocol:a}=await K();return l.create({baseURL:`${a}//${e}:${t}`,headers:n?{Authorization:`Bearer ${n}`}:{}})}));async function Q(){return(await q()).get("configs")}async function Z(e){return(await q()).patch("configs",e)}async function ee(){return(await q()).get("version")}async function te(e){return(await q()).delete(`connections/${e}`)}const ne=J((async function(){const e=await K(),{data:t}=await Q(),[n,a]=await B(ee()),s=!!(a?"unkonwn version":n.data.version)||!0,o=`${e.protocol}//${e.hostname}:${e.port}/logs?level=${t["log-level"]}`;return new Y({url:o,bufferLength:200,token:e.secret,useWebsocket:s})})),ae=J((async function(){const e=await K(),[t,n]=await B(ee()),a=!!(n?"unkonwn version":t.data.version)||!0,s=`${e.protocol}//${e.hostname}:${e.port}/connections`;return new Y({url:s,bufferLength:200,token:e.secret,useWebsocket:a})})),se=c({key:"identity",default:!0});function oe(){const[e,t]=o(se);return{identity:e,wrapFetcher:function(e){return async function(...n){const[a,s]=await B(e(...n)),o=s;if(o&&(!o.response||401===o.response.status))throw t(!1),s;return t(!0),a}},set:t}}const re=c({key:"i18n",default:function(){const e=D("language");if(e&&V.includes(e))return e;const t=function(){const e=[];if(window.navigator)if(window.navigator.languages)for(const t of window.navigator.languages)e.push(t);else window.navigator.language&&e.push(navigator.language);return e}();for(const n of t){if(n.includes("zh"))return"zh_CN";if(n.includes("us"))return"en_US"}return"en_US"}()});function le(){const[e,t]=o(re);const n=a.useCallback((function(t){return{t:function(n){return m(G[e][t],n)}}}),[e]);return{lang:e,locales:V,setLang:function(e){t(e),function(e){I("language",e)}(e)},translation:n}}const ce=c({key:"version",default:{version:"",premium:!1}});function ie(){const[e,t]=o(ce),{set:n}=oe();return{version:e.version,premium:e.premium,update:async function(){const[e,a]=await B(ee());n(!a),t(a?{version:"",premium:!1}:{version:e.data.version,premium:!!e.data.premium})}}}const ue=c({key:"config",default:{breakConnections:!1}});function me(){const[e,t]=X(ue);return{data:e,set:t}}const de=c({key:"proxyProvider",default:[]});function pe(){const[e,t]=o(de),{data:n,mutate:s}=u("/providers/proxy",(async()=>{const e=await async function(){return(await q()).get("providers/proxies",{validateStatus:e=>e>=200&&e<300||404===e}).then((e=>(404===e.status&&(e.data={providers:{}}),e)))}();return Object.keys(e.data.providers).map((t=>e.data.providers[t])).filter((e=>"default"!==e.name)).filter((e=>"Compatible"!==e.vehicleType))}));return a.useEffect((()=>t(null!=n?n:[])),[n,t]),{providers:e,update:s}}function fe(){const[{premium:e}]=o(ce),{data:t,mutate:n}=u("/providers/rule",(async()=>{if(!e)return[];const t=await async function(){return(await q()).get("providers/rules")}();return Object.keys(t.data.providers).map((e=>t.data.providers[e]))}));return{providers:null!=t?t:[],update:n}}function he(){const{data:e,mutate:t}=u("/config",(async()=>{var e;const t=(await Q()).data;return{port:t.port,socksPort:t["socks-port"],mixedPort:null!=(e=t["mixed-port"])?e:0,redirPort:t["redir-port"],mode:t.mode.toLowerCase(),logLevel:t["log-level"],allowLan:t["allow-lan"]}}));return{general:null!=e?e:{},update:t}}const ge=c({key:"proxies",default:{proxies:[],groups:[],global:{name:"GLOBAL",type:"Selector",now:"",history:[],all:[]}}});function ye(){const[t,n]=X(ge),{mutate:s}=u("/proxies",(async()=>{const t=await async function(){return(await q()).get("proxies")}(),a=t.data.proxies.GLOBAL;a.name="GLOBAL";const s=new Set(["Selector","URLTest","Fallback","LoadBalance"]),o=new Set(["DIRECT","REJECT","GLOBAL"]),r=a.all.filter((e=>!o.has(e))).map((n=>e(e({},t.data.proxies[n]),{name:n}))),[l,c]=function(e,t){const n=[],a=[];for(const s of e)t(s)?n.push(s):a.push(s);return[n,a]}(r,(e=>!s.has(e.type)));n({proxies:l,groups:c,global:a})})),o=a.useCallback(((e,t)=>{n((n=>{for(const a of n.groups)a.name===e&&(a.now=t)}))}),[n]);return{proxies:t.proxies,groups:t.groups,global:t.global,update:s,markProxySelected:o,set:n}}const Ee=i({key:"proxyMapping",get:({get:e})=>{const t=e(ge),n=e(de),a=new Map;for(const s of t.proxies)a.set(s.name,s);for(const s of n)for(const e of s.proxies)a.set(e.name,e);return a}});function ve(){const{data:e,mutate:t}=u("/clashx",(async()=>{var e,t;if(!S())return{isClashX:!1,startAtLogin:!1,systemProxy:!1};return{startAtLogin:null!=(e=await(null==T?void 0:T.getStartAtLogin()))&&e,systemProxy:null!=(t=await(null==T?void 0:T.isSystemProxySet()))&&t,isClashX:!0}}));return{data:e,update:t}}const we=c({key:"apiData",default:{hostname:"127.0.0.1",port:"9090",secret:""}});function be(){const[t,n]=o(we);return{data:t,fetch:a.useCallback((async function(){const t=await K();n(e({},t))}),[n]),update:async function(e){const{hostname:t,port:n,secret:a}=e;I("externalControllerAddr",t),I("externalControllerPort",n),I("secret",a),window.location.reload()}}}const xe=c({key:"rules",default:[]});function Ne(){const[e,t]=X(xe);return{rules:e,update:async function(){const e=await async function(){return(await q()).get("rules")}();t(e.data.rules)}}}function Ce(e){const{className:t,data:n,onClick:o,select:r,canClick:l,errSet:c,rowHeight:i}=e,{translation:u}=le(),{t:m}=u("Proxies"),[d,p]=a.useState(!1),[f,h]=a.useState(!1),g=a.useRef(null);a.useLayoutEffect((()=>{var e,t;h((null!=(t=null==(e=null==g?void 0:g.current)?void 0:e.offsetHeight)?t:0)>30)}),[]);const y=d?"auto":i,E=l?o:A;const v=n.map((e=>{const t=s({"tags-selected":r===e,"can-click":l,error:null==c?void 0:c.has(e)});return a.createElement("li",{className:t,key:e,onClick:()=>E(e)},e)}));return a.createElement("div",{className:s("tags-container",t),style:{height:y}},a.createElement("ul",{ref:g,className:s("tags",{expand:d})},v),f&&a.createElement("span",{className:"tags-expand",onClick:function(){p(!d)}},m(d?"collapseText":"expandText")))}function ke(e){const{className:t,style:n,value:o="",align:r="center",inside:l=!1,autoFocus:c=!1,type:i="text",disabled:u=!1,onChange:m=A,onBlur:d=A}=e,p=s("input",`input-align-${r}`,{"input-inside":l},t);return a.createElement("input",{disabled:u,className:p,style:n,value:o,autoFocus:c,type:i,onChange:e=>m(e.target.value,e),onBlur:d})}function Pe(e){const{show:t=!0,title:n="Modal",size:o="small",footer:r=!0,onOk:l=A,onClose:c=A,bodyClassName:i,bodyStyle:u,className:m,style:p,children:f}=e,{translation:h}=le(),{t:g}=h("Modal"),y=a.useRef(document.createElement("div")),E=a.useRef(null);a.useLayoutEffect((()=>{const e=y.current;return document.body.appendChild(e),()=>{document.body.removeChild(e)}}),[]);const v=a.createElement("div",{className:s("modal-mask",{"modal-show":t}),ref:E,onMouseDown:function(e){e.target===E.current&&c()}},a.createElement("div",{className:s("modal",`modal-${o}`,m),style:p},a.createElement("div",{className:"modal-title"},n),a.createElement("div",{className:s("modal-body",i),style:u},f),r&&a.createElement("div",{className:"footer"},a.createElement(Le,{onClick:()=>c()},g("cancel")),a.createElement(Le,{type:"primary",onClick:()=>l()},g("ok")))));return d.createPortal(v,y.current)}const Se={success:"check",info:"info",warning:"info",error:"close"};function Te(e){const{message:t="",type:n="info",inside:o=!1,children:r,className:l,style:c}=e,i=s("alert",`alert-${o?"note":"box"}-${n}`,l);return a.createElement("div",{className:i,style:c},a.createElement("span",{className:"alert-icon"},a.createElement(O,{type:Se[n],size:26})),t?a.createElement("p",{className:"alert-message"},t):a.createElement("div",{className:"alert-message"},r))}function Le(e){const{type:t="normal",onClick:n=A,children:o,className:r,style:l}=e,c=s("button",`button-${t}`,r);return a.createElement("button",{className:c,style:l,onClick:n},o)}function $e(e){const{className:t,checked:n=!1,onChange:o=A}=e,r=s("checkbox",{checked:n},t);return a.createElement("div",{className:r,onClick:function(){o(!n)}},a.createElement(O,{className:"checkbox-icon",type:"check",size:18}),a.createElement("div",null,e.children))}function Re(t){const{color:n,className:o,style:r}=t,l=s("tag",o),c=e({color:n},r),i=e(e({},t),{className:l,style:c});return a.createElement("span",e({},i),t.children)}function De(e){const t=s("spinner",e.className);return a.createElement("div",{className:t},a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})))}function Ie(e){const t=s("loading","visible",e.className);return e.visible?a.createElement("div",{className:t},a.createElement(De,{className:e.spinnerClassName})):null}const Ae={"#909399":0,"#00c520":260,"#ff9a28":600,"#ff3e5e":1/0};async function Be(e){var t;if(S()){return null!=(t=await(null==T?void 0:T.getProxyDelay(e)))?t:0}const{data:{delay:n}}=await async function(e){return(await q()).get(`proxies/${encodeURIComponent(e)}/delay`,{params:{timeout:5e3,url:"http://www.gstatic.com/generate_204"}})}(e);return n}function Me(e){const{config:t,className:n}=e,{set:o}=ye(),r=a.useCallback((async function(){const[e,n]=await B(Be(t.name)),a=n?0:e;o((e=>{const n=e.proxies.find((e=>e.name===t.name));n&&n.history.push({time:Date.now().toString(),delay:a})}))}),[t.name,o]),l=a.useMemo((()=>{var e;return(null==(e=t.history)?void 0:e.length)?t.history.slice(-1)[0].delay:0}),[t]);a.useLayoutEffect((()=>(R.subscribe($.SPEED_NOTIFY,r),()=>R.unsubscribe($.SPEED_NOTIFY,r))),[r]);const c=a.useMemo((()=>0===l),[l]),i=a.useMemo((()=>Object.keys(Ae).find((e=>l<=Ae[e]))),[l]),u=c?void 0:i;return a.createElement("div",{className:s("proxy-item",{"proxy-error":c},n)},a.createElement("span",{className:"proxy-type",style:{backgroundColor:u}},t.type),a.createElement("p",{className:"proxy-name"},t.name),a.createElement("p",{className:"proxy-delay"},0===l?"-":`${l}ms`))}function He(e){const{markProxySelected:t}=ye(),n=p(Ee),{data:s}=me(),{config:o}=e;const r=a.useMemo((()=>{var e;const t=new Set;for(const a of o.all){const s=null==(e=n.get(a))?void 0:e.history;(null==s?void 0:s.length)&&0===s.slice(-1)[0].delay&&t.add(a)}return t}),[o.all,n]),l="Selector"===o.type;return a.createElement("div",{className:"proxy-group"},a.createElement("div",{className:"proxy-group-part"},a.createElement("span",{className:"proxy-group-name"},o.name),a.createElement(Re,{className:"proxy-group-type"},o.type)),a.createElement("div",{className:"proxy-group-tags-container"},a.createElement(Ce,{className:"proxy-group-tags",data:o.all,onClick:async function(n){if(await async function(e,t){return(await q()).put(`proxies/${encodeURIComponent(e)}`,{name:t})}(e.config.name,n),t(e.config.name,n),s.breakConnections){const t=[],n=await async function(){return(await q()).get("connections")}();for(const a of n.data.connections)a.chains.includes(e.config.name)&&t.push(a.id);for(const e of t)te(e)}},errSet:r,select:o.now,canClick:l,rowHeight:30})))}function Ue(e,t){const n="en_US"===t?"en":"zh-cn";return f().locale(n).from(e)}f.extend(h);function Oe(e){const{update:t}=pe(),{translation:n,lang:s}=le(),{provider:o}=e,{t:r}=n("Proxies"),{visible:l,hide:c,show:i}=H();const u=a.useMemo((()=>o.proxies.slice().sort(((e,t)=>-1*_e(e,t)))),[o.proxies]);return a.createElement(z,{className:"proxy-provider"},a.createElement(Ie,{visible:l}),a.createElement("div",{className:"proxy-provider-header"},a.createElement("div",{className:"proxy-provider-header-part"},a.createElement("span",{className:"proxy-provider-name"},o.name),a.createElement(Re,null,o.vehicleType)),a.createElement("div",{className:"proxy-provider-header-part"},o.updatedAt&&a.createElement("span",{className:"proxy-provider-update"},`${r("providerUpdateTime")}: ${Ue(new Date(o.updatedAt),s)}`),a.createElement(O,{className:"proxy-provider-icon healthcheck",type:"healthcheck",size:18,onClick:function(){i(),async function(e){return(await q()).get(`providers/proxies/${encodeURIComponent(e)}/healthcheck`)}(o.name).then((()=>t())).finally((()=>c()))}}),a.createElement(O,{className:"proxy-provider-icon",type:"update",size:18,onClick:function(){i(),async function(e){return(await q()).put(`providers/proxies/${encodeURIComponent(e)}`)}(o.name).then((()=>t())).finally((()=>c()))}}))),a.createElement("ul",{className:"proxies-list"},u.map((e=>a.createElement("li",{key:e.name},a.createElement(Me,{className:"proxy-provider-item",config:e}))))))}var Fe,ze;(ze=Fe||(Fe={}))[ze.None=0]="None",ze[ze.Asc=1]="Asc",ze[ze.Desc=2]="Desc";const We={0:"sort",1:"sort-ascending",2:"sort-descending"};function _e(e,t){const n=e.history.length?e.history.slice(-1)[0].delay:0;return((t.history.length?t.history.slice(-1)[0].delay:0)||Number.MAX_SAFE_INTEGER)-(n||Number.MAX_SAFE_INTEGER)}function je(){const{groups:e,global:t}=ye(),{data:n,set:s}=me(),{general:o}=he(),{translation:r}=le(),{t:l}=r("Proxies"),c=a.useMemo((()=>"global"===o.mode?[t]:e),[o,e,t]);return a.createElement(a.Fragment,null,0!==c.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:l("groupTitle")},a.createElement($e,{className:"connections-filter",checked:n.breakConnections,onChange:e=>s("breakConnections",e)},l("breakConnectionsText"))),a.createElement(z,{className:"proxies-group-card"},a.createElement("ul",{className:"proxies-group-list"},c.map((e=>a.createElement("li",{className:"proxies-group-item",key:e.name},a.createElement(He,{config:e}))))))))}function Ge(){const{providers:e}=pe(),{translation:t}=le(),{t:n}=t("Proxies");return a.createElement(a.Fragment,null,0!==e.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:n("providerTitle")}),a.createElement("ul",{className:"proxies-providers-list"},e.map((e=>a.createElement("li",{className:"proxies-providers-item",key:e.name},a.createElement(Oe,{provider:e})))))))}function Ve(){const{proxies:e}=ye(),{translation:t}=le(),{t:n}=t("Proxies");const{current:s,next:o}=function(e,t=0){if(e.length<2)throw new Error("List requires at least two elements");const[n,s]=a.useState(t);return{current:a.useMemo((()=>e[n]),[e,n]),next:function(){s((n+1)%e.length)}}}([1,2,0]),r=a.useMemo((()=>{switch(s){case 2:return e.slice().sort(((e,t)=>_e(e,t)));case 1:return e.slice().sort(((e,t)=>-1*_e(e,t)));default:return e.slice()}}),[s,e]),l=o;return a.createElement(a.Fragment,null,0!==r.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:n("title")},a.createElement(O,{className:"proxies-action-icon",type:We[s],onClick:l,size:20}),a.createElement(O,{className:"proxies-action-icon",type:"speed",size:20}),a.createElement("span",{className:"proxies-speed-test",onClick:function(){R.notifySpeedTest()}},n("speedTestText"))),a.createElement("ul",{className:"proxies-list"},r.map((e=>a.createElement("li",{key:e.name},a.createElement(Me,{config:e})))))))}function Xe(){return a.createElement("div",{className:"page"},a.createElement(je,null),a.createElement(Ge,null),a.createElement(Ve,null))}function Je(){const t=a.useRef(null),n=a.useRef([]),[s,o]=a.useState([]),{translation:r}=le(),{t:l}=r("Logs");return a.useLayoutEffect((()=>{const e=t.current;e&&(e.scrollTop=e.scrollHeight)})),a.useEffect((()=>{let t=null;function a(t){n.current=n.current.slice().concat(t.map((t=>e(e({},t),{time:new Date})))),o(n.current)}return async function(){t=await ne(),n.current=t.buffer(),o(n.current),t.subscribe("data",a)}(),()=>null==t?void 0:t.unsubscribe("data",a)}),[]),a.createElement("div",{className:"page"},a.createElement(U,{title:l("title")}),a.createElement(z,{className:"logs-card"},a.createElement("ul",{className:"logs-panel",ref:t},s.map(((e,t)=>a.createElement("li",{key:t},a.createElement("span",{className:"logs-panel-time"},f(e.time).format("YYYY-MM-DD HH:mm:ss")),a.createElement("span",null,"[",e.type,"] ",e.payload)))))))}function Ye(e){const{update:t}=fe(),{translation:n,lang:o}=le(),{provider:r}=e,{t:l}=n("Rules"),{visible:c,hide:i,show:u}=H();const m=s("rule-provider-icon",{"rule-provider-loading":c});return a.createElement(z,{className:"rule-provider"},a.createElement("div",{className:"rule-provider-header"},a.createElement("div",{className:"rule-provider-header-part"},a.createElement("span",{className:"rule-provider-name"},r.name),a.createElement(Re,null,r.vehicleType),a.createElement(Re,{className:"rule-provider-behavior"},r.behavior),a.createElement("span",{className:"rule-provider-update"},`${l("ruleCount")}: ${r.ruleCount}`)),a.createElement("div",{className:"rule-provider-header-part"},r.updatedAt&&a.createElement("span",{className:"rule-provider-update"},`${l("providerUpdateTime")}: ${Ue(new Date(r.updatedAt),o)}`),a.createElement(O,{className:m,type:"update",size:18,onClick:function(){u(),async function(e){return(await q()).put(`providers/rules/${encodeURIComponent(e)}`)}(r.name).then((()=>t())).finally((()=>i()))}}))))}function Ke(){const{providers:e}=fe(),{translation:t}=le(),{t:n}=t("Rules");return a.createElement(a.Fragment,null,0!==e.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:n("providerTitle")}),a.createElement("ul",{className:"proxies-providers-list"},e.map((e=>a.createElement("li",{className:"proxies-providers-item",key:e.name},a.createElement(Ye,{provider:e})))))))}function qe(){const{rules:e,update:t}=Ne(),{translation:n}=le(),{t:s}=n("Rules");function o({index:t,style:n}){const s=e[t];return a.createElement("li",{className:"rule-item",style:n},a.createElement(W,{className:"rule-item-row",gutter:24,align:"middle"},a.createElement(_,{className:"rule-type",span:6,offset:1},s.type),a.createElement(_,{className:"payload",span:11},s.payload),a.createElement(_,{className:"rule-proxy",span:6},s.proxy)))}return u("rules",t),a.createElement("div",{className:"page"},a.createElement(Ke,null),a.createElement(U,{title:s("title")}),a.createElement(z,{className:"rules-card"},a.createElement(g,{className:"rules"},(({height:t,width:n})=>a.createElement(y,{height:t,width:n,itemCount:e.length,itemSize:50},o)))))}const Qe=[{label:"中文",value:"zh_CN"},{label:"English",value:"en_US"}];function Ze(){var e,t,n;const{premium:o}=ie(),{data:r,update:l}=ve(),{general:c,update:i}=he(),{set:u}=oe(),{data:m}=be(),{translation:d,setLang:p,lang:f}=le(),{t:h}=d("Settings"),[g,y]=M({socks5ProxyPort:7891,httpProxyPort:7890,mixedProxyPort:0});a.useEffect((()=>{var e,t,n;y("socks5ProxyPort",null!=(e=null==c?void 0:c.socksPort)?e:0),y("httpProxyPort",null!=(t=null==c?void 0:c.port)?t:0),y("mixedProxyPort",null!=(n=null==c?void 0:c.mixedPort)?n:0)}),[c,y]);const{hostname:v,port:w}=m,{allowLan:b,mode:x}=c,N=null!=(e=null==r?void 0:r.startAtLogin)&&e,C=null!=(t=null==r?void 0:r.systemProxy)&&t,k=null!=(n=null==r?void 0:r.isClashX)&&n,P=a.useMemo((()=>{const e=[{label:h("values.global"),value:"Global"},{label:h("values.rules"),value:"Rule"},{label:h("values.direct"),value:"Direct"}];return o&&e.push({label:h("values.script"),value:"Script"}),e}),[h,o]);return a.createElement("div",{className:"page"},a.createElement(U,{title:h("title")}),a.createElement(z,{className:"settings-card"},a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:12},a.createElement(_,{span:14,offset:1},a.createElement("span",{className:"label"},h("labels.startAtLogin"))),a.createElement(_,{span:8,className:"value-column"},a.createElement(F,{disabled:!(null==r?void 0:r.isClashX),checked:N,onChange:async function(e){await(null==T?void 0:T.setStartAtLogin(e)),l()}}))),a.createElement(_,{span:12},a.createElement(_,{span:8,offset:1},a.createElement("span",{className:"label"},h("labels.language"))),a.createElement(_,{span:14,className:"value-column"},a.createElement(j,{options:Qe,value:f,onSelect:e=>{p(e)}})))),a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:12},a.createElement(_,{span:14,offset:1},a.createElement("span",{className:"label"},h("labels.setAsSystemProxy"))),a.createElement(_,{span:8,className:"value-column"},a.createElement(F,{disabled:!k,checked:C,onChange:async function(e){await(null==T?void 0:T.setSystemProxy(e)),l()}}))),a.createElement(_,{span:12},a.createElement(_,{span:14,offset:1},a.createElement("span",{className:"label"},h("labels.allowConnectFromLan"))),a.createElement(_,{span:8,className:"value-column"},a.createElement(F,{checked:b,onChange:async function(e){await Z({"allow-lan":e}),await i()}}))))),a.createElement(z,{className:"settings-card"},a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:12},a.createElement(_,{span:8,offset:1},a.createElement("span",{className:"label"},h("labels.proxyMode"))),a.createElement(_,{span:14,className:"value-column"},a.createElement(j,{options:P,value:E(x),onSelect:async function(e){await Z({mode:e}),await i()}}))),a.createElement(_,{span:12},a.createElement(_,{span:14,offset:1},a.createElement("span",{className:"label"},h("labels.socks5ProxyPort"))),a.createElement(_,{span:8},a.createElement(ke,{disabled:k,value:g.socks5ProxyPort,onChange:e=>y("socks5ProxyPort",+e),onBlur:async function(){await Z({"socks-port":g.socks5ProxyPort}),await i()}})))),a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:12},a.createElement(_,{span:14,offset:1},a.createElement("span",{className:"label"},h("labels.httpProxyPort"))),a.createElement(_,{span:8},a.createElement(ke,{disabled:k,value:g.httpProxyPort,onChange:e=>y("httpProxyPort",+e),onBlur:async function(){await Z({port:g.httpProxyPort}),await i()}}))),a.createElement(_,{span:12},a.createElement(_,{span:14,offset:1},a.createElement("span",{className:"label"},h("labels.mixedProxyPort"))),a.createElement(_,{span:8},a.createElement(ke,{disabled:k,value:g.mixedProxyPort,onChange:e=>y("mixedProxyPort",+e),onBlur:async function(){await Z({"mixed-port":g.mixedProxyPort}),await i()}})))),a.createElement(W,null,a.createElement(_,{span:12},a.createElement(_,{span:12,offset:1},a.createElement("span",{className:"label"},h("labels.externalController"))),a.createElement(_,{className:"external-controller",span:10},a.createElement("span",{className:s({"modify-btn":!k}),onClick:()=>!k&&u(!1)},`${v}:${w}`))))),a.createElement(z,{className:"clash-version",style:{display:"none"}},a.createElement("span",{className:"check-icon"},a.createElement(O,{type:"check",size:20})),a.createElement("p",{className:"version-info"},h("versionString")),a.createElement("span",{className:"check-update-btn"},h("checkUpdate"))))}var et,tt;function nt(e){const{routes:t}=e,{translation:n}=le(),{version:o,premium:r,update:l}=ie(),{data:c}=ve(),{t:i}=n("SideBar");u("version",l);const m=t.map((({path:e,name:t,exact:n,noMobile:o})=>a.createElement("li",{className:s("item",{"no-mobile":o}),key:t},a.createElement(v,{to:e,activeClassName:"active",exact:!!n},i(t)))));return a.createElement("div",{className:"sidebar"},a.createElement("img",{src:"./assets/logo.b453e72f.png",alt:"logo",className:"sidebar-logo"}),a.createElement("ul",{className:"sidebar-menu"},m),a.createElement("div",{className:"sidebar-version"},a.createElement("span",{className:"sidebar-version-label"},"Clash",(null==c?void 0:c.isClashX)&&"X"," ",i("Version")),a.createElement("span",{className:"sidebar-version-text"},o),r&&a.createElement("span",{className:"sidebar-version-label"},"Premium")))}(tt=et||(et={})).Domain="Domain",tt.DomainSuffix="DomainSuffix",tt.DomainKeyword="DomainKeyword",tt.GeoIP="GeoIP",tt.IPCIDR="IPCIDR",tt.SrcIPCIDR="SrcIPCIDR",tt.SrcPort="SrcPort",tt.DstPort="DstPort",tt.MATCH="MATCH",tt.RuleSet="RuleSet";function at(e){const{translation:t}=le(),n=a.useMemo((()=>t("Connections").t),[t]),{className:o,style:r}=e,l=s("connections-devices",o);function c(t){var n;null==(n=e.onChange)||n.call(e,t)}return a.createElement("div",{className:l,style:r},a.createElement("div",{className:s("connections-devices-item",{selected:""===e.selected}),onClick:()=>c("")},n("filter.all")),e.devices.map((t=>a.createElement("div",{className:s("connections-devices-item",{selected:e.selected===t.label}),onClick:()=>c(t.label)},t.label," (",t.number,")"))))}class st{constructor(){this.connections=new Map,this.saveDisconnection=!1}appendToSet(t){var n;const a=t.reduce(((e,t)=>e.set(t.id,t)),new Map);for(const e of this.connections.keys())if(!a.has(e))if(this.saveDisconnection){const t=this.connections.get(e);t&&(t.completed=!0,t.uploadSpeed=0,t.downloadSpeed=0)}else this.connections.delete(e);for(const s of a.keys()){if(!this.connections.has(s)){this.connections.set(s,e(e({},a.get(s)),{uploadSpeed:0,downloadSpeed:0}));continue}const t=this.connections.get(s),o=a.get(s);null==(n=this.connections)||n.set(s,e(e({},o),{uploadSpeed:o.upload-t.upload,downloadSpeed:o.download-t.download}))}}toggleSave(){var e,t;if(this.saveDisconnection){this.saveDisconnection=!1;for(const n of this.connections.keys())(null==(t=null==(e=this.connections)?void 0:e.get(n))?void 0:t.completed)&&this.connections.delete(n)}else this.saveDisconnection=!0;return this.saveDisconnection}getConnections(){return[...this.connections.values()]}}var ot,rt;(rt=ot||(ot={})).Host="host",rt.Network="network",rt.Type="type",rt.Chains="chains",rt.Rule="rule",rt.Speed="speed",rt.Upload="upload",rt.Download="download",rt.SourceIP="sourceIP",rt.Time="time";const lt=new Set([ot.Network,ot.Type,ot.Rule,ot.Speed,ot.Upload,ot.Download,ot.SourceIP,ot.Time]);function ct(e){const t=["B","KB","MB","GB","TB"];let n=0;for(;~~(e/1024)&&nt("Connections").t),[t]),[r,l]=M({uploadTotal:0,downloadTotal:0}),{visible:c,show:i,hide:u}=H();const{connections:m,feed:d,save:p,toggleSave:f}=function(){const e=a.useMemo((()=>new st),[]),t=a.useRef(!0),[n,s]=a.useState([]),[o,r]=a.useState(!1);return{connections:n,feed:a.useCallback((function(n){e.appendToSet(n),t.current&&s(e.getConnections()),t.current=!t.current}),[e]),toggleSave:a.useCallback((function(){const n=e.toggleSave();r(n),n||s(e.getConnections()),t.current=!0}),[e]),save:o}}(),h=a.useMemo((()=>m.map((e=>({id:e.id,host:`${e.metadata.host||e.metadata.destinationIP}:${e.metadata.destinationPort}`,chains:e.chains.slice().reverse().join(" / "),rule:e.rule===et.RuleSet?`${e.rule}(${e.rulePayload})`:e.rule,time:new Date(e.start).getTime(),upload:e.upload,download:e.download,sourceIP:e.metadata.sourceIP,type:e.metadata.type,network:e.metadata.network.toUpperCase(),speed:{upload:e.uploadSpeed,download:e.downloadSpeed},completed:!!e.completed})))),[m]),g=a.useMemo((()=>{const e=w(m,"metadata.sourceIP");return Object.keys(e).map((t=>({label:t,number:e[t].length}))).sort(((e,t)=>e.label.localeCompare(t.label)))}),[m]),y=a.useRef(null),{x:E}=b(y),v=a.useMemo((()=>[{Header:o(`columns.${ot.Host}`),accessor:ot.Host,minWidth:260,width:260},{Header:o(`columns.${ot.Network}`),accessor:ot.Network,minWidth:80,width:80},{Header:o(`columns.${ot.Type}`),accessor:ot.Type,minWidth:120,width:120},{Header:o(`columns.${ot.Chains}`),accessor:ot.Chains,minWidth:200,width:200},{Header:o(`columns.${ot.Rule}`),accessor:ot.Rule,minWidth:140,width:140},{id:ot.Speed,Header:o(`columns.${ot.Speed}`),accessor:e=>[e.speed.upload,e.speed.download],sortType(e,t){const n=e.original.speed,a=t.original.speed;return n.download===a.download?n.upload-a.upload:n.download-a.download},minWidth:200,width:200,sortDescFirst:!0},{Header:o(`columns.${ot.Upload}`),accessor:ot.Upload,minWidth:100,width:100,sortDescFirst:!0},{Header:o(`columns.${ot.Download}`),accessor:ot.Download,minWidth:100,width:100,sortDescFirst:!0},{Header:o(`columns.${ot.SourceIP}`),accessor:ot.SourceIP,minWidth:140,width:140},{Header:o(`columns.${ot.Time}`),accessor:ot.Time,minWidth:120,width:120,sortType:(e,t)=>t.original.time-e.original.time}]),[o]);a.useLayoutEffect((()=>{let e=null;function t(e){for(const t of e)l({uploadTotal:t.uploadTotal,downloadTotal:t.downloadTotal}),d(t.connections)}return async function(){e=await ae(),e.subscribe("data",t)}(),()=>{e&&(e.unsubscribe("data",t),e.destory())}}),[d,l]);const{getTableProps:N,getTableBodyProps:C,headerGroups:k,rows:P,prepareRow:S,setFilter:T}=x.useTable({columns:v,data:h,autoResetSortBy:!1,autoResetFilters:!1,initialState:{sortBy:[{id:ot.Time,desc:!1}]}},x.useResizeColumns,x.useBlockLayout,x.useFilters,x.useSortBy),L=a.useMemo((()=>k[0]),[k]),$=a.useCallback((function(e){switch(e.column.id){case ot.Speed:return function(e,t){switch(!0){case 0===e&&0===t:return"-";case 0!==e&&0!==t:return`↑ ${ct(e)}/s ↓ ${ct(t)}/s`;case 0!==e:return`↑ ${ct(e)}/s`;default:return`↓ ${ct(t)}/s`}}(e.value[0],e.value[1]);case ot.Upload:case ot.Download:return ct(e.value);case ot.Time:return Ue(new Date(e.value),n);default:return e.value}}),[n]),[R,D]=a.useState("");return a.createElement("div",{className:"page"},a.createElement(U,{title:o("title")},a.createElement("span",{className:"connections-filter total"},`(${o("total.text")}: ${o("total.upload")} ${ct(r.uploadTotal)} ${o("total.download")} ${ct(r.downloadTotal)})`),a.createElement($e,{className:"connections-filter",checked:p,onChange:f},o("keepClosed")),a.createElement(O,{className:"connections-filter dangerous",onClick:i,type:"close-all",size:20})),g.length>1&&a.createElement(at,{devices:g,selected:R,onChange:function(e){D(e),null==T||T(ot.SourceIP,e)}}),a.createElement(z,{className:"connections-card"},a.createElement("div",e(e({},N()),{className:"connections",ref:y}),a.createElement("div",e(e({},L.getHeaderGroupProps()),{className:"connections-header"}),L.headers.map(((t,n)=>{const o=t,r=o.id;return a.createElement("div",e(e({},o.getHeaderProps()),{className:s("connections-th",{resizing:o.isResizing,fixed:E>0&&o.id===ot.Host}),key:r}),a.createElement("div",e({},o.getSortByToggleProps()),t.render("Header"),o.isSorted?o.isSortedDesc?" ↓":" ↑":null),n!==L.headers.length-1&&a.createElement("div",e(e({},o.getResizerProps()),{className:"connections-resizer"})))}))),a.createElement("div",e(e({},C()),{className:"connections-body"}),P.map((t=>(S(t),a.createElement("div",e(e({},t.getRowProps()),{className:"connections-item",key:t.original.id}),t.cells.map((n=>{const o=s("connections-block",{center:lt.has(n.column.id),completed:t.original.completed},{fixed:E>0&&n.column.id===ot.Host});return a.createElement("div",e(e({},n.getCellProps()),{className:o,key:n.column.id}),$(n))}))))))))),a.createElement(Pe,{title:o("closeAll.title"),show:c,onClose:u,onOk:function(){(async function(){return(await q()).delete("connections")})().finally((()=>u()))}},o("closeAll.content")))}function ut(){const{translation:e}=le(),{t:t}=e("Settings"),{data:n,update:s,fetch:o}=be(),{identity:r,set:l}=oe(),[c,i]=M({hostname:"",port:"",secret:""});return a.useEffect((()=>{o()}),[o]),a.useEffect((()=>{i({hostname:n.hostname,port:n.port,secret:n.secret})}),[n,i]),a.createElement(Pe,{show:!r,title:t("externalControllerSetting.title"),bodyClassName:"external-controller",onClose:()=>l(!0),onOk:function(){const{hostname:e,port:t,secret:n}=c;s({hostname:e,port:t,secret:n})}},a.createElement(Te,{type:"info",inside:!0},a.createElement("p",null,t("externalControllerSetting.note"))),a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:4,className:"title"},t("externalControllerSetting.host")),a.createElement(_,{span:20,className:"form"},a.createElement(ke,{align:"left",inside:!0,value:c.hostname,onChange:e=>i("hostname",e)}))),a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:4,className:"title"},t("externalControllerSetting.port")),a.createElement(_,{span:20,className:"form"},a.createElement(ke,{align:"left",inside:!0,value:c.port,onChange:e=>i("port",e)}))),a.createElement(W,{gutter:24,align:"middle"},a.createElement(_,{span:4,className:"title"},t("externalControllerSetting.secret")),a.createElement(_,{span:20,className:"form"},a.createElement(ke,{align:"left",inside:!0,value:c.secret,onChange:e=>i("secret",e)}))))}var mt;function dt(){a.useEffect((()=>{ne()}),[]);const e=[{path:"/proxies",name:"Proxies",component:Xe},{path:"/logs",name:"Logs",component:Je},{path:"/rules",name:"Rules",component:qe,noMobile:!0},{path:"/connections",name:"Connections",component:it,noMobile:!0},{path:"/settings",name:"Settings",component:Ze}];return a.createElement("div",{className:s("app",{"not-clashx":!S()})},a.createElement(nt,{routes:e}),a.createElement("div",{className:"page-container"},a.createElement(N,{exact:!0,path:"/",component:()=>a.createElement(C,{to:"/proxies"})}),e.map((e=>a.createElement(N,{exact:!1,path:e.path,key:e.path,component:e.component})))),a.createElement(ut,null))}function pt(){const e=document.getElementById("root"),t=a.createElement(k,null,a.createElement(P,null,a.createElement(dt,null)));d.render(t,e)}S()?(mt=()=>pt(),T?mt():T=new L(mt)):pt(); diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.5dfcf857.css b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.5dfcf857.css new file mode 100644 index 0000000000..816b81d0de --- /dev/null +++ b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.5dfcf857.css @@ -0,0 +1 @@ +@charset "UTF-8";.header{margin:10px 0;width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;user-select:none}.header>h1{flex-shrink:0;font-size:24px;color:#2c8af8;font-weight:500;text-shadow:0 2px 6px rgba(44,138,248,.4);line-height:32px}.operations{display:flex;flex:1;align-items:center;justify-content:flex-end}@media (max-width:768px){.header>h1{font-size:20px}}.switch{display:inline-block;width:32px;height:16px;border-radius:8px;background-color:#d8dee2;transition:background-color .3s ease;position:relative;cursor:pointer}.switch.checked{background-color:#57befc}.switch.checked::after{transform:translateX(16px)}.switch.disabled{cursor:not-allowed;background-color:#b7c5d6}.switch.disabled::after{background-color:#e4eaef;box-shadow:0 0 8px rgba(144,147,153,.5)}.switch.checked.disabled{background-color:#e4eaef}.switch::after{content:"";position:absolute;top:-1px;height:18px;width:18px;border-radius:9px;background-color:#fff;box-shadow:0 0 8px rgba(44,138,248,.4);transition:transform .3s ease;transform:translateX(-2px)}.switch-icon{position:absolute;transform:translateX(-1px) scale(.4);color:#fff;line-height:16px}.card{padding:15px;box-shadow:2px 5px 20px -3px rgba(44,138,248,.18);background-color:#fff;border-radius:4px}.row{width:100%;display:flex;flex-direction:row}.row-gutter-1{padding:12px 6px}.row-gutter-1 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-1 .column-span-1{width:100%}.row-gutter-1 .column-offset-1{margin-left:100%}.row-gutter-1 .column-span-2{width:200%}.row-gutter-1 .column-offset-2{margin-left:200%}.row-gutter-1 .column-span-3{width:300%}.row-gutter-1 .column-offset-3{margin-left:300%}.row-gutter-1 .column-span-4{width:400%}.row-gutter-1 .column-offset-4{margin-left:400%}.row-gutter-1 .column-span-5{width:500%}.row-gutter-1 .column-offset-5{margin-left:500%}.row-gutter-1 .column-span-6{width:600%}.row-gutter-1 .column-offset-6{margin-left:600%}.row-gutter-1 .column-span-7{width:700%}.row-gutter-1 .column-offset-7{margin-left:700%}.row-gutter-1 .column-span-8{width:800%}.row-gutter-1 .column-offset-8{margin-left:800%}.row-gutter-1 .column-span-9{width:900%}.row-gutter-1 .column-offset-9{margin-left:900%}.row-gutter-1 .column-span-10{width:1000%}.row-gutter-1 .column-offset-10{margin-left:1000%}.row-gutter-1 .column-span-11{width:1100%}.row-gutter-1 .column-offset-11{margin-left:1100%}.row-gutter-1 .column-span-12{width:1200%}.row-gutter-1 .column-offset-12{margin-left:1200%}.row-gutter-1 .column-span-13{width:1300%}.row-gutter-1 .column-offset-13{margin-left:1300%}.row-gutter-1 .column-span-14{width:1400%}.row-gutter-1 .column-offset-14{margin-left:1400%}.row-gutter-1 .column-span-15{width:1500%}.row-gutter-1 .column-offset-15{margin-left:1500%}.row-gutter-1 .column-span-16{width:1600%}.row-gutter-1 .column-offset-16{margin-left:1600%}.row-gutter-1 .column-span-17{width:1700%}.row-gutter-1 .column-offset-17{margin-left:1700%}.row-gutter-1 .column-span-18{width:1800%}.row-gutter-1 .column-offset-18{margin-left:1800%}.row-gutter-1 .column-span-19{width:1900%}.row-gutter-1 .column-offset-19{margin-left:1900%}.row-gutter-1 .column-span-20{width:2000%}.row-gutter-1 .column-offset-20{margin-left:2000%}.row-gutter-1 .column-span-21{width:2100%}.row-gutter-1 .column-offset-21{margin-left:2100%}.row-gutter-1 .column-span-22{width:2200%}.row-gutter-1 .column-offset-22{margin-left:2200%}.row-gutter-1 .column-span-23{width:2300%}.row-gutter-1 .column-offset-23{margin-left:2300%}.row-gutter-1 .column-span-24{width:2400%}.row-gutter-1 .column-offset-24{margin-left:2400%}.row-gutter-2{padding:12px 6px}.row-gutter-2 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-2 .column-span-1{width:50%}.row-gutter-2 .column-offset-1{margin-left:50%}.row-gutter-2 .column-span-2{width:100%}.row-gutter-2 .column-offset-2{margin-left:100%}.row-gutter-2 .column-span-3{width:150%}.row-gutter-2 .column-offset-3{margin-left:150%}.row-gutter-2 .column-span-4{width:200%}.row-gutter-2 .column-offset-4{margin-left:200%}.row-gutter-2 .column-span-5{width:250%}.row-gutter-2 .column-offset-5{margin-left:250%}.row-gutter-2 .column-span-6{width:300%}.row-gutter-2 .column-offset-6{margin-left:300%}.row-gutter-2 .column-span-7{width:350%}.row-gutter-2 .column-offset-7{margin-left:350%}.row-gutter-2 .column-span-8{width:400%}.row-gutter-2 .column-offset-8{margin-left:400%}.row-gutter-2 .column-span-9{width:450%}.row-gutter-2 .column-offset-9{margin-left:450%}.row-gutter-2 .column-span-10{width:500%}.row-gutter-2 .column-offset-10{margin-left:500%}.row-gutter-2 .column-span-11{width:550%}.row-gutter-2 .column-offset-11{margin-left:550%}.row-gutter-2 .column-span-12{width:600%}.row-gutter-2 .column-offset-12{margin-left:600%}.row-gutter-2 .column-span-13{width:650%}.row-gutter-2 .column-offset-13{margin-left:650%}.row-gutter-2 .column-span-14{width:700%}.row-gutter-2 .column-offset-14{margin-left:700%}.row-gutter-2 .column-span-15{width:750%}.row-gutter-2 .column-offset-15{margin-left:750%}.row-gutter-2 .column-span-16{width:800%}.row-gutter-2 .column-offset-16{margin-left:800%}.row-gutter-2 .column-span-17{width:850%}.row-gutter-2 .column-offset-17{margin-left:850%}.row-gutter-2 .column-span-18{width:900%}.row-gutter-2 .column-offset-18{margin-left:900%}.row-gutter-2 .column-span-19{width:950%}.row-gutter-2 .column-offset-19{margin-left:950%}.row-gutter-2 .column-span-20{width:1000%}.row-gutter-2 .column-offset-20{margin-left:1000%}.row-gutter-2 .column-span-21{width:1050%}.row-gutter-2 .column-offset-21{margin-left:1050%}.row-gutter-2 .column-span-22{width:1100%}.row-gutter-2 .column-offset-22{margin-left:1100%}.row-gutter-2 .column-span-23{width:1150%}.row-gutter-2 .column-offset-23{margin-left:1150%}.row-gutter-2 .column-span-24{width:1200%}.row-gutter-2 .column-offset-24{margin-left:1200%}.row-gutter-3{padding:12px 6px}.row-gutter-3 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-3 .column-span-1{width:33.3333333333%}.row-gutter-3 .column-offset-1{margin-left:33.3333333333%}.row-gutter-3 .column-span-2{width:66.6666666667%}.row-gutter-3 .column-offset-2{margin-left:66.6666666667%}.row-gutter-3 .column-span-3{width:100%}.row-gutter-3 .column-offset-3{margin-left:100%}.row-gutter-3 .column-span-4{width:133.3333333333%}.row-gutter-3 .column-offset-4{margin-left:133.3333333333%}.row-gutter-3 .column-span-5{width:166.6666666667%}.row-gutter-3 .column-offset-5{margin-left:166.6666666667%}.row-gutter-3 .column-span-6{width:200%}.row-gutter-3 .column-offset-6{margin-left:200%}.row-gutter-3 .column-span-7{width:233.3333333333%}.row-gutter-3 .column-offset-7{margin-left:233.3333333333%}.row-gutter-3 .column-span-8{width:266.6666666667%}.row-gutter-3 .column-offset-8{margin-left:266.6666666667%}.row-gutter-3 .column-span-9{width:300%}.row-gutter-3 .column-offset-9{margin-left:300%}.row-gutter-3 .column-span-10{width:333.3333333333%}.row-gutter-3 .column-offset-10{margin-left:333.3333333333%}.row-gutter-3 .column-span-11{width:366.6666666667%}.row-gutter-3 .column-offset-11{margin-left:366.6666666667%}.row-gutter-3 .column-span-12{width:400%}.row-gutter-3 .column-offset-12{margin-left:400%}.row-gutter-3 .column-span-13{width:433.3333333333%}.row-gutter-3 .column-offset-13{margin-left:433.3333333333%}.row-gutter-3 .column-span-14{width:466.6666666667%}.row-gutter-3 .column-offset-14{margin-left:466.6666666667%}.row-gutter-3 .column-span-15{width:500%}.row-gutter-3 .column-offset-15{margin-left:500%}.row-gutter-3 .column-span-16{width:533.3333333333%}.row-gutter-3 .column-offset-16{margin-left:533.3333333333%}.row-gutter-3 .column-span-17{width:566.6666666667%}.row-gutter-3 .column-offset-17{margin-left:566.6666666667%}.row-gutter-3 .column-span-18{width:600%}.row-gutter-3 .column-offset-18{margin-left:600%}.row-gutter-3 .column-span-19{width:633.3333333333%}.row-gutter-3 .column-offset-19{margin-left:633.3333333333%}.row-gutter-3 .column-span-20{width:666.6666666667%}.row-gutter-3 .column-offset-20{margin-left:666.6666666667%}.row-gutter-3 .column-span-21{width:700%}.row-gutter-3 .column-offset-21{margin-left:700%}.row-gutter-3 .column-span-22{width:733.3333333333%}.row-gutter-3 .column-offset-22{margin-left:733.3333333333%}.row-gutter-3 .column-span-23{width:766.6666666667%}.row-gutter-3 .column-offset-23{margin-left:766.6666666667%}.row-gutter-3 .column-span-24{width:800%}.row-gutter-3 .column-offset-24{margin-left:800%}.row-gutter-4{padding:12px 6px}.row-gutter-4 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-4 .column-span-1{width:25%}.row-gutter-4 .column-offset-1{margin-left:25%}.row-gutter-4 .column-span-2{width:50%}.row-gutter-4 .column-offset-2{margin-left:50%}.row-gutter-4 .column-span-3{width:75%}.row-gutter-4 .column-offset-3{margin-left:75%}.row-gutter-4 .column-span-4{width:100%}.row-gutter-4 .column-offset-4{margin-left:100%}.row-gutter-4 .column-span-5{width:125%}.row-gutter-4 .column-offset-5{margin-left:125%}.row-gutter-4 .column-span-6{width:150%}.row-gutter-4 .column-offset-6{margin-left:150%}.row-gutter-4 .column-span-7{width:175%}.row-gutter-4 .column-offset-7{margin-left:175%}.row-gutter-4 .column-span-8{width:200%}.row-gutter-4 .column-offset-8{margin-left:200%}.row-gutter-4 .column-span-9{width:225%}.row-gutter-4 .column-offset-9{margin-left:225%}.row-gutter-4 .column-span-10{width:250%}.row-gutter-4 .column-offset-10{margin-left:250%}.row-gutter-4 .column-span-11{width:275%}.row-gutter-4 .column-offset-11{margin-left:275%}.row-gutter-4 .column-span-12{width:300%}.row-gutter-4 .column-offset-12{margin-left:300%}.row-gutter-4 .column-span-13{width:325%}.row-gutter-4 .column-offset-13{margin-left:325%}.row-gutter-4 .column-span-14{width:350%}.row-gutter-4 .column-offset-14{margin-left:350%}.row-gutter-4 .column-span-15{width:375%}.row-gutter-4 .column-offset-15{margin-left:375%}.row-gutter-4 .column-span-16{width:400%}.row-gutter-4 .column-offset-16{margin-left:400%}.row-gutter-4 .column-span-17{width:425%}.row-gutter-4 .column-offset-17{margin-left:425%}.row-gutter-4 .column-span-18{width:450%}.row-gutter-4 .column-offset-18{margin-left:450%}.row-gutter-4 .column-span-19{width:475%}.row-gutter-4 .column-offset-19{margin-left:475%}.row-gutter-4 .column-span-20{width:500%}.row-gutter-4 .column-offset-20{margin-left:500%}.row-gutter-4 .column-span-21{width:525%}.row-gutter-4 .column-offset-21{margin-left:525%}.row-gutter-4 .column-span-22{width:550%}.row-gutter-4 .column-offset-22{margin-left:550%}.row-gutter-4 .column-span-23{width:575%}.row-gutter-4 .column-offset-23{margin-left:575%}.row-gutter-4 .column-span-24{width:600%}.row-gutter-4 .column-offset-24{margin-left:600%}.row-gutter-5{padding:12px 6px}.row-gutter-5 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-5 .column-span-1{width:20%}.row-gutter-5 .column-offset-1{margin-left:20%}.row-gutter-5 .column-span-2{width:40%}.row-gutter-5 .column-offset-2{margin-left:40%}.row-gutter-5 .column-span-3{width:60%}.row-gutter-5 .column-offset-3{margin-left:60%}.row-gutter-5 .column-span-4{width:80%}.row-gutter-5 .column-offset-4{margin-left:80%}.row-gutter-5 .column-span-5{width:100%}.row-gutter-5 .column-offset-5{margin-left:100%}.row-gutter-5 .column-span-6{width:120%}.row-gutter-5 .column-offset-6{margin-left:120%}.row-gutter-5 .column-span-7{width:140%}.row-gutter-5 .column-offset-7{margin-left:140%}.row-gutter-5 .column-span-8{width:160%}.row-gutter-5 .column-offset-8{margin-left:160%}.row-gutter-5 .column-span-9{width:180%}.row-gutter-5 .column-offset-9{margin-left:180%}.row-gutter-5 .column-span-10{width:200%}.row-gutter-5 .column-offset-10{margin-left:200%}.row-gutter-5 .column-span-11{width:220%}.row-gutter-5 .column-offset-11{margin-left:220%}.row-gutter-5 .column-span-12{width:240%}.row-gutter-5 .column-offset-12{margin-left:240%}.row-gutter-5 .column-span-13{width:260%}.row-gutter-5 .column-offset-13{margin-left:260%}.row-gutter-5 .column-span-14{width:280%}.row-gutter-5 .column-offset-14{margin-left:280%}.row-gutter-5 .column-span-15{width:300%}.row-gutter-5 .column-offset-15{margin-left:300%}.row-gutter-5 .column-span-16{width:320%}.row-gutter-5 .column-offset-16{margin-left:320%}.row-gutter-5 .column-span-17{width:340%}.row-gutter-5 .column-offset-17{margin-left:340%}.row-gutter-5 .column-span-18{width:360%}.row-gutter-5 .column-offset-18{margin-left:360%}.row-gutter-5 .column-span-19{width:380%}.row-gutter-5 .column-offset-19{margin-left:380%}.row-gutter-5 .column-span-20{width:400%}.row-gutter-5 .column-offset-20{margin-left:400%}.row-gutter-5 .column-span-21{width:420%}.row-gutter-5 .column-offset-21{margin-left:420%}.row-gutter-5 .column-span-22{width:440%}.row-gutter-5 .column-offset-22{margin-left:440%}.row-gutter-5 .column-span-23{width:460%}.row-gutter-5 .column-offset-23{margin-left:460%}.row-gutter-5 .column-span-24{width:480%}.row-gutter-5 .column-offset-24{margin-left:480%}.row-gutter-6{padding:12px 6px}.row-gutter-6 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-6 .column-span-1{width:16.6666666667%}.row-gutter-6 .column-offset-1{margin-left:16.6666666667%}.row-gutter-6 .column-span-2{width:33.3333333333%}.row-gutter-6 .column-offset-2{margin-left:33.3333333333%}.row-gutter-6 .column-span-3{width:50%}.row-gutter-6 .column-offset-3{margin-left:50%}.row-gutter-6 .column-span-4{width:66.6666666667%}.row-gutter-6 .column-offset-4{margin-left:66.6666666667%}.row-gutter-6 .column-span-5{width:83.3333333333%}.row-gutter-6 .column-offset-5{margin-left:83.3333333333%}.row-gutter-6 .column-span-6{width:100%}.row-gutter-6 .column-offset-6{margin-left:100%}.row-gutter-6 .column-span-7{width:116.6666666667%}.row-gutter-6 .column-offset-7{margin-left:116.6666666667%}.row-gutter-6 .column-span-8{width:133.3333333333%}.row-gutter-6 .column-offset-8{margin-left:133.3333333333%}.row-gutter-6 .column-span-9{width:150%}.row-gutter-6 .column-offset-9{margin-left:150%}.row-gutter-6 .column-span-10{width:166.6666666667%}.row-gutter-6 .column-offset-10{margin-left:166.6666666667%}.row-gutter-6 .column-span-11{width:183.3333333333%}.row-gutter-6 .column-offset-11{margin-left:183.3333333333%}.row-gutter-6 .column-span-12{width:200%}.row-gutter-6 .column-offset-12{margin-left:200%}.row-gutter-6 .column-span-13{width:216.6666666667%}.row-gutter-6 .column-offset-13{margin-left:216.6666666667%}.row-gutter-6 .column-span-14{width:233.3333333333%}.row-gutter-6 .column-offset-14{margin-left:233.3333333333%}.row-gutter-6 .column-span-15{width:250%}.row-gutter-6 .column-offset-15{margin-left:250%}.row-gutter-6 .column-span-16{width:266.6666666667%}.row-gutter-6 .column-offset-16{margin-left:266.6666666667%}.row-gutter-6 .column-span-17{width:283.3333333333%}.row-gutter-6 .column-offset-17{margin-left:283.3333333333%}.row-gutter-6 .column-span-18{width:300%}.row-gutter-6 .column-offset-18{margin-left:300%}.row-gutter-6 .column-span-19{width:316.6666666667%}.row-gutter-6 .column-offset-19{margin-left:316.6666666667%}.row-gutter-6 .column-span-20{width:333.3333333333%}.row-gutter-6 .column-offset-20{margin-left:333.3333333333%}.row-gutter-6 .column-span-21{width:350%}.row-gutter-6 .column-offset-21{margin-left:350%}.row-gutter-6 .column-span-22{width:366.6666666667%}.row-gutter-6 .column-offset-22{margin-left:366.6666666667%}.row-gutter-6 .column-span-23{width:383.3333333333%}.row-gutter-6 .column-offset-23{margin-left:383.3333333333%}.row-gutter-6 .column-span-24{width:400%}.row-gutter-6 .column-offset-24{margin-left:400%}.row-gutter-7{padding:12px 6px}.row-gutter-7 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-7 .column-span-1{width:14.2857142857%}.row-gutter-7 .column-offset-1{margin-left:14.2857142857%}.row-gutter-7 .column-span-2{width:28.5714285714%}.row-gutter-7 .column-offset-2{margin-left:28.5714285714%}.row-gutter-7 .column-span-3{width:42.8571428571%}.row-gutter-7 .column-offset-3{margin-left:42.8571428571%}.row-gutter-7 .column-span-4{width:57.1428571429%}.row-gutter-7 .column-offset-4{margin-left:57.1428571429%}.row-gutter-7 .column-span-5{width:71.4285714286%}.row-gutter-7 .column-offset-5{margin-left:71.4285714286%}.row-gutter-7 .column-span-6{width:85.7142857143%}.row-gutter-7 .column-offset-6{margin-left:85.7142857143%}.row-gutter-7 .column-span-7{width:100%}.row-gutter-7 .column-offset-7{margin-left:100%}.row-gutter-7 .column-span-8{width:114.2857142857%}.row-gutter-7 .column-offset-8{margin-left:114.2857142857%}.row-gutter-7 .column-span-9{width:128.5714285714%}.row-gutter-7 .column-offset-9{margin-left:128.5714285714%}.row-gutter-7 .column-span-10{width:142.8571428571%}.row-gutter-7 .column-offset-10{margin-left:142.8571428571%}.row-gutter-7 .column-span-11{width:157.1428571429%}.row-gutter-7 .column-offset-11{margin-left:157.1428571429%}.row-gutter-7 .column-span-12{width:171.4285714286%}.row-gutter-7 .column-offset-12{margin-left:171.4285714286%}.row-gutter-7 .column-span-13{width:185.7142857143%}.row-gutter-7 .column-offset-13{margin-left:185.7142857143%}.row-gutter-7 .column-span-14{width:200%}.row-gutter-7 .column-offset-14{margin-left:200%}.row-gutter-7 .column-span-15{width:214.2857142857%}.row-gutter-7 .column-offset-15{margin-left:214.2857142857%}.row-gutter-7 .column-span-16{width:228.5714285714%}.row-gutter-7 .column-offset-16{margin-left:228.5714285714%}.row-gutter-7 .column-span-17{width:242.8571428571%}.row-gutter-7 .column-offset-17{margin-left:242.8571428571%}.row-gutter-7 .column-span-18{width:257.1428571429%}.row-gutter-7 .column-offset-18{margin-left:257.1428571429%}.row-gutter-7 .column-span-19{width:271.4285714286%}.row-gutter-7 .column-offset-19{margin-left:271.4285714286%}.row-gutter-7 .column-span-20{width:285.7142857143%}.row-gutter-7 .column-offset-20{margin-left:285.7142857143%}.row-gutter-7 .column-span-21{width:300%}.row-gutter-7 .column-offset-21{margin-left:300%}.row-gutter-7 .column-span-22{width:314.2857142857%}.row-gutter-7 .column-offset-22{margin-left:314.2857142857%}.row-gutter-7 .column-span-23{width:328.5714285714%}.row-gutter-7 .column-offset-23{margin-left:328.5714285714%}.row-gutter-7 .column-span-24{width:342.8571428571%}.row-gutter-7 .column-offset-24{margin-left:342.8571428571%}.row-gutter-8{padding:12px 6px}.row-gutter-8 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-8 .column-span-1{width:12.5%}.row-gutter-8 .column-offset-1{margin-left:12.5%}.row-gutter-8 .column-span-2{width:25%}.row-gutter-8 .column-offset-2{margin-left:25%}.row-gutter-8 .column-span-3{width:37.5%}.row-gutter-8 .column-offset-3{margin-left:37.5%}.row-gutter-8 .column-span-4{width:50%}.row-gutter-8 .column-offset-4{margin-left:50%}.row-gutter-8 .column-span-5{width:62.5%}.row-gutter-8 .column-offset-5{margin-left:62.5%}.row-gutter-8 .column-span-6{width:75%}.row-gutter-8 .column-offset-6{margin-left:75%}.row-gutter-8 .column-span-7{width:87.5%}.row-gutter-8 .column-offset-7{margin-left:87.5%}.row-gutter-8 .column-span-8{width:100%}.row-gutter-8 .column-offset-8{margin-left:100%}.row-gutter-8 .column-span-9{width:112.5%}.row-gutter-8 .column-offset-9{margin-left:112.5%}.row-gutter-8 .column-span-10{width:125%}.row-gutter-8 .column-offset-10{margin-left:125%}.row-gutter-8 .column-span-11{width:137.5%}.row-gutter-8 .column-offset-11{margin-left:137.5%}.row-gutter-8 .column-span-12{width:150%}.row-gutter-8 .column-offset-12{margin-left:150%}.row-gutter-8 .column-span-13{width:162.5%}.row-gutter-8 .column-offset-13{margin-left:162.5%}.row-gutter-8 .column-span-14{width:175%}.row-gutter-8 .column-offset-14{margin-left:175%}.row-gutter-8 .column-span-15{width:187.5%}.row-gutter-8 .column-offset-15{margin-left:187.5%}.row-gutter-8 .column-span-16{width:200%}.row-gutter-8 .column-offset-16{margin-left:200%}.row-gutter-8 .column-span-17{width:212.5%}.row-gutter-8 .column-offset-17{margin-left:212.5%}.row-gutter-8 .column-span-18{width:225%}.row-gutter-8 .column-offset-18{margin-left:225%}.row-gutter-8 .column-span-19{width:237.5%}.row-gutter-8 .column-offset-19{margin-left:237.5%}.row-gutter-8 .column-span-20{width:250%}.row-gutter-8 .column-offset-20{margin-left:250%}.row-gutter-8 .column-span-21{width:262.5%}.row-gutter-8 .column-offset-21{margin-left:262.5%}.row-gutter-8 .column-span-22{width:275%}.row-gutter-8 .column-offset-22{margin-left:275%}.row-gutter-8 .column-span-23{width:287.5%}.row-gutter-8 .column-offset-23{margin-left:287.5%}.row-gutter-8 .column-span-24{width:300%}.row-gutter-8 .column-offset-24{margin-left:300%}.row-gutter-9{padding:12px 6px}.row-gutter-9 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-9 .column-span-1{width:11.1111111111%}.row-gutter-9 .column-offset-1{margin-left:11.1111111111%}.row-gutter-9 .column-span-2{width:22.2222222222%}.row-gutter-9 .column-offset-2{margin-left:22.2222222222%}.row-gutter-9 .column-span-3{width:33.3333333333%}.row-gutter-9 .column-offset-3{margin-left:33.3333333333%}.row-gutter-9 .column-span-4{width:44.4444444444%}.row-gutter-9 .column-offset-4{margin-left:44.4444444444%}.row-gutter-9 .column-span-5{width:55.5555555556%}.row-gutter-9 .column-offset-5{margin-left:55.5555555556%}.row-gutter-9 .column-span-6{width:66.6666666667%}.row-gutter-9 .column-offset-6{margin-left:66.6666666667%}.row-gutter-9 .column-span-7{width:77.7777777778%}.row-gutter-9 .column-offset-7{margin-left:77.7777777778%}.row-gutter-9 .column-span-8{width:88.8888888889%}.row-gutter-9 .column-offset-8{margin-left:88.8888888889%}.row-gutter-9 .column-span-9{width:100%}.row-gutter-9 .column-offset-9{margin-left:100%}.row-gutter-9 .column-span-10{width:111.1111111111%}.row-gutter-9 .column-offset-10{margin-left:111.1111111111%}.row-gutter-9 .column-span-11{width:122.2222222222%}.row-gutter-9 .column-offset-11{margin-left:122.2222222222%}.row-gutter-9 .column-span-12{width:133.3333333333%}.row-gutter-9 .column-offset-12{margin-left:133.3333333333%}.row-gutter-9 .column-span-13{width:144.4444444444%}.row-gutter-9 .column-offset-13{margin-left:144.4444444444%}.row-gutter-9 .column-span-14{width:155.5555555556%}.row-gutter-9 .column-offset-14{margin-left:155.5555555556%}.row-gutter-9 .column-span-15{width:166.6666666667%}.row-gutter-9 .column-offset-15{margin-left:166.6666666667%}.row-gutter-9 .column-span-16{width:177.7777777778%}.row-gutter-9 .column-offset-16{margin-left:177.7777777778%}.row-gutter-9 .column-span-17{width:188.8888888889%}.row-gutter-9 .column-offset-17{margin-left:188.8888888889%}.row-gutter-9 .column-span-18{width:200%}.row-gutter-9 .column-offset-18{margin-left:200%}.row-gutter-9 .column-span-19{width:211.1111111111%}.row-gutter-9 .column-offset-19{margin-left:211.1111111111%}.row-gutter-9 .column-span-20{width:222.2222222222%}.row-gutter-9 .column-offset-20{margin-left:222.2222222222%}.row-gutter-9 .column-span-21{width:233.3333333333%}.row-gutter-9 .column-offset-21{margin-left:233.3333333333%}.row-gutter-9 .column-span-22{width:244.4444444444%}.row-gutter-9 .column-offset-22{margin-left:244.4444444444%}.row-gutter-9 .column-span-23{width:255.5555555556%}.row-gutter-9 .column-offset-23{margin-left:255.5555555556%}.row-gutter-9 .column-span-24{width:266.6666666667%}.row-gutter-9 .column-offset-24{margin-left:266.6666666667%}.row-gutter-10{padding:12px 6px}.row-gutter-10 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-10 .column-span-1{width:10%}.row-gutter-10 .column-offset-1{margin-left:10%}.row-gutter-10 .column-span-2{width:20%}.row-gutter-10 .column-offset-2{margin-left:20%}.row-gutter-10 .column-span-3{width:30%}.row-gutter-10 .column-offset-3{margin-left:30%}.row-gutter-10 .column-span-4{width:40%}.row-gutter-10 .column-offset-4{margin-left:40%}.row-gutter-10 .column-span-5{width:50%}.row-gutter-10 .column-offset-5{margin-left:50%}.row-gutter-10 .column-span-6{width:60%}.row-gutter-10 .column-offset-6{margin-left:60%}.row-gutter-10 .column-span-7{width:70%}.row-gutter-10 .column-offset-7{margin-left:70%}.row-gutter-10 .column-span-8{width:80%}.row-gutter-10 .column-offset-8{margin-left:80%}.row-gutter-10 .column-span-9{width:90%}.row-gutter-10 .column-offset-9{margin-left:90%}.row-gutter-10 .column-span-10{width:100%}.row-gutter-10 .column-offset-10{margin-left:100%}.row-gutter-10 .column-span-11{width:110%}.row-gutter-10 .column-offset-11{margin-left:110%}.row-gutter-10 .column-span-12{width:120%}.row-gutter-10 .column-offset-12{margin-left:120%}.row-gutter-10 .column-span-13{width:130%}.row-gutter-10 .column-offset-13{margin-left:130%}.row-gutter-10 .column-span-14{width:140%}.row-gutter-10 .column-offset-14{margin-left:140%}.row-gutter-10 .column-span-15{width:150%}.row-gutter-10 .column-offset-15{margin-left:150%}.row-gutter-10 .column-span-16{width:160%}.row-gutter-10 .column-offset-16{margin-left:160%}.row-gutter-10 .column-span-17{width:170%}.row-gutter-10 .column-offset-17{margin-left:170%}.row-gutter-10 .column-span-18{width:180%}.row-gutter-10 .column-offset-18{margin-left:180%}.row-gutter-10 .column-span-19{width:190%}.row-gutter-10 .column-offset-19{margin-left:190%}.row-gutter-10 .column-span-20{width:200%}.row-gutter-10 .column-offset-20{margin-left:200%}.row-gutter-10 .column-span-21{width:210%}.row-gutter-10 .column-offset-21{margin-left:210%}.row-gutter-10 .column-span-22{width:220%}.row-gutter-10 .column-offset-22{margin-left:220%}.row-gutter-10 .column-span-23{width:230%}.row-gutter-10 .column-offset-23{margin-left:230%}.row-gutter-10 .column-span-24{width:240%}.row-gutter-10 .column-offset-24{margin-left:240%}.row-gutter-11{padding:12px 6px}.row-gutter-11 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-11 .column-span-1{width:9.0909090909%}.row-gutter-11 .column-offset-1{margin-left:9.0909090909%}.row-gutter-11 .column-span-2{width:18.1818181818%}.row-gutter-11 .column-offset-2{margin-left:18.1818181818%}.row-gutter-11 .column-span-3{width:27.2727272727%}.row-gutter-11 .column-offset-3{margin-left:27.2727272727%}.row-gutter-11 .column-span-4{width:36.3636363636%}.row-gutter-11 .column-offset-4{margin-left:36.3636363636%}.row-gutter-11 .column-span-5{width:45.4545454545%}.row-gutter-11 .column-offset-5{margin-left:45.4545454545%}.row-gutter-11 .column-span-6{width:54.5454545455%}.row-gutter-11 .column-offset-6{margin-left:54.5454545455%}.row-gutter-11 .column-span-7{width:63.6363636364%}.row-gutter-11 .column-offset-7{margin-left:63.6363636364%}.row-gutter-11 .column-span-8{width:72.7272727273%}.row-gutter-11 .column-offset-8{margin-left:72.7272727273%}.row-gutter-11 .column-span-9{width:81.8181818182%}.row-gutter-11 .column-offset-9{margin-left:81.8181818182%}.row-gutter-11 .column-span-10{width:90.9090909091%}.row-gutter-11 .column-offset-10{margin-left:90.9090909091%}.row-gutter-11 .column-span-11{width:100%}.row-gutter-11 .column-offset-11{margin-left:100%}.row-gutter-11 .column-span-12{width:109.0909090909%}.row-gutter-11 .column-offset-12{margin-left:109.0909090909%}.row-gutter-11 .column-span-13{width:118.1818181818%}.row-gutter-11 .column-offset-13{margin-left:118.1818181818%}.row-gutter-11 .column-span-14{width:127.2727272727%}.row-gutter-11 .column-offset-14{margin-left:127.2727272727%}.row-gutter-11 .column-span-15{width:136.3636363636%}.row-gutter-11 .column-offset-15{margin-left:136.3636363636%}.row-gutter-11 .column-span-16{width:145.4545454545%}.row-gutter-11 .column-offset-16{margin-left:145.4545454545%}.row-gutter-11 .column-span-17{width:154.5454545455%}.row-gutter-11 .column-offset-17{margin-left:154.5454545455%}.row-gutter-11 .column-span-18{width:163.6363636364%}.row-gutter-11 .column-offset-18{margin-left:163.6363636364%}.row-gutter-11 .column-span-19{width:172.7272727273%}.row-gutter-11 .column-offset-19{margin-left:172.7272727273%}.row-gutter-11 .column-span-20{width:181.8181818182%}.row-gutter-11 .column-offset-20{margin-left:181.8181818182%}.row-gutter-11 .column-span-21{width:190.9090909091%}.row-gutter-11 .column-offset-21{margin-left:190.9090909091%}.row-gutter-11 .column-span-22{width:200%}.row-gutter-11 .column-offset-22{margin-left:200%}.row-gutter-11 .column-span-23{width:209.0909090909%}.row-gutter-11 .column-offset-23{margin-left:209.0909090909%}.row-gutter-11 .column-span-24{width:218.1818181818%}.row-gutter-11 .column-offset-24{margin-left:218.1818181818%}.row-gutter-12{padding:12px 6px}.row-gutter-12 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-12 .column-span-1{width:8.3333333333%}.row-gutter-12 .column-offset-1{margin-left:8.3333333333%}.row-gutter-12 .column-span-2{width:16.6666666667%}.row-gutter-12 .column-offset-2{margin-left:16.6666666667%}.row-gutter-12 .column-span-3{width:25%}.row-gutter-12 .column-offset-3{margin-left:25%}.row-gutter-12 .column-span-4{width:33.3333333333%}.row-gutter-12 .column-offset-4{margin-left:33.3333333333%}.row-gutter-12 .column-span-5{width:41.6666666667%}.row-gutter-12 .column-offset-5{margin-left:41.6666666667%}.row-gutter-12 .column-span-6{width:50%}.row-gutter-12 .column-offset-6{margin-left:50%}.row-gutter-12 .column-span-7{width:58.3333333333%}.row-gutter-12 .column-offset-7{margin-left:58.3333333333%}.row-gutter-12 .column-span-8{width:66.6666666667%}.row-gutter-12 .column-offset-8{margin-left:66.6666666667%}.row-gutter-12 .column-span-9{width:75%}.row-gutter-12 .column-offset-9{margin-left:75%}.row-gutter-12 .column-span-10{width:83.3333333333%}.row-gutter-12 .column-offset-10{margin-left:83.3333333333%}.row-gutter-12 .column-span-11{width:91.6666666667%}.row-gutter-12 .column-offset-11{margin-left:91.6666666667%}.row-gutter-12 .column-span-12{width:100%}.row-gutter-12 .column-offset-12{margin-left:100%}.row-gutter-12 .column-span-13{width:108.3333333333%}.row-gutter-12 .column-offset-13{margin-left:108.3333333333%}.row-gutter-12 .column-span-14{width:116.6666666667%}.row-gutter-12 .column-offset-14{margin-left:116.6666666667%}.row-gutter-12 .column-span-15{width:125%}.row-gutter-12 .column-offset-15{margin-left:125%}.row-gutter-12 .column-span-16{width:133.3333333333%}.row-gutter-12 .column-offset-16{margin-left:133.3333333333%}.row-gutter-12 .column-span-17{width:141.6666666667%}.row-gutter-12 .column-offset-17{margin-left:141.6666666667%}.row-gutter-12 .column-span-18{width:150%}.row-gutter-12 .column-offset-18{margin-left:150%}.row-gutter-12 .column-span-19{width:158.3333333333%}.row-gutter-12 .column-offset-19{margin-left:158.3333333333%}.row-gutter-12 .column-span-20{width:166.6666666667%}.row-gutter-12 .column-offset-20{margin-left:166.6666666667%}.row-gutter-12 .column-span-21{width:175%}.row-gutter-12 .column-offset-21{margin-left:175%}.row-gutter-12 .column-span-22{width:183.3333333333%}.row-gutter-12 .column-offset-22{margin-left:183.3333333333%}.row-gutter-12 .column-span-23{width:191.6666666667%}.row-gutter-12 .column-offset-23{margin-left:191.6666666667%}.row-gutter-12 .column-span-24{width:200%}.row-gutter-12 .column-offset-24{margin-left:200%}.row-gutter-13{padding:12px 6px}.row-gutter-13 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-13 .column-span-1{width:7.6923076923%}.row-gutter-13 .column-offset-1{margin-left:7.6923076923%}.row-gutter-13 .column-span-2{width:15.3846153846%}.row-gutter-13 .column-offset-2{margin-left:15.3846153846%}.row-gutter-13 .column-span-3{width:23.0769230769%}.row-gutter-13 .column-offset-3{margin-left:23.0769230769%}.row-gutter-13 .column-span-4{width:30.7692307692%}.row-gutter-13 .column-offset-4{margin-left:30.7692307692%}.row-gutter-13 .column-span-5{width:38.4615384615%}.row-gutter-13 .column-offset-5{margin-left:38.4615384615%}.row-gutter-13 .column-span-6{width:46.1538461538%}.row-gutter-13 .column-offset-6{margin-left:46.1538461538%}.row-gutter-13 .column-span-7{width:53.8461538462%}.row-gutter-13 .column-offset-7{margin-left:53.8461538462%}.row-gutter-13 .column-span-8{width:61.5384615385%}.row-gutter-13 .column-offset-8{margin-left:61.5384615385%}.row-gutter-13 .column-span-9{width:69.2307692308%}.row-gutter-13 .column-offset-9{margin-left:69.2307692308%}.row-gutter-13 .column-span-10{width:76.9230769231%}.row-gutter-13 .column-offset-10{margin-left:76.9230769231%}.row-gutter-13 .column-span-11{width:84.6153846154%}.row-gutter-13 .column-offset-11{margin-left:84.6153846154%}.row-gutter-13 .column-span-12{width:92.3076923077%}.row-gutter-13 .column-offset-12{margin-left:92.3076923077%}.row-gutter-13 .column-span-13{width:100%}.row-gutter-13 .column-offset-13{margin-left:100%}.row-gutter-13 .column-span-14{width:107.6923076923%}.row-gutter-13 .column-offset-14{margin-left:107.6923076923%}.row-gutter-13 .column-span-15{width:115.3846153846%}.row-gutter-13 .column-offset-15{margin-left:115.3846153846%}.row-gutter-13 .column-span-16{width:123.0769230769%}.row-gutter-13 .column-offset-16{margin-left:123.0769230769%}.row-gutter-13 .column-span-17{width:130.7692307692%}.row-gutter-13 .column-offset-17{margin-left:130.7692307692%}.row-gutter-13 .column-span-18{width:138.4615384615%}.row-gutter-13 .column-offset-18{margin-left:138.4615384615%}.row-gutter-13 .column-span-19{width:146.1538461538%}.row-gutter-13 .column-offset-19{margin-left:146.1538461538%}.row-gutter-13 .column-span-20{width:153.8461538462%}.row-gutter-13 .column-offset-20{margin-left:153.8461538462%}.row-gutter-13 .column-span-21{width:161.5384615385%}.row-gutter-13 .column-offset-21{margin-left:161.5384615385%}.row-gutter-13 .column-span-22{width:169.2307692308%}.row-gutter-13 .column-offset-22{margin-left:169.2307692308%}.row-gutter-13 .column-span-23{width:176.9230769231%}.row-gutter-13 .column-offset-23{margin-left:176.9230769231%}.row-gutter-13 .column-span-24{width:184.6153846154%}.row-gutter-13 .column-offset-24{margin-left:184.6153846154%}.row-gutter-14{padding:12px 6px}.row-gutter-14 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-14 .column-span-1{width:7.1428571429%}.row-gutter-14 .column-offset-1{margin-left:7.1428571429%}.row-gutter-14 .column-span-2{width:14.2857142857%}.row-gutter-14 .column-offset-2{margin-left:14.2857142857%}.row-gutter-14 .column-span-3{width:21.4285714286%}.row-gutter-14 .column-offset-3{margin-left:21.4285714286%}.row-gutter-14 .column-span-4{width:28.5714285714%}.row-gutter-14 .column-offset-4{margin-left:28.5714285714%}.row-gutter-14 .column-span-5{width:35.7142857143%}.row-gutter-14 .column-offset-5{margin-left:35.7142857143%}.row-gutter-14 .column-span-6{width:42.8571428571%}.row-gutter-14 .column-offset-6{margin-left:42.8571428571%}.row-gutter-14 .column-span-7{width:50%}.row-gutter-14 .column-offset-7{margin-left:50%}.row-gutter-14 .column-span-8{width:57.1428571429%}.row-gutter-14 .column-offset-8{margin-left:57.1428571429%}.row-gutter-14 .column-span-9{width:64.2857142857%}.row-gutter-14 .column-offset-9{margin-left:64.2857142857%}.row-gutter-14 .column-span-10{width:71.4285714286%}.row-gutter-14 .column-offset-10{margin-left:71.4285714286%}.row-gutter-14 .column-span-11{width:78.5714285714%}.row-gutter-14 .column-offset-11{margin-left:78.5714285714%}.row-gutter-14 .column-span-12{width:85.7142857143%}.row-gutter-14 .column-offset-12{margin-left:85.7142857143%}.row-gutter-14 .column-span-13{width:92.8571428571%}.row-gutter-14 .column-offset-13{margin-left:92.8571428571%}.row-gutter-14 .column-span-14{width:100%}.row-gutter-14 .column-offset-14{margin-left:100%}.row-gutter-14 .column-span-15{width:107.1428571429%}.row-gutter-14 .column-offset-15{margin-left:107.1428571429%}.row-gutter-14 .column-span-16{width:114.2857142857%}.row-gutter-14 .column-offset-16{margin-left:114.2857142857%}.row-gutter-14 .column-span-17{width:121.4285714286%}.row-gutter-14 .column-offset-17{margin-left:121.4285714286%}.row-gutter-14 .column-span-18{width:128.5714285714%}.row-gutter-14 .column-offset-18{margin-left:128.5714285714%}.row-gutter-14 .column-span-19{width:135.7142857143%}.row-gutter-14 .column-offset-19{margin-left:135.7142857143%}.row-gutter-14 .column-span-20{width:142.8571428571%}.row-gutter-14 .column-offset-20{margin-left:142.8571428571%}.row-gutter-14 .column-span-21{width:150%}.row-gutter-14 .column-offset-21{margin-left:150%}.row-gutter-14 .column-span-22{width:157.1428571429%}.row-gutter-14 .column-offset-22{margin-left:157.1428571429%}.row-gutter-14 .column-span-23{width:164.2857142857%}.row-gutter-14 .column-offset-23{margin-left:164.2857142857%}.row-gutter-14 .column-span-24{width:171.4285714286%}.row-gutter-14 .column-offset-24{margin-left:171.4285714286%}.row-gutter-15{padding:12px 6px}.row-gutter-15 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-15 .column-span-1{width:6.6666666667%}.row-gutter-15 .column-offset-1{margin-left:6.6666666667%}.row-gutter-15 .column-span-2{width:13.3333333333%}.row-gutter-15 .column-offset-2{margin-left:13.3333333333%}.row-gutter-15 .column-span-3{width:20%}.row-gutter-15 .column-offset-3{margin-left:20%}.row-gutter-15 .column-span-4{width:26.6666666667%}.row-gutter-15 .column-offset-4{margin-left:26.6666666667%}.row-gutter-15 .column-span-5{width:33.3333333333%}.row-gutter-15 .column-offset-5{margin-left:33.3333333333%}.row-gutter-15 .column-span-6{width:40%}.row-gutter-15 .column-offset-6{margin-left:40%}.row-gutter-15 .column-span-7{width:46.6666666667%}.row-gutter-15 .column-offset-7{margin-left:46.6666666667%}.row-gutter-15 .column-span-8{width:53.3333333333%}.row-gutter-15 .column-offset-8{margin-left:53.3333333333%}.row-gutter-15 .column-span-9{width:60%}.row-gutter-15 .column-offset-9{margin-left:60%}.row-gutter-15 .column-span-10{width:66.6666666667%}.row-gutter-15 .column-offset-10{margin-left:66.6666666667%}.row-gutter-15 .column-span-11{width:73.3333333333%}.row-gutter-15 .column-offset-11{margin-left:73.3333333333%}.row-gutter-15 .column-span-12{width:80%}.row-gutter-15 .column-offset-12{margin-left:80%}.row-gutter-15 .column-span-13{width:86.6666666667%}.row-gutter-15 .column-offset-13{margin-left:86.6666666667%}.row-gutter-15 .column-span-14{width:93.3333333333%}.row-gutter-15 .column-offset-14{margin-left:93.3333333333%}.row-gutter-15 .column-span-15{width:100%}.row-gutter-15 .column-offset-15{margin-left:100%}.row-gutter-15 .column-span-16{width:106.6666666667%}.row-gutter-15 .column-offset-16{margin-left:106.6666666667%}.row-gutter-15 .column-span-17{width:113.3333333333%}.row-gutter-15 .column-offset-17{margin-left:113.3333333333%}.row-gutter-15 .column-span-18{width:120%}.row-gutter-15 .column-offset-18{margin-left:120%}.row-gutter-15 .column-span-19{width:126.6666666667%}.row-gutter-15 .column-offset-19{margin-left:126.6666666667%}.row-gutter-15 .column-span-20{width:133.3333333333%}.row-gutter-15 .column-offset-20{margin-left:133.3333333333%}.row-gutter-15 .column-span-21{width:140%}.row-gutter-15 .column-offset-21{margin-left:140%}.row-gutter-15 .column-span-22{width:146.6666666667%}.row-gutter-15 .column-offset-22{margin-left:146.6666666667%}.row-gutter-15 .column-span-23{width:153.3333333333%}.row-gutter-15 .column-offset-23{margin-left:153.3333333333%}.row-gutter-15 .column-span-24{width:160%}.row-gutter-15 .column-offset-24{margin-left:160%}.row-gutter-16{padding:12px 6px}.row-gutter-16 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-16 .column-span-1{width:6.25%}.row-gutter-16 .column-offset-1{margin-left:6.25%}.row-gutter-16 .column-span-2{width:12.5%}.row-gutter-16 .column-offset-2{margin-left:12.5%}.row-gutter-16 .column-span-3{width:18.75%}.row-gutter-16 .column-offset-3{margin-left:18.75%}.row-gutter-16 .column-span-4{width:25%}.row-gutter-16 .column-offset-4{margin-left:25%}.row-gutter-16 .column-span-5{width:31.25%}.row-gutter-16 .column-offset-5{margin-left:31.25%}.row-gutter-16 .column-span-6{width:37.5%}.row-gutter-16 .column-offset-6{margin-left:37.5%}.row-gutter-16 .column-span-7{width:43.75%}.row-gutter-16 .column-offset-7{margin-left:43.75%}.row-gutter-16 .column-span-8{width:50%}.row-gutter-16 .column-offset-8{margin-left:50%}.row-gutter-16 .column-span-9{width:56.25%}.row-gutter-16 .column-offset-9{margin-left:56.25%}.row-gutter-16 .column-span-10{width:62.5%}.row-gutter-16 .column-offset-10{margin-left:62.5%}.row-gutter-16 .column-span-11{width:68.75%}.row-gutter-16 .column-offset-11{margin-left:68.75%}.row-gutter-16 .column-span-12{width:75%}.row-gutter-16 .column-offset-12{margin-left:75%}.row-gutter-16 .column-span-13{width:81.25%}.row-gutter-16 .column-offset-13{margin-left:81.25%}.row-gutter-16 .column-span-14{width:87.5%}.row-gutter-16 .column-offset-14{margin-left:87.5%}.row-gutter-16 .column-span-15{width:93.75%}.row-gutter-16 .column-offset-15{margin-left:93.75%}.row-gutter-16 .column-span-16{width:100%}.row-gutter-16 .column-offset-16{margin-left:100%}.row-gutter-16 .column-span-17{width:106.25%}.row-gutter-16 .column-offset-17{margin-left:106.25%}.row-gutter-16 .column-span-18{width:112.5%}.row-gutter-16 .column-offset-18{margin-left:112.5%}.row-gutter-16 .column-span-19{width:118.75%}.row-gutter-16 .column-offset-19{margin-left:118.75%}.row-gutter-16 .column-span-20{width:125%}.row-gutter-16 .column-offset-20{margin-left:125%}.row-gutter-16 .column-span-21{width:131.25%}.row-gutter-16 .column-offset-21{margin-left:131.25%}.row-gutter-16 .column-span-22{width:137.5%}.row-gutter-16 .column-offset-22{margin-left:137.5%}.row-gutter-16 .column-span-23{width:143.75%}.row-gutter-16 .column-offset-23{margin-left:143.75%}.row-gutter-16 .column-span-24{width:150%}.row-gutter-16 .column-offset-24{margin-left:150%}.row-gutter-17{padding:12px 6px}.row-gutter-17 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-17 .column-span-1{width:5.8823529412%}.row-gutter-17 .column-offset-1{margin-left:5.8823529412%}.row-gutter-17 .column-span-2{width:11.7647058824%}.row-gutter-17 .column-offset-2{margin-left:11.7647058824%}.row-gutter-17 .column-span-3{width:17.6470588235%}.row-gutter-17 .column-offset-3{margin-left:17.6470588235%}.row-gutter-17 .column-span-4{width:23.5294117647%}.row-gutter-17 .column-offset-4{margin-left:23.5294117647%}.row-gutter-17 .column-span-5{width:29.4117647059%}.row-gutter-17 .column-offset-5{margin-left:29.4117647059%}.row-gutter-17 .column-span-6{width:35.2941176471%}.row-gutter-17 .column-offset-6{margin-left:35.2941176471%}.row-gutter-17 .column-span-7{width:41.1764705882%}.row-gutter-17 .column-offset-7{margin-left:41.1764705882%}.row-gutter-17 .column-span-8{width:47.0588235294%}.row-gutter-17 .column-offset-8{margin-left:47.0588235294%}.row-gutter-17 .column-span-9{width:52.9411764706%}.row-gutter-17 .column-offset-9{margin-left:52.9411764706%}.row-gutter-17 .column-span-10{width:58.8235294118%}.row-gutter-17 .column-offset-10{margin-left:58.8235294118%}.row-gutter-17 .column-span-11{width:64.7058823529%}.row-gutter-17 .column-offset-11{margin-left:64.7058823529%}.row-gutter-17 .column-span-12{width:70.5882352941%}.row-gutter-17 .column-offset-12{margin-left:70.5882352941%}.row-gutter-17 .column-span-13{width:76.4705882353%}.row-gutter-17 .column-offset-13{margin-left:76.4705882353%}.row-gutter-17 .column-span-14{width:82.3529411765%}.row-gutter-17 .column-offset-14{margin-left:82.3529411765%}.row-gutter-17 .column-span-15{width:88.2352941176%}.row-gutter-17 .column-offset-15{margin-left:88.2352941176%}.row-gutter-17 .column-span-16{width:94.1176470588%}.row-gutter-17 .column-offset-16{margin-left:94.1176470588%}.row-gutter-17 .column-span-17{width:100%}.row-gutter-17 .column-offset-17{margin-left:100%}.row-gutter-17 .column-span-18{width:105.8823529412%}.row-gutter-17 .column-offset-18{margin-left:105.8823529412%}.row-gutter-17 .column-span-19{width:111.7647058824%}.row-gutter-17 .column-offset-19{margin-left:111.7647058824%}.row-gutter-17 .column-span-20{width:117.6470588235%}.row-gutter-17 .column-offset-20{margin-left:117.6470588235%}.row-gutter-17 .column-span-21{width:123.5294117647%}.row-gutter-17 .column-offset-21{margin-left:123.5294117647%}.row-gutter-17 .column-span-22{width:129.4117647059%}.row-gutter-17 .column-offset-22{margin-left:129.4117647059%}.row-gutter-17 .column-span-23{width:135.2941176471%}.row-gutter-17 .column-offset-23{margin-left:135.2941176471%}.row-gutter-17 .column-span-24{width:141.1764705882%}.row-gutter-17 .column-offset-24{margin-left:141.1764705882%}.row-gutter-18{padding:12px 6px}.row-gutter-18 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-18 .column-span-1{width:5.5555555556%}.row-gutter-18 .column-offset-1{margin-left:5.5555555556%}.row-gutter-18 .column-span-2{width:11.1111111111%}.row-gutter-18 .column-offset-2{margin-left:11.1111111111%}.row-gutter-18 .column-span-3{width:16.6666666667%}.row-gutter-18 .column-offset-3{margin-left:16.6666666667%}.row-gutter-18 .column-span-4{width:22.2222222222%}.row-gutter-18 .column-offset-4{margin-left:22.2222222222%}.row-gutter-18 .column-span-5{width:27.7777777778%}.row-gutter-18 .column-offset-5{margin-left:27.7777777778%}.row-gutter-18 .column-span-6{width:33.3333333333%}.row-gutter-18 .column-offset-6{margin-left:33.3333333333%}.row-gutter-18 .column-span-7{width:38.8888888889%}.row-gutter-18 .column-offset-7{margin-left:38.8888888889%}.row-gutter-18 .column-span-8{width:44.4444444444%}.row-gutter-18 .column-offset-8{margin-left:44.4444444444%}.row-gutter-18 .column-span-9{width:50%}.row-gutter-18 .column-offset-9{margin-left:50%}.row-gutter-18 .column-span-10{width:55.5555555556%}.row-gutter-18 .column-offset-10{margin-left:55.5555555556%}.row-gutter-18 .column-span-11{width:61.1111111111%}.row-gutter-18 .column-offset-11{margin-left:61.1111111111%}.row-gutter-18 .column-span-12{width:66.6666666667%}.row-gutter-18 .column-offset-12{margin-left:66.6666666667%}.row-gutter-18 .column-span-13{width:72.2222222222%}.row-gutter-18 .column-offset-13{margin-left:72.2222222222%}.row-gutter-18 .column-span-14{width:77.7777777778%}.row-gutter-18 .column-offset-14{margin-left:77.7777777778%}.row-gutter-18 .column-span-15{width:83.3333333333%}.row-gutter-18 .column-offset-15{margin-left:83.3333333333%}.row-gutter-18 .column-span-16{width:88.8888888889%}.row-gutter-18 .column-offset-16{margin-left:88.8888888889%}.row-gutter-18 .column-span-17{width:94.4444444444%}.row-gutter-18 .column-offset-17{margin-left:94.4444444444%}.row-gutter-18 .column-span-18{width:100%}.row-gutter-18 .column-offset-18{margin-left:100%}.row-gutter-18 .column-span-19{width:105.5555555556%}.row-gutter-18 .column-offset-19{margin-left:105.5555555556%}.row-gutter-18 .column-span-20{width:111.1111111111%}.row-gutter-18 .column-offset-20{margin-left:111.1111111111%}.row-gutter-18 .column-span-21{width:116.6666666667%}.row-gutter-18 .column-offset-21{margin-left:116.6666666667%}.row-gutter-18 .column-span-22{width:122.2222222222%}.row-gutter-18 .column-offset-22{margin-left:122.2222222222%}.row-gutter-18 .column-span-23{width:127.7777777778%}.row-gutter-18 .column-offset-23{margin-left:127.7777777778%}.row-gutter-18 .column-span-24{width:133.3333333333%}.row-gutter-18 .column-offset-24{margin-left:133.3333333333%}.row-gutter-19{padding:12px 6px}.row-gutter-19 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-19 .column-span-1{width:5.2631578947%}.row-gutter-19 .column-offset-1{margin-left:5.2631578947%}.row-gutter-19 .column-span-2{width:10.5263157895%}.row-gutter-19 .column-offset-2{margin-left:10.5263157895%}.row-gutter-19 .column-span-3{width:15.7894736842%}.row-gutter-19 .column-offset-3{margin-left:15.7894736842%}.row-gutter-19 .column-span-4{width:21.0526315789%}.row-gutter-19 .column-offset-4{margin-left:21.0526315789%}.row-gutter-19 .column-span-5{width:26.3157894737%}.row-gutter-19 .column-offset-5{margin-left:26.3157894737%}.row-gutter-19 .column-span-6{width:31.5789473684%}.row-gutter-19 .column-offset-6{margin-left:31.5789473684%}.row-gutter-19 .column-span-7{width:36.8421052632%}.row-gutter-19 .column-offset-7{margin-left:36.8421052632%}.row-gutter-19 .column-span-8{width:42.1052631579%}.row-gutter-19 .column-offset-8{margin-left:42.1052631579%}.row-gutter-19 .column-span-9{width:47.3684210526%}.row-gutter-19 .column-offset-9{margin-left:47.3684210526%}.row-gutter-19 .column-span-10{width:52.6315789474%}.row-gutter-19 .column-offset-10{margin-left:52.6315789474%}.row-gutter-19 .column-span-11{width:57.8947368421%}.row-gutter-19 .column-offset-11{margin-left:57.8947368421%}.row-gutter-19 .column-span-12{width:63.1578947368%}.row-gutter-19 .column-offset-12{margin-left:63.1578947368%}.row-gutter-19 .column-span-13{width:68.4210526316%}.row-gutter-19 .column-offset-13{margin-left:68.4210526316%}.row-gutter-19 .column-span-14{width:73.6842105263%}.row-gutter-19 .column-offset-14{margin-left:73.6842105263%}.row-gutter-19 .column-span-15{width:78.9473684211%}.row-gutter-19 .column-offset-15{margin-left:78.9473684211%}.row-gutter-19 .column-span-16{width:84.2105263158%}.row-gutter-19 .column-offset-16{margin-left:84.2105263158%}.row-gutter-19 .column-span-17{width:89.4736842105%}.row-gutter-19 .column-offset-17{margin-left:89.4736842105%}.row-gutter-19 .column-span-18{width:94.7368421053%}.row-gutter-19 .column-offset-18{margin-left:94.7368421053%}.row-gutter-19 .column-span-19{width:100%}.row-gutter-19 .column-offset-19{margin-left:100%}.row-gutter-19 .column-span-20{width:105.2631578947%}.row-gutter-19 .column-offset-20{margin-left:105.2631578947%}.row-gutter-19 .column-span-21{width:110.5263157895%}.row-gutter-19 .column-offset-21{margin-left:110.5263157895%}.row-gutter-19 .column-span-22{width:115.7894736842%}.row-gutter-19 .column-offset-22{margin-left:115.7894736842%}.row-gutter-19 .column-span-23{width:121.0526315789%}.row-gutter-19 .column-offset-23{margin-left:121.0526315789%}.row-gutter-19 .column-span-24{width:126.3157894737%}.row-gutter-19 .column-offset-24{margin-left:126.3157894737%}.row-gutter-20{padding:12px 6px}.row-gutter-20 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-20 .column-span-1{width:5%}.row-gutter-20 .column-offset-1{margin-left:5%}.row-gutter-20 .column-span-2{width:10%}.row-gutter-20 .column-offset-2{margin-left:10%}.row-gutter-20 .column-span-3{width:15%}.row-gutter-20 .column-offset-3{margin-left:15%}.row-gutter-20 .column-span-4{width:20%}.row-gutter-20 .column-offset-4{margin-left:20%}.row-gutter-20 .column-span-5{width:25%}.row-gutter-20 .column-offset-5{margin-left:25%}.row-gutter-20 .column-span-6{width:30%}.row-gutter-20 .column-offset-6{margin-left:30%}.row-gutter-20 .column-span-7{width:35%}.row-gutter-20 .column-offset-7{margin-left:35%}.row-gutter-20 .column-span-8{width:40%}.row-gutter-20 .column-offset-8{margin-left:40%}.row-gutter-20 .column-span-9{width:45%}.row-gutter-20 .column-offset-9{margin-left:45%}.row-gutter-20 .column-span-10{width:50%}.row-gutter-20 .column-offset-10{margin-left:50%}.row-gutter-20 .column-span-11{width:55%}.row-gutter-20 .column-offset-11{margin-left:55%}.row-gutter-20 .column-span-12{width:60%}.row-gutter-20 .column-offset-12{margin-left:60%}.row-gutter-20 .column-span-13{width:65%}.row-gutter-20 .column-offset-13{margin-left:65%}.row-gutter-20 .column-span-14{width:70%}.row-gutter-20 .column-offset-14{margin-left:70%}.row-gutter-20 .column-span-15{width:75%}.row-gutter-20 .column-offset-15{margin-left:75%}.row-gutter-20 .column-span-16{width:80%}.row-gutter-20 .column-offset-16{margin-left:80%}.row-gutter-20 .column-span-17{width:85%}.row-gutter-20 .column-offset-17{margin-left:85%}.row-gutter-20 .column-span-18{width:90%}.row-gutter-20 .column-offset-18{margin-left:90%}.row-gutter-20 .column-span-19{width:95%}.row-gutter-20 .column-offset-19{margin-left:95%}.row-gutter-20 .column-span-20{width:100%}.row-gutter-20 .column-offset-20{margin-left:100%}.row-gutter-20 .column-span-21{width:105%}.row-gutter-20 .column-offset-21{margin-left:105%}.row-gutter-20 .column-span-22{width:110%}.row-gutter-20 .column-offset-22{margin-left:110%}.row-gutter-20 .column-span-23{width:115%}.row-gutter-20 .column-offset-23{margin-left:115%}.row-gutter-20 .column-span-24{width:120%}.row-gutter-20 .column-offset-24{margin-left:120%}.row-gutter-21{padding:12px 6px}.row-gutter-21 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-21 .column-span-1{width:4.7619047619%}.row-gutter-21 .column-offset-1{margin-left:4.7619047619%}.row-gutter-21 .column-span-2{width:9.5238095238%}.row-gutter-21 .column-offset-2{margin-left:9.5238095238%}.row-gutter-21 .column-span-3{width:14.2857142857%}.row-gutter-21 .column-offset-3{margin-left:14.2857142857%}.row-gutter-21 .column-span-4{width:19.0476190476%}.row-gutter-21 .column-offset-4{margin-left:19.0476190476%}.row-gutter-21 .column-span-5{width:23.8095238095%}.row-gutter-21 .column-offset-5{margin-left:23.8095238095%}.row-gutter-21 .column-span-6{width:28.5714285714%}.row-gutter-21 .column-offset-6{margin-left:28.5714285714%}.row-gutter-21 .column-span-7{width:33.3333333333%}.row-gutter-21 .column-offset-7{margin-left:33.3333333333%}.row-gutter-21 .column-span-8{width:38.0952380952%}.row-gutter-21 .column-offset-8{margin-left:38.0952380952%}.row-gutter-21 .column-span-9{width:42.8571428571%}.row-gutter-21 .column-offset-9{margin-left:42.8571428571%}.row-gutter-21 .column-span-10{width:47.619047619%}.row-gutter-21 .column-offset-10{margin-left:47.619047619%}.row-gutter-21 .column-span-11{width:52.380952381%}.row-gutter-21 .column-offset-11{margin-left:52.380952381%}.row-gutter-21 .column-span-12{width:57.1428571429%}.row-gutter-21 .column-offset-12{margin-left:57.1428571429%}.row-gutter-21 .column-span-13{width:61.9047619048%}.row-gutter-21 .column-offset-13{margin-left:61.9047619048%}.row-gutter-21 .column-span-14{width:66.6666666667%}.row-gutter-21 .column-offset-14{margin-left:66.6666666667%}.row-gutter-21 .column-span-15{width:71.4285714286%}.row-gutter-21 .column-offset-15{margin-left:71.4285714286%}.row-gutter-21 .column-span-16{width:76.1904761905%}.row-gutter-21 .column-offset-16{margin-left:76.1904761905%}.row-gutter-21 .column-span-17{width:80.9523809524%}.row-gutter-21 .column-offset-17{margin-left:80.9523809524%}.row-gutter-21 .column-span-18{width:85.7142857143%}.row-gutter-21 .column-offset-18{margin-left:85.7142857143%}.row-gutter-21 .column-span-19{width:90.4761904762%}.row-gutter-21 .column-offset-19{margin-left:90.4761904762%}.row-gutter-21 .column-span-20{width:95.2380952381%}.row-gutter-21 .column-offset-20{margin-left:95.2380952381%}.row-gutter-21 .column-span-21{width:100%}.row-gutter-21 .column-offset-21{margin-left:100%}.row-gutter-21 .column-span-22{width:104.7619047619%}.row-gutter-21 .column-offset-22{margin-left:104.7619047619%}.row-gutter-21 .column-span-23{width:109.5238095238%}.row-gutter-21 .column-offset-23{margin-left:109.5238095238%}.row-gutter-21 .column-span-24{width:114.2857142857%}.row-gutter-21 .column-offset-24{margin-left:114.2857142857%}.row-gutter-22{padding:12px 6px}.row-gutter-22 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-22 .column-span-1{width:4.5454545455%}.row-gutter-22 .column-offset-1{margin-left:4.5454545455%}.row-gutter-22 .column-span-2{width:9.0909090909%}.row-gutter-22 .column-offset-2{margin-left:9.0909090909%}.row-gutter-22 .column-span-3{width:13.6363636364%}.row-gutter-22 .column-offset-3{margin-left:13.6363636364%}.row-gutter-22 .column-span-4{width:18.1818181818%}.row-gutter-22 .column-offset-4{margin-left:18.1818181818%}.row-gutter-22 .column-span-5{width:22.7272727273%}.row-gutter-22 .column-offset-5{margin-left:22.7272727273%}.row-gutter-22 .column-span-6{width:27.2727272727%}.row-gutter-22 .column-offset-6{margin-left:27.2727272727%}.row-gutter-22 .column-span-7{width:31.8181818182%}.row-gutter-22 .column-offset-7{margin-left:31.8181818182%}.row-gutter-22 .column-span-8{width:36.3636363636%}.row-gutter-22 .column-offset-8{margin-left:36.3636363636%}.row-gutter-22 .column-span-9{width:40.9090909091%}.row-gutter-22 .column-offset-9{margin-left:40.9090909091%}.row-gutter-22 .column-span-10{width:45.4545454545%}.row-gutter-22 .column-offset-10{margin-left:45.4545454545%}.row-gutter-22 .column-span-11{width:50%}.row-gutter-22 .column-offset-11{margin-left:50%}.row-gutter-22 .column-span-12{width:54.5454545455%}.row-gutter-22 .column-offset-12{margin-left:54.5454545455%}.row-gutter-22 .column-span-13{width:59.0909090909%}.row-gutter-22 .column-offset-13{margin-left:59.0909090909%}.row-gutter-22 .column-span-14{width:63.6363636364%}.row-gutter-22 .column-offset-14{margin-left:63.6363636364%}.row-gutter-22 .column-span-15{width:68.1818181818%}.row-gutter-22 .column-offset-15{margin-left:68.1818181818%}.row-gutter-22 .column-span-16{width:72.7272727273%}.row-gutter-22 .column-offset-16{margin-left:72.7272727273%}.row-gutter-22 .column-span-17{width:77.2727272727%}.row-gutter-22 .column-offset-17{margin-left:77.2727272727%}.row-gutter-22 .column-span-18{width:81.8181818182%}.row-gutter-22 .column-offset-18{margin-left:81.8181818182%}.row-gutter-22 .column-span-19{width:86.3636363636%}.row-gutter-22 .column-offset-19{margin-left:86.3636363636%}.row-gutter-22 .column-span-20{width:90.9090909091%}.row-gutter-22 .column-offset-20{margin-left:90.9090909091%}.row-gutter-22 .column-span-21{width:95.4545454545%}.row-gutter-22 .column-offset-21{margin-left:95.4545454545%}.row-gutter-22 .column-span-22{width:100%}.row-gutter-22 .column-offset-22{margin-left:100%}.row-gutter-22 .column-span-23{width:104.5454545455%}.row-gutter-22 .column-offset-23{margin-left:104.5454545455%}.row-gutter-22 .column-span-24{width:109.0909090909%}.row-gutter-22 .column-offset-24{margin-left:109.0909090909%}.row-gutter-23{padding:12px 6px}.row-gutter-23 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-23 .column-span-1{width:4.347826087%}.row-gutter-23 .column-offset-1{margin-left:4.347826087%}.row-gutter-23 .column-span-2{width:8.6956521739%}.row-gutter-23 .column-offset-2{margin-left:8.6956521739%}.row-gutter-23 .column-span-3{width:13.0434782609%}.row-gutter-23 .column-offset-3{margin-left:13.0434782609%}.row-gutter-23 .column-span-4{width:17.3913043478%}.row-gutter-23 .column-offset-4{margin-left:17.3913043478%}.row-gutter-23 .column-span-5{width:21.7391304348%}.row-gutter-23 .column-offset-5{margin-left:21.7391304348%}.row-gutter-23 .column-span-6{width:26.0869565217%}.row-gutter-23 .column-offset-6{margin-left:26.0869565217%}.row-gutter-23 .column-span-7{width:30.4347826087%}.row-gutter-23 .column-offset-7{margin-left:30.4347826087%}.row-gutter-23 .column-span-8{width:34.7826086957%}.row-gutter-23 .column-offset-8{margin-left:34.7826086957%}.row-gutter-23 .column-span-9{width:39.1304347826%}.row-gutter-23 .column-offset-9{margin-left:39.1304347826%}.row-gutter-23 .column-span-10{width:43.4782608696%}.row-gutter-23 .column-offset-10{margin-left:43.4782608696%}.row-gutter-23 .column-span-11{width:47.8260869565%}.row-gutter-23 .column-offset-11{margin-left:47.8260869565%}.row-gutter-23 .column-span-12{width:52.1739130435%}.row-gutter-23 .column-offset-12{margin-left:52.1739130435%}.row-gutter-23 .column-span-13{width:56.5217391304%}.row-gutter-23 .column-offset-13{margin-left:56.5217391304%}.row-gutter-23 .column-span-14{width:60.8695652174%}.row-gutter-23 .column-offset-14{margin-left:60.8695652174%}.row-gutter-23 .column-span-15{width:65.2173913043%}.row-gutter-23 .column-offset-15{margin-left:65.2173913043%}.row-gutter-23 .column-span-16{width:69.5652173913%}.row-gutter-23 .column-offset-16{margin-left:69.5652173913%}.row-gutter-23 .column-span-17{width:73.9130434783%}.row-gutter-23 .column-offset-17{margin-left:73.9130434783%}.row-gutter-23 .column-span-18{width:78.2608695652%}.row-gutter-23 .column-offset-18{margin-left:78.2608695652%}.row-gutter-23 .column-span-19{width:82.6086956522%}.row-gutter-23 .column-offset-19{margin-left:82.6086956522%}.row-gutter-23 .column-span-20{width:86.9565217391%}.row-gutter-23 .column-offset-20{margin-left:86.9565217391%}.row-gutter-23 .column-span-21{width:91.3043478261%}.row-gutter-23 .column-offset-21{margin-left:91.3043478261%}.row-gutter-23 .column-span-22{width:95.652173913%}.row-gutter-23 .column-offset-22{margin-left:95.652173913%}.row-gutter-23 .column-span-23{width:100%}.row-gutter-23 .column-offset-23{margin-left:100%}.row-gutter-23 .column-span-24{width:104.347826087%}.row-gutter-23 .column-offset-24{margin-left:104.347826087%}.row-gutter-24{padding:12px 6px}.row-gutter-24 .column{padding:0 6px;display:flex;flex-shrink:0}.row-gutter-24 .column-span-1{width:4.1666666667%}.row-gutter-24 .column-offset-1{margin-left:4.1666666667%}.row-gutter-24 .column-span-2{width:8.3333333333%}.row-gutter-24 .column-offset-2{margin-left:8.3333333333%}.row-gutter-24 .column-span-3{width:12.5%}.row-gutter-24 .column-offset-3{margin-left:12.5%}.row-gutter-24 .column-span-4{width:16.6666666667%}.row-gutter-24 .column-offset-4{margin-left:16.6666666667%}.row-gutter-24 .column-span-5{width:20.8333333333%}.row-gutter-24 .column-offset-5{margin-left:20.8333333333%}.row-gutter-24 .column-span-6{width:25%}.row-gutter-24 .column-offset-6{margin-left:25%}.row-gutter-24 .column-span-7{width:29.1666666667%}.row-gutter-24 .column-offset-7{margin-left:29.1666666667%}.row-gutter-24 .column-span-8{width:33.3333333333%}.row-gutter-24 .column-offset-8{margin-left:33.3333333333%}.row-gutter-24 .column-span-9{width:37.5%}.row-gutter-24 .column-offset-9{margin-left:37.5%}.row-gutter-24 .column-span-10{width:41.6666666667%}.row-gutter-24 .column-offset-10{margin-left:41.6666666667%}.row-gutter-24 .column-span-11{width:45.8333333333%}.row-gutter-24 .column-offset-11{margin-left:45.8333333333%}.row-gutter-24 .column-span-12{width:50%}.row-gutter-24 .column-offset-12{margin-left:50%}.row-gutter-24 .column-span-13{width:54.1666666667%}.row-gutter-24 .column-offset-13{margin-left:54.1666666667%}.row-gutter-24 .column-span-14{width:58.3333333333%}.row-gutter-24 .column-offset-14{margin-left:58.3333333333%}.row-gutter-24 .column-span-15{width:62.5%}.row-gutter-24 .column-offset-15{margin-left:62.5%}.row-gutter-24 .column-span-16{width:66.6666666667%}.row-gutter-24 .column-offset-16{margin-left:66.6666666667%}.row-gutter-24 .column-span-17{width:70.8333333333%}.row-gutter-24 .column-offset-17{margin-left:70.8333333333%}.row-gutter-24 .column-span-18{width:75%}.row-gutter-24 .column-offset-18{margin-left:75%}.row-gutter-24 .column-span-19{width:79.1666666667%}.row-gutter-24 .column-offset-19{margin-left:79.1666666667%}.row-gutter-24 .column-span-20{width:83.3333333333%}.row-gutter-24 .column-offset-20{margin-left:83.3333333333%}.row-gutter-24 .column-span-21{width:87.5%}.row-gutter-24 .column-offset-21{margin-left:87.5%}.row-gutter-24 .column-span-22{width:91.6666666667%}.row-gutter-24 .column-offset-22{margin-left:91.6666666667%}.row-gutter-24 .column-span-23{width:95.8333333333%}.row-gutter-24 .column-offset-23{margin-left:95.8333333333%}.row-gutter-24 .column-span-24{width:100%}.row-gutter-24 .column-offset-24{margin-left:100%}.row-align-top{align-items:flex-start}.row-align-middle{align-items:center}.row-align-bottom{align-items:flex-end}.row-justify-start{justify-content:flex-start}.row-justify-end{justify-content:flex-end}.row-justify-center{justify-content:center}.row-justify-space-around{justify-content:space-around}.row-justify-space-between{justify-content:space-between}.button-select{display:flex;flex-direction:row}.button-select .button-select-options{height:30px;padding:0 15px;color:#54759a;font-size:12px;line-height:30px;background:#fff;border:1px solid #e4eaef;border-right:none;transition:all .3s ease;cursor:pointer;outline:0;display:block}.button-select .button-select-options:first-child{border-radius:3px 0 0 3px}.button-select .button-select-options:last-child{border-radius:0 3px 3px 0;border-right:1px solid #e4eaef}.button-select .button-select-options.actived{background:#57befc;color:#fff;border-color:#57befc;box-shadow:0 2px 5px rgba(87,190,252,.5)}.button-select .button-select-options.actived:active{box-shadow:none}.tags-container{display:flex;align-items:flex-start;overflow-y:hidden}.tags{display:flex;flex:1;align-items:center;list-style:none;flex-wrap:wrap;box-sizing:content-box}.tags li{position:relative;display:flex;align-items:center;justify-content:center;border:1px solid #2c8af8;color:#54759a;height:22px;border-radius:11px;padding:0 6px;margin:3px 4px;font-size:10px;cursor:default}.tags li.can-click{cursor:pointer}.tags li.error{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.tags li.tags-selected.error{background:linear-gradient(135deg,#2c8af8,#f56c6c);border:none;height:24px;padding:0 7px}.tags .tags-selected{background-color:#2c8af8;color:#fff}.tags-expand{height:30px;line-height:30px;padding:0 20px;user-select:none;cursor:pointer}.input{display:inline-block;height:30px;width:100%;padding:0 10px;font-size:14px;color:#54759a;border-radius:3px;border:1px solid #e4eaef;transition:all .3s;transition-property:border-color,color,box-shadow}.input:focus{outline:0;border-color:#57befc;color:#2c8af8;box-shadow:0 2px 5px rgba(87,190,252,.5)}.input-align-left{text-align:left}.input-align-center{text-align:center}.input-align-right{text-align:right}.input-inside:focus{box-shadow:none}.select{cursor:pointer;font-size:14px;line-height:30px;color:#54759a;display:flex;overflow:hidden}.select>i{margin-left:5px;color:#54759a}.select-list{position:absolute;max-width:170px;border-radius:4px;overflow:hidden;box-shadow:0 2px 5px rgba(183,197,214,.5);opacity:.8;pointer-events:none;transform:scaleY(0);transform-origin:top;transition:all .2s linear}.select-list .list{max-height:300px;overflow:auto;background:#fff;padding:5px 0;transform:scaleY(2);transform-origin:top;transition:all .2s linear}.select-list .list>.option{color:#54759a;padding:10px 15px;font-size:14px;list-style:none;cursor:pointer}.select-list .list>.option:hover{background:rgba(228,234,239,.5)}.select-list .list>.selected{background:rgba(228,234,239,.5)}.select-list-show{opacity:1;pointer-events:visible;transform:scaleY(1)}.select-list-show .list{transform:scaleY(1)}.modal-mask{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.15);opacity:0;pointer-events:none;transition:all .5s ease;display:flex;justify-content:center;align-items:center;z-index:9999}.modal-mask .modal{margin-top:-50px;padding:20px 30px;background:#fff;box-shadow:0 2px 16px rgba(84,117,154,.2);border-radius:4px;display:flex;flex-direction:column;transform:scale(0);transition:all .3s cubic-bezier(.32,.26,.71,1.29)}.modal-mask .modal .modal-title{margin:5px 0;width:100%;display:flex;align-items:center;justify-content:space-between;font-weight:700;font-size:18px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.modal-mask .modal .modal-body{margin:10px 0;font-size:14px;color:#54759a}.modal-mask .modal .footer{width:100%;margin:5px 0;display:flex;align-items:center;justify-content:flex-end}.modal-mask .modal .footer .button{margin-left:10px}.modal-mask .modal-small{width:400px}.modal-mask .modal-big{width:600px}.modal-show{opacity:1;pointer-events:visible}.modal-show .modal{transform:scale(1)}@media (max-width:768px){.modal-mask .modal{margin-top:0;padding:18px 20px}.modal-mask .modal-small{width:280px}.modal-mask .modal-big{width:480px}}.alert{padding:15px;background:#fff;border-radius:4px;box-shadow:0 2px 8px rgba(44,138,248,.3);font-size:13px;line-height:1.6;text-align:justify;display:flex}.alert .alert-icon{margin-right:10px;width:20px;height:20px;border-radius:50%;flex-shrink:0;display:flex;justify-content:center;align-items:center;background:#fff}.alert .alert-icon>i{transform:scale(.5);font-weight:700}.alert .alert-message{width:100%;color:#fff}.alert-box-success{background:linear-gradient(135deg,#5dae34,#67c23a);box-shadow:0 2px 8px rgba(93,174,52,.3)}.alert-box-success .alert-icon>i{color:#67c23a}.alert-box-info{background:linear-gradient(135deg,#3eb4fc,#57befc);box-shadow:0 2px 8px rgba(62,180,252,.3)}.alert-box-info .alert-icon>i{color:#57befc}.alert-box-warning{background:linear-gradient(135deg,#e39725,#e6a23c);box-shadow:0 2px 8px rgba(227,151,37,.3)}.alert-box-warning .alert-icon>i{color:#e6a23c}.alert-box-error{background:linear-gradient(135deg,#f35454,#f56c6c);box-shadow:0 2px 8px rgba(243,84,84,.3)}.alert-box-error .alert-icon>i{color:#f56c6c}.alert-note-success{background:rgba(103,194,58,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #67c23a;box-shadow:0 2px 8px rgba(93,174,52,.3)}.alert-note-success .alert-icon{background:#67c23a}.alert-note-success .alert-icon>i{color:#fff}.alert-note-success .alert-message{color:#3d7323}.alert-note-info{background:rgba(87,190,252,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #57befc;box-shadow:0 2px 8px rgba(62,180,252,.3)}.alert-note-info .alert-icon{background:#57befc}.alert-note-info .alert-icon>i{color:#fff}.alert-note-info .alert-message{color:#0493e9}.alert-note-warning{background:rgba(230,162,60,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #e6a23c;box-shadow:0 2px 8px rgba(227,151,37,.3)}.alert-note-warning .alert-icon{background:#e6a23c}.alert-note-warning .alert-icon>i{color:#fff}.alert-note-warning .alert-message{color:#a76d15}.alert-note-error{background:rgba(245,108,108,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #f56c6c;box-shadow:0 2px 8px rgba(243,84,84,.3)}.alert-note-error .alert-icon{background:#f56c6c}.alert-note-error .alert-icon>i{color:#fff}.alert-note-error .alert-message{color:#eb1010}.button{outline:0;padding:0 15px;height:32px;line-height:32px;border-radius:16px;font-size:14px;cursor:pointer;transition:all 150ms ease}.button-primary{color:#fff;border:none;background:linear-gradient(135deg,#57befc,#2c8af8);box-shadow:0 2px 8px rgba(44,138,248,.5)}.button-primary:hover{border:none}.button-primary:active{box-shadow:0 0 2px rgba(44,138,248,.5)}.button-normal{color:#909399;background:#fff;border:1px solid rgba(0,0,0,.1)}.button-normal:hover{border-color:#b7c5d6;color:#54759a}.button-normal:active{background:#fafafa;color:#54759a}.button-danger{color:#fff;border:none;background:linear-gradient(135deg,#f56c6c,#f23c3c);box-shadow:0 2px 8px rgba(242,60,60,.5)}.button-danger:hover{border:none}.button-danger:active{box-shadow:0 0 2px rgba(242,60,60,.5)}.button-success{color:#fff;border:none;background:linear-gradient(135deg,#67c23a,#5dae34);box-shadow:0 2px 8px rgba(93,174,52,.5)}.button-success:hover{border:none}.button-success:active{box-shadow:0 0 2px rgba(93,174,52,.5)}.button-warning{color:#fff;border:none;background:linear-gradient(135deg,#e6a23c,#e39725);box-shadow:0 2px 8px rgba(227,151,37,.5)}.button-warning:hover{border:none}.button-warning:active{box-shadow:0 0 2px rgba(227,151,37,.5)}.message{position:fixed;top:20px;right:20px;border-radius:4px;opacity:0;background:#fff;display:flex;box-shadow:0 0 20px rgba(44,138,248,.2);transition:all .2s ease;transform:translateX(100%)}.message .message-icon{width:36px;flex:1;border-radius:4px 0 0 4px;display:flex;justify-content:center;align-items:center}.message .message-icon>i{color:#fff}.message .message-content{padding:10px 15px;font-size:13px;color:#54759a}.message-info .message-icon{background:linear-gradient(135deg,#57befc,#2c8af8)}.message-success .message-icon{background:linear-gradient(135deg,#67c23a,#5dae34)}.message-warning .message-icon{background:linear-gradient(135deg,#e6a23c,#e39725)}.message-error .message-icon{background:linear-gradient(135deg,#f56c6c,#f23c3c)}.message-show{opacity:1;transition:all .2s ease;transform:translateX(0)}.checkbox{display:flex;position:relative;padding-left:26px;cursor:pointer;line-height:18px}.checkbox::before{content:"";display:inline-block;position:absolute;left:0;top:50%;width:18px;height:18px;border-radius:3px;transition:background-color .3s ease;transform:translateY(-9px);background-color:#fff;border:1px solid #e4eaef}.checkbox.checked::before{background-color:#57befc}.checkbox-icon{position:absolute;left:0;top:50%;line-height:18px;transform:translateY(-9px) scale(.6);text-shadow:none;font-weight:700}.checkbox-icon.checkbox-icon{color:#fff}.tag{display:flex;align-items:center;justify-content:center;height:24px;font-size:12px;padding:0 12px;text-align:center;background-color:#fff;border:2px solid #2c8af8;color:#2c8af8;border-radius:12px}.spinner{position:relative;width:80px;height:80px;border-radius:100%;animation:spinner 5s infinite linear}.spinner-circle{position:absolute;width:100%;height:100%;transform-origin:48% 48%}.spinner-inner{width:100%;height:100%;border-radius:100%;border:5px solid rgba(44,138,248,.7);border-right:none;border-top:none;background-clip:padding-box;box-shadow:inset 0 0 10px rgba(44,138,248,.15)}@keyframes spinner{from{transform:rotate(0)}to{transform:rotate(360deg)}}.spinner-circle:nth-of-type(0){transform:rotate(0)}.spinner-circle:nth-of-type(0) .spinner-inner{animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(1){transform:rotate(70deg)}.spinner-circle:nth-of-type(1) .spinner-inner{animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(2){transform:rotate(140deg)}.spinner-circle:nth-of-type(2) .spinner-inner{animation:spinner 2s infinite linear}.loading{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0;bottom:0;right:0;background-color:rgba(255,255,255,.9);box-shadow:inset 0 0 80px rgba(0,0,0,.1);z-index:1000}.proxy-item{position:relative;width:100%;height:110px;padding:10px;border-radius:4px;background:#fff;user-select:none;cursor:default;box-shadow:2px 5px 20px -3px rgba(44,138,248,.2);transition:all .3s ease}.proxy-item .proxy-type{padding:2px 5px;font-size:10px;color:#fff;border-radius:2px}.proxy-item .proxy-name{display:-webkit-box;margin-top:10px;color:#54759a;font-size:10px;overflow:hidden;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.proxy-item .proxy-delay{position:absolute;left:10px;bottom:13px;font-size:10px;color:rgba(84,117,154,.8)}.proxy-item .proxy-editor{position:absolute;right:10px;bottom:10px;cursor:pointer;color:rgba(84,117,154,.8);opacity:0;pointer-events:none;transition:all .3s ease}.proxy-item:hover{box-shadow:0 14px 20px -4px rgba(84,117,154,.4)}.proxy-item:hover .proxy-editor{opacity:1;pointer-events:visible}.proxy-error{opacity:.5}.proxy-error .proxy-type{background-color:#909399}@media (max-width:768px){.proxy-item{height:70px}.proxy-item .proxy-delay{left:unset;bottom:unset;top:0;right:20px;height:70px;line-height:70px}}.proxy-group{display:flex;align-items:flex-start;font-size:14px;color:#546b87}.proxy-group-part{display:flex;align-items:center;height:60px}.proxy-group-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 20px;width:120px;height:18px}.proxies-group-card{padding:0}.proxies-group-item{border-bottom:1px solid #d8dee2}.proxies-group-item:last-child{border-bottom:none}.proxy-group-tags-container{padding:15px 0}.proxy-group-tags{flex:1;margin-left:30px}@media (max-width:768px){.proxy-group{flex-direction:column}.proxy-group-name{width:140px}.proxy-group-part{width:100%;height:42px;margin-top:6px;justify-content:space-between}.proxy-group-type{margin-right:20px}.proxy-group-tags-container{padding:5px 0 10px}.proxy-group-tags{margin-left:20px}}.proxy-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.proxy-provider-header{display:flex;align-items:center;justify-content:space-between}.proxy-provider-header-part{display:flex;align-items:center}.proxy-provider-name{margin-right:24px}.proxy-provider-proxies{list-style:none}.proxy-provider-item{box-shadow:0 0 24px 0 rgba(44,138,248,.2)}.proxy-provider-item:hover{box-shadow:0 0 24px 0 rgba(84,117,154,.4)}.proxy-provider-update{line-height:14px;font-size:14px}.proxy-provider-icon{margin-left:20px;cursor:pointer}.proxy-provider-icon.healthcheck{color:#f56c6c}@media (max-width:768px){.proxy-provider-header{flex-direction:column;align-items:flex-start}.proxy-provider-header-part{margin:6px 0}}.proxies-list{--item-width:calc(100% / (var(--columns) + 1));--gap:calc(var(--item-width) / var(--columns));display:flex;margin-right:calc(-1 * var(--gap));margin-top:20px;flex-wrap:wrap;align-content:flex-start;list-style:none}@media (min-width:2001px){.proxies-list{--columns:12}}@media (max-width:2000px){.proxies-list{--columns:10}}@media (max-width:1600px){.proxies-list{--columns:8}}@media (max-width:1340px){.proxies-list{--columns:7}}@media (max-width:960px){.proxies-list{--columns:6}}@media (max-width:860px){.proxies-list{--columns:5}}@media (max-width:760px){.proxies-list{--columns:3}}.proxies-list>li{display:inline-block;width:var(--item-width);margin-right:var(--gap);flex-shrink:0;margin-bottom:10px}.proxies-group-list{list-style:none}.proxies-group-card{margin:20px 0}.proxies-container .proxies-action-icon{margin-left:10px}.proxies-speed-test{line-height:32px;margin:0 2px 0 6px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4);cursor:pointer}.proxies-providers-item{margin:20px 0}.proxies-providers-list{list-style:none}@media (max-width:768px){.proxies-group-card{margin:12px 0}.proxies-list{margin-right:0;padding-bottom:20px;flex-wrap:unset;flex-direction:column}.proxies-list>li{width:100%;margin-right:0;margin-bottom:10px}}.logs-card{display:flex;flex-direction:column;flex:1;margin-top:10px}.logs-panel{display:flex;flex-direction:column;flex-grow:1;flex-basis:0;list-style:none;padding:10px;border-radius:2px;background-color:#f3f6f9;font-size:12px;color:#73808f;overflow-y:auto;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace}.logs-panel li{line-height:20px;display:inline-block}.logs-panel-time{margin-right:10px;color:#adb7c3}.rule-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.rule-provider-header{display:flex;align-items:center;justify-content:space-between}.rule-provider-header-part{display:flex;align-items:center}.rule-provider-name{width:120px;margin-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rule-provider-behavior{width:80px;margin:0 20px 0 12px;background-color:#2c8af8;color:#fff}.rule-provider-spinner{transform:scale(.4)}.rule-provider-proxies{list-style:none}.rule-provider-item{box-shadow:0 0 24px 0 rgba(44,138,248,.2)}.rule-provider-item:hover{box-shadow:0 0 24px 0 rgba(84,117,154,.4)}.rule-provider-update{line-height:14px;font-size:14px}.rule-provider-icon{display:block;margin-left:20px;cursor:pointer}.rule-provider-icon.rule-provider-loading::before{color:#909399;cursor:not-allowed;animation:spinner 2s infinite linear}@media (max-width:768px){.rule-provider-header{flex-direction:column;align-items:flex-start}.rule-provider-header-part{margin:6px 0}}.rules-card{display:flex;flex-direction:column;flex:1;min-height:700px;margin-top:10px;padding:0}.rules-card:focus{outline:0}.rules-card .rules{flex:1 0 auto}.rule-item{line-height:30px;padding:5px 0;height:50px;overflow:hidden;list-style:none;user-select:none;border-bottom:1px solid rgba(228,234,239,.5)}.rule-item .rule-item-row{padding:5px 0}.rule-item .drag-handler{cursor:row-resize;margin:0 10px;display:flex;justify-content:center}.rule-item .drag-handler>i{font-weight:700;color:#b7c5d6}.rule-item .rule-type{font-size:14px;color:#54759a}.rule-item .rule-type>i{margin-left:5px;color:#54759a}.rule-item .payload{font-size:14px;color:#54759a;cursor:pointer}.rule-item .rule-proxy{font-size:14px;color:#54759a}.rule-item .delete-btn{opacity:0;transition:all .3s ease}.rule-item .delete-btn span{font-size:14px;color:#f56c6c;cursor:pointer}.rule-item:last-child{border-bottom:none}.rule-item:hover .delete-btn{opacity:1}.rule-proxy-option{display:flex;align-items:center;overflow:hidden}.rule-proxy-option .label{margin-right:5px;height:20px;line-height:20px;padding:0 8px;font-size:10px;border-radius:10px;color:#fff;background:#b7c5d6}.rule-proxy-option .value{line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-card{margin-top:10px;padding:20px 0}.settings-card .column{font-weight:700;align-items:center}.settings-card .value-column{justify-content:flex-end}.settings-card .label{font-size:14px;color:#54759a}.settings-card .external-controller{font-size:14px;color:#54759a;display:flex;justify-content:flex-end;font-weight:400;line-height:17px}.settings-card .external-controller .modify-btn{color:#2c8af8;cursor:pointer}.clash-version{position:relative;margin-top:10px;padding:20px 45px;display:flex}.clash-version .check-icon{width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,#57befc,#2c8af8);display:flex;justify-content:center;align-items:center}.clash-version .check-icon>i{transform:scale(.5);color:#fff;font-weight:700}.clash-version .version-info{margin-left:10px;font-size:14px;line-height:24px;color:#54759a}.clash-version .check-update-btn{position:absolute;right:45px;font-size:14px;line-height:24px;color:#b7c5d6;cursor:pointer;transition:all 150ms ease}.clash-version .check-update-btn:hover{color:#54759a}@media (max-width:768px){.settings-card .row{flex-direction:column;padding-top:0;padding-bottom:0}.settings-card .row>.column{width:100%;margin:10px 0}}.sidebar{position:fixed;top:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:160px;user-select:none}.sidebar-logo{margin-top:50px;width:60px;height:60px}.sidebar-menu{display:flex;flex-direction:column;flex:1;margin-top:12px}.sidebar-menu .item{display:block;margin-top:18px}.sidebar-menu .item>a{display:block;width:120px;height:36px;line-height:36px;font-size:14px;border-radius:18px;text-align:center}.sidebar-menu .item a:active,.sidebar-menu .item a:visited,.sidebar-menu .item>a{color:#909399;text-decoration:none}.sidebar-menu .item>a.active{background:linear-gradient(135deg,#57befc,#2c8af8);color:#fff;box-shadow:0 2px 8px rgba(44,138,248,.5)}.sidebar-version{display:flex;flex-direction:column;align-items:center;padding-bottom:20px}.sidebar-version-label{font-size:14px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.sidebar-version-text{text-align:center;font-size:14px;margin:8px 0;padding:0 10px;color:#54759a}@media (max-width:768px){.sidebar{width:100%;height:60px;flex-direction:row;background:#f4f5f6;z-index:10}.sidebar-logo{margin:0 15px;width:36px;height:36px}.sidebar-menu{flex:1;flex-direction:row;justify-content:center;margin-top:0;overflow-x:scroll;padding:10px}.sidebar-menu::-webkit-scrollbar{display:none}.sidebar-menu .item{margin:0 3px}.sidebar-menu .item>a{width:80px;height:32px;line-height:32px}.sidebar-menu .item.no-mobile{display:none}.sidebar-version{display:none}}.connections-devices{display:flex;padding:8px 2px}.connections-devices-item{padding:4px 0;margin-right:20px;font-size:14px;color:#909399;border-radius:3px;cursor:pointer;transition:color .3s ease}.connections-devices-item.selected{color:#2c8af8}.connections-card{display:flex;flex-direction:column;flex:1;margin-top:10px;padding:0;overflow:hidden}.connections-card .connections{display:flex;flex-direction:column;width:100%;flex-grow:1;flex-basis:0;overflow:auto}.connections-card .connections-body{flex:1 0 auto}.connections-card .connections-th{position:relative;text-align:center;color:#909399;background:#f3f6f9;height:30px;line-height:30px;font-weight:500;font-size:14px;cursor:pointer;user-select:none}.connections-card .connections-th.resizing .connections-resizer{opacity:1}.connections-card .connections-th.fixed{position:sticky!important;left:0;z-index:99;box-shadow:inset -9px 0 8px -14px #000}.connections-card .connections-resizer{position:absolute;opacity:0;right:-10px;top:8px;bottom:8px;width:20px;transition:opacity .3s ease;z-index:10;font-size:14px;font-weight:300;touch-action:none}.connections-card .connections-resizer::before{content:"";display:block;position:absolute;left:10px;transform:translateX(-2px);width:2px;height:100%;background-color:rgba(144,147,153,.6)}.connections-card .connections-header{position:sticky;top:0;z-index:9999;white-space:nowrap}.connections-card .connections-header:hover .connections-resizer{opacity:1}.connections-card .connetions-item{height:36px}.connections-card .connections-block{display:flex;align-items:center;font-size:14px;line-height:36px;padding:0 10px;color:#54759a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.connections-card .connections-block.center{text-align:center}.connections-card .connections-block.completed{background-color:#e9eef4;color:rgba(84,117,154,.5)}.connections-card .connections-block.fixed{position:sticky;left:0;z-index:999;background-color:#fff;box-shadow:inset -9px 0 8px -14px #000}.connections-filter{color:#2c8af8;font-size:14px;line-height:20px;margin-left:15px;text-shadow:0 0 6px rgba(44,138,248,.4);cursor:pointer}.connections-filter.dangerous{color:#f56c6c;text-shadow:0 0 6px rgba(87,190,252,.2)}.connections-filter.total{flex:1;cursor:unset}.external-controller .row{padding:0}.external-controller .alert{margin:10px 0}.external-controller .form,.external-controller .title{margin:15px 0}.external-controller .title{margin-top:15px;font-size:14px;font-weight:700}@media (max-width:768px){.external-controller .row{flex-direction:column;align-items:flex-start}.external-controller .title{margin:5px 0}.external-controller .form{margin:5px 0}.external-controller .column{width:100%}.external-controller .alert{display:none}}html{box-sizing:border-box;background:rgba(255,255,255,.8);overflow:hidden}*,::after,::before{margin:0;padding:0;box-sizing:inherit}body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"}body ::-webkit-scrollbar{z-index:11;background:0 0}body ::-webkit-scrollbar-thumb{border-radius:5px;background:#2c8af8}body ::-webkit-scrollbar:vertical{width:6px}body ::-webkit-scrollbar:horizontal{height:6px}.app{min-height:100vh;padding-left:150px}.app.not-clashx{background:#f4f5f6}.page-container{width:100%;height:100vh;padding-left:10px;overflow-y:scroll}.page{padding:20px 35px 30px 20px;width:100%;min-height:100vh;margin:0 auto;display:flex;flex-direction:column}.container{margin:20px 0}input{-webkit-appearance:none}@media (max-width:768px){.app{padding-left:0;padding-top:60px}.page-container{width:100%;padding:0 10px;height:calc(100vh - 60px);-webkit-overflow-scrolling:touch}.page-container::-webkit-scrollbar{display:none}.page{padding:0 0 20px;height:100%}}@font-face{font-family:clash-iconfont;src:url(//at.alicdn.com/t/font_841708_ok9czskbhel.ttf?t=1576162884356) format("truetype")}.clash-iconfont{font-family:clash-iconfont!important;font-size:14px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c8af8}.icon-update::before{content:""}.icon-healthcheck::before{content:""}.icon-speed::before{content:""}.icon-close::before{content:""}.icon-drag::before{content:""}.icon-down-arrow-o::before{content:""}.icon-check::before{content:""}.icon-plus::before{content:""}.icon-triangle-up::before{content:""}.icon-triangle-down::before{content:""}.icon-up-arrow-o::before{content:""}.icon-info::before{content:""}.icon-info-o::before{content:""}.icon-setting::before{content:""}.icon-show::before{content:""}.icon-hide::before{content:""}.icon-sort::before{content:""}.icon-sort-descending::before{content:""}.icon-sort-ascending::before{content:""}.icon-close-all::before{content:""} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/static/media/logo.45983944.png b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png similarity index 100% rename from package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/static/media/logo.45983944.png rename to package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.b176d855.js b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.b176d855.js new file mode 100644 index 0000000000..fb0ea694d3 --- /dev/null +++ b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.b176d855.js @@ -0,0 +1,32 @@ +var e=Object.prototype.hasOwnProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.propertyIsEnumerable,r=Object.assign;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function o(e){var t={exports:{}};return e(t,t.exports),t.exports +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/}var a=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;function l(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var s=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,r,o=l(e),s=1;s=b},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(!(void 0!==o&&0R(i,n))void 0!==l&&0>R(l,i)?(e[r]=l,e[u]=n,r=u):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==l&&0>R(l,n)))break e;e[r]=l,e[u]=n,r=u}}}return t}return null}function R(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var x=[],C=[],T=1,P=null,O=3,A=!1,M=!1,N=!1;function L(e){for(var t=E(C);null!==t;){if(null===t.callback)k(C);else{if(!(t.startTime<=e))break;k(C),t.sortIndex=t.expirationTime,_(x,t)}t=E(C)}}function I(e){if(N=!1,L(e),!M)if(null!==E(x))M=!0,n(z);else{var t=E(C);null!==t&&r(I,t.startTime-e)}}function z(e,n){M=!1,N&&(N=!1,o()),A=!0;var a=O;try{for(L(n),P=E(x);null!==P&&(!(P.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=P.callback;if("function"==typeof i){P.callback=null,O=P.priorityLevel;var u=i(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof u?P.callback=u:P===E(x)&&k(x),L(n)}else k(x);P=E(x)}if(null!==P)var l=!0;else{var s=E(C);null!==s&&r(I,s.startTime-n),l=!1}return l}finally{P=null,O=a,A=!1}}var D=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){M||A||(M=!0,n(z))},t.unstable_getCurrentPriorityLevel=function(){return O},t.unstable_getFirstCallbackNode=function(){return E(x)},t.unstable_next=function(e){switch(O){case 1:case 2:case 3:var t=3;break;default:t=O}var n=O;O=t;try{return e()}finally{O=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=D,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=O;O=e;try{return t()}finally{O=n}},t.unstable_scheduleCallback=function(e,a,i){var u=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0u?(e.sortIndex=i,_(C,e),null===E(x)&&e===E(C)&&(N?o():N=!0,r(I,i-u))):(e.sortIndex=l,_(x,e),M||A||(M=!0,n(z))),e},t.unstable_wrapCallback=function(e){var t=O;return function(){var n=O;O=t;try{return e.apply(this,arguments)}finally{O=n}}}})),p=o((function(e){e.exports=d})); +/** @license React v17.0.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v17.0.1 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +function h(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n