Files
2026-07-06 19:25:38 +02:00

84 lines
3.4 KiB
R

ui <- function() {
bslib::page(
fillable = FALSE,
theme = bslib::bs_theme(version = 5, primary = "#f59e0b"),
lang = "de",
title = "Beekeeper",
shiny::tags$style(shiny::HTML("
body { background: #fafaf9; }
.bk-header {
background: #78350f; color: white;
position: sticky; top: 0; z-index: 100;
padding: .75rem 1rem;
box-shadow: 0 2px 8px rgba(0,0,0,.3);
min-height: 56px;
}
.bk-header h5 { color: white; margin: 0; font-size: 1.05rem; font-weight: 600; }
.bk-header h4 { color: white; margin: 0; font-size: 1.2rem; font-weight: 700; letter-spacing: -.01em; }
.bk-header .btn-link {
color: rgba(255,255,255,.9) !important; text-decoration: none;
}
.bk-header-icon {
padding: .35rem .45rem; border-radius: .4rem; line-height: 1; flex-shrink: 0;
}
.bk-header-icon:hover { background: rgba(255,255,255,.18) !important; color: white !important; }
.collapse-toggle { cursor: pointer; user-select: none; }
.collapse-toggle .collapse-chevron { transition: transform .2s ease; }
.collapse-toggle:not(.collapsed) .collapse-chevron { transform: rotate(180deg); }
.bk-content { max-width: 680px; margin: 0 auto; padding: 1rem 1rem 4rem; }
.tap-card { cursor: pointer; transition: box-shadow .15s; }
.tap-card:hover { box-shadow: 0 0 0 3px #f59e0b44; }
.tap-card:active { box-shadow: 0 0 0 3px #f59e0b; }
.action-btn {
display: flex; flex-direction: column;
align-items: center; justify-content: center;
height: 80px; gap: .35rem;
font-size: .82rem; font-weight: 600;
border-radius: 12px;
}
.action-btn .fa, .action-btn .fas, .action-btn .far { font-size: 1.4rem; }
.stepper-val {
min-width: 2.8rem; display: inline-block;
text-align: center; font-size: 1.3rem; font-weight: 700;
}
.bk-check .form-check { margin: 0; }
.bk-check .form-check-input {
width: 3em; height: 1.5em; margin-top: 0; cursor: pointer;
}
.add-dashed {
border: 2px dashed #ccc; background: transparent;
border-radius: 8px; cursor: pointer; width: 100%;
min-height: 100px; color: #888;
display: flex; align-items: center; justify-content: center;
gap: .5rem; flex-direction: column; font-weight: 600;
}
.add-dashed:hover { border-color: #f59e0b; color: #f59e0b; background: #fffbeb; }
.leaflet-container { border-radius: 8px; }
.leaflet-top, .leaflet-bottom { z-index: 50 !important; }
#ss-connect-dialog, .shiny-disconnected-overlay { display: none !important; }
")),
shiny::tags$script(shiny::HTML("
$(document).on('shown.bs.modal', function() {
setTimeout(function() { window.dispatchEvent(new Event('resize')); }, 150);
});
history.pushState({bk: true}, '');
window.addEventListener('popstate', function() {
history.pushState({bk: true}, '');
if (window.Shiny) Shiny.setInputValue('nav_back', Date.now(), {priority: 'event'});
});
setInterval(function() {
if (window.Shiny && Shiny.shinyapp && Shiny.shinyapp.isConnected())
Shiny.setInputValue('keepalive_ping', Date.now());
}, 25000);
")),
shiny::uiOutput("nav_header"),
shiny::div(class = "bk-content",
shiny::uiOutput("screen_content")
)
)
}