Add direct gateway forwarding when VPN is off
This commit is contained in:
@@ -66,10 +66,12 @@ p {
|
||||
}
|
||||
|
||||
.app-body.client-mode {
|
||||
min-height: 100vh;
|
||||
background: var(--client-bg);
|
||||
}
|
||||
|
||||
.client-mode .app-main {
|
||||
min-height: 100vh;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
padding: 48px 24px 32px;
|
||||
@@ -724,10 +726,14 @@ p {
|
||||
display: grid;
|
||||
justify-items: center;
|
||||
gap: 5px;
|
||||
width: 220px;
|
||||
width: 240px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.client-proxies.has-tabs {
|
||||
min-height: 91px;
|
||||
}
|
||||
|
||||
.client-proxy-label {
|
||||
color: var(--client-muted);
|
||||
font-size: 9px;
|
||||
@@ -747,10 +753,44 @@ p {
|
||||
display: grid;
|
||||
justify-items: center;
|
||||
gap: 5px;
|
||||
animation: client-access-reveal 450ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
||||
}
|
||||
|
||||
.client-access-point + .client-access-point {
|
||||
margin-top: 12px;
|
||||
@keyframes client-access-reveal {
|
||||
0% { opacity: 0; filter: blur(4px); }
|
||||
100% { opacity: 1; filter: blur(0); }
|
||||
}
|
||||
|
||||
.client-access-tabs {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
width: 220px;
|
||||
margin-bottom: 8px;
|
||||
border-bottom: 1px solid var(--client-border);
|
||||
}
|
||||
|
||||
.client-access-tabs .client-access-tab {
|
||||
width: auto;
|
||||
padding: 6px 4px 7px;
|
||||
border: 0;
|
||||
border-bottom: 1px solid transparent;
|
||||
background: transparent;
|
||||
color: var(--client-muted);
|
||||
font: 700 9px/1.2 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace;
|
||||
letter-spacing: 0.06em;
|
||||
cursor: pointer;
|
||||
transition: color 220ms ease, border-color 300ms ease, filter 300ms ease;
|
||||
}
|
||||
|
||||
.client-access-tabs .client-access-tab.is-active {
|
||||
border-bottom-color: var(--client-accent);
|
||||
color: var(--client-text);
|
||||
filter: drop-shadow(0 0 5px color-mix(in oklch, var(--client-accent) 45%, transparent));
|
||||
}
|
||||
|
||||
.client-access-tab:focus-visible {
|
||||
outline: 2px solid var(--client-accent);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.client-proxy-actions {
|
||||
@@ -770,7 +810,7 @@ p {
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.client-proxies button {
|
||||
.client-copy-button {
|
||||
position: relative;
|
||||
width: 86px;
|
||||
padding: 6px 10px;
|
||||
@@ -788,7 +828,8 @@ p {
|
||||
transition: opacity 100ms ease;
|
||||
}
|
||||
|
||||
.client-proxies button.is-copied .client-copy-label {
|
||||
.client-copy-button.is-copied .client-copy-label,
|
||||
.client-copy-button.is-copy-error .client-copy-label {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@@ -801,27 +842,32 @@ p {
|
||||
animation: client-copy-fade 800ms cubic-bezier(0.4, 0, 1, 1) forwards;
|
||||
}
|
||||
|
||||
.client-copy-button.is-copy-error .client-copy-feedback {
|
||||
color: oklch(0.68 0.15 28);
|
||||
filter: drop-shadow(0 0 5px oklch(0.68 0.15 28 / 0.45));
|
||||
}
|
||||
|
||||
@keyframes client-copy-fade {
|
||||
0%, 18% { opacity: 1; filter: drop-shadow(0 0 5px var(--client-accent)); }
|
||||
100% { opacity: 0; filter: drop-shadow(0 0 0 transparent); }
|
||||
}
|
||||
|
||||
.client-proxies button:hover {
|
||||
.client-copy-button:hover {
|
||||
color: var(--client-text);
|
||||
opacity: 1;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.client-proxies button:active {
|
||||
.client-copy-button:active {
|
||||
transform: translateY(0) scale(0.98);
|
||||
}
|
||||
|
||||
.client-proxies button.is-copied {
|
||||
.client-copy-button.is-copied {
|
||||
opacity: 1;
|
||||
color: var(--client-accent);
|
||||
}
|
||||
|
||||
.client-proxies button:focus-visible {
|
||||
.client-copy-button:focus-visible {
|
||||
outline: 2px solid var(--client-accent);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
@@ -877,7 +923,9 @@ p {
|
||||
.client-usage,
|
||||
.client-usage > strong,
|
||||
.client-server,
|
||||
.client-proxies button,
|
||||
.client-copy-button,
|
||||
.client-access-tab,
|
||||
.client-access-point,
|
||||
.client-copy-feedback,
|
||||
.client-subscription-edit,
|
||||
.client-subscription-edit::after,
|
||||
|
||||
Reference in New Issue
Block a user