diff --git a/fusion_plating/fusion_plating_shopfloor/__manifest__.py b/fusion_plating/fusion_plating_shopfloor/__manifest__.py index 6c6e3a64..b9c796e9 100644 --- a/fusion_plating/fusion_plating_shopfloor/__manifest__.py +++ b/fusion_plating/fusion_plating_shopfloor/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Shop Floor', - 'version': '19.0.33.1.12', + 'version': '19.0.33.1.13', 'category': 'Manufacturing/Plating', 'summary': 'Shop-floor tablet stations, QR scanning, bake window enforcer, ' 'first-piece inspection gates.', diff --git a/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_column_header.scss b/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_column_header.scss index d082b550..5f35ff15 100644 --- a/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_column_header.scss +++ b/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_column_header.scss @@ -1,19 +1,21 @@ // _column_header.scss — depends on _plant_tokens.scss .o_fp_col_header { - padding: 6px 8px; + padding: 8px 10px; display: flex; align-items: center; justify-content: space-between; gap: 6px; - background: $plant-card-bg; - border: 1px solid $plant-card-border; - border-radius: 6px 6px 0 0; - border-bottom: 0; + // No own background or outer border — the parent .col carries them + // (full-height column-as-card layout). Just a bottom divider so the + // header reads as a distinct band above the scrollable body. + background: transparent; + border-bottom: 1px solid $plant-card-border; + flex: 0 0 auto; &.mine { - background: linear-gradient(180deg, $plant-mine-bg 0%, $plant-card-bg 100%); - border-color: $plant-mine-border; + // .col already paints the mine gradient + gold border. + border-bottom-color: $plant-mine-border; } .col-meta { display: flex; flex-direction: column; gap: 1px; min-width: 0; } diff --git a/fusion_plating/fusion_plating_shopfloor/static/src/scss/plant_kanban.scss b/fusion_plating/fusion_plating_shopfloor/static/src/scss/plant_kanban.scss index ea9ffdf8..f5ba6f88 100644 --- a/fusion_plating/fusion_plating_shopfloor/static/src/scss/plant_kanban.scss +++ b/fusion_plating/fusion_plating_shopfloor/static/src/scss/plant_kanban.scss @@ -3,7 +3,13 @@ .o_fp_plant_kanban { padding: 8px; background: $plant-bg; - min-height: 100vh; + // Full viewport height + flex column so .board can grow to fill all + // remaining vertical space. min-height: 100vh would let .board's + // intrinsic height bubble up and put the horizontal scrollbar + // mid-page; height + flex pins the scrollbar to the viewport bottom. + height: 100vh; + display: flex; + flex-direction: column; color: $plant-text; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; @@ -14,9 +20,8 @@ padding: 8px 12px; margin-bottom: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); - position: sticky; - top: 0; - z-index: 10; + // Keep header at natural height; board takes remaining space. + flex: 0 0 auto; display: flex; flex-direction: column; gap: 8px; @@ -97,35 +102,49 @@ // (~280px) sits comfortably with breathing room. On a 1920px // desktop ~6 columns visible; on a 1366px tablet ~4 visible with // smooth horizontal scroll. User explicitly accepted side-scrolling. + // + // flex: 1 + min-height: 0 — the board fills all remaining vertical + // space below the sticky header, so the horizontal scrollbar pins + // to the viewport bottom (not mid-page where the board's natural + // height would have ended). .board { display: grid; grid-template-columns: repeat(9, minmax(300px, 1fr)); gap: 8px; - min-height: 520px; + flex: 1 1 auto; + min-height: 0; overflow-x: auto; - padding-bottom: 8px; // room for the horizontal scrollbar + padding-bottom: 4px; // room for the horizontal scrollbar } + // Each .col is now a proper bordered card that runs full board + // height — same visual treatment as Trello / Asana columns. The + // header (.o_fp_col_header) sits at the top with a divider; the + // scrollable body (.col-scroll) takes the rest. Previously .col + // had bg = page-bg (invisible) so columns visually ended at the + // header card — empty columns looked unbounded. .col { - background: $plant-bg; + background: $plant-card-bg; + border: 1px solid $plant-card-border; border-radius: 8px; - padding: 6px; display: flex; flex-direction: column; - gap: 6px; - min-width: 0; // grid-track minmax handles sizing + min-width: 0; // grid-track minmax handles sizing + min-height: 0; // allow flex children to scroll inside + overflow: hidden; // contain rounded corners over inner content &.mine { background: linear-gradient(180deg, $plant-mine-bg 0%, $plant-card-bg 100%); - border: 1px solid $plant-mine-border; + border-color: $plant-mine-border; } } .col-scroll { + flex: 1 1 auto; + min-height: 0; // critical — without this the children + // push the column past its parent height overflow-y: auto; display: flex; flex-direction: column; gap: 8px; - padding: 2px; - max-height: calc(100vh - 260px); - min-height: 200px; + padding: 6px; } .col-empty { font-size: 10px;