/*
 * AWPM-specific adapters for the shared ORDO modern layout.
 *
 * Keep only product assets, AWPM route mappings and selectors from AWPM forms
 * or views in this file. Reusable shell, menu, form and table presentation
 * belongs in layouts/ordo/styles/ordo/modern.css, which is loaded first.
 * AWPM content follows that layout's Verdana typography tokens: normal body
 * text, compact metadata and native bold weights, without shrinking icons or
 * changing the data/ellipsis contracts of individual views.
 */

/* AWPM supplies the product mark while the layout owns its dimensions.
 * The source mark is green; filtering this image-only link produces the black
 * ORDO mark requested for AWPM without altering the adjacent product name. */
#ordo-home {
	background-image: url("../images/logo_g.png");
	filter: brightness(0);
}

/* These title glyphs are selected by AWPM route metadata in awpm-modern.js. */
:root {
	--ordo-modern-page-icon-people: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='8' r='3'/%3E%3Cpath d='M3.5 20v-2a5.5 5.5 0 0 1 11 0v2M16 11a3 3 0 0 0 0-6M17 14a5 5 0 0 1 3.5 4.8V20'/%3E%3C/svg%3E");
	--ordo-modern-page-icon-server: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='3' width='16' height='5' rx='1'/%3E%3Crect x='4' y='10' width='16' height='5' rx='1'/%3E%3Crect x='4' y='17' width='16' height='4' rx='1'/%3E%3Cpath d='M7 5.5h.01M7 12.5h.01M7 19h.01M10 5.5h7M10 12.5h7M10 19h7'/%3E%3C/svg%3E");
}

/* Route classes are stable across permission-dependent menu ordering. */
.awpm-nav-projects {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z'/%3E%3Cpath d='M8 12v4M12 10v6M16 13v3'/%3E%3C/svg%3E");
}

.awpm-nav-tasks {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='3' width='16' height='18' rx='2'/%3E%3Cpath d='m8 12 2 2 5-5M8 7h8M8 18h8'/%3E%3C/svg%3E");
}

.awpm-nav-meetings {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M8 3v4M16 3v4M3 10h18M8 14h3M14 14h2M8 18h2M13 18h3'/%3E%3C/svg%3E");
}

.awpm-nav-configuration {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6h4M12 6h8M4 12h9M17 12h3M4 18h2M10 18h10'/%3E%3Ccircle cx='10' cy='6' r='2'/%3E%3Ccircle cx='15' cy='12' r='2'/%3E%3Ccircle cx='8' cy='18' r='2'/%3E%3C/svg%3E");
}

.awpm-nav-finance {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M7 9H6v1M17 15h1v-1'/%3E%3C/svg%3E");
}

.awpm-nav-work {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='7' width='18' height='13' rx='2'/%3E%3Cpath d='M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M3 12h18M10 12v2h4v-2'/%3E%3C/svg%3E");
}

.awpm-nav-chat {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 15a4 4 0 0 1-4 4H8l-5 3 1.5-5A7.5 7.5 0 0 1 3 12a8 8 0 0 1 8-8h2a8 8 0 0 1 7 11Z'/%3E%3Cpath d='M14 6.5l.6 1.4 1.4.6-1.4.6L14 10.5l-.6-1.4-1.4-.6 1.4-.6.6-1.4ZM8 13h5'/%3E%3C/svg%3E");
}

.awpm-nav-reports {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 3h10l4 4v14H5V3Z'/%3E%3Cpath d='M15 3v5h4M8 17v-3M12 17v-6M16 17v-2'/%3E%3C/svg%3E");
}

.awpm-nav-documentation {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 5.5A2.5 2.5 0 0 1 5.5 3H11v17H5.5A2.5 2.5 0 0 0 3 22V5.5ZM21 5.5A2.5 2.5 0 0 0 18.5 3H13v17h5.5A2.5 2.5 0 0 1 21 22V5.5Z'/%3E%3C/svg%3E");
}

.awpm-nav-system {
	--ordo-modern-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M19.4 15a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3 1.7 1.7 0 0 0-1 1.6v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14H2.8v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6 1.7 1.7 0 0 0 10 3V2.8h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3-1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z'/%3E%3C/svg%3E");
}

/* AWPM adds a one-click "current person" picker beside selected inputs. */
.ordo-itempicker-button.current-person {
	color: var(--ordo-modern-green-dark);
	font-size: 0;
}

.ordo-itempicker-button.current-person::before {
	display: block;
	width: 17px;
	height: 17px;
	margin: auto;
	content: "";
	background-color: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='8' r='4' fill='none' stroke='black' stroke-width='1.8'/%3E%3Cpath d='M4.5 20c.7-4.2 3.2-6.3 7.5-6.3s6.8 2.1 7.5 6.3' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='8' r='4' fill='none' stroke='black' stroke-width='1.8'/%3E%3Cpath d='M4.5 20c.7-4.2 3.2-6.3 7.5-6.3s6.8 2.1 7.5 6.3' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* AWPM's app.js adds a selection-inverter beside each checkbox collection.
 * Reserve a real trailing column so its icon cannot cover the last label. */
.ordo-filter .mcbBlock.ordo-input {
	position: relative;
	padding: 5px 34px 5px 7px;
}

.ordo-filter .mcbBlock .ordo-radio {
	box-sizing: border-box;
	width: 100%;
	padding: 0;
	gap: 3px 8px;
}

.ordo-filter .mcbBlock .ordo-radio > .ordo-radio-item {
	margin-top: 2px !important;
	margin-bottom: 2px !important;
}

.ordo-filter .mcbBlock > .mcbInv {
	position: absolute;
	top: 5px;
	right: 5px;
	float: none;
	width: 24px;
	height: 24px;
	margin: 0;
	border-radius: 5px;
	/* app.js inverts the checked values. Two clear exchange arrows replace the
	 * tiny legacy dswitch bitmap, which tiled inside the larger click target. */
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23626966' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 8h15l-4-4M20 16H5l4 4'/%3E%3C/svg%3E");
	background-position: center;
	background-repeat: no-repeat;
	background-size: 15px 15px;
	cursor: pointer;
}

.ordo-filter .mcbBlock > .mcbInv:hover {
	background-color: var(--ordo-modern-green-soft);
}

/*
 * AWPM dashboard layout. The selectors use the generated workspace and view
 * classes because the three native data sources require different densities.
 */
#workspace.ws_Dashboard,
.ordo-workspace.ws_Dashboard {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	grid-template-rows: auto auto auto;
	grid-template-areas:
		"Project_V_default"
		"Task_V_default"
		"TextMessagesDashboard";
	align-content: start;
	gap: 12px;
	height: auto;
	min-height: 0;
	background: transparent;
	overflow: visible;
}

/* Panels grow to their native content, with the data viewport capped below.
 * This preserves short datasets and scrolls large administrator datasets
 * locally, without clipping rows against fixed workspace grid tracks. */
.ws_Dashboard > .ordo-workspace-panel:has(.v_Project_V),
.ws_Dashboard > .ordo-workspace-panel:has(.v_Task_V) {
	display: flex;
	flex-direction: column;
	min-height: 0;
	overflow: visible;
}

.ws_Dashboard > .ordo-workspace-panel:has(.v_Project_V) > form,
.ws_Dashboard > .ordo-workspace-panel:has(.v_Task_V) > form {
	display: flex;
	flex: 0 0 auto;
	flex-direction: column;
	min-height: 0;
	overflow: visible;
}

.ordo-workspace.ws_Dashboard > .ordo-workspace-panel {
	min-width: 0;
	border: 0;
	background: transparent;
	box-shadow: none;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) .ordo-title,
.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) .ordo-title {
	min-height: 26px;
	margin: 0 0 10px 8px;
	padding: 0;
	font-size: var(--ordo-modern-font-section);
	font-weight: var(--ordo-modern-font-weight-strong);
	line-height: 1.4;
	letter-spacing: normal;
}

/* Dashboard headings are nested view titles, not the page title inspected by
 * the menu adapter. Select each data source rather than translated heading text. */
.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) .ordo-title,
.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) .ordo-title,
.ws_Dashboard .f_TextMessagesDashboard .ordo-title {
	display: flex;
	align-items: center;
	gap: 10px;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) .ordo-title::before,
.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) .ordo-title::before,
.ws_Dashboard .f_TextMessagesDashboard .ordo-title::before {
	content: "";
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	background-color: var(--ordo-modern-green);
	-webkit-mask: var(--awpm-dashboard-icon) center / contain no-repeat;
	mask: var(--awpm-dashboard-icon) center / contain no-repeat;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) .ordo-title {
	--awpm-dashboard-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z'/%3E%3Cpath d='M8 12v4M12 10v6M16 13v3'/%3E%3C/svg%3E");
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) .ordo-title {
	--awpm-dashboard-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='4' width='14' height='17' rx='2'/%3E%3Cpath d='M9 3h6v3H9zM8 12l2 2 5-5M8 18h8'/%3E%3C/svg%3E");
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-title {
	--awpm-dashboard-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 10v6h5l10 4V5L9 10H4ZM9 16l2 5H7l-2-5M22 10v5'/%3E%3C/svg%3E");
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V).ordo-view,
.ws_Dashboard :is(.v_Project_V, .v_Task_V) div.ordo-view {
	flex: 1 1 auto;
	min-height: 0;
	max-height: 320px;
	margin: 0;
	border: 1px solid #e6e8eb;
	border-radius: 13px;
	background: var(--ordo-modern-surface);
	box-shadow: 0 6px 21px rgba(15, 23, 42, 0.04);
	overflow: auto;
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) table {
	width: 100%;
	min-width: 1050px;
	table-layout: auto;
	border-collapse: collapse;
	font-size: var(--ordo-font-size-default);
	line-height: 1.45;
}

/* Project rows use horizontal dividers only, keeping long lists easy to scan. */
.ws_Dashboard .v_Project_V table {
	border: 0;
}

.ws_Dashboard .v_Project_V table :is(th, td) {
	border: 0;
	background: transparent;
	font-size: var(--ordo-font-size-default);
}

.ws_Dashboard .v_Project_V table thead th {
	height: auto;
	padding: 3.5px 10px;
	border-bottom: 1px solid #eceef0;
	color: var(--ordo-modern-green);
	font-size: var(--ordo-modern-font-small);
	font-weight: var(--ordo-modern-font-weight-strong);
	white-space: nowrap;
}

.ws_Dashboard .v_Project_V table tbody td {
	height: auto;
	padding: 3px 10px;
	border-bottom: 1px solid #edf0f2;
	white-space: nowrap;
}

/* Column headings and native pagination remain reachable while the dashboard
 * scrolls its own data viewport. Opaque surfaces prevent row text showing
 * through these fixed visual anchors. */
.ws_Dashboard :is(.v_Project_V, .v_Task_V) table thead th {
	position: sticky;
	top: 0;
	z-index: 2;
	background: linear-gradient(#fff, #fafbfb);
}

.ws_Dashboard .v_Project_V tbody tr:nth-of-type(1n),
.ws_Dashboard .v_Project_V tbody tr:nth-of-type(2n) {
	background: var(--ordo-modern-surface);
}

.ws_Dashboard .v_Project_V tbody tr:is(:hover, .hover) {
	background: #f7f8f8;
}

/* The generated icon/ID columns need pixel minima; percentages squeezed the
 * marker into the first digit. Other project columns keep their natural width. */
.ws_Dashboard .v_Project_V :is(.c__name, .c__id) { min-width: 80px; }
.ws_Dashboard .v_Project_V .c_name { min-width: 210px; }
.ws_Dashboard .v_Project_V .c_owner { min-width: 130px; }
.ws_Dashboard .v_Project_V .c__mtime { min-width: 104px; }

/* Task_V uses a light grid because it carries more columns than Project_V.
 * Both dashboard grids override the shared cells, so repeat the requested
 * half-height vertical inset here and release their former fixed row heights. */
.ws_Dashboard .v_Task_V table thead th {
	height: auto;
	padding: 3.5px 10px;
	border: 0;
	border-bottom: 1px solid #e4e7ea;
	color: #222522;
	background: var(--ordo-modern-surface);
	font-size: var(--ordo-modern-font-small);
	font-weight: var(--ordo-modern-font-weight-strong);
}

.ws_Dashboard .v_Task_V table tbody td {
	height: auto;
	padding: 3px 10px;
	border: 0;
	border-bottom: 1px solid #edf0f2;
	white-space: nowrap;
	vertical-align: middle;
}

.ws_Dashboard .v_Task_V table tbody tr:nth-of-type(1n),
.ws_Dashboard .v_Task_V table tbody tr:nth-of-type(2n) {
	background: var(--ordo-modern-surface);
}

.ws_Dashboard .v_Task_V table tbody tr:is(:hover, .hover) {
	background: #f7f8f8;
}

/* Task rows keep descriptive text on one line, with full-value tooltips.
 * Horizontal scrolling remains within the native view on narrow workspaces. */
.ws_Dashboard .v_Task_V :is(.c__name, .c__id) { min-width: 78px; white-space: nowrap; }
.ws_Dashboard .v_Task_V .c_customerid { min-width: 112px; }
.ws_Dashboard .v_Task_V .c_name { min-width: 220px; }
.ws_Dashboard .v_Task_V :is(.c_project, .c_assignedto) { min-width: 128px; }
.ws_Dashboard .v_Task_V :is(.c__ctime, .c_plannedfinish, .c__mtime) { min-width: 115px; }
.ws_Dashboard .v_Task_V .c_status { min-width: 85px; white-space: nowrap; }
.ws_Dashboard .v_Task_V .c_category { min-width: 85px; }

/* Invoice numbers are identifiers, not prose: reserve enough room for the
 * usual number and let longer values grow the native auto-layout column. */
div.ordo-view.v_Invoice_V > table > :is(thead, tbody) > tr > .c_invoiceno {
	width: 120px;
	min-width: 120px;
	white-space: nowrap;
	overflow-wrap: normal;
}

/* Invoice names average 35 characters; longer names (up to 96 characters)
 * wrap without truncation. Keep the invoice request column compact. */
div.ordo-view.v_Invoice_V > table > :is(thead, tbody) > tr > .c_name {
	width: 35ch;
	min-width: 35ch;
	white-space: normal;
	overflow-wrap: anywhere;
}

div.ordo-view.v_Invoice_V > table > :is(thead, tbody) > tr > .c_irfilename {
	width: 15ch;
	min-width: 15ch;
	max-width: 15ch;
	white-space: normal;
	overflow-wrap: anywhere;
}

div.ordo-view.v_Invoice_V > table > tbody > tr > td.c_irfilename {
	white-space: nowrap;
	overflow-wrap: normal;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Purchase order names average 39 characters; wrap longer names (up to 98
 * characters) so the full text stays readable without truncation. */
div.ordo-view.v_PurchaseOrder_V > table > :is(thead, tbody) > tr > .c_name {
	width: 39ch;
	min-width: 39ch;
	white-space: normal;
	overflow-wrap: anywhere;
}

/* Proposal names average 26 characters; longer names remain fully readable
 * by wrapping. Field selectors also support reordered and hidden columns. */
div.ordo-view.v_Proposal_V > table > :is(thead, tbody) > tr > .c_name {
	width: 26ch;
	min-width: 26ch;
	white-space: normal;
	overflow-wrap: anywhere;
}

div.ordo-view.v_Proposal_V > table > :is(thead, tbody) > tr > .c_customerid {
	width: 8ch;
	min-width: 8ch;
	max-width: 8ch;
	white-space: normal;
	overflow-wrap: anywhere;
}

div.ordo-view.v_Proposal_V > table > :is(thead, tbody) > tr > .c_submitperson {
	min-width: 20ch;
	white-space: normal;
	overflow-wrap: anywhere;
}

div.ordo-view.v_Proposal_V > table > :is(thead, tbody) > tr > .c__mtime {
	white-space: nowrap;
}

/* Task_V's first two DATA columns are ID and customer ID (the status dot is
 * separate). Keep their complete values; selectors follow fields even when a
 * user reorders/hides columns. Flags must also remain fully visible, including
 * every chip. Do not truncate row actions or empty-list rows.
 * max-width:0 on the other auto-layout cells allows CSS ellipsis, without
 * shortening DOM values, changing exports, or rebuilding native links. */
div.ordo-view.v_Task_V > table > tbody > tr > td:not(.c_vra):not([colspan]) {
	white-space: nowrap;
	overflow-wrap: normal;
}

div.ordo-view.v_Task_V > table > tbody > tr > td:is(.c__id, .c_customerid, .c_flags, .c_status) {
	max-width: none;
}

/* Status is decision-critical information: let the auto-layout column grow to
 * its longest value instead of replacing any part of the text with ellipsis. */
div.ordo-view.v_Task_V > table > :is(thead, tbody) > tr > .c_status {
	white-space: nowrap;
	overflow: visible;
	text-overflow: clip;
}

div.ordo-view.v_Task_V > table > :is(thead, tbody) > tr > .c__id { min-width: 76px; }
div.ordo-view.v_Task_V > table > :is(thead, tbody) > tr > .c_customerid { min-width: 112px; }

div.ordo-view.v_Task_V > table > tbody > tr > td:not(.c_icon):not(.c__id):not(.c_customerid):not(.c_flags):not(.c_status):not(.c_vra):not([colspan]) {
	max-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Give the two descriptive columns the main share of available space. The
 * remaining columns retain native header minima and optional-column behavior. */
div.ordo-view.v_Task_V > table > thead > tr > .c_name { width: 25%; }
div.ordo-view.v_Task_V > table > thead > tr > .c_project { width: 16%; }

.ws_Dashboard :is(.v_Project_V, .v_Task_V) :is(th, td).c_icon.t_image {
	box-sizing: border-box;
	width: 32px;
	min-width: 32px;
	padding: 3px 10px;
	text-align: center;
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) td.c_icon.t_image > img {
	display: inline-block;
	width: 11px;
	height: 11px;
	max-width: none;
	margin: 0;
	vertical-align: middle;
	object-fit: contain;
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) a {
	color: var(--ordo-modern-green-dark);
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) .ordo-vieworder .ordo-svg-icon {
	width: 7px;
	height: 7px;
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) .ordo-vieworder > :is(.ordo-vieworder-asc, .ordo-vieworder-desc) {
	display: inline;
	opacity: 0.38;
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) .ordo-vieworder > :is(.selected, .ordo-vieworder--selected) {
	opacity: 1;
}

.ws_Dashboard :is(.v_Project_V, .v_Task_V) th:hover .ordo-vieworder > a {
	display: inline;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) :is(.ordo-view-pages, .ordo-view__pages),
.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) :is(.ordo-view-pages, .ordo-view__pages) {
	position: sticky;
	bottom: 0;
	left: 0;
	z-index: 2;
	justify-content: center;
	margin: 0;
	padding: 2px 12px;
	border-top: 0;
	color: var(--ordo-modern-green);
	background: var(--ordo-modern-surface);
	font-size: var(--ordo-modern-font-small);
	font-weight: normal;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) :is(.ordo-view-pages, .ordo-view__pages) {
	min-height: 44px;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) :is(.ordo-view-pages, .ordo-view__pages) {
	min-height: 30px;
}

.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) :is(.ordo-view-pages, .ordo-view__pages) :is(a, button),
.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) :is(.ordo-view-pages, .ordo-view__pages) :is(a, button) {
	min-height: 25px;
	padding: 4px 10px;
	border-color: transparent;
	color: var(--ordo-modern-green);
	background: transparent;
	box-shadow: none;
}

/* Release messages share one panel but retain three independent native cards. */
.ws_Dashboard .ordo-workspace-panel:has(.f_TextMessagesDashboard) {
	min-height: 207px;
	max-height: 340px;
	padding: 10px 22px 12px;
	border: 1px solid #e6e8eb;
	border-radius: 13px;
	background: var(--ordo-modern-surface);
	box-shadow: 0 6px 21px rgba(15, 23, 42, 0.04);
	overflow: auto;
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-title {
	position: sticky;
	top: 0;
	z-index: 2;
	margin: 0 0 18px;
	padding: 0 0 6px;
	background: #fff;
	font-size: var(--ordo-modern-font-section);
	font-weight: var(--ordo-modern-font-weight-strong);
	line-height: 1.4;
	letter-spacing: normal;
}

.ws_Dashboard .f_TextMessagesDashboard div.ordo-view {
	margin: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
	overflow: visible;
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-cards {
	display: grid;
	grid-template-columns: 1.04fr 1fr 1.08fr;
	gap: 30px;
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-cards .ordo-card {
	width: auto;
	min-width: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-view-item {
	font-size: var(--ordo-font-size-default);
	line-height: 1.5;
}

/* A release title is a card subheading; its prose stays at the normal reading
 * size while author/date metadata uses the shared compact size. */
.ws_Dashboard .f_TextMessagesDashboard .ordo-view-item :is(h1, h2, h3, h4) {
	margin: 0 0 7px;
	padding: 0;
	font-size: var(--ordo-modern-font-subheading);
	font-weight: var(--ordo-modern-font-weight-strong);
	line-height: 1.4;
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-view-item :is(p, ul, ol) {
	margin-top: 0;
	margin-bottom: 7px;
	font-size: var(--ordo-font-size-default);
	line-height: 1.5;
}

.ws_Dashboard .f_TextMessagesDashboard .ordo-view-item :is(ul, ol) {
	padding-left: 15px;
}

.ws_Dashboard .f_TextMessagesDashboard :is(.c_fromuser, .c__ctime) {
	float: none;
	display: inline-block;
	margin: 3px 8px 0 0;
	padding: 0;
	font-size: var(--ordo-modern-font-small);
	line-height: 1.4;
}

.ws_Dashboard .f_TextMessagesDashboard .c__ctime {
	font-style: italic;
}

/*
 * PMMinutes creates pmmtopic fieldsets with a related task and partition/actions
 * in separate controls. Their old absolute offsets crossed the fieldset border.
 * Keep those controls in document flow so long subjects and mobile widths grow
 * the topic naturally; the original links and disclosure handlers stay intact.
 */
.ordo-fieldset.pmmtopic {
	margin: 16px 0;
	padding: 12px 16px 14px;
	border: 1px solid var(--ordo-modern-line);
	border-left: 3px solid var(--ordo-modern-green);
	border-radius: 8px;
	background: #fff;
	box-shadow: 0 2px 7px rgba(15, 23, 42, 0.025);
}

.ordo-fieldset.pmmtopic > legend {
	width: auto;
	max-width: calc(100% - 20px);
	padding: 0 8px;
	color: var(--ordo-modern-ink);
	font-size: var(--ordo-modern-font-subheading);
	font-weight: var(--ordo-modern-font-weight-strong);
	line-height: 1.5;
}

.ordo-fieldset.pmmtopic .ordo-link.pmmsubjectlink {
	position: static;
	display: inline-flex;
	flex-wrap: wrap;
	gap: 4px 10px;
	width: auto;
	max-width: 100%;
	margin: 0 12px 10px 0;
	padding: 6px 10px;
	border: 1px solid var(--ordo-modern-line);
	border-radius: 6px;
	background: linear-gradient(#fff, #fafbfb);
	line-height: 1.5;
	overflow-wrap: anywhere;
}

.ordo-fieldset.pmmtopic .ordo-column.pmmflags {
	position: static;
	display: inline-flex;
	flex-flow: row wrap;
	align-items: center;
	gap: 6px;
	width: auto;
	max-width: 100%;
	margin: 0 0 10px;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	vertical-align: middle;
}

.ordo-fieldset.pmmtopic .ordo-set.pmmcontent {
	clear: both;
	padding: 0 !important;
	font-size: var(--ordo-font-size-default);
	line-height: 1.6;
}

/* PMMinutes_S reuses four editing columns even in its read-only topic view.
 * The duplicate title is already hidden by that form, and empty editor/action
 * columns have no content. Remove only those empty shells, never live inputs. */
.f_PMMinutes_S #f_maintopicsgrp .pmmtopic > .ordo-column:not(:has(> *)),
.f_PMMinutes_S #f_maintopicsgrp .pmmtopic > .ordo-column.column28:not(.pmmflags):has(.ordo-title):not(:has(input:not([type="hidden"]), textarea, select, button, a)) {
	display: none;
}

/* Related task and topic flags share one ordinary floated row beneath the
 * legend. The following set clears that row; flags stay right even when the
 * related task is absent, without restoring the old absolute border overlap. */
.f_PMMinutes_S .ordo-fieldset.pmmtopic {
	margin: 10px 0;
	padding: 6px 12px 9px;
}

.f_PMMinutes_S .pmmtopic > .ordo-column.column38 {
	float: left;
	width: calc(100% - 60px);
	max-width: calc(100% - 60px);
	margin: 0;
}

.f_PMMinutes_S .pmmtopic .ordo-link.pmmsubjectlink {
	margin: 0 0 5px;
	padding: 4px 8px;
}

.f_PMMinutes_S .pmmtopic > .ordo-column.pmmflags {
	float: right;
	width: auto;
	margin: 0 0 4px auto;
	justify-content: flex-end;
}

.f_PMMinutes_S .pmmtopic > .ordo-column.pmmflags > span {
	padding-top: 0;
	padding-bottom: 0;
}

.f_PMMinutes_S .pmmtopic > .ordo-set {
	clear: both;
	margin-top: 0;
	/* The base .ordo-column + .ordo-set rule uses important to add editing
	 * spacing; this read-only row needs only its own compact lower separator. */
	padding-top: 0 !important;
}

.f_PMMinutes_S .pmmtopic .ordo-fieldset.pmmlasttopic {
	margin-top: 4px;
	padding-top: 3px;
}

/* Previous-topic content remains collapsible. Style its existing legend as a
 * quiet secondary heading instead of the old heavy underlined label. */
.ordo-fieldset.pmmlasttopic {
	margin: 8px 0 0;
	padding: 8px 0 0;
	border: 0;
	border-top: 1px solid #edf0f2;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
}

.ordo-fieldset.pmmlasttopic > legend,
.ordo-fieldset.pmmlasttopic.ordo-fieldset-unpacked > legend {
	width: auto;
	padding: 0 7px 0 0;
	color: var(--ordo-modern-muted);
	font-size: var(--ordo-font-size-default);
	font-weight: normal;
	text-decoration: none;
}

/*
 * AWPM's histTextTableFormat() moves history metadata into .texthead and nests
 * replies in .subtext. These are already block rows, so only their presentation
 * changes here. Never override display:none: VCS and unread filters rely on it.
 */
/* This AWPM view is converted to comment cards by histTextTableFormat(). Give
 * the entire card list an inset so its first/last cards and reply control do
 * not touch the surrounding view border or the footer separator. Padding the
 * wrapper preserves the native table width and all comment action handlers. */
div.ordo-view.v_HistoryText_VF,
/* Tasks use their own history view, but the same AWPM comment-card formatter. */
div.ordo-view.v_TaskHistory_VF {
	padding: 10px;
}

/* The read-only task summary renders flag chips through the card processor.
 * The chip already owns its data-driven colors; remove the redundant view and
 * card surfaces. A small outer gap keeps the right-aligned chip visually
 * separate from the adjacent Vykaznik/Documentation action group. */
.f_Task_S #f_flags {
	margin: 12px 0 10px 16px;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
	overflow: visible;
}

.f_Task_S #f_flags .ordo-card {
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
}

.f_Task_S #f_flags :is(.ordo-card-value, .task-flag-chip) {
	margin: 0;
}

/* Flag text must remain readable beside 12px table data. Replace the legacy
 * .85em reduction, retaining every chip, native color and complete value. */
.task-flag-chip {
	font-size: var(--ordo-modern-font-small);
	font-weight: normal;
}

/* The summary explicitly requests no page information, so its generated page
 * shell can never contain a useful control. Removing the whole shell also
 * removes its separator when the renderer leaves whitespace or a clear node. */
.f_Task_S #f_flags > :is(.ordo-view-pages, .ordo-view__pages) {
	display: none;
}

/* TaskFlag_FI already names both flag groups through their legends. Keep those
 * labels, but remove the generic fieldset surface as well as the nested card
 * chrome: the only visual objects in this tab should be the coloured chips.
 * This also avoids the short decorative rule left by an otherwise empty
 * fieldset. */
.f_Task_S :is(#f_flagsassignedgrp, #f_flagsavailablegrp) {
	padding: 4px 0 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
}

.f_Task_S :is(#f_flagsassignedgrp, #f_flagsavailablegrp) > legend {
	padding: 0;
}

/* Present each nested card view as a plain row of clickable chips. Width and
 * overflow overrides intentionally beat the late nowrap style emitted by the
 * card renderer, so even a long flag name remains complete and clickable. */
.f_Task_S :is(#f_flagsassigned, #f_flagsavailable) {
	margin-top: 4px;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
	overflow: visible;
}

.f_Task_S :is(#f_flagsassigned, #f_flagsavailable) .ordo-cards {
	gap: 8px;
}

.f_Task_S :is(#f_flagsassigned, #f_flagsavailable) .ordo-card {
	flex: 0 0 auto;
	width: auto;
	min-width: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	box-shadow: none;
}

.f_Task_S :is(#f_flagsassigned, #f_flagsavailable) .ordo-card-value,
.f_Task_S :is(#f_flagsassigned, #f_flagsavailable) .task-flag-chip {
	max-width: none;
	margin: 0;
	overflow: visible;
	white-space: nowrap;
	text-overflow: clip;
}

/* ViewPagesOptions=noinfo makes both generated footers non-interactive. Hide
 * those shells as a whole so their generic top border does not draw a stray
 * separator below the chips; the card elements and their native onclick
 * handlers remain untouched. */
.f_Task_S :is(#f_flagsassigned, #f_flagsavailable) > :is(.ordo-view-pages, .ordo-view__pages) {
	display: none;
}

#ordoViewf_historytext {
	width: 100%;
	min-width: 0;
	border: 0;
	background: transparent;
	font-size: var(--ordo-font-size-default);
}

#ordoViewf_historytext tbody > tr,
#ordoViewf_historytext .subtext > tr {
	min-width: 0;
	margin: 0 0 10px;
	padding: 12px 14px;
	border: 1px solid var(--ordo-modern-line);
	border-radius: 8px;
	background-color: #fff;
}

#ordoViewf_historytext tbody tr:nth-of-type(2n) {
	background-color: #fff;
}

#ordoViewf_historytext tr::before {
	content: none;
}

#ordoViewf_historytext tr > .texthead {
	float: none;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 5px 9px;
	margin: 0 0 8px;
	padding: 0 0 8px;
	border-bottom: 1px solid #edf0f2;
	font-size: var(--ordo-modern-font-small);
	line-height: 1.5;
}

#ordoViewf_historytext tr > .texthead > * {
	max-width: 100%;
	padding: 0;
	font-style: normal;
	/* Metadata is made of moved table cells; override their generic body size
	 * so they inherit this compact header rather than the original data row. */
	font-size: inherit;
	overflow-wrap: anywhere;
}

/* The formatter retains optional metadata cells even when there is no meeting,
 * attachment or extra action. Empty cells must not consume flex gaps. */
#ordoViewf_historytext .texthead > :is(.c_pmminutes, .c_attachments, .c_vra):empty {
	display: none;
}

#ordoViewf_historytext .texthead .c_person {
	padding-left: 25px;
	background-size: 17px;
	background-position: left center;
	font-weight: var(--ordo-modern-font-weight-strong);
}

#ordoViewf_historytext .texthead .c_textdate {
	margin-left: auto;
	color: var(--ordo-modern-muted);
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
}

/* Reply/edit/create-task cells are live click targets with raster backgrounds.
 * Preserve their background images and give each a complete compact hit area. */
#ordoViewf_historytext .texthead > :is(.reply, .createSubTask, .edit, .modified) {
	box-sizing: border-box;
	flex: 0 0 26px;
	width: 26px;
	height: 26px;
	margin: 0;
	padding: 4px;
	border: 1px solid var(--ordo-modern-line);
	border-radius: 5px;
	background-color: #fff;
	background-size: 17px;
	background-position: center;
}

#ordoViewf_historytext .texthead > :is(.reply, .createSubTask, .edit, .modified):hover {
	background-color: #f0f5f1;
	border-color: #b7d4bd;
}

#ordoViewf_historytext .c_text {
	margin: 0;
	padding: 0;
	font-size: var(--ordo-font-size-default);
	line-height: 1.6;
	overflow-wrap: anywhere;
}

#ordoViewf_historytext .c_text p + p {
	margin-top: 8px;
}

#ordoViewf_historytext .c_text :is(pre, .code, .code_format) {
	max-width: 100%;
	white-space: pre-wrap;
	overflow-wrap: anywhere;
}

#ordoViewf_historytext .subtext {
	margin: 12px 0 0 16px;
	padding-left: 12px;
	border-left: 2px solid #e5eae7;
}

#ordoViewf_historytext tr.unread {
	border-left: 3px solid var(--ordo-modern-green);
}

/* VCS summary rows keep their click-to-expand affordance and green VCS icon,
 * but no longer look like thick striped separators between user comments. */
#ordoViewf_historytext tr.vcsplacemark {
	margin: 8px 0;
	padding: 8px 12px 8px 34px;
	border: 1px solid #e5eae7;
	border-radius: 6px;
	background-color: #f8faf9;
	background-position: 10px center;
	background-size: 15px;
	font-size: var(--ordo-modern-font-small);
}

#ordoViewf_historytext tr.vcsplacemark > .texthead {
	margin: 0 0 4px;
	padding: 0;
	border: 0;
}

#ordoViewf_historytext tr.reply {
	width: fit-content;
	min-width: 0;
	margin: 4px 0 2px;
	padding: 7px 12px;
	border: 1px solid var(--ordo-modern-line);
	border-radius: 6px;
	color: var(--ordo-modern-green-dark);
	background: linear-gradient(#fff, #f8faf9);
	cursor: pointer;
}

/* TaskHistory_VF loads every record (PageLength=-1) and the forms request no
 * page information. The renderer nevertheless leaves the #vp_TaskHistory_VF
 * page shell and a toolbar containing only .clear after the generated "Přidat
 * komentář" row. Scope their removal to the wrapper that demonstrably hosts
 * this task-history table; other history views and any toolbar with an actual
 * control remain visible. */
:is(.f_Task_S, .f_Task_SE) #f_historytext.view:has(> #ordoViewf_historytext + #vp_TaskHistory_VF) > :is(
	#vp_TaskHistory_VF.ordo-view-pages,
	.ordo-buttons:has(> .clear:only-child):not(:has(a, button, input))
) {
	display: none;
}

.f_Task_S .histTextFilter {
	margin-bottom: 10px;
}

/*
 * Presence_List embeds legacy page-local CSS after the shared stylesheets.
 * Prefixing its stable view ID with the modern body class gives these precise
 * AWPM adaptations precedence without changing the compact/filter scripts.
 * The list deliberately keeps the data as a table on larger screens, but adds
 * a clear photo/name hierarchy and a small semantic marker for every status.
 */
body.ordo-modern #ordoViewPresence_List {
	width: 100%;
	min-width: 0;
	table-layout: fixed;
	text-align: left;
}

body.ordo-modern #ordoViewPresence_List thead {
	display: table-header-group;
}

body.ordo-modern #ordoViewPresence_List :is(th, td) {
	/* Keep the photo rows compact while retaining enough horizontal breathing room. */
	padding: 4px 16px;
	border: 0;
	border-bottom: 1px solid #edf0f2;
	font-size: var(--ordo-font-size-default);
	line-height: 1.5;
	vertical-align: middle;
}

body.ordo-modern #ordoViewPresence_List thead th {
	color: var(--ordo-modern-ink);
	background: #f5f8f6;
	border-bottom-color: #dfe6e2;
	font-size: var(--ordo-modern-font-small);
	font-weight: var(--ordo-modern-font-weight-strong);
}

body.ordo-modern #ordoViewPresence_List tr .c_foto {
	width: 64px;
	padding-right: 8px;
}

/* The native photo heading repeats the status label; leave that decorative
 * column untitled while retaining every actual data heading and sort control. */
body.ordo-modern #ordoViewPresence_List th.c_foto {
	font-size: 0;
}

body.ordo-modern #ordoViewPresence_List .c_foto img {
	display: block;
	width: 38px;
	height: 38px;
	max-width: none;
	border-radius: 8px;
	object-fit: cover;
	object-position: center top;
}

body.ordo-modern #ordoViewPresence_List tr .c_fullname {
	width: 36%;
	color: var(--ordo-modern-ink);
	font-weight: var(--ordo-modern-font-weight-strong);
}

body.ordo-modern #ordoViewPresence_List tr .c_status {
	width: 25%;
	font-weight: var(--ordo-modern-font-weight-strong);
}

/* A restrained dot is easier to scan than coloring a whole row, and status
 * text remains available to users who cannot distinguish the colors. */
body.ordo-modern #ordoViewPresence_List tbody .c_status::before {
	display: inline-block;
	width: 8px;
	height: 8px;
	margin-right: 8px;
	border-radius: 50%;
	content: "";
	background: #9ca5a0;
	box-shadow: 0 0 0 3px #eff1f0;
	vertical-align: 1px;
}

body.ordo-modern #ordoViewPresence_List .pl1_in .c_status {
	color: #14813b;
}

body.ordo-modern #ordoViewPresence_List .pl1_in .c_status::before {
	background: #24a148;
	box-shadow: 0 0 0 3px #e5f5e9;
}

body.ordo-modern #ordoViewPresence_List .pl2_ho .c_status {
	color: #276b9d;
}

body.ordo-modern #ordoViewPresence_List .pl2_ho .c_status::before {
	background: #3a83b8;
	box-shadow: 0 0 0 3px #e8f2f8;
}

body.ordo-modern #ordoViewPresence_List .pl3_vac .c_status {
	color: #9b6800;
}

body.ordo-modern #ordoViewPresence_List .pl3_vac .c_status::before {
	background: #dfa000;
	box-shadow: 0 0 0 3px #fff3d5;
}

body.ordo-modern #ordoViewPresence_List .pl4_out .c_status {
	color: #a5453d;
}

body.ordo-modern #ordoViewPresence_List .pl4_out .c_status::before {
	background: #cf6259;
	box-shadow: 0 0 0 3px #faeae8;
}

body.ordo-modern #ordoViewPresence_List .pl5_undef .c_status {
	color: #647069;
	font-weight: 400;
}

body.ordo-modern #ordoViewPresence_List .pl6_ml .c_status {
	color: #7b559b;
}

body.ordo-modern #ordoViewPresence_List .pl6_ml .c_status::before {
	background: #9a70bb;
	box-shadow: 0 0 0 3px #f1eaf7;
}

body.ordo-modern #ordoViewPresence_List tr .c_timing {
	color: #68716d;
	font-variant-numeric: tabular-nums;
}

body.ordo-modern #ordoViewPresence_List tbody td {
	transition: background-color 140ms ease;
}

body.ordo-modern #ordoViewPresence_List tbody tr:hover td {
	background: #f7faf8;
}

body.ordo-modern #ordoViewPresence_List.compact :is(th, td) {
	padding-top: 3.5px;
	padding-bottom: 3.5px;
}

/* Presence_List emits a late page-local absolute rule for this switch. Put the
 * modern control back into normal form flow: it then reserves its own row and
 * can never cover the report header at a different viewport height or width. */
body.ordo-modern #pf_Presence_List #itemf_compact {
	position: static;
	float: none;
	display: grid;
	width: fit-content;
	margin: 0 0 10px auto;
	padding: 0 8px;
	border: 1px solid #dfe5e1;
	border-radius: 8px;
	background: #fff;
	box-shadow: 0 2px 7px rgba(15, 23, 42, 0.05);
}

/* AbsencePlanSimple emits the stable report class plus c_D1...c_D28 columns.
 * Keep the real day/status text and native today/weekend colors, while giving
 * each day a readable width. Only the employee column stays fixed horizontally
 * so a user can still identify the row when viewing the final weeks. */
.ordo-view.r_AbsencePlanSimple > table {
	width: 100%;
	min-width: 1544px;
	table-layout: fixed;
	border-collapse: separate;
	border-spacing: 0;
}

.ordo-view.r_AbsencePlanSimple > table :is(th, td) {
	/* Keep the wide calendar readable while matching the compact table rhythm. */
	height: auto;
	padding: 3px 8px;
	border: 0;
	border-right: 1px solid #edf0f2;
	border-bottom: 1px solid #edf0f2;
	font-size: var(--ordo-font-size-default);
	line-height: 1.4;
	vertical-align: middle;
}

.ordo-view.r_AbsencePlanSimple :is(th, td)[class*="c_D"] {
	width: 48px;
	min-width: 48px;
	padding-right: 5px;
	padding-left: 5px;
	text-align: center;
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
}

/* Calendar headings share the table-header size, leaving the real absence
 * values at the body size and every day/status color untouched. */
.ordo-view.r_AbsencePlanSimple > table th {
	font-size: var(--ordo-modern-font-small);
	font-weight: var(--ordo-modern-font-weight-strong);
}

.ordo-view.r_AbsencePlanSimple :is(th, td).c_fullname {
	position: sticky;
	left: 0;
	z-index: 1;
	width: 200px;
	min-width: 200px;
	background-color: #fff;
	box-shadow: 1px 0 0 var(--ordo-modern-line);
	white-space: normal;
}

.ordo-view.r_AbsencePlanSimple th.c_fullname {
	z-index: 2;
	background: linear-gradient(#fff, #fafbfb);
}

/* Task/Project detail places secondary actions on the previous line using a
 * zero-height float in app.css. Once the primary toolbar wraps, that negative
 * offset overlaps real buttons. Below desktop width keep both native action
 * groups in flow; only their empty float-clearing sentinel is unnecessary. */
@media only screen and (max-width: 1199px) {
	:is(.f_Task_S, .f_Project_S) #f_rightbtngrp.rightButtonsInLine {
		float: none;
		clear: both;
		display: flex;
		flex-wrap: wrap;
		align-items: center;
		justify-content: flex-end;
		gap: 6px;
		height: auto;
		max-width: 100%;
		margin: 6px 0 10px;
	}

	:is(.f_Task_S, .f_Project_S) #f_rightbtngrp.rightButtonsInLine > .clear {
		display: none;
	}
}

/* AWPM dashboard and detail adaptations follow the generic layout breakpoints. */
@media only screen and (max-width: 1199px) and (min-width: 641px) {
	.ws_Dashboard .f_TextMessagesDashboard .ordo-cards {
		gap: 18px;
	}
}

@media only screen and (max-width: 640px) {
	.ws_Dashboard .ordo-workspace-panel:has(.v_Project_V) .ordo-title,
	.ws_Dashboard .ordo-workspace-panel:has(.v_Task_V) .ordo-title {
		margin-left: 8px;
		/* Keep section hierarchy stable on phones; do not enlarge these nested
		 * headings back to the page-title size at the narrow breakpoint. */
		font-size: var(--ordo-modern-font-section);
		line-height: 1.4;
	}

	.ws_Dashboard :is(.v_Project_V, .v_Task_V) table {
		min-width: 1050px;
	}

	.ws_Dashboard .f_TextMessagesDashboard .ordo-cards {
		grid-template-columns: minmax(0, 1fr);
		gap: 18px;
	}

	#workspace.ws_Dashboard,
	.ordo-workspace.ws_Dashboard {
		grid-template-rows: auto auto auto;
	}

	.ws_Dashboard .f_TextMessagesDashboard .ordo-card + .ordo-card {
		padding-top: 15px;
		border-top: 1px solid var(--ordo-modern-line);
	}

	.ordo-fieldset.pmmtopic {
		padding: 10px;
	}

	#ordoViewf_historytext tbody > tr,
	#ordoViewf_historytext .subtext > tr {
		padding: 10px;
	}

	#ordoViewf_historytext .subtext {
		margin-left: 5px;
		padding-left: 7px;
	}

	#ordoViewf_historytext .texthead .c_textdate {
		margin-left: 0;
	}

	/* A person becomes one compact card at phone width. The hidden class still
	 * wins, and the compact mode continues to remove only the photo column. */
	body.ordo-modern #Presence_List {
		background: #f6f8f7;
	}

	body.ordo-modern #ordoViewPresence_List {
		display: block;
		background: transparent;
	}

	body.ordo-modern #ordoViewPresence_List thead {
		display: none;
	}

	body.ordo-modern #ordoViewPresence_List tbody {
		display: grid;
		gap: 8px;
		padding: 8px;
	}

	body.ordo-modern #ordoViewPresence_List tbody tr:not(.hidden) {
		display: grid;
		grid-template-columns: 48px minmax(0, 1fr);
		grid-template-areas: "photo name" "photo status" "photo timing";
		gap: 3px 10px;
		margin: 0;
		padding: 10px;
		border: 1px solid var(--ordo-modern-line);
		border-radius: 10px;
		background: #fff;
		box-shadow: 0 2px 7px rgba(15, 23, 42, 0.035);
	}

	body.ordo-modern #ordoViewPresence_List.compact tbody tr:not(.hidden) {
		grid-template-columns: minmax(0, 1fr);
		grid-template-areas: "name" "status" "timing";
	}

	body.ordo-modern #ordoViewPresence_List tbody tr td {
		width: auto;
		min-width: 0;
		padding: 0;
		border: 0;
		background: transparent;
		font-size: var(--ordo-font-size-default);
		overflow-wrap: anywhere;
	}

	body.ordo-modern #ordoViewPresence_List tbody tr:hover td {
		background: transparent;
	}

	body.ordo-modern #ordoViewPresence_List tbody .c_status::before {
		margin-right: 7px;
	}

	/* Match the desktop column selector specificity: inherited 80px/32%
	 * widths must not survive inside the phone's 48px + flexible grid. */
	body.ordo-modern #ordoViewPresence_List tbody tr :is(.c_foto, .c_fullname, .c_status, .c_timing) {
		width: auto;
	}

	body.ordo-modern #ordoViewPresence_List tr .c_foto { grid-area: photo; }
	body.ordo-modern #ordoViewPresence_List tr .c_fullname { grid-area: name; }
	body.ordo-modern #ordoViewPresence_List tr .c_status { grid-area: status; }
	body.ordo-modern #ordoViewPresence_List tr .c_timing { grid-area: timing; }
}
