Files
avives 1f72193a64
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
2026-08-21 19:29:00 -06:00

235 lines
4.3 KiB
Plaintext

//
// Common layout elements
// --------------------------------------------------
html:not(.mobile) body.drag * {
cursor: grab !important;
cursor: -webkit-grab !important;
cursor: -moz-grab !important;
}
// Used by sortable plugin
body.dragging, body.dragging * {
cursor: move !important;
}
body.loading, body.loading * {
cursor: wait !important;
}
body.no-select {
.user-select(none);
cursor: default !important;
}
//
// Layout canvas
//
html,
body {
height: 100%;
/* The html and body elements cannot have any padding or margin. */
}
body {
font-family: @font-family-base;
background: @body-bg;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#layout-canvas {
min-height: 100%;
height: 100%;
}
//
// Font
//
// Removed for performance reasons
//
// @import url(https://fonts.googleapis.com/css?family=Noto+Sans:400,400italic,700,700italic);
//
// body {
// font-family: 'Noto Sans', sans-serif;
// }
//
// Tabs override for Layout
// Primary tabs should use inset by default, unless otherwise specified
// --------------------------------------------------
.control-tabs.primary-tabs {
> ul.nav-tabs, > div > ul.nav-tabs, > div > div > ul.nav-tabs {
margin-left: -(@padding-standard);
margin-right: -(@padding-standard);
}
&.tabs-no-inset {
> ul.nav-tabs, > div > ul.nav-tabs, > div > div > ul.nav-tabs {
margin-left: 0;
margin-right: 0;
}
}
}
//
// Flexible layout system
// --------------------------------------------------
.layout {
.layout-cell() {
display: table-cell;
vertical-align: top;
height: 100%;
&.layout-container, .layout-container, &.padded-container, .padded-container {
padding: @padding-standard @padding-standard 0 @padding-standard;
// Container to sit flush to the element above
.container-flush {
padding-top: 0;
}
}
.layout-relative {
position: relative;
height: 100%;
}
.layout-absolute {
position: absolute;
height: 100%;
width: 100%;
}
&.min-size {
width: 0;
}
&.min-height {
height: 0;
}
&.center {
text-align: center;
}
&.middle {
vertical-align: middle;
}
}
display: table;
table-layout: fixed;
height: 100%;
width: 100%;
> .layout-row {
display: table-row;
vertical-align: top;
height: 100%;
> .layout-cell {
.layout-cell();
}
&.min-size {
height: 0.1px;
}
}
> .layout-cell {
.layout-cell();
}
}
.whiteboard {
background: white;
}
.layout-fill-container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
//
// Calculated fixed width
//
[data-calculate-width] {
> form, > div {
display: inline-block;
}
}
//
// Layout styles
//
body.compact-container {
.layout {
&.layout-container, .layout-container { padding: 0 !important; }
}
}
body.slim-container {
.layout {
&.layout-container, .layout-container { padding-left: 0 !important; padding-right: 0 !important; }
}
}
//
// Screen specific
//
@media (max-width: @screen-sm) {
.layout {
.hide-on-small {
display: none;
}
//
// Layout with a responsive sidebar
//
&.responsive-sidebar {
> .layout-cell:first-child {
display: table-footer-group;
height: auto;
.control-breadcrumb {
display: none;
}
}
> .layout-cell:last-child {
display: table-header-group;
width: auto;
height: auto;
.layout-absolute {
position: static;
}
}
}
}
}
//
// Browser specific
//
// Remove focus outline for mouse clicks, keep for keyboard navigation
@supports (-moz-appearance: none) {
a:focus:not(:focus-visible) {
outline: none;
}
}