:root{--bg:#07142d;--bg-2:#0b1f43;--panel:#0d2852;--panel-2:#102f60;--line:#315687;--line-soft:rgba(119,155,205,.22);--text:#f5f8ff;--muted:#aab9cf;--accent:#7186f0;--accent-2:#5669d8;--good:#39d98a;--warn:#f7c948;--bad:#ff5d5d;--shadow:0 22px 70px rgba(0,0,0,.35)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,Segoe UI,Arial,sans-serif;background:radial-gradient(circle at 80% 15%,rgba(52,102,174,.16),transparent 26%),linear-gradient(180deg,#07142d 0%,#081a38 100%);color:var(--text)}button,input,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}.muted{color:var(--muted)}.eyebrow{font-size:.72rem;letter-spacing:.16em;color:#8da7ca;font-weight:700}
.auth-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.auth-card{width:min(480px,100%);background:linear-gradient(180deg,rgba(15,45,91,.98),rgba(8,28,62,.98));border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);padding:30px}.brand-row{display:flex;align-items:center;gap:16px;margin-bottom:12px}.brand-mark{font-weight:900;letter-spacing:.08em;background:#0a2148;border:1px solid #4b6e9f;padding:12px 14px;border-radius:12px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.03)}.brand-mark.small{padding:8px 10px;border-radius:9px;font-size:.95rem}h1,h2,h3,h4,p{margin-top:0}.auth-card h1{margin:.18rem 0 0;font-size:2rem}.tab-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:24px 0 18px}.tab{border:1px solid var(--line);background:#0a2148;color:var(--muted);padding:11px;border-radius:10px}.tab.active{background:#183c74;color:white;border-color:#6685b7}.form-grid{display:grid;gap:14px}.form-grid label{display:grid;gap:7px;font-size:.86rem;color:#dce6f5}.form-grid input,.hero-tools input,.snapshot-picker select{width:100%;border:1px solid #355b8e;background:#071a38;color:white;border-radius:10px;padding:12px 13px;outline:none}.form-grid input:focus,.hero-tools input:focus,.snapshot-picker select:focus{border-color:#8397ff;box-shadow:0 0 0 3px rgba(113,134,240,.15)}.primary,.secondary{border:1px solid transparent;border-radius:10px;padding:12px 14px;color:white}.primary{background:linear-gradient(180deg,var(--accent),var(--accent-2));font-weight:700}.secondary{background:#0b234b;border-color:#355b8e}.compact{padding:8px 11px;font-size:.82rem}.hint{font-size:.78rem;color:#93a9c6}.message{margin-top:16px;padding:11px 13px;border-radius:10px;background:#281b26;border:1px solid #7f4154;color:#ffdbe2}.otp-title{font-size:1.15rem;font-weight:800}
.portal{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:20;background:rgba(8,26,56,.96);backdrop-filter:blur(15px);border-bottom:1px solid #294d7e;display:flex;justify-content:space-between;align-items:center;padding:11px 16px;gap:16px}.topbar-brand,.topbar-actions,.user-box{display:flex;align-items:center;gap:10px}.topbar-copy{display:grid;gap:2px}.topbar-copy span,.user-box span{font-size:.72rem;color:var(--muted)}.user-box{display:grid;gap:1px;padding:0 7px}.pill{border-radius:999px;padding:6px 9px;font-size:.7rem;font-weight:800;border:1px solid rgba(255,255,255,.15)}.pill.good{color:#9ef3c3;background:rgba(26,135,84,.2)}.pill.bad{color:#ffc0c0;background:rgba(161,46,46,.2)}.subbar{display:flex;justify-content:space-between;gap:16px;padding:8px 18px;background:#0a1d3f;border-bottom:1px solid rgba(68,105,153,.4);font-size:.78rem;color:#9fb2cc}.status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--good);box-shadow:0 0 12px var(--good);margin-right:7px}
.content{width:min(1500px,100%);margin:0 auto;padding:28px 20px 36px;flex:1}.hero{display:flex;justify-content:space-between;gap:20px;align-items:end;margin-bottom:20px}.hero h2{font-size:2rem;margin:.3rem 0 .4rem}.hero-tools{min-width:260px}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:18px}.stat{background:linear-gradient(180deg,#0f2e5d,#0b244b);border:1px solid #2c5387;border-radius:14px;padding:14px}.stat span{display:block;color:#9db1cd;font-size:.75rem;margin-bottom:6px}.stat strong{font-size:1.4rem}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:14px}.project-card{background:linear-gradient(180deg,rgba(15,46,93,.98),rgba(8,31,67,.98));border:1px solid #315887;border-radius:16px;padding:16px;box-shadow:0 8px 30px rgba(0,0,0,.17);transition:.18s transform,.18s border-color;cursor:pointer}.project-card:hover{transform:translateY(-2px);border-color:#6383b4}.project-head{display:flex;justify-content:space-between;gap:12px;align-items:start}.project-head h3{margin:.2rem 0 0}.health,.traffic-badge{font-size:.7rem;font-weight:900;border-radius:999px;padding:5px 8px;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.health.good,.traffic-badge.green{background:rgba(43,181,111,.18);color:#74eca8}.health.warning,.traffic-badge.yellow{background:rgba(214,162,29,.2);color:#ffd565}.health.critical,.traffic-badge.red{background:rgba(201,64,64,.2);color:#ff9292}.traffic-badge.gray{background:rgba(139,150,168,.16);color:#b7c2d2}.dual-progress{display:flex;justify-content:space-between;gap:12px;margin-top:14px}.dual-progress div{display:flex;align-items:baseline;gap:7px}.dual-progress span{font-size:.64rem;color:#91a7c4}.dual-progress strong{font-size:.98rem}.progress{position:relative;height:8px;background:#07182f;border:1px solid rgba(103,137,183,.35);border-radius:999px;margin:8px 0 12px}.progress>div{height:100%;border-radius:999px;background:linear-gradient(90deg,#5669d8,#8ca0ff)}.progress>i{position:absolute;top:-4px;width:2px;height:14px;background:#f5f8ff;opacity:.9}.metric-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.metric{background:rgba(0,0,0,.13);border:1px solid var(--line-soft);border-radius:10px;padding:9px}.metric span{display:block;color:#95abc8;font-size:.66rem}.metric strong{display:block;margin-top:3px;font-size:.9rem}.assessment-line{margin-top:11px;font-size:.72rem;color:#b9c8dc;min-height:2.1em}.card-foot{display:flex;justify-content:space-between;gap:10px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line-soft);font-size:.7rem;color:#91a7c4}.empty{padding:45px 20px;text-align:center;border:1px dashed #41638d;border-radius:16px;color:#a9bad0;background:rgba(10,30,63,.45)}footer{display:flex;justify-content:flex-end;gap:14px;padding:8px 16px;border-top:1px solid #274977;background:#07182f;color:#8298b5;font-size:.68rem}
.modal{position:fixed;inset:0;z-index:50;background:rgba(1,8,20,.76);display:grid;place-items:center;padding:20px}.modal-card{width:min(1000px,96vw);max-height:90vh;overflow:auto;background:linear-gradient(180deg,#0e2b57,#071d3f);border:1px solid #426899;border-radius:18px;box-shadow:var(--shadow);padding:20px}.modal-card.wide{width:min(1280px,97vw)}.modal-head{display:flex;justify-content:space-between;align-items:start;gap:20px;border-bottom:1px solid var(--line-soft);padding-bottom:14px;margin-bottom:12px}.modal-head h2{margin:.25rem 0 .4rem}.detail-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:.72rem;color:#9eb3cf}.icon-button{width:38px;height:38px;border-radius:10px;border:1px solid #416693;background:#0a2249;color:white;font-size:1.5rem}.detail-toolbar{position:sticky;top:-20px;z-index:3;background:#0c2852;padding:10px 0;border-bottom:1px solid var(--line-soft);display:flex;justify-content:space-between;gap:12px;align-items:center}.detail-tabs{display:flex;gap:7px;overflow:auto;padding-bottom:2px}.detail-tab{border:1px solid #355b8e;background:#0a2148;color:#aab9cf;border-radius:9px;padding:9px 11px;white-space:nowrap}.detail-tab.active{background:#183c74;color:white;border-color:#6685b7}.snapshot-picker{display:flex;align-items:center;gap:7px;color:#9eb3cf;font-size:.72rem;white-space:nowrap}.snapshot-picker select{padding:8px 10px;min-width:220px}.detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}.detail-grid.five{grid-template-columns:repeat(5,minmax(0,1fr))}.detail-section{background:rgba(0,0,0,.12);border:1px solid var(--line-soft);border-radius:13px;padding:14px;margin-top:12px}.detail-section.flush{padding:16px}.detail-section h3{margin-bottom:10px}.section-head{display:flex;justify-content:space-between;gap:16px;align-items:start;margin-bottom:14px}.section-head h3{margin:.25rem 0 0}.snapshot-chip{border:1px solid #426693;background:#0a2148;border-radius:999px;padding:5px 9px;font-size:.7rem;color:#bed0e8}.milestone-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:12px}.milestone-card{background:#0a2148;border:1px solid #315887;border-radius:14px;padding:13px}.milestone-card.red{border-color:rgba(255,93,93,.55)}.milestone-card.yellow{border-color:rgba(247,201,72,.55)}.milestone-card.green{border-color:rgba(57,217,138,.45)}.milestone-top{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center}.milestone-top h4{margin:0 0 3px;font-size:.9rem}.milestone-top span:not(.traffic-badge){font-size:.72rem;color:#9eb3cf}.milestone-values{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:12px 0}.milestone-values>div{background:rgba(0,0,0,.14);border-radius:8px;padding:8px}.milestone-values span{display:block;font-size:.62rem;color:#91a7c4}.milestone-values strong{font-size:.86rem}.milestone-card p{margin:0;color:#aebdd1;font-size:.72rem;line-height:1.45}.traffic-light{width:24px;height:58px;border:1px solid #597294;border-radius:8px;background:#0a1832;display:grid;place-items:center;padding:4px}.traffic-light i{width:12px;height:12px;border-radius:50%;background:#34445b;border:1px solid #52627a}.traffic-light.red i.red{background:#c83b3b;box-shadow:0 0 10px rgba(200,59,59,.7)}.traffic-light.yellow i.yellow{background:#e4a72c;box-shadow:0 0 10px rgba(228,167,44,.6)}.traffic-light.green i.green{background:#2e9b62;box-shadow:0 0 10px rgba(46,155,98,.6)}.risk-list{display:grid;gap:10px}.risk-card{display:grid;grid-template-columns:82px 1fr;gap:14px;background:#0a2148;border:1px solid var(--line-soft);border-radius:13px;padding:13px}.risk-score{height:72px;border-radius:12px;display:grid;place-content:center;text-align:center;background:rgba(139,150,168,.12);border:1px solid #425a7a}.risk-score strong{font-size:1.4rem}.risk-score span{font-size:.65rem;color:#9eb3cf}.risk-score.red{border-color:rgba(255,93,93,.5)}.risk-score.yellow{border-color:rgba(247,201,72,.5)}.risk-score.green{border-color:rgba(57,217,138,.45)}.risk-title{display:flex;justify-content:space-between;gap:10px;align-items:center}.risk-meta{font-size:.68rem;color:#91a7c4;margin-top:4px}.risk-copy p{color:#b8c6d9;font-size:.76rem;margin:8px 0}.risk-copy ul{margin:6px 0 0;padding-left:18px;color:#9fb2cc;font-size:.72rem}.timeline-list{display:grid;gap:7px}.timeline-row{display:grid;grid-template-columns:minmax(180px,1fr) 90px minmax(210px,1fr);gap:12px;align-items:center;text-align:left;border:1px solid var(--line-soft);background:#0a2148;color:white;border-radius:10px;padding:10px 12px}.timeline-row:hover,.timeline-row.active{border-color:#6b83b4;background:#102e5b}.timeline-row strong{font-size:.75rem}.timeline-row small{color:#9eb3cf;text-align:right}.table-wrap{overflow:auto}.data-table{width:100%;border-collapse:collapse;font-size:.78rem}.data-table th,.data-table td{text-align:left;padding:8px;border-bottom:1px solid var(--line-soft);white-space:nowrap}.data-table th{color:#9eb3cf;font-weight:600}
@media(max-width:1050px){.detail-grid.five{grid-template-columns:repeat(3,1fr)}.detail-toolbar{align-items:stretch;flex-direction:column}.snapshot-picker{justify-content:flex-end}.milestone-grid{grid-template-columns:1fr 1fr}}
@media(max-width:900px){.topbar{align-items:flex-start}.topbar-actions{flex-wrap:wrap;justify-content:flex-end}.stats-grid{grid-template-columns:repeat(2,1fr)}.detail-grid,.detail-grid.five{grid-template-columns:repeat(2,1fr)}.hero{align-items:stretch;flex-direction:column}.hero-tools{min-width:0}.metric-row{grid-template-columns:1fr 1fr}.milestone-grid{grid-template-columns:1fr}}
@media(max-width:620px){.topbar{position:static;display:block}.topbar-actions{margin-top:10px;justify-content:flex-start}.subbar{display:block}.subbar>div+div{margin-top:4px}.stats-grid{grid-template-columns:1fr 1fr}.project-grid{grid-template-columns:1fr}.content{padding:20px 12px}.detail-grid,.detail-grid.five{grid-template-columns:1fr 1fr}.user-box{display:none}.modal{padding:0}.modal-card.wide{width:100vw;max-height:100vh;height:100vh;border-radius:0}.snapshot-picker{display:block}.snapshot-picker select{margin-top:5px;min-width:0}.timeline-row{grid-template-columns:1fr 70px}.timeline-row small{grid-column:1/-1;text-align:left}.risk-card{grid-template-columns:64px 1fr}.risk-score{height:60px}.milestone-top{grid-template-columns:auto 1fr}.milestone-top .traffic-badge{grid-column:2}}

/* Web V0.3 · project permissions, mobile field view, gallery and commercial modules */
.field-shell{display:grid;gap:12px}.field-hero{display:flex;justify-content:space-between;gap:18px;align-items:center;border:1px solid var(--line);border-radius:16px;padding:18px;background:linear-gradient(180deg,#0f2e5d,#0a2148)}.field-hero.red{border-color:rgba(255,93,93,.55)}.field-hero.yellow{border-color:rgba(247,201,72,.55)}.field-hero.green{border-color:rgba(57,217,138,.45)}.field-hero h3{font-size:1.35rem;margin:.3rem 0}.field-hero p{margin:0;color:#b9c8dc}.field-traffic{font-size:1rem;font-weight:900;letter-spacing:.08em;border-radius:999px;padding:10px 13px;border:1px solid #4b6e9f;background:#091b3a}.field-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.field-kpis>div{background:#0a2148;border:1px solid var(--line-soft);border-radius:12px;padding:12px}.field-kpis span{display:block;color:#91a7c4;font-size:.65rem}.field-kpis strong{display:block;font-size:1rem;margin-top:4px}.field-section{background:rgba(0,0,0,.12);border:1px solid var(--line-soft);border-radius:14px;padding:15px}.field-photo-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.photo-thumb{position:relative;min-height:120px;border:1px solid var(--line-soft);border-radius:11px;overflow:hidden;background:#071a38;padding:0}.photo-thumb img,.gallery-image img{width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:.2s opacity}.photo-thumb img.loaded,.gallery-image img.loaded{opacity:1}.photo-loader{position:absolute;inset:0;display:grid;place-items:center;color:#9eb3cf;font-size:.72rem;padding:10px;text-align:center}.gallery-group{margin-top:18px}.gallery-group>h4{margin:0 0 9px;color:#bed0e8}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.gallery-card{padding:0;text-align:left;color:white;background:#0a2148;border:1px solid var(--line-soft);border-radius:13px;overflow:hidden}.gallery-card:hover{border-color:#6383b4}.gallery-image{position:relative;aspect-ratio:16/10;background:#071a38}.gallery-copy{display:grid;gap:3px;padding:10px}.gallery-copy strong{font-size:.78rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gallery-copy span{font-size:.67rem;color:#91a7c4}.photo-viewer-card{position:relative;width:min(1200px,97vw);max-height:95vh;display:grid;grid-template-rows:minmax(0,1fr) auto;background:#06152f;border:1px solid #426899;border-radius:16px;overflow:hidden;box-shadow:var(--shadow)}.photo-viewer-card img{max-width:100%;max-height:85vh;width:100%;height:100%;object-fit:contain;background:#020912}.photo-close{position:absolute;right:12px;top:12px;z-index:2}.photo-viewer-caption{padding:11px 14px;color:#c8d4e5;background:#081c3b;border-top:1px solid var(--line-soft);font-size:.78rem}
.access-modal-card{width:min(1120px,97vw)}.access-layout{display:grid;grid-template-columns:300px 1fr;gap:14px;min-height:500px}.access-user-list{display:grid;align-content:start;gap:7px;max-height:65vh;overflow:auto;padding-right:4px}.access-user{display:grid;gap:3px;text-align:left;border:1px solid var(--line-soft);background:#0a2148;color:white;border-radius:10px;padding:10px}.access-user.active{border-color:#7186f0;background:#123367}.access-user span,.access-user small{color:#9eb3cf;font-size:.7rem;overflow:hidden;text-overflow:ellipsis}.access-editor{border:1px solid var(--line-soft);background:rgba(0,0,0,.1);border-radius:13px;padding:14px}.switch-row{display:flex;align-items:flex-start;gap:10px;background:#0a2148;border:1px solid var(--line-soft);border-radius:11px;padding:12px;margin-bottom:14px}.switch-row input{margin-top:4px;transform:scale(1.15)}.switch-row span{display:grid;gap:3px}.switch-row small{color:#91a7c4}.project-access-head{display:flex;justify-content:space-between;gap:12px;margin:9px 0}.access-project-list{display:grid;gap:6px;max-height:340px;overflow:auto}.access-project-list.disabled{opacity:.45}.project-access-row{display:flex;gap:10px;align-items:center;background:#091e42;border:1px solid var(--line-soft);border-radius:9px;padding:9px}.project-access-row span{display:grid;gap:2px}.project-access-row small{color:#91a7c4;font-size:.68rem}.access-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px}.access-actions button{min-width:170px}
.data-table td{max-width:360px;overflow:hidden;text-overflow:ellipsis}.field-tab{border-color:#4d658d}
@media(max-width:900px){.access-layout{grid-template-columns:1fr}.access-user-list{grid-template-columns:repeat(2,minmax(0,1fr));max-height:220px}.field-kpis{grid-template-columns:repeat(2,1fr)}.field-photo-strip{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.topbar-actions .compact{padding:8px 9px}.field-hero{align-items:flex-start}.field-hero h3{font-size:1.1rem}.field-traffic{font-size:.8rem}.field-kpis{grid-template-columns:1fr 1fr}.field-photo-strip{grid-template-columns:1fr 1fr}.gallery-grid{grid-template-columns:1fr 1fr}.gallery-copy strong{font-size:.72rem}.access-layout{display:block}.access-user-list{grid-template-columns:1fr 1fr;margin-bottom:12px;max-height:190px}.access-editor{padding:10px}.access-actions{align-items:stretch;flex-direction:column}.access-actions button{width:100%}.detail-tabs{padding-bottom:6px}.detail-tab{padding:10px 11px}.field-tab{order:-1}.photo-viewer-card{width:100vw;height:100vh;max-height:100vh;border-radius:0}.photo-viewer-card img{max-height:90vh}.stats-grid{grid-template-columns:1fr 1fr}.project-card{padding:14px}.project-head h3{font-size:1rem}}
