diff --git a/panel/public/add.html b/panel/public/add.html
new file mode 100755
index 0000000..3ac4603
--- /dev/null
+++ b/panel/public/add.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+ 在线登入
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/panel/public/css/css.css b/panel/public/css/css.css
new file mode 100755
index 0000000..56b4289
--- /dev/null
+++ b/panel/public/css/css.css
@@ -0,0 +1,336 @@
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url(../font/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: url(../font/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hmIqOjjg.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hvIqOjjg.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hnIqOjjg.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hoIqOjjg.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hkIqOjjg.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hlIqOjjg.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: url(../font/memnYaGs126MiZpBA-UFUKW-U9hrIqM.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFVp0bbck.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFWp0bbck.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFW50bbck.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../font/mem8YaGs126MiZpBA-UFVZ0b.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../font/mem5YaGs126MiZpBA-UNirkOUuhp.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOX-hpOqc.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOVuhpOqc.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOXuhpOqc.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOUehpOqc.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOXehpOqc.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOXOhpOqc.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: url(../font/mem5YaGs126MiZpBA-UN8rsOUuhp.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/panel/public/css/other.css b/panel/public/css/other.css
new file mode 100755
index 0000000..bee5110
--- /dev/null
+++ b/panel/public/css/other.css
@@ -0,0 +1,865 @@
+@import url(font-awesome.min.css);
+@import url("css.css");
+
+
+/*body,
+ html {
+ margin: 10;
+ padding: 0;
+} */
+body {
+
+ /* background: url("../img/banner.jpg") no-repeat; */
+ background: #2e3842;
+}
+
+ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
+ margin: 0;
+ /* padding: 0; */
+ /* border: 0; */
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+ }
+
+button {
+ color: #444444;
+ background: #f3f3f3;
+ border: 1px #dadada solid;
+ padding: 5px 10px;
+ border-radius: 2px;
+ font-weight: bold;
+ font-size: 32pt;
+ outline: none;
+}
+
+
+ h2 {
+ font-size: 1.35em;
+ line-height: 1.75em;
+
+ }
+
+
+button:hover {
+ border: 1px #c6c6c6 solid;
+ box-shadow: 1px 1px 1px #eaeaea;
+ color: #333333;
+ background: #f7f7f7;
+}
+
+button:active {
+ box-shadow: inset 1px 1px 1px #dfdfdf;
+}
+
+/* Blue button as seen on translate.google.com*/
+button.blue {
+ color: white;
+ background: #4c8ffb;
+ border: 1px #3079ed solid;
+ box-shadow: inset 0 1px 0 #80b0fb;
+}
+
+button.blue:hover {
+ border: 1px #2f5bb7 solid;
+ box-shadow: 0 1px 1px #eaeaea, inset 0 1px 0 #5a94f1;
+ background: #3f83f1;
+}
+
+button.blue:active {
+ box-shadow: inset 0 2px 5px #2370fe;
+}
+
+.container {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ margin: 0 0.5em;
+}
+
+.container p {
+ font-size: 0.875rem;
+ margin: 0;
+ line-height: 1.5em;
+}
+
+#qrcontainer {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 1000;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(255, 255, 255, 0.8);
+ text-align: center;
+ transition: all 0.3s;
+}
+#qrcontainer.hidden {
+ opacity: 0;
+ visibility: hidden;
+}
+
+#qrcontainer .qframe {
+ background-color: #ffffff;
+ padding: 1rem;
+ border-radius: 0.5rem;
+ border: #6d8a88 1px solid;
+ -webkit-box-shadow: 0px 0px 7px 3px rgba(0, 0, 0, 0.2);
+ box-shadow: 0px 0px 7px 3px rgba(0, 0, 0, 0.2);
+ position: relative;
+}
+#qrcontainer .qframe #refresh_qrcode {
+ width: 256px;
+ height: 256px;
+ position: absolute;
+ background-color: rgba(0, 0, 0, 0.5);
+ left: 1rem;
+ top: 1rem;
+ color: #ffffff;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+#qrcontainer .qframe #refresh_qrcode.hidden {
+ opacity: 0;
+ visibility: hidden;
+}
+#qrcontainer .qframe #refresh_qrcode h3 {
+ font-weight: normal;
+}
+#qrcontainer .qframe #refresh_qrcode .refresh {
+ display: block;
+ background: #e4393c;
+ width: 80px;
+ height: 30px;
+ margin: 0 auto;
+ line-height: 30px;
+ opacity: 1;
+ z-index: 19;
+ color: #fbfbfb;
+ text-decoration: none;
+ cursor: pointer;
+}
+#qrcontainer .qframe .info {
+ padding: 5px;
+ background-color: #f8f8f8;
+ /* line-height: 1.5; */
+ border-radius: 10px;
+ border: 0px solid rgba(12,0,51,.1);
+ margin-top: 3px;
+
+
+
+}
+#qrcontainer .qframe-close{
+
+ /* padding-top: 5px; */
+}
+
+#qrcontainer .ps-box {
+ padding: 5px 0;
+ border-radius: 10px;
+
+}
+
+#qrcontainer .ps-box input{
+ width: 100%;
+ -webkit-border-radius: .08rem;
+ border-radius: .08rem;
+ border: 1px solid rgba(12,0,51,.1);
+ margin-top: .24rem;
+ text-align: center;
+ color: #aaaaaa;
+ border-radius: 6px;
+ background-color: #f8f8f8;
+ /* box-shadow: 0 0 0 1px #21b2a6; */
+ font-size: 16px;
+ line-height: 2.5em;
+}
+
+#qrcontainer .ps-box input:focus {
+ outline: none;
+ box-shadow: 0 0 0 2px #21b2a6;
+ }
+
+
+
+
+.qq_group img{
+ box-shadow: 0 0 0 1px #ffffff;
+ padding: 2px 8px;
+ border-radius: 6px;
+ }
+
+
+@media screen and (max-width: 480px) {
+ .container p {
+ font-size: 0.75rem;
+ margin: 0;
+ line-height: 1.5em;
+ }
+}
+
+@media (min-width: 992px) {
+ .elk-app {
+ height: 100%;
+ }
+ .elk-side {
+ width: 20rem;
+ }
+ .elk-container,
+ .elk-main,
+ .elk-side {
+ overflow-y: auto;
+ }
+}
+.elk-app,
+body > .ember-view {
+ margin-top: 8rem;
+}
+.bg-log {
+ background: #f5f2f0;
+}
+.bg-light {
+ background-color: #f8f9fa !important;
+}
+.text-dark {
+ color: #343a40 !important;
+}
+
+
+
+
+
+ p {
+ margin: 0 0 2em 0;
+ }
+
+
+ input, select, textarea {
+ color: #fff;
+ font-family: "Open Sans", "微软雅黑", Helvetica, sans-serif;
+ font-size: 15pt;
+ font-weight: 400;
+ letter-spacing: 0.075em;
+ line-height: 1.65em;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ color: #fff;
+ font-weight: 800;
+ letter-spacing: 0.225em;
+ /* line-height: 1em; */
+ margin: 0 0 1em 0;
+ text-transform: uppercase;
+ }
+
+
+/* Banner */
+
+ #banner {
+ display: -moz-flex;
+ display: -webkit-flex;
+ display: -ms-flex;
+ display: flex;
+ -moz-flex-direction: column;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -moz-justify-content: center;
+ -webkit-justify-content: center;
+ -ms-justify-content: center;
+ justify-content: center;
+ cursor: default;
+ height: 100vh;
+ min-height: 35em;
+ overflow: hidden;
+ position: relative;
+ text-align: center;
+ }
+
+
+
+
+ #banner h1 {
+
+ font-size: 2.0em;
+ color: orange;
+
+ }
+
+
+ #banner h2 {
+ -moz-transform: scale(1);
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+ -moz-transition: -moz-transform 0.5s ease, opacity 0.5s ease;
+ -webkit-transition: -webkit-transform 0.5s ease, opacity 0.5s ease;
+ -ms-transition: -ms-transform 0.5s ease, opacity 0.5s ease;
+ transition: transform 0.5s ease, opacity 0.5s ease;
+ display: inline-block;
+ font-size: 1.75em;
+ opacity: 1;
+ padding: 0.35em 1em;
+ position: relative;
+ z-index: 1;
+ }
+
+ #banner h2:before, #banner h2:after {
+ -moz-transition: width 0.85s ease;
+ -webkit-transition: width 0.85s ease;
+ -ms-transition: width 0.85s ease;
+ transition: width 0.85s ease;
+ -moz-transition-delay: 0.25s;
+ -webkit-transition-delay: 0.25s;
+ -ms-transition-delay: 0.25s;
+ transition-delay: 0.25s;
+ background: #fff;
+ content: '';
+ display: block;
+ height: 2px;
+ position: absolute;
+ width: 100%;
+ }
+
+ #banner h2:before {
+ top: 0;
+ left: 0;
+ }
+
+ #banner h2:after {
+ bottom: 0;
+ right: 0;
+ }
+
+ #banner p {
+ letter-spacing: 0.225em;
+ text-transform: uppercase;
+ color: #fff;
+ }
+
+ #banner p a {
+ color: inherit;
+ }
+
+ #banner .more {
+ -moz-transition: -moz-transform 0.75s ease, opacity 0.75s ease;
+ -webkit-transition: -webkit-transform 0.75s ease, opacity 0.75s ease;
+ -ms-transition: -ms-transform 0.75s ease, opacity 0.75s ease;
+ transition: transform 0.75s ease, opacity 0.75s ease;
+ -moz-transition-delay: 3.5s;
+ -webkit-transition-delay: 3.5s;
+ -ms-transition-delay: 3.5s;
+ transition-delay: 3.5s;
+ -moz-transform: translateY(0);
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ border: none;
+ /* bottom: 8em; */
+ color: #fff;
+ font-size: 0.8em;
+ height: 8.5em;
+ left: 50%;
+ letter-spacing: 0.225em;
+ margin-left: -8.5em;
+ opacity: 1;
+ outline: 0;
+ padding-left: 0.225em;
+ position: absolute;
+ text-align: center;
+ text-transform: uppercase;
+ width: 16em;
+ z-index: 1;
+ }
+
+ #banner .more:after {
+ background-image: url("../image/qqqun.jpg");
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: contain;
+ bottom: -7em;
+ content: '';
+ display: block;
+ height: 10em;
+ left: 46%;
+ margin: 0 0 0 -4.5em;
+ position: absolute;
+ width: 10em;
+ border-radius: 11px;
+ }
+
+ #banner:after {
+ -moz-pointer-events: none;
+ -webkit-pointer-events: none;
+ -ms-pointer-events: none;
+ pointer-events: none;
+ -moz-transition: opacity 3s ease-in-out;
+ -webkit-transition: opacity 3s ease-in-out;
+ -ms-transition: opacity 3s ease-in-out;
+ transition: opacity 3s ease-in-out;
+ -moz-transition-delay: 1.25s;
+ -webkit-transition-delay: 1.25s;
+ -ms-transition-delay: 1.25s;
+ transition-delay: 1.25s;
+ content: '';
+ background: #2e3842;
+ display: block;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ opacity: 0;
+ }
+
+ @media screen and (max-width: 736px) {
+
+ #banner {
+ padding: 0em 3em 5em 3em ;
+ /* height: auto; */
+ min-height: 0;
+ }
+
+ #banner h2 {
+ font-size: 1.25em;
+
+ }
+
+ #banner br {
+ /* display: none; */
+ }
+
+ #banner .more {
+ /* display: none; */
+ }
+
+ }
+
+ body.is-loading #banner h2 {
+ -moz-transform: scale(0.95);
+ -webkit-transform: scale(0.95);
+ -ms-transform: scale(0.95);
+ transform: scale(0.95);
+ opacity: 0;
+ }
+
+ body.is-loading #banner h2:before, body.is-loading #banner h2:after {
+ width: 0;
+ }
+
+ body.is-loading #banner .more {
+ -moz-transform: translateY(8.5em);
+ -webkit-transform: translateY(8.5em);
+ -ms-transform: translateY(8.5em);
+ transform: translateY(8.5em);
+ opacity: 0;
+ }
+
+ body.is-loading #banner:after {
+ opacity: 1;
+ }
+
+
+/* List */
+
+ ol {
+ list-style: decimal;
+ margin: 0 0 2em 0;
+ padding-left: 1.25em;
+ }
+
+ ol li {
+ padding-left: 0.25em;
+ }
+
+ ul {
+ list-style: disc;
+ margin: 0 0 2em 0;
+ padding-left: 1em;
+ }
+
+ ul li {
+ padding-left: 0.5em;
+ }
+
+ ul.alt {
+ list-style: none;
+ padding-left: 0;
+ }
+
+ ul.alt li {
+ border-top: solid 1px #fff;
+ padding: 0.5em 0;
+ }
+
+ ul.alt li:first-child {
+ border-top: 0;
+ padding-top: 0;
+ }
+
+ ul.icons {
+ cursor: default;
+ list-style: none;
+ padding-left: 0;
+ }
+
+ ul.icons li {
+ display: inline-block;
+ padding: 0 1em 0 0;
+ }
+
+ ul.icons li:last-child {
+ padding-right: 0 !important;
+ }
+
+ ul.icons.major {
+ padding: 1em 0;
+ }
+
+ ul.icons.major li {
+ padding-right: 3.5em;
+ }
+
+ @media screen and (max-width: 736px) {
+
+ ul.icons.major li {
+ padding: 0 1em !important;
+ }
+
+ }
+
+ ul.actions {
+ cursor: default;
+ list-style: none;
+ padding-left: 0;
+ }
+
+ ul.actions li {
+ display: inline-block;
+ padding: 0 1.5em 0 0;
+ vertical-align: middle;
+ }
+
+ ul.actions li:last-child {
+ padding-right: 0;
+ }
+
+ ul.actions.small li {
+ padding: 0 0.75em 0 0;
+ }
+
+ ul.actions.vertical li {
+ display: block;
+ padding: 1.5em 0 0 0;
+ }
+
+ ul.actions.vertical li:first-child {
+ padding-top: 0;
+ }
+
+ ul.actions.vertical li > * {
+ margin-bottom: 0;
+ }
+
+ ul.actions.vertical.small li {
+ padding: 0.75em 0 0 0;
+ }
+
+ ul.actions.vertical.small li:first-child {
+ padding-top: 0;
+ }
+
+ ul.actions.fit {
+ display: table;
+ margin-left: -1.5em;
+ padding: 0;
+ table-layout: fixed;
+ width: calc(100% + 1.5em);
+ }
+
+ ul.actions.fit li {
+ display: table-cell;
+ padding: 0 0 0 1.5em;
+ }
+
+ ul.actions.fit li > * {
+ margin-bottom: 0;
+ }
+
+ ul.actions.fit.small {
+ margin-left: -0.75em;
+ width: calc(100% + 0.75em);
+ }
+
+ ul.actions.fit.small li {
+ padding: 0 0 0 0.75em;
+ }
+
+ @media screen and (max-width: 736px) {
+
+ ul.actions li {
+ display: block;
+ padding: 1em 0 0 0;
+ text-align: center;
+ width: 100%;
+ }
+
+ ul.actions li:first-child {
+ padding-top: 0;
+ }
+
+ ul.actions li > * {
+ margin: 0 auto !important;
+ max-width: 30em;
+ /* width: 100%; */
+ }
+
+ ul.actions li > *.icon:before {
+ margin-left: -1em;
+ }
+
+ ul.actions.small li {
+ padding: 0.5em 0 0 0;
+ }
+
+ ul.actions.small li:first-child {
+ padding-top: 0;
+ }
+
+ }
+
+ dl {
+ margin: 0 0 2em 0;
+ }
+
+
+
+
+
+
+
+
+
+
+
+/* Button */
+
+ input[type="submit"],
+ input[type="reset"],
+ input[type="button"],
+ button,
+ .button {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ -ms-appearance: none;
+ appearance: none;
+ -moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+ -webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+ -ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+ background-color: transparent;
+ border-radius: 3px;
+ border: 0;
+ box-shadow: inset 0 0 0 2px #fff;
+ color: #fff;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 0.8em;
+ font-weight: 600;
+ height: 3em;
+ letter-spacing: 0.225em;
+ line-height: 3em;
+ padding: 0 2.75em;
+ text-align: center;
+ text-decoration: none;
+ text-transform: uppercase;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ input[type="submit"]:hover,
+ input[type="reset"]:hover,
+ input[type="button"]:hover,
+ button:hover,
+ .button:hover {
+ background-color: rgba(144, 144, 144, 0.25);
+ }
+
+ input[type="submit"]:active,
+ input[type="reset"]:active,
+ input[type="button"]:active,
+ button:active,
+ .button:active {
+ background-color: rgba(144, 144, 144, 0.5);
+ }
+
+ input[type="submit"].icon:before,
+ input[type="reset"].icon:before,
+ input[type="button"].icon:before,
+ button.icon:before,
+ .button.icon:before {
+ margin-right: 0.5em;
+ }
+
+ input[type="submit"].fit,
+ input[type="reset"].fit,
+ input[type="button"].fit,
+ button.fit,
+ .button.fit {
+ display: block;
+ margin: 0 0 1em 0;
+ width: 100%;
+ }
+
+ input[type="submit"].small,
+ input[type="reset"].small,
+ input[type="button"].small,
+ button.small,
+ .button.small {
+ font-size: 0.8em;
+ }
+
+ input[type="submit"].big,
+ input[type="reset"].big,
+ input[type="button"].big,
+ button.big,
+ .button.big {
+ font-size: 1.35em;
+ }
+
+ input[type="submit"].special,
+ input[type="reset"].special,
+ input[type="button"].special,
+ button.special,
+ .button.special {
+ background-color: #ed4933;
+ box-shadow: none !important;
+ color: #ffffff !important;
+ }
+
+ input[type="submit"].special:hover,
+ input[type="reset"].special:hover,
+ input[type="button"].special:hover,
+ button.special:hover,
+ .button.special:hover {
+ background-color: #ef5e4a !important;
+ }
+
+ input[type="submit"].special:active,
+ input[type="reset"].special:active,
+ input[type="button"].special:active,
+ button.special:active,
+ .button.special:active {
+ background-color: #eb341c !important;
+ }
+
+ input[type="submit"].disabled, input[type="submit"]:disabled,
+ input[type="reset"].disabled,
+ input[type="reset"]:disabled,
+ input[type="button"].disabled,
+ input[type="button"]:disabled,
+ button.disabled,
+ button:disabled,
+ .button.disabled,
+ .button:disabled {
+ -moz-pointer-events: none;
+ -webkit-pointer-events: none;
+ -ms-pointer-events: none;
+ pointer-events: none;
+ opacity: 0.25;
+ }
+
+ @media screen and (max-width: 736px) {
+
+ input[type="submit"],
+ input[type="reset"],
+ input[type="button"],
+ button,
+ .button {
+ height: 3.75em;
+ line-height: 3.75em;
+ }
+
+ }
+
+
+/* Landing */
+
+ body.landing #page-wrapper {
+ background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-image: -ms-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-image: linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-attachment: fixed;
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ padding-top: 0;
+ }
+
+ body.landing #footer {
+ background-color: rgba(29, 36, 42, 0.9);
+ }
+
+ body.is-mobile.landing #page-wrapper {
+ background: none;
+ }
+
+ body.is-mobile.landing #banner,
+ body.is-mobile.landing .wrapper.style4 {
+ background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-image: -ms-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-image: linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../img/banner.jpg");
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ }
+
+ body.is-mobile.landing #footer {
+ background-color: #1d242a;
+ }
+
+
+
+
+/* Basic */
+
+ @-ms-viewport {
+ width: device-width;
+ }
+
+ body.is-loading *, body.is-loading *:before, body.is-loading *:after {
+ -moz-animation: none !important;
+ -webkit-animation: none !important;
+ -ms-animation: none !important;
+ animation: none !important;
+ -moz-transition: none !important;
+ -webkit-transition: none !important;
+ -ms-transition: none !important;
+ transition: none !important;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/panel/public/js/jd1.js b/panel/public/js/jd1.js
new file mode 100755
index 0000000..20e9056
--- /dev/null
+++ b/panel/public/js/jd1.js
@@ -0,0 +1,136 @@
+var qrcode, userCookie, timeId;
+
+$.ajaxSetup({
+ cache: false
+});
+
+$("#login").click(function () {
+ $user = $(".username").val();
+ $password = $(".password").val();
+ if (!$user || !$password) return;
+
+ $.post('./auth', {
+ username: $user,
+ password: $password
+ }, function (data) {
+ if (data.err == 0) {
+ window.location.href = "./usrconfig";
+ } else {
+ Swal.fire({
+ text: data.msg,
+ icon: 'error'
+ })
+ }
+ });
+ return false;
+});
+
+$(document).ready(function () {
+ qrcode = new QRCode(document.getElementById('qrcode'), {
+ text: 'sample',
+ correctLevel: QRCode.CorrectLevel.L,
+ });
+
+ function checkLogin(user) {
+ var timeId = setInterval(() => {
+ let timeStamp = new Date().getTime();
+ var msg = $('#ps').val();
+ console.log(user);
+ $.post(`./cookie2?t=${timeStamp}`, { user, msg }, function (data) {
+ if (data.err == 0) {
+ clearInterval(timeId);
+ $('#qrcontainer').addClass('hidden');
+ $('#refresh_qrcode').addClass('hidden');
+ userCookie = data.cookie;
+ msg = data.msg || '无备注';
+ Swal.fire({
+ title: msg || '🎈添加成功🎈',
+ /*
+ html:
+ '' +
+ userCookie +
+ '
',
+ text: userCookie,
+ */
+ icon: 'success',
+ confirmButtonText: '返回',
+ }).then((result) => {
+ do_landing();
+ });
+ } else if (data.err == 21) {
+ clearInterval(timeId);
+ $('#refresh_qrcode').removeClass('hidden');
+ }
+ });
+ }, 3000);
+ }
+
+ function GetQrCode() {
+ let timeStamp = new Date().getTime();
+ $.get('./qrcode?t=' + timeStamp, function (data) {
+ if (data.err == 0) {
+ $('#qrcontainer').removeClass('hidden');
+ $('#refresh_qrcode').addClass('hidden');
+ $('.landing').addClass('is-loading');
+ qrcode.clear();
+ qrcode.makeCode(data.qrcode);
+ checkLogin(data.user);
+ } else {
+ Swal.fire({
+ text: data.msg,
+ icon: 'error',
+ });
+ }
+ });
+ }
+
+ function JumpToApp() {
+ let timeStamp = new Date().getTime();
+ $.get('./qrcode?t=' + timeStamp, function (data) {
+ if (data.err == 0) {
+ $('#qrcontainer').removeClass('hidden');
+ $('#refresh_qrcode').addClass('hidden');
+ $('.landing').addClass('is-loading');
+ window.location.href = `openapp.jdmobile://virtual/ad?params=${encodeURI(
+ JSON.stringify({
+ category: 'jump',
+ des: 'ThirdPartyLogin',
+ action: 'to',
+ onekeylogin: 'return',
+ url: data.qrcode,
+ authlogin_returnurl: 'weixin://',
+ browserlogin_fromurl: window.location.host,
+ })
+ )}`;
+ checkLogin(data.user);
+ } else {
+ Swal.fire({
+ text: data.msg,
+ icon: 'error',
+ });
+ }
+ });
+ }
+
+ $('.refresh').click(GetQrCode);
+ $('#GetQrCode').click(GetQrCode);
+ $('#JumpToApp').click(JumpToApp);
+
+ $('.qframe-close').click(function () {
+ qframe_close();
+ });
+
+ function do_landing() {
+ window.setTimeout(function () {
+ $('.landing').removeClass('is-loading');
+ }, 100);
+ }
+
+ function qframe_close() {
+ $("#qrcontainer").addClass("hidden");
+ $("#refresh_qrcode").addClass("hidden");
+ //window.location.reload();
+ clearInterval(timeId);
+ do_landing();
+ }
+});
\ No newline at end of file
diff --git a/panel/public/js/jquery.base64.js b/panel/public/js/jquery.base64.js
new file mode 100755
index 0000000..3ebcc24
--- /dev/null
+++ b/panel/public/js/jquery.base64.js
@@ -0,0 +1,123 @@
+/*!
+ * jquery.base64.js 0.0.3 - https://github.com/yckart/jquery.base64.js
+ * Makes Base64 en & -decoding simpler as it is.
+ *
+ * Based upon: https://gist.github.com/Yaffle/1284012
+ *
+ * Copyright (c) 2012 Yannick Albert (http://yckart.com)
+ * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php).
+ * 2013/02/10
+ **/
+;(function($) {
+
+ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
+ a256 = '',
+ r64 = [256],
+ r256 = [256],
+ i = 0;
+
+ var UTF8 = {
+
+ /**
+ * Encode multi-byte Unicode string into utf-8 multiple single-byte characters
+ * (BMP / basic multilingual plane only)
+ *
+ * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars
+ *
+ * @param {String} strUni Unicode string to be encoded as UTF-8
+ * @returns {String} encoded string
+ */
+ encode: function(strUni) {
+ // use regular expressions & String.replace callback function for better efficiency
+ // than procedural approaches
+ var strUtf = strUni.replace(/[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz
+ function(c) {
+ var cc = c.charCodeAt(0);
+ return String.fromCharCode(0xc0 | cc >> 6, 0x80 | cc & 0x3f);
+ })
+ .replace(/[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
+ function(c) {
+ var cc = c.charCodeAt(0);
+ return String.fromCharCode(0xe0 | cc >> 12, 0x80 | cc >> 6 & 0x3F, 0x80 | cc & 0x3f);
+ });
+ return strUtf;
+ },
+
+ /**
+ * Decode utf-8 encoded string back into multi-byte Unicode characters
+ *
+ * @param {String} strUtf UTF-8 string to be decoded back to Unicode
+ * @returns {String} decoded string
+ */
+ decode: function(strUtf) {
+ // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
+ var strUni = strUtf.replace(/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars
+ function(c) { // (note parentheses for precence)
+ var cc = ((c.charCodeAt(0) & 0x0f) << 12) | ((c.charCodeAt(1) & 0x3f) << 6) | (c.charCodeAt(2) & 0x3f);
+ return String.fromCharCode(cc);
+ })
+ .replace(/[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars
+ function(c) { // (note parentheses for precence)
+ var cc = (c.charCodeAt(0) & 0x1f) << 6 | c.charCodeAt(1) & 0x3f;
+ return String.fromCharCode(cc);
+ });
+ return strUni;
+ }
+ };
+
+ while(i < 256) {
+ var c = String.fromCharCode(i);
+ a256 += c;
+ r256[i] = i;
+ r64[i] = b64.indexOf(c);
+ ++i;
+ }
+
+ function code(s, discard, alpha, beta, w1, w2) {
+ s = String(s);
+ var buffer = 0,
+ i = 0,
+ length = s.length,
+ result = '',
+ bitsInBuffer = 0;
+
+ while(i < length) {
+ var c = s.charCodeAt(i);
+ c = c < 256 ? alpha[c] : -1;
+
+ buffer = (buffer << w1) + c;
+ bitsInBuffer += w1;
+
+ while(bitsInBuffer >= w2) {
+ bitsInBuffer -= w2;
+ var tmp = buffer >> bitsInBuffer;
+ result += beta.charAt(tmp);
+ buffer ^= tmp << bitsInBuffer;
+ }
+ ++i;
+ }
+ if(!discard && bitsInBuffer > 0) result += beta.charAt(buffer << (w2 - bitsInBuffer));
+ return result;
+ }
+
+ var Plugin = $.base64 = function(dir, input, encode) {
+ return input ? Plugin[dir](input, encode) : dir ? null : this;
+ };
+
+ Plugin.btoa = Plugin.encode = function(plain, utf8encode) {
+ plain = Plugin.raw === false || Plugin.utf8encode || utf8encode ? UTF8.encode(plain) : plain;
+ plain = code(plain, false, r256, b64, 8, 6);
+ return plain + '===='.slice((plain.length % 4) || 4);
+ };
+
+ Plugin.atob = Plugin.decode = function(coded, utf8decode) {
+ coded = coded.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+ coded = String(coded).split('=');
+ var i = coded.length;
+ do {--i;
+ coded[i] = code(coded[i], true, r64, a256, 6, 8);
+ } while (i > 0);
+ coded = coded.join('');
+ return Plugin.raw === false || Plugin.utf8decode || utf8decode ? UTF8.decode(coded) : coded;
+ };
+}(jQuery));
\ No newline at end of file
diff --git a/panel/public/js/main.js b/panel/public/js/main.js
new file mode 100755
index 0000000..78130a5
--- /dev/null
+++ b/panel/public/js/main.js
@@ -0,0 +1,51 @@
+/*
+ Spectral by HTML5 UP
+ html5up.net | @n33co
+ Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
+*/
+
+(function($) {
+
+ skel
+ .breakpoints({
+ xlarge: '(max-width: 1680px)',
+ large: '(max-width: 1280px)',
+ medium: '(max-width: 980px)',
+ small: '(max-width: 736px)',
+ xsmall: '(max-width: 480px)'
+ });
+
+ $(function() {
+
+ var $window = $(window),
+ $body = $('body'),
+ $wrapper = $('#page-wrapper'),
+ $banner = $('#banner'),
+ $header = $('#header');
+
+ // Disable animations/transitions until the page has loaded.
+ $body.addClass('is-loading');
+
+ $window.on('load', function() {
+ window.setTimeout(function() {
+ $body.removeClass('is-loading');
+ }, 100);
+ });
+
+ // Mobile?
+ if (skel.vars.mobile)
+ $body.addClass('is-mobile');
+ else
+ skel
+ .on('-medium !medium', function() {
+ $body.removeClass('is-mobile');
+ })
+ .on('+medium', function() {
+ $body.addClass('is-mobile');
+ });
+
+
+
+ });
+
+})(jQuery);
\ No newline at end of file
diff --git a/panel/public/js/skel.min.js b/panel/public/js/skel.min.js
new file mode 100755
index 0000000..43a2718
--- /dev/null
+++ b/panel/public/js/skel.min.js
@@ -0,0 +1,2 @@
+/* skel.js v3.0.0-dev | (c) n33 | skel.io | MIT licensed */
+var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),t.indexOf=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},t.isArray=Array.isArray?function(t){return Array.isArray(t)}:function(t){return"[object Array]"===Object.prototype.toString.call(t)},t.iterate=Object.keys?function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},t.matchesMedia=window.matchMedia?function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;n=t.split(/\s+and\s+/);for(a in n)e=n[a],"("==e.charAt(0)&&(e=e.substring(1,e.length-1),i=e.split(/:\s+/),2==i.length&&(r[i[0].replace(/^\s+|\s+$/g,"")]=parseInt(i[1]),o=!0));if(!o)return!1;var s=document.documentElement.clientWidth,c=document.documentElement.clientHeight;return null!==r["min-width"]&&sr["max-width"]||null!==r["min-height"]&&cr["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML=' ",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["wp",/Windows Phone ([0-9\.]+)/,null],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel});
\ No newline at end of file