diff --git a/learn/output/Scope-Administration-With-Administrative-Units/BRIEF.md b/learn/output/Scope-Administration-With-Administrative-Units/BRIEF.md new file mode 100644 index 0000000000..59d4aa46b1 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/BRIEF.md @@ -0,0 +1,24 @@ +# Scope Administration with Administrative Units + +- **Profile:** `unit-video` — Unit video (~4 min) +- **Target:** ~240s content (180–300s), word budget 435–726 (target 580) @ 2.42 w/s +- **Scenes:** aim ~10 (chrome 5 stamped + ~5-16 body) +- **Max static hold:** 5.0s · **Voice:** en-US-Ava:DragonHDLatestNeural +- **Source:** C:\learn-pr\learn-m365-pr\learn-m365-pr\wwl\provision-govern-identities-entra\includes\7-scope-administrative-units.md + +## Fill the placeholders + +Every `__FILL__` below must be replaced before render (guarded by `tools/check_placeholders.py`). + +- `opening.bumper` → [scenes/01-bumper.html](scenes/01-bumper.html) +- `opening.title` → [scenes/02-title.html](scenes/02-title.html) +- `opening.objectives` → [scenes/03-objectives.html](scenes/03-objectives.html) +- `closing.recap` → [scenes/90-recap.html](scenes/90-recap.html) +- `closing.cta` → [scenes/91-cta.html](scenes/91-cta.html) + +## Next steps + +1. Write the script + beat plan (script-writer) and fill the chrome placeholders above. +2. Author the teaching-body scenes into `scenes/` and insert them into `scenes.json` between the opening and closing chrome (see `scenes.json` → `body_slot`). +3. Run the gated pipeline (voice → fact-check QA → build → snapshot QA → render). +4. Guard: `py tools/check_placeholders.py --project .` must be clean before render. diff --git a/learn/output/Scope-Administration-With-Administrative-Units/anchors.js b/learn/output/Scope-Administration-With-Administrative-Units/anchors.js new file mode 100644 index 0000000000..f28f66b80a --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/anchors.js @@ -0,0 +1,61 @@ +// GENERATED by tools/word_anchors.py - do not hand-edit. +// Every value is a REAL spoken-word time from transcript.json, +// with a 3.0s lead-in applied. Regenerate after any re-record. +window.__anchors = { + "au_holds_types": 65.02, + "au_holds_typesEnd": 67.88, + "au_scoped_objects": 72.76, + "au_scoped_objectsEnd": 75.64, + "beat10_start": 163.52, + "beat10_startEnd": 164.9, + "beat11_start": 184.54, + "beat11_startEnd": 187.32, + "beat12_start": 205.03, + "beat12_startEnd": 208.27, + "beat13_start": 222.13, + "beat13_startEnd": 224.17, + "beat4_start": 41.06, + "beat4_startEnd": 42.96, + "beat5_start": 58.65, + "beat5_startEnd": 60.87, + "beat6_start": 83.85, + "beat6_startEnd": 86.08, + "beat7_start": 103.88, + "beat7_startEnd": 106.76, + "beat8_start": 122.64, + "beat8_startEnd": 124.7, + "beat9_start": 146.33, + "beat9_startEnd": 148.82, + "constraint_no_group": 179.63, + "constraint_no_groupEnd": 181.61, + "constraint_object_type": 167.31, + "constraint_object_typeEnd": 169.51, + "cta_exercise": 224.57, + "cta_exerciseEnd": 226.8, + "fix_add_directly": 156.96, + "fix_add_directlyEnd": 159.59, + "hook_one_slice": 21.02, + "hook_one_sliceEnd": 22.83, + "licensing_covers": 191.82, + "licensing_coversEnd": 194.45, + "licensing_free": 196.37, + "licensing_freeEnd": 198.11, + "objectives_boundary": 28.7, + "objectives_boundaryEnd": 29.96, + "overprivilege_hq": 55.85, + "overprivilege_hqEnd": 58.6, + "populate_dynamic": 95.25, + "populate_dynamicEnd": 97.38, + "predict_question": 120.41, + "predict_questionEnd": 122.6, + "recap_scoped": 206.87, + "recap_scopedEnd": 208.27, + "reveal_group_scope": 126.16, + "reveal_group_scopeEnd": 128.09, + "reveal_two_steps": 140.12, + "reveal_two_stepsEnd": 141.8, + "rule_direct_membership": 151.89, + "rule_direct_membershipEnd": 153.3, + "shortcut_group": 108.73, + "shortcut_groupEnd": 110.12 +}; diff --git a/learn/output/Scope-Administration-With-Administrative-Units/anchors.json b/learn/output/Scope-Administration-With-Administrative-Units/anchors.json new file mode 100644 index 0000000000..e56682ee46 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/anchors.json @@ -0,0 +1,43 @@ +{ + "_note": "Cue name -> the exact spoken phrase the cue must land on. The builder resolves these to real audio times with tools/word_anchors.py against transcript.json (word-level). Phrases are matched punctuation- and case-insensitive as a contiguous token run; each is unique in narration.txt. Keys starting with '_' are ignored.", + "_scene_02_title": "opening title card", + "hook_one_slice": "one slice of the directory", + "_scene_03_objectives": "objectives chips", + "objectives_boundary": "draws that boundary", + "_beat_over_privilege": "tenant-scoped role reaches everyone", + "overprivilege_hq": "the executives back at headquarters", + "_beat_boundary_spine": "administrative unit boundary + scoped role", + "au_holds_types": "holds users, groups, or devices", + "au_scoped_objects": "only to the objects that unit contains", + "_beat_populate": "assigned vs dynamic membership", + "populate_dynamic": "populate it automatically", + "_beat_shortcut_predict": "the group shortcut question", + "shortcut_group": "New Office, All Staff", + "predict_question": "for the people in the group", + "_beat_reveal_spine": "group in scope, members two steps removed", + "reveal_group_scope": "the group object into scope", + "reveal_two_steps": "two steps removed", + "_beat_rule_fix": "direct membership only + the fix", + "rule_direct_membership": "direct membership only", + "fix_add_directly": "add the users to the unit directly", + "_beat_dynamic_constraint": "one object type, no groups", + "constraint_object_type": "exactly one object type", + "constraint_no_group": "can't hold a group at all", + "_beat_licensing": "P1 per member vs Free", + "licensing_covers": "every user or device the rule covers", + "licensing_free": "a Free license covers members", + "_scene_90_recap": "recap payoff", + "recap_scoped": "scoped correctly now", + "_scene_91_cta": "call to action", + "cta_exercise": "build one of these units yourself", + "beat4_start": "Start with what goes wrong", + "beat5_start": "An administrative unit is the boundary", + "beat6_start": "So how do you fill the unit", + "beat7_start": "But first, a shortcut that looks easier", + "beat8_start": "The answer is no", + "beat9_start": "It's the same rule nested groups follow", + "beat10_start": "Dynamic membership has a catch", + "beat11_start": "One last factor: cost", + "beat12_start": "So the regional admin's reach is scoped correctly now", + "beat13_start": "A hands-on exercise right after this" +} diff --git a/learn/output/Scope-Administration-With-Administrative-Units/assets/AI_End_Card.mp4 b/learn/output/Scope-Administration-With-Administrative-Units/assets/AI_End_Card.mp4 new file mode 100644 index 0000000000..58e482f319 Binary files /dev/null and b/learn/output/Scope-Administration-With-Administrative-Units/assets/AI_End_Card.mp4 differ diff --git a/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-content-wash.png b/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-content-wash.png new file mode 100644 index 0000000000..96c264bc16 Binary files /dev/null and b/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-content-wash.png differ diff --git a/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-hero-swoosh.png b/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-hero-swoosh.png new file mode 100644 index 0000000000..53e48f3d4a Binary files /dev/null and b/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-hero-swoosh.png differ diff --git a/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-section-field.png b/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-section-field.png new file mode 100644 index 0000000000..dc94c26720 Binary files /dev/null and b/learn/output/Scope-Administration-With-Administrative-Units/assets/grounds/ground-section-field.png differ diff --git a/learn/output/Scope-Administration-With-Administrative-Units/assets/vendor/gsap.min.js b/learn/output/Scope-Administration-With-Administrative-Units/assets/vendor/gsap.min.js new file mode 100644 index 0000000000..72c17a8309 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/assets/vendor/gsap.min.js @@ -0,0 +1,10 @@ +/*! + * GSAP 3.15.0 + * https://gsap.com + * + * @license Copyright 2026, GreenSock. All rights reserved. + * Subject to the terms at https://gsap.com/standard-license. + * @author: Jack Doyle, jack@greensock.com + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(e){"use strict";function _inheritsLoose(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function r(t){return"string"==typeof t}function s(t){return"function"==typeof t}function t(t){return"number"==typeof t}function u(t){return void 0===t}function v(t){return"object"==typeof t}function w(t){return!1!==t}function x(){return"undefined"!=typeof window}function y(t){return s(t)||r(t)}function R(t){return(i=bt(t,ht))&&Fe}function S(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")}function T(t,e){return!e&&console.warn(t)}function U(t,e){return t&&(ht[t]=e)&&i&&(i[t]=e)||ht}function V(){return 0}function ga(t){var e,r,i=t[0];if(v(i)||s(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(r=yt.length;r--&&!yt[r].targetTest(i););e=yt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new Xt(t[r],e)))||t.splice(r,1);return t}function ha(t){return t._gsap||ga(Pt(t))[0]._gsap}function ia(t,e,r){return(r=t[e])&&s(r)?t[e]():u(r)&&t.getAttribute&&t.getAttribute(e)||r}function ja(t,e){return(t=t.split(",")).forEach(e)||t}function ka(t){return Math.round(1e5*t)/1e5||0}function la(t){return Math.round(1e7*t)/1e7||0}function ma(t,e){var r=e.charAt(0),i=parseFloat(e.substr(2));return t=parseFloat(t),"+"===r?t+i:"-"===r?t-i:"*"===r?t*i:t/i}function na(t,e){for(var r=e.length,i=0;t.indexOf(e[i])<0&&++ia;)s=s._prev;return s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t,e}function Ba(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function Ca(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0}function Da(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function Fa(t,e,r,i){return t._startAt&&(I?t._startAt.revert(ft):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,i))}function Ha(t){return t._repeat?wt(t._tTime,t=t.duration()+t._rDelay)*t:0}function Ja(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function Ka(t){return t._end=la(t._start+(t._tDur/Math.abs(t._ts||t._rts||q)||0))}function La(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=la(r._time-(0q)&&e.render(r,!0)),Da(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur(n=Math.abs(n))&&(a=i,o=n);return a}function wb(t){return Ca(t),t.scrollTrigger&&t.scrollTrigger.kill(!!I),t.progress()<1&&At(t,"onInterrupt"),t}function zb(t){if(t)if(t=!t.name&&t.default||t,x()||t.headless){var e=t.name,r=s(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:V,render:_e,add:$t,kill:Te,modifier:ve,rawVars:0},a={targetTest:0,get:0,getSetter:ue,aliases:{},register:0};if(Lt(),t!==i){if(mt[e])return;ta(i,ta(xa(t,n),a)),bt(i.prototype,bt(n,xa(t,a))),mt[i.prop=e]=i,t.targetTest&&(yt.push(i),dt[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}U(e,i),t.register&&t.register(Fe,i,we)}else Dt.push(t)}function Cb(t,e,r){return(6*(t+=t<0?1:1>16,e>>8&zt,e&zt]:0:Rt.black;if(!p){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),Rt[e])p=Rt[e];else if("#"===e.charAt(0)){if(e.length<6&&(e="#"+(n=e.charAt(1))+n+(a=e.charAt(2))+a+(s=e.charAt(3))+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(p=parseInt(e.substr(1,6),16))>>16,p>>8&zt,p&zt,parseInt(e.substr(7),16)/255];p=[(e=parseInt(e.substr(1),16))>>16,e>>8&zt,e&zt]}else if("hsl"===e.substr(0,3))if(p=d=e.match(rt),r){if(~e.indexOf("="))return p=e.match(it),i&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,u=p[1]/100,n=2*(h=p[2]/100)-(a=h<=.5?h*(u+1):h+u-h*u),3=X?u.endTime(!1):t._dur;return r(e)&&(isNaN(e)||e in o)?(a=e.charAt(0),s="%"===e.substr(-1),n=e.indexOf("="),"<"===a||">"===a?(0<=n&&(e=e.replace(/=/,"")),("<"===a?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(s?(n<0?u:i).totalDuration()/100:1)):n<0?(e in o||(o[e]=h),o[e]):(a=parseFloat(e.charAt(n-1)+e.substr(n+1)),s&&i&&(a=a/100*(K(i)?i[0]:i).totalDuration()),1=r&&te)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if("isPause"===i.data&&i._start=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0=i&&(a instanceof te?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return r(t)?this.removeLabel(t):s(t)?this.killTweensOf(t):(t.parent===this&&Ba(this,t),t===this._recent&&(this._recent=this._last),Da(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=la(It.time-(0r:!r||s.isActive())&&n.push(s):(i=s.getTweensOf(a,r)).length&&n.push.apply(n,i),s=s._next;return n},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=Ot(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=te.to(i,ta({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||q,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Ua(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,ta({startAt:{time:Ot(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),ub(this,Ot(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),ub(this,Ot(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+q)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);var i,n=this._first,a=this.labels;for(t=la(t);n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return Da(this)},e.invalidate=function invalidate(t){var e=this._first;for(this._lock=0;e;)e.invalidate(t),e=e._next;return i.prototype.invalidate.call(this,t)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Da(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=X;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,Na(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=la(r/a._ts),a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Ua(a,a===L&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(L._ts&&(qa(L,Ja(t,L)),f=It.frame),It.frame>=vt){vt+=Y.autoSleep||120;var e=L._first;if((!e||!e._ts)&&Y.autoSleep&&It._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||It.sleep()}}},Timeline}(qt);ta(Gt.prototype,{_lock:0,_hasPause:0,_forcing:0});function cc(t,e,i,n,a,o){var u,h,l,f;if(mt[t]&&!1!==(u=new mt[t]).init(a,u.rawVars?e[t]:function _processVars(t,e,i,n,a){if(s(t)&&(t=Qt(t,a,e,i,n)),!v(t)||t.style&&t.nodeType||K(t)||J(t))return r(t)?Qt(t,a,e,i,n):t;var o,u={};for(o in t)u[o]=Qt(t[o],a,e,i,n);return u}(e[t],n,a,o,i),i,n,o)&&(i._pt=h=new we(i._pt,a,t,0,1,u.render,u,0,u.priority),i!==c))for(l=i._ptLookup[i._targets.indexOf(a)],f=u._props.length;f--;)l[u._props[f]]=h;return u}function ic(t,r,e,i){var n,a,s=r.ease||i||"power1.inOut";if(K(r))a=e[t]||(e[t]=[]),r.forEach(function(t,e){return a.push({t:e/(r.length-1)*100,v:t,e:s})});else for(n in r)a=e[n]||(e[n]=[]),"ease"===n||a.push({t:parseFloat(t),v:r[n],e:s})}var Zt,Wt,$t=function _addPropTween(t,e,i,n,a,o,u,h,l,f){s(n)&&(n=n(a||0,t,o));var c,d=t[e],p="get"!==i?i:s(d)?l?t[e.indexOf("set")||!s(t["get"+e.substr(3)])?e:"get"+e.substr(3)](l):t[e]():d,_=s(d)?l?se:ae:ie;if(r(n)&&(~n.indexOf("random(")&&(n=rb(n)),"="===n.charAt(1)&&(!(c=ma(p,n)+(_a(p)||0))&&0!==c||(n=c))),!f||p!==n||Wt)return isNaN(p*n)||""===n?(d||e in t||S(e,n),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,c,d,p,_=new we(this._pt,t,e,0,1,pe,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(d=~(i+="").indexOf("random("))&&(i=rb(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(at)||[];o=at.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(c=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:c,c:"="===l.charAt(1)?ma(c,l)-c:parseFloat(l)-c,m:h&&h<4?Math.round:0},m=at.lastIndex);return _.c=m")}),s.duration();else{for(l in u={},k)"ease"===l||"easeEach"===l||ic(l,k[l],u,k.easeEach);for(l in u)for(A=u[l].sort(function(t,e){return t.t-e.t}),o=R=0;o=t._tDur||e<0)&&t.ratio===u&&(u&&Ca(t,1),r||I||(At(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(t){return t&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),E.prototype.invalidate.call(this,t)},e.resetTo=function resetTo(t,e,r,i,n){d||It.wake(),this._ts||this.play();var a,s=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Ht(this,s),a=this._ease(s/this._dur),function _updatePropTweens(t,e,r,i,n,a,s,o){var u,h,l,f,c=(t._pt&&t._ptCache||(t._ptCache={}))[e];if(!c)for(c=t._ptCache[e]=[],l=t._ptLookup,f=t._targets.length;f--;){if((u=l[f][e])&&u.d&&u.d._pt)for(u=u.d._pt;u&&u.p!==e&&u.fp!==e;)u=u._next;if(!u)return Wt=1,t.vars[e]="+=0",Ht(t,s),Wt=0,o?T(e+" not eligible for reset. Try splitting into individual properties"):1;c.push(u)}for(f=c.length;f--;)(u=(h=c[f])._pt||h).s=!i&&0!==i||n?u.s+(i||0)+a*u.c:i,u.c=r-u.s,h.e&&(h.e=ka(r)+_a(h.e)),h.b&&(h.b=u.s+_a(h.b))}(this,t,e,r,i,a,s,n)?this.resetTo(t,e,r,i,1):(La(this,0),this.parent||Aa(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?wb(this):this.scrollTrigger&&this.scrollTrigger.kill(!!I),this;if(this.timeline){var i=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Zt&&!0!==Zt.vars.overwrite)._first||wb(this),this.parent&&i!==this.timeline.totalDuration()&&Ua(this,this._dur*this.timeline._tDur/i,0,1),this}var n,a,s,o,u,h,l,f=this._targets,c=t?Pt(t):f,d=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,c))return"all"===e&&(this._pt=0),wb(this);for(n=this._op=this._op||[],"all"!==e&&(r(e)&&(u={},ja(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?ha(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=bt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~c.indexOf(f[l]))for(u in a=d[l],"all"===e?(n[l]=e,o=a,s={}):(s=n[l]=n[l]||{},o=e),o)(h=a&&a[u])&&("kill"in h.d&&!0!==h.d.kill(u)||Ba(this,h,"_pt"),delete a[u]),"all"!==s&&(s[u]=1);return this._initted&&!this._pt&&p&&wb(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Ya(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Ya(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return L.killTweensOf(t,e,r)},Tween}(qt);ta(te.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ja("staggerTo,staggerFrom,staggerFromTo",function(r){te[r]=function(){var t=new Gt,e=Ct.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function qc(t,e,r){return t.setAttribute(e,r)}function yc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var ie=function _setterPlain(t,e,r){return t[e]=r},ae=function _setterFunc(t,e,r){return t[e](r)},se=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},ue=function _getSetter(t,e){return s(t[e])?ae:u(t[e])&&t.setAttribute?qc:ie},fe=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},de=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},pe=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},_e=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},ve=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},Te=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?Ba(this,i,"_pt"):i.dep||(e=1),i=r;return!e},be=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},we=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=yc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||fe,this.d=s||this,this.set=o||ie,this.pr=u||0,(this._next=t)&&(t._prev=this)}ja(Tt+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger,easeReverse",function(t){return dt[t]=1}),ht.TweenMax=ht.TweenLite=te,ht.TimelineLite=ht.TimelineMax=Gt,L=new Gt({sortChildren:!1,defaults:j,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),Y.stringFilter=Ib;function Gc(t){return(Oe[t]||Me).map(function(t){return t()})}function Hc(){var t=Date.now(),o=[];2.html` → `scenes/`): +`bumper`, `title-hero` (×3: title, recap, cta), `list-steps`, `list-select`, `callout-note` (×2), +`diagram-flow`, `list-specs` (×2), `diagram-layers`. + +**Custom scenes to hand-author** (on `templates/blocks/_foundation.css`, same tokens / type scale / +grounds): **1** — beat 4, the over-reach blast-radius diagram. + +**Grounds** already in `assets/grounds/` (content-wash, hero-swoosh, section-field). `dark-field` is +CSS (foundation `#root[data-ground="dark-field"]`) — no PNG. Every field carries the mandatory dither +overlay; judge banding on the rendered MP4, not the preview. + +**Icons to pull** (`py tools/icon_index.py add --project . ` — icons must live in the project +at render): + +| Icon | Source | Beats | +|---|---|---| +| `Entra` (Security kit SVG) | `Microsoft-Security-product-icons-kit/Entra` | 5 (the tenant/Entra ID plane) | +| `Users` | `Azure/identity/10230-icon-service-Users.svg` | 5, 10 (object type) | +| `Groups` | `Azure/identity/10223-icon-service-Groups.svg` | 5, 7, 8, 10 (the group object) | +| `Devices` | `Azure/intune/10332-icon-service-Devices.svg` | 5, 10 (object type) | +| `Entra-Identity-Licenses` | `Azure/identity/02681-icon-service-Entra-Identity-Licenses.svg` | 11 (P1 / Free) | + +Prefer SVG. `Groups` is ambiguous in the index (many "group" icons) — pull the Azure/identity +`10223-icon-service-Groups` specifically. Restraint holds: one clear icon per concept. + +## Assets — reuse, capture, generate (in that order) + +**Source module media — inventoried, reuse rejected with cause.** The unit ships two diagrams: +`media/7-administrative-unit-group-scoping-gap.png` (the beat-8 candidate) and +`media/6-nested-group-non-cascade.png`. Both are **informal hand-drawn doodles** — handwritten +marker font, sketchy strokes, casual whiteboard aesthetic. They are decidedly *off* the ILT frame +(Segoe UI, clean geometry, gradient grounds), and a raster **cannot animate causally**. Beat 8's +entire value is the word-anchored two-hop walk that stops at "two steps removed" — exactly the +causal motion a doodle PNG can't give. **Reject reuse; author beat 8 as `diagram-flow` geometry.** +(The source diagrams remain useful as *reference* for the correct logic, which the fidelity ledger +already confirms — not as shipped art.) + +**Capture opportunity (optional, offered to the author).** Beat 4 teaches a real UI: the Entra admin +center → **Roles & administrators → User Administrator** assignment with **scope = Directory**. +The primary beat-4 visual is the custom over-reach schematic (it teaches the *danger*, which a static +blade can't), but a genuine screenshot of that scope value would make a strong corroborating **inset** +("proof the scope really reads Directory"). If the author supplies it, drop it via `media-screenshot` +into a corner of beat 4 with a callout on the scope field. Do **not** fabricate the blade as fact. + +**Generated assets: none.** Every body beat is schematic (boundaries, reach, a two-hop path, +constraints, cost) — authored geometry that animates causally beats a raster here. No beat earns a +generated illustration. + +## Hero-swoosh budget + +Spent on scenes: **01-bumper, 02-title, 90-recap, 91-cta** — 4 scenes, **all opening/closing chrome, +zero body**. This is the ideal use: the swoosh bookends the video (open on the field, all teaching on +the warm wash, close returns to the field). Every spend is sanctioned chrome; none lands on a content +frame. + +## Dark-field allocation + +Spent on: **beat 5, the boundary reveal** (the one dark scene). Why it earns it: it is the concept +the whole video orbits (the AU boundary = least privilege), and `diagram-layers`' "protected core +that glows last" is the kit's single best block+ground synergy — a glow only reads on a dark field. +It plants the visual tentpole early, so the boundary is burned in before beat 8 shows it leaking. +Runner-up (beat 8, the climax) is deliberately kept on `content-wash`: its drama is the *causal +contradiction* (the boundary we saw solid on dark now leaks on light), not a dark ground. Two +distinct peaks, not one stacked. + +## Contrast declarations + +Measured with `tools/contrast_gate.py` (WCAG 2.1). **All readable text is ink `#091F2E`** (white, +auto-inverted, on dark-field). **No accent carries normal-size text on any light ground** — every +accent below is a mark, glyph, or display element. + +| Text / ground pair | Ratio (worst → best) | Verdict | +|---|---|---| +| ink `#091F2E` on `content-wash` (beats 4,6–11) | 12.27 → 15.91 | **AAA** | +| ink on `section-field` (03-objectives) | 7.91 → 16.13 | **AAA** | +| ink on `hero-swoosh` colour field (01,02,90,91) | **5.95** (doctrine) | **AA** — the video's floor | +| white ink on `dark-field` (beat 5) | 16.84 | **AAA** | +| teal-light `#49C5B1` glow on `dark-field` (mark) | 7.94 | AAA (decorative here) | +| purple-light `#C5B4E3` glow on `dark-field` (mark) | 8.83 | AAA (decorative here) | + +**Worst readable-text ratio in the whole video: 5.95:1 (ink on hero-swoosh) — a pass.** Everyday +body text (content-wash) floors at **12.27 (AAA)**. + +Guardrails the builder must hold: +- On `hero-swoosh`, keep display type **out of the bottom-right third** (left column 15.6 vs 5.95). + `title-hero` places the title upper-left — compliant by default. +- **Never** set an accent as normal-size text on a light ground. On `content-wash`, the accents fail + as text: teal-light 1.39–2.02, purple-light 1.39–1.81, teal 1.55–3.22, blue 2.13–3.30, + purple 2.18–3.38. They are permitted only as marks/glyphs, or as **display** text (≥24px bold / + ≥32px regular). `callout-note` labels are small → keep them **ink**, not accent. +- Beat 4 and beat 8 semantic accents (coral reach/✗, teal ✓, `.strike`) are **marks and glyphs**, + not text — allowed regardless of contrast. The labels beside them stay ink. +- **Semantic accents outrank brand accents** and encode meaning: `positive` teal `#389A91` = reachable + / Free; `--incident` coral = unreachable / P1 cost; `.strike` = the two-steps-removed break. Retune + coral for the light ground and re-run `py tools/contrast_gate.py brand/_extract/palette.json + --min 3.0` if it introduces a new colour. Keep them mutually distinct and distinct from brand chrome. + +## Motion budget + +Profile `max_static_stretch_seconds = 5.0`. Every body beat carries a word-anchored cue (table +above), so no beat holds still past the budget. The densest beats (5 the boundary, 8 the reveal) +carry the most sustained motion; the predict beat (7) is the one deliberate stillness-before-climax +— it holds the question, but under 5.0s to the cut. Two markers the designer places that compile to +native `check` assertions: +- `data-reveal-after` on beat 8's Members node (it must not appear before the Group node it depends + on) and on beat 9's fix line (after the rule). +- `data-keep-in-frame` on beat 4's full-frame tenant ring and beat 5's concentric stage (full-frame + stages that could drift off-canvas). + +## Fonts + +Segoe UI (body) / Segoe UI Semibold (display), embedded from `fonts/`. No Space Grotesk / JetBrains +Mono / Fraunces. Cloud gate uses the fallback face by design; local render uses real Segoe. diff --git a/learn/output/Scope-Administration-With-Administrative-Units/index.html b/learn/output/Scope-Administration-With-Administrative-Units/index.html new file mode 100644 index 0000000000..4b88c79536 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/index.html @@ -0,0 +1,201 @@ + + + + + + Scope Administration with Administrative Units + + + + + +
+ + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ +
+
+ + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/manifest.json b/learn/output/Scope-Administration-With-Administrative-Units/manifest.json new file mode 100644 index 0000000000..8181d64c4f --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/manifest.json @@ -0,0 +1,13 @@ +{ + "title": "Scope Administration with Administrative Units", + "type": "unit-video", + "profile": "unit-video", + "status": "scaffolded", + "voice": "en-US-Ava:DragonHDLatestNeural", + "source": "C:\\learn-pr\\learn-m365-pr\\learn-m365-pr\\wwl\\provision-govern-identities-entra\\includes\\7-scope-administrative-units.md", + "deliverables": { + "mp4": "Scope-Administration-With-Administrative-Units.mp4", + "captions_vtt": "Scope-Administration-With-Administrative-Units.vtt", + "thumbnail": "Scope-Administration-With-Administrative-Units_thumbnail.png" + } +} diff --git a/learn/output/Scope-Administration-With-Administrative-Units/narration.ssml b/learn/output/Scope-Administration-With-Administrative-Units/narration.ssml new file mode 100644 index 0000000000..43767e9ab5 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/narration.ssml @@ -0,0 +1,29 @@ + + + +

Relecloud just opened an overseas office, and it needs one regional admin to reset passwords and update profiles there — and nowhere else. But hand that person the User Administrator role, and you've handed them every user in the company. So how do you give a role real power over one slice of the directory, and none over the rest?

+ +

In the next few minutes, you'll see how an administrative unit draws that boundary, how a scoped role stays inside it, and how one tempting shortcut quietly leaves people unprotected. Get it right, and least privilege holds.

+ +

Start with what goes wrong. Assign User Administrator at the tenant level, and it resets passwords and edits profiles — but its reach doesn't stop at the new office. That admin can now reach every user in the directory, including the executives back at headquarters.

+ +

An administrative unit is the boundary that fixes this — a container in Microsoft Entra ID that holds users, groups, or devices. Assign a role scoped to the unit instead of the whole tenant, and its permissions apply only to the objects that unit contains. Scope the User Administrator role to a unit holding just the office's users, and that's exactly who the admin can reach.

+ +

So how do you fill the unit? The same two ways a group gets members. Add people one at a time with assigned membership, or write a rule on attributes like office location and let Entra populate it automatically — dynamic membership. With new hires arriving weekly, that saves you adding each one by hand.

+ +

But first, a shortcut that looks easier. Relecloud already has a group — New Office, All Staff — holding everyone at the location. Add that group to the unit, and you've seemingly scoped the admin to the whole office in one click. So: can that admin now reset passwords for the people in the group?

+ +

The answer is no. Adding a group brings the group object into scope — not the users inside it. The admin can rename the group or edit its membership, because the group is a direct member. But they can't reset a password for anyone in it: those users are two steps removed — members of a group that's a member of the unit, not of the unit itself.

+ +

It's the same rule nested groups follow, just relocated: Entra resolves permissions against direct membership only. The shortcut never reaches two levels down. The fix — add the users to the unit directly, or let a dynamic rule do it as each new hire joins.

+ +

Dynamic membership has a catch, though. A dynamic unit supports exactly one object type — users, or devices, never both in the same unit. Need the office's accounts and their devices? That's two units, not one. And a dynamic unit can't hold a group at all — only individual users or devices.

+ +

One last factor: cost. Dynamic rules require a Microsoft Entra ID P1 license for every user or device the rule covers. Assigned membership doesn't — a Free license covers members you add by hand. For an office still ramping up, that's part of deciding whether the convenience is worth it.

+ +

So the regional admin's reach is scoped correctly now — to the office's people, and only them. An administrative unit drew the boundary, a scoped assignment held the role inside it, and you know why a group would've quietly left everyone else unprotected.

+ +

A hands-on exercise right after this has you build one of these units yourself. To go deeper on group scoping and dynamic rules, follow the administrative units links in the module.

+
+
+
diff --git a/learn/output/Scope-Administration-With-Administrative-Units/narration.txt b/learn/output/Scope-Administration-With-Administrative-Units/narration.txt new file mode 100644 index 0000000000..d6bc33da2f --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/narration.txt @@ -0,0 +1,23 @@ +Relecloud just opened an overseas office, and it needs one regional admin to reset passwords and update profiles there — and nowhere else. But hand that person the User Administrator role, and you've handed them every user in the company. So how do you give a role real power over *one slice* of the directory, and none over the rest? + +In the next few minutes, you'll see how an administrative unit draws that boundary, how a scoped role stays inside it, and how one tempting shortcut quietly leaves people unprotected. Get it right, and least privilege holds. + +Start with what goes wrong. Assign User Administrator at the tenant level, and it resets passwords and edits profiles — but its reach doesn't stop at the new office. That admin can now reach *every* user in the directory, including the executives back at headquarters. + +An administrative unit is the boundary that fixes this — a container in Microsoft Entra ID that holds users, groups, or devices. Assign a role scoped to the unit instead of the whole tenant, and its permissions apply only to the objects that unit contains. Scope the User Administrator role to a unit holding just the office's users, and that's exactly who the admin can reach. + +So how do you fill the unit? The same two ways a group gets members. Add people one at a time with assigned membership, or write a rule on attributes like office location and let Entra populate it automatically — dynamic membership. With new hires arriving weekly, that saves you adding each one by hand. + +But first, a shortcut that looks easier. Relecloud already has a group — New Office, All Staff — holding everyone at the location. Add that group to the unit, and you've seemingly scoped the admin to the whole office in one click. So: can that admin now reset passwords for the people in the group? [[pause:600ms]] + +The answer is no. Adding a group brings the group object into scope — not the users inside it. The admin can rename the group or edit its membership, because the group is a direct member. But they can't reset a password for anyone in it: those users are *two steps removed* — members of a group that's a member of the unit, not of the unit itself. + +It's the same rule nested groups follow, just relocated: Entra resolves permissions against direct membership only. The shortcut never reaches two levels down. The fix — add the users to the unit directly, or let a dynamic rule do it as each new hire joins. + +Dynamic membership has a catch, though. A dynamic unit supports exactly one object type — users, or devices, never both in the same unit. Need the office's accounts *and* their devices? That's two units, not one. And a dynamic unit can't hold a group at all — only individual users or devices. + +One last factor: cost. Dynamic rules require a Microsoft Entra ID P1 license for every user or device the rule covers. Assigned membership doesn't — a Free license covers members you add by hand. For an office still ramping up, that's part of deciding whether the convenience is worth it. + +So the regional admin's reach is scoped correctly now — to the office's people, and only them. An administrative unit drew the boundary, a scoped assignment held the role inside it, and you know why a group would've quietly left everyone else unprotected. + +A hands-on exercise right after this has you build one of these units yourself. To go deeper on group scoping and dynamic rules, follow the administrative units links in the module. diff --git a/learn/output/Scope-Administration-With-Administrative-Units/narration.wav b/learn/output/Scope-Administration-With-Administrative-Units/narration.wav new file mode 100644 index 0000000000..6c51edff3e Binary files /dev/null and b/learn/output/Scope-Administration-With-Administrative-Units/narration.wav differ diff --git a/learn/output/Scope-Administration-With-Administrative-Units/review/gates.json b/learn/output/Scope-Administration-With-Administrative-Units/review/gates.json new file mode 100644 index 0000000000..b084b5e6d6 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/review/gates.json @@ -0,0 +1,34 @@ +[ + { + "gate": 1, + "name": "Concept and source", + "status": "passed", + "artifact": null, + "note": "Source: C:\\learn-pr\\learn-m365-pr\\learn-m365-pr\\wwl\\provision-govern-identities-entra\\includes\\7-scope-administrative-units.md", + "at": "2026-08-07T18:02:21" + }, + { + "gate": 2, + "name": "Video type and profile", + "status": "passed", + "artifact": null, + "note": "Profile LOCKED: unit-video (~240s, 580 words, ~10 scenes, 5.0s static). Scaffolded by new_project.py.", + "at": "2026-08-07T18:02:21" + }, + { + "gate": 6, + "name": "Fact-check QA", + "status": "iterate", + "artifact": null, + "note": "ITERATE 19/20: disqualifier - wrong role (Helpdesk Admin lacks profile-edit + group mgmt)", + "at": "2026-08-07T19:00:28" + }, + { + "gate": 6, + "name": "Fact-check QA", + "status": "passed", + "artifact": null, + "note": "FIXED: Helpdesk Administrator -> User Administrator throughout; now SHIP 20/20", + "at": "2026-08-07T19:00:29" + } +] \ No newline at end of file diff --git a/learn/output/Scope-Administration-With-Administrative-Units/review/index.html b/learn/output/Scope-Administration-With-Administrative-Units/review/index.html new file mode 100644 index 0000000000..1a39e63d73 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/review/index.html @@ -0,0 +1,101 @@ + + +Review — Scope-Administration-With-Administrative-Units + +

Scope-Administration-With-Administrative-Units

+

3 of 9 gates passed · newest attempt shown, full history in +review/gates.json · stage timing summary missing

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#GateStatusArtifactNoteWhen
1Concept and sourcepassedSource: C:\learn-pr\learn-m365-pr\learn-m365-pr\wwl\provision-govern-identities-entra\includes\7-scope-administrative-units.md2026-08-07 18:02:21
2Video type and profilepassedProfile LOCKED: unit-video (~240s, 580 words, ~10 scenes, 5.0s static). Scaffolded by new_project.py.2026-08-07 18:02:21
3Lookpending
4Voicepending
5Scriptpending
6Fact-check QA ×2passedFIXED: Helpdesk Administrator -> User Administrator throughout; now SHIP 20/202026-08-07 19:00:29
7Snapshot QApending
8Renderpending
9Deliverypending
diff --git a/learn/output/Scope-Administration-With-Administrative-Units/review/stage-timing-events.json b/learn/output/Scope-Administration-With-Administrative-Units/review/stage-timing-events.json new file mode 100644 index 0000000000..d5393dd831 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/review/stage-timing-events.json @@ -0,0 +1,38 @@ +[ + { + "kind": "start", + "stage": "designer", + "run_id": "scope-administrative-units-202608071310", + "at": "2026-08-08T01:39:12+00:00", + "status": null, + "note": null, + "meta": {} + }, + { + "kind": "end", + "stage": "designer", + "run_id": "scope-administrative-units-202608071310", + "at": "2026-08-08T01:48:27+00:00", + "status": "passed", + "note": null, + "meta": {} + }, + { + "kind": "start", + "stage": "builder", + "run_id": "scope-admin-20260808-1", + "at": "2026-08-08T03:06:55+00:00", + "status": null, + "note": null, + "meta": {} + }, + { + "kind": "end", + "stage": "builder", + "run_id": "scope-admin-20260808-1", + "at": "2026-08-08T03:12:01+00:00", + "status": "passed", + "note": null, + "meta": {} + } +] \ No newline at end of file diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes.json b/learn/output/Scope-Administration-With-Administrative-Units/scenes.json new file mode 100644 index 0000000000..0460a89076 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes.json @@ -0,0 +1,112 @@ +{ + "title": "Scope Administration with Administrative Units", + "composition_id": "root", + "width": 1920, + "height": 1080, + "root_background": "#fff8f3", + "gsap": "assets/vendor/gsap.min.js", + "endcard": { + "src": "assets/AI_End_Card.mp4", + "duration": 10.667, + "track": 11 + }, + "bookend": { + "intro": 0.5, + "outro": 0.7, + "color": "#000" + }, + "scenes": [ + { + "id": "01-bumper", + "src": "scenes/01-bumper.html", + "duration": 3.0, + "seam": "hard" + }, + { + "id": "02-title", + "src": "scenes/02-title.html", + "duration": 24.0, + "seam": "hard" + }, + { + "id": "03-objectives", + "src": "scenes/03-objectives.html", + "duration": 14.06, + "seam": "cut-left" + }, + { + "id": "04-over-privilege", + "src": "scenes/04-over-privilege.html", + "duration": 17.59, + "seam": "cut-left" + }, + { + "id": "05-boundary", + "src": "scenes/05-boundary.html", + "duration": 25.2, + "seam": "cut-left" + }, + { + "id": "06-populate", + "src": "scenes/06-populate.html", + "duration": 20.03, + "seam": "cut-left" + }, + { + "id": "07-shortcut-predict", + "src": "scenes/07-shortcut-predict.html", + "duration": 18.76, + "seam": "cut-left" + }, + { + "id": "08-reveal-group-scope", + "src": "scenes/08-reveal-group-scope.html", + "duration": 23.69, + "seam": "cut-left" + }, + { + "id": "09-rule-fix", + "src": "scenes/09-rule-fix.html", + "duration": 17.19, + "seam": "cut-left" + }, + { + "id": "10-dynamic-constraint", + "src": "scenes/10-dynamic-constraint.html", + "duration": 21.02, + "seam": "cut-left" + }, + { + "id": "11-licensing", + "src": "scenes/11-licensing.html", + "duration": 20.49, + "seam": "cut-left" + }, + { + "id": "90-recap", + "src": "scenes/90-recap.html", + "duration": 17.1, + "seam": "cut-up" + }, + { + "id": "91-cta", + "src": "scenes/91-cta.html", + "duration": 10.943, + "seam": "cut-left" + } + ], + "body_slot": { + "insert_after": "03-objectives", + "before": "90-recap", + "target_scene_count": 5, + "max_scene_count": 16, + "note": "Author the teaching-body scenes here (each on the kit foundation), then insert them into 'scenes' between the opening and closing chrome. The builder re-times all durations to real narration word anchors." + }, + "anchors": "anchors.js", + "narration": { + "src": "narration.wav", + "start": 3.0, + "duration": 230.073, + "track": 10 + } +} diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/01-bumper.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/01-bumper.html new file mode 100644 index 0000000000..9d90fe8060 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/01-bumper.html @@ -0,0 +1,125 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/02-title.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/02-title.html new file mode 100644 index 0000000000..1db093b09c --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/02-title.html @@ -0,0 +1,214 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/03-objectives.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/03-objectives.html new file mode 100644 index 0000000000..124f8981fc --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/03-objectives.html @@ -0,0 +1,262 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/04-over-privilege.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/04-over-privilege.html new file mode 100644 index 0000000000..0cd419ba0c --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/04-over-privilege.html @@ -0,0 +1,181 @@ + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/05-boundary.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/05-boundary.html new file mode 100644 index 0000000000..bceb1019e3 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/05-boundary.html @@ -0,0 +1,235 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/06-populate.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/06-populate.html new file mode 100644 index 0000000000..09819d491d --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/06-populate.html @@ -0,0 +1,307 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/07-shortcut-predict.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/07-shortcut-predict.html new file mode 100644 index 0000000000..8f82e935ac --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/07-shortcut-predict.html @@ -0,0 +1,231 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/08-reveal-group-scope.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/08-reveal-group-scope.html new file mode 100644 index 0000000000..59b8c42eca --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/08-reveal-group-scope.html @@ -0,0 +1,166 @@ + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/09-rule-fix.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/09-rule-fix.html new file mode 100644 index 0000000000..98ee932520 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/09-rule-fix.html @@ -0,0 +1,230 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/10-dynamic-constraint.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/10-dynamic-constraint.html new file mode 100644 index 0000000000..5544cc2ad8 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/10-dynamic-constraint.html @@ -0,0 +1,231 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/11-licensing.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/11-licensing.html new file mode 100644 index 0000000000..be3e6ff797 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/11-licensing.html @@ -0,0 +1,229 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/90-recap.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/90-recap.html new file mode 100644 index 0000000000..85304b1f39 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/90-recap.html @@ -0,0 +1,214 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/scenes/91-cta.html b/learn/output/Scope-Administration-With-Administrative-Units/scenes/91-cta.html new file mode 100644 index 0000000000..85eb41aea5 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/scenes/91-cta.html @@ -0,0 +1,214 @@ + + + + + + + + + + + diff --git a/learn/output/Scope-Administration-With-Administrative-Units/script.md b/learn/output/Scope-Administration-With-Administrative-Units/script.md new file mode 100644 index 0000000000..b062046c5e --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/script.md @@ -0,0 +1,130 @@ +# Scope administration with administrative units + +| | | +|---|---| +| Source | `wwl/provision-govern-identities-entra/includes/7-scope-administrative-units.md` (Unit 7) | +| Module | Provision and govern identities in Microsoft Entra (`learn.wwl.provision-govern-identities-entra`) | +| Profile | `unit-video` | +| Voice | `en-US-Vance:DragonHDLatestNeural` (locked input; supersedes the stale `en-US-Ava` in BRIEF.md) | +| Word budget | 435–726 (target 580) | +| Actual words | 593 | +| Est. runtime | ~4:05 content (593 w ÷ 2.42 w/s ≈ 245 s) + 0:11 AI end card | + + + +## Narration + +Relecloud just opened an overseas office, and it needs one regional admin to reset passwords and update profiles there — and nowhere else. But hand that person the User Administrator role, and you've handed them every user in the company. So how do you give a role real power over *one slice* of the directory, and none over the rest? + +In the next few minutes, you'll see how an administrative unit draws that boundary, how a scoped role stays inside it, and how one tempting shortcut quietly leaves people unprotected. Get it right, and least privilege holds. + +Start with what goes wrong. Assign User Administrator at the tenant level, and it resets passwords and edits profiles — but its reach doesn't stop at the new office. That admin can now reach *every* user in the directory, including the executives back at headquarters. + +An administrative unit is the boundary that fixes this — a container in Microsoft Entra ID that holds users, groups, or devices. Assign a role scoped to the unit instead of the whole tenant, and its permissions apply only to the objects that unit contains. Scope the User Administrator role to a unit holding just the office's users, and that's exactly who the admin can reach. + +So how do you fill the unit? The same two ways a group gets members. Add people one at a time with assigned membership, or write a rule on attributes like office location and let Entra populate it automatically — dynamic membership. With new hires arriving weekly, that saves you adding each one by hand. + +But first, a shortcut that looks easier. Relecloud already has a group — New Office, All Staff — holding everyone at the location. Add that group to the unit, and you've seemingly scoped the admin to the whole office in one click. So: can that admin now reset passwords for the people in the group? [[pause:600ms]] + +The answer is no. Adding a group brings the group object into scope — not the users inside it. The admin can rename the group or edit its membership, because the group is a direct member. But they can't reset a password for anyone in it: those users are *two steps removed* — members of a group that's a member of the unit, not of the unit itself. + +It's the same rule nested groups follow, just relocated: Entra resolves permissions against direct membership only. The shortcut never reaches two levels down. The fix — add the users to the unit directly, or let a dynamic rule do it as each new hire joins. + +Dynamic membership has a catch, though. A dynamic unit supports exactly one object type — users, or devices, never both in the same unit. Need the office's accounts *and* their devices? That's two units, not one. And a dynamic unit can't hold a group at all — only individual users or devices. + +One last factor: cost. Dynamic rules require a Microsoft Entra ID P1 license for every user or device the rule covers. Assigned membership doesn't — a Free license covers members you add by hand. For an office still ramping up, that's part of deciding whether the convenience is worth it. + +So the regional admin's reach is scoped correctly now — to the office's people, and only them. An administrative unit drew the boundary, a scoped assignment held the role inside it, and you know why a group would've quietly left everyone else unprotected. + +A hands-on exercise right after this has you build one of these units yourself. To go deeper on group scoping and dynamic rules, follow the administrative units links in the module. + +## Chrome copy (on-screen labels — NOT the spoken sentence; Redundancy principle) + +**02-title** (`title-hero`) + +- kicker: `MICROSOFT LEARN` +- titleLine1: `Scope administration` +- titleLine2: `with administrative units` +- subtitle: `Give a role power over one slice of the directory — not all of it.` + +**03-objectives** (`list-steps`, three chips) + +1. title: `Scope a role to a boundary` · detail: `Assign the role to an administrative unit, not the whole tenant` +2. title: `Populate the unit` · detail: `Assigned membership by hand, or dynamic membership by rule` +3. title: `Avoid the group trap` · detail: `A group in a unit scopes the group, not its members` + +**90-recap** (`title-hero`) + +- kicker: `RECAP` +- titleLine1: `One slice,` +- titleLine2: `scoped correctly` +- subtitle: `Boundary drawn, role contained, the group gap avoided.` + +**91-cta** (`title-hero`) + +- kicker: `NEXT STEP` +- titleLine1: `Build a unit` +- titleLine2: `yourself` +- subtitle: `Do the hands-on exercise, then explore administrative units on Microsoft Learn.` + +## Beat plan + +Chrome beats (1–3, 14–15) are scaffolded; the body is beats 4–11 (8 body beats). "Shape cue" is a +content-shape hypothesis for the designer (candidate kit block + ground + focal object) — the +designer owns the final selection. Anchor phrases map to `anchors.json`. + +| # | Scene | Narration slice | On screen | Shape cue (candidate) | Cue lands on | +|---|---|---|---|---|---| +| 1 | 01-bumper | *(brand sting — no narration)* | Microsoft Learn mark draws | `bumper` · hero-swoosh · the glyph | — | +| 2 | 02-title | "…over *one slice* of the directory, and none over the rest?" | Title + subtitle | `title-hero` · hero-swoosh · the two-line title | `one slice of the directory` | +| 3 | 03-objectives | "…draws that boundary… scoped role stays inside… shortcut leaves people unprotected." | 3 objective chips (labels) | `list-steps` · section-field · the three chips | `draws that boundary` | +| 4 | body — over-privilege | "…reset passwords for *every* user in the directory, including the executives back at headquarters." | Entra Roles blade; User Administrator at **Directory** scope. **capture: Entra admin center → Roles & admins → User Administrator assignment (scope = Directory)** | `media-screenshot` · content-wash · callout box over the scope value | `the executives back at headquarters` | +| 5 | body — the boundary **[spine]** | "An administrative unit is the boundary… permissions apply only to the objects that unit contains." | Tenant ring → administrative-unit ring → the office's users at the core | `diagram-layers` · content-wash · the AU ring closing around the core | `only to the objects that unit contains` | +| 6 | body — populate | "…assigned membership, or… let Entra populate it automatically — dynamic membership." | Two population methods; dynamic lifts for the growing office | `list-select` · content-wash · the *dynamic membership* row lifting | `populate it automatically` | +| 7 | body — the shortcut (PREDICT) | "…can that admin now reset passwords for the people in the group?" | The guiding question card; group being dropped into the unit | `callout-note` (**PREDICT**) · content-wash · the question | `for the people in the group` | +| 8 | body — the reveal **[spine payoff]** | "Adding a group brings the group object into scope — not the users inside it… *two steps removed*." | Unit → group (in scope) → members (out of reach), the two-hop path. **reuse option: module media `7-administrative-unit-group-scoping-gap.png`** | `diagram-flow` · content-wash · the emphasized group node vs. the unreachable members | `the group object into scope` · `two steps removed` | +| 9 | body — the rule + fix | "Entra resolves permissions against direct membership only… add the users to the unit directly…" | Key-point card: direct membership only; the fix | `callout-note` (**KEY POINT**) · content-wash · the term "direct membership" | `direct membership only` · `add the users to the unit directly` | +| 10 | body — dynamic constraint | "…exactly one object type — users, or devices, never both in the same unit… can't hold a group at all." | Constraint rows: object type / both at once / groups | `list-specs` · content-wash · the "one object type" row | `exactly one object type` · `can't hold a group at all` | +| 11 | body — licensing | "Dynamic rules require a Microsoft Entra ID P1 license for every user or device the rule covers. Assigned… a Free license…" | Cost side-by-side: Dynamic = P1 per member; Assigned = Free | `callout-note` (**NOTE**) · content-wash · the P1-vs-Free contrast *(designer may use `list-specs`)* | `every user or device the rule covers` · `a Free license covers members` | +| 12 | 90-recap | "…scoped correctly now — to the office's people, and only them." | Recap payoff card | `title-hero` · hero-swoosh · the payoff line | `scoped correctly now` | +| 13 | 91-cta | "…build one of these units yourself… follow the administrative units links…" | CTA card | `title-hero` · hero-swoosh · the next-step line | `build one of these units yourself` | + +## Source-fidelity ledger + +Referent / quantifier / modality checked on every row. No claim reached the disqualifier bar. + +| Claim in narration | Source / Docs | Verbatim? | +|---|---|---| +| A regional admin should reset passwords and update user properties for one office's employees, and nothing more | Source ¶1 ("resets passwords and updates user properties for that office's employees, and nothing more") | Paraphrase — faithful | +| User Administrator at the tenant level reaches **every** user in the directory, including executives at HQ | Source ¶1; Docs: [administrative-units](https://learn.microsoft.com/entra/identity/role-based-access-control/administrative-units) ("if you assign a role to a user that is not a member of an administrative unit, the scope of the role is the entire tenant") | Quantifier "every" preserved; faithful | +| An administrative unit is a container in Microsoft Entra ID that holds **users, groups, or devices** | Source ¶2 ("holds users, devices, or groups"); Docs: [administrative-units](https://learn.microsoft.com/entra/identity/role-based-access-control/administrative-units) ("can contain only users, groups, or devices") | Same set, order differs — faithful | +| A role scoped to a unit applies **only** to the objects the unit contains | Source ¶2; Docs: [manage-roles-portal](https://learn.microsoft.com/entra/identity/role-based-access-control/manage-roles-portal#assign-roles-with-administrative-unit-scope) ("role permissions apply only when managing members of the administrative unit itself") | Modality "only" preserved; faithful | +| Two ways to populate: assigned membership (one at a time) or dynamic membership (rule on attributes like office location) | Source ¶3; Docs: [admin-units-members-add](https://learn.microsoft.com/entra/identity/role-based-access-control/admin-units-members-add) + [admin-units-members-dynamic](https://learn.microsoft.com/entra/identity/role-based-access-control/admin-units-members-dynamic) | Faithful | +| Adding a group to the unit brings the **group object** into scope, **not** the users inside it | Source ¶5; Docs: [administrative-units#groups](https://learn.microsoft.com/entra/identity/role-based-access-control/administrative-units#groups) ("brings the group itself into the management scope… but **not** the members of the group") | Verbatim intent — faithful | +| The scoped admin **can** rename the group / edit its membership, but **can't** reset a password for members | Source ¶5; Docs: [administrative-units#groups](https://learn.microsoft.com/entra/identity/role-based-access-control/administrative-units#groups) (can manage group name/membership ✅; reset member passwords ❌) | Modality can/can't preserved; faithful | +| Members are **two steps removed** — members of a group that's a member of the unit, not direct members | Source ¶5 ("two steps removed—members of a group that's a member of the unit, not direct members of the unit itself") | Near-verbatim | +| Entra resolves permissions against **direct membership only** | Source ¶6 ("resolves permissions and policies against direct membership only") | Verbatim intent — faithful | +| Fix: add users to the unit directly, or use dynamic membership to do it automatically | Source ¶6 ("add the users to the administrative unit directly, or use dynamic membership…") | Faithful | +| A dynamic unit supports **exactly one** object type — users **or** devices, **never both** in the same unit | Source ¶7; Docs: [admin-units-members-dynamic](https://learn.microsoft.com/entra/identity/role-based-access-control/admin-units-members-dynamic) ("not possible to create an administrative unit with rules for dynamic membership… more than one object type… for users or devices, but not both") | Quantifier "exactly one"/"never both" preserved; faithful | +| Both accounts **and** devices in one auto-populated unit → **two units, not one** | Source ¶7 | Faithful | +| A dynamic unit **can't hold a group at all** | Source ¶7; Docs: [admin-units-members-dynamic](https://learn.microsoft.com/entra/identity/role-based-access-control/admin-units-members-dynamic) ("Administrative units with rules for dynamic membership groups for groups are currently not supported") | Faithful | +| Dynamic membership rules require **Microsoft Entra ID P1** for every user or device the rule covers | Source ¶8; Docs: [administrative-units#groups](https://learn.microsoft.com/entra/identity/role-based-access-control/administrative-units) ("If you are using rules for dynamic membership groups… each administrative unit member requires a Microsoft Entra ID P1 license") + [admin-units-members-dynamic](https://learn.microsoft.com/entra/identity/role-based-access-control/admin-units-members-dynamic) | Faithful | +| Assigned membership needs no such license — a **Free** license is enough for manually added members | Source ¶8; Docs: [admin-units-members-add](https://learn.microsoft.com/entra/identity/role-based-access-control/admin-units-members-add) ("Microsoft Entra ID Free licenses for administrative unit members") | Faithful | +| A hands-on exercise right after this unit has you build such a unit | Source ¶9 ("A hands-on exercise right after this unit has you build exactly this kind of administrative unit yourself") | Faithful | + +## Open questions + +- **CTA link target.** The unit links to `/entra/identity/role-based-access-control/administrative-units#groups` and `/entra/identity/role-based-access-control/admin-units-members-dynamic`; the CTA narration points to "the administrative units links in the module" rather than a raw URL (paths aren't narrated). Confirm the on-screen CTA should surface these two Learn URLs. +- **Voice mismatch.** BRIEF.md carries `en-US-Ava`; the locked input is `en-US-Vance:DragonHDLatestNeural`. Script uses the locked voice — confirm before the audition/TTS gate. `en-US-Vance` isn't in the narration-doctrine per-voice pace table, so the runtime estimate uses the corpus mean (2.42 w/s); re-measure the actual WAV with `ffprobe` after TTS. +- **`P1` pronunciation.** Left as "P1" (correct product term). Audition the licensing sentence — if Dragon HD mangles it, reword to "P one" in `narration.txt` before locking. Licensing cues deliberately anchor on clean phrases that avoid the `P1` token. diff --git a/learn/output/Scope-Administration-With-Administrative-Units/transcript.json b/learn/output/Scope-Administration-With-Administrative-Units/transcript.json new file mode 100644 index 0000000000..88846241b6 --- /dev/null +++ b/learn/output/Scope-Administration-With-Administrative-Units/transcript.json @@ -0,0 +1,2997 @@ +[ + { + "text": "RelaCloud", + "start": 0.05, + "end": 0.6 + }, + { + "text": "just", + "start": 0.6, + "end": 0.81 + }, + { + "text": "opened", + "start": 0.93, + "end": 1.28 + }, + { + "text": "an", + "start": 1.28, + "end": 1.4 + }, + { + "text": "overseas", + "start": 1.42, + "end": 1.96 + }, + { + "text": "office,", + "start": 1.96, + "end": 2.51 + }, + { + "text": "and", + "start": 2.51, + "end": 2.64 + }, + { + "text": "it", + "start": 2.64, + "end": 2.71 + }, + { + "text": "needs", + "start": 2.72, + "end": 2.98 + }, + { + "text": "one", + "start": 3.09, + "end": 3.37 + }, + { + "text": "regional", + "start": 3.5, + "end": 4.16 + }, + { + "text": "admin", + "start": 4.16, + "end": 4.6 + }, + { + "text": "to", + "start": 4.6, + "end": 4.76 + }, + { + "text": "reset", + "start": 4.76, + "end": 5.18 + }, + { + "text": "passwords", + "start": 5.31, + "end": 5.78 + }, + { + "text": "and", + "start": 5.88, + "end": 6.08 + }, + { + "text": "update", + "start": 6.08, + "end": 6.57 + }, + { + "text": "profiles", + "start": 6.57, + "end": 7.22 + }, + { + "text": "there,", + "start": 7.22, + "end": 7.78 + }, + { + "text": "and", + "start": 7.78, + "end": 7.94 + }, + { + "text": "nowhere", + "start": 8.04, + "end": 8.59 + }, + { + "text": "else.", + "start": 8.59, + "end": 9.2 + }, + { + "text": "But", + "start": 9.24, + "end": 9.43 + }, + { + "text": "hand", + "start": 9.43, + "end": 9.74 + }, + { + "text": "that", + "start": 9.74, + "end": 10.01 + }, + { + "text": "person", + "start": 10.13, + "end": 10.5 + }, + { + "text": "the", + "start": 10.54, + "end": 10.75 + }, + { + "text": "user", + "start": 10.75, + "end": 11.06 + }, + { + "text": "administrator", + "start": 11.06, + "end": 12.09 + }, + { + "text": "role,", + "start": 12.09, + "end": 12.57 + }, + { + "text": "and", + "start": 12.7, + "end": 12.8 + }, + { + "text": "you've", + "start": 12.8, + "end": 13.16 + }, + { + "text": "handed", + "start": 13.16, + "end": 13.47 + }, + { + "text": "them", + "start": 13.56, + "end": 13.77 + }, + { + "text": "every", + "start": 13.77, + "end": 14.08 + }, + { + "text": "user", + "start": 14.08, + "end": 14.36 + }, + { + "text": "in", + "start": 14.36, + "end": 14.56 + }, + { + "text": "the", + "start": 14.6, + "end": 14.79 + }, + { + "text": "company.", + "start": 14.79, + "end": 15.56 + }, + { + "text": "So", + "start": 15.61, + "end": 15.71 + }, + { + "text": "how", + "start": 15.71, + "end": 15.94 + }, + { + "text": "do", + "start": 15.94, + "end": 16.09 + }, + { + "text": "you", + "start": 16.09, + "end": 16.32 + }, + { + "text": "give", + "start": 16.32, + "end": 16.63 + }, + { + "text": "a", + "start": 16.63, + "end": 16.72 + }, + { + "text": "role", + "start": 16.72, + "end": 17.01 + }, + { + "text": "real", + "start": 17.01, + "end": 17.29 + }, + { + "text": "power", + "start": 17.31, + "end": 17.66 + }, + { + "text": "over", + "start": 17.75, + "end": 17.84 + }, + { + "text": "one", + "start": 18.02, + "end": 18.23 + }, + { + "text": "slice", + "start": 18.27, + "end": 18.54 + }, + { + "text": "of", + "start": 18.65, + "end": 18.77 + }, + { + "text": "the", + "start": 18.77, + "end": 18.93 + }, + { + "text": "directory,", + "start": 19.06, + "end": 19.83 + }, + { + "text": "and", + "start": 19.92, + "end": 20.07 + }, + { + "text": "none", + "start": 20.07, + "end": 20.37 + }, + { + "text": "over", + "start": 20.38, + "end": 20.74 + }, + { + "text": "the", + "start": 20.8, + "end": 21.19 + }, + { + "text": "rest?", + "start": 21.19, + "end": 22.19 + }, + { + "text": "In", + "start": 22.25, + "end": 22.33 + }, + { + "text": "the", + "start": 22.33, + "end": 22.45 + }, + { + "text": "next", + "start": 22.57, + "end": 22.78 + }, + { + "text": "few", + "start": 22.78, + "end": 22.97 + }, + { + "text": "minutes,", + "start": 22.97, + "end": 23.56 + }, + { + "text": "you'll", + "start": 23.56, + "end": 23.93 + }, + { + "text": "see", + "start": 23.97, + "end": 24.13 + }, + { + "text": "how", + "start": 24.13, + "end": 24.3 + }, + { + "text": "an", + "start": 24.39, + "end": 24.45 + }, + { + "text": "administrative", + "start": 24.45, + "end": 25.37 + }, + { + "text": "unit", + "start": 25.37, + "end": 25.57 + }, + { + "text": "draws", + "start": 25.7, + "end": 25.96 + }, + { + "text": "that", + "start": 25.96, + "end": 26.22 + }, + { + "text": "boundary,", + "start": 26.22, + "end": 26.96 + }, + { + "text": "how", + "start": 26.96, + "end": 27.01 + }, + { + "text": "a", + "start": 27.01, + "end": 27.04 + }, + { + "text": "scoped", + "start": 27.04, + "end": 27.53 + }, + { + "text": "role", + "start": 27.53, + "end": 27.77 + }, + { + "text": "stays", + "start": 27.88, + "end": 28.26 + }, + { + "text": "inside", + "start": 28.27, + "end": 28.74 + }, + { + "text": "it,", + "start": 28.78, + "end": 29.06 + }, + { + "text": "and", + "start": 29.15, + "end": 29.29 + }, + { + "text": "how", + "start": 29.42, + "end": 29.56 + }, + { + "text": "one", + "start": 29.56, + "end": 29.8 + }, + { + "text": "tempting", + "start": 29.8, + "end": 30.33 + }, + { + "text": "shortcut", + "start": 30.46, + "end": 31.12 + }, + { + "text": "quietly", + "start": 31.12, + "end": 31.7 + }, + { + "text": "leaves", + "start": 31.7, + "end": 32.14 + }, + { + "text": "people", + "start": 32.27, + "end": 32.68 + }, + { + "text": "unprotected.", + "start": 32.68, + "end": 34.27 + }, + { + "text": "Get", + "start": 34.6, + "end": 34.81 + }, + { + "text": "it", + "start": 34.93, + "end": 35.02 + }, + { + "text": "right,", + "start": 35.02, + "end": 35.63 + }, + { + "text": "and", + "start": 35.72, + "end": 35.94 + }, + { + "text": "least", + "start": 35.94, + "end": 36.4 + }, + { + "text": "privilege", + "start": 36.4, + "end": 37.23 + }, + { + "text": "holds.", + "start": 37.27, + "end": 37.93 + }, + { + "text": "Start", + "start": 38.06, + "end": 38.4 + }, + { + "text": "with", + "start": 38.4, + "end": 38.65 + }, + { + "text": "what", + "start": 38.71, + "end": 39.02 + }, + { + "text": "goes", + "start": 39.02, + "end": 39.32 + }, + { + "text": "wrong.", + "start": 39.33, + "end": 39.96 + }, + { + "text": "A", + "start": 40.01, + "end": 40.03 + }, + { + "text": "sign", + "start": 40.03, + "end": 40.21 + }, + { + "text": "user", + "start": 40.33, + "end": 40.59 + }, + { + "text": "administrator", + "start": 40.59, + "end": 41.52 + }, + { + "text": "at", + "start": 41.52, + "end": 41.66 + }, + { + "text": "the", + "start": 41.66, + "end": 41.87 + }, + { + "text": "tenant", + "start": 41.87, + "end": 42.24 + }, + { + "text": "level,", + "start": 42.42, + "end": 42.8 + }, + { + "text": "and", + "start": 42.8, + "end": 42.94 + }, + { + "text": "it", + "start": 43.05, + "end": 43.15 + }, + { + "text": "resets", + "start": 43.15, + "end": 43.57 + }, + { + "text": "passwords", + "start": 43.57, + "end": 44.21 + }, + { + "text": "and", + "start": 44.21, + "end": 44.42 + }, + { + "text": "edits", + "start": 44.42, + "end": 44.77 + }, + { + "text": "profiles.", + "start": 44.78, + "end": 45.74 + }, + { + "text": "But", + "start": 45.84, + "end": 46.05 + }, + { + "text": "its", + "start": 46.17, + "end": 46.4 + }, + { + "text": "reach", + "start": 46.4, + "end": 46.87 + }, + { + "text": "doesn't", + "start": 46.96, + "end": 47.58 + }, + { + "text": "stop", + "start": 47.62, + "end": 47.99 + }, + { + "text": "at", + "start": 47.99, + "end": 48.13 + }, + { + "text": "the", + "start": 48.26, + "end": 48.47 + }, + { + "text": "new", + "start": 48.51, + "end": 48.78 + }, + { + "text": "office.", + "start": 48.89, + "end": 49.76 + }, + { + "text": "That", + "start": 49.8, + "end": 49.98 + }, + { + "text": "admin", + "start": 49.98, + "end": 50.26 + }, + { + "text": "can", + "start": 50.26, + "end": 50.39 + }, + { + "text": "now", + "start": 50.45, + "end": 50.57 + }, + { + "text": "reach", + "start": 50.69, + "end": 50.83 + }, + { + "text": "every", + "start": 50.92, + "end": 51.16 + }, + { + "text": "user", + "start": 51.16, + "end": 51.38 + }, + { + "text": "in", + "start": 51.38, + "end": 51.49 + }, + { + "text": "the", + "start": 51.49, + "end": 51.66 + }, + { + "text": "directory,", + "start": 51.66, + "end": 52.28 + }, + { + "text": "including", + "start": 52.28, + "end": 52.74 + }, + { + "text": "the", + "start": 52.85, + "end": 52.96 + }, + { + "text": "executives", + "start": 52.96, + "end": 53.52 + }, + { + "text": "back", + "start": 53.52, + "end": 53.74 + }, + { + "text": "at", + "start": 53.74, + "end": 53.91 + }, + { + "text": "headquarters.", + "start": 53.96, + "end": 55.6 + }, + { + "text": "An", + "start": 55.65, + "end": 55.74 + }, + { + "text": "administrative", + "start": 55.74, + "end": 56.67 + }, + { + "text": "unit", + "start": 56.76, + "end": 57.06 + }, + { + "text": "is", + "start": 57.06, + "end": 57.2 + }, + { + "text": "the", + "start": 57.2, + "end": 57.38 + }, + { + "text": "boundary", + "start": 57.42, + "end": 57.87 + }, + { + "text": "that", + "start": 58.06, + "end": 58.27 + }, + { + "text": "fixes", + "start": 58.31, + "end": 58.58 + }, + { + "text": "this.", + "start": 58.69, + "end": 59.24 + }, + { + "text": "A", + "start": 59.29, + "end": 59.32 + }, + { + "text": "container", + "start": 59.32, + "end": 60.05 + }, + { + "text": "in", + "start": 60.17, + "end": 60.28 + }, + { + "text": "Microsoft", + "start": 60.28, + "end": 61.07 + }, + { + "text": "Entra", + "start": 61.07, + "end": 61.49 + }, + { + "text": "ID", + "start": 61.49, + "end": 61.56 + }, + { + "text": "that", + "start": 61.71, + "end": 62.02 + }, + { + "text": "holds", + "start": 62.02, + "end": 62.46 + }, + { + "text": "users,", + "start": 62.46, + "end": 63.04 + }, + { + "text": "groups,", + "start": 63.11, + "end": 63.76 + }, + { + "text": "or", + "start": 63.76, + "end": 63.85 + }, + { + "text": "devices.", + "start": 63.95, + "end": 64.88 + }, + { + "text": "Assign", + "start": 64.93, + "end": 65.26 + }, + { + "text": "a", + "start": 65.26, + "end": 65.32 + }, + { + "text": "role", + "start": 65.32, + "end": 65.51 + }, + { + "text": "scoped", + "start": 65.58, + "end": 65.95 + }, + { + "text": "to", + "start": 66.04, + "end": 66.1 + }, + { + "text": "the", + "start": 66.1, + "end": 66.28 + }, + { + "text": "unit", + "start": 66.3, + "end": 66.55 + }, + { + "text": "instead", + "start": 66.55, + "end": 66.98 + }, + { + "text": "of", + "start": 67.07, + "end": 67.13 + }, + { + "text": "the", + "start": 67.14, + "end": 67.2 + }, + { + "text": "whole", + "start": 67.35, + "end": 67.66 + }, + { + "text": "tenant,", + "start": 67.66, + "end": 68.18 + }, + { + "text": "and", + "start": 68.18, + "end": 68.25 + }, + { + "text": "its", + "start": 68.38, + "end": 68.56 + }, + { + "text": "permissions", + "start": 68.56, + "end": 69.27 + }, + { + "text": "apply", + "start": 69.27, + "end": 69.72 + }, + { + "text": "only", + "start": 69.76, + "end": 69.97 + }, + { + "text": "to", + "start": 70.09, + "end": 70.21 + }, + { + "text": "the", + "start": 70.21, + "end": 70.46 + }, + { + "text": "objects", + "start": 70.46, + "end": 71.02 + }, + { + "text": "that", + "start": 71.06, + "end": 71.36 + }, + { + "text": "unit", + "start": 71.37, + "end": 71.7 + }, + { + "text": "contains.", + "start": 71.7, + "end": 72.64 + }, + { + "text": "Scope", + "start": 72.68, + "end": 72.89 + }, + { + "text": "the", + "start": 73.01, + "end": 73.17 + }, + { + "text": "user", + "start": 73.17, + "end": 73.44 + }, + { + "text": "administrator", + "start": 73.44, + "end": 74.32 + }, + { + "text": "role", + "start": 74.32, + "end": 74.59 + }, + { + "text": "to", + "start": 74.59, + "end": 74.72 + }, + { + "text": "a", + "start": 74.72, + "end": 74.75 + }, + { + "text": "unit", + "start": 74.83, + "end": 74.92 + }, + { + "text": "holding", + "start": 75.1, + "end": 75.52 + }, + { + "text": "just", + "start": 75.52, + "end": 75.79 + }, + { + "text": "the", + "start": 75.79, + "end": 75.99 + }, + { + "text": "office's", + "start": 75.99, + "end": 76.44 + }, + { + "text": "users,", + "start": 76.53, + "end": 76.91 + }, + { + "text": "and", + "start": 77, + "end": 77.18 + }, + { + "text": "that's", + "start": 77.18, + "end": 77.61 + }, + { + "text": "exactly", + "start": 77.7, + "end": 78.41 + }, + { + "text": "who", + "start": 78.41, + "end": 78.73 + }, + { + "text": "the", + "start": 78.73, + "end": 79.05 + }, + { + "text": "admin", + "start": 79.05, + "end": 79.59 + }, + { + "text": "can", + "start": 79.59, + "end": 79.9 + }, + { + "text": "reach.", + "start": 79.91, + "end": 80.8 + }, + { + "text": "So", + "start": 80.85, + "end": 80.99 + }, + { + "text": "how", + "start": 80.99, + "end": 81.27 + }, + { + "text": "do", + "start": 81.27, + "end": 81.43 + }, + { + "text": "you", + "start": 81.5, + "end": 81.74 + }, + { + "text": "fill", + "start": 81.74, + "end": 82.11 + }, + { + "text": "the", + "start": 82.14, + "end": 82.4 + }, + { + "text": "unit?", + "start": 82.4, + "end": 83.08 + }, + { + "text": "The", + "start": 83.14, + "end": 83.33 + }, + { + "text": "same", + "start": 83.33, + "end": 83.64 + }, + { + "text": "two", + "start": 83.64, + "end": 83.87 + }, + { + "text": "ways", + "start": 83.87, + "end": 84.17 + }, + { + "text": "a", + "start": 84.17, + "end": 84.26 + }, + { + "text": "group", + "start": 84.26, + "end": 84.64 + }, + { + "text": "gets", + "start": 84.64, + "end": 84.95 + }, + { + "text": "members.", + "start": 84.95, + "end": 85.76 + }, + { + "text": "Add", + "start": 85.81, + "end": 85.95 + }, + { + "text": "people", + "start": 85.95, + "end": 86.34 + }, + { + "text": "one", + "start": 86.34, + "end": 86.53 + }, + { + "text": "at", + "start": 86.53, + "end": 86.57 + }, + { + "text": "a", + "start": 86.69, + "end": 86.72 + }, + { + "text": "time", + "start": 86.72, + "end": 86.98 + }, + { + "text": "with", + "start": 86.98, + "end": 87.24 + }, + { + "text": "a", + "start": 87.24, + "end": 87.3 + }, + { + "text": "signed", + "start": 87.3, + "end": 87.69 + }, + { + "text": "membership,", + "start": 87.69, + "end": 88.43 + }, + { + "text": "or", + "start": 88.47, + "end": 88.6 + }, + { + "text": "write", + "start": 88.6, + "end": 88.92 + }, + { + "text": "a", + "start": 88.92, + "end": 88.98 + }, + { + "text": "rule", + "start": 88.98, + "end": 89.13 + }, + { + "text": "on", + "start": 89.26, + "end": 89.37 + }, + { + "text": "attributes", + "start": 89.37, + "end": 90.02 + }, + { + "text": "like", + "start": 90.02, + "end": 90.28 + }, + { + "text": "office", + "start": 90.28, + "end": 90.72 + }, + { + "text": "location", + "start": 90.76, + "end": 91.35 + }, + { + "text": "and", + "start": 91.42, + "end": 91.53 + }, + { + "text": "let", + "start": 91.65, + "end": 91.79 + }, + { + "text": "Entra", + "start": 91.88, + "end": 92.25 + }, + { + "text": "populate", + "start": 92.25, + "end": 92.82 + }, + { + "text": "it", + "start": 92.91, + "end": 93.05 + }, + { + "text": "automatically.", + "start": 93.18, + "end": 94.38 + }, + { + "text": "Dynamic", + "start": 94.42, + "end": 94.85 + }, + { + "text": "membership.", + "start": 94.85, + "end": 95.58 + }, + { + "text": "With", + "start": 95.62, + "end": 95.83 + }, + { + "text": "new", + "start": 95.95, + "end": 96.16 + }, + { + "text": "hires", + "start": 96.16, + "end": 96.58 + }, + { + "text": "arriving", + "start": 96.58, + "end": 97.25 + }, + { + "text": "weekly,", + "start": 97.25, + "end": 97.91 + }, + { + "text": "that", + "start": 98.04, + "end": 98.24 + }, + { + "text": "saves", + "start": 98.24, + "end": 98.56 + }, + { + "text": "you", + "start": 98.67, + "end": 98.91 + }, + { + "text": "adding", + "start": 98.91, + "end": 99.38 + }, + { + "text": "each", + "start": 99.47, + "end": 99.73 + }, + { + "text": "one", + "start": 99.73, + "end": 99.98 + }, + { + "text": "by", + "start": 99.98, + "end": 100.16 + }, + { + "text": "hand.", + "start": 100.16, + "end": 100.76 + }, + { + "text": "But", + "start": 100.88, + "end": 101.07 + }, + { + "text": "first,", + "start": 101.07, + "end": 101.61 + }, + { + "text": "a", + "start": 101.61, + "end": 101.65 + }, + { + "text": "shortcut", + "start": 101.77, + "end": 102.31 + }, + { + "text": "that", + "start": 102.31, + "end": 102.62 + }, + { + "text": "looks", + "start": 102.62, + "end": 102.94 + }, + { + "text": "easier.", + "start": 103.03, + "end": 103.76 + }, + { + "text": "Relacloud", + "start": 103.8, + "end": 104.39 + }, + { + "text": "already", + "start": 104.45, + "end": 104.83 + }, + { + "text": "has", + "start": 104.92, + "end": 105.15 + }, + { + "text": "a", + "start": 105.15, + "end": 105.22 + }, + { + "text": "group,", + "start": 105.22, + "end": 105.73 + }, + { + "text": "new", + "start": 105.73, + "end": 105.86 + }, + { + "text": "office", + "start": 105.95, + "end": 106.39 + }, + { + "text": "all", + "start": 106.39, + "end": 106.61 + }, + { + "text": "staff,", + "start": 106.61, + "end": 107.12 + }, + { + "text": "holding", + "start": 107.12, + "end": 107.56 + }, + { + "text": "everyone", + "start": 107.63, + "end": 108.22 + }, + { + "text": "at", + "start": 108.22, + "end": 108.36 + }, + { + "text": "the", + "start": 108.36, + "end": 108.57 + }, + { + "text": "location.", + "start": 108.58, + "end": 109.46 + }, + { + "text": "Add", + "start": 109.51, + "end": 109.65 + }, + { + "text": "that", + "start": 109.65, + "end": 109.9 + }, + { + "text": "group", + "start": 109.9, + "end": 110.22 + }, + { + "text": "to", + "start": 110.22, + "end": 110.27 + }, + { + "text": "the", + "start": 110.39, + "end": 110.53 + }, + { + "text": "unit", + "start": 110.53, + "end": 110.76 + }, + { + "text": "and", + "start": 110.8, + "end": 110.97 + }, + { + "text": "you've", + "start": 110.97, + "end": 111.35 + }, + { + "text": "seemingly", + "start": 111.35, + "end": 111.73 + }, + { + "text": "scoped", + "start": 111.92, + "end": 112.29 + }, + { + "text": "the", + "start": 112.29, + "end": 112.44 + }, + { + "text": "admin", + "start": 112.55, + "end": 112.8 + }, + { + "text": "to", + "start": 112.8, + "end": 112.83 + }, + { + "text": "the", + "start": 112.96, + "end": 113.11 + }, + { + "text": "whole", + "start": 113.11, + "end": 113.43 + }, + { + "text": "office", + "start": 113.43, + "end": 113.73 + }, + { + "text": "in", + "start": 113.82, + "end": 113.93 + }, + { + "text": "one", + "start": 113.93, + "end": 114.2 + }, + { + "text": "click,", + "start": 114.24, + "end": 114.79 + }, + { + "text": "so", + "start": 114.79, + "end": 114.96 + }, + { + "text": "can", + "start": 114.96, + "end": 115.21 + }, + { + "text": "that", + "start": 115.21, + "end": 115.55 + }, + { + "text": "admin", + "start": 115.55, + "end": 115.93 + }, + { + "text": "now", + "start": 115.97, + "end": 116.22 + }, + { + "text": "reset", + "start": 116.22, + "end": 116.47 + }, + { + "text": "passwords", + "start": 116.66, + "end": 117.41 + }, + { + "text": "for", + "start": 117.41, + "end": 117.57 + }, + { + "text": "the", + "start": 117.7, + "end": 117.91 + }, + { + "text": "people", + "start": 117.91, + "end": 118.42 + }, + { + "text": "in", + "start": 118.42, + "end": 118.59 + }, + { + "text": "the", + "start": 118.59, + "end": 118.81 + }, + { + "text": "group?", + "start": 118.91, + "end": 119.6 + }, + { + "text": "The", + "start": 119.64, + "end": 119.99 + }, + { + "text": "answer", + "start": 119.99, + "end": 120.78 + }, + { + "text": "is", + "start": 120.78, + "end": 121.03 + }, + { + "text": "no.", + "start": 121.04, + "end": 121.7 + }, + { + "text": "Adding", + "start": 121.76, + "end": 122.2 + }, + { + "text": "a", + "start": 122.2, + "end": 122.28 + }, + { + "text": "group", + "start": 122.28, + "end": 122.68 + }, + { + "text": "brings", + "start": 122.68, + "end": 123.15 + }, + { + "text": "the", + "start": 123.16, + "end": 123.4 + }, + { + "text": "group", + "start": 123.4, + "end": 123.8 + }, + { + "text": "object", + "start": 123.8, + "end": 124.28 + }, + { + "text": "into", + "start": 124.28, + "end": 124.6 + }, + { + "text": "scope,", + "start": 124.6, + "end": 125.09 + }, + { + "text": "not", + "start": 125.22, + "end": 125.4 + }, + { + "text": "the", + "start": 125.4, + "end": 125.64 + }, + { + "text": "users", + "start": 125.64, + "end": 125.99 + }, + { + "text": "inside", + "start": 126.08, + "end": 126.51 + }, + { + "text": "it.", + "start": 126.52, + "end": 126.98 + }, + { + "text": "The", + "start": 127.04, + "end": 127.21 + }, + { + "text": "admin", + "start": 127.21, + "end": 127.56 + }, + { + "text": "can", + "start": 127.56, + "end": 127.77 + }, + { + "text": "rename", + "start": 127.77, + "end": 128.2 + }, + { + "text": "the", + "start": 128.2, + "end": 128.4 + }, + { + "text": "group", + "start": 128.42, + "end": 128.73 + }, + { + "text": "or", + "start": 128.77, + "end": 128.9 + }, + { + "text": "edit", + "start": 128.9, + "end": 129.1 + }, + { + "text": "its", + "start": 129.19, + "end": 129.33 + }, + { + "text": "membership,", + "start": 129.46, + "end": 130.24 + }, + { + "text": "because", + "start": 130.24, + "end": 130.74 + }, + { + "text": "the", + "start": 130.74, + "end": 130.95 + }, + { + "text": "group", + "start": 130.95, + "end": 131.27 + }, + { + "text": "is", + "start": 131.36, + "end": 131.44 + }, + { + "text": "a", + "start": 131.44, + "end": 131.51 + }, + { + "text": "direct", + "start": 131.51, + "end": 131.97 + }, + { + "text": "member,", + "start": 132.08, + "end": 132.66 + }, + { + "text": "but", + "start": 132.66, + "end": 132.85 + }, + { + "text": "they", + "start": 132.97, + "end": 133.11 + }, + { + "text": "can't", + "start": 133.2, + "end": 133.58 + }, + { + "text": "reset", + "start": 133.58, + "end": 133.97 + }, + { + "text": "a", + "start": 133.97, + "end": 134.04 + }, + { + "text": "password", + "start": 134.04, + "end": 134.66 + }, + { + "text": "for", + "start": 134.66, + "end": 134.89 + }, + { + "text": "anyone", + "start": 134.89, + "end": 135.36 + }, + { + "text": "in", + "start": 135.36, + "end": 135.41 + }, + { + "text": "it.", + "start": 135.54, + "end": 135.96 + }, + { + "text": "Those", + "start": 136, + "end": 136.41 + }, + { + "text": "users", + "start": 136.41, + "end": 136.77 + }, + { + "text": "are", + "start": 136.89, + "end": 137.03 + }, + { + "text": "two", + "start": 137.12, + "end": 137.39 + }, + { + "text": "steps", + "start": 137.4, + "end": 137.85 + }, + { + "text": "removed.", + "start": 137.85, + "end": 138.8 + }, + { + "text": "Because", + "start": 138.84, + "end": 139.32 + }, + { + "text": "of", + "start": 139.32, + "end": 139.43 + }, + { + "text": "a", + "start": 139.49, + "end": 139.53 + }, + { + "text": "group", + "start": 139.53, + "end": 139.87 + }, + { + "text": "that's", + "start": 139.96, + "end": 140.33 + }, + { + "text": "a", + "start": 140.33, + "end": 140.4 + }, + { + "text": "member", + "start": 140.4, + "end": 140.84 + }, + { + "text": "of", + "start": 140.84, + "end": 140.91 + }, + { + "text": "the", + "start": 140.99, + "end": 141.13 + }, + { + "text": "unit,", + "start": 141.26, + "end": 141.63 + }, + { + "text": "not", + "start": 141.63, + "end": 141.78 + }, + { + "text": "of", + "start": 141.89, + "end": 141.99 + }, + { + "text": "the", + "start": 141.99, + "end": 142.17 + }, + { + "text": "unit", + "start": 142.3, + "end": 142.5 + }, + { + "text": "itself.", + "start": 142.5, + "end": 143.28 + }, + { + "text": "It's", + "start": 143.33, + "end": 143.53 + }, + { + "text": "the", + "start": 143.65, + "end": 143.78 + }, + { + "text": "same", + "start": 143.78, + "end": 144.07 + }, + { + "text": "rule", + "start": 144.07, + "end": 144.35 + }, + { + "text": "nested", + "start": 144.45, + "end": 144.8 + }, + { + "text": "groups", + "start": 144.8, + "end": 145.24 + }, + { + "text": "follow,", + "start": 145.24, + "end": 145.82 + }, + { + "text": "just", + "start": 145.82, + "end": 146.11 + }, + { + "text": "relocated.", + "start": 146.11, + "end": 147.06 + }, + { + "text": "Entra", + "start": 147.11, + "end": 147.31 + }, + { + "text": "resolves", + "start": 147.43, + "end": 147.82 + }, + { + "text": "permissions", + "start": 147.82, + "end": 148.46 + }, + { + "text": "against", + "start": 148.48, + "end": 148.89 + }, + { + "text": "direct", + "start": 148.89, + "end": 149.17 + }, + { + "text": "membership", + "start": 149.26, + "end": 149.84 + }, + { + "text": "only.", + "start": 149.84, + "end": 150.3 + }, + { + "text": "The", + "start": 150.35, + "end": 150.5 + }, + { + "text": "shortcut", + "start": 150.5, + "end": 151.03 + }, + { + "text": "never", + "start": 151.03, + "end": 151.36 + }, + { + "text": "reaches", + "start": 151.36, + "end": 151.83 + }, + { + "text": "two", + "start": 151.83, + "end": 152.03 + }, + { + "text": "levels", + "start": 152.03, + "end": 152.4 + }, + { + "text": "down.", + "start": 152.49, + "end": 152.92 + }, + { + "text": "The", + "start": 152.96, + "end": 153.17 + }, + { + "text": "fix?", + "start": 153.29, + "end": 153.92 + }, + { + "text": "Add", + "start": 153.96, + "end": 154.17 + }, + { + "text": "the", + "start": 154.29, + "end": 154.46 + }, + { + "text": "users", + "start": 154.46, + "end": 154.91 + }, + { + "text": "to", + "start": 154.91, + "end": 154.99 + }, + { + "text": "the", + "start": 155.08, + "end": 155.35 + }, + { + "text": "unit", + "start": 155.36, + "end": 155.7 + }, + { + "text": "directly,", + "start": 155.74, + "end": 156.59 + }, + { + "text": "or", + "start": 156.63, + "end": 156.8 + }, + { + "text": "let", + "start": 156.8, + "end": 157.07 + }, + { + "text": "a", + "start": 157.07, + "end": 157.16 + }, + { + "text": "dynamic", + "start": 157.16, + "end": 157.72 + }, + { + "text": "rule", + "start": 157.79, + "end": 158.15 + }, + { + "text": "do", + "start": 158.15, + "end": 158.32 + }, + { + "text": "it", + "start": 158.32, + "end": 158.51 + }, + { + "text": "as", + "start": 158.51, + "end": 158.69 + }, + { + "text": "each", + "start": 158.69, + "end": 159.05 + }, + { + "text": "new", + "start": 159.05, + "end": 159.32 + }, + { + "text": "hire", + "start": 159.32, + "end": 159.68 + }, + { + "text": "joins.", + "start": 159.68, + "end": 160.36 + }, + { + "text": "Dynamic", + "start": 160.52, + "end": 160.87 + }, + { + "text": "membership", + "start": 160.87, + "end": 161.42 + }, + { + "text": "has", + "start": 161.42, + "end": 161.55 + }, + { + "text": "a", + "start": 161.55, + "end": 161.64 + }, + { + "text": "catch", + "start": 161.64, + "end": 161.9 + }, + { + "text": "though.", + "start": 161.91, + "end": 162.44 + }, + { + "text": "A", + "start": 162.49, + "end": 162.53 + }, + { + "text": "dynamic", + "start": 162.53, + "end": 163.19 + }, + { + "text": "unit", + "start": 163.19, + "end": 163.51 + }, + { + "text": "supports", + "start": 163.6, + "end": 164.31 + }, + { + "text": "exactly", + "start": 164.31, + "end": 164.97 + }, + { + "text": "one", + "start": 164.97, + "end": 165.25 + }, + { + "text": "object", + "start": 165.25, + "end": 165.8 + }, + { + "text": "type.", + "start": 165.8, + "end": 166.51 + }, + { + "text": "Users", + "start": 166.56, + "end": 167 + }, + { + "text": "or", + "start": 167, + "end": 167.15 + }, + { + "text": "devices,", + "start": 167.21, + "end": 168.06 + }, + { + "text": "never", + "start": 168.06, + "end": 168.54 + }, + { + "text": "both", + "start": 168.54, + "end": 168.8 + }, + { + "text": "in", + "start": 168.98, + "end": 169.12 + }, + { + "text": "the", + "start": 169.12, + "end": 169.41 + }, + { + "text": "same", + "start": 169.41, + "end": 169.8 + }, + { + "text": "unit.", + "start": 169.8, + "end": 170.52 + }, + { + "text": "Need", + "start": 170.56, + "end": 170.77 + }, + { + "text": "the", + "start": 170.89, + "end": 170.97 + }, + { + "text": "officers", + "start": 170.97, + "end": 171.5 + }, + { + "text": "accounts", + "start": 171.5, + "end": 172.03 + }, + { + "text": "and", + "start": 172.03, + "end": 172.22 + }, + { + "text": "their", + "start": 172.22, + "end": 172.55 + }, + { + "text": "devices?", + "start": 172.55, + "end": 173.23 + }, + { + "text": "That's", + "start": 173.28, + "end": 173.72 + }, + { + "text": "two", + "start": 173.72, + "end": 173.96 + }, + { + "text": "units,", + "start": 173.96, + "end": 174.52 + }, + { + "text": "not", + "start": 174.52, + "end": 174.76 + }, + { + "text": "one.", + "start": 174.76, + "end": 175.28 + }, + { + "text": "And", + "start": 175.32, + "end": 175.53 + }, + { + "text": "a", + "start": 175.53, + "end": 175.65 + }, + { + "text": "dynamic", + "start": 175.65, + "end": 176.27 + }, + { + "text": "unit", + "start": 176.27, + "end": 176.63 + }, + { + "text": "can't", + "start": 176.63, + "end": 177.06 + }, + { + "text": "hold", + "start": 177.1, + "end": 177.38 + }, + { + "text": "a", + "start": 177.47, + "end": 177.53 + }, + { + "text": "group", + "start": 177.53, + "end": 177.97 + }, + { + "text": "at", + "start": 177.99, + "end": 178.16 + }, + { + "text": "all,", + "start": 178.16, + "end": 178.61 + }, + { + "text": "only", + "start": 178.61, + "end": 178.97 + }, + { + "text": "individual", + "start": 178.97, + "end": 179.88 + }, + { + "text": "users", + "start": 179.88, + "end": 180.25 + }, + { + "text": "or", + "start": 180.35, + "end": 180.46 + }, + { + "text": "devices.", + "start": 180.59, + "end": 181.45 + }, + { + "text": "One", + "start": 181.54, + "end": 181.88 + }, + { + "text": "last", + "start": 181.88, + "end": 182.31 + }, + { + "text": "factor,", + "start": 182.43, + "end": 183.4 + }, + { + "text": "cost.", + "start": 183.4, + "end": 184.32 + }, + { + "text": "Dynamic", + "start": 184.36, + "end": 184.95 + }, + { + "text": "rules", + "start": 184.95, + "end": 185.39 + }, + { + "text": "require", + "start": 185.48, + "end": 186.03 + }, + { + "text": "a", + "start": 186.03, + "end": 186.1 + }, + { + "text": "Microsoft", + "start": 186.14, + "end": 186.93 + }, + { + "text": "Entra", + "start": 186.93, + "end": 187.3 + }, + { + "text": "ID", + "start": 187.41, + "end": 187.56 + }, + { + "text": "P1", + "start": 187.56, + "end": 187.92 + }, + { + "text": "license", + "start": 187.92, + "end": 188.55 + }, + { + "text": "for", + "start": 188.55, + "end": 188.82 + }, + { + "text": "every", + "start": 188.82, + "end": 189.27 + }, + { + "text": "user", + "start": 189.27, + "end": 189.58 + }, + { + "text": "or", + "start": 189.63, + "end": 189.8 + }, + { + "text": "device.", + "start": 189.92, + "end": 190.64 + }, + { + "text": "The", + "start": 190.68, + "end": 190.85 + }, + { + "text": "rule", + "start": 190.85, + "end": 191.13 + }, + { + "text": "covers", + "start": 191.13, + "end": 191.45 + }, + { + "text": "a", + "start": 191.57, + "end": 191.62 + }, + { + "text": "signed", + "start": 191.62, + "end": 192.03 + }, + { + "text": "membership", + "start": 192.03, + "end": 192.74 + }, + { + "text": "doesn't,", + "start": 192.74, + "end": 193.36 + }, + { + "text": "a", + "start": 193.37, + "end": 193.44 + }, + { + "text": "free", + "start": 193.44, + "end": 193.62 + }, + { + "text": "license", + "start": 193.73, + "end": 194.21 + }, + { + "text": "covers", + "start": 194.21, + "end": 194.63 + }, + { + "text": "members", + "start": 194.63, + "end": 195.11 + }, + { + "text": "you", + "start": 195.11, + "end": 195.25 + }, + { + "text": "add", + "start": 195.33, + "end": 195.54 + }, + { + "text": "by", + "start": 195.54, + "end": 195.61 + }, + { + "text": "hand.", + "start": 195.71, + "end": 196.11 + }, + { + "text": "There", + "start": 196.2, + "end": 196.41 + }, + { + "text": "are", + "start": 196.41, + "end": 196.56 + }, + { + "text": "an", + "start": 196.56, + "end": 196.66 + }, + { + "text": "office", + "start": 196.66, + "end": 196.96 + }, + { + "text": "still", + "start": 196.96, + "end": 197.21 + }, + { + "text": "ramping", + "start": 197.21, + "end": 197.56 + }, + { + "text": "up,", + "start": 197.56, + "end": 197.76 + }, + { + "text": "that's", + "start": 197.76, + "end": 198.06 + }, + { + "text": "part", + "start": 198.06, + "end": 198.26 + }, + { + "text": "of", + "start": 198.26, + "end": 198.35 + }, + { + "text": "deciding", + "start": 198.35, + "end": 198.76 + }, + { + "text": "whether", + "start": 198.76, + "end": 199.11 + }, + { + "text": "the", + "start": 199.11, + "end": 199.26 + }, + { + "text": "convenience", + "start": 199.26, + "end": 199.84 + }, + { + "text": "is", + "start": 199.84, + "end": 199.96 + }, + { + "text": "worth", + "start": 200.04, + "end": 200.99 + }, + { + "text": "it.", + "start": 200.99, + "end": 201.98 + }, + { + "text": "So", + "start": 202.03, + "end": 202.12 + }, + { + "text": "the", + "start": 202.12, + "end": 202.23 + }, + { + "text": "regional", + "start": 202.35, + "end": 202.79 + }, + { + "text": "admin's", + "start": 202.91, + "end": 203.38 + }, + { + "text": "reach", + "start": 203.38, + "end": 203.71 + }, + { + "text": "is", + "start": 203.75, + "end": 203.87 + }, + { + "text": "scoped", + "start": 203.87, + "end": 204.26 + }, + { + "text": "correctly", + "start": 204.44, + "end": 204.92 + }, + { + "text": "now,", + "start": 204.92, + "end": 205.27 + }, + { + "text": "to", + "start": 205.27, + "end": 205.35 + }, + { + "text": "the", + "start": 205.48, + "end": 205.62 + }, + { + "text": "office's", + "start": 205.62, + "end": 206.18 + }, + { + "text": "people", + "start": 206.18, + "end": 206.59 + }, + { + "text": "and", + "start": 206.67, + "end": 206.88 + }, + { + "text": "only", + "start": 206.88, + "end": 207.36 + }, + { + "text": "them.", + "start": 207.36, + "end": 208.66 + }, + { + "text": "An", + "start": 208.71, + "end": 208.8 + }, + { + "text": "administrative", + "start": 208.8, + "end": 209.73 + }, + { + "text": "unit", + "start": 209.82, + "end": 210.06 + }, + { + "text": "drew", + "start": 210.08, + "end": 210.35 + }, + { + "text": "the", + "start": 210.35, + "end": 210.56 + }, + { + "text": "boundary.", + "start": 210.56, + "end": 211.33 + }, + { + "text": "A", + "start": 211.41, + "end": 211.44 + }, + { + "text": "scoped", + "start": 211.44, + "end": 211.91 + }, + { + "text": "assignment", + "start": 211.91, + "end": 212.66 + }, + { + "text": "held", + "start": 212.7, + "end": 213.01 + }, + { + "text": "the", + "start": 213.02, + "end": 213.26 + }, + { + "text": "role", + "start": 213.26, + "end": 213.58 + }, + { + "text": "inside", + "start": 213.58, + "end": 214.03 + }, + { + "text": "it.", + "start": 214.07, + "end": 214.48 + }, + { + "text": "And", + "start": 214.52, + "end": 214.69 + }, + { + "text": "you", + "start": 214.69, + "end": 214.9 + }, + { + "text": "know", + "start": 214.9, + "end": 215.11 + }, + { + "text": "why", + "start": 215.18, + "end": 215.29 + }, + { + "text": "a", + "start": 215.41, + "end": 215.46 + }, + { + "text": "group", + "start": 215.46, + "end": 215.79 + }, + { + "text": "would", + "start": 215.81, + "end": 216.16 + }, + { + "text": "have", + "start": 216.16, + "end": 216.44 + }, + { + "text": "quietly", + "start": 216.44, + "end": 216.75 + }, + { + "text": "left", + "start": 216.95, + "end": 217.2 + }, + { + "text": "everyone", + "start": 217.21, + "end": 217.77 + }, + { + "text": "else", + "start": 217.77, + "end": 218.05 + }, + { + "text": "unprotected.", + "start": 218.05, + "end": 219.08 + }, + { + "text": "A", + "start": 219.13, + "end": 219.14 + }, + { + "text": "hands-on", + "start": 219.14, + "end": 219.67 + }, + { + "text": "exercise", + "start": 219.67, + "end": 220.15 + }, + { + "text": "right", + "start": 220.24, + "end": 220.56 + }, + { + "text": "after", + "start": 220.56, + "end": 220.86 + }, + { + "text": "this", + "start": 220.9, + "end": 221.17 + }, + { + "text": "has", + "start": 221.17, + "end": 221.36 + }, + { + "text": "you", + "start": 221.54, + "end": 221.57 + }, + { + "text": "build", + "start": 221.57, + "end": 221.91 + }, + { + "text": "one", + "start": 221.91, + "end": 222.06 + }, + { + "text": "of", + "start": 222.17, + "end": 222.24 + }, + { + "text": "these", + "start": 222.24, + "end": 222.45 + }, + { + "text": "units", + "start": 222.58, + "end": 222.88 + }, + { + "text": "yourself.", + "start": 222.95, + "end": 223.8 + }, + { + "text": "To", + "start": 223.85, + "end": 223.93 + }, + { + "text": "go", + "start": 223.93, + "end": 224.05 + }, + { + "text": "deeper", + "start": 224.17, + "end": 224.43 + }, + { + "text": "on", + "start": 224.49, + "end": 224.6 + }, + { + "text": "group", + "start": 224.6, + "end": 224.87 + }, + { + "text": "scoping", + "start": 224.96, + "end": 225.41 + }, + { + "text": "and", + "start": 225.41, + "end": 225.58 + }, + { + "text": "dynamic", + "start": 225.62, + "end": 226.08 + }, + { + "text": "rules,", + "start": 226.26, + "end": 226.56 + }, + { + "text": "follow", + "start": 226.56, + "end": 226.97 + }, + { + "text": "the", + "start": 226.97, + "end": 227.16 + }, + { + "text": "administrative", + "start": 227.17, + "end": 228.07 + }, + { + "text": "unit's", + "start": 228.16, + "end": 228.68 + }, + { + "text": "links", + "start": 228.68, + "end": 229.16 + }, + { + "text": "in", + "start": 229.21, + "end": 229.29 + }, + { + "text": "the", + "start": 229.29, + "end": 229.41 + }, + { + "text": "module.", + "start": 229.53, + "end": 229.92 + } +] \ No newline at end of file diff --git a/packages/producer/tests/css-import-scoping/output/compiled.html b/packages/producer/tests/css-import-scoping/output/compiled.html index f53b8a29af..9a068e353a 100644 --- a/packages/producer/tests/css-import-scoping/output/compiled.html +++ b/packages/producer/tests/css-import-scoping/output/compiled.html @@ -1,82 +1,3 @@ - - - - - - - - - -
-
-
-
CSS IMPORT TEST
- - - - -
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:24327fe1869fd90efaff6ad5d85064835f23b78798efb24894d38f2ef4ce6503 +size 2768 diff --git a/packages/producer/tests/css-spinner-render-compat/output/compiled.html b/packages/producer/tests/css-spinner-render-compat/output/compiled.html index 7a46268bab..cf98a1add8 100644 --- a/packages/producer/tests/css-spinner-render-compat/output/compiled.html +++ b/packages/producer/tests/css-spinner-render-compat/output/compiled.html @@ -1,21 +1,3 @@ - - - - - - -
-
-
-
Loading
-
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:e4927706cd5ed83fadfbed5b2afa1172292a417612016d8ee9ba2690b1cf87a9 +size 1011 diff --git a/packages/producer/tests/d3-adapter/output/compiled.html b/packages/producer/tests/d3-adapter/output/compiled.html index 458742a993..1149b5344a 100644 --- a/packages/producer/tests/d3-adapter/output/compiled.html +++ b/packages/producer/tests/d3-adapter/output/compiled.html @@ -1,208 +1,3 @@ - - - - - - -
- -
-
D3 adapter test
-
Animated bar chart with transitions
- - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:0a97a108e346e6fce931e9ee0d41813c33b5ecf701bfb66d053027bf569f491b +size 447105 diff --git a/packages/producer/tests/distributed/mov-prores/output/compiled.html b/packages/producer/tests/distributed/mov-prores/output/compiled.html index 28852489b7..45ecb37545 100644 --- a/packages/producer/tests/distributed/mov-prores/output/compiled.html +++ b/packages/producer/tests/distributed/mov-prores/output/compiled.html @@ -1,122 +1,3 @@ - - - - - - mov ProRes distributed fixture - - - - -
-
-
PHASE
-
PRORES ONE
-
-
-
PHASE
-
PRORES TWO
-
- - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:3e1349c1d2d77ce831b88e0fc621928334d97b6a1bd8fedccb23e1af3d303194 +size 119242 diff --git a/packages/producer/tests/distributed/mp4-h264-sdr/output/compiled.html b/packages/producer/tests/distributed/mp4-h264-sdr/output/compiled.html index 514f4f83c8..538bba08c7 100644 --- a/packages/producer/tests/distributed/mp4-h264-sdr/output/compiled.html +++ b/packages/producer/tests/distributed/mp4-h264-sdr/output/compiled.html @@ -1,139 +1,3 @@ - - - - - - mp4 H.264 SDR distributed fixture - - - - -
-
-
CHUNK
-
PHASE ONE
-
-
-
CHUNK
-
PHASE TWO
-
- - - - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:e343fd54957a996658b92a5b37db752a58c54283d77e6aa209e9908355826692 +size 120306 diff --git a/packages/producer/tests/distributed/mp4-h265-sdr/output/compiled.html b/packages/producer/tests/distributed/mp4-h265-sdr/output/compiled.html index e3a9ca8f15..ec6821b46c 100644 --- a/packages/producer/tests/distributed/mp4-h265-sdr/output/compiled.html +++ b/packages/producer/tests/distributed/mp4-h265-sdr/output/compiled.html @@ -1,121 +1,3 @@ - - - - - - mp4 H.265 SDR distributed fixture - - - - -
-
-
CODEC
-
HEVC ONE
-
-
-
CODEC
-
HEVC TWO
-
- - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:31196702630cec4d213dacd56d74db740971c8f61904d4760d249d21e0bfd1c5 +size 119154 diff --git a/packages/producer/tests/distributed/png-sequence/output/compiled.html b/packages/producer/tests/distributed/png-sequence/output/compiled.html index 2974d6c176..fc7dcf9f83 100644 --- a/packages/producer/tests/distributed/png-sequence/output/compiled.html +++ b/packages/producer/tests/distributed/png-sequence/output/compiled.html @@ -1,143 +1,3 @@ - - - - - - png-sequence distributed fixture - - - - -
-
-
PHASE
-
ALPHA ONE
-
-
-
PHASE
-
ALPHA TWO
-
- - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:da62975e2607ede3e78b6864cd4de08905617507a8d7da027b2143ba3dff583b +size 131114 diff --git a/packages/producer/tests/distributed/three-boundary-deferred/output/compiled.html b/packages/producer/tests/distributed/three-boundary-deferred/output/compiled.html index e3e3ec6d49..ca3c97109a 100644 --- a/packages/producer/tests/distributed/three-boundary-deferred/output/compiled.html +++ b/packages/producer/tests/distributed/three-boundary-deferred/output/compiled.html @@ -1,106 +1,3 @@ - - - - - chunk-boundary: Three.js (setTimeout-deferred) - - - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:4d54e152114830728a00ca7da8fb7e65e95cf0773b40e59869e0f59fcb2151a1 +size 744376 diff --git a/packages/producer/tests/distributed/three-boundary/output/compiled.html b/packages/producer/tests/distributed/three-boundary/output/compiled.html index b686f4698f..9f5604e309 100644 --- a/packages/producer/tests/distributed/three-boundary/output/compiled.html +++ b/packages/producer/tests/distributed/three-boundary/output/compiled.html @@ -1,103 +1,3 @@ - - - - - chunk-boundary: Three.js - - - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:fa50557d3134c0606b7d68b7bc93bbee1ae79ddcb10a911ce3b21cb6169b7be8 +size 744332 diff --git a/packages/producer/tests/distributed/webm-vp9/output/compiled.html b/packages/producer/tests/distributed/webm-vp9/output/compiled.html index ba2edc000f..2521a61d10 100644 --- a/packages/producer/tests/distributed/webm-vp9/output/compiled.html +++ b/packages/producer/tests/distributed/webm-vp9/output/compiled.html @@ -1,163 +1,3 @@ - - - - - - webm VP9 distributed fixture - - - - -
-
-
CHUNK
-
PHASE ONE
-
-
-
CHUNK
-
PHASE TWO
-
- - - - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:6cd0ca6bbdf19adf8ea94cc3e3383d2ca6c8087d1000e30854fa286a8c1f1de7 +size 132215 diff --git a/packages/producer/tests/dogs-captions/output/compiled.html b/packages/producer/tests/dogs-captions/output/compiled.html index 0afd42d141..7dcfcd399c 100644 --- a/packages/producer/tests/dogs-captions/output/compiled.html +++ b/packages/producer/tests/dogs-captions/output/compiled.html @@ -1,631 +1,3 @@ - - - - - - - Dog Safety Video with Captions - - - - - -
- - - - -
-
-
- - -
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:e4a2955abb703d8143940c313d995b690c3d94bcb6db4dd574ac3f131d15d772 +size 127603 diff --git a/packages/producer/tests/fast-capture-gsap/output/compiled.html b/packages/producer/tests/fast-capture-gsap/output/compiled.html index f0111b28b2..494b368120 100644 --- a/packages/producer/tests/fast-capture-gsap/output/compiled.html +++ b/packages/producer/tests/fast-capture-gsap/output/compiled.html @@ -1,42 +1,3 @@ - - - - - - - - - -
-
FAST CAPTURE
-
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:4db5eaf9572a3eef2f76b0d71e6801dedefc4867d2f0477daf7ef907652844ec +size 72848 diff --git a/packages/producer/tests/font-variant-numeric/output/compiled.html b/packages/producer/tests/font-variant-numeric/output/compiled.html index c74692232e..02708e258a 100644 --- a/packages/producer/tests/font-variant-numeric/output/compiled.html +++ b/packages/producer/tests/font-variant-numeric/output/compiled.html @@ -1,103 +1,3 @@ - - - - - - Font Variant Numeric Test - - - - -
-
COUNTER
-
0000
- - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:c927ed9f91d9098c4019fd8143273d3e1fa96061c888d086efda9c945f6e85d8 +size 118787 diff --git a/packages/producer/tests/google-maps-adapter/output/compiled.html b/packages/producer/tests/google-maps-adapter/output/compiled.html index 69a6ca6029..c30c70424e 100644 --- a/packages/producer/tests/google-maps-adapter/output/compiled.html +++ b/packages/producer/tests/google-maps-adapter/output/compiled.html @@ -1,224 +1,3 @@ - - - - - - -
- - -
Google Maps adapter test
-
tilesloaded
- - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:50989b9905815dd794a27f5c406f61d19efafd5e88ab18ba69aa5ae25e6896f8 +size 167667 diff --git a/packages/producer/tests/gsap-letters-render-compat/output/compiled.html b/packages/producer/tests/gsap-letters-render-compat/output/compiled.html index 13199b4c88..6d5185c9e4 100644 --- a/packages/producer/tests/gsap-letters-render-compat/output/compiled.html +++ b/packages/producer/tests/gsap-letters-render-compat/output/compiled.html @@ -1,562 +1,3 @@ - - - - - - - -
-
- HYPERFRAMES -
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:262db2282d1a599c48859411dd55a8377ef17b34bf76fb16ed55892ffe5fc886 +size 2562186 diff --git a/packages/producer/tests/hdr-hlg-regression/output/compiled.html b/packages/producer/tests/hdr-hlg-regression/output/compiled.html index b6973de235..08b93be3c7 100644 --- a/packages/producer/tests/hdr-hlg-regression/output/compiled.html +++ b/packages/producer/tests/hdr-hlg-regression/output/compiled.html @@ -1,120 +1,3 @@ - - - - - HDR HLG Regression Suite - - - - -
- - -
- A · HLG baseline + DOM overlay -
- - -
- -
-
- B · HLG wrapper opacity fade -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:522941d4c4a052abe3e50a082c8d1437c476217497af1aab4061d9086cef9b4d +size 164074 diff --git a/packages/producer/tests/hdr-regression/output/compiled.html b/packages/producer/tests/hdr-regression/output/compiled.html index a6c419e64e..48878fd81b 100644 --- a/packages/producer/tests/hdr-regression/output/compiled.html +++ b/packages/producer/tests/hdr-regression/output/compiled.html @@ -1,782 +1,3 @@ - - - - - HDR PQ Regression Suite - - - - - -
- - -
- A · Baseline HDR + opacity tween -
- - -
- -
-
- B · DOM → HDR → DOM stack -
- - -
- -
- C · Rotate + scale + radius -
- - -
- -
- D · Scene A (HDR video) -
-
-
- HDR PQ photo -
- D · Scene B (HDR image) -
-
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:fea3053e1637b65b7e6c2b086ba45d4e3e0f2c97177d8c22a1501bf6d09133cb +size 2875693 diff --git a/packages/producer/tests/heygen-promo-preview-assets/output/compiled.html b/packages/producer/tests/heygen-promo-preview-assets/output/compiled.html index ef8dd3b5e8..7e3c7baffd 100644 --- a/packages/producer/tests/heygen-promo-preview-assets/output/compiled.html +++ b/packages/producer/tests/heygen-promo-preview-assets/output/compiled.html @@ -1,1769 +1,3 @@ - - - - - - HeyGen Promo - - - - -
-
-
-
-
-
- - - -
-
HEYGEN / AI VIDEO GENERATOR
-

- Create studio-quality - AI videos - in minutes. -

-

- Turn scripts, avatars, photos, and multilingual dubbing into polished videos with one - fast workflow built for teams. -

-
-
Get Started for Free
-
heygen.com
-
-
- -
-
-
-
- -
-
www.heygen.com
-
- HeyGen homepage -
- HeyGen avatars -
-
- - - - - -
-
-
-
- Text to Video - Photo to Video - Product Ads - UGC ads - AI Models -
- -
-
ONE PLATFORM / MULTIPLE WAYS TO CREATE
-

Text, avatars, dubbing, and AI Studio in one flow.

-

- Build product videos, talking photos, translated content, and social-ready promos - without leaving the same system. -

-
- -
-
- HeyGen product section -
-
- HeyGen feature strip -
- HeyGen prism -
- -
-
-
117,048,632
-
Videos generated
-
-
-
90,808,526
-
Avatars generated
-
-
-
16,125,234
-
Videos translated
-
-
-
- - - - - -
-
-
-
-
-
- -
-
- -
Used by 100,000+ teams
-
- -
-
-
HEYGEN / START CREATING
-

Fast to prompt.
Faster to publish.

-

- Create AI videos with avatars, dubbing, and text-first editing in one polished - workflow built to move at team speed. -

- -
-
Get Started for Free
-
heygen.com
-
-
- -
-
- HeyGen homepage -
-
- HeyGen prism -
-
-
-
-
- - - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:670bfb0e0f8d3565b31b74136b6537ea2f998bb4ca63aaef413b4c6d79fa52ba +size 232005 diff --git a/packages/producer/tests/iframe-render-compat/output/compiled.html b/packages/producer/tests/iframe-render-compat/output/compiled.html index 713ab93cd0..2b5219a214 100644 --- a/packages/producer/tests/iframe-render-compat/output/compiled.html +++ b/packages/producer/tests/iframe-render-compat/output/compiled.html @@ -1,12 +1,3 @@ - - - - - - -
- -
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:cc795c332a17d38cfe2eb457e26744bf4e82fdb91c96bb3790ba9baac68dc418 +size 493 diff --git a/packages/producer/tests/leaflet-adapter/output/compiled.html b/packages/producer/tests/leaflet-adapter/output/compiled.html index bc6c85bb04..084f6fc84c 100644 --- a/packages/producer/tests/leaflet-adapter/output/compiled.html +++ b/packages/producer/tests/leaflet-adapter/output/compiled.html @@ -1,107 +1,3 @@ - - - - - - - -
- -
-
Leaflet adapter test
-
37.7749, -122.4194 — San Francisco
- - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:7c44a6ef1daaae402f3cb54b50340de1617f059b0a734bd6dad1cec5594ded5f +size 311394 diff --git a/packages/producer/tests/many-cuts/output/compiled.html b/packages/producer/tests/many-cuts/output/compiled.html index b260f32206..e01230d1e8 100644 --- a/packages/producer/tests/many-cuts/output/compiled.html +++ b/packages/producer/tests/many-cuts/output/compiled.html @@ -1,60 +1,3 @@ - - - - - - Magic Cut Intro - - - - -
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Magic Cut
-
Meet your Editing Agent
-
- - - - - - - - - - - - - - - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:cdfe2f5bf64cd105e845e7a54f947068dff73889f194936315dbddfde039ddd0 +size 77039 diff --git a/packages/producer/tests/mapbox-adapter/output/compiled.html b/packages/producer/tests/mapbox-adapter/output/compiled.html index c297955f5c..b6817c5eab 100644 --- a/packages/producer/tests/mapbox-adapter/output/compiled.html +++ b/packages/producer/tests/mapbox-adapter/output/compiled.html @@ -1,166 +1,3 @@ - - - - - - -
- - -
Mapbox adapter test
-
mock: loaded
- - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:6acef96ce08a7243f7e5509efd387c3251892a46d070400f6bcba9b4335ff29b +size 166058 diff --git a/packages/producer/tests/maplibre-adapter/output/compiled.html b/packages/producer/tests/maplibre-adapter/output/compiled.html index 53c85d851f..b52e49c19b 100644 --- a/packages/producer/tests/maplibre-adapter/output/compiled.html +++ b/packages/producer/tests/maplibre-adapter/output/compiled.html @@ -1,155 +1,3 @@ - - - - - - - -
- -
-
MapLibre adapter test
-
51.5074, -0.1278 — London
- - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:86faf6017e9080f8dd671b15f14a941e1dfd9b2fd57ce5b64878640f7e7a0301 +size 966777 diff --git a/packages/producer/tests/missing-host-comp-id/output/compiled.html b/packages/producer/tests/missing-host-comp-id/output/compiled.html index 3534e7d143..a1a70a33c4 100644 --- a/packages/producer/tests/missing-host-comp-id/output/compiled.html +++ b/packages/producer/tests/missing-host-comp-id/output/compiled.html @@ -1,125 +1,3 @@ - - - - - - Missing Host Composition Id - - - -
- -
-
Scoped Text Should Stay Styled
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:afc80b170d25a36a3eabc6cb91e9d49b64a3a63701e94db012be8a560ab6c90f +size 266679 diff --git a/packages/producer/tests/overlay-montage-prod/output/compiled.html b/packages/producer/tests/overlay-montage-prod/output/compiled.html index 2b7ca2e441..e0fb2a2f73 100644 --- a/packages/producer/tests/overlay-montage-prod/output/compiled.html +++ b/packages/producer/tests/overlay-montage-prod/output/compiled.html @@ -1,2919 +1,3 @@ - - - - - - Basel Form Video - - - - - -
- -
-
-
- -
-
-

activate accounts

-
-
- -
- Form 1 - Form 2 - Form 3 -
-
- - - - -
-
-
-
- Column Form - Splat Form - Notch Form -
-
compliance training
- - - - -
-
-
-
- - - -
-
schedule 1:1
- - - - -
-
- - -
- -
- - -
-
- -
- -
- - -
- -
- - -
- -
- - - - -
-
- - -
-
-
-
-
-
- - -
- - -
-
- -
- -
-

first week

-
-

onboarding guide

-
-
- - -
-
- -
- -
-

get started

-
- -
- -
-
- - - - -
- -
- - - - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:47375017bc14f8aa75526b3913919a1c17309914616671f49d17d13ecb61f8f2 +size 2650335 diff --git a/packages/producer/tests/page-side-shader-compositor-render-compat/output/compiled.html b/packages/producer/tests/page-side-shader-compositor-render-compat/output/compiled.html index 532ad78a5f..8a11d82b91 100644 --- a/packages/producer/tests/page-side-shader-compositor-render-compat/output/compiled.html +++ b/packages/producer/tests/page-side-shader-compositor-render-compat/output/compiled.html @@ -1,139 +1,3 @@ - - - - - Page-Side Shader Compositor Regression - - - - - -
- - -
-
-
ALPHA
-
- -
-
-
BETA
-
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:604527d193fd1805c192c0175f89d72d29f7a205435b599ac6619b870a47cb8d +size 172372 diff --git a/packages/producer/tests/parallel-capture-regression/output/compiled.html b/packages/producer/tests/parallel-capture-regression/output/compiled.html index 77056190bd..322cb89e45 100644 --- a/packages/producer/tests/parallel-capture-regression/output/compiled.html +++ b/packages/producer/tests/parallel-capture-regression/output/compiled.html @@ -1,673 +1,3 @@ - - - - - - - -
-
-
-
-
Parallel Capture
-
0
-
-
-
-
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:3087496582bbb989e1e8cabd0d44c11f31b24cdc3a180dde8088896bf68289bc +size 2563843 diff --git a/packages/producer/tests/pip-video-late-host/output/compiled.html b/packages/producer/tests/pip-video-late-host/output/compiled.html index 6326867edc..cfc8c62e9b 100644 --- a/packages/producer/tests/pip-video-late-host/output/compiled.html +++ b/packages/producer/tests/pip-video-late-host/output/compiled.html @@ -1,384 +1,3 @@ - - - - - - - - - -
- -
-
INTRO (0–3s)
-
- - -
- - - - -
PIP VIDEO (3–6s)
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:8dda3c0cafa38f94e360b9383b79eba41b2037943645c713d37204fc030db880 +size 87527 diff --git a/packages/producer/tests/portrait-edge-bleed/output/compiled.html b/packages/producer/tests/portrait-edge-bleed/output/compiled.html index db671cf285..ea8f2a9aa4 100644 --- a/packages/producer/tests/portrait-edge-bleed/output/compiled.html +++ b/packages/producer/tests/portrait-edge-bleed/output/compiled.html @@ -1,31 +1,3 @@ - - - - - - - -
- -
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:af5f05b90c45e004f387bd7203fe0ac75071422fc1e0d837f054d38484f87c1d +size 73712 diff --git a/packages/producer/tests/portrait-edge-bleed/src/sample.mp4 b/packages/producer/tests/portrait-edge-bleed/src/sample.mp4 index 7bfaf7283d..72ac97847c 100644 Binary files a/packages/producer/tests/portrait-edge-bleed/src/sample.mp4 and b/packages/producer/tests/portrait-edge-bleed/src/sample.mp4 differ diff --git a/packages/producer/tests/raf-ball-render-compat/output/compiled.html b/packages/producer/tests/raf-ball-render-compat/output/compiled.html index 513a7b52e5..8fe3a2c24b 100644 --- a/packages/producer/tests/raf-ball-render-compat/output/compiled.html +++ b/packages/producer/tests/raf-ball-render-compat/output/compiled.html @@ -1,23 +1,3 @@ - - - - - - -
- -
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:362ff01000c74232839c6f53382b95acfa274cd79d005628e467b468d4b727e9 +size 981 diff --git a/packages/producer/tests/render-symlinked-assets/output/compiled.html b/packages/producer/tests/render-symlinked-assets/output/compiled.html index 416b7c5a31..bffa713451 100644 --- a/packages/producer/tests/render-symlinked-assets/output/compiled.html +++ b/packages/producer/tests/render-symlinked-assets/output/compiled.html @@ -1,13 +1,3 @@ - - - - - - -
-
-
SYMLINK CSS
-
-
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:3594fb2d8e58b22e5ab7a34d7d7521bd48563440def34458503c832c18e095c3 +size 454 diff --git a/packages/producer/tests/render-video-overlay-stretch/output/compiled.html b/packages/producer/tests/render-video-overlay-stretch/output/compiled.html index f252cdb685..5e93909ff9 100644 --- a/packages/producer/tests/render-video-overlay-stretch/output/compiled.html +++ b/packages/producer/tests/render-video-overlay-stretch/output/compiled.html @@ -1,78 +1,3 @@ - - - - - - Video Overlay Stretch Regression - - - -
- - - - - - -
- CLIP A -
-
- CLIP B -
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5b49e97a5790955c731e273114098622a13dac4f5952cb7d5d0de5bb86e31026 +size 2251 diff --git a/packages/producer/tests/spanish-empire-cdn-inline/output/compiled.html b/packages/producer/tests/spanish-empire-cdn-inline/output/compiled.html index 5dc8f51004..51c6f24c7e 100644 --- a/packages/producer/tests/spanish-empire-cdn-inline/output/compiled.html +++ b/packages/producer/tests/spanish-empire-cdn-inline/output/compiled.html @@ -1,1644 +1,3 @@ - - - - - -The Rise and Reach of the Spanish Empire - - -
- - -
- - -
-
-
- - - - - -
-
-

CIRCA 1492 — 1821

-

At one point in history…

-

one empire connected almost the entire world.

-
-
-
- - -
-
-
-
1492
- - -
- -
ATLANTIC CROSSING
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -

CRUZ DE BORGOÑA

-
- - -
-
SPAIN
-
CARIBBEAN
-
AMERICAS
-
- -
-

THE DISCOVERY ERA

-

It began in the late 15th century,

-

when Spain funded voyages across unknown oceans.

-
-
-
- - -
-
-
EXPANSIÓN
- - -
-
South America
-
Central America
-
Philippines
-
Parts of Europe
-
& Beyond
-
-
-

RAPID EXPANSION

-

Within decades, Spain controlled

-

vast lands across the Americas, Europe, Asia, and beyond.

-
-
-
- - -
-
-
-
ORO
- - -
- - - - - - - - - - - - - - - - - - -
- - -
-
-
-
-
-
-
-
-
-
- - -
-
GOLD RESERVES
91%
-
SILVER OUTPUT
84%
-
GLOBAL TRADE
76%
-
- -
-

POWER & WEALTH

-

Gold and silver flowed into Spain,

-

making it one of the richest and most powerful empires in history.

-
-
-
- - -
-
-
CULTURA
-
-
-
- -
-

Architecture

-

Baroque cathedrals and colonial cities rose across two continents

-
-
-
- Aa -
-

Language

-

Spanish became one of Earth's most spoken languages — 500M+ today

-
-
-
- -
-

Religion

-

Catholic faith spread through missions across the Americas and Asia

-
-
-
-

CULTURAL LEGACY

-

Its influence shaped languages,

-

cultures, and religions across continents.

-
-
-
- - -
-
-
-
CRISIS
-
-
-
- - - - - - - - - -
-
Armed Conflicts
-
Colonial Resistance
-
Economic Strain
-
-
-

THE CHALLENGES

-

But power came at a cost—

-

conflicts, resistance, and economic strain began to weaken its dominance.

-
-
-
- - -
-
-
DECLIVE
- -
- -
-
-
-
1810Mexico rises
-
1816Argentina free
-
1821Peru & Central America
-
1898Cuba, Philippines lost
-
-
-

THE LONG DECLINE

-

Over time, colonies gained independence,

-

and the empire slowly dissolved.

-
-
-
- - -
-
- - - - -
- -
-
-
-

LASTING LEGACY

-

But its legacy…

-

still shapes the world today.

-
-
-
-
- - -
-
-
-
- - - - - - -
-
-

THE STORY OF

-

THE SPANISH
EMPIRE

-
-

1492 – 1898

-
-
-
-
- -
- - - - - - - - - - - - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:2c73953f6b8e45580e7fcad6e14655fa1392f13dc7df9fbaf16e294ce7231093 +size 2014653 diff --git a/packages/producer/tests/style-1-prod/output/compiled.html b/packages/producer/tests/style-1-prod/output/compiled.html index eb92470e17..5c0d03c02b 100644 --- a/packages/producer/tests/style-1-prod/output/compiled.html +++ b/packages/producer/tests/style-1-prod/output/compiled.html @@ -1,1263 +1,3 @@ - - - - - - Geometric Bold - Ikko Tanaka Style - - - - -
- - - -
- -
- - -
- -
-
-
ASKED & ANSWERED
-
- - -
-
-
47%
-
NEED MOTION
-
- - -
-
-
62%
-
INEFFECTIVE
-
-
- - -
-
-
75%
-
LACK SKILLS
-
- - -
-
-
EDITOR AGENT
-
- - - - -
- - -
-
- - - - -
- - - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:65fc299ed8210a04e340de40ca721bb495cc8cf4700c6c71444cd0cfc2bb704c +size 338867 diff --git a/packages/producer/tests/style-10-prod/output/compiled.html b/packages/producer/tests/style-10-prod/output/compiled.html index 1f74cc85f3..455406c665 100644 --- a/packages/producer/tests/style-10-prod/output/compiled.html +++ b/packages/producer/tests/style-10-prod/output/compiled.html @@ -1,896 +1,3 @@ - - - - - - - Ahn Sang-soo Play Mode Video - - - - - - - -
- -
- -
-
- - -
- -
- - - - - - -
- - -
- -
-
-
-
47%
-
NEEDED
MOTION
GRAPHICS
-
-
-
- - -
-
-
-
62%
-
-
ATTENTION LOSS
-
-
-
-
- - -
-
-
-
75%
-
SKILL
GAP
-
-
-
- - -
-
-
-
EDITOR AGENT
-
-
-
- - - - - - -
- - -
-
-
-
- - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:144019900e1c02039542aac16c21f0d9631a8f722256d6566584be0818fffd1a +size 96072 diff --git a/packages/producer/tests/style-11-prod/output/compiled.html b/packages/producer/tests/style-11-prod/output/compiled.html index 624db690e3..b4f5154d50 100644 --- a/packages/producer/tests/style-11-prod/output/compiled.html +++ b/packages/producer/tests/style-11-prod/output/compiled.html @@ -1,2083 +1,3 @@ - - - - - - Editor Agent - Sol LeWitt Style - - - - -
-
-
-
-
- - - - -
- -
-
- Editor Agent - Portrait System -
- -
- Survey Cut - 13.88s -
-
- -
-
-
Editor Agent / Survey System
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
Need motion
-
47%
-
Asked for motion graphics
-
Sharper pacing, clearer transitions, more visual energy.
-
- -
-
Attention drop
-
62%
-
Were stuck with static content
-
The message was right. The cut was not landing.
-
- -
-
Execution gap
-
75%
-
Knew the look, needed the edit
-
- The direction was clear. The hands-on workflow was the bottleneck. -
-
-
- - - - -
- -
-
-
Narration
-
-
- - - - -
- - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:8b7ab3a2dd0adbcdfe61b5548980f533494058bafcb6d8628706dc0c1198e212 +size 679957 diff --git a/packages/producer/tests/style-12-prod/output/compiled.html b/packages/producer/tests/style-12-prod/output/compiled.html index aa64d9f9f4..a36d09ce30 100644 --- a/packages/producer/tests/style-12-prod/output/compiled.html +++ b/packages/producer/tests/style-12-prod/output/compiled.html @@ -1,1568 +1,3 @@ - - - - - - Editor Agent - De Stijl Edition - - - - -
- -
-
-
-
-
-
-
-
- -
-
-
-
-
- - - - -
- - -
- -
- - -
-
-
-
-
47%
-
-
-
-
- -
-
-
62%
-
-
-
-
-
- -
-
-
3/4
-
-
-
-
-
- - - - -
- - -
-
-
Editor Agent
-
-
- - - - -
- - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:64f7d70c1adf6e7fa985962c8ebec4f94a36134b3d3efea59be39e709787fbe5 +size 415598 diff --git a/packages/producer/tests/style-13-prod/output/compiled.html b/packages/producer/tests/style-13-prod/output/compiled.html index 8ac715c9a8..138b430299 100644 --- a/packages/producer/tests/style-13-prod/output/compiled.html +++ b/packages/producer/tests/style-13-prod/output/compiled.html @@ -1,1557 +1,3 @@ - - - - - - Editor Agent - Wim Crouwel Style - - - - -
- -
-
- -
- - -
-
- - -
-
- - - - -
- - - - - -
-
- -
-
-
-
Need Motion Graphics
-
-
-
- - -
-
-
-
Static content reduces engagement
-
-
-
- - -
-
-
-
LACK TECHNICAL SKILLS
-
-
-
-
- - - - -
- - -
-
- - - - -
- - -
-
-
-
-
-
-
-
-
-
-
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:9a2c111d5c8e3bfd998e10dfc40e28d305638f032ae6d85248d6132d133fdacf +size 197335 diff --git a/packages/producer/tests/style-15-prod/output/compiled.html b/packages/producer/tests/style-15-prod/output/compiled.html index 7926829bc4..3fdeae1a1c 100644 --- a/packages/producer/tests/style-15-prod/output/compiled.html +++ b/packages/producer/tests/style-15-prod/output/compiled.html @@ -1,2957 +1,3 @@ - - - - - - Jan Tschichold Typography Video - - - - -
- -
-
- - -
- -
-
-
- - -
-
-
-
- - -
- - - - -
- - -
- -
-
-
-
-
-
-
-
-
-
- - -
-
- -
- -
-
-
- - - - -
- - -
-
-
-
-
-
- -
-
-
75%
-
(3 out of 4)
-
- -
-
LACK
-
THE ESSENTIAL
-
SKILLS
-
- -
-
-
-
-
-
- - - - -
- - -
-
- -
-
-
-
-
-
- - -
-
-
- - - - -
- - -
-
- -
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:1c4b525bacb707b8eeeed1e92ce222ef2f8b05240541b825b1f682814616d11e +size 586589 diff --git a/packages/producer/tests/style-16-prod/output/compiled.html b/packages/producer/tests/style-16-prod/output/compiled.html index cfad1e3ad8..365071c43c 100644 --- a/packages/producer/tests/style-16-prod/output/compiled.html +++ b/packages/producer/tests/style-16-prod/output/compiled.html @@ -1,1477 +1,3 @@ - - - - - - Editor Agent Video - - - - -
- -
- -
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
Survey signal
-
47%
-
OF YOU NEED
MOTION GRAPHICS
-
-
- - -
-
-
-
-
-
Engagement drop
-
62%
-
SAID STATIC CONTENT
REDUCES ENGAGEMENT
-
-
- - - - -
- - -
- -
- - -
-
-
Narration
-
-
- - - - -
- - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:f68e0405c67beba4f294fc35059cbb87e303df6877de3afca0942dfaf23ed92b +size 354093 diff --git a/packages/producer/tests/style-17-prod/output/compiled.html b/packages/producer/tests/style-17-prod/output/compiled.html index eea3c61d86..f5cbb6280e 100644 --- a/packages/producer/tests/style-17-prod/output/compiled.html +++ b/packages/producer/tests/style-17-prod/output/compiled.html @@ -1,1625 +1,3 @@ - - - - - - Editor Agent - Saul Bass Style - - - - -
- -
-
- -
-
-
- - -
- - - - - -
- - -
-
E
-
D
-
I
-
T
-
O
-
R
-
-
A
-
G
-
E
-
N
-
T
-
- - -
- - - -
-
- - - -
-
- - - - - - - - - - - -
- - - - - -
-
-
-
- -
-
-
-
6
-
2
-
%
-
-
-
STATIC CONTENT
-
COSTING YOU ATTENTION
-
-
-
- -
-
- - - - -
- - -
-
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:2e67a41fe4a0e9c9f7b7a33441046d5da6452a2ee69dcdea6789be0395d8b393 +size 143501 diff --git a/packages/producer/tests/style-18-prod/output/compiled.html b/packages/producer/tests/style-18-prod/output/compiled.html index af501279fe..d774975f4a 100644 --- a/packages/producer/tests/style-18-prod/output/compiled.html +++ b/packages/producer/tests/style-18-prod/output/compiled.html @@ -1,1994 +1,3 @@ - - - - - Editor Agent - Agnes Martin Style - - - - -
- -
-
- -
-
- - -
- -
- - -
- -
-
- - - - -
- - - -
- -
- - -
-
- -
-
-
-
-
-
- - -
-
47%
-
needed motion graphics
-
- - -
-
62%
-
static content reduces engagement
-
- - -
-
75%
-
lack technical skills
-
-
- - - - -
- - -
-
- -
- - - - -
- - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:52ce70637c3af64665191c72584b525f0acc79ae24a46b7d0b4c541277dd790a +size 2223522 diff --git a/packages/producer/tests/style-2-prod/output/compiled.html b/packages/producer/tests/style-2-prod/output/compiled.html index bc9f12615b..4fe4b7a2fa 100644 --- a/packages/producer/tests/style-2-prod/output/compiled.html +++ b/packages/producer/tests/style-2-prod/output/compiled.html @@ -1,1585 +1,3 @@ - - - - - - Swiss Grid Video - - - - -
-
2026
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
- - -
- -
- - -
-
-
-
-

SURVEY FINDINGS

-

CONTENT CREATION 2026

-
-
- - - - - - -
- -
- -
-
47%
-
-
MOTION GRAPHICS
-
- - -
-
62%
-
-
STATIC CONTENT
-
- - -
-
75%
-
-
EDITING SKILLS
-
- - - - - - - - - -
- -
-
-
- -
-
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:d0ccea5e8ec0b3b8d9a57aa128d1c0a03493d48fd344f54c52912378b1d0379e +size 550623 diff --git a/packages/producer/tests/style-3-prod/output/compiled.html b/packages/producer/tests/style-3-prod/output/compiled.html index b192df03a4..99e9d9ba70 100644 --- a/packages/producer/tests/style-3-prod/output/compiled.html +++ b/packages/producer/tests/style-3-prod/output/compiled.html @@ -1,1615 +1,3 @@ - - - - - - Swiss Grid - Editor Agent - - - - -
- - Grid - - -
- -
- - -
-
-
-
-

EDITOR AGENT

-

THE SURVEY FINDINGS

-
-
- - - - -
- - -
-
- -
-
47%
-
NEED MOTION GRAPHICS
-
- - -
-
62%
-
LOSING ATTENTION
-
-
-
-
- - -
-
3 OF 4
-
LACK EDITING SKILLS
-
-
-
-
- -
-
-
- - - - - -
- - -
-
- - - - -
- - - - - - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:a045c5849bbd56c5d0c36ebde9f725ec5d8ac7c8cae9eb1329736cef1cf8f651 +size 540633 diff --git a/packages/producer/tests/style-4-prod/output/compiled.html b/packages/producer/tests/style-4-prod/output/compiled.html index 49bc500d21..c8ad91114c 100644 --- a/packages/producer/tests/style-4-prod/output/compiled.html +++ b/packages/producer/tests/style-4-prod/output/compiled.html @@ -1,1824 +1,3 @@ - - - - - - Warm Grain - Editor Agent - - - - -
- -
-
- -
- - - - - -
-
-
-

Editor Agent

-

Design simplified.

-
-
- - - - -
- -
- -
-
-
47%
-
Need Motion Graphics
-
-
- - -
-
62%
-
- - -
-
- - - -
-
Editing Skills
-
- - - - -
- -
-
-
- -
-
- - - - -
- - - - - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:0095619faa1b1cb509fa06b6a51635eb3431e0a4235b421de816ae5e9aaab945 +size 1624099 diff --git a/packages/producer/tests/style-5-prod/output/compiled.html b/packages/producer/tests/style-5-prod/output/compiled.html index 06b75d5453..f33d475344 100644 --- a/packages/producer/tests/style-5-prod/output/compiled.html +++ b/packages/producer/tests/style-5-prod/output/compiled.html @@ -1,2098 +1,3 @@ - - - - - - Digital Grid — Wim Crouwel Style - - - - -
- -
-
-
-
-
- - - - -
- - -
-
-
-
-
- - - - -
- - -
-
- -
-
47% NEED MOTION GRAPHICS
-
-
-
-
-
00%
-
- - -
-
62% LOSE ATTENTION
-
-
-
STATIC
-
-
-
-
MOTION
-
00%
-
-
-
-
- - -
-
75% LACK SKILLS
-
-
- - - - -
-
00%
-
-
-
- - - - -
- - - - - -
-
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3e2515a24714b2fc5ba5aae6b862b56d9984fb49ac38c98a400c3920c95e28 +size 304747 diff --git a/packages/producer/tests/style-6-prod/output/compiled.html b/packages/producer/tests/style-6-prod/output/compiled.html index a55472032c..5aab67e26e 100644 --- a/packages/producer/tests/style-6-prod/output/compiled.html +++ b/packages/producer/tests/style-6-prod/output/compiled.html @@ -1,827 +1,3 @@ - - - - - - - Athletic Bold — Sport Broadcast - - - - - - -
- - - - -
-
- -
- - -
-
WE ASKED
-
WHAT YOU
-
NEEDED.
-
-
-
- - -
- -
-
-
-
-
- - -
-
-
-
- - -
-
47%
-
NEED MOTION GRAPHICS
-
-
- - -
-
62%
-
STATIC LOSES ATTENTION
-
-
- - -
-
- 3 - OUT OF - 4 -
-
LACK SKILLS
-
-
- - -
-
-
-
EDITOR
-
AGENT
-
-
-
-
- - -
-
-
-
-
- - - -
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:30dd2560ce2521d7f66ae8113389ed4152190392f79ec4a3757d610045008e74 +size 71112 diff --git a/packages/producer/tests/style-7-prod/output/compiled.html b/packages/producer/tests/style-7-prod/output/compiled.html index 14ab26c7c7..7eed5bef27 100644 --- a/packages/producer/tests/style-7-prod/output/compiled.html +++ b/packages/producer/tests/style-7-prod/output/compiled.html @@ -1,2110 +1,3 @@ - - - - - - Editor Agent - Velvet Standard - - - - -
- -
-
-
EDITOR AGENT
-
-
- - - - -
- - -
- - - - -
-
-
-
-
47%
-
MOTION GRAPHICS
-
-
-
-
-
-
62%
-
STATIC CONTENT
-
-
-
-
-
-
75%
-
LACK SKILLS
-
-
-
- - - - -
- - -
-
-
-
-
-
-
- - - - -
- - - -
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:b5a2d2f72081ddd2e650a49427d55cb47b142101903bf13f29fba381ca10ffdb +size 3318885 diff --git a/packages/producer/tests/style-8-prod/output/compiled.html b/packages/producer/tests/style-8-prod/output/compiled.html index eb59570bd3..bd55c8d535 100644 --- a/packages/producer/tests/style-8-prod/output/compiled.html +++ b/packages/producer/tests/style-8-prod/output/compiled.html @@ -1,1706 +1,3 @@ - - - - - - Editor Agent - Henryk Tomaszewski Style - - - - - -
- -
- -
-
-
-
-
- - -
- -
- - -
-
47%
-
62%
-
75%
-
- - - - -
- - -
-
-
-
-

EDITOR AGENT

-
- - - - -
- - -
-
-
WE ASKED WHAT YOU NEEDED.
-
FORTY-SEVEN PERCENT OF YOU SAID
-
MOTION GRAPHICS.
-
SIXTY-TWO PERCENT SAID STATIC
-
CONTENT WAS COSTING YOU ATTENTION,
-
AND THREE OUT OF FOUR
-
SAID YOU KNOW THE LOOK
-
YOU WANT BUT DON'T HAVE
-
THE EDITING SKILLS TO GET
-
THERE.
-
SO WE BUILT
-
EDITOR AGENT
-
- - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5274f601aa8c0e4692651b834d9a8937d57a0615381793a2c9f057e355c061de +size 1268028 diff --git a/packages/producer/tests/style-9-prod/output/compiled.html b/packages/producer/tests/style-9-prod/output/compiled.html index f0482cbda7..6e662da1b6 100644 --- a/packages/producer/tests/style-9-prod/output/compiled.html +++ b/packages/producer/tests/style-9-prod/output/compiled.html @@ -1,1658 +1,3 @@ - - - - - - Editor Agent - Play Mode - - - - - -
- -
-
- - -
- - -
-
- -
- - -
- - -
-
-

EDITOR AGENT

-
- - - - -
-
-
- - - - -
-
-
- -
-
-
-
-
47%
-
NEED MOTION GRAPHICS
-
-
- -
-
-
- - -
-
-
-
-
62%
-
STRUGGLE WITH STATIC CONTENT
-
-
- -
-
-
- - -
-
-
-
-
75%
-
LACK EDITING SKILLS
-
-
- -
-
-
-
- - - - -
- - - - - - - - - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a3b624c8a32c0f7e1a3bcbea2659e8b0746c5d9d7350389ea757f45c8dc42a +size 198420 diff --git a/packages/producer/tests/sub-comp-class-selector/output/compiled.html b/packages/producer/tests/sub-comp-class-selector/output/compiled.html index 00d8970b2c..26f1e326eb 100644 --- a/packages/producer/tests/sub-comp-class-selector/output/compiled.html +++ b/packages/producer/tests/sub-comp-class-selector/output/compiled.html @@ -1,380 +1,3 @@ - - - - - - - - -
-
-
ISSUE 1847 REPRO
- - - - - -
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:63c24baa7a64c36982d724fc9ff2534a5ab7a565f3c71dfcc074248c568aa375 +size 169109 diff --git a/packages/producer/tests/sub-comp-height-percent/output/compiled.html b/packages/producer/tests/sub-comp-height-percent/output/compiled.html index e46ba029aa..c162b49c2d 100644 --- a/packages/producer/tests/sub-comp-height-percent/output/compiled.html +++ b/packages/producer/tests/sub-comp-height-percent/output/compiled.html @@ -1,368 +1,3 @@ - - - - - - - - -
-
- - -
-
-
- Centered -
-
-
- - - -
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:34960ab8bae7104cdff36d8c576c812401bc6310d287dedf236518dc88fefc03 +size 86426 diff --git a/packages/producer/tests/sub-comp-id-selector/output/compiled.html b/packages/producer/tests/sub-comp-id-selector/output/compiled.html index 3e08c487cf..7dff85de9e 100644 --- a/packages/producer/tests/sub-comp-id-selector/output/compiled.html +++ b/packages/producer/tests/sub-comp-id-selector/output/compiled.html @@ -1,389 +1,3 @@ - - - - - - - - -
-
-
- HELLO WORLD -
- - - -
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5ce74947905322a2b3ffb1041067666bd93173d4e074f8f5323bc97c4521e7fb +size 174004 diff --git a/packages/producer/tests/sub-comp-t0/output/compiled.html b/packages/producer/tests/sub-comp-t0/output/compiled.html index 4e042ff02f..5594e3c636 100644 --- a/packages/producer/tests/sub-comp-t0/output/compiled.html +++ b/packages/producer/tests/sub-comp-t0/output/compiled.html @@ -1,805 +1,3 @@ - - - - - - - - - -
- -
-
-
BREAKING
-
Transfer confirmed
- - - - - -
- - -
-
-
Second Scene
- - - - - -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:74854a44116e6d0869888793b19cf3843eca78853649dfaf47efc57a8b346ba0 +size 284855 diff --git a/packages/producer/tests/sub-composition-video/output/compiled.html b/packages/producer/tests/sub-composition-video/output/compiled.html index 8702b32eea..d3a2d96045 100644 --- a/packages/producer/tests/sub-composition-video/output/compiled.html +++ b/packages/producer/tests/sub-composition-video/output/compiled.html @@ -1,687 +1,3 @@ - - - - - - Polaroid Speaker - - - - -
- - - - -
- -
- -
- -
- -
- -
-
-
-
-
- - - - -
- - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:54940f7e4f70f0e678127fd1824821c21ea2c28abb56879674cdd36b795b2327 +size 1084645 diff --git a/packages/producer/tests/timed-descendant-visibility/output/compiled.html b/packages/producer/tests/timed-descendant-visibility/output/compiled.html index fdb726ec35..3ef2f2e196 100644 --- a/packages/producer/tests/timed-descendant-visibility/output/compiled.html +++ b/packages/producer/tests/timed-descendant-visibility/output/compiled.html @@ -1,109 +1,3 @@ - - - - - - - - -
-
-
-
-
-
-
-
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:93e349ab3cf09c15b5289d73bf5276a223e45a00463cafc634e3be1cca116377 +size 2515 diff --git a/packages/producer/tests/typegpu-adapter/output/compiled.html b/packages/producer/tests/typegpu-adapter/output/compiled.html index 51a752fa3c..6fb717700e 100644 --- a/packages/producer/tests/typegpu-adapter/output/compiled.html +++ b/packages/producer/tests/typegpu-adapter/output/compiled.html @@ -1,659 +1,3 @@ - - - - - - -
- - -
TypeGPU adapter test
-
WebGPU is seekable.
-
GPU rendering works.
- - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:e834e9b27dc50157bb96bf90bbe7b8d29e344c2104462ba2d45d5595e0ff30b8 +size 2565576 diff --git a/packages/producer/tests/variables-prod/output/compiled.html b/packages/producer/tests/variables-prod/output/compiled.html index 6d7acf5b2c..e3001110a1 100644 --- a/packages/producer/tests/variables-prod/output/compiled.html +++ b/packages/producer/tests/variables-prod/output/compiled.html @@ -1,137 +1,3 @@ - - - - - - - - - -
- -

-

-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5ebed76383e8c88a0b7c0c5528514247ccab3b4b65c71b1b560348aafa957604 +size 268563 diff --git a/packages/producer/tests/vfr-screen-recording/output/compiled.html b/packages/producer/tests/vfr-screen-recording/output/compiled.html index b65d17e535..9f3df193fc 100644 --- a/packages/producer/tests/vfr-screen-recording/output/compiled.html +++ b/packages/producer/tests/vfr-screen-recording/output/compiled.html @@ -1,72 +1,3 @@ - - - - - VFR Screen Recording Regression - - - -
- - -
VFR
-
- - - +version https://git-lfs.github.com/spec/v1 +oid sha256:29936b277efcbd6cd934e5911801e63403cb10a6da5404b2be5c5e7ce5d322f0 +size 89971 diff --git a/packages/producer/tests/video-hfid-no-id/output/compiled.html b/packages/producer/tests/video-hfid-no-id/output/compiled.html index d5dfc46901..a135ad97c2 100644 --- a/packages/producer/tests/video-hfid-no-id/output/compiled.html +++ b/packages/producer/tests/video-hfid-no-id/output/compiled.html @@ -1,61 +1,3 @@ - - - - - - - - - -
- - - -
- FOOTAGE -
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:d521b87458369854de7f54f5a7cc20c58797f8bb88e1247e30091fbab97de3d2 +size 75060 diff --git a/packages/producer/tests/vignelli-stacking/output/compiled.html b/packages/producer/tests/vignelli-stacking/output/compiled.html index 61337f2214..9361aff858 100644 --- a/packages/producer/tests/vignelli-stacking/output/compiled.html +++ b/packages/producer/tests/vignelli-stacking/output/compiled.html @@ -1,487 +1,3 @@ - - - - - - - Vignelli Style Video - - - - - -
-
- -
- -
-
-
-
PRUEBA
-
-
- -
-
-
GRABAR
CONTENIDO
-
-
- -
-
-
-
SER YO
MISMA
-
-
-
- -
-
-
-
- - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:2b211f4cb757ba7c392c16eb1bfa58d8aebd7d704ffacc5a43fe36e021e7006e +size 301676 diff --git a/packages/producer/tests/webgl-video-texture-render-compat/output/compiled.html b/packages/producer/tests/webgl-video-texture-render-compat/output/compiled.html index e2d424c515..d008bcd9eb 100644 --- a/packages/producer/tests/webgl-video-texture-render-compat/output/compiled.html +++ b/packages/producer/tests/webgl-video-texture-render-compat/output/compiled.html @@ -1,106 +1,3 @@ - - - - - - -
- - - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:253e2b94f1babe8290f5f1c20e51c0d79d8b21cf1af4fecfa6a0d22733d9298d +size 4110 diff --git a/packages/producer/tests/webm-transparency/output/compiled.html b/packages/producer/tests/webm-transparency/output/compiled.html index e44e07d656..d64460622d 100644 --- a/packages/producer/tests/webm-transparency/output/compiled.html +++ b/packages/producer/tests/webm-transparency/output/compiled.html @@ -1,578 +1,3 @@ - - - - - - - -
- -
- - -
Overlay Test
- - - -
- - +version https://git-lfs.github.com/spec/v1 +oid sha256:0a58f6769219ee42b16805f01f00fb0958f4d1402e3c2fd82b19273eed14c4e5 +size 2562420