<roblox version="4">
  <Item class="ServerScriptService" referent="0">
    <Properties>
      <string name="Name">ServerScriptService</string>
    </Properties>
    <Item class="Script" referent="1">
      <Properties>
        <string name="Name">DuelServer</string>
        <token name="RunContext">0</token>
        <string name="Source"><![CDATA[local Players=game:GetService("Players") local RS=game:GetService("ReplicatedStorage") local Run=game:GetService("RunService") local Tween=game:GetService("TweenService") local Debris=game:GetService("Debris") local Lighting=game:GetService("Lighting")
local old=workspace:FindFirstChild("AetherDuel") if old then old:Destroy() end local world=Instance.new("Folder",workspace) world.Name="AetherDuel"
local rem=Instance.new("Folder",RS) rem.Name="DuelRemotes" local act=Instance.new("RemoteEvent",rem) act.Name="Action" local sync=Instance.new("RemoteEvent",rem) sync.Name="Sync" local note=Instance.new("RemoteEvent",rem) note.Name="Notice"
local C={dark=Color3.fromRGB(22,26,39),blue=Color3.fromRGB(67,167,255),purple=Color3.fromRGB(166,92,255),gold=Color3.fromRGB(255,198,78),red=Color3.fromRGB(244,77,91),white=Color3.fromRGB(238,242,250)}
local function part(n,s,cf,c,m) local p=Instance.new("Part",world) p.Name=n p.Size=s p.CFrame=cf p.Color=c p.Material=m or Enum.Material.SmoothPlastic p.Anchored=true p.TopSurface=Enum.SurfaceType.Smooth p.BottomSurface=Enum.SurfaceType.Smooth return p end
part("VoidBase",Vector3.new(300,6,300),CFrame.new(0,-16,0),C.dark,Enum.Material.Slate)
local arena=part("Arena",Vector3.new(110,4,110),CFrame.new(0,0,0),Color3.fromRGB(49,57,75),Enum.Material.Slate)
for i=1,24 do local a=i/24*math.pi*2 local p=part("Rune",Vector3.new(8,.3,2),CFrame.new(math.cos(a)*46,2.2,math.sin(a)*46)*CFrame.Angles(0,-a,0),i%2==0 and C.blue or C.purple,Enum.Material.Neon) p.CanCollide=false end
for _,v in ipairs({{-46,-46},{46,-46},{-46,46},{46,46}}) do part("Pillar",Vector3.new(8,28,8),CFrame.new(v[1],14,v[2]),C.dark,Enum.Material.Metal) part("PillarGlow",Vector3.new(9,2,9),CFrame.new(v[1],27,v[2]),C.gold,Enum.Material.Neon) end
local spawn=Instance.new("SpawnLocation",world) spawn.Name="DuelSpawn" spawn.Size=Vector3.new(14,1,14) spawn.CFrame=CFrame.new(0,3,34) spawn.Anchored=true spawn.Neutral=true spawn.Transparency=.35 spawn.Color=C.blue
local function orb(pos,color,radius) local p=part("HitEffect",Vector3.new(2,2,2),CFrame.new(pos),color,Enum.Material.Neon) p.Shape=Enum.PartType.Ball p.CanCollide=false Tween:Create(p,TweenInfo.new(.22),{Size=Vector3.new(radius,radius,radius),Transparency=1}):Play() Debris:AddItem(p,.3) end
local bot=Instance.new("Model",world) bot.Name="AetherChampion" local br=part("BotRoot",Vector3.new(4,6,3),CFrame.new(0,5,-28),C.red,Enum.Material.Metal) br.Parent=bot local bh=part("BotHead",Vector3.new(3.5,3.5,3.5),CFrame.new(0,9,-28),C.white) bh.Shape=Enum.PartType.Ball bh.Parent=bot local weld=Instance.new("WeldConstraint",bh) weld.Part0=br weld.Part1=bh local hum=Instance.new("Humanoid",bot) hum.MaxHealth=320 hum.Health=320 bot.PrimaryPart=br
local sessions={} local botNext=0 local botBlocking=false
local function send(p) local s=sessions[p] if s then sync:FireClient(p,{stamina=s.stamina,combo=s.combo,wins=s.wins,botHealth=hum.Health,botMax=hum.MaxHealth,round=s.round,blocking=s.blocking}) end end
local function resetRound(p,won) local s=sessions[p] if not s then return end s.round+=1 s.combo=0 s.stamina=100 s.blocking=false if won then s.wins+=1 end hum.Health=hum.MaxHealth bot:PivotTo(CFrame.new(0,5,-28)) local root=p.Character and p.Character:FindFirstChild("HumanoidRootPart") local ph=p.Character and p.Character:FindFirstChildOfClass("Humanoid") if root then root.CFrame=CFrame.new(0,5,28) end if ph then ph.Health=ph.MaxHealth end note:FireClient(p,won and "ROUND WON" or "ROUND RESET") send(p) end
local function hitBot(p,damage,range,knock) local root=p.Character and p.Character:FindFirstChild("HumanoidRootPart") if not root or (br.Position-root.Position).Magnitude>range then return false end if botBlocking then damage=math.floor(damage*.25) end hum:TakeDamage(damage) orb(br.Position,C.gold,8) if knock then bot:PivotTo(br.CFrame+root.CFrame.LookVector*knock) end if hum.Health<=0 then resetRound(p,true) end return true end
act.OnServerEvent:Connect(function(p,kind,on) local s=sessions[p] local char=p.Character local root=char and char:FindFirstChild("HumanoidRootPart") if not s or not root then return end local now=os.clock()
 if kind=="Block" then s.blocking=on==true s.parryUntil=s.blocking and now+.28 or 0 send(p) return end
 if kind=="Light" and now>=s.nextLight and s.stamina>=10 then s.nextLight=now+.32 s.stamina-=10 s.combo=(now-s.comboAt<.9) and s.combo%4+1 or 1 s.comboAt=now hitBot(p,10+s.combo*3,9,s.combo==4 and 7 or nil)
 elseif kind=="Heavy" and now>=s.heavyAt and s.stamina>=28 then s.heavyAt=now+2 s.stamina-=28 hitBot(p,34,11,10)
 elseif kind=="Dash" and now>=s.dashAt and s.stamina>=24 then s.dashAt=now+3 s.stamina-=24 root.AssemblyLinearVelocity=root.CFrame.LookVector*72+Vector3.new(0,4,0) task.delay(.16,function() if root.Parent then hitBot(p,24,12,5) end end) end send(p)
end)
local function setup(p) sessions[p]={stamina=100,combo=0,comboAt=0,nextLight=0,heavyAt=0,dashAt=0,blocking=false,parryUntil=0,wins=0,round=1} p.CharacterAdded:Connect(function(c) local h=c:WaitForChild("Humanoid") h.MaxHealth=180 h.Health=180 task.wait(.2) resetRound(p,false) end) end
Players.PlayerAdded:Connect(setup) for _,p in ipairs(Players:GetPlayers()) do setup(p) end Players.PlayerRemoving:Connect(function(p) sessions[p]=nil end)
Run.Heartbeat:Connect(function(dt) for p,s in pairs(sessions) do s.stamina=math.min(100,s.stamina+18*dt) local root=p.Character and p.Character:FindFirstChild("HumanoidRootPart") local ph=p.Character and p.Character:FindFirstChildOfClass("Humanoid") if root and ph and ph.Health>0 then local delta=root.Position-br.Position local dist=delta.Magnitude if dist>8 then bot:PivotTo(CFrame.lookAt(br.Position+delta.Unit*math.min(dist,10*dt),root.Position)) end if dist<10 and os.clock()>botNext then botNext=os.clock()+1.1 botBlocking=math.random()<.24 if s.blocking and os.clock()<s.parryUntil then note:FireClient(p,"PERFECT PARRY") orb(br.Position,C.blue,11) br.AssemblyLinearVelocity=-br.CFrame.LookVector*35 else ph:TakeDamage(s.blocking and 6 or 18) orb(root.Position,C.red,7) if ph.Health<=0 then resetRound(p,false) end end task.delay(.45,function() botBlocking=false end) end end end end)
task.spawn(function() while task.wait(.15) do for p in pairs(sessions) do send(p) end end end)
Lighting.ClockTime=20 Lighting.Brightness=2 Lighting.Ambient=Color3.fromRGB(60,67,91) Lighting.OutdoorAmbient=Color3.fromRGB(80,89,118)
]]></string>
      </Properties>
    </Item>
    <Item class="Script" referent="2">
      <Properties>
        <string name="Name">PortfolioPolish</string>
        <token name="RunContext">0</token>
        <string name="Source"><![CDATA[local Players = game:GetService("Players")
local Lighting = game:GetService("Lighting")

local PROJECTS = {
	AetherDuel = {title = "AETHER DUEL", accent = Color3.fromRGB(67, 167, 255)},
	SkylineSprint = {title = "SKYLINE SPRINT", accent = Color3.fromRGB(45, 200, 255)},
	BomblineGrid = {title = "BOMBLINE GRID", accent = Color3.fromRGB(255, 193, 70)},
	SignalSiege = {title = "SIGNAL SIEGE", accent = Color3.fromRGB(55, 190, 255)},
	BuildAndSaveWorld = {title = "BUILD & SAVE", accent = Color3.fromRGB(255, 208, 84)},
	RailRushWorld = {title = "RAIL RUSH", accent = Color3.fromRGB(104, 205, 255)},
	FreightyardArena = {title = "TEAM SHOTGUN", accent = Color3.fromRGB(255, 133, 73)},
	CrystalFoundry = {title = "CRYSTAL FOUNDRY", accent = Color3.fromRGB(151, 103, 255)},
}

local function findProject()
	for name, config in pairs(PROJECTS) do
		local world = workspace:FindFirstChild(name)
		if world then return world, name, config end
	end
	for _ = 1, 100 do
		task.wait(0.1)
		for name, config in pairs(PROJECTS) do
			local world = workspace:FindFirstChild(name)
			if world then return world, name, config end
		end
	end
end

local world, projectName, config = findProject()
if not world then return end
workspace:SetAttribute("PortfolioProject", projectName)
workspace:SetAttribute("PortfolioTitle", config.title)
workspace:SetAttribute("PortfolioAccent", config.accent)

local polish = Instance.new("Folder")
polish.Name = "PresentationPolish"
polish.Parent = world

local function makePart(name, size, cframe, color, material, parent)
	local part = Instance.new("Part")
	part.Name = name
	part.Size = size
	part.CFrame = cframe
	part.Color = color
	part.Material = material or Enum.Material.SmoothPlastic
	part.Anchored = true
	part.TopSurface = Enum.SurfaceType.Smooth
	part.BottomSurface = Enum.SurfaceType.Smooth
	part.Parent = parent or polish
	return part
end

local function billboard(position, text, accent)
	local anchor = makePart("Landmark", Vector3.new(1, 1, 1), CFrame.new(position), accent, Enum.Material.Neon)
	anchor.Transparency = 1
	anchor.CanCollide = false
	local gui = Instance.new("BillboardGui")
	gui.Size = UDim2.fromOffset(420, 90)
	gui.AlwaysOnTop = false
	gui.MaxDistance = 260
	gui.Parent = anchor
	local label = Instance.new("TextLabel")
	label.Size = UDim2.fromScale(1, 1)
	label.BackgroundTransparency = 1
	label.Text = text
	label.TextColor3 = Color3.new(1, 1, 1)
	label.TextStrokeTransparency = 0.25
	label.Font = Enum.Font.GothamBlack
	label.TextScaled = true
	label.Parent = gui
end

local function barrier(size, position)
	local wall = makePart("SafetyBarrier", size, CFrame.new(position), Color3.new(1, 1, 1), Enum.Material.SmoothPlastic)
	wall.Transparency = 1
	wall.CanCollide = true
	wall.CanQuery = false
end

local function lamp(position, accent)
	makePart("LampPost", Vector3.new(1, 12, 1), CFrame.new(position + Vector3.new(0, 6, 0)), Color3.fromRGB(47, 53, 63), Enum.Material.Metal)
	local head = makePart("LampHead", Vector3.new(3, 1, 3), CFrame.new(position + Vector3.new(0, 12, 0)), accent, Enum.Material.Neon)
	head.CanCollide = false
	local light = Instance.new("PointLight")
	light.Color = accent
	light.Range = 24
	light.Brightness = 1.2
	light.Parent = head
end

local dressers = {}

dressers.AetherDuel = function()
	billboard(Vector3.new(0, 35, -49), "AETHER DUEL", config.accent)
	for _, position in ipairs({Vector3.new(-38, 2, 0), Vector3.new(38, 2, 0), Vector3.new(0, 2, -38), Vector3.new(0, 2, 38)}) do lamp(position, config.accent) end
	barrier(Vector3.new(116, 18, 2), Vector3.new(0, 8, -56)); barrier(Vector3.new(116, 18, 2), Vector3.new(0, 8, 56))
	barrier(Vector3.new(2, 18, 116), Vector3.new(-56, 8, 0)); barrier(Vector3.new(2, 18, 116), Vector3.new(56, 8, 0))
end

dressers.SkylineSprint = function()
	billboard(Vector3.new(0, 34, -150), "SKYLINE SPRINT", config.accent)
	for _, position in ipairs({Vector3.new(-185, 2, -168), Vector3.new(-90, 2, -168), Vector3.new(0, 2, -168), Vector3.new(90, 2, -168), Vector3.new(185, 2, -168)}) do lamp(position, config.accent) end
end

dressers.BomblineGrid = function()
	billboard(Vector3.new(0, 29, -82), "BOMBLINE GRID", config.accent)
	barrier(Vector3.new(170, 12, 2), Vector3.new(0, 5, -83)); barrier(Vector3.new(170, 12, 2), Vector3.new(0, 5, 83))
	barrier(Vector3.new(2, 12, 170), Vector3.new(-83, 5, 0)); barrier(Vector3.new(2, 12, 170), Vector3.new(83, 5, 0))
end

dressers.SignalSiege = function()
	billboard(Vector3.new(155, 39, 18), "PROTECT THE SIGNAL", config.accent)
	for _, position in ipairs({Vector3.new(-170, 1, -140), Vector3.new(-80, 1, 35), Vector3.new(45, 1, 55), Vector3.new(145, 1, 100)}) do lamp(position, config.accent) end
end

dressers.BuildAndSaveWorld = function()
	billboard(Vector3.new(0, 25, 36), "YOUR WORKSHOP", config.accent)
	for _, position in ipairs({Vector3.new(-43, 0, -43), Vector3.new(43, 0, -43), Vector3.new(-43, 0, 43), Vector3.new(43, 0, 43)}) do lamp(position, config.accent) end
end

dressers.RailRushWorld = function()
	billboard(Vector3.new(0, 53, 4), "RAIL RUSH", config.accent)
	for _, position in ipairs({Vector3.new(-18, 32, 8), Vector3.new(18, 32, 8), Vector3.new(-18, 30, -10), Vector3.new(18, 30, -10)}) do lamp(position, config.accent) end
end

dressers.FreightyardArena = function()
	billboard(Vector3.new(0, 29, -61), "FREIGHTYARD SHOWDOWN", config.accent)
	for _, position in ipairs({Vector3.new(-70, 0, -50), Vector3.new(-25, 0, 50), Vector3.new(25, 0, -50), Vector3.new(70, 0, 50)}) do lamp(position, config.accent) end
end

dressers.CrystalFoundry = function()
	billboard(Vector3.new(0, 28, 73), "CRYSTAL FOUNDRY", config.accent)
	for _, position in ipairs({Vector3.new(-32, 0, 35), Vector3.new(32, 0, 35), Vector3.new(-32, 0, 70), Vector3.new(32, 0, 70)}) do lamp(position, config.accent) end
end

if dressers[projectName] then dressers[projectName]() end

local colorCorrection = Instance.new("ColorCorrectionEffect")
colorCorrection.Name = "PortfolioColor"
colorCorrection.Brightness = 0.02
colorCorrection.Contrast = 0.08
colorCorrection.Saturation = 0.06
colorCorrection.Parent = Lighting

local function dressCharacter(character)
	local torso = character:WaitForChild("UpperTorso", 3) or character:WaitForChild("Torso", 3)
	if not torso or character:FindFirstChild("PortfolioArmor") then return end
	local folder = Instance.new("Folder")
	folder.Name = "PortfolioArmor"
	folder.Parent = character
	for _, offset in ipairs({-1, 1}) do
		local plate = Instance.new("Part")
		plate.Name = "ShoulderPlate"
		plate.Size = Vector3.new(1.5, 0.55, 1.8)
		plate.Color = config.accent
		plate.Material = Enum.Material.Metal
		plate.CanCollide = false
		plate.Massless = true
		plate.CFrame = torso.CFrame * CFrame.new(offset * 1.55, 0.75, 0)
		plate.Parent = folder
		local weld = Instance.new("WeldConstraint")
		weld.Part0 = torso
		weld.Part1 = plate
		weld.Parent = plate
	end
end

local function stabilizeCharacter(character)
	local humanoid = character:WaitForChild("Humanoid", 8)
	local root = character:WaitForChild("HumanoidRootPart", 8)
	if not humanoid or not root then return end

	-- Every portfolio map is generated by a server script. On a cold Studio play,
	-- Roblox can create the avatar before that map''s SpawnLocation is ready.
	local spawnLocation = world:FindFirstChildWhichIsA("SpawnLocation", true)
	if spawnLocation then
		root.AssemblyLinearVelocity = Vector3.zero
		root.AssemblyAngularVelocity = Vector3.zero
		root.CFrame = spawnLocation.CFrame * CFrame.new(0, 4, 0)
	end

	local forceField = Instance.new("ForceField")
	forceField.Name = "SpawnProtection"
	forceField.Visible = false
	forceField.Parent = character
	humanoid.Health = humanoid.MaxHealth

	local safeCFrame = root.CFrame
	local started = os.clock()
	local connection
	connection = game:GetService("RunService").Heartbeat:Connect(function()
		if not character.Parent or humanoid.Health <= 0 then
			connection:Disconnect()
			return
		end
		if root.Position.Y < -40 then
			root.AssemblyLinearVelocity = Vector3.zero
			root.AssemblyAngularVelocity = Vector3.zero
			root.CFrame = safeCFrame
			humanoid.Health = humanoid.MaxHealth
		end
		if os.clock() - started >= 8 then
			connection:Disconnect()
			if forceField.Parent then forceField:Destroy() end
		end
	end)
end

local function setupPlayer(player)
	player.CharacterAdded:Connect(function(character)
		task.spawn(stabilizeCharacter, character)
		task.spawn(dressCharacter, character)
	end)
	if player.Character then
		task.spawn(stabilizeCharacter, player.Character)
		task.spawn(dressCharacter, player.Character)
	end
end
Players.PlayerAdded:Connect(setupPlayer)
for _, player in ipairs(Players:GetPlayers()) do setupPlayer(player) end
]]></string>
      </Properties>
    </Item>
  </Item>
  <Item class="StarterPlayer" referent="3">
    <Properties>
      <string name="Name">StarterPlayer</string>
    </Properties>
    <Item class="StarterPlayerScripts" referent="4">
      <Properties>
        <string name="Name">StarterPlayerScripts</string>
      </Properties>
      <Item class="LocalScript" referent="5">
        <Properties>
          <string name="Name">DuelClient</string>
          <string name="Source"><![CDATA[local Players=game:GetService("Players") local RS=game:GetService("ReplicatedStorage") local UIS=game:GetService("UserInputService") local p=Players.LocalPlayer local rem=RS:WaitForChild("DuelRemotes")
local gui=Instance.new("ScreenGui",p:WaitForChild("PlayerGui")) gui.ResetOnSpawn=false gui.Name="DuelHUD"
local function corner(x) local c=Instance.new("UICorner",x) c.CornerRadius=UDim.new(0,10) end local function txt(par,v,pos,size,font,col) local t=Instance.new("TextLabel",par) t.BackgroundTransparency=1 t.Position=pos t.Size=size t.Text=v t.Font=font or Enum.Font.Gotham t.TextColor3=col or Color3.fromRGB(240,244,250) t.TextSize=15 t.TextXAlignment=Enum.TextXAlignment.Left return t end
local card=Instance.new("Frame",gui) card.Position=UDim2.fromOffset(20,20) card.Size=UDim2.fromOffset(355,172) card.BackgroundColor3=Color3.fromRGB(18,22,34) card.BackgroundTransparency=.05 corner(card)
local title=txt(card,"AETHER DUEL",UDim2.fromOffset(16,12),UDim2.fromOffset(320,26),Enum.Font.GothamBlack,Color3.fromRGB(67,167,255)) title.TextSize=21
local round=txt(card,"ROUND 1  ·  WINS 0",UDim2.fromOffset(16,43),UDim2.fromOffset(320,20),Enum.Font.GothamBold)
local enemy=txt(card,"CHAMPION 320 / 320",UDim2.fromOffset(16,70),UDim2.fromOffset(320,20),Enum.Font.GothamBold,Color3.fromRGB(244,77,91))
local stamina=txt(card,"STAMINA 100",UDim2.fromOffset(16,97),UDim2.fromOffset(320,20),Enum.Font.GothamBold,Color3.fromRGB(120,230,155))
local controls=txt(card,"CLICK light combo  ·  E heavy  ·  Q dash\nHOLD F block  ·  tap F on impact to parry",UDim2.fromOffset(16,124),UDim2.fromOffset(325,40),Enum.Font.GothamMedium,Color3.fromRGB(182,195,213)) controls.TextSize=12 controls.TextWrapped=true
local banner=txt(gui,"",UDim2.new(.5,-280,.2,0),UDim2.fromOffset(560,50),Enum.Font.GothamBlack,Color3.fromRGB(255,198,78)) banner.TextXAlignment=Enum.TextXAlignment.Center banner.TextSize=26
rem.Notice.OnClientEvent:Connect(function(m) banner.Text=m task.delay(1.2,function() if banner.Text==m then banner.Text="" end end) end)
rem.Sync.OnClientEvent:Connect(function(s) round.Text=string.format("ROUND %d  ·  WINS %d  ·  COMBO %d",s.round,s.wins,s.combo) enemy.Text=string.format("CHAMPION %d / %d",math.max(0,math.ceil(s.botHealth)),s.botMax) stamina.Text="STAMINA "..math.floor(s.stamina) end)
local mouse=p:GetMouse() mouse.Button1Down:Connect(function() rem.Action:FireServer("Light") end)
UIS.InputBegan:Connect(function(i,g) if g then return end if i.KeyCode==Enum.KeyCode.E then rem.Action:FireServer("Heavy") elseif i.KeyCode==Enum.KeyCode.Q then rem.Action:FireServer("Dash") elseif i.KeyCode==Enum.KeyCode.F then rem.Action:FireServer("Block",true) end end)
UIS.InputEnded:Connect(function(i) if i.KeyCode==Enum.KeyCode.F then rem.Action:FireServer("Block",false) end end)
]]></string>
        </Properties>
      </Item>
      <Item class="LocalScript" referent="6">
        <Properties>
          <string name="Name">PortfolioPolish</string>
          <string name="Source"><![CDATA[local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local projectName = workspace:GetAttribute("PortfolioProject")
if not projectName then
	workspace:GetAttributeChangedSignal("PortfolioProject"):Wait()
	projectName = workspace:GetAttribute("PortfolioProject")
end

local title = workspace:GetAttribute("PortfolioTitle") or "NAKEL GAMEPLAY DEMO"
local accent = workspace:GetAttribute("PortfolioAccent") or Color3.fromRGB(68, 180, 255)
local instructions = {
	AetherDuel = "CLICK COMBO  •  E HEAVY  •  Q DASH  •  HOLD F BLOCK",
	SkylineSprint = "W/S THROTTLE  •  A/D STEER  •  SHIFT DRIFT  •  SPACE BOOST",
	BomblineGrid = "WATCH WARNING TILES  •  MOVE BEFORE THE BLAST",
	SignalSiege = "CLICK GOLD PADS  •  CLICK TOWERS TO SELECT  •  U UPGRADE",
	BuildAndSaveWorld = "B BUILD MODE  •  1–4 ITEM  •  R ROTATE  •  X DELETE",
	RailRushWorld = "E START  •  A/D CHOOSE ROUTE  •  SPACE JUMP",
	FreightyardArena = "CLICK FIRE  •  R RELOAD  •  USE COVER",
	CrystalFoundry = "CLICK OR E TO HARVEST  •  E AT STATIONS TO UPGRADE",
}

local gui = Instance.new("ScreenGui")
gui.Name = "PortfolioPresentation"
gui.IgnoreGuiInset = true
gui.ResetOnSpawn = false
gui.DisplayOrder = 100
gui.Parent = player:WaitForChild("PlayerGui")

local intro = Instance.new("Frame")
intro.Size = UDim2.fromScale(1, 1)
intro.BackgroundColor3 = Color3.fromRGB(7, 11, 18)
intro.Parent = gui

local line = Instance.new("Frame")
line.AnchorPoint = Vector2.new(0.5, 0.5)
line.Position = UDim2.fromScale(0.5, 0.58)
line.Size = UDim2.fromOffset(0, 3)
line.BackgroundColor3 = accent
line.BorderSizePixel = 0
line.Parent = intro

local heading = Instance.new("TextLabel")
heading.AnchorPoint = Vector2.new(0.5, 0.5)
heading.Position = UDim2.fromScale(0.5, 0.45)
heading.Size = UDim2.new(0.9, 0, 0, 80)
heading.BackgroundTransparency = 1
heading.Text = title
heading.TextColor3 = Color3.new(1, 1, 1)
heading.TextTransparency = 1
heading.Font = Enum.Font.GothamBlack
heading.TextScaled = true
heading.Parent = intro
local sizeConstraint = Instance.new("UITextSizeConstraint")
sizeConstraint.MaxTextSize = 46
sizeConstraint.MinTextSize = 24
sizeConstraint.Parent = heading

local subtitle = Instance.new("TextLabel")
subtitle.AnchorPoint = Vector2.new(0.5, 0.5)
subtitle.Position = UDim2.fromScale(0.5, 0.66)
subtitle.Size = UDim2.new(0.9, 0, 0, 40)
subtitle.BackgroundTransparency = 1
subtitle.Text = instructions[projectName] or "PLAYABLE PORTFOLIO PROTOTYPE"
subtitle.TextColor3 = Color3.fromRGB(188, 202, 219)
subtitle.TextTransparency = 1
subtitle.Font = Enum.Font.GothamBold
subtitle.TextSize = 14
subtitle.TextWrapped = true
subtitle.Parent = intro

TweenService:Create(heading, TweenInfo.new(0.35), {TextTransparency = 0}):Play()
TweenService:Create(line, TweenInfo.new(0.45), {Size = UDim2.new(0.5, 0, 0, 3)}):Play()
TweenService:Create(subtitle, TweenInfo.new(0.4), {TextTransparency = 0}):Play()
task.delay(1.8, function()
	TweenService:Create(intro, TweenInfo.new(0.45), {BackgroundTransparency = 1}):Play()
	TweenService:Create(heading, TweenInfo.new(0.3), {TextTransparency = 1}):Play()
	TweenService:Create(subtitle, TweenInfo.new(0.3), {TextTransparency = 1}):Play()
	TweenService:Create(line, TweenInfo.new(0.3), {BackgroundTransparency = 1}):Play()
	task.wait(0.5)
	intro:Destroy()
end)

if UserInputService.TouchEnabled then
	local touchHint = Instance.new("TextLabel")
	touchHint.AnchorPoint = Vector2.new(0.5, 1)
	touchHint.Position = UDim2.new(0.5, 0, 1, -10)
	touchHint.Size = UDim2.new(0.92, 0, 0, 26)
	touchHint.BackgroundColor3 = Color3.fromRGB(10, 16, 25)
	touchHint.BackgroundTransparency = 0.18
	touchHint.Text = "Desktop controls recommended for this portfolio build"
	touchHint.TextColor3 = Color3.fromRGB(213, 221, 232)
	touchHint.Font = Enum.Font.GothamMedium
	touchHint.TextSize = 11
	touchHint.Parent = gui
	Instance.new("UICorner", touchHint).CornerRadius = UDim.new(0, 8)
end
]]></string>
        </Properties>
      </Item>
    </Item>
  </Item>
  <Item class="Workspace" referent="7">
    <Properties>
      <string name="Name">Workspace</string>
      <bool name="NeedsPivotMigration">false</bool>
      <bool name="StreamingEnabled">true</bool>
    </Properties>
  </Item>
</roblox>