/* Canonical shared components v20260910.1 — layout, palette and glass-edge materials; no product data or access policy. */
:root{
 --df-bg:#f3f2ee;--df-ink:#181a17;--df-dim:#585d55;--df-faint:#686d65;--df-line:#dcded5;
 --df-green:#98c122;--df-soft:#edf3dc;--df-deep:#4d6415;--df-selected-border:#c7d5a5;
 --df-surface:rgba(255,255,255,.76);--df-inset:#f7f7f3;--df-paper:#fff;--df-hover:#f3f6e9;
 --df-edge:#d7dbd0;--df-edge-top:#fdfefa;--df-edge-bottom:#cdd2c5;
 --df-glass:linear-gradient(155deg,rgba(255,255,255,.68),rgba(255,255,255,.12) 45%,rgba(236,240,230,.16));
 --df-rim:inset 0 1px 0 #fff,inset 1px 0 0 rgba(255,255,255,.8),inset 0 -1px 0 rgba(209,216,197,.48);
 --df-surface-shadow:var(--df-rim),0 2px 3px rgba(40,48,29,.025),0 12px 28px -18px rgba(40,48,29,.22);
 --df-control-shadow:inset 0 1px 0 #fff,inset 0 -1px 0 rgba(211,219,199,.5),0 1px 2px rgba(40,48,29,.045);
 --df-selected-glass:linear-gradient(180deg,rgba(255,255,255,.52),rgba(255,255,255,0));
 --df-sans:"PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
 --df-height:36px;--df-gap:12px;--df-radius:8px;--df-content-max:1168px;--df-gutter:24px;
 --type-primary:var(--df-ink);--type-secondary:var(--df-dim);--type-tertiary:var(--df-faint);
 --weight-label:500;--weight-value:600;--weight-meta:400
}
body.df-console{
 --bg:var(--df-bg);--panel:var(--df-surface);--panel-2:var(--df-inset);--line:var(--df-line);
 --ink:var(--df-ink);--ink-dim:var(--df-dim);--ink-faint:var(--df-faint);--dim:var(--df-dim);--muted:var(--df-dim);--faint:var(--df-faint);
 --green:var(--df-green);--green-deep:var(--df-deep);--deep:var(--df-deep);--sans:var(--df-sans);
 margin:0;color:var(--df-ink);font-family:var(--df-sans);background-color:var(--df-bg);background-image:radial-gradient(520px 260px at calc(100% - 40px) -40px,rgba(184,222,216,.2),transparent 72%),radial-gradient(420px 240px at 58% -40px,rgba(234,202,219,.18),transparent 72%),radial-gradient(460px 260px at 14% -50px,rgba(235,221,171,.18),transparent 72%);background-repeat:no-repeat;background-attachment:fixed}
.df-console *{box-sizing:border-box}.df-console [hidden]{display:none!important}.df-console .wrap{padding-top:0}.df-shell,.df-console .df-content{max-width:var(--df-content-max);width:calc(100% - 2 * var(--df-gutter));margin-inline:auto;min-width:0;padding-inline:0}.df-console .df-content>main{min-width:0;max-width:none;padding-inline:0}.df-console .df-content>aside{min-width:0}.df-shell{margin-block:0;color:var(--df-ink);font:14px/1.5 var(--df-sans)}
.df-global{height:72px;display:grid;grid-template-columns:112px minmax(0,1fr) auto;align-items:center;gap:20px;border-bottom:1px solid var(--df-line)}
.df-root{grid-template-columns:minmax(0,1fr) auto}.df-brand{display:flex;gap:12px;align-items:center;min-width:0}.df-brand>svg{width:32px;height:32px;flex:none}.df-brand>span{font-size:23px;font-weight:600;line-height:32px;white-space:nowrap}
.df-shell .df-control,.df-dialog .df-control,.df-content .df-control{font:400 14px/20px var(--df-sans);color:var(--df-ink);height:var(--df-height);min-height:var(--df-height);display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--df-line);border-radius:var(--df-radius);padding:0 12px;background:var(--df-glass),var(--df-surface);text-decoration:none;cursor:pointer;white-space:nowrap;box-shadow:var(--df-control-shadow);letter-spacing:0;border-bottom-color:var(--df-edge-bottom)}
.df-control>svg{width:16px;height:16px;flex:none}.df-shell .df-return{width:112px}.df-shell .df-account{font-size:13px;border-radius:10px}.df-avatar{width:24px;height:24px;border-radius:50%;display:inline-grid;place-items:center;background:var(--df-soft);color:var(--df-deep);font-size:11px;flex:none}.df-local{font-size:13px;color:var(--df-dim)}
.df-shell[data-product=local] .df-global{-webkit-app-region:drag}.df-shell[data-product=local] :is(a,button){-webkit-app-region:no-drag}
.df-product{display:flex;gap:20px;align-items:center;min-height:60px;padding:12px 0;border-bottom:1px solid var(--df-line)}
.df-tabs{display:flex;gap:4px;min-width:0;overflow-x:auto}.df-tabs:empty{display:none}.df-tabs>a,.df-tabs>button{display:inline-flex;align-items:center;justify-content:center;flex:none;min-height:var(--df-height);padding:0 12px;border:0;border-radius:8px;background:transparent;color:var(--df-dim);font:400 14.5px/20px var(--df-sans);text-decoration:none;white-space:nowrap;cursor:pointer}.df-tabs>[aria-current=page],.df-tabs>.on{background:var(--df-selected-glass),var(--df-soft);color:var(--df-deep);font-weight:600;box-shadow:var(--df-rim),inset 0 0 0 1px var(--df-selected-border)}
.df-update{display:flex;align-items:center;gap:12px;flex:none;margin-left:auto}.df-time{color:var(--df-dim);font-size:12px;line-height:18px;text-align:right}.df-time strong{display:block;font-size:14px;font-weight:400;line-height:20px;max-width:260px;overflow-wrap:anywhere}.df-shell .df-refresh{background:var(--df-selected-glass),var(--df-soft);border-color:var(--df-selected-border)}.df-filters{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:16px 0;border-bottom:1px solid var(--df-line)}.df-filters label{font-size:13px;color:var(--df-dim)}.df-month{display:flex;align-items:center;gap:6px}.df-month button{width:var(--df-height);padding:0}.df-month select{min-width:134px;appearance:auto}.df-control:disabled{opacity:.55;cursor:default}
.df-console :is(button,input:not([type=checkbox]):not([type=radio]),select,textarea){font-family:var(--df-sans)}
.df-console :is(input:not([type=checkbox]):not([type=radio]),select,textarea){min-height:var(--df-height);font-size:14px;line-height:20px;border:1px solid var(--df-line);border-radius:var(--df-radius);padding:7px 12px;background:var(--df-paper);color:var(--df-ink);max-width:100%;box-shadow:inset 0 1px 2px rgba(40,48,29,.04),0 1px 0 rgba(255,255,255,.8)}
.df-console :is(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:3px solid var(--df-deep);outline-offset:2px}.df-console :is(button,a):not(:disabled):hover{filter:none}
.df-console :is(.view-switch,.period,.detailtabs){display:flex;gap:4px;flex-wrap:wrap}.df-console :is(.view-switch,.period,.detailtabs)>button{min-height:var(--df-height);font-size:14px;line-height:20px;border-radius:8px;padding:7px 12px}.df-console :is(.view-switch,.period,.detailtabs)>:is(.active,[aria-pressed=true]){background:var(--df-selected-glass),var(--df-soft);color:var(--df-deep);box-shadow:var(--df-rim),inset 0 0 0 1px var(--df-selected-border)}
.df-console :is(.primary,.secondary,.btn-primary,.bp-edit,.governance-btn,.task-link,.dialog-foot button,.df-dialog button){min-height:var(--df-height);font-size:14px;line-height:20px;border-radius:8px}.df-console :is(.primary,.btn-primary){background:var(--df-selected-glass),var(--df-soft);color:var(--df-deep);border:1px solid var(--df-selected-border);box-shadow:var(--df-control-shadow)}
.df-console .df-dialog{width:min(820px,calc(100vw - 32px));max-width:calc(100vw - 32px);max-height:calc(100dvh - 48px);border:1px solid var(--df-line);border-radius:14px;background:var(--df-glass),#fafbf8;color:var(--df-ink);box-shadow:var(--df-rim),0 24px 70px #181a172d;overflow:auto}.df-dialog::backdrop{background:#181a1748;backdrop-filter:blur(3px)}.df-console .df-account-dialog{width:min(520px,calc(100vw - 32px));padding:0}
.df-console dialog.modal{width:min(440px,calc(100vw - 32px));margin:auto;background:var(--df-glass),#fafbf8}.df-console dialog.modal.wide{width:min(760px,calc(100vw - 32px))}.df-console dialog.modal h3{font-size:23px;line-height:1.4}.df-console dialog.modal .desc{font-size:13px;line-height:1.7}.df-console dialog.modal input:focus-visible{outline:3px solid var(--df-deep);outline-offset:2px}
.df-dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--df-line)}.df-dialog-head h2{font:600 23px/1.4 var(--df-sans);margin:0}.df-dialog .df-icon{width:var(--df-height);padding:0}.df-account-body{padding:24px}.df-identity{display:flex;align-items:center;gap:14px}.df-identity>div{display:flex;flex-direction:column;min-width:0;gap:4px}.df-identity strong{font-size:17px}.df-identity span{overflow-wrap:anywhere}.df-identity>div>span{font-size:13px;color:var(--df-dim)}.df-avatar-large{width:48px;height:48px;font-size:20px}.df-scope{background:var(--df-inset);border-radius:10px;padding:16px;margin-top:20px}.df-scope>span{font-size:12px;color:var(--df-dim);display:block}.df-scope strong{display:block;font-size:15px;margin:4px 0 12px}.df-scope p{font-size:14px;margin:4px 0 0;line-height:1.6}.df-hint{font-size:13px;line-height:1.7;color:var(--df-dim);margin:16px 0 0}.df-dialog-foot{padding:18px 24px;border-top:1px solid var(--df-line);display:flex;justify-content:flex-end;gap:12px;flex-wrap:wrap}
.df-console :is(.dialog-head,.detailhead,.bp-detail-head){gap:16px}.df-console :is(.dialog-head,.detailhead,.bp-detail-head) h2{font-size:23px;line-height:1.4}.df-console .bp-close{display:inline-flex;align-items:center;justify-content:center}.df-console .bp-close svg{width:18px;height:18px}.df-console :is(.dialog-foot,.structure-form .actions){gap:12px}.df-console table{font-variant-numeric:tabular-nums}.df-console :is(.money,.bp-money,.bp-amount){font-variant-numeric:tabular-nums}.df-console :is(.card,.project-card,.pcard,.tablebox,.list){border-radius:12px}.df-console .asset-shell{margin-top:20px}.df-console .asset-row{min-height:56px}.df-console .group>summary{min-height:44px}
/* Shared material system: outer surfaces catch light; reading rows stay quiet.
   Borders/shadows do not change layout. No content-wide backdrop blur. */
.df-console :is(.entries>.card,.login,.inventory,.project-card,.project-task-card,.column,.tablebox,.stats,.trend-wrap,.grid>.card){
 background:var(--df-glass),var(--df-surface);
 border-color:var(--df-edge);border-top-color:var(--df-edge-top);border-bottom-color:var(--df-edge-bottom);
 box-shadow:var(--df-surface-shadow);backdrop-filter:none
}
.df-console .bp-lane{
 background:var(--df-glass),var(--df-surface);border-top-color:var(--df-edge-top);
 border-right-color:var(--df-edge);border-bottom-color:var(--df-edge-bottom);box-shadow:var(--df-surface-shadow)
}
.df-console .bp-table-wrap{background:var(--df-paper);border-color:var(--df-edge);box-shadow:var(--df-surface-shadow)}
.df-console :is(.project-card .objective,.project-task,.bp-node){background:var(--df-paper);border-color:var(--df-line);box-shadow:inset 0 1px 0 #fff}
.df-console .bp-tree .bp-node{background:transparent;box-shadow:none}
.df-console :is(.bp-node,.project-task):hover{background:var(--df-hover);border-color:var(--df-selected-border)}
.df-console .entries>.card:hover{border-color:var(--df-selected-border);box-shadow:var(--df-rim),0 3px 5px rgba(40,48,29,.04),0 14px 28px -16px rgba(40,48,29,.24)}
.df-console .card-icon{color:var(--df-deep)}
.df-console :is(.google-login,.secondary,.mini-btn,.bp-close,.view-switch){
 background:var(--df-glass),var(--df-surface);border-color:var(--df-edge);box-shadow:var(--df-control-shadow)
}
.df-console :is(.pc-link,.governance-btn,.task-link,.add-task,.bp-edit){
 background:var(--df-selected-glass),var(--df-soft);color:var(--df-deep);border-color:var(--df-selected-border);box-shadow:var(--df-control-shadow)
}
.df-console :is(.df-control,.google-login,.secondary,.mini-btn,.bp-close,.pc-link,.governance-btn,.task-link,.add-task,.bp-edit):not(:disabled):hover{
 border-color:var(--df-selected-border);background-color:var(--df-hover)
}
.df-console :is(.folders button[aria-current=true],.axis button.on,.seg button.on,.period button.active){
 background:var(--df-selected-glass),var(--df-soft);color:var(--df-deep);
 box-shadow:var(--df-rim),inset 0 0 0 1px var(--df-selected-border);border-color:var(--df-selected-border)
}
.df-console .folders button:not([aria-current=true]):hover{background:var(--df-hover)}
.df-console :is(.stage,.pill.ok){background:var(--df-soft);border-color:var(--df-selected-border);color:var(--df-deep)}
.df-console .group>summary{background:var(--df-inset);box-shadow:inset 0 1px 0 #fff}
.df-console .group>summary:hover{background:var(--df-hover)}
.df-console .asset-row{background:var(--df-paper);border-bottom-color:var(--df-line)}
.df-console .asset-row:hover{background:var(--df-hover)}
.df-console :is(.tablebox th,.bp-table thead){background:var(--df-inset);color:var(--df-dim)}
.df-console .tablebox td{border-bottom-color:var(--df-line)}
.df-console .tablebox td.who{background:var(--df-paper)}
.df-console .tablebox tbody tr:hover td{background:var(--df-hover)}
.df-console :is(.tablebox .date,.caption b){color:var(--df-dim)}
.df-console :is(.tablebox th.group,.tablebox .date small){color:var(--df-faint)}
.df-console .notice{background:var(--df-inset);color:var(--df-dim)}
.df-console :is(.bp-detail,.structure-form){background:var(--df-glass),#fafbf8;border-color:var(--df-edge);box-shadow:var(--df-rim),0 24px 70px #181a172d}
.df-console .bp-search input[type=search]{background:transparent;border:0;box-shadow:none}
.df-console .grid>.card.warn{border-color:var(--amber)}
.df-console .grid>.card.over{border-color:var(--red)}
@media(prefers-reduced-transparency:reduce){.df-console{--df-surface:#fff;--df-glass:none}}
@media(forced-colors:active){.df-console{--df-glass:none;--df-selected-glass:none}.df-console :is(.df-control,.google-login,.entries>.card,.inventory,.project-card,.project-task-card,.tablebox,.bp-lane,.grid>.card){border-color:CanvasText;box-shadow:none}.df-console :is(.folders button[aria-current=true],.df-tabs>[aria-current=page]){outline:1px solid Highlight}}
@media(max-width:799px){:root{--df-height:44px;--df-gutter:16px}.df-global:not(.df-root){height:120px;grid-template-columns:1fr auto;grid-template-rows:60px 60px;gap:0}.df-global:not(.df-root)>.df-brand{grid-row:2;grid-column:1/-1}.df-global:not(.df-root)>.df-account,.df-global>.df-local{grid-row:1;grid-column:2}.df-brand>span{font-size:20px}.df-root{height:72px;gap:12px}.df-product{display:block;padding:12px 0}.df-tabs{flex-wrap:nowrap}.df-tabs+.df-update{margin-top:12px;justify-content:flex-end}.df-tabs:empty+.df-update{margin-top:0}.df-tabs>a,.df-tabs>button{font-size:14px;padding-inline:10px}.df-time strong{max-width:220px}.df-account-body{padding:20px}.df-dialog-head,.df-dialog-foot{padding:18px 20px}.df-console :is(.toolbar,.bp-tools){flex-wrap:wrap}.df-console .toolbar input{width:100%;min-width:0}.df-console .field,.df-console .row{min-width:0}}
@media(prefers-reduced-motion:reduce){.df-console *{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
