Merge privacy-footer-overlay into dev (PRIVACY footer button + centered overlay note)
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 2m11s
Deploy DeepDrftManager / Build & Publish (push) Successful in 1m29s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m56s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m33s
Deploy DeepDrftManager / Deploy (push) Successful in 1m29s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m29s
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 2m11s
Deploy DeepDrftManager / Build & Publish (push) Successful in 1m29s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m56s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m33s
Deploy DeepDrftManager / Deploy (push) Successful in 1m29s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m29s
This commit is contained in:
@@ -4,8 +4,34 @@
|
|||||||
<ul class="deepdrft-footer-links">
|
<ul class="deepdrft-footer-links">
|
||||||
<li><a href="/about">About</a></li>
|
<li><a href="/about">About</a></li>
|
||||||
<li><a href="#">Contact</a></li>
|
<li><a href="#">Contact</a></li>
|
||||||
|
<li><button class="deepdrft-footer-privacy-btn" @onclick="@OpenPrivacy" type="button" aria-haspopup="dialog">Privacy</button></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="deepdrft-footer-copy">© 2026 Deep DRFT</div>
|
<div class="deepdrft-footer-copy">© 2026 Deep DRFT</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="deepdrft-footer-privacy">We keep a random tag in your browser so we can count how many people a track reaches — not who they are. No account, no name, nothing personal, nothing shared with anyone else. Clear your browser data and the tag’s gone.</p>
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
<MudOverlay Visible="@_privacyOpen"
|
||||||
|
DarkBackground="true"
|
||||||
|
Modal="true"
|
||||||
|
OnClick="@ClosePrivacy"
|
||||||
|
Class="deepdrft-privacy-overlay">
|
||||||
|
<div class="deepdrft-privacy-modal" @onclick:stopPropagation="true">
|
||||||
|
<div class="deepdrft-privacy-modal-header">
|
||||||
|
<span class="deepdrft-privacy-modal-title">Privacy</span>
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.Close"
|
||||||
|
Size="Size.Small"
|
||||||
|
Color="Color.Default"
|
||||||
|
OnClick="@ClosePrivacy"
|
||||||
|
aria-label="Close privacy note"
|
||||||
|
Class="deepdrft-privacy-modal-close" />
|
||||||
|
</div>
|
||||||
|
<p class="deepdrft-privacy-modal-body">We keep a random tag in your browser so we can count how many people a track reaches — not who they are. No account, no name, nothing personal, nothing shared with anyone else. Clear your browser data and the tag’s gone.</p>
|
||||||
|
</div>
|
||||||
|
</MudOverlay>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private bool _privacyOpen;
|
||||||
|
|
||||||
|
private void OpenPrivacy() => _privacyOpen = true;
|
||||||
|
private void ClosePrivacy() => _privacyOpen = false;
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,7 +38,8 @@
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.deepdrft-footer-links a {
|
.deepdrft-footer-links a,
|
||||||
|
.deepdrft-footer-links button {
|
||||||
font-family: var(--deepdrft-font-mono);
|
font-family: var(--deepdrft-font-mono);
|
||||||
font-size: 0.62rem;
|
font-size: 0.62rem;
|
||||||
letter-spacing: 0.18em;
|
letter-spacing: 0.18em;
|
||||||
@@ -48,7 +49,8 @@
|
|||||||
transition: color 0.2s;
|
transition: color 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.deepdrft-footer-links a:hover { color: var(--deepdrft-navy); }
|
.deepdrft-footer-links a:hover,
|
||||||
|
.deepdrft-footer-links button:hover { color: var(--deepdrft-navy); }
|
||||||
|
|
||||||
.deepdrft-footer-copy {
|
.deepdrft-footer-copy {
|
||||||
font-family: var(--deepdrft-font-mono);
|
font-family: var(--deepdrft-font-mono);
|
||||||
@@ -57,14 +59,16 @@
|
|||||||
color: var(--deepdrft-muted);
|
color: var(--deepdrft-muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
.deepdrft-footer-privacy {
|
/* PRIVACY trigger — reset button chrome so it reads as a link, not a button element.
|
||||||
font-family: var(--deepdrft-font-mono);
|
Typography/colour shared with footer <a> links via the grouped selector above. */
|
||||||
font-size: 0.55rem;
|
.deepdrft-footer-privacy-btn {
|
||||||
letter-spacing: 0.08em;
|
background: none;
|
||||||
color: var(--deepdrft-muted);
|
border: none;
|
||||||
opacity: 0.7;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.6;
|
cursor: pointer;
|
||||||
|
line-height: inherit;
|
||||||
|
font-family: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 440px) {
|
@media (max-width: 440px) {
|
||||||
|
|||||||
@@ -917,3 +917,82 @@ body:has(.deepdrft-queue-overlay) {
|
|||||||
max-height: 184px;
|
max-height: 184px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
PRIVACY OVERLAY
|
||||||
|
Screen-centered modal following the same MudOverlay idiom as the visualizer
|
||||||
|
controls and queue overlays. MudOverlay portals to body — CSS isolation cannot
|
||||||
|
reach portaled content, so chrome lives here in the global sheet.
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
/* Raise above the sticky header (100), player dock (1200), and minimized FAB (1300). */
|
||||||
|
.deepdrft-privacy-overlay {
|
||||||
|
z-index: 1400 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mild tint: doubled selector (0,2,0) outranks MudBlazor's .mud-overlay-dark (0,1,0). */
|
||||||
|
.deepdrft-privacy-overlay .mud-overlay-scrim.mud-overlay-dark {
|
||||||
|
background-color: rgba(var(--deepdrft-scrim-rgb), var(--deepdrft-modal-scrim-alpha));
|
||||||
|
}
|
||||||
|
|
||||||
|
.deepdrft-privacy-overlay .mud-overlay-content {
|
||||||
|
max-height: 90vh;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lock body scroll while the overlay is open. */
|
||||||
|
body:has(.deepdrft-privacy-overlay) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Panel: compact width, navy-panel ground, thin light border — matches queue/visualizer chrome. */
|
||||||
|
.deepdrft-privacy-modal {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: min(90vw, 480px);
|
||||||
|
background: var(--deepdrft-panel-ground);
|
||||||
|
border: 1px solid var(--deepdrft-border-light);
|
||||||
|
border-radius: 0;
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deepdrft-privacy-modal-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0.85rem 0.85rem 0.85rem 1rem;
|
||||||
|
border-bottom: 1px solid var(--deepdrft-border-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mono uppercase eyebrow — matches queue modal title. */
|
||||||
|
.deepdrft-privacy-modal-title {
|
||||||
|
font-family: var(--deepdrft-font-mono);
|
||||||
|
font-size: 0.72rem;
|
||||||
|
letter-spacing: 0.2em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--deepdrft-white);
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tuck the close icon flush with the panel edge; keep it subtle. */
|
||||||
|
.deepdrft-privacy-modal-close {
|
||||||
|
opacity: 0.6;
|
||||||
|
color: var(--deepdrft-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deepdrft-privacy-modal-close:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Privacy copy: same mono treatment as the former inline paragraph, but readable on dark ground. */
|
||||||
|
.deepdrft-privacy-modal-body {
|
||||||
|
font-family: var(--deepdrft-font-mono);
|
||||||
|
font-size: 0.72rem;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
line-height: 1.7;
|
||||||
|
color: var(--deepdrft-white);
|
||||||
|
opacity: 0.8;
|
||||||
|
margin: 0;
|
||||||
|
padding: 1rem 1rem 1.25rem;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user