feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run

- 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
This commit is contained in:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,442 @@
// out: false
@import "../../../../assets/less/core/boot.less";
.field-repeater {
padding-top: 5px;
.field-repeater-items {
counter-reset: repeater-index-counter;
}
ul.field-repeater-items,
li.field-repeater-item {
padding: 0;
margin: 0;
list-style: none;
}
ul.field-repeater-items > li {
&.dragged {
opacity: .7;
position: absolute;
padding-top: 15px;
padding-right: 15px;
z-index: 2000;
background-color: @body-bg;
border: 1px dashed #dbdee0;
.repeater-item-remove {
opacity: 0;
}
.repeater-item-collapsed-title {
top: 5px;
}
}
&.placeholder {
display: block;
position: relative;
height: 25px;
margin-bottom: 5px;
&:before {
display: block;
position: absolute;
.icon(@chevron-right);
color: #d35714;
left: -10px;
top: 8px;
z-index: 2000;
}
}
}
li.field-repeater-item {
position: relative;
margin: 0 0 1em 1em !important;
padding: 1.5em 1.25em 0 1.25em !important;
background: #f5f5f5;
border: 1px solid @input-border;
border-radius: @border-radius-base;
box-shadow: @input-box-shadow;
min-height: 30px;
&:before {
color: #bdc3c7;
.icon(@circle);
font-size: 8px;
position: absolute;
left: -18px;
top: -2px;
}
&:after {
counter-increment: repeater-index-counter;
content: counter(repeater-index-counter);
display: block;
position: absolute;
font-size: 12px;
left: -27px;
color: #bdc3c7;
top: 10px;
width: 24px;
text-align: center;
}
&.collapsed {
.field-repeater-form {
display:none;
}
.repeater-item-collapse {
.repeater-item-collapse-one {
.transform(scale(1,-1));
}
}
.repeater-item-collapsed-title {
display: block;
}
}
.repeater-item-collapsed-title {
display: none;
position: absolute;
font-size: 13px;
top: 50%;
left: 10px;
.transform(translateY(-50%));
}
.field-repeater-form {
position: relative;
top: -7px;
.clearfix;
}
.repeater-item-handle {
position: absolute;
top: -6px;
left: -25px;
color: #bdc3c7;
background: @body-bg;
cursor: move;
opacity: 0;
border-radius: 999px;
.transition(~'opacity 0.5s');
&:hover {
color: #999;
}
}
.repeater-item-collapse {
position: absolute;
top: 5px;
right: 30px;
z-index: 90;
a, button {
.transition(~'transform 0.3s');
color: #bdc3c7;
line-height: 20px;
display: block;
font-size: 12px;
&:hover,
&:focus {
color: #999;
text-decoration: none;
}
}
}
.repeater-item-remove {
position: absolute;
top: 4px;
right: 5px;
z-index: 90;
&.disabled {
display: none;
+ .repeater-item-collapse {
right: 7px;
}
}
.close {
float: none;
display: inline-block;
}
}
.repeater-item-collapse,
.repeater-item-handle,
.repeater-item-remove {
width: 20px;
height: 20px;
text-align: center;
}
&:hover, &:active {
.repeater-item-collapse,
.repeater-item-handle,
.repeater-item-remove {
opacity: 1;
}
}
}
.field-repeater-add-item {
position: relative;
margin-top: 10px;
margin-left: 20px;
border: 2px dotted #e0e0e0;
border-radius: 5px;
&:before {
color: #bdc3c7;
.icon(@plus);
font-size: 16px;
position: absolute;
left: -23px;
top: -11px;
}
> a {
color: #bdc3c7;
text-align: center;
display: block;
text-decoration: none;
padding: 13px 15px;
text-transform: uppercase;
font-weight: 600;
font-size: @font-size-base - 2;
}
&:hover, &:focus {
background-color: @highlight-hover-bg;
border-color: transparent;
&:before {
color: #999;
}
> a {
color: @highlight-hover-text;
}
}
&:active {
background: @highlight-active-bg;
border-color: transparent;
> a {
color: @highlight-active-text;
}
}
&.in-progress {
border-color: #e0e0e0 !important;
background: transparent !important;
}
}
&[data-mode="grid"] {
> ul.field-repeater-items {
display: grid;
gap: 20px;
> .field-repeater-item {
margin-bottom: 0 !important;
}
> .field-repeater-add-item {
margin-top: 0;
> a {
display: flex;
flex-direction: column;
justify-content: center;
height: 100%;
}
&:before {
display: none;
}
}
}
&[data-columns="2"] ul.field-repeater-items {
grid-template-columns: repeat(2, 1fr);
}
&[data-columns="3"] ul.field-repeater-items {
grid-template-columns: repeat(3, 1fr);
}
&[data-columns="4"] ul.field-repeater-items {
grid-template-columns: repeat(4, 1fr);
@media (max-width: 1600px) {
grid-template-columns: repeat(3, 1fr);
}
}
&[data-columns="5"] ul.field-repeater-items {
grid-template-columns: repeat(5, 1fr);
@media (max-width: 1600px) {
grid-template-columns: repeat(4, 1fr);
}
}
&[data-columns="6"] ul.field-repeater-items {
grid-template-columns: repeat(6, 1fr);
@media (max-width: 1600px) {
grid-template-columns: repeat(4, 1fr);
}
}
@media (min-width: @screen-sm-min) and (max-width: @screen-md-max) {
> ul.field-repeater-items {
grid-template-columns: repeat(2, 1fr) !important;;
}
}
@media (max-width: @screen-xs-max) {
> ul.field-repeater-items {
grid-template-columns: 1fr !important;
> .field-repeater-item,
> .field-repeater-add-item {
min-height: 0 !important;
}
> .field-repeater-add-item {
margin-top: 10px;
&::before {
display: block;
}
}
}
}
}
}
//
// Grouped Repeater Palette
//
.repeater-group-search-container {
padding: 10px 15px;
border-bottom: 1px solid #e0e0e0;
> div {
position: relative;
}
.icon-search {
position: absolute;
left: 10px;
top: 50%;
transform: translateY(-50%);
color: #999;
pointer-events: none;
z-index: 10;
}
.repeater-group-search {
padding-left: 32px;
padding-right: 32px;
width: 100%;
}
.repeater-group-search-clear {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
background: transparent;
border: none;
padding: 4px 6px;
cursor: pointer;
display: none;
z-index: 10;
color: #999;
i {
font-size: 14px;
}
&:hover {
color: #666;
}
}
}
.repeater-group-no-results {
display: none;
padding: 20px;
text-align: center;
color: #999;
}
.repeater-group-items-container {
min-width: 500px;
max-width: 800px;
}
.repeater-group-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 8px;
padding: 15px;
.repeater-group-item {
a {
display: flex;
height: 100%;
align-items: center;
gap: 16px;
padding: 12px 12px 12px 16px;
border: 1px solid #e0e0e0;
border-radius: @border-radius-base;
text-decoration: none;
color: inherit;
transition: all 0.2s;
i {
width: 1em;
text-align: center;
font-size: 24px;
color: #666;
margin-top: 2px;
flex-shrink: 0;
}
> div {
flex: 1;
min-width: 0;
.title {
font-weight: 600;
font-size: 13px;
display: block;
margin-bottom: 2px;
}
.description {
font-size: 11px;
color: #999;
display: block;
line-height: 1.3;
}
}
&:hover {
border-color: @link-color;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
transform: translateY(-2px);
}
}
}
}