Release 1.6.0: restyle Windows secondary buttons and bump version.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+56
-19
@@ -158,22 +158,54 @@
|
||||
.switch input:checked + .slider { background: var(--accent); }
|
||||
.switch input:checked + .slider::before { transform: translateX(18px); }
|
||||
|
||||
.actions { display: grid; gap: 8px; }
|
||||
.actions { display: grid; gap: 10px; }
|
||||
button.action {
|
||||
appearance: none; border: 0; border-radius: 14px;
|
||||
padding: 13px 16px; font: inherit; font-weight: 700; cursor: pointer;
|
||||
transition: transform .12s, background .15s, opacity .15s;
|
||||
appearance: none; border: 0; border-radius: 16px;
|
||||
padding: 14px 16px; font: inherit; font-weight: 700; cursor: pointer;
|
||||
transition: transform .12s, background .15s, opacity .15s, box-shadow .15s, border-color .15s, color .15s;
|
||||
box-shadow: 0 8px 18px rgba(16, 36, 28, 0.08);
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
button.action:active { transform: translateY(1px); box-shadow: 0 3px 10px rgba(16, 36, 28, 0.08); }
|
||||
button.action:disabled { opacity: .55; cursor: not-allowed; transform: none; box-shadow: none; }
|
||||
.primary {
|
||||
background: linear-gradient(145deg, #0c7a55, #12966a);
|
||||
color: #f4fff9;
|
||||
box-shadow: 0 12px 28px rgba(12, 122, 85, 0.28);
|
||||
}
|
||||
.primary:hover:not(:disabled) {
|
||||
background: linear-gradient(145deg, #0e8a60, #14a575);
|
||||
box-shadow: 0 14px 30px rgba(12, 122, 85, 0.34);
|
||||
}
|
||||
.primary.danger {
|
||||
background: linear-gradient(145deg, #b42318, #d6453a);
|
||||
box-shadow: 0 12px 28px rgba(180, 35, 24, 0.25);
|
||||
}
|
||||
.primary.danger:hover:not(:disabled) {
|
||||
background: linear-gradient(145deg, #c52c20, #e05548);
|
||||
}
|
||||
.secondary {
|
||||
background: linear-gradient(180deg, #ffffff, #eef7f2);
|
||||
color: var(--ink);
|
||||
border: 1px solid rgba(16, 36, 28, 0.14);
|
||||
}
|
||||
.secondary:hover:not(:disabled) {
|
||||
background: #fff;
|
||||
border-color: rgba(12, 122, 85, 0.35);
|
||||
color: var(--accent);
|
||||
box-shadow: 0 10px 22px rgba(16, 36, 28, 0.12);
|
||||
}
|
||||
button.action:active { transform: translateY(1px); }
|
||||
button.action:disabled { opacity: .55; cursor: not-allowed; transform: none; }
|
||||
.primary { background: var(--accent); color: #f4fff9; }
|
||||
.primary:hover:not(:disabled) { background: var(--accent-2); }
|
||||
.primary.danger { background: var(--danger); }
|
||||
.ghost {
|
||||
background: transparent; color: var(--muted);
|
||||
border: 1px solid var(--line);
|
||||
background: linear-gradient(180deg, #ffffff, #eef7f2);
|
||||
color: var(--ink);
|
||||
border: 1px solid rgba(16, 36, 28, 0.14);
|
||||
}
|
||||
.ghost:hover:not(:disabled) {
|
||||
background: #fff;
|
||||
border-color: rgba(12, 122, 85, 0.35);
|
||||
color: var(--accent);
|
||||
box-shadow: 0 10px 22px rgba(16, 36, 28, 0.12);
|
||||
}
|
||||
.ghost:hover:not(:disabled) { background: rgba(255,255,255,.75); color: var(--ink); }
|
||||
|
||||
.meta {
|
||||
margin-top: 14px; font-size: .82rem; color: var(--muted);
|
||||
@@ -217,14 +249,19 @@
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
box-shadow: none;
|
||||
}
|
||||
.shop-link:hover { text-decoration: underline; }
|
||||
|
||||
.tools {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 8px;
|
||||
margin-top: 10px;
|
||||
gap: 10px;
|
||||
margin-top: 0;
|
||||
}
|
||||
.tools .action {
|
||||
min-height: 48px;
|
||||
font-size: .92rem;
|
||||
}
|
||||
.ping-list {
|
||||
margin-top: 10px;
|
||||
@@ -406,12 +443,12 @@
|
||||
|
||||
<div class="actions">
|
||||
<button class="action primary" id="toggleBtn" type="button">Подключить</button>
|
||||
<button class="action ghost" id="saveBtn" type="button">Сохранить профиль</button>
|
||||
<button class="action secondary" id="saveBtn" type="button">Сохранить профиль</button>
|
||||
<div class="tools">
|
||||
<button class="action ghost" id="pingBtn" type="button">Пинг серверов</button>
|
||||
<button class="action ghost" id="updCheckBtn" type="button">Проверить обновление</button>
|
||||
<button class="action secondary" id="pingBtn" type="button">Пинг серверов</button>
|
||||
<button class="action secondary" id="updCheckBtn" type="button">Проверить обновление</button>
|
||||
</div>
|
||||
<button class="action ghost" id="coreBtn" type="button">Установить cores (naive + hysteria2)</button>
|
||||
<button class="action secondary" id="coreBtn" type="button">Установить cores (naive + hysteria2)</button>
|
||||
</div>
|
||||
<div class="ping-list" id="pingList"></div>
|
||||
<p class="meta" id="meta">Загрузка…</p>
|
||||
@@ -439,7 +476,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button class="action ghost" id="cancelNew" type="button">Отмена</button>
|
||||
<button class="action secondary" id="cancelNew" type="button">Отмена</button>
|
||||
<button class="action primary" id="createNew" type="button">Создать</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -39,7 +39,7 @@ func Fetch(ctx context.Context, rawURL string) ([]Item, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.Header.Set("User-Agent", "Navis/1.4.1")
|
||||
req.Header.Set("User-Agent", "Navis/1.6.0")
|
||||
client := &http.Client{Timeout: 45 * time.Second}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
|
||||
@@ -17,7 +17,7 @@ import (
|
||||
)
|
||||
|
||||
// CurrentVersion is the shipped client version.
|
||||
const CurrentVersion = "1.4.1"
|
||||
const CurrentVersion = "1.6.0"
|
||||
|
||||
// DefaultManifestURL is the update feed (hosted in the project git repo).
|
||||
const DefaultManifestURL = "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json"
|
||||
|
||||
Reference in New Issue
Block a user