/* Shared spacing, responsive dialogs, focus and wrapping. No DTO or API changes. */
:root{--ui-gap-label:8px;--ui-gap-field:16px;--ui-gap-section:24px;--ui-edge:12px;--ui-target:44px;--ui-focus:#926b06}
/* Overlap ordering inside the timetable must never rise above a dialog. */
body .board{isolation:isolate}
/* Shared wrapping policy: text and peer controls are different kinds of wrapping. */
body :is(h1,h2,h3,h4,.d-title,.ui-dialog-title,.jlm-title,.modal-title,.card-title){text-wrap:balance;word-break:keep-all;overflow-wrap:anywhere}
body :is(p,.m-hint,.d-hint,.confirm-text,.done-name,.auth-message,.placeholder,.empty,.message,.subtitle,.jdesc,.note){text-wrap:pretty;word-break:keep-all;overflow-wrap:anywhere}
body .ui-balanced-group{display:flex!important;flex-wrap:wrap!important;min-width:0;align-items:center}
body .cat-choices{--ui-balance-min:64px;align-items:stretch}
body .tag-wrap.ui-balanced-group{width:100%;max-width:100%;flex-basis:100%}
body .meta-row>.meta-bar{flex:1 1 100%;width:100%;min-width:0}
body .ui-balanced-group:is([data-ui-wrap="true"],[data-ui-fill="true"])>.ui-balanced-item{flex:0 0 var(--ui-item-width,auto)!important;min-width:0!important;max-width:100%;margin-inline:0!important;justify-content:center;text-wrap:balance}
body .ui-balanced-group.ui-balance-measuring>.ui-balanced-item{flex:0 0 auto!important;width:max-content!important;min-width:0!important;max-width:none!important;white-space:nowrap!important}
body .ui-balanced-group>:is(.ac,.legend-title,.legend-hint,.tag-wrap){flex:0 0 100%!important;width:100%;min-width:0}
body .door,body .door .d-art,body .door .stack,body .find-body{min-width:0}
@media(max-width:620px){body:not(.open) .doors{grid-template-columns:minmax(0,1fr)}}
/* The compact entry preview also follows actual card heights when text grows. */
@media(max-width:620px){body:not(.open) .door.find #findArt{height:auto;display:flex;flex-direction:column;gap:10px;padding:2px 0 4px}body:not(.open) .door.find #findArt .mini{position:relative;top:auto;left:auto;right:auto;width:100%}}
body .ui-dialog-card{box-sizing:border-box!important;display:grid!important;grid-template-rows:auto minmax(0,1fr) auto;gap:var(--ui-gap-field);width:min(400px,calc(100vw - 2*var(--ui-edge)));max-width:calc(100vw - 2*var(--ui-edge))!important;max-height:calc(100dvh - 2*var(--ui-edge));padding:20px!important;overflow:hidden}
body .ui-dialog-head{display:flex;gap:var(--ui-gap-field);align-items:center;justify-content:space-between;min-width:0}
body .ui-dialog-head>:first-child{min-width:0;margin:0;overflow-wrap:anywhere}
body .ui-dialog-head .ui-dialog-close{position:static;flex:0 0 var(--ui-target);width:var(--ui-target);height:var(--ui-target);margin:0;padding:4px;border:1px solid #d7d2c8;border-radius:12px;background:white;color:#403b32;box-shadow:none;font-size:20px;cursor:pointer}
body .ui-dialog-body{display:flex;flex-direction:column;gap:var(--ui-gap-field);min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;scroll-padding-block:var(--ui-gap-field);padding:4px 8px 12px 4px}
body .ui-dialog-card:has(>.ui-dialog-foot:empty){grid-template-rows:auto minmax(0,1fr)}
body .ui-dialog-body>*{flex-shrink:0;min-width:0;max-width:100%;margin-top:0;margin-bottom:0;overflow-wrap:anywhere}
body .ui-dialog-body .form-row{margin:0;gap:var(--ui-gap-label)}
body .ui-dialog-body .m-hint{margin:0;line-height:1.5;padding:10px 12px}
body .ui-dialog-body .time-note:empty{display:none}
body .ui-dialog-foot{display:flex;flex-wrap:wrap;gap:12px;min-width:0;border-top:1px solid #ded9cf;padding-top:var(--ui-gap-field)}
body .ui-dialog-foot:empty{display:none}
body .ui-dialog-foot>*,body .ui-dialog-foot .confirm-actions>*,body .ui-dialog-foot .item-modal-actions>*{min-width:0;min-height:var(--ui-target);flex:1 1 90px;white-space:normal;overflow-wrap:anywhere;line-height:1.4}
body .ui-dialog-foot .confirm-actions,body .ui-dialog-foot .item-modal-actions,body .ui-dialog-foot .done-actions{display:flex;width:100%;gap:12px;flex-wrap:wrap;margin:0;padding:0}
body .ui-dialog-body .time-row{display:flex;gap:12px;flex-wrap:wrap}
body .ui-dialog-body .time-row>div{min-width:0;flex:1 1 116px}
body .ui-dialog-body .time-pair{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:4px}
body .ui-dialog-body .time-pair .tnum{min-width:0;width:100%;padding-left:4px;padding-right:4px}
body .ui-dialog-body #imIconPicker{position:static;max-width:100%;width:100%;margin-top:var(--ui-gap-label);box-shadow:0 2px 0 #d7d2c8}
body .ui-dialog-body .ip-grid{max-height:192px}
body .ui-dialog-body .im-cat,body .ui-dialog-body .ip-tab{min-height:36px}
body .ui-dialog-body .form-row input,body .ui-dialog-body .form-row select{min-height:44px}
body .ui-dialog-body .jd-opt{min-height:44px;align-items:flex-start;gap:10px}
body .ui-dialog-body .jd-opt input{flex-shrink:0;width:20px;height:20px;margin:2px 0 0}
body .ui-dialog-body .jlm-btn{min-height:44px;line-height:1.4}
body .ui-dialog-body .ji-half{display:flex;gap:12px;flex-wrap:wrap}
body .ui-dialog-body .ji-half>*{min-width:0;flex:1 1 100px}
body :where(button,a,input,textarea,select,[tabindex]):focus-visible{outline:3px solid var(--ui-focus)!important;outline-offset:3px}
/* Boxed controls: focus follows the inside edge, so offset shadows cannot distort its gap. */
body :is(button,input:not([type=checkbox]):not([type=radio]),textarea,select,[role=button],.door):focus-visible{outline-offset:-3px!important}
body .ui-dialog-title{margin:0;font-size:18px;line-height:1.45;font-weight:800;text-align:left}
body .ui-dialog-card.tuto-mcard{width:min(320px,calc(100vw - 24px))}
body .ui-dialog-body::-webkit-scrollbar{width:6px}
body .ui-dialog-body::-webkit-scrollbar-thumb{background:#b8b0a0;border-radius:4px}
body .pv-panel{display:flex;flex-direction:column;max-height:calc(100dvh - 24px)}
body .pv-x{position:static;align-self:flex-end;min-height:44px;flex-shrink:0;margin:8px 12px;box-shadow:none}
body .pv-panel iframe{height:auto;flex:1;min-height:0}
body .ticket-head{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
body .ticket-eyebrow{min-width:0;overflow-wrap:anywhere}
body .ticket-close-btn{min-height:44px;flex-shrink:0}
body .ac-list{max-height:min(240px,40dvh);overflow-y:auto}
body .ac-opt{min-height:44px;white-space:normal;overflow-wrap:anywhere}
body #pasteInput{font-size:16px}
body #collectNote:empty{display:none}
body #saveToast{max-width:calc(100vw - 24px);white-space:normal;line-height:1.5}
body .auth-message:empty{display:none}
body .fold[hidden]{display:none!important}
body .ui-error-state{box-sizing:border-box;display:grid;justify-items:center;gap:12px;width:min(100%,440px);min-width:0;margin:24px auto;padding:24px;border:1px solid #d7d2c8;border-radius:16px;background:white;color:#4c453b;line-height:1.6;text-align:center}
body .ui-error-state>h2{margin:0;font-size:20px;line-height:1.5}
body .ui-error-state>p{margin:0;max-width:100%;text-wrap:pretty}
body .ui-error-state>button{justify-self:center;margin:12px 0 0;min-width:160px;max-width:100%;white-space:normal;overflow-wrap:anywhere}
body .ui-error-state button,body .ui-recovery-actions a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 16px;border:1px solid #3a352d;border-radius:999px;background:#262420;color:#f7d9a0;font:inherit;cursor:pointer;text-decoration:none}
body .ui-recovery-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:20px}
body .ui-error-state>.ui-recovery-actions{margin-top:12px;justify-content:center;max-width:100%}
body .detail-head>div:first-child{min-width:0;overflow-wrap:anywhere}
body .issue-head,body .evidence-links{flex-wrap:wrap;overflow-wrap:anywhere}
body .issue dl>div>*{min-width:0;overflow-wrap:anywhere}
body .topbar{min-height:64px;height:auto;gap:12px;padding-top:10px;padding-bottom:10px}
body .topbar .brand{min-width:0;overflow-wrap:anywhere}
body .topbar>button{flex-shrink:0}
body dialog{width:min(440px,calc(100vw - 24px));max-width:calc(100vw - 24px);max-height:calc(100dvh - 24px);overflow:auto}
@media(max-width:760px){body .content{padding:16px}body .auth-card{padding:24px}body .actions{flex-wrap:wrap}body .actions>*{min-height:44px}}
