Files
Leantime/public/assets/css/components/structure.css

631 lines
13 KiB
CSS

/***** RESET BROWSER STYLE *****/
/*******************************/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
background: transparent;
border: 0;
margin: 0;
padding: 0;
vertical-align: baseline;
line-height: 1.5;
outline: none;
}
html {
-webkit-box-sizing: border-box;
box-sizing: border-box;
-ms-overflow-style: scrollbar
}
body {
color:var(--primary-font-color);
}
*, ::after, ::before {
-webkit-box-sizing: inherit;
box-sizing: inherit
}
.container {
position: relative;
margin-left: auto;
margin-right: auto;
padding-right: 15px;
padding-left: 15px
}
.container-fluid {
position: relative;
margin-left: auto;
margin-right: auto;
padding-right: 15px;
padding-left: 15px
}
.row {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: -5px;
margin-left: -5px
}
.no-gutters {
margin-right: 0;
margin-left: 0
}
.no-gutters > .col, .no-gutters > [class*=col-] {
padding-right: 0;
padding-left: 0
}
.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9 {
position: relative;
width: 100%;
min-height: 1px;
padding-right: 10px;
padding-left: 10px;
}
.col {
-webkit-flex-basis: 0;
flex-basis: 200px;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
max-width: 100%
}
.col-auto {
-webkit-box-flex: 0;
-webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto
}
.col-1 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 8.555555%;
-ms-flex: 0 0 8.555555%;
flex: 0 0 8.555555%;
max-width: 8.555555%
}
.col-2 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 16.666667%;
-ms-flex: 0 0 16.666667%;
flex: 0 0 16.666667%;
max-width: 16.666667%
}
.col-3 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 25%;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%
}
.col-4 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 33.555555%;
-ms-flex: 0 0 33.555555%;
flex: 0 0 33.555555%;
max-width: 33.555555%
}
.col-5 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 41.666667%;
-ms-flex: 0 0 41.666667%;
flex: 0 0 41.666667%;
max-width: 41.666667%
}
.col-6 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 50%;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%
}
.col-7 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 58.555555%;
-ms-flex: 0 0 58.555555%;
flex: 0 0 58.555555%;
max-width: 58.555555%
}
.col-8 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 66.666667%;
-ms-flex: 0 0 66.666667%;
flex: 0 0 66.666667%;
max-width: 66.666667%
}
.col-9 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 75%;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%
}
.col-10 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 83.555555%;
-ms-flex: 0 0 83.555555%;
flex: 0 0 83.555555%;
max-width: 83.555555%
}
.col-11 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 91.666667%;
-ms-flex: 0 0 91.666667%;
flex: 0 0 91.666667%;
max-width: 91.666667%
}
.col-12 {
-webkit-box-flex: 0;
-webkit-flex: 0 0 100%;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%
}
.pull-0 {
right: auto
}
.pull-1 {
right: 8.555555%
}
.pull-2 {
right: 16.666667%
}
.pull-3 {
right: 25%
}
.pull-4 {
right: 33.555555%
}
.pull-5 {
right: 41.666667%
}
.pull-6 {
right: 50%
}
.pull-7 {
right: 58.555555%
}
.pull-8 {
right: 66.666667%
}
.pull-9 {
right: 75%
}
.pull-10 {
right: 83.555555%
}
.pull-11 {
right: 91.666667%
}
.pull-12 {
right: 100%
}
.push-0 {
left: auto
}
.push-1 {
left: 8.555555%
}
.push-2 {
left: 16.666667%
}
.push-3 {
left: 25%
}
.push-4 {
left: 33.555555%
}
.push-5 {
left: 41.666667%
}
.push-6 {
left: 50%
}
.push-7 {
left: 58.555555%
}
.push-8 {
left: 66.666667%
}
.push-9 {
left: 75%
}
.push-10 {
left: 83.555555%
}
.push-11 {
left: 91.666667%
}
.push-12 {
left: 100%
}
.offset-1 {
margin-left: 8.555555%
}
.offset-2 {
margin-left: 16.666667%
}
.offset-3 {
margin-left: 25%
}
.offset-4 {
margin-left: 33.555555%
}
.offset-5 {
margin-left: 41.666667%
}
.offset-6 {
margin-left: 50%
}
.offset-7 {
margin-left: 58.555555%
}
.offset-8 {
margin-left: 66.666667%
}
.offset-9 {
margin-left: 75%
}
.offset-10 {
margin-left: 83.555555%
}
.offset-11 {
margin-left: 91.666667%
}
.mainwrapper {
background:var(--header-gradient);
background-size: 100vw 100vh;
background-attachment: fixed;
}
.rightpanel {
background-size: contain;
background-position: bottom;
min-height: 100vh;
}
.rightpanel:before {
position: absolute;
height: calc(100% + 50px);
width: 100%;
left: 0;
top: -50px;
content: " ";
opacity: .5;
mix-blend-mode: multiply;
background-size:cover;
background-image:url(/dist/images/backgrounds/bg5.png);
background-repeat:no-repeat;
background-position:center;
background-attachment: fixed;
pointer-events: none !important;
}
.rightpanel.personal:before {
}
.rightpanel.project:before {
}
.rightpanel.company:before {
}
.rightpanel {
padding-top:50px;
}
.rightpanel::after {
clear: both;
content: '';
display: block;
pointer-events: none !important;
}
.overlay::after {
pointer-events: none !important;
}
.primaryContent {
min-height:calc(100vh - 50px);
padding-top:10px;
padding-bottom:10px;
position: relative;
overflow-x: hidden;
}
.leftpanel {
width: 240px;
color: #fff;
float: left;
clear: both;
background:var(--left-panel-bg);
position:sticky;
height:calc(100vh - 70px);
z-index: 9;
display: flex;
flex-direction: column;
top:70px;
margin-top:20px;
left:10px;
border-radius: var(--box-radius-large);
overflow:hidden;
}
.header {
clear: both;
height: 50px;
position: fixed;
top:0px;
z-index: 15;
width: 100%;
box-shadow: var(--large-shadow);
backdrop-filter: var(--glass-blur);
/*background:var(--header-bg-color);*/
}
/* Pageheader is a glass card matching the content card below it, floating on
the app's gradient background (which lives on .rightpanel, untouched). The
old design used a 150px invisible cushion + a -95px content overlap to make
the header float transparently on the gradient; that's replaced by a proper
boxed header. Applied globally so every page's header is consistent. */
.pageheader {
display: flex;
align-items: center;
/* Allow the right cluster (meta/summary + actions) to wrap below the title
on narrow viewports instead of forcing horizontal overflow — mobile.css
only adjusts padding/min-height, not the flex behavior. */
flex-wrap: wrap;
gap: 12px;
padding: 8px 18px;
height: auto;
line-height: 1.3;
position: relative;
/* Above the nav bar (z-index 11) so the breadcrumb + sprint ⋮ dropdowns,
which open downward into the nav bar's area, render on top of it. */
z-index: 12;
/* Match the content card exactly (same bg, NO backdrop blur) so the header
and content read as one cohesive surface, not mismatched cards. */
background: var(--glass-background);
border: var(--glass-border);
border-radius: var(--box-radius);
box-shadow: var(--large-shadow);
/* Horizontal margin matches .maincontent's 15px padding so the header card
lines up with the content card below it (was full-width → stuck out
wider, which read as a box-inside-a-box). No bottom margin: the gap to the
next block comes solely from .maincontent's 10px padding-top, so the
vertical rhythm (top-nav→header, header→nav/content) is an even 10px
everywhere (was 8px margin + 10px padding = an uneven 18px). */
margin: 0 15px 0 15px;
}
.pageheader .pagetitle {
flex: 1 1 auto;
min-width: 0;
/* Must be visible, not hidden — the breadcrumb switcher's dropdown menu
lives inside here and overflow:hidden would clip it shut. */
overflow: visible;
}
/* Header content must be able to shrink so it never forces the card wider than
the viewport (flex children need min-width:0 to shrink below content size). */
.pageheader .pagetitle > * {
min-width: 0;
}
/* Right cluster on the header: secondary metadata (board stats, "updated …")
plus optional actions (the sprint ⋮ menu), on ONE line with the title — so
the header stays compact instead of adding a sub-line row. Shared by Tasks +
the report header. */
.pageheader-right {
flex: 0 0 auto;
margin-left: auto;
display: flex;
align-items: center;
gap: 12px;
padding-left: 16px;
}
.pageheader-meta {
font-size: var(--font-size-s);
color: var(--primary-font-color);
/* .75 (was .6): review feedback — the meta text was hard to read. */
opacity: .75;
}
/* Muted crumb separator — the "/" between orientation segments in a page
title ("Resources / Plan", "Docs / Default"), matching the report header.
Opacity (not --secondary-font-color, which is #000 in the default theme)
so it reads as muted on every theme. */
.pagetitle h1 .crumb-sep,
.subjectSwitcher-sep {
color: var(--primary-font-color);
opacity: .45;
}
/* Sprint edit/delete ⋮ menu — a subtle icon button inline in the right cluster
(only rendered for a real sprint view). */
.pageheader-right .headerEditDropdown {
padding: 0;
line-height: 1;
}
.pageheader-right .headerEditDropdown > .btn-transparent {
color: var(--primary-font-color);
opacity: .5;
border: none;
background: transparent;
padding: 4px 8px;
box-shadow: none;
}
.pageheader-right .headerEditDropdown > .btn-transparent:hover {
opacity: .9;
}
.maincontent {
float: left;
width: 100%;
padding: 10px 15px;
margin-top: 0;
position:relative;
z-index:5;
}
.maincontentinner {
border-radius:var(--box-radius);
background:var(--glass-background);
position:relative;
padding:14px; /* account for 1px border */
margin-bottom:10px;
box-shadow: var(--large-shadow);
border: var(--glass-border);
}
.footer {
border-radius:var(--box-radius);
background: var(--glass-background);
backdrop-filter: var(--glass-blur);
-webkit-backdrop-filter: var(--glass-blur);
position:relative;
margin-bottom:20px;
box-shadow: var(--large-shadow);
border: var(--glass-border);
font-size: var(--font-size-s);
color: var(--primary-font-color);
padding:10px 20px;
overflow: hidden;
clear: both;
margin: 10px 15px;
margin-bottom:40px;
}
.footer .footer-left {
float: left;
}
.footer .footer-right {
float: right;
}
.announcementBanner{
background:linear-gradient(170deg, var(--accent1) 20%,var(--accent2) 90%);
height:40px;
width:100%;
text-align:center;
line-height:40px;
color:var(--main-action-color);
position: fixed;
bottom:0px;
z-index: 100;
}
.announcementBanner:before {
}
/* ── Document-page mode ──────────────────────────────────────────────
body.lt-doc-page: for pages whose content card renders its OWN doc-shell
header (the stakeholder reports' .rd-hdr — see report-deck.css). The shared
teal pageheader collapses (kept in the DOM so its lifecycle hooks still
fire) and the content shell goes flush/transparent so the document card IS
the page. ONE implementation for every doc-shell page — never re-create
this per page in a template. Specificity (body + class) outranks the plain
.pageheader/.maincontentinner base rules, so no !important is needed.
(RA's body.ra-page-active predates this mode and should converge onto it
in the tab-component rollout follow-ups.) */
body.lt-doc-page .pageheader {
display: none;
}
body.lt-doc-page .maincontent {
margin-top: 0;
padding-top: 14px;
}
body.lt-doc-page .maincontentinner {
background: transparent;
border: none;
box-shadow: none;
border-radius: 0;
padding: 0;
backdrop-filter: none;
-webkit-backdrop-filter: none;
}