/*
 * This is a manifest file that'll be compiled into application.css.
 *
 * With Propshaft, assets are served efficiently without preprocessing steps. You can still include
 * application-wide styles in this file, but keep in mind that CSS precedence will follow the standard
 * cascading order, meaning styles declared later in the document or manifest will override earlier ones,
 * depending on specificity.
 *
 * Consider organizing styles into separate files for maintainability.
 */

/*
 * AIDEV-NOTE: Engraving font previews (issue #1302) — self-hosted latin subsets of the two
 * physical engraving lettering styles so clients see their pet's name rendered in each:
 *   Block  -> Lato            Script -> Dancing Script
 * Browsers only fetch a webfont when an element actually uses it, so declaring these globally
 * costs nothing on pages that don't render the previews. Propshaft rewrites the url() refs to
 * digested asset paths. Latin subset only (engraving names are latin).
 */
@font-face {
  font-family: "Engraving Block";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/lato-400-latin-8ab8f9b2.woff2") format("woff2");
}
@font-face {
  font-family: "Engraving Block";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/lato-700-latin-41f81667.woff2") format("woff2");
}
@font-face {
  font-family: "Engraving Script";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/dancing-script-latin-c6494754.woff2") format("woff2");
}

.font-engraving-block { font-family: "Engraving Block", system-ui, sans-serif; }
.font-engraving-script { font-family: "Engraving Script", cursive; }

/* AIDEV-NOTE: TV Mode — fullscreen-like Kanban for wall-mounted displays */
html.tv-mode .tv-hide { display: none !important; }
html.tv-mode #tv-mode-bar { display: flex !important; }
html.tv-mode main { padding: 0.5rem; max-width: 100%; height: calc(100vh - 4rem); display: flex; flex-direction: column; }
html.tv-mode #boardWrap { flex: 1; max-height: none !important; overflow: hidden; }
html.tv-mode #board { height: 100%; min-height: 0; align-items: stretch; }
html.tv-mode #board > [data-kanban-board-target="column"] { display: flex; flex-direction: column; }
html.tv-mode #board > [data-kanban-board-target="column"] > .rounded-2xl { flex: 1; display: flex; flex-direction: column; min-height: 0; }
html.tv-mode #board .kanban-card-list { flex: 1; overflow-y: auto; min-height: 0; }
html.tv-mode .board-label { display: none !important; }

/* AIDEV-NOTE: issue #1780 — soft Tailwind-aligned driver.js popovers */
.dreamflow-tour-popover.driver-popover {
  border-radius: 0.75rem;
  border: 1px solid #e2e8f0;
  box-shadow: 0 10px 25px -5px rgb(15 23 42 / 0.15);
  max-width: min(320px, calc(100vw - 2rem));
  color: #0f172a;
}
.dreamflow-tour-popover .driver-popover-title {
  font-size: 1rem;
  font-weight: 600;
  color: #0f172a;
}
.dreamflow-tour-popover .driver-popover-description {
  font-size: 0.875rem;
  color: #475569;
  line-height: 1.45;
}
.dreamflow-tour-popover .driver-popover-next-btn,
.dreamflow-tour-popover .driver-popover-prev-btn {
  border-radius: 0.5rem;
  border: 1px solid #cbd5e1;
  padding: 0.35rem 0.75rem;
  font-size: 0.8125rem;
}
.dreamflow-tour-popover .driver-popover-next-btn {
  background: #0f172a;
  color: #fff;
  border-color: #0f172a;
  text-shadow: none;
}
.dreamflow-tour-popover .driver-popover-close-btn {
  color: #94a3b8;
}

/* AIDEV-NOTE: issue #1780 — driver.js base styles (inlined so no separate asset request in tests) */
.driver-active .driver-overlay,.driver-active *{pointer-events:none}.driver-active .driver-active-element,.driver-active .driver-active-element *,.driver-popover,.driver-popover *{pointer-events:auto}@keyframes animate-fade-in{0%{opacity:0}to{opacity:1}}.driver-fade .driver-overlay{animation:animate-fade-in .2s ease-in-out}.driver-fade .driver-popover{animation:animate-fade-in .2s}.driver-popover{all:unset;box-sizing:border-box;color:#2d2d2d;margin:0;padding:15px;border-radius:5px;min-width:250px;max-width:300px;box-shadow:0 1px 10px #0006;z-index:1000000000;position:fixed;top:0;right:0;background-color:#fff}.driver-popover *{font-family:Helvetica Neue,Inter,ui-sans-serif,"Apple Color Emoji",Helvetica,Arial,sans-serif}.driver-popover-title{font:19px/normal sans-serif;font-weight:700;display:block;position:relative;line-height:1.5;zoom:1;margin:0}.driver-popover-close-btn{all:unset;position:absolute;top:0;right:0;width:32px;height:28px;cursor:pointer;font-size:18px;font-weight:500;color:#d2d2d2;z-index:1;text-align:center;transition:color;transition-duration:.2s}.driver-popover-close-btn:hover,.driver-popover-close-btn:focus{color:#2d2d2d}.driver-popover-title[style*=block]+.driver-popover-description{margin-top:5px}.driver-popover-description{margin-bottom:0;font:14px/normal sans-serif;line-height:1.5;font-weight:400;zoom:1}.driver-popover-footer{margin-top:15px;text-align:right;zoom:1;display:flex;align-items:center;justify-content:space-between}.driver-popover-progress-text{font-size:13px;font-weight:400;color:#727272;zoom:1}.driver-popover-footer button{all:unset;display:inline-block;box-sizing:border-box;padding:3px 7px;text-decoration:none;text-shadow:1px 1px 0 #fff;background-color:#fff;color:#2d2d2d;font:12px/normal sans-serif;cursor:pointer;outline:0;zoom:1;line-height:1.3;border:1px solid #ccc;border-radius:3px}.driver-popover-footer .driver-popover-btn-disabled{opacity:.5;pointer-events:none}:not(body):has(>.driver-active-element){overflow:hidden!important}.driver-no-interaction,.driver-no-interaction *{pointer-events:none!important}.driver-popover-footer button:hover,.driver-popover-footer button:focus{background-color:#f7f7f7}.driver-popover-navigation-btns{display:flex;flex-grow:1;justify-content:flex-end}.driver-popover-navigation-btns button+button{margin-left:4px}.driver-popover-arrow{content:"";position:absolute;border:5px solid #fff}.driver-popover-arrow-side-over{display:none}.driver-popover-arrow-side-left{left:100%;border-right-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-right{right:100%;border-left-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-top{top:100%;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.driver-popover-arrow-side-bottom{bottom:100%;border-left-color:transparent;border-top-color:transparent;border-right-color:transparent}.driver-popover-arrow-side-center{display:none}.driver-popover-arrow-side-left.driver-popover-arrow-align-start,.driver-popover-arrow-side-right.driver-popover-arrow-align-start{top:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-start,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-start{left:15px}.driver-popover-arrow-align-end.driver-popover-arrow-side-left,.driver-popover-arrow-align-end.driver-popover-arrow-side-right{bottom:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-end,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-end{right:15px}.driver-popover-arrow-side-left.driver-popover-arrow-align-center,.driver-popover-arrow-side-right.driver-popover-arrow-align-center{top:50%;margin-top:-5px}.driver-popover-arrow-side-top.driver-popover-arrow-align-center,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-center{left:50%;margin-left:-5px}.driver-popover-arrow-none{display:none}


/*
 * AIDEV-NOTE: #2158/#2162 — keep the Concourse support FAB clear of sticky bottom action bars.
 * The FAB is fixed at right:20px;bottom:20px with z-index 2147483000, painted by the engine as
 * an inline style (Concourse::CaptureHelper#capture_stack_style), so without this it lands on
 * top of whatever the bar puts in the bottom-right corner: "Move Selected" on /pets_by_location
 * (measured at 1440x900) and "Save Record" in shared/_record_form_action_bar at <=1024px wide.
 * One rule instead of one selector per bar: the sticky-action-bar Stimulus controller publishes
 * the tallest visible bar's height, so a new bottom bar only has to add data-controller to be
 * covered, and a bar that grows (extra button row on a phone) still gets cleared. 0px when no
 * bar is on screen, which reproduces the engine's own bottom:20px. !important beats the inline
 * style; the FAB paints above every app layer, so nothing else needs to know about this.
 *
 * AIDEV-NOTE: #2174 — the lift is unconditional on viewport width, and that is the intended
 * behaviour, not an oversight. #2162's AC2 asked for 1440x900 to be "unchanged"; strictly it is
 * not. The old `:has()` rule only knew about the batch bar, so before #2162 a record form left
 * the FAB at 20px at every width; now any page with a sticky footer rests it at
 * calc(20px + --sticky-action-bar-height) — measured 83px on the medical-record edit form at
 * 1440x900. Nothing is covered there: "Save Record" ends at x=1136 and the FAB starts at x=1302,
 * 166px of clearance, so the pill simply sits a little higher. Accepted rather than scoped to
 * narrow viewports, because a width conditional is a second hard-coded number of exactly the kind
 * that put a fixed 96px here in #2158 and had to be undone.
 */
#concourse-capture {
  bottom: calc(20px + var(--sticky-action-bar-height, 0px)) !important;
}
